From 86abca9e308def2f1e4ac92b03580d0f03a9c28a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 3 Nov 2025 18:47:02 +0000 Subject: [PATCH 1/9] Initial plan From 08177a573d9e5278f53ff9c1b49f08abeb63d9d8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 3 Nov 2025 18:57:22 +0000 Subject: [PATCH 2/9] Add Blockly integration demo for OT-2 custom functions Co-authored-by: sgbaird <45469701+sgbaird@users.noreply.github.com> --- .gitignore | 1 + CHANGELOG.md | 6 + scripts/BLOCKLY_README.md | 161 +++++++++++++ scripts/blockly_concept_demo.html | 363 ++++++++++++++++++++++++++++++ scripts/blockly_concept_demo.png | Bin 0 -> 378857 bytes scripts/blockly_example.py | 186 +++++++++++++++ scripts/blockly_ot2_demo.html | 343 ++++++++++++++++++++++++++++ 7 files changed, 1060 insertions(+) create mode 100644 scripts/BLOCKLY_README.md create mode 100644 scripts/blockly_concept_demo.html create mode 100644 scripts/blockly_concept_demo.png create mode 100644 scripts/blockly_example.py create mode 100644 scripts/blockly_ot2_demo.html diff --git a/.gitignore b/.gitignore index 52cd3236..e26b00e5 100644 --- a/.gitignore +++ b/.gitignore @@ -72,3 +72,4 @@ src/ac_training_lab/apriltag_demo/tag25_09_00000.png src/ac_training_lab/apriltag_demo/tag36_11_00000.png src/ac_training_lab/apriltag_demo/tag49_12_00000.png scripts/playwright/sem-open-close/chat.json +scripts/blockly_demo/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d8cd7b1..a3519da4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ ## [Unreleased] ### Added - Support for both `rpicam-vid` (Raspberry Pi OS Trixie) and `libcamera-vid` (Raspberry Pi OS Bookworm) camera commands in `src/ac_training_lab/picam/device.py` to ensure compatibility across different OS versions. +- Blockly integration demonstration showing how custom visual programming blocks can be created for OT-2 functions from `OT2mqtt.py`: + - `scripts/blockly_concept_demo.html`: Visual demonstration of block-to-code mapping + - `scripts/blockly_ot2_demo.html`: Interactive Blockly editor with custom OT-2 blocks + - `scripts/blockly_example.py`: Python example showing generated code patterns + - `scripts/BLOCKLY_README.md`: Comprehensive documentation for Blockly integration + - Custom blocks for `mix_color()`, `move_sensor_back()`, and `protocol.home()` functions ### Fixed - Ctrl+C interrupt handling in `src/ac_training_lab/picam/device.py` now properly exits the streaming loop instead of restarting. diff --git a/scripts/BLOCKLY_README.md b/scripts/BLOCKLY_README.md new file mode 100644 index 00000000..82866dc1 --- /dev/null +++ b/scripts/BLOCKLY_README.md @@ -0,0 +1,161 @@ +# Blockly OT-2 Integration Demo + +This directory contains a demonstration of how [Blockly](https://developers.google.com/blockly) can be integrated with custom functions from the AC Training Lab, specifically the OT-2 liquid handler functions from `OT2mqtt.py`. + +## Overview + +Blockly is a visual programming library that allows users to create workflows by dragging and dropping blocks. This demo shows how to: + +1. Create custom Blockly blocks that represent OT-2 functions +2. Generate Python code from visual blocks that can call functions from `OT2mqtt.py` +3. Provide a one-to-one correspondence between visual programming and Python code + +## What's Included + +### `blockly_ot2_demo.html` + +An interactive HTML page that demonstrates: + +- **Custom OT-2 Blocks**: Blocks for key functions from `OT2mqtt.py`: + - `mix_color`: Mix RGB colors using the OT-2 pipette + - `move_sensor_back`: Return sensor to charging position + - `ot2_home`: Home the OT-2 robot + +- **Standard Blockly Blocks**: Logic, loops, math, text, and variables for building complex workflows + +- **Real-time Code Generation**: As you modify the blocks, the corresponding Python code is generated instantly + +## How to Use + +### Option 1: Direct Browser Access + +1. Simply open `blockly_ot2_demo.html` in a web browser: + ```bash + # From the scripts directory + firefox blockly_ot2_demo.html + # or + google-chrome blockly_ot2_demo.html + # or + open blockly_ot2_demo.html # macOS + ``` + +2. The page loads Blockly from a CDN, so no installation is required + +### Option 2: Using Python HTTP Server + +If you need to serve the file over HTTP: + +```bash +# From the repository root +cd scripts +python -m http.server 8000 +``` + +Then navigate to `http://localhost:8000/blockly_ot2_demo.html` in your browser. + +## Example Workflow + +The demo includes a pre-loaded example that demonstrates: + +1. Homing the OT-2 robot +2. Repeating 3 times: + - Mixing colors (100µL red, 50µL yellow, 75µL blue) in well A1 + - Moving the sensor back to charging position + +This generates Python code like: + +```python +# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + +from OT2mqtt import mix_color, move_sensor_back, protocol + +# Main workflow +protocol.home() +for count in range(3): + payload = { + "command": { + "R": 100, + "Y": 50, + "B": 75, + "well": "A1" + }, + "session_id": "session_001", + "experiment_id": "exp_001" + } + mix_color(payload) + payload = { + "command": { + "sensor_status": "complete" + }, + "session_id": "session_001", + "experiment_id": "exp_001" + } + move_sensor_back(payload) +``` + +## Extending with More Functions + +To add more custom functions from `OT2mqtt.py` or other modules: + +1. **Define the Block**: Add a new block definition in the JavaScript: + ```javascript + Blockly.Blocks['your_block_name'] = { + init: function() { + this.appendDummyInput() + .appendField("Your Block Label"); + this.appendValueInput("PARAM1") + .setCheck("Number") + .appendField("Parameter 1"); + // Add more inputs as needed + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip("Description"); + } + }; + ``` + +2. **Define Code Generation**: Add Python code generator: + ```javascript + Blockly.Python['your_block_name'] = function(block) { + var value_param1 = Blockly.Python.valueToCode(block, 'PARAM1', Blockly.Python.ORDER_ATOMIC); + var code = `your_function(${value_param1})\n`; + return code; + }; + ``` + +3. **Add to Toolbox**: Include the block in the toolbox XML + +## Key Features Demonstrated + +1. **Visual to Code**: One-to-one correspondence between blocks and Python code +2. **Custom Functions**: Integration with existing Python functions +3. **Composability**: Combine custom blocks with standard control flow blocks +4. **Real-time Feedback**: See generated code update as you modify blocks +5. **No Installation**: Runs directly in the browser using CDN-hosted Blockly + +## Comparison with Other Tools + +Like n8n, NODE-RED, and IvoryOS, Blockly provides a visual drag-and-drop interface. However, Blockly's key advantage is the direct Python code generation, making it ideal for: + +- Educational purposes (learn programming visually, then see the code) +- Rapid prototyping of lab workflows +- Making automation accessible to non-programmers +- Generating reproducible Python scripts from visual designs + +## Next Steps + +To use this in a production environment: + +1. Create a backend service that receives the generated Python code +2. Validate and sanitize the code before execution +3. Execute in a controlled environment with appropriate error handling +4. Add authentication and authorization +5. Integrate with existing MQTT broker for OT-2 communication + +## References + +- [Blockly Official Documentation](https://developers.google.com/blockly) +- [Blockly Getting Started Guide](https://blocklycodelabs.dev/codelabs/getting-started/index.html) +- [OT-2 Python API](https://docs.opentrons.com/v2/) diff --git a/scripts/blockly_concept_demo.html b/scripts/blockly_concept_demo.html new file mode 100644 index 00000000..3fbb35df --- /dev/null +++ b/scripts/blockly_concept_demo.html @@ -0,0 +1,363 @@ + + + + + Blockly OT-2 Integration - Concept Demo + + + +
+
+

🧪 Blockly + OT-2 Integration

+

Visual Programming for Laboratory Automation

+
+ +
+ Concept: This demonstrates how Blockly's visual programming blocks can be mapped one-to-one with Python functions from OT2mqtt.py. Users can drag and drop blocks to create workflows, and Blockly automatically generates the corresponding Python code. +
+ +
+
+

📦 Visual Blocks (Blockly)

+ +
+
🏠 OT-2: Home Robot
+
Reset robot to home position
+
+ +
+
🔁 Repeat 3 times
+
+
+
🎨 OT-2: Mix Color
+
+ Red (µL): + 100 +
+
+ Yellow (µL): + 50 +
+
+ Blue (µL): + 75 +
+
+ Well: + "A1" +
+
+ Session ID: + "session_001" +
+
+ Experiment ID: + "exp_001" +
+
+ +
+
↩️ OT-2: Move Sensor Back
+
+ Sensor Status: + "complete" +
+
+ Session ID: + "session_001" +
+
+ Experiment ID: + "exp_001" +
+
+
+
+
+ +
+

🐍 Generated Python Code

+
+ One-to-one mapping: Each block directly corresponds to Python code that calls functions from OT2mqtt.py +
+ # Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + +from OT2mqtt import mix_color, move_sensor_back, protocol + +# Main workflow +protocol.home() + +for count in range(3): + payload = { + "command": { + "R": 100, + "Y": 50, + "B": 75, + "well": "A1" + }, + "session_id": "session_001", + "experiment_id": "exp_001" + } + mix_color(payload) + + payload = { + "command": { + "sensor_status": "complete" + }, + "session_id": "session_001", + "experiment_id": "exp_001" + } + move_sensor_back(payload) +
+
+ +
+
+

✨ Visual Programming

+

Drag-and-drop interface makes it easy for non-programmers to create complex lab workflows

+
+
+

🔗 Direct Mapping

+

One-to-one correspondence between visual blocks and Python code ensures predictability

+
+
+

🎓 Educational

+

Users can learn Python by seeing how their visual programs translate to code

+
+
+

🔧 Customizable

+

Easy to create custom blocks for any function in OT2mqtt.py or other modules

+
+
+

🚀 Production Ready

+

Generated code can be saved, version controlled, and executed in production environments

+
+
+

🔄 Reproducible

+

Visual workflows ensure consistent execution and make it easy to share protocols

+
+
+ +
+

🛠️ Custom Blocks from OT2mqtt.py

+
+

Available Functions

+
    +
  • mix_color(payload) - Mix RGB colors in specified well (lines 87-142 in OT2mqtt.py)
  • +
  • move_sensor_back(payload) - Return sensor to charging position (lines 144-162)
  • +
  • protocol.home() - Home the OT-2 robot to initial position
  • +
+
+ Extensibility: Additional functions from OT2mqtt.py or other modules can be easily wrapped as custom Blockly blocks following the same pattern. +
+
+
+ + +
+ + diff --git a/scripts/blockly_concept_demo.png b/scripts/blockly_concept_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..87630e13d8329fc67446c2819b2270ee31b2a893 GIT binary patch literal 378857 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�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

*H;L8N{3}Dn5#zS;^?M6++gVPUG%el?K+ri$ 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

@=wW$+7nJ3lUncj zB;$OqtQm^@6#L>j#${tUgs^NgSV72(XXf4MvbX9Ui)%8Ce)JZXy0M3}{)(!u z*AgE|ce0l*+oSG`Zd6qT?8mM-%0@IL1`Ht4&sa?2V8FV5SgJ$}|qFW+fyNW|jzf z#Cvpy)pz}wuY$_y>0P#GQ=TFljE&X*Fh;&RiV)J9$=}sDBzyiWI7VsyUDfK=Lb=Jt zCxfv14S5%r54ReE@D{~)llB>nw}(Blps>7nb|oPGWRb$-o?QwSQ%!){nww*pd;hnV zeL+Y$hmoSyBhO`bl6^lnD{{i_+P^=^Tfkn&s5CeXKeH$eqRiAGw{Gst8%6rDXE=g4LQ~-3wgef%>qGis^_t#Mt|bnA!1>9E$RIF{$czeC$EiVI}aOW$pZ|Ji@J z4~5oHm!i)N>n-;d6^Dc|F%`kxx$)eJ=#NyC}WHEWT!pS6A^eprT>z6_%Cv>uA6J$P*k9`B$M;T9R%=v!BFMA!om& z_|2>}y>*H3yU;GR36<5nMe+a~Y+=s(;ZreTpp9p+>5TD>i7^+cOXp5EFS^e={@x=U zRYxXjOxPl#1sN3RD{@}@Bie*fx~w;|X% zg>rGfx$gHmDm$8zlfUQuTRLO9w*8s2*j8So;UL-lVEE!Kqx)gqkqYBNws<_R-MZ^^ zFr_MPNo-g4{qFN4F6c~svP*tjFniA84Ih3n%1HO@#K}f(AxupDa`eG5`My#e7MmP< zc@sC5;e3CY0A(pNh$_~*grBd6eIWRfB^Tvh9wxd`Y3Fmri1JMUh9^%2Eg>xCZer{XB&ntev+C*-` z_Y=arhf-pHFf6bRvKG;fbhTe|`UmqTGOrj^&-1Ym@jPg`#IvLkL^X*-yBXpb;o*M# zxJZ@Z zbYsuq^V}YcT^yJU*z`|l$mI#|k0IHPC7W9OZF_Q&*US5P=<4vr*-6|%VM{L3=zSvH zzTTg4WoH-X;kL`qc%cboxgI7rDT6M>c-Rcb`#f0XEr!zkf;Zf0Z0Y>LUQb%N7amT= zpxU$W?OcPe1u;6kTs&Xk6l2$1j0=38oYMh)xJyvIFUA6h5t8#mD4*f@wz$|IRoP#O zRq^M_ZzG^v-Q1y;Hk%Bm5ADq?=u7??R#Hl|dbs)-MY_dHG;#zRObkD7IvVvBvII7O z|Nb0>^2=A;!@s;Ip{yT~*2e~4z1vCyU{vz+SVK#mtT>daPlGC@xm0dlsTh^A0VxU- z(y39!#>EnRPdLU#rsh8F@I?T}O6tvhqSZG|c^7A0F*!icKS0PG`%Q-pa9)_N zr9gz>!VOCgDLm}^wKzQMnFze*dPay?u7frQ)*Kg{H6RBI4 zN~1x+_cj^Ef&lI91cETP{lC23K{jDRia({ z*KyhFW@eu)DBl^Bg%M%azwjc$k>1h9R8=zV#TGiaxx*S*t(q9qF?*d!o^JWuZKAJ1 zle-@_9-q#3cP{?X_OoLV@%a7ki!&vf<8(6p%nbSdq`q#`8fR`*y^(sc09100uq)$N zR21@-Q=w5rAvOHW`=N=4AL2>PyrwIT6BOE*NO>)G3ZH~iGI~!cbX##*4&6)$wz~Ex6MQ zv2w0YEKQ8BLTgJVRR6;>Wa;NC)14;PRss!`U%Y(hwT^(maRubF!{1OIMp&*5R>NWB z7uV{~FJuR2{qP9qimP;|em6|~P!>tHb?=$ZCeL!(#}R3wk|ob%pAf!5=#ZP!>)pS=Dgx1%`$m{H_cX5=Le zehWang9-`AV1l20kp#}Z*H5h_{37c4>70o z{Siu$SOptvgude#^7Cqxst4s|B5yF0d0uD>t)h}T)dJP{XHHVlih;Pn5qgs-LIc1F}D@VTO@CLPfJ5c z-qSn0wMYAPub14X@c6|^dcU%t8oBBD&iagOz1vzc_0uM2tQ-SPdnr@p1W{;6Pp0~| z7HEFg`#b_NoxWABmLsIC<#8>!n*&RpRB<>&FC_x;-N427Hw_F3ID8gk9nhJJzqaL*U&jjwe{q{|G8k+us82&LA5A?gn9|Bzf8M4Ae#Nh|*6KIeP3#4+8TS>*3MK@sK1P&3F@OIC>kvd<-lVZ)*y zPeJNiyMC%S7+I&tpS!*V86@P=egp~&Srqb&wBvxM5>)Nr%Xz1>&ckrNdz^88Buppc zoHWh9GzhTt#^iFCeosK(yN3`I!0zUG0wslhKD8c~>_JOz&x)M33j^TQwRjtQRmEfT z+y||4S^E!Fb9SueS)=i2A{~hzz!7NJSekAQ$Th1xm6y3(K0DGwU+RRTt0%9v*(eWIXqF zt0)+=z2DpFI+QSo;xayDIJ|@PH)LY6qr}JW*zXOf@UAA38TkHmW_7#M%1OMnB}(8t zJ{%D(s|4evxDYyG2xVR!ej739C$z(ykSBAA2Oq90NXCjD^Yc;&1xu{qz-is9=H|p_ z9xDmb)( zzP2Li;?mF`CRjfGo%)Jwx0Vk045}`Hp|=gOMKh{0C>GZ@oy#IqJBBOuqB{;JDCG0FS+n{{ z7{_`IJ5ks}!KuM-FZAE^EY24Z)-{MAfZ}>aue0mdG|u0^`%M7}OPzOeE2j(2d7C>Q zpfuBEsNyG0BQH@yt>`KM^}Emah=;TfVZ%=MlBe`X^vUA~hfO|XkN3;$g+6OKuJxUU zCm@dRQ^jHZeKGu}SGqhmy)7_~toI2iwfQ)@kK0ky!-KP({##7OUmf|~%_vvx|Aa{h z_X$<+Sr}8Kk|$w=k&?qpk@5|;_mpY z{b|-j5F0&|W{)-T18YZXgXdXC`}{0R!@kec)$+}ax0={4cJOBUMac{ugG`Zo^{0^klaML~gg^rZZl-7dI zbzd>>K-X5)S~jKi)C(SO-_W6GIk}r{aO~Qds-OxN# z7hYMxEvG}6ns;LdDlNMs9^>h5<458jhFzJgIbz})k19s0X}BjDcBTEcCg!wcFaHtEo)d%4H~(CT2RQ5D!CZQw?gy_=an?P7ascU zV2rZM9TPM$`Ja;?prM)c!SUJ60v%f|stkvlK&Zl7_!E-ZF5S?R#CF%m?k#`$2tm)Y zZuy`WZ7WV-RW})}tjuUN^`1PBa0;|>8M)Q3T#!k8E6USsXzz&$ma#+4ESHjb)c3I) zO>U)y`<994t$ef(3GpN^V0sxnIeGOC?X!EUK~{OOitO9poq_`uclkep#qx7=zl!{! z#l%Y_4qB6Yys%<6F0z}*g6=RoQ!yfHugPaNPZ#TFLN0Q9fiss zn|kCcE?f=_`5OA?qW6S0R{ys*fy-x3wf1d_>qK8BUCC(_+()j-sn?EyOH9BF%LQ%R z!h699I7$JBH#ISR874{l?pR$4LFD(myo2O&WLK?IpRr>^)#lCk(|r4n z@$qnj(qR8jhx&*#$+cz=xjwjF@tG2ua^oSS%YCjlub_OM1?DwE1rQcC3{X~p(+xXb*;;-$Y6t&I<@o>k!eyv)+ zd!hVzPA@|eTV2V+8hrbEL7`;vv5uAP+Z4Di4r4t?W*4weI1x|hqpq_fW^n7@9g2q$ zAbs*F6+Lfwv9orK9`yt-_icE@>X4mg@MT?_g!yZIjd1@tEjXsWK>~~f-q7;noe@a# za}FRCez7CCWz>VGHhKi2MeCBR_I*m4lQ81F6BDptQQ)B|VgN#zL$}HFL|ryP_ut+r zL9XhTvzrQ0FW&<3FE&Npvv`$P4=BOq$CfpHro)9k!mH=w1TyR?Jex*pwi^W21lNj2 zCpOaBB3&IyFLS4+!ye9zz+3)?RVV5TF`a`w`JY?-Q#c3jVYlZ?ZF0N2sO^YH>UPP7 znc3Lxt-z0Xp%sWuptm!k^53GPO=>3Nk%T|EIjTD#xoc@Ww=lLzgOFt?=h@%5Q5n}%C*(PCiMZgO{PTtfkatQ`6HeQn7bXcGT_<)yA*I!y(B6HPzzX=SH|fOot&lsl9n^zs7gkgd@6x% zWKW+zpi^JIUA?pYemnO#S46fVgG1Pz$cWc4h3CwE>cD~JXyhHyyf4^A~$dKu%mdWEvk3p;Q*0BB`z z^zIAjLDy$F(8b0;NLXzkvykHT;%CX$zT9m2z37~mYf6rndq3hfCv%$nEI*Fe05Y3E z6nF%1&VOJ4M|wYL$2PdQeBb5Nrjx}_4sr5g{+%H%hKGLShtFu-Ga*fHNC^DCzuR*a zUdCWj!gycDN|_Bs;fZc%% z5x|F#apqkas=FJz*R<_$(FXK&bpS0#^(cVO`_HcgH1z;r!ZeS9cglqZn!F&Ln<e8X7i>MM^<{wE=r#-0a;uZ9!v+=3bEjh-Ws(|NwFpJ{ z?~V{z7){Fx*+8q1oc~cY< zrxKs(1}FmYiHw>D^U5gczUe`wqxh$O&;JWHU;0nE^;9{vu=3u~(%>!7xu+@HkJYjE z!0FV12RIP4vqFOB4*(f$USt}tY9O`tA-M|M-1l`1P82TC$fTk*Y&xg5;Whl)+AsKy z6S8MXk-_sX8eW@L@N%`G7Zgumqy6}?RemMhyI!T{; zc2Wk7c{Tpe30?WHq*>;?A|V_F;8mb;7XKi^ho@%Vij`;)Sm18BT1z4R1(*BMa9;0&m6fhY$K-174B9^_gVl3Pa!FKWgg(tpOY3<4(Q z59xxq840|U%xzbdN2z$QVX(zR+7HVk$F4h(-A#qxY8B!qTZW#_)+d$F2p+^F)YR8H zopv4rM#O8U;*EyuoVK^#lgwm4sNgS^b%U4+4aczTN*a~INEMkyhgl1CbakUjm6AEX z2=5#_G%SVeNdd6)J)7?1TUOG_5D3gw;U*hk5b~V?6lZptlC=5Wo4Bi;%QnyjFoM#h zA{PMV4rsFh-gbcb;*i3<{EqoNxpLI_3owqj2)!Zd8X7dqRbs>f^fBN3M%0RXcv_xO z=^XNZciA325zte$^hgkemKx&P$Z%GrayY|I_}zSi15Ky?o*fFA8awqPK`V>d^@gb# za|{BTS*rQb9rQQqsk#(7YPt`<1Bz;&Xeqosuijq#Ntrfg;Z`F4>VyuyW-FJ;bs%mn z|Ci?N_trptB}-+rufP~2Sl59^9T8#tLdQCU;`xI0s1ZDLUqT;(qWtd80*&&B~q$&z?s!@(?Wo*@SC^nztb1sAQ|?d z^^uTcKz+{Sgum)%)dydog93u1wQY>7MM(AR^yM%Eakuv-PdJh_Y(c>~BDexC5f?4G zNNAkYyv|y!G(u7*r47vl$vot7Ax5esL3+f*(e(|As@$5vhIOB=2oJWaUlJLs>TZt% zZOV}#0P~~1low#7XIS1#PI1~+e3A^Rab!z6YeHP!Oa`vYYWME<i}QCnzFKb!Mfmr}bJ@siD)p82hf{g;7nTL?-J6dW zXjs+onaq{CnmaGobCN+W^JFyXHFRj3Xz@X;qoEnPV`q*VhK4}BaAR)PZjJu1=5*fS z0O;J)x(5~~z%pQP@!N6({@=raL((_b(O1tnvljibH5L!!;(lU5t^Q;MS64@LL3pKG z->+=)fFrSasaNRVUuh6C*7XWr)Dj@`eaVg zH{_K^tT32vyAZWldb=n`BAoE2OMXBvg4WjfdO_kQs{a|gcOCt@Cwob|sw?1-Rm??9I*{DHx^9<~hO_OA<| zZzT|SQB0U{#(kAIZs^PD0a#QAsMo_*Ch5V&kf$~z(ZIY8j~tJjEdI8F8Kejes)hc0 z(k8xptkD~kdUD2jC;y^tIK{B5ze~gF&;fqrRzTdSJ-Gr*b^EgaprGINhzFurypFWn z9dO3|kxtP_g(=V+Kl4^^yO!40#5Wy}i{HWFl?A!-at-BkPZzi5TleY_d);imIi+2O zJvw?{=kRI*iuymbfSD)o?QxwWbkgVzn1@pbc&vJGs(v840Is%bL3z%zkK*w3T*|03 z&&%jVoUyWZxkC<4zwLd)uNkoTOlG)txm6K{t4`yh7aL%v1-@k62GDtVOb0gf;sk<* zhS5+@-I;#N$n2S%w(82P(vOE|t)wyRJJm16`a#|OFluhzMJI)gqmC~L*nUt%`Q&9j zmRWu{^9*%o!qQXgn6<&sq{V5jH8ir#0VhTB_9;dVDVWGZ3<3q*V}OqW9k4c0H(iqy z%&sC%^L03|j(kR2delcZ5c;q}mbExIla?v9mr!uCDs4et3B zmp$9LfeI_6@dH1}SgS4wTIQ6>w0Ri)A`9u=4b@XI?U}cVVO)Qtq)dqNyDjL|JH>ap zUS*T?>P-wX0r$|Y^&7b^4QZl7jN;6SGxlKh4C;~f>&eR7n#6)qhCKf3Nf;43S>ANd zk>Tttk+IFq^g_7rOmkdsk zyGg>)pu?P$o6*j|zz<$AfqMN08yc>%H&+L5PM8re?X3NgG8LhY4;jud+~%K{wCnG6 z5&lF39kISM8U=gkxE~;+p`u2n{>fUSnMMIVnV%r}P z7E#sKqMJKiSoEn;P}8J)iw=1Gkumwb1M8cLk1i1CX#g%~j)r|4pyySsKak4YJ-mtE zLQf;WBWPyu(lZbDZJSc}Xw@I>+l@6Z#Dfn`Cw%BA`@_K~be%9dTpC5y3#uKZDDPUt zV!DgDM=;T@u7&A{p-Ujz>(y4q(!7J8s*YP8B}0(OX8G(C^B7_#n63K9aFlDS&>|Jg z+6eHx&-G=E5hUcNHk-Ews7@qB2YQz~cpRP;%~dbU0D?ENgId_h(aJq-|MH=&j;oTb zd7#0$8cj4W&E5}>F=z;OvUaMi3=9e_jZ80@Xz%eY|FMobq1@V>R2*`NF&Twpy2l#K zj+|vg?6f9>fnsG5GK78es|hpQJWux%yx7$shvA*^o$wOPht+$M`L>ELS@?ILLq?L| zo7#esm3#_%ACzV%cSiZ4L$g{MleM9`{ECb+D!xY*Yeo1s5VwH)*rf>4SfPV1!z3zf z6b_jAwksZ-80*@lR-|@34gdqSW4D3dw}~*^VArFbw=3GQc37o-ZtcI!E*dNsb#pA7 zVf}Uvx7`ky2c7y|t)5d{z$8<~0qIpzOVOe>eyEGhk7^svxJd(H$TRr{HlM=XOEi2ODFC6w|BYanxt%0 zoGY&+j@x&;>6RqoyTzMW$kh( zNrtX|3RNe+`*B3z@g-EKh1>1$koUYVpV`vE*@f%LpKa)tTa1Q939^jnaa*2^mCH< z3nh73p8|QXK}07QZ!YXBMrhu8{+-L1QS4yxMRydg%>cc1DmQWCa8>P-koUB_?b%m!+46cvI=jBgC>4+8WtnMoe}`GC~{GrQ0nfj=S!< z4Sos&Ji5VaX5C|Up7AwQFW|5^(Z<2ki{=dH$fz%CvvG7PQhnKu8<`Q*Gnw?{-=)Ze zs)!0B7F}1;Xt37@zioEofi15$HAPuGrSb`ju4F!54TiMH-~2+hY<-3_nf0!B=DOyd z(8w^F^ljw;f2|w!#mOH@2GfmSBaDiJy3I>hz4@u^b2I8K9BngkgTeAKs5_dh%V7u8 zk}C~Byxf)>5HFX8z7=tt3@fm{r+ssz2{5|ublBJm>WdS`fX-P-{9qtR5WvMSIduRL zn?PgV8ssGk4HqX#_b)4(PE~@k$Ix3YDJ*Vsx80Ets^+Gj(s7xUBGvFyh5aH()w_9a z7r&Nn;4fGyu`d0-#klvi8nR+ll9S5v2xw*3=6|+LFZf7lQXmyh0+JU2cbR;PJF@IK zw@mqRw3j71pj;o|Cn$ds>J;AXmUBb)eke zhtAoUAa+CYljH{Ae}V&uJZrkRjrMw>^vCAVxL z^5@h!6*(7z5;TQy^L4saZ8W4U#?sM{=3!M<)A@0VN%fyG%;$>Q`mh9sYzJGfL6T<@rMavgq>NU&m)=)MNP!R^x5M4`>X6irjm zkH}RF6LpCY%fMr2n`<|KHEG|=4rj1fB$OFye+yG$vl`RukL<3*H~T^q`?E|Qj_S+z zzE_^_!W3p_MQ-IW8%Z6NMel8Yc+g;7JGw(WS}N;HWEBX!65hQONas&R!(e=Uri8%% z>}2!}KCpN%D*5MvTD*;eX`PM9=6J<@y8h}-YLkUy?siljV)uKQ*4S0t7#=zYZ%ZvR zeR)=;MynJ}-Fq)LiFXuI=`sD z2BcI!O#yI21O_*~ThkH@k)Fk^nGzRsW@D)gvmcz^ zI(&=ak)foTG5b)@0iGY#Ytk4Cj8FQE*=@C5*pFhAhO%CN;eX>Kjv5y`bGRRD3I;0nv>=LH`(idxng_0;k>>A37pn3#OD z3eo=4H9a`VchhO*WO98<`I$sjfEnoew_LrYTo}B7*)ZNHscjBWXkXCfFJiN3=^caL zVF}AgF(dMyG%8&C@xxHm2-^Xt5>t6#3pW9SP8hxP!k+p=I(q4Fg_Q=&aw&U)+>-ZV zeuyzheY4($dAwtI6$ezc^2Xu|3R0bio4Hkfom-3RukjcD1vkzr>8bv>3l^m(_(f?rZ3lx=-P0lW-n9zGb*F^ zCP^mLazp*ae`06R$gn|+b1&R`8-lH~z9h-()2>Sbp1~$lY_oG02z@Gf7OdGSTA04_ zXIa9BEq^%NJVc#x$G9Z$f51uDbs$q-WnITQah1d_DkiZ>sej5<$_*TS zNEuk~b#(f%w4N`Gg`~Bz;P+1wVFRU_TNOYaYwp_G_IC4ZZ%J1MiV{5l#o!JId#Ps1 zQRRE6ge*X6r728$qEn6sX zq%7Ihqd5+1fRs=vCRt3hdKwa?v8G}M($9}fF2dP{L3_WOBuP$x+Iy42z9XUckcF^D z7S6HxVr^4oxGu2?YXGmR#%;XRyv!ncDOMzPI0Fbs?Jl0b3?OmO9FV#&lAF0@macIjCbt6W<42 z1X}{%iOqDakOH>`%{KIkZko z#>1O-tA#_xObZo;#fYbb-uRo^yf4Ea)!%INk$}F$|Mu>2@BEA> z4m`$_Ur-!;cq}PIcP7Lt}Q%@;LH}UNe}Y-`B{*#`H>%$J2KJqyoqEW zf7t4)y>pBj8Io@2g_{3l`N(;DevvuX$j}o zKc>aAdfNq_l;fsn$8isn_waLN_}E^pu}j$1oY~dal#*=q*u*G3(W)PXGZ38*zwt&x zTq3b8oekU;{v(e1AvQd?r&Pj9JEKnqma$+nR8DMVa`$eeYurEO5P{4B@rTK?YETZQ){x z-j~MLFdn~jY~~sVvl@uxlVH0ICEPIWgSXAu^R>tmshg<^dqXfU)x>Gt#H3K9g=65! zht9dmA;q`fhvdrSe*0pgRXKTx-1G;_X|Q1RLeSY+N3eW;oUOH~B6;A8DD0zferK%S z^}7T#bB*W@f>2CyLjE$N%9`0jsYtp^eox=`*3f7Z2CEl*QTBEcq{5P#m1w2!$0h|)>V!qqZ!C1 zTOu*wk=|?9nUqt=YI^fnv`h#;4xuwJu|CSI)Q~r927F{!O6t(@u#-=)mTcO?;LHAm zx^+#`LWf6m>eS5H@!L2nma@imaRsx#qRvS-(~5bf0e4X+J>KoS?vai8O;#qXq>_m- zmU3P91|q5mVl@KP-T4ui@d-M{2TS)<8ff zZY0ZC`H-{&d;}gHD9AO=CnYM1!H+lb0 z1~nrRtopve87^zR{?0NCLRUVS>kl(fM5?#Wd)?UFkBY9H*OyP0r&1`0sPoEZ-s9B=hCO%k&WOJ7mj7v-=ATOy*KghICpTDzfey{ zA5>H*TK_I2ERN+OMSwVZ4!O^kILzA}tdl*`^ZU}==vsqI&e=xsW}67W#|&El8P}jh zAmCGUK@Mu=h(Tm(WZUlsvCOSM+TN#z>rHoXxUKrLYS38jCSpWfSoCM>d*Qo>2X-qs zO$HLWkpfz-Dwhs&nv)-eaU@*)CDNKzR+`$APZ!4IrQIp4@3_Mb8FrrRrAV78jFblJ zt(L)L7qNa$KRg<|uBh3}JB5j>mv##CiIs=K?L-J{JofNTMjj|)ow^#ORcn04k@3)5 z2oqY_$%SZ_VwsKXwa8SF&K(8yy$6d9hISobt_i+SB@2|YBgIq%+*+bLB#mWKQFbd) zVIfC0q)~mI>dPOnO7W}wxc_IE#|L!tqlTXS)J8@lnh!3vGpq8wQea25N~2Ap-Ai+r z4|8*Xzc73aT39kEm2M0VhpM~T1D%%&S0u52;Rsd@DeKQ;Sg&_K>bjz{X4Ds=a7r=M zLyA~UofACk$3NuR%9~5b4Mz4Q${^|fL8%FBOT@-3`q^F``eIh`TsJ}vU#&@{QKeO# zglZpD(v_KJ?PcZDEva;%y$>&xM)Q_sXwd3uqiyPj`P9k++5!^Vxt^gC>?G8vytYf3 zT0#mdrwBHefpGM*>$!W0?x&K9yS=5XekSsER&L)zOixf)X_B*~@YWpy;<${vv$xnU zbBKb{+r2|B@<$8Pm5x&V&9sMk6JkTg<6)xdq`H3kpZTOlUZ3Z2tWvx%A`ecJ>RF1} z3X9~9EGavxDsLmzIco{fiM3Q?BnueR>qM!jV*A?~?bNK?w8fhQE1OsRb@&^b2yfmd zaPIcDy2h{!6qMiElU!wa%aY6~FNDnFq zY~jmEsk;UWe<37qk$lY5I*{sXrc0dOA+_Ffth>;1#4rVs%h=QYnjWNyb#CH&vBYj> zlTt|rZQri@InGd+TZ?N0_(m_d9u?{_kIWFa2{Ubo!O6Fu@_Ea1xmf-<5H3;Ap>_}XB|y2v}#S3C}{9ob??qPYEkpc zwGwc@A4xh}uh{Qs` zd|;Q(?~?@ep@PD{GfUxWGSFfy?4g8-4V<|Bb#gl1+Fqkvg*@)AP2ztLrGp8gt$E%X zG@IV$tY5#xw8r@Kx*Q}lYt)#GPh@|YyvmkI^97U~Nj5Jqb#3Z=<*hhW=}*W;wiM9T z{=FKD15{>+$K8yqar3k?1aeFae-#iKTmsJ$wfNv zro!3SA2#BEr@Hj%V*FHO9{P=51s#+ggg_<)q;2JQh}#lDh!q0;?}sz;TR+=hF6|!j zW3@3@5n#1AVSOR@Dd*`SWHRf%hnNj!4tqLdG2h{fof;Jq5E+Xw*9NtR{VoI|M9J|P zc{9_M<`NfWcLI1V${wUK_W4kP{z@RXK@DckiROUTbP0bMuDi|&F#SfE!BS5<9%%Pd ziEjWJG4sxA(#uKu4!{&`5daXIz`l%+*~Q)M(jtI}Qt@5?WitN(8A!{x0BEBCaOB`~ z;$jp>d4^j?;J7E-jilFs{oePcWuD4MhS@izx<-F3F2E-tE|KX9TF?rYYlj<_nVkk5 z-0BZ_=m5K|$>WsE=H#?*OyOQ_3;eIR)%7!`-xi^3x$FsKya0jvpKXPMN49-_^(1-h zz8T;c^o&AHC+nMQZUDOb&^bW&*9HQxv;p?L+BY8HGrq(~u*c3Va-W4a+=*qF>`MNc zmIPn`i@5O=y)x8DPur>QEKp$j)sq9Dn*mPt^!n7S{xTp5>8M2jhOJDv4aL^|?EqXuLYBsXme`{oCp7Oe`vmjv9{6!tFP zodq#WAq4mVK*1Lwp{1pz5#!qKO@XY!SDH2;dy>XMoxTdD5L{VI%|N5nHqgWA29THl z^mH*K`H{zB5&(S_xePTgdNqC#2K`*U|T)llV z0MCQos_ZvhRfl;lpbUa|wOra-fW{t9I1c6=sK@aE)0JNR3$x3QTJCj86W_(fjuBkF znM$VLiC60m_h%iIWt9ymg^qHDf3^qZ&95M4yf6cQ1O)u5ujfjaNrac7hk$TJ;*YxZ z^p=y079bRWaO|9OB&-Bi8@aS|wNstVI%wd${>`xSl82r1N2SN92JrDFfOsw*nCo?P zb+!lop8iq z9wlpPK0Pv6S@;`|y&mSe?>o_Ta??j0kF@~c=an~&7XV{CQ@mq<89k)@!Ke@_dfBtm zdR!{gCOH|EUGMrR)+yw%(>2j}0iUD(I#ld;%N+4M;jc zlCkTXVmixj#^34z&QYco02XNsgn5AU-9G|$uDMTbqBb;=?)cg!AA_J?$yEZP6YsFK zKI$^Mbj4!n!`98?-k)pH?#+MlI>E4+AqI}JAvSW8cF^Upk^*N$=N>S#%-lDV=rlto zMY;k`41n0d2y`pF>9d;yFa zOOnLWFOsG%my-QWz`1hkJHRB(MAI6GOfP;FJoTvkIHMt?4?77TL)d` zNhDNE>$O}qO{V5whV--x&_02DXoIz(^M#ZhxM03?otnTM0s#RaN>_TyWKS`i!h`Ns zG<18)ADncVg6z+^@ZZ1w|LeAIv{KxWp^b-H-%g!#M|YE_SHD+l@;W~^g{k7dQi%R; z`yzBMObPv~yG>m6eIS*0ElG3}$KkqEH^Y~W_U>1ny9uZs^{*=+FnnH5*5A#`7r>!% z+g_#I505I=X)aIts@C;5xwW9y zYXAoa7bB4`%<|*6wBPLrFucNgk)U2z_1^?+xI1Hz*P-5Suf}p6)={8oJN?Y)$eS~0 z=c6p>s^J5W(3bJ+54dX)i6e>s8gYWXZRmP#!fq>&C+SBX-mM0PD9nxB{~65&3qoPo zc<$4yZ*~?X!YY*{HjEFX`DGsw34;gj)zjN>1!pFVGz;>36*JKh6!_YV=7t?e_0JFI zosq{WkhBrnslF{0;>4lk2#YT=^F7Ixe-LcT8&-9v^_wjjK{WAfwizqbEHIKmMANe7 zCzhpgW75?mJwHB9o`wey1$+*^+%i011S9R^SYvC1Di?qfH}}*`;HQmo()1RfE``Eo z2CvY+VW$9f!`Ck2;;vYn!#9fjPycLDBFCZ6a_c=xMH?TYDJ#JUEss&_jQw5elBO+% zai<-1q~1pJ*1ZPdy$Ypu@gFfn$k7l=JWthpkBbuc+RksU29L|yo zc$;;%jve`tF-w0&@v)Qh@np>%3Gh0&LqhO&&fZ;;@KM|V6iO+PmN&9j^wZ0)NOm~; zCWi#AQ@W{F>ot&vI`FjC8hnPQWbJ=yVN<;{xY2XUf~;Q^6Cs3K^iO>C`{`(pFlHb>{h!)hW9t z)BHthCF^RY1nMZNijjd_LQGaF6-fdYuX6rmgjZETT38DTqe3DU?dZ>K=VXjvQM0j& zwOw}o1;=|-vb~j;g?$KvTIcob2K&^c0VMcvNrDF3A&3=oR^^7!l?Gt)$j7U#-*N^i zLZsb(`t9&p{`RG^8mv^- z2MHH~YEDm`VwoGGwWb<#sz9Z`N+=qZ@3C`Sz5RGWn8vrg!s=R8i4{JhkuFX!Ea+s# z{@_mm=&9GLhgn>Wi&a`Jw{zP(Ud&IItG;@F{W9)6DA;(mtB-ftsTn%paQp;^+eriL z+nqwb?bG2VJhv^XG#9&C_^}`|Yzx0A>~(BeX*;%ou06j3_AUTA=GZd~^dLYPySt)* zP67P>>wS5T|JNs5aDhxiaE*=V8$;VDd8!UKy-rW9rHub-?ye3nD?~JuRh32>C zmDD(z3{t#4BYD7b>Zw^+*ifs=#mDF1yNuB|bsW}3E)qFHA`4_AFV6)vD`&c7*LvBM#cQI6 z*}%1FbOvyuP02bgJW}*-1=kbPu|=z%FHRjR8RNm_ue`C{t4!bt`*-=6fqHF`r@~jS zj-z6dytqVcwS&JkE-|Q)+IUe)9gCi#LNmnSfd>(pvtgm+w6h-T1k= z7)M80OI2iBC?av_moq6^NV7IaxClkyx8@S2^f(?@Z=>=D=`Qo7j?0Z*)W+Ow<0od( zi>4+c&FPB#hjlf8?L%LDH!#SqVt!;>Xbo7Vj}A2#E`q;h+l4?W%XUW-bth=7icWTWO>RazQDZq*{Rp#rJ*;v)^n3bKT%m4G@k2BPip(6_5Wv4nL`vnArpZL_7%)N3N?R(y2hk<8#C_HCgsG})hyq`PJ@MSq-FG6R8UV#@~|n~bnKo=lf0e*3~=&ACj7EAyF~gBZU!-gNMEj_ zA>InuFn@Y%Br<;lm3b)qIJvi9?JPGz#AwhbB8vS}m6W!qxY}URMIsbkk!^O<%pALS z>T0b`T*H#Mo9NvXuYqlKV%VWeB#6S;6>&0>qg9G0susWj!Agi5(>r)ocER+KWX#{|xs3I@0Fyq;-RkS~mre z*EjXXLLBO^;JBcYNWO?%^* zEHGpID;Fu;b^pK8@-&0b#0npP=M<>SX5BNZL~d&%;PwOF{$EUPG)&jsI!=TBY5YhUn6QIwb0r|3v<+gxswIr3`j|I)I7` zytIC(GT~p};Ux{J^<3&TqdNf~-we_F>wN#$vzpL$Y3Z&3ZVa%CQ<$2{)QKkTK5}$o zn~5VW5uaACAH^_(h$kD`0AT2^1-z3kW0x%uoS0FKHen?PTl zFZGrtIZY~QqR&0_-#RrD91ClqI!o1kx;igFTzib?0DFZ|&Er}ExUv4RFwqa9<$^DX z%-e%X;u0l~5olBU_q!+k2kTJFk*B5=3KHvs3H(Vk;?e}IRLlbk6T)o@dq1>0)>vCW z`JQXXd(bio_jlDuV#2MMb`l}$Qz4R6L?3{*v{GX-+6*!x&Cq4LFT64IWVN0jwSh98 zT-Py?z5M}=F6Yw?yh+To%UgMW0(JaMhTzu1QBzj6CA*S&d6S2y+7!vq^3cBx6=y}a zGyB2jc&peY6dOQrVqT64_P6hhl=i*xZ-3|fS+pqZsFxyYTS83hMwv}kmjF9%HWp_u z8t122PFJ!R8S>Qq=KiY!edc7NBy|Kih)<&q!Z=`RT0{ufC$xIq$dGiEM$Rw(EU{z6 zTtu*FrIIn_P+nSEeRdtqM=K16A}5Q3iukWYL=CR>buZ6eC{%mC%twK6K;d@};l?<^ z>9Mb09HFZno%!>Ae`f?>zscY)DDFsFwrELl)7Yn4qpSi*=)XXIX3-G=_F$+OJe2=K z*n3CA6}Ek&BN7r_wCD*DNkoYf-G~y28WAMAMDJa+86pURAbKZy86|odL~j$l_g)8M z491wVljnKQ_nvjmT4%3i{9*60_r33O-PiRi%?mnQtAaWaC|~Q*4aez9xWeQf)%E`I zUet(XmnLbrv)}tRU7zEAh{&(&{lUfEKc$3Y!yIu)%=>E*lj#>O{kn>qE*i*MLrmOZH=BEyTP}h-v9N!r-H2ecW@|YDUpKd&^m|lRmY0dLxb$;`(kkf^PLCowL$?*Q(drTW38g*f4#vQGxebvr&4wZpu@yEe3^*+1MrCSc$!l zL}(Gc$XCEg(#78D)pZ*}M0?4tl!TqXm2_Zpj@iHGdnfglcS_aHC-d>ksR8Zh)Q^*{ zF;bNAa);|im)^yEc_?&LKew2)WB=ge??P4!!L!0LNu4JugUP8JcVc*c#6*@dU)!|Fk<&H3^B zSR=%bDzE{vSB>kcPGn=v!$n<>|K7h8V9NB9wElv z&1x<2`L*G?dJRSr7Rw{nTA}mwD?Yk!U;0M=nb)Kf1i39& z;Bmh06FC07O0LeQYda3J(^@b~V_~;=mac0#N+G}E@xCS3yeA3&*orZlu)*XxdGbhw zn-7!bJ%;_tub<2tsw2CGRpVfiL>|tkW)#Ya+1}97JvDaDO$<*SOVHUL^Rati{ zr=VjJbcIAeChmTpuS)we53;?z4exS@N_pK~SMD&+|08xk9O-4pG|MuS-ymV?$IS_#)7124p z0UTJYj6$kMpJ+#aJS{k@lVoyAWc3dcBt^;2rv%@|=* zKORw$8dlGEaMZFq?rI>j3jGn`TPkrkd7w0${z+7&k{r3fmS1FW*QI;JIV;S{Y9_&ePyXZc?m2!}S(pq0n3{*4eO~bVnR)lQZAhnBKmdWgy|frBMY#G@0%~knnIRJZlE!h+2K?-#eDEK^d4ERKXu&R5qX_nx_|vdc?3GUs=0H)i*)OCd{x%BxNb>0>SZWXV3e9cpt zquhCjBAD>n@4y$qqbUSo)NMCGOFZv#Q9oj53naR+>qb8oSpN0P{|{nQ1UssAKT0c%#GNUSSDi7xqjvvt$tmFr%ZPQy;cronj$zjt|-g2X6ror$Oeu)0H)~8@F=>Ki8Ac-1yi*+-epW zR{SndQTl<0w&#td3mT$9qb#ewaioOv_B>5O&*e@@k2#8K%-bZtbEncag?`ZCxFO_6 zBs1a41{vh{8_YR1D&BpA_ht~cvT-kySh_mug>t<4YP;0vFfO8l{mZR<%SZ95q!i6_ zqZRry`*K-#TrJ%S`LsOpH*qg|DEA$}Ecb4cgmN~1wM1`F^rn2(v$FTRRRP+0*^%4- zne)i1bI9*)a(%CY?;~0iP);QNW#x`_b-!uAnNui$%$IW`dc@IKK7(n^L=)!b~!TMHO1%x_29t%x1OCCeZujH^84ig9G24Vv6QUufRwMYcNga^ z>UY2JxOAV@y5GU1pSjW-J_-(WvJ4(LXtzmMy$D#0LPc+#e8x)`n>xpE{b7aew=*yaU-v& zGF#pU!!ljRrFZ34c@5PF&E8x{l>H)3_JDZv)vqP9mvdD~dMRZE1@w>Jyif#uK~G-A z$8&Z&cYZ04{?KBluoZ~7Nyy9x$?gpOW?S%D;0>4Te_?q&yTW6!bnRxDR^9z!ylR@J zT0aN^mfN%}c!D{6y2>W>Bss2`R1NvQVg4@g{5}myaAdp;BbUIF(&l&jR?IwGl|P@! zQU`{5)~5fF*!FneGvZy@WXM8SQkQr04zoCcJo6y;POf~Rjj5|h#UQgd_$!MWEt{B8 zr=<6suXE(rWZZ5E&og5xl8mnbHh|^~P$7EBYH{h2h?_N)jR72@>%nphv5@)h)Awxq zd%7ZjeO3OT$sr8P&RC?GLi>C#N6l+Qn=L8Wd$T`2wBP8H!uqWM=h)|t^4S8^!M#6@ z1Iq++uG0LT>t=ZL z<90x>oqA`<=V#k}J1jBxxu^-4UsG0CleP>@nik!lF{KdL%Go=;RCDK2(u*Hp|1Qwu zzWfz}dT(S$pSDVVCy5EN867NAPu@S0%eh~w`xIy>j{IotXg?e^2=mv76&6BX7vF%h?iHq!Mf(6Pq`Ec`#Sjk`OKbpq4&)ZB-* zDrfZ(Y1MbWn0@eCyBY9AGrnlT-q;vZE$q^FSE)BI*bv=5_N_c?Qkdum*hN`krzKgV z3Tm6IGDxuCUC3v#R2+H&?r#OK<9mG$-jBMg#YFB{r_}D*#O71H%92~J$(tY@r#S9q z(%;$RQ}I*jwa$Onqg$XbNgw+U>)YWnT;17At2 ztivhx=3%!~d;(r>*^t)Q7xOeg7Y5AS-&N(ASZcE7H5o@v51lPWNdXzTzEDgzox@C( zd6e(-uz}aVJZFbo&kjRkV5Le`gFi=qn3^%$vWRYzoF0g4aWhtZjey$E;JhTOovpVY zJ>I%be)0A24_E)}M2Wq(ePQ&cNzy11^Z!{B(##qxNRxbudB#@ah7Q8z#Q+L~I$=ff6;8H|P%(Bno#w&l= zvP-{e8mR7zW<~={AA1H8q^joHV05`_)N8AOOpMMAhbfz>@`*1Tp+Z#6iH~$Wp3#X) zRSj)0zV*#M%BAUmUdw}vUyfG@P|^GyK9e`{4<^%)>qnpFrfLAFi95fH#**}E!stq0 zEYpirU}q{V;1+No&EY;n%Kr$%{!k31y%1pG{i0F!*+!NngK9p9V)WzvX@<8qLXJgS z>I*4)e*o;p{Lz@+OhIvJL%4H)0H6jdyCBafdW7ItWoNht1U$jIUTm~ls(qhcy(tId zi#?71h;Rl-ou+^DdNkazI{io6Rva_lJy8DIrP66`AU|DM{dM^;A2p3F!j@~&$rt3! z^1h_eW;AoCjN+|wd`bM1BOh(Et=MAuj1wrB!-oYO^%gq$r7EpJf|DX$(6i@9Ju7U9 zQjPW0{xPOLX!C$VN%!RwWxod!XhytlaOC$V@28Kv}AeBu;FBC=LV)6W>3lVXJex-m|CdE!&^s^V!=uhfVSp9dcj0)a-IKAEjMMe$xQI<&poReUlB^y<>=x zj=A$NBkpq9UE&t&tKa!>uf-7ThHr~)SO5D!^Sy9#onk?7>d|(Kc!on#ytwpOv6A0Q ztG*&e_Odr#L#m6|@av$%b)oKrZq(2PN5`%(V0>MA=I)$ru;|Mlg}wV7zz3a}Ukhk; zsO5BW_M}%=L)7szqs)a_{+n6S|%aX*q8Jy^9_)8GTSPH3< z(9iP)-Am}oVdg?1Ky$NkDpDtXpTbjdh{ES0D2bCz7UZ9z2FP6iwQ)-L%2U}){tCTP zxh&v8r1yCNwI2s@HHDK8X3*L;gG`>!Ey^;AdQYMW0v`;x@qjn& zqWnb8A+qL~GVX)NudH9%Ww&3+T~p0nPeJ|CbT0cxI@&A#Hw*u~^>%ROJ2(5FUohu(zz4*qm@-iq4fofP{InEkY8f;RSmh$M9+&1S4n+IRkDY$QH~ z-Joe>N_0KJIyh`r-(Jk&Up@EkKJVTr3UJ}*!e7-75ajEy&cmEJwp*1JSYVH(YxrQV z1Z|JQ3-`^@&-;4rzPf1?4Yfc`bZrb76}m0e-LZV-;1wEQr?`ILC!ekoue4^X_BdB> zs?M@eebWCmuHNrszPbvV)4S38%CGv8IY-tru=!6ocV zHbl3*dVxNQw(}go9826!!2+)su;roxtk$1@(f9|flVdyEkn@FqMKV!?XxL5ff*Nk* zS9;KMOiwvfQDr5}KR;M6-iR_5%X0TT4OnL+7S*Nny)Xah_xGHJjqp#0w~0@@ z21@Rr4w{rXsJPm}sw_ovboK8S`3&_+v^(>1zw=mx`kzZ@PYNx3WOoSy3yW6#B%ef(dB0VxI68Zs8q zm$jzu^=i4_!dE=KomP5Zn%n&3N*@TH-c;S0+74ZVlgdMud5RyS(c1Ol9#ZKIt4VZ* z3h=e(zfve<(i>3deIn*fi)(Sm(dY7H`jpKvURJ-Ue||kFiRdczSh;>%Tz|zZW)rn@ zJ9F*%SF)m5DW)U8tc6fXpWH$2D**lFUzo(HJhGGu?LR7)Ro8GM*oBSL9zlZ*)61^KUMK&L>=B@O1ta-njn-sHHD${67GU1n}lL zVL*=SX!*ubGiOWSP5*;7k@`irnmt{K)H_)u=`FRFWWx-!32$lOU1B^WZZ&kn&dP=X z6Vtv;C;h`(415`4+IN1=dY}A=e|56#Vf!A!$@qqeKhAn~^{oN`G<>QoVl&kQ3mq`q z*&(ThtE33tt*fgDGT;j@|DK%Y#ZW!L^C_&0$lkqp?rTa>srSdmTelSD?!UPJiyhH9 zJhhEv?n$+D&&ea;dKq+WY=RSM#Sv!^zyz1F<&4zPEg2u9bV1BJ$haIwaE?vneHLvx zSQCaoFCvh`aZYcIeep@*YdXI*9BHd4XSS_7MD)WcEj9E~rLV`<9P}6dso@dP3*Jpj!yZ6|5OX+{TJFzsQ&p*EF3ea1P^THkox;ct z)5Drii0%gv)YVf_zZJMa0J`AKdd)$>^c1szcAalb1}cfiAN^SP7qyK<%zb^)N$76- z^u#`OGyF_1d1}ve&Br%n^1iA}_rq8e_{H<4)x*C&;ixBJ5?7lc!qF+fPoCPJdVHy+ zQF@`U65Zp((NX|-SQS`)%tpnYn7`EU6X;+Fy7|;cD3+#XR*n9?{G@(9?8mo|(!7t2 zJ9%X+0Z56pD}m464r18*v!TM303~gExm2Mn`D=i_%4ytgM1s@uU9x3f1-4l$ZcqIb z3Z!I6pT4FGNZrhn8nk55wSBo486Yj4A+7~YN>cL0)D#2OgxsUE=0sEDQU8q^?t%aS zEXYC7%*v8?(cNv{p~`Uvz_n!1&=?x)a%tzPoku(&%EOR8jZO^v{uEL!2CA)D=?P`l zS8E6xkoQzn}-Wnng`=n zEt$)2Rm74+uG>x-tA#oeWABIBi62cXSl)7)o3fJ&%*idiA*tL?WnBM|R_H3PR>B_r z%s@)kVwiSKghTbmf69Gd{R!#{fdv}z#sZLudfUmL(Or6#%Xbcl2l9`iriCo(0N=mA zU^J(y%6~PdAJIpeW(UImsThe&hVZMf#nO*9`JgN2&=J(GH2IZj0Z#!oYo9D*@O9<$ z`|h&#^+`A5lMy?=UZ%%z+)McJEAoctrBGkoV1;y3b8zW&_T?DZ) zTpiE=d_eVeEZTvvE~|23t)7+AIH=%r~jjdlV=-1~T?1g*43WGY2ow1i2#oee4smK|gXKa^q zBfa~L?oP@o=Rtm*o&$YJxN@rHhA;!TxOSLqDa3r<%44u%uXO(7SFs;<+J;7P#!^pg zxAEWf!%n*UMH(h{;ny3gbo(H8qO}UEB!(xl1E*sd_yjLSYKfvnT7x$dC5>K@-)odb zO1i4fdTCg&@b^l8MzF`$KYiLh^T|$W`NDU{$MXMO+<5CPZr7LQSo)Rzsi(THttW>~ zQJQ^jXA+@iaug{L{& zJ)En!NC2cpS2w;qrzE|3)5_8DFVq~UDrj?n{3)NjPLr@n9q}|5bb!CD+|Az5QMNwK z&?NzFeFgwUutNCPL5xQU0sSY>X1UZmcifFIyT`OQFob^%alI9R(DJ{+io~b@fb z(LKKLOh_ia=?zGhp)OQUruHC#1afYdz*BROP;}@{{pusb=#3diqN!%R#cuB9B?=VKHb)11GMWp3(ph>_Kfq=6O=3h zlK{U!&kV~86E}}3KPRL;(-Y|5$@lN^2W!BG6mJ~^1Ux6=>(}awq0=e~IwV@eCd@B| zW>q5->W6%0{apWZGBBtUjwJqR93YvD7*dE|qyxX^RYrj!NNJLgO0_=_!4F)S0N`Sn4;r>|~^w$zoike@PQWY6+r>=Wh z%%NIuc6Ro!vnznv=<$)_26q>X@-1)a@|Ks@7)xX(CMk}psYigpIShE>6 z=jtD7|2!WBkv#Q14TWIUVk#$-!8E<(z$P{mz)pM7{QitIcy``4OL+L=ckg~KvHCBu zzrc1UI)LF|M>ent(C;I%wucaAQvDxmdX04ddiPO3)lyc4efI$D;-8p%OkumVfV27E>gw)y||I_mS%1ZxhiOFlVqL&|B@3+f&0Na;~bpnM};L7wtH~W};N>h82{gkbcF$EqU~Z7f&TWk9IH<}n zlX_(Ut7tbh5J|kDxf-xdCNKu5a>`n!s^`x;INI8}iezwPXujR8;TXUbTKG?=BL=F0hV1~XL|=TRNSCfR_SOhF zeK+tW_ezTpu+Y{0-(rYzV%Hm@&dyr@gT7uYx=zxGqa+hxlc>V%dVd9+%t3A`0I@>r z2#cTgVF2a#Nh0y$_35TB9vGMj>IDlJa(r(1pIpGh>u<^Q?&|Png>y~m1^(hXm=Uql zXSTj!}Y-=i7D zk_?9MUPHXxlf7gE2E_vMYg;YFqU;{7eQe88z-{*gC799Fl)L-dnC)+qwK`EZ z4a;4xJA6dC8UGFct**MLufe$H9j3qAhm>ilisxFB$&4@1w_g)aS^lmtzMd*r$G&`a zv`S7+ep5`StpaEFED-n}kck4V8@!X+#B{=VC@u~`s2Yj_amEQOIzA^fklJuHdPeVN zbdy-?P2S0Lo1qF`^co0M5NP*|v|@4eT1&*;?0<7hCW(k}>)S%2cW?2>86@`y?Y@|O zl;M28S4%|`FIbvu{`Vh&{7thGJr-!kLu0w`T?1Yv=-YP^PH?|WP$nO8Gv2pPq_yB3 z;geBZ-^O(rQju04AIvcx7=W$T9H?UrjG>p`hyJX~Biy{GF|#qI^=Nf#VD(A8YNpW` zc|U$Td||Qd>cCsAJKQkC|8GYDeWQ9LniMm5q5t|ad!+!j7dr_GA7y)mVx#-e6erSp zUZqTUiGs_t@=Kj|D*ZWgI;qaUKP-pIJu~^O7|GsPmKypZnufIv3u(#0HDVmQM`0OV##K5X(OCAT-T^V89WV>v04gso{7Rctntx;u@2Q@|(+S4srqT zu@E~t?nS_h$M+*VgMOM>%XIXwzaeEZiJt_Kt}1Dbz0V~`zf&;$E!DJO1 z7tI+~l>XRT1RF@rV)t9DL^gM``@TTd*{aR{>9(oc3MMa}$&ri&kL-019}Fn@-GJ+ckutmp;7dj(bOdmf@;is0Q@3UFn^u^6&UHkVvX&NhUbe3UxjM_21ou%E#W9p7dQI|<^4)K- zYC)YxwP0R)j7QBl;7h{nrl2dPn5@^U1I7!It8!{BLT-ogi;o;;G9jy&Zcnye+q~gP ziIXAQE!SYN1m8{kNt2)~9!5N5EXnMd^o-vzzs1vY5m}3<+hdx`{Q+60%wS8E-d}`{ z$z`|j4AmE`FY!j5v|Lu_p{s_8vxfB9)NE%E&I`^5L&hxUfD`v$?hgngz|p4^K;Pva z-}!}<+N75_UeW)CZfz!(uGwHZ5#jZIFM;lQTkG{q$ITp!^vp1%U%K|mz2zkuR*kEE zM6E~(wq@6qI}nU+hMUZX4eatGrB1ACOuH@-^G>4;=Dt5pI@%_mfsgiv2&K8HuRd&( zi%!?`3lbY&ox_`?Tyf+=9#V~^mRG#B#^(!xawI3AlfD?~xcBI|X&>WHI2_y04ER_B zWN?pA<3@U$kCM;^>>b>6J|@Zc=BYw=zlPM&HSwaN=Wq}d6&Ic|{%{n1j6nK$Z8YrW zwJ<{bjE{fXbj_Jh&i}gVdv>z03idukYfwwLA?*tY#GlcEm4xPyuTwM<5^v|L7=SbUeA>sSMmsbM({|Yl8lP~38*_V@IIzI)8 zIklUKlwi&KS6Z81Ct@I`v|FKas7}#2CufUIEku*&=Q9`#T)%IH z)t!J@X>nHTrR{sU>MLQ%7cnxQ7BO(a#!W;NxT2INP*n0_W0jIyS_Yy> zRZVEUtF8hh^Ju!Ot^3qGp&JwZT+VhEp?C9EJozn3(p4PAIcaWH(H}68VZx&(tRyY*&k+Gn2)dBGyys zk#o*0OZF>Gi_r!T{te95N3ZXol6Vat999@Byoxct(l=#Ws+{6qafj3LyzsAIZxZ`G zGM!6cBw#PY1Qnb%J8PN!-N|F=dxZsD**-toNm6mBGwp`kL3V=7wb1+H5m#EDLpT6MGS{LohUE!n=6?QZ;jBpB1;*7=!%P0i!PJYLxH zwB^!;xM3@g+?KCvcCg6>cM(ak2+R-nP+Eu zIvPhL`Z%s8_xx0!s0GuyjKopeTwHq98fo75oh;CHwFtdB6t>?LK6$QG!;UZNDkRHp zd#)f?9Tcgy!$K}1_MQ2Dzc|Nw9J@kkE0ls_f-A7l`#w3&F zTt-2k?|5J_y0pQc--v9@qU9daV!sOIXEuj;tFx#b?8{Zb1&!y_rK|i71_rR$817HR z?{bYZVJu+n!BpuKjP^MBAbC;nqpEz8e1Tk35((!OGa~aC9}K#17N&o<%Q=6GKV5nq zE$`!_ZlIbBC$CIfH7*q5R_{0XJ|{Ca2L>e$n7QC^56|0`CK$qWjNQJekwQwc(P4}= z)3_@N^d`(IQS;c9eEjXr-Z!Hn1<Ly1t_-`RRj zFz0k+C+73Ej)Rgj;wu&;d$W)1lX7FMMzE- z7Md^HKW~40dgu6NFN-fO2qRdv`OLHFa4dzPH;=IW;Nhvw4LD=Bp7zu|o#GVj$K!j5 zdAHw!^;H8JMQ*fd9I5^D0+Ze}q6cwyNHMp$kQbpeAs%~Ma;3##%}`L{7h!9@WW{}j zK2q@PSRagWz=KtOw3E7MB;*a4Qh>oB5eMbdz+Von1;TBc4%rdWE3JV^14EGmlbhBR zRmn0Q$Al~0MajWpKQG#O##l(+}q7DV!mluc4YDcR#Ja*#tyCvbzf>N-e z8NRz`#7q&RHvvG6nBhZi=z`=|bpmwI0{?rW#WNVYC;8h8?~M}Je6>I1 z0G47To}`#hu05No52-95$E4>{;5R}VJuB0nz2C^V*z8@;~mB-w3a4<7Weta%C{Eoi%5$xq5P#BGW05q)&111 zDSF@Y?+v&-M4MD=>rbT|+~s77+yW;a>AZ7l%Pc(KEf3%IYVqmAdo5ieR$n^edl$h@ zCxNG~(E2bLrJQF4v{q(4V8y34EHqaYxGjsXJM zs7A1#;&)Qp+yzxrKGUa&gKEoY6Z-h{0fth@1} z+LYeUJ!F;g5DX1O%yWBQi7fuq{8gi2&Dyt51Ts+_esXc~`LrxjDJOpv+i6DWA#*aQ zei5VMuqg1j{j1$%H$r;ym~xk40Psa@(cD!c2ALdd77@@_rFCW%tu-v(CNHO2q$v8-ZsxoOUs~KsoEEwzjuDV%UZO&NmWISfV0-cQR|A236Y`x5rmdyC{ zYdIKQJfqQ-KJNjlhQY1!y!!^|Z0S2bYe)@ykGiX%w_fk9Tc%G3=+qn7&S(S@PWv7u zBewncucs#he`nB;9W(qZC*9YwY&>mgapkvhbY$lE?vqWqNXAz$ z8M`g{Yk%7EL$5`w{0UUUt?6(pmX!g1KN)R{N3d&AF@AJyLe?#cX#he9|f&X5)8aJGj!Mw8gSo0!7>4QJ&KH zb6Iv9>v!np8faZ!KtFT{)8f9y4t36^iVKCfXwc%7>NoOTp*@JVWS|>PsVK)X_!H4T z!uAq73#gX7c`07(sd2`|=1|M?vAVgsi)SB6y()+#*nC#kH^GCz9UM+sYDWcSkdc3X z`bR`d4PLhqmOcqZAq)wV3rP+8VGSkJaI=Ayvv6=Y`$4I@$$kte@1hOZvEeqk#l^xR zgI7USZAM7~yW8SNm{NK-@k(HYk|##hF#}xv-nH^0>XZTM^NlQbVeHegXu^|byCR*y z%I5CVON-4R(K{|5)GA}Qzv0iX&f4zRPoW%YjllRou!FVmVoiCo_B3WB1FFR((4RA= zs_%_=CmkFtN?-7U&tI)r9AqYUkvbYe#zlB}gMCnXe#QHi-|h}J0paa~)uQyIq@vLt#C|h3g-k--*l8piwC(q6=f=J5G`we0gI)6; zsvm5h$@`zguDWJ;Oy8(smKl{%N|Bzc+U=A^;MPCYcx_BxSv!x0&qA>b3s9XwPlKas zS4p;GKi?8Pgcs_Bj+s7r_Rz1F-DmSRFMRjnzLxps-0aiArll@eZF=l0cJK_e(#mY$ zl6yE312?HmWR|Q;{7Y2M`b=~O_<5H&`|{o>NK28)MCaL}qbZPjz^O!{DEe~~ zF^hu#Lzg1qF3CyKLda17%8 z&*Z0g$7gdLQQyaFRvH&GD)!eCMDhKxA?m70^N^!tYJJqDT9?28)i1r<)1v zcHZNE3i3_ z*)Xos?Ama@l}JC(_t{kxB=T9&~4;>a!xQF6FxET6PLT03x*FjqxR<#%EV#k=ak;W(Z}u6 z2?kZZ2jBjE^hUW8zN@g*5IvW0p?P@o-$% z%4tH){wt1s#jawVHKXSJbIO>G9HVNF({C8C*a$4$XI492JWT_-i~Eg>AcdX<@y|=w zogYLlv|Y9m6ZTby>)KKvoA62bo)kYrloxY1YlW{iA{NhxlI{E9ClOqvi;*2NJ)$tZ z${nWlA)kzMze>|(N}ZB39ZXxJGc=%KzlN@uPa+IyrsViLsMZKA3Vt_-nx9&RI2(`V z`<*Ifq@mlGvoYb0m-Pv?>XI|nw(vRVK-Qy((j-bY{Brb1EsL2e>mzqvOiamYl2ECr z-wRyA6d@St*x-G%2x~51O{-lLpJDdn!C`a}5|}u3!ITeG2O~jYk-Qmi(U9?oe#iQ? zXTF|n$Ve@v}DENPL*=DUCUb5;`QHlulYzu&s1~! z6?$#_f|L2WNX$F}5;oK~g+M_5FM*B@9>n|Z75BH-6-4h&tWjR~u6+v={+r8jh1C4w z5_mDtbX*n!D>=d$;%k&!(3SdE?u_r3ECrGUeFlk;4ae+-`us*{@=KT7q9J_+$dq> z3l7YyeIhK%a!$@}WlnKb!Hlz7@EUEDd8s39^(-QpFI@=QYtoG+WWU@Sr|gkXM46*3 zSivU)Dj6|>5GN~*{Na=HjWlE|i+)}eHn5hl=?})plU)Ml9DI!nWhIa>K9CB}&UKvS zR`P%xcBjpibOFCrJzf9$glWX&xvUZG)*W9yYqL*=3K zbK|q&-l9nHx|OO;gysk0I^?-7J0u-{wbq8Y7~FWko22b?A?NbPb74MI!{zR2RRV>T z`su3$Sf2Ggk7J(&uN})Eb%N@e{cHQZLvIV=$>P&T%KY!AG21OebDzB;gqgO$-e#j| z&}BIIN*!4-&O4g-uxHC>I7;RzbYrAO-VlpYBSknWDb?;3?u-{(sKbBpHew&~Ev0Vz zY{qH8^yXa_;uj(xOXhD5qy~A{?%i8n|LDj%)a-c-`>F|6%`TiS@})ho<~lX{T19w9DBH7U_0f_d(A&o*2C$0iit!5>%gsI z;ja_LnqW@15weZMRq=7RYUMzp1>~pN{&J`BlQhE}6&>Ld2bry8OuLj)` zy>>HAJI5P(+G0ru8e)+h6gs+VMaj%oKg9X+KA68rD$$dVtta6*Fc=n4EbSvR3rdMI z?K{w`aa_88yU84=E66T!wqC}}_0wH(ij}O8DH*W5`v$72yjfmAFqANG!2?mY{Zg`9 z6>wv8gA>U8-=cJOGrq3GkoZNQmrU^ECJh#1X2f^FVqPQkJECl&7P+ng_SsK89SZgs z9Deyj!FKqr(4SHGECXc2D{q1Dge?LhO53@x9F$RU>2#jpu!{$FAwsY692bZ3;aJE$ z*ThV#l7<9dBx;r&3XvT7vsr2kX|_FYC5B$vB22tr7p9f1(J2%?Nbbs?a`px zFiK{!hOh}n=!G|*Ez01ZSEF|9hd~@ zYz7yn)S`QOx%0-_0)E@D;_C7o^(I_j)~HSn{z(f01?LHDxB{~%+1N3V^JgR800(*b*V|d^Ts)~8c)PCQcB&J*Xx*zc;LjB$vo-!s!2 zXx`~s4C~&?Gvxk!mFwYUHEQN$4c3J){&jJR5S~ojZ?I0@&hJ-ch#p>YktXzOuD65A z^t1lLrk*0ol8e@A>eq<-RaI>24F`+)@FV-B5gjV*EL#%2Cz~(Dsxey!TPFPpWSeT6 z9bL8vEx+$nL#~N`N;eH%7+VO#wl};sZDrQwx|6#YAI^LI%4g_qMl^TKsoIV`zM}XZ zIK)Y8Z)0#4$nQHZ(x}-)xSf8Lp5|k8wJ$qspV4dD5Cc>eXt;I<6s1FUp?}qV3*N!-yB#Tdx}2kXLwfdePyn*iecc1w6?bE zN5a074F5ww1y0dP2uJUdo@;)jZyL-Akp`;>zzFyv58`e7U%mfLf6`izN%F5y22^ZZ z*nJPXu_DEWlXJ(sd#!#A$SiwUSi`iz)ro(K157ONVc1V)C_!&>kw8>E&s!e}Jq(`+OAQvB4^E4xK%FBTsGs98TVEE)FxD9~%(6Y3A|``Jig$;9_ZO$$Ru z&f)$clV{X>Rf9ftv_!0aGZ3ucb<5$yA_F~i^(v|RLfxY&@l)|`HV+Vz&@47Onnqzd zj%u?5`zJ;BuA)YkVddSk(e-PN(25O5O$+2I3@}O$5M}dASSUY?$1=odW-iX4W*0Hb zU!7}qh8j5>{WjQJZ0k=Nw|exk7?0d=k=8I*2K8L5jQF+R`qx0O$wWsTO(}jB0mF-l zi&S&*asuyER<^YsgOFN~Kt!CT0^p}P8wWL0mD9UiYFNidf@1hP4 z_UHTgpCq(OH7lH6r~ABiN*s@J%rhB4Xm$UNcu$ z*G|XcQdp1L5WYPFv*2?h_o1xw-7=#m_}<#96V}Um=g!rz2B_eZ7{idG%~WyMKU?KX z$2?RZT6yEj!y2Ue;=T_j3&WRIU!r3y82WLx&Gd_KGGF6bJo9l@27K{pynXzmQG0NG z$$lDZ)KwYmpve;i>dI(#v{%ac9lXny^DsA)AdlAfwoqB|xs;`;pvm6uW7<@ry4QYM zKjgH3qIm}}`Vza26(Ixbx)~x&OBr}H0mSsP*cu3=`tFyWJrs&R*&d~KvLPcQlLcQB zU=faRoiv_WD0-jTIM^8CY_{UaG#qhgv0yT6keH;2Kwh#x2zf#G0CE@+SW0i( z&x|cb%t_uK9ECNgd+x>6Qbt-wHLn=BVimRC@Z;CTKEZ+7_;*`>(hB1wqB<(9c8_rD zv6ny35Jq44xazPMAwrh(7kWY)==W@|emT3cqJsLeHag%VoRH;=jRRDW&=x=lk6@Lh zNj@2hw3i(I6wUZ)^{9E@)9}#T6`7~2ZV`g>QQVz`)!A2{{^{cX2&`HE(GCnpUQQYl z1>;fCIW~aEy|KgA8P0fd=h_h~2*mLryDAeI*JK>8O?xF<=@ogVY7L>adi#^$MUYte zPi))=cs5aDxJZ?y+I0Ztlc`Qia>HYGWc%c3wYzG%!j2&a+L|_^v?xW>Ae8>}bRn3lLi;$i!laE^Tx(O8jd#L3re4BLXiSvHm6yRdV zzyEWK2CCB;wPPTRfl2M?3u7FQq*`xsv;vcVu1Rfa0O4Q60C41lB>ossw5+$YH09tl zy|jQhaQ23*OBv6>`7(&>+PRBPd$CjhIrZW9bsivC^dPfPw{p3Ha~v;2Mx9-l`x81K!g+dTePnLHsrZDC>vM-&<`bRiLoX=chf@sf&vQa`ilv=b0Jmrms33QSnB>sdY%qcj! zYNCX{o!-K@uK=a)%HHT9LoarMm)*IkX{3#@|+$jNMSYhuE0{MV>B? z{@d+&OQpRbrAZ)=fDBtDTGnqgF4jc@pZ>Rl2{;RxfmWIDdNnZ4)V9rV!ltoE76M;*90GkO+F+EV2 ziD9WWt~)Z#-xg?Ea~t2ul#3+3ABQaxeQ0-G83qD9hzva9lD__nyFAR+LURnHQP_nl zE5%rk$%nq=yv07RWU*M0NXD_M6^aBd9|W2*f2%DjL_bgR`X6ppWgF|W@87q_e*v+h zobN;?AI)=~$I$l6`mMWbNdcunSd{#2_leB|0O6*rIx=-@VN4K3n+Csums@qgd!ED9 z(g!=7hD4x^gsu%>R{#g}=k*@mLERaLCudJR4&MLT0b$>i05X!n&rvYXA9)h{b4`TT zGNEnOEY;`7({Dcb;f%aoWGuuh%wy4nrORHg9ljYmoYG-shXCaS2zBRHr5i^=5SFIQgSckOnTjj4u&wMcgoE>AiJ~_$O_tn9BVZOVOjvUpR)BIoN(QC=7Yc&kQe zyMp_{{RoK!TVJF=@cmmofJKf>Bld|8LxOd=WMdxV=|{wBGv&>47#8cWlK6ys9ea!3 zNGG0+GDF&yrY5C4ZT1#Oyyz8jN8#f&jr;Q5hhpmvL1ZVG<|MrLrcapHm!dtHKWTh+i{gAI>k5Ky5nH~#c{Ge=_5^+Mz;QVchU~Cke5=2QesYZ# z5F=k45OF!DH+WS&TXwIPB)gdxIM$aHyUQMmuFj)eh8QK9{J4YbUAKh!uNg@;DE&1P0sV)i1&?1RPam9(j;6xjPHSx_s8%eX zuwLHOvNE!C6DRTpVnC(WGFtlurAL^f&W}7t z@1tzk1#;Q0!u>}+Ih+z$3aAGJT(aw7u}#*>-SkMs@6L6c6$mQz$u{0+byvVF{UQq# zx%3wE;_|abV!9HUa1yY8=(u)=?l_4@f+zx=>n)&Tw&91NCHOsolkTnPekQq>-iQ7D zF-$er+ec1KNvXM!KJR5$B09YUkLUXG?0Kr+-m@MK|WG@XTEi{e5r9m(#sq8co^$M`B!*fsxa9dKR8n4Vym zAV9q2&q*SsQ1T2qey8xgj#D!T8_iddcQdgAqti|b??^S8LYpB$;7EFHo zT}uIz3A(Ub97E%SYmyp3F#GY`nQk|o5ea{rf3Nad9#2M|S5|W-3Jc%KtMBLC(z}X+ z@5#Haiz`*R7 zI?sH5DhFd7vJ4aeGR%NB81T9Ig;Xi5Yp*-rw7a2zMFwHFb_fNK8#^9G*BglRRs%k8 z6&vZRMZTch*LW>={%*cJQsh{aS^j%ErwYu}7@;c?M4zz}BCeF-CA z?*G5_-1Bxb`Y4U>^kU5*u_%}WsXdj!YOW8U4Z#&1k0(5F=kxa8rJjF}2os3L)}`5u zi(i{3F7g+K$A^MKDMqR-a6juCn@Zd8++r^e`kU8p`g4DiCo+*HdD0>uc76!2=_ml| zX0z|>`r!g!P(X(c@VDK&rlx;d4-UYjSSOCAVu84g#vfU2d@WiXiq6U6Y<&L*2EstV z%W;EuD8mll6iR0E8>nD{^HFiVeimD%!JupD^LKmw^6~w_fhR31)sTla1oWCR|8&Fq zX?H+ma--k=>8JouCKYOpt_5J+;(QtW1n}%|_lhM-o8! z;aCFpPBRm@7(=$3(qw7l)4dxZcQYk-zUDVTF=B#)v1|M@*w31SLqRzmjF@2M-;&dBCK_{5U3Y9U#SnYhfJ>s9=RM7styfB^#2&~jT0A_3Op!wT4`b2e6`@m=9 zjV&hZhP@dXHOE~ZpR$EnYUyFJpFw%?od6BH5Gs1Alr=sE(#a_+!uM%C9A~@H&^=!y zXcs~xHux#-T>}7ma9{fr4)DTqDXyKa!u5CtN)t^$^1g<3Z2YqJ&AZLVGH1W$!KM{! zyAd^;o-T9^xG#_CMwH<`V&@w(KbyWz-%-Y6qMOnfMgp@qK!F0fES4C<68gO<9>BYu zZxsJ!jWXs?L^?M4=kPE+{Ec#f+20wk4~Us2&(lZOaFAP6Zlh8bVcmFk_;#aj5?K)5 zH_u^!9$>TFV&C)z$Rc`=EY8|j3&1;4)Y;}}ftPhCguct~2=I~OtmY<#@VPU54XeY* zS{F|9U^HIaZ3mcy&1(irjXO0Q8EG@3?!|7bH^5KI5l+q{Z8i)R9bw}qjF&a&ROrme zSH(ZI^{v<)So2 z8qGt9Ce7ZzWDa}C0BO461KGd8BIU@icV+Fe{m+*X*Pm{?Ek*T3G5A=$`sK>D%O2bQ zUxVxCTE9muoo^>X;ztmJKI;~M>G47V^8HJ*G5uiRw?h8yd6?T=7(;~{?88~tkMfxQ zOJ#|FmJ!ofRQJN?GWMu^!q}^Q$^$phpB4Kbb^73Q_MJ-Z^%_aa-K4v38A3sW;s@&_ zPue=<^*kIxn<3`xOAkn8=boiens}_&9Dh!EgoM!ejLaCmH$B2Cy~DcdcFpu{eOV#B z#<9!?erpeJgaG&6ouk8$0q)D_w*QX>7_p2dMIHn68`8n7W7eh>`06t@Ij~bi24m*#QSTI#ruHT z2bfqBxjwj#0%RP^+y_(3ACnQyy@oVrdFBB!0XN1*>a#y}bfT~PiM#1XtE83s_cSI4 z4?JUm+k0MM0(4AT+gd1($sX<-_|YR?_L{-JjdPaa+?-Al3Xc_OD-@yxS5w?9;sJ&N zrt)8naLL<=*1md6PuJxfILCoQ1IH*cfFn;sXZ`oc0PA7O`hAuQt#0yt1>CDcl`oV@ zHx3XtJL`Gdo#yNHffCy^XFxIX92=N;Ii`PA89NhO@7NtuF5?oJ03tOPKfbzToOw-x zuBu3FZ%;dv@MfP_{?yn6GL*|JcPjm}0dcP+=O;TY&_>J_ekZ(3sJf6(HV6B*C!h#@ zd2+xX0&YN0EOa`lEj%FsG$*UI?;Icwgm7!wd)R=p0g5Is{0Da}j``b2IF;W9tohuK zF*63qwUq%kGuii)`5Lt z>FB={KP%*7i@_#)(k&lMrc`C_FjGn{M;fnYO7Y*2w%LwRf-Y!oGjGC5vxef=^s8ty zh7E17_V0O;UQehonQQ`QIJ!Ffzn2{V%DvAs!8W{SK#D;s3VwV#Sn%w~nDq-eN~T(f zo3+c2t;?G!_}{xefRhRH_vl(m?+xb-JZZb2oYMu^r6CieoD_$%%QFxfhkI=W{nNPf ziS2yVqE>W*f&9@Uo@)y-dX~!oFy71?jTKM-2>rZPtimS$i_*ksE%c+gCEzDrn9JZh zArnWn1lriGZ;s>M%;|gJAI-=kxgsD?B%et#f|oD8sGs`Y$`SVKTL{tY@4 zAf5D|I{6s+Ap&g|sS5vN-6R9F%Dxo(3Xsg9XAmp#TVbrDh|pKz9=?x3|Al$NgaI2Q zX@D#XP}arFfA{%9{J?ThpzZ(B4G`wHz9%hObZvJ?%wQe7fAayiK`uuAy+3j29F$Gp z@8En}_pFgSmycm2L^B&BAAnaAcnKLUOpAg2CuYQn`P;f(FL1?K4T2H48TRcmoYuaf z8)p`5Lx51J#`@D*5oHd$Whg$$^|ER&AsX5TppLc6J5ZjBbpm~O$q!5S2mOKa)5=o* zH;$jNb>C`)zJtk!VAEZ@$3EqSfEc}YldeU=-|e+(6gGLkK%4(h{bG#xmA2qGJKrK) zpc;o1A9(kH?*F?13ivfZ4*e|_Y_`5p;J=0#6pjEHG7E&f*flNyiTrOza$|F%<&~ss zgtwN`=u zI);%nd$MILl061E|4KU_RhD%fC+0Q)#EAsU*dI&z3EE#e@>K(F@t`hC_Z{$`VUUzDFCzzN*dTJdMrm4n^|jx8*bFp0vr(G zKTyK~z^5?{nwdhYYd)_0kDx)X6^ix}EJ^@s>hUSh!dP!D%Kl%Njrww01AjRHWW_er+0gU<)7v=JoInqdzzQcQ zA8+e*U!|{z8XP87l%l$~15J3Bl+xih2k$`K;N!B5AEU=6*f#=|8xrys*6~OyWTlXc z^&5yS7h(lyN5LO%>cDGY3pZ-+W|<~CQMphEe~un|7-_X)b2iO3CD0V5GOEN6aUwX~rXEFmqhj$$}4 zvZ)XD_xJnlm3E23QG<;AQjcfH}1yI}L?)WATaBUD(aV29YCBU?Kq!#_aO)<`>r-Kr3&1PD2)3?>|G^F!U|VFb z;l|LChy$WxkQi8*iXP0FERzZq=sM-N%eakRR{ zV|`?@Klb}Vq&FL<)O9B4pGNLl{L6c;`d%3%{N6U8o=S!hY%}PApa1LE`T?cT)POh# z4*Pht8b1~TBEtVa0jNzn6O0g{0#p$Xydo1N(_Ll!KQa-2V-xUD3hklan8!ND(WGXu z|4}NGKr~j-@;t9_BK*~yxk7i&bHXB2+{=X9L?-`!!i0+a(;nGDmZ=&LHNBt8*6qp0 zG3fTER_^D13zJXY1;XXBg!10Q#DDJ} zrTVZ(BGv;>B&o8qRjCsr zgPJkv!4b7Wm9h5#-36^y)VGASgd@%IYJN&>qciku#4Y?lJW#C0FsEz|_bp(!OB*(Z z3FKxX3-&jaxXlS6A&e}n=ftva*Q3+*`X6YMtTf8#!y$7n>9ALOCa;0e8MN%xIq11S zZuO_9F_T)yzWBGErvX3O&Ta|b0sS0go-jUY8n0sE6F&pJB8)YuDbT#0p)L52#Y~z7)I}k)HBatvXX84X#Ir_#$n1P&7At;h zRI_h+18Ed~MWW^CmHg&ozib@P>Td?TLELj3kI#J7**E|?K4Hy10)=sz1c10(Q{5hx zZf6F{EDdvLUja@9>ErSJJZXGxAgBQ(+!Xg}D#K*CZh?(f`a)@#-9ecjqo2s0$C7?2 z6)nc8d;uaSy_w}^c`o1IIK9^lLz5E2RthBb8JUV%yWU&87FVJ)aqcCVh84^mu33aM zkEy+i)z8spy_559A7sKCFif8@x^alKXH4NLj}Fq>yPm5L^xxJ^S_E|Fe>x{q_&X@5 z3~ZiFt(Eo|CfA_UFY2Jh#7)p%Tx)?cp<$h$Gc8$*Z|Huv9D=> z>>6BS)e3w9%&+fjHzusPl>j{qsKt+GJQ={R>wpB{4?SDn6!Fk|`jAk(n+2bL&qfLa znhMv>Q7h48N~#qVQA!U~#|LH-;`n1rgWovO$AtWo?-!Q%AYTUhPe^|K3lv6dFAjNWkS0S2>}RUcAEeqK zC?u%}q*?o`g)VC<+241ENQMCiUDpN+-|KmQIb72S2TU4OjBtGpuD74qoq^HI z$2Sy;cS9YWb?v4dinQuL2*}*-HV^^S`yE7LmJXz=WvY?hp)-RKnx;tNk(M)~-w64l zj~^d^gcyhwWjsD>RQXKvjXv>WyujfATY%O=--dSL7G<)PYxq6 z63y^Iszf$MF8o9768Emh68tgtwxE#zYhthJ!#jXy$%gO)TsCe>b%Y2d6Bl7bq!|+i zDAgkN7w2qpfY0@g+FUcpKeTcU_D;&xy^vFj=+ zWz>8=xk$8rMSSp*JQ|W$Zwq^$j$5%FGdI!^#h2 z_3um_1ESy$g0`uC@pudHIAqrVz9_(MSm_@S|Ihm~p(@PAkd+r)cYT2{h{SHVFD2af zFD5|T1HpiL2CPUuhdm>}v<$@r?B5k5^Fe!oMXuHV68E5=p8y+NGYKf`4Z&KhU?)({ zB$n}v;?S4|($hqLSnv+Ptj0(eF#r;vEW%=tp?^GZmgm3kh2dlmBp8&-0T&Mpvi^8l z?M1SyH-WA`^oSq1N1HedQDzx^5mE#cNANI>R@1s6_O`c#llsS4r?JjAk52gFaQk?! zmo{?m(8KL2>NPFRrq-msevx$s&xz=w@O4oIh-{yPHFG=YaA`WX`mdlt> z%#u}4mP30zJ#O7#bascXL5u@;=|X=y;ble7FAja=rjqpl`;-&MEs%*lg$Z`X9JKyt zACJwjNKm8IsP$Jvht%(xGC%@?vSE*woE%6^+SUQj6LKdX7vLCsJ6=^`U?Y%UYn4T2 zeX?5+XX;XH$EUa2SUN+Zi~@m_#0Zij9i>A>s|5I(K-lCBkOntMx1W5x_L8RW9hzp1 zVy=;jQZ#tN5n%J4_|^xTaM(fXDq3)y5^IK7XlfF%8nKAEc^3fg?b-3<%Z&FcpGEeY zkAN$qua*M{?*U}-*WLvB+rS{KcC~{-1;5|iQAg*coUxDSTmaynYtaKrLJJctc*%FA zq!rjwr4F!W&lKy@jJdzXk*0Xse&||KWKG6}g76Wg;@tCZ8>-bwkx|tdW_-c^Mou7d zI@PfW zgP;+8fA0$Fb9Fgm7G0eGP7aeo;fM3hcexpx0>ghZXY=KH1wXUO1QV z8JK)~Wi`l2@yjgNpp`gK1B8UgcbtuaA&E1focs7rJcmecJXf}=Jj&(%l{;1u1a6{< z=wCC;5<+KtZ;FLgPnv08;o^7a&+VAT&SXNKs(a_3ik~A29OqJZWv#zU4(HfSPg)q` zyAduSw})sxQqBuR>W^0l63Ak|`Uz24E|EzI$DO+fZI6-Y9E8Nd>1JK7szYY37vM9F~Mrm_!U~; zxpszcL@MM+q?_6%yOSc5~nPCI9k_N5PBf0%BQ&aS`evO^IJiMgM5*C>R4 z6LI2A7(FuHefIv>&(~fVN##;>^jAOjc50ejJsXd3P_MA-x8H^Y9%(%__ABX_MC8Yj zj~6nuO2Xxa*sY-)U*Qpz(6@*^_eU zuhlKmSsUwO3Tlj8&A=;g_X?wF*t0+J^E-HyVReNXMnuvuE$uh!P44P|*{|Gsgf;Y& zQwSg~>~k~58w5D#vxZ(!LuzQjSIgEDt=(`}V(X#4Y7rv}NGYb?h=!J%uZ8&sm!=Q1 zctBZ-1mb(|9Z*jg9KGlM@TtSl8tc@n2I}85LF3lP??pG#JvpDz{kjrD%?{2<)f7&L zs>R@9w9QV&QNBM|L_5;HM}EpnxcIq6V&K+=JedRUNk1Dlmt{TO9KGCvO}2Md3p5zc z#OyDLlh380+I8wmUTQ?Lk`r z2`?ey&R^9#%|nRr9us$eej6ieV<=hy35W^kN}L*ae4+cpYh*n}3~A_Sp|C-V z+J8GaeEe>fj5=jQgq=w+!KaMR#}E$=A3CKO*;UP{DzJ$-gDHklRYC+6o;;Z?SG|}-)wYp&{HPDk3I3>+$3w#c5x}HPBh&zCC zr~l1jx`#b&=(&po9{xzHUehoBRiRjl@xteZzoDNbdt8UN{#+#)}5~VS4FtlQFOpVYGUytK8hum83aiZj9zSzO)aPTAdQ!mcLAK zprhsKs_xFgDc7stbB_Xw7VH+yv+@irI!u3D4z<8IRsAeoxLTtN_g@k{&e-L!K^ch#WO}&SF&KbjM{(LOjRs z7|nw0QJ=w8G?cxg0+l{ap*U+#of zm}l(v?e0s-D-4SpJO30&p5{oMj~Qt25o^HQcPcs!dIMFNcdekdEXXJTLzTUbAjF=0 z4;GTQ~xO49dmxe602;7T#m^t~I+n^o{@VSN+vPB)sJ- zU*1?cpNjk0&rYu97SykT-o4g6$9!u%E|-mQ&HXloW^OA>FFjM%z*d}9j|T5y3am!(oNQS*=QTj z%YN!P>a)^&bxu*|ICfJV4#+`GR`Amzfu@?#!-|8uYtKqPMTRGka`75;q84h?<_kjf zKP2_Mt5f76jHmV+J&>Nh$x)B@$=QyK1&VEy1L7fFME`~zewV{0IMwkRrg(uj z@n&llTPt2w{qE$wt_}N%=Z7E8BRs$q^BKqkx`2wjwOdb4m-pI(jQS7W!D}f(*eb># zo>l6~-K7p(MMG(kclTCu7Ug&!ddELT)v~z9=E)Jz3_FC~b=Wm;f{I8JRB0aV4t|vC zvy0!xu5Pb)b)+#B7!H|cThrq9baJ%(8L`7z9&2r{ohZ-2l0@jF&G$2vC3HjrfsTw| zf0mI;p*XyOUR<1{EMP8*%4I)sxAd-y+$pS5L3eITTi`oLdua*pW38vB+2=%yO^tF& zLa$~My^DkR+h|%8I%kO16hB_(Bv~2vx4!50vG(QfSszw2s@H6x)bS??59S*>FUv1K z)wRLpZ#sd!ygX{1C`oUL^*&BMPw8rK0^WSt-La!aO4&?+n|BA3OWsaX+8_zx{i3yL zv3$8%^QF3tn&?G~FVw<%_xRh0tyG95D7At3r2=qX-n`Z9u}Xh$>-~2yAZb4Ygm_{G z9%vV8ZNQn?t;7f1uc+3bf{ucnyg1C=uq+mWT%medDqTJ)Xf;F42KSbD;^Jb3zN~$k z3eC_iBi8M@w^7;t&!41t^2&=ozgwPeaBtp=9-%3O&}TvoZcj~a7d@&$>KK~@Cj^eG zPgcJtL>5SH8cD-jZry~-M@P!RL|D^^#@2G2JV~~o15_Um54ck(^YR0twhw1hg6f4pP{>RG0uoe z!iBDrwNSTlwCcHMQ<01-@teklDjK)ZrT_N*~s*Cb(5%1qO2GFO+Bmfc#ppQByG9t zr>9exj-qD|en9u9c6{TDS_}QXWv1e(w*Ikg65BF}c;w>pE9SSj1l*p#hig$5tsyc2 zn8<>T&9d;$1su1m`uzQc^bP#m3H`kv4oAg$cebY9&wMe1#kUj|dTeOW(wHM3SSMv! zr@V-Rl{ZNI8ZmK`sF;{hPv%!5AhL9Wlp@zC%l%31;?eVy?kmYMN~}4`v_<}?xZ_1U zc^2p2Z^{w)&ULw@)Z2rwuVP+bUJ#c0Ve>zyj4dHE=KeyX42hP!IDWl(ywn*K2|3@K z`V?<+ytvKvRL~|!D|TICA>n5S=Tw}M78$Vs9m!yM)>UP6@`#;pQWiqsJ^#_@Lxmce zpfCR)3!r6Qp?ppGi9Z!WJvUQ&{BlD_F#EjBvTK)TM~y4Bo4_UL*FM>TeU@8Ejl$5X z&k-Do*6T`m)&M<=8UAJLSYC+B8OzsD;y^Uq>cLIxAuN`e?Tw53qu(zRW1X%okf;(k zJxkut-|K9ZEMIO~eMTtheH)ip zVI5o=0W?DFw#tTt`K-meyDZ$n57)e`m)HZntJZM_V^x&*bRH&|5Td?s&#gjK9#Uek z?}W(z8yqnhjFLxrL>fWPGa{+^~WU+7(4o89=hqx{HRRT7d zf5(eSWEnMbI)Mczs8u(UHvkI$RpA-!h1PgT=`zS)+}fK3)O1O^zfQ~8rtMsw2xdY-?gPFyYQUQ z3IDyhcnEe_mf!0ixp?Am)ohqa^=?sTbKm8M-QGtv#NN<1w%Bb;#e~l}7|A%TiqB>O z$5AdwCiqZUYq?}Xin*NU;*i@YHw@arg_0AI` zETkY&R|BJ8Y`8s%dPMcjiK2Iyb z6xzX(PFT9V5P^7A?ihWk*E%clX_mUlwFQrO()nR#OqzJ8ZAzA#VGswwOv;ehesz$W zl^ZwizpCWZ&!^7F~zR zSYuiK(y8v|Uu?>3551w$20NomFdlRP|0bx(`Lm>kPmIuTcHVaha83tlV@%EW5)An8D}AOWx%iY!%4V>%_G#Hc$50_#H-wFhMQ|lOn99@1SB4j- z!J^fcg{3lwwg zAO61JbGrX)Si+Elo>xCsh^c$In#u~_?&vq(5~T`l*CnneVq>TV!AA9}>NJBKb+AX$ zp$?8KCb&>LV`O)QX0O)mM3K|2*f{fGsZ^O)ezI%2tI&u)d@62tN<$2A7LcoE#R=Om zM;ncioHe@pETmo$mwC!K(^JZ(O%I>%@QiTgmRs)-f_o!R^3=i4jI+dp@gKvs?=+R0 z+yPYE8Q6~Z1AJnA$JL8I=t+{+W=Y!0-L-HqZqhoW`DlpKj0O4nZfgvZT&F9`at;3o zy7!xL?cE^ps5sMYgzx9Ordj#={? zBL{RYPaUs-``e48_L|kx{L5)83srSFesGfwOkY}F>%-aWN&cUoMYTrc@{fGxwOW0duw8j}nqNy7DJ zftQx-*6PazY~AmvC=J@J{nrOc$~r6+2J=parWI4i6yQ+S@NLGAZ5Y@>)^)a<&2wk8 zS4@0~(ET}>`H`@I3`4{zdd6^ zU&fpdV8iha;>smO6=K>P#2>w860onN74L6_YUA&Rew(NN#`=vzE1LK&RYS)cs8}us z!qlo2HiZG`_XJLL7cZPCtORDR_k1v`M~E#`QmW&sW1Ga#T~{IJv#y7H7u z=W0DL@i+aU_Z?R{tX|ODsY~Z+6TeXqVh~q+f2G(Y{7m3cTDLQ61cHxjOIoN>|ic zLdFSR$Txnc)?`Ls#9$AbWgIK9jeR*K%JP7B@bpkhW#dr7^Hd+M`Mnx{(;xjW%7uH#sh{r z&)>X`chKlF4vvNTulXGY-*ZXI>tW|9@L6#1Lw-Trc-}trmadKPa{+9o2P8%<-3awVO%rGHH46%${_=@n2e6!ha}eU03i-nbINi=} zt|n*CDMIWNk{(itKb%zWpIsROypM65V)EdE`klv~_xnm|Kxh^?> ztaw@%d9?VGr<9tTB1>S)K*#VPBdXp7oT5KBRe2I11>B#LQeKtrT*9o9RZo^i*u^yJ|xaMxJSR4l{y!HnG6 znor+p-)%As*q~f`&s_l1mCTulp6UzKMK+GHNzr+l@;pj73Er%_dNK=EI6sbPpLuqO zK&R!q;J#J62vOOiY37rjV1GEO;cZvtVnp|0H?DmnBJ+p(OmJF58T({4fyHU(fqKYk zs?Sm0vDgAg@`$v!+#u8b1#}tDTyyI&MI*gB{uNVq*mq@jD{81HYRKSVBuDz}ZI<`> z_fbwwwzv{f3IbT;_H9XOxer&zBYSHJTv^1Lj47R_rmwe^sZd(1vQs};3vCq$DqHiX zoIYUH3DzCoU)#z4g!7KY?G|dxCbvk&!^ZXWmGR{?8Y;D5t*(>)GAp2(BXJ?-Dvhz< zGPT;yB1LjB=0wJ&u0|H8MvA0E?}dWEZQf45^UEQ+jNPk-(9MfNcaz_SHFFo^avBjLtwu&$o#A=>wHROzYO=%(+OSjQ#VIA8SJIJ;}Oj zDZe&d*zm)4I*+gL_5R)SQ{`k32Dj0#lmhP!yg?fH>1n_6Wlm(|ke!6jpa`wE>E+JX z&0(oyP|2A6!t&0eZ0?2P=5ljvaYix}dEKzux0E}Jx#y=UQ+d_CT~&0*4I|b4vqZ1u zXYaz7mZJ1j&~bw%?(10z!NMh0Mc$R_ECZX{j`zvtOvEMdRV@7t(FEP(CQ@2ec&sk&$&7Ktg(6_jn0q=^TO`kJ}#j<~tTWU}k$mI^QBtoX}(&)|Hb6o7`# zd?mazlk?7GLTLtlm@`xO#)V}ydx@bfh{f8pLGAq(zq=k*%D`YKSbs&rPdXMdry@<2 z*xqi$QuVPtis#Uns`uNZdIgPw@B{C-wZm51$qe`azDckX)Gh7w7KwvYWxK|1AJw~L zS+^=Hp3gbG&mz7gAewD9bjgf^Ta2Y`6&X%H(lv<~&DL$KE}KYc{5)8C?IC#Ou4B~d zwwX=z0cKwOX-Aur7%n9Dt|&rs?ipn!tL-!Rd{%CGv!tuxoOEk|aG+6AXPR~ki&-=n zD>bqu&7&+REU133+SJl`ECjF|Tt(()zFP4K^Y22|vR7K;FVlBI!5m92pVx7u{~A5r z8__QP>Rg#H*dk4TKE)CCsw2psf#9@8l8mI2W(AL!Lm(O=Od=4@$$~R`*$Qcy|Uncoh1?=)1x-kN-G-)5tk$agc2%( zxxY&~o*K=W7u)kq@C_4$7-j_697ZT8J7!T5dAH0t6eU^!@$R(lcVAi!TcXQnjEd9E zYs{A?6jttOw5amvoUb-t!U%3XJ|s46}))IHEtXP7JH)gJ34kcSi& zbUJ+gM7RRo40AhyOgwd(Tlki2^D5-4o5f&+{Zq4ghtcwsoG69H!>Zi?z^@3?Hm$eG z)BB58PXXL>8lUu7oh8AG;EE1@N;@ouI$VBDZI5W(u@ftP$ER2?My;)Z)8M%sc$WeT z({=9uV*$xZMGYSK6~6aIU`ve75)?S|U1+C!Iz|hd0ybnQ^T{L>bZz%|Uy6e5ur9*4_ zHNUTAf}f=VTx!pDw~|4y-Brk2rjZ0&0|>*1y5fa?FWqThOkzT|azOvK%+L`leHG*p9&=R;z+F7D~0j0h! z_31rS$7TAeDq_fPap3_xt*tc{Qu}jHh*J(12B)u7)!raRdEWx}=0a zZFaFpE*zK9y}_tK^Fsspr;81Rp3Fl&>cv=DrKkM-%1OLyvsF{Zmxl?!?Y7HpewUY* zMH&SwCk=8BeFDkGSON_Cj~a@1b>-ab>VKDu&pfWEEXQDN z?70eX%};O%n{&magK9+ULw8!aV2nM=M@7%1zK2%6s4_MbQb==Q(AlM(Pw6VnXJmjxyCqU{qrd6!(r10U2o77d?yAL zkDT2eLR`LHb_@srd%X}C)+`50_s0|}hW$F$9lm!@3I0Bj-LO%;rraDd_bjCgdJ&2` zObuZ|d?)Z8vwz#(dj#0ef>HEW8gNX_ntOx1z!8y;#%9!D~ z%u|D-nBeS7psagY6gIS`3)I9hIo(dAyzt%iBv_O09$0sUM!L~;n_4KTdt9cO6_9*A z;i{CQwK|H;Mppj-<3;>pwb~z|8F1G4nLa9$TAV8LApApQW$&xK4BBT^Q87~V(9eT? z!Mt59xyMIHXyCZrD31>ccY3~8FfGWS-@~jN>`_~3INrb|@nsMtm=1}S?e~7WcE7tk z4fz@q>a*0h+*+lUV(q8@HgJ8A+MF_Xreo;Dpx@~TI40$lzGV<9oI%^${+&-^`*{-G z+!fk!E}mk_L?Vg#*0ieSdh*ohNz@BuD}q*73^*&y0uzb^1NRbXYF%pz47t zUv;QhsBr&hPfGq`#>QIJ9ns|Tj24{!sW;G64{w9c-#=AJu$R?X9V%_uhK@Bz6k+nN zMrB4pLf?M(hZWeCKWOo%}x}jLsM#kCOqI3FE12BvCpi;q&()QrH>>4 z)4anyFv(y^yWA)TdT^m%;h+(^HPN$>AzzW?vgVPu@!7ai$;upo$lPo`c_=Qw1zo|J`uE^Egk z+(l4=7h?PkE$^V#bdEDa{Bkc-{XQnsgT_@_)M9^lxcP04_RRQLfhIPo&C%Yn4bh@@ zDJEz9r3|xqQWmbog!wqjjC03)&%AZn+n~CJUwj(`+`y&rk;YPPSC^5ac4-Gyyogm} zgl-siOL+*rQXbf9lHk)sB(-!B4R7zPMm5(oU#xq@Bs*Q_b7oG%Tx(Hz$}fais^a}x zPDkIFPhO~haJ7^dD4Hciy~^jR`O(gpz&cag3 zZo{#!sz%gjQy9x5G5dZ1hfbKs{IPWp)%7&h(1Sj#iaD)!NdB%#e%)bhX6L&ZT6pA> zpNQUn&*SqXZm`}azPZ>QWkny^#9Z)rS{XtV(u1@X;!mq+R98+gYHZL3=h;N`G#L%| zMiHD;qC98YWw!(ZLo9z;ENN@Oh zE@M9=dFm6_3Sf91PhpjHGE(*_QI*2G-r-}y1ZMr%)nB>y##i{Ju=`4LFXXWYrUlP& z@JJ@lK6})Jyfgl`B=nZq(0N*ba)!aYp5oKO5N-L4w|m_AV5-tsN_rvJ^c}9#oj~mv z5rHowsq$n<#YHdlOITff{T01YYo^8d#`>siK~F6O?x6ZG%sVKB!diFP@?+X1ObPl_ zwATYhPp!|Ux~!m*QGi?w0tTNfnl*<(0Z24P!&oIhL>_I!1(#pBiN;FHh(<$ znE5{6k0;Uh<)SmgTg!`q)^p%+I>T&S@m%fUp5T-1N`weXbPZp7H%E{crbB(2&CQ{~ zvF05LpAU%pz?!md?SoWtA+W8+f2uCewBSW#eLWOrfRq!J#bl^bh zqcW-4TmG}YC5yvZ^(m}Xp@P_I!MaHql6hxnU0&;1ON{=9H&NM>{UxgQ{waA9yy<6{eG6pED&> zk@%F=1nCb%gW(?nI}3p8h`=wu1&iaNW_^r8Rq;)GsXQnq3)0g6x;>i{X+dxSuKVR7 z^Rszk{}2-yxu@)N*87Qs_R;@Q^^VbTe(n2rfxF*^Apa;f^nL0036R(lp&YL~c^$`@valL$WQ_UfzW?K|@cMdFuCrRA-{oFZ zsFxjlZ+`jlU|{lzYibF)TZ`=>@Z;L$kT0I!r*o^lZD;sS;%xZw%A7E>4L+{zt3B$E zL}1f*!=tu)iN6~mw}G$L`la|RUPsw(o1SOYv4XG1;M^!4On#@se`qo=jf_=F^@8__ znsm=DP~>*36pBE9#l?}8BYDy5BSL1A&zbUdCtnq(RUf!h?urTp)+i7Y5aPAgd?*N( zROSsXeiqv?Rcxu;K6*dE>R;cXwbZ1FzMlAX#48LA2C^YGP|GnEfWO@syP+&N| zqxUWqJH0C_PYrzH6HZ$%`73Y#nkIHsNm6G$>Yyg@)yK$$kYO&@aPvyjrM@)qQFCt9 zjGKgibqPGrd0zs_SIV2SM`;ak%YOI%;CYO+cDweW;kR*gdmUjpc;uMJu?5czL54oA zM{V`4<-wEJ&(siY{()i20|)68tB1jh!SLI`B~^sVdj-KV?pDz7fiTPHF;tqeE~m3IW8U2pL1 zRU0gBeHO@grY&XAwll)YKsb^vr&Z0YIPijwLei>t7HmEt<#S-Y%l{Mm8*=Kh@JZE$Kut~4cJx3a%Zy@|j zvAr@=k<%O8vXFp>;}ViIMZ};P%Z!ejAWv_ipRB&lMknc9E5I#*1TkcO10MxUa1R=6 zR-MQkW&b_=6YI?)I=2!fUaaH3*#@R)^HIU}E#M@}!=)sjTOalp71gYhR&d&wx!{q^ zAw&))nn9G&Fs~>bgKz0uM8qt)L68GvLdgWRozks{j`=~S>q2|wLZx|*2h-j^KjMpA zli7uN^v@1YS7$FT%6KJu%*N8}##hI^tn|t44|)6yl`Y*^=H(nP@zj%xL?w->uggqrn7=1p{i)JuW;(YUPa^PVi`9024JTU$nB5+=#5IV3&2KnUXed;kfhvy zip86cJGRZtI+9V~W2Fq~oQCs%Vf{bY*`Y*uj9>YMhMuu;wloj>uv1s8{8AnFFJAJX zkLkDt`o#Yz_OkNpR1e?8f=w%~rLY9SIzY1FaS1=fuhWvmaM*%hNlX828t~7vaap7( zdX1vgx=T=z4^zNWIT)IDuvh4ejZ}Z?|0DMao&8*gTbNu+7X#%49tnXJk4S-3;vvDN zluMufA6?Q<`pJ6+r62DpzK-|?EhVs^>+r#qgrE)K{}nG;|C;Y<@bD{F+Nj+>TC4?Y z8QbC!I)eXKQnxs&(!IdhYXg>yf@Qsk>C;sB2GIZff&cj!?2;--`7W4my)_ZZ41^;l6oQU;T^(5(hXs5xYfrYF8;Eo@4qW|ousQ*6m z(W~yFV4D+dGpypfk6SX6J~*(`Lz(b04tekYeYIDEV(=$;I;K_v!MyNM zAS{b3;iq`x)uROckF0-)D>$$qT$@o_NoCpc zcl!E_VjCm%W#jREivfD{j?rHHe|rJwV_{2nv&u;`c!L4h;-c-}+i7_#frE8>t47^phV>6WXzu{Z>Tf!4UMQ65%>dJ3u( zSU|jTa%b4Y1-vliLhb=rlZBJ&!h71Fl0oQlz3GV8nylTHvUgj5$2+8gkm~FNyqt=K zq5_{#yw>jf$KPqGamJyjS77{|Dw*Z#siB{y_Kk{7mkd%CtU|c^kVXT)n`DxQ{AogA z-KSnd^_L?&`mX9TkJFwOxu_#KlKd9kynlN(4(z$6IX43+R6%2GUVBEnWU+uj4WD|d zZQ@g0b86ngjSHaW11I@V)||~vj-hR!%7i(`lcsuc|9%8xKul~B}PZ`-z^CqwBvtqdb(n0{jn9P=fE+2@H_a8P^LYA?UF&?$< zE$(qG2W&9$u9SHZ*WkzMrW@HToox|3#UE@5+`yV~O7)k7`dW}=EjU|I8AdrN;<@jI z|Aj*z|H{<#bgSUub3S}6#Nw%}S>(_lR;yaaz)4e^jWr37XL2TPz?~bre?ZLK6*M7Y zmmDF1QI3X5CrckM>=`*=$dQ|T$#QAPs*!Ey6E8JvBsJ_eMX97%yBAZMent`ln@v5l zd5+StV5xfs^q4>+1br_J=D4{8ivn)QG?}pLEiIc@Y^gI>4(=o_7Gwa_Sg};N6ufJ3 z3vT8Fw=KsSY_lONwCq!*&e$y&X)5$%O=*Pk9YcOo7A6$@6fa&ql3LSZ-gMGrjC;$q z!ir!m%g}edKSxPTm1C6dPke~4&B+f1$Ri4hG^Ed*qElRk z=gHaEy@&{QA_jhJeW(p!Jzbrid6`UdM#!L)d)~D%Y5{yJ_WwXj6G!^@bpKlFC0fdB zeTB5k1Y0Uya#I>XFf#<5PwPs;ONv1;XQm6q^%*?{Gf*LJmr-91a3iEct1_qX0dfQ1 zV0{hiI|8wcAdMUmJ)C7OJqqulf2MFASNTKpQuMY`H_3GLUjQ)|-Ug8b&RjZ#{Uy<* z%y1pF<=&xMMwLFNi%Pm*@B6EaG07%x3EcKC%kD-h=#^CTrO$|##V zzk0u0CUss99zSng+m|cQ#!3E4+1y8f)_L#Hy=U+m$y#=|co!X2RHB;hjJQzmNnb~~ zi3MS_wgnFSeC;h)>ME+ZGE=VNnH-Sm`Bi~PP`lOW^)0C2re^0(n{O)qoj`5LQ%!UWsfFVZ;*3EiTkVxdFBfx)toxGvnNN;)J%_5N+$u9TnkXc=)$Z)f=XJPE z7{U2LhS`aP8mpPBx42y&?CaJ7HnRk`V_#S_RpKxd5Re^A@6AFVl#;@RM>B=ziVh#d zqHFv}a7dS#oL8?tvr(tokEh5HS2CZsbiA-rp*gNzh5wHE!AN|YRzRF8v>9rllFwH= zEN{{2@zml+Q{@)Arwi9_Co;Hqe;otZ{DpP+NOGgKr|0INu77~oiKVnP< z5X5pTQ+8Li^!l{E`3Q}h3D|DN`@z3m#|t@%9p*yBhw4bM_hr+<4Wl-j`foeMA5uqX z*^}@M8mJz+D);J zeMpOY6MJQM`yCNXIT*cdq;gNcOd*ae2W@3lcy2lL9oDaS!50p+S|(2CN4DFz*6_-T zd2?6Nm^n+JILDtww%H~tOlPdTXG0a}bPq}_3Y{?)|B>qocOFcR$h z4SY~ig#!f34P!_1Bm6N90WlqaFVn_w?pKhUA0ka1LPI7A0Bs`mP@p7sszCYBQY!)k zoRJwOz_g{F&(>5TD2+Rh1A-bYn!1TPvzULS-=HO3o3{{6K0bER!T$H2!m9U-=#qR7 z7nTD&Q!kiWYko_>)^9@WDPq=Lwse9WuN-aY2qh_6I8=z+B07t3zwU6c9wJGoD9ebx zu9aIpi%$2B7hTGU%SLI_(Yr)jeA$if?=|e=imJ*PX@%A~ESip~e5PDN9ag*!o5JFC zsA9k#tiAtmC3tehTnkgx*AiD1a;D#H;d`fx1bA(KvJ=AJ6%6J0)}7b(b{3n_wewsL zwboS<^o;xxJ$V>|Ct&DE?8AW3Jz#d^8+4uT3eyP@1dtwc2+u5bQx-nOvrLqE5dEm|uFpSEarSsiY=>NLKgKNG&YQV0a>VPBfF z6DyEs>n#~I@X3~cu5li;N00vz#qE2S*|Xa6@CdUC(`qj;EUKGo)z&!t;M%``4RwH2S`)Pm8;ifHknN; zh8)!7-%q>;uk3j8TURGv`vu1d%(ynGzMAlL>e8u5t zK7l9QyK5D3xM<=@tjsAq4CwT-Ul@H5&f3z0X|_mzgU%2M9O;LyuT=5V*L`ZES$Lcu zzs>g_BYD;!)Zr^D%8(MutW?n{E$f`#?@ZwlvA28WfIKE^elfAFA84D>cy$$U@$eH9 z0O9XlLl=(1hR~6i$=>s!V`!b;BzRcOW^8ZeIJDBLfeornm23vN~mwDz3Vz`u`a8?}u*(M7>WK zeY+&}2^v(q9=VT+o0dZGf$HwI7`%KMIqycmTi|URk2W@Vj>_WR8h)!+2!QH;HeAid z&J`dAU#H6=-`)#>Uu;<&gv@1S2Y35g5#6G~aZ;n)9pXj!0wI`-TZe}VG$>=Dh)c6U zz93OVO+w(|`K%xt4?=)5wRdsl;t4XZEhn8R@Ajq|Ar$%3%ArFVB+cpkGCpBgi^#!cRO$kV*vppKsA~6!c zWdh`#fN*2XF`AGq>c)u;hxtJB^d{XuLcnDZBv^OKF>>JAi``yb9=XC(PsyoU!9p1l z*oR48`-~wmWU9iha`0P^h+8~+<)YzEA9^Cif)Kt{Fd9h>#|NXWV+R=Ae`&z8!#Zo| zOIqR-)QM7a5TvhfKDc|-y?d3od3v)v#&u$gk_o_#p;mI`J^eEL(2^I*z*a8pP1DqkJQpMmfMr0j>a8rPS!kt@!0GRT(=|mbWWsLyROFxfTJgd+Lt&47Di<6*Qr(E1p-6D>|XZ@LM#SBX%B>ORDvHGN-lVQQkoO z<)WPXPHp<<9GlTwS{W_86M71)33WShL`Q#zU9g45L}ioSS*tmILi${8M+qK&d6k5) zD56kBMCe|uR-LYuNtz5OGPGbET7QJ_5F}K#=m$oJwlezn@FA@GXle`|X zYv`&e{sGpl*Cvw6Qg`xAr_h~Ipi%m$Rsnhdxbfh_A~hon8_R;lv6b;HG5emG(5trv*i@X?+f!v?Mn>fiY!SGS`tvdVK0-3tef(t}ghzIK%x^*rp zZO$2KUcjLttNN(GZF(Q6I$I9b*xwxr%ur2jc17n0p`lt<|O3 zAfshJKetbBJ*-Zj<8?#LbBYr~kvK^&{$b$=Tdtvk>rHUguQG&O<+`O5F3DM*$Q-GX z0nsyFpfEI`X!DmlvD?9$S~tLgpFX?Yy`J+j)839P?Oyl{LH{#4$q#zG2dD7abvnk* zhoMVhb@-*~<84p=K)vqFyv3o@Nsze#0ZQH1F3`Ec?rN_ndlu@CaI?VsTPJ&L=0`jo z)ga@j87qt)vaw`X%-F%U&p*Q##(HC6*23BhmU#<@<`eq62+L=;kPRs$BYo-kIWNTw zuiyMmy>HS)8D+_tW?%L)c(xk}&^CP`@v0NZeh=m;k`o`jb<5a_s)5gDPM@8LkbSfD zuCrU18zv(M5AqFV+sGM{xXXgRyb(qEb0cbCqFyMA21|#6r`Mve632!SeHLE}eg+xX zyM|J!>Ac_?7_FrRx@xxVnVsCvbA$jjhgtdXG^GTXoA+aJH({BP5M(n_-kGC zSvkH!*|8DRHiGlMoR~xsQMgp#m6zyLi)t3tCtV?T*Jj`CuRF>MGm*vXj|-&!l5!Ag zGyLcpi?5pfjWv}5txss!#c_YOOTZH%#@q>MXC1LtLauBTG&SCvqo%Zlg zvrT>3a7S4X>~d)$@D-f$9?JRQ@Ge!0v1O|Dt6C}~>k;`+(F(!loJ)eK!sW}*t=S&{ zosK^crs)&gXP@v<6nyCWmTv*&?HDJm2W|XChEk8=A)7*UIPvGQ5%Q5+UDtqt3)Rx4 zWG||(&d)4bu1cJ~_|5sDvZDP%!upiueFEmdVsuX&pN!m)$C2EIG_l`4vgs^5{PnUyWehSjFZ21+Je@Q~K3ppCX^O z{u%);cNo@#@Nr}avipt^i4ifn%?C25s*yb-8N5=8?Pn=V5~V2_TqNVBQkvuuQ05v^ z72Df_?rYv^)2KH$La5xfGdP2FTSa?Ia3=dzDzuD88T9V^9mIv{8Q)Xz2Di{$HsiRJ z=!nSIY}JwmHlfMEbuf6 zO69#oQG}6AwP~2jNtlhirS9eZd77hyc5q8~%St$25|JmhCNVURTpPUwvTtzq3-Xqtp^nVZyV6rEk< zulNRXRd?mG7>GU+r=`Equb=5DJd3jpzjmIeRtx+YRXxckGkSaEeEcIny#a82DWzZ-nPUz#S;ycz4}Dk9~?dF`3uJm z#u8FMg!@J00$w$9&%%MsFgaPz$X(umX$16i!OTcoFY0Y5Ik2>xvYZ+XSxnifN@v)& zVRagQ6^6T~mUb>|aVJKjYZHeJfkp7ra}mpY4sk)=F#1Qcf&Sz!yuDjQ4+s7aP)oGR z*Lq%ken)bhj-Dcq2sb|^a7uxyvE+8C7M9GCn??56ALz|qGt9;1A-(KyBxu1d^VlTd%->Dsh@1Y>)_z z@UM#|{R%eo@Wp1{#$K$%07UM{k>hbRn!>}IY-vTRqDvMho!3dhu-atYU%YP@Arj4M z(2ssh#Okbs0LlTW!VO-Pj)Ey^38Y|B&iTuVl^AZa}Ez$-*lR`PJkYhhP7h9y69Rb@s+Kkrl=H<%E0c{??0xL zic;@fu-4P2!E=34sH(go(|_z*Vqv@;z&>lN->-}2KhaR=xf#@M9#YNv-Oft|nRHQ% zNs@K~qN6^;!}r4{{OZ-Dzj5T7dpDy@6g8_ItKch#SgMd2qPR(lKEsoyBCn@^Gfx0H ze;zD=4Y#S>jEH??Rb81+O0 zE7D-S%J@Dc-WA75pi;>)IRZAoz9=1QHo1BGk7E?GS$&%>gwv>H6|i2G9Y3ZhYH)~R zFN4>+U35Nzz+hs9^8-7Em1p7)UuTY=7&kIH9^dTQN*4R(l$c0GYq+y`qkqg!mt?gJ z>_{Tol2vImwNvxf4D5S{!A|f_6lL*ILyRPIQhuFfMMyL&*Q5SY^>W(w-eEM;^;j`$auy{TxK2j z^e+JMFX{y|O=D#;L)RY5FG)U1my}~N^`!Zr%L5a@LEJ zL@#mO${zf48jtZ~(ul8Ag%eLnrBlJpZ`DG6j~%Ld^!fRtJZR=?)8ES4+S$J9>H=y1@R#h%u$42n zr1Lt@i>!*d-&PAa583Fc5sbywKrU_kg-&}h6o+Wn{;+a8>s{~4)&1Wm3;<_uHBo0p z?9dH6PAX&U);Zho=jvChmNAVA?mdZv1e(tYsSI zww@&tDat*xo^b-x3_8cuAzEPPYSpde}1&_tG3);{X{7Q^0EhamO49{bg^B|vmLgqnJ#)L?T*?hZw)68K5!LA@*Ja3SQPwE_j{HcS7f5-Fr zYuMWN;Ydm9g738(HVtY-tG>sTqz5+a=U)=cQEz$I*#;s~lwjcSa7M2NC0t$$=2Wgqi<>4-uR|QJVXmf*;D>J-D;1~WE_=G&dBV=hIH*-KxW9UBp3Tg)W=x{kv&vSX z3JFzuTu_u_5$BqRN%>h8ZkQH|?0f8WWQG|)ai`nlNGn5OZU_wau==DD^x*E>Ht=z~ z;@eIke9s`WDO&Ydc-h@q8n86v=DR@AXC*}O%)0y*wP?)ZUnN1-n#rKhuNS(}72U#P zEAkYrBE(s9=Z#W1d4hPS@7|eTw8{9{vxyeXd3B>t19D3&mPI=Ayr|x~j+dx}l37Gj z6CJVb;_=Px#8%#Va`i_nQTEqtg8J}~y>R#CquY_$fSv+^@C)NR*H!1WYmr-6;hntc zgIh5r*mW#GROuHLxGnwG0npR;%9X=g7~y3srycBRV^J=tdD=~jZo7(hAKnQs2`};Pik!}6#~aFpy>)CpOefjv&=OQ zoecMnz?m3WW$q>V>5Huv$U~*-7$z@^80k}!tu>ls#!sSg3$0wl59;yLd#U5G-kD`* z2!+A2Qkb7#`Q?>&i5pk2=2p7&It0B&ezl2r;5_xY+rVBpxS?NEdS*2BT|W4ldsuM@ z_Udq4KHTu60w_w9P!ZlR^|m~XcjJ-OC$g;{$V!*$^Q4<1xOpMt>qc-NG?1LsH}Qp2 zIs*OsKif}^0~M6|8y$DnsUA^{y?M5qV|`3tmg@_HoGtbD8EB4_|dHbT*q1~TXUv{f6H9Jh~ z&U7Lfikx8k{k4ul5XIjd&DK5ut2+5o061+`XKHiWZl}nlETr~}WdvJ!--+$jCIM_$ z?b9%~)sOf%xGif2pI%pel`Eu>PAtT;-3|%8w6N&}aNpdic6nPNW3-GDD;5wGt&+cq z6U*HeFvDbLjIKVy{jRkJX(%*?JGb)?pC^Okn68ae(?(O!_(6_ax3o}I?P`&|g7tYD z=O%_rMoaq!hb@o~^A;XkZo0lLyFJc$Y`u+PgNTQTxm8sTnd{H?z`67p+UY-G*fxC$g? z!Nfub7hm}9XW*`u>s&9QTLp3RZF`pS(ez?YsZ=)<8V@_v^L_;`f>X_Vh=S`fP3}aI zF2D7j0dWfmWEauoKC~9NtyS3U2_*_Y+tw{dt(rA5%3<+^%SYNR1rj)TfS%?~g#>~F zgo9{naki&WbkoxQVl8(hOyr8#_Y-NY!VEbbOCDG2>5#MbAv55#v}Bxj2dxkgH{1#g zdE)h;3dVjt=>dlK?IN8>O2{E*ypOIHz}QgwDK_uyL}^<$lRK~k4dvO^FIPHO;Q%I1 zy;CKNQ8)HyN4n%Q2QU`E<3t<0g|ckx=7Th}W~|C=bUcYGLFN7~6D^U-mBc0w!lIRl z@8dB(|Lq0L)6R*n%9q9F+eG)+|NCAc*3?b{VA$A!*+4oS^swMdsY`XDEqGP zTjW#?e@EN1_U?<))_Z7A9@u%5DyN>GbmGvXC-rZNK82OvU60SZ%<+6&z;s$?)X5z6 zloQzrQ526NRO08=$(SMre4xTC-dFVRnJekHq61Tnv=mP^#s8wqNbDi8V%-6FHmJDp ztZ_3s>TEa6AEDswuLd*<^_rq$3@gMspz|F&Mr~8&0z?1siOj$Ax>7jRkfLXVvt-mjSz?{*PZKrgENb4>(K;2ED&)d0Z8pB!#Er-M>gN@5Q2y z^%YA9fm0ZadXQTpQxV*0j)v!8{wp{0KR}E*>2BJz*Ss1bV#dL`o?(-@Wpo<$q!Kt9 zW>+4hu=53+Z%1LN>5w!HPL%mShK3c0I^u=hkb#zf*(0g)7Yy*+ng-j@te0NHfeD>| ztnKg87f~UY{lnq1uqotDs{U}8F{^*VB^#?7_?Ed|&+!{m{A?DyGWE=FQYQmdZM`pQ zL#VM_GM!<~DT9Zj|HIe-`GYyqR0b`JqHB(ER}I)Lmd+-+ce>(At$vi6z;LB~f`$CF zfS1XAWLbSBZl^5Ej_$x$WfmAyV9_;W(>-9Lae`DFpg*l&y9CdkL+$7G>==ls8Xa<5hIN73iauw4_4%)|{{UIV z%eC836qGTLOtE0Y_}7M6nuNtTfkQOX1Zir#RTH;gW}R@#1Q-AEqh=)qlJb6+}z1}8tWDg zJXVQ*J>NNZ>cVRtxE6=C@hn_1+FvaF5w>`GZ`N4MDyBkD_<7j*45}}0`*|K0d9h>SY}rPBRezM;Bmr{ z1FK>x@G@G#?a8*o#Sm(;v~aud`fYcP%PXF8fT-VmhJXlS-PC+GQySy@bsv&vCd+Yi zrep=IEi0c1&D3BZvtTHce!|!(0)iA_v#+YNvXNfnl)=+W7ItCGI7~fHunMYUHf*NQ z{s56J?9aIM1Qo{Zx@+}3jttw&xcQOXh}Ro4&aX)u1QE~Go&qtSR65&LIJXScwC8?1%DM>FzcOog#4O;!l-x2aNLYI1^?zHJr7d~ zKOgmf#4}g*7w@+dIjxjgj(4y?lty#Cy`jNW(2rwycFd~ATd@D#AOcpo1n$QV03xIlvM zskl#mPJvxln=$~URxpx9gugKIW~-*Ck5NLZWrLfDR3>zW$y-!?zl)g7IyoBUS^h*L zuhP=@7MNYg$a|)S%~cMUAiTxckO@Q#`$H-5&i)0;X|jB z*e1tY$e}~a>w;;E#*y)2A6d~&o{2S?Xoeo3dMsU0_e;!~Y@|W_BP{|X+cZ()&QSQU z_|2%6ABGnTvHhhWcs>EeH|XsKhv^;%$yi4IV7E}z?D%#oM1zi}r*MSpu&Sql6AkgV6JC6%f?j;u78*V~e23yURPCjEZ_pNCE97&`JNq_j8`Wm( z+U+xFpFbz>NT$=xq|NP71umU059w9cKQ;Xaboj=&%{l0eVosXh%2V~~&Pti?`0sgt zhnJn}>Uku|va`3$T}0?pmPx-n6b5k3<}z&tLlDeQ9JaFW@Y%TjaVfE!P52jBv!%=4 z#}}Q6vSC;YFdG(MZl*CQ6=6kR(<*Z{M ziUgX;K3_d)ErFEZ?6;i#5%J1zxVnP~<_c^ATq`*WoPtNOpo!X#KU_0IpOmkeI=DtP zp!oLCa=CV#UY?2aZYyO%bX?6zEuGz=w7FlhUeiX%=0`ba^XF^w08v+pMheSPp_g?T z)j5=H-Pzyy5ZX2%ly+y`dp6b}1-*bXgE@Z5@HTZCHiG*|LtoDCwG$vx`9`sP$Lhwd zo~W3*E!3BCz%{t*YSue|Dzzl?<$~LOeII2AWxFMT4$qmFf5;6{op9&adpz@~YHN0A zw?RyO&+gO0$=ZQi8%5K`-c#GeMC6zDbuTjgA^!SM+@D@9GIysVU$SIvI#;X;FyeXK zV$)4HGv>KDZgBM%ig)92jhiwaXfIo}?U57V=3GcmIcU1LGh=<3Wglvp|en?oc-f?Jh;RjNBgy&j%{#G$N$Z;5FX^r2XN&8*ic=pQSHN+TJ11y38$yVv%`LlI(HoPX<1rdPpOl~OR7@nxc-TQ1tcw``p~|+JjsZ3Da+$+t5%xwNs}c;wKMyA8^%hE@6if|T zm7``*Ui>g_*Y4hIT>}J2FSZT8$~@7S3aviMC`wYJU`;<3;vIC%TeR<2`_*)!F@%>J zz7Y1>is?>VIKW_(VJ|S0SNzt2-~At6$ArB2NdHAJu~I%L>+vUf69r~uDE~61&L4LY zb3mP`(CI0E1}T#V{%)#mb{ZhZ2v)yb$8k#L5hqKJ{gKo;62ZQ@av_TV`akW)o3T5&&i^zkMzKyba#h!voIags;8KP5kj0Itw7S=s{)$@uI${S+Ar%n|IgZ;>2d!kqm>_JvaU+&L0zVC!9{FOhY8L>D zN*_E!_=rGXA~^Nsv83e<;Ded45g)o4FyiG7;-vnSs`<`Vz@Pv6>eBQ*hb>&5?{*R%XiTEMb2Qd z1J%KjS9cJ`OrmuM766fd9jflDZ8s`Vk?>V?6i0R&MS+YSi?BY)^SbbjLX?G}PD<&l48Y`{mFt_z(7{!Tae zlR9HOw;hD^R{2I|Y}cSdDfLP8U@}SH}N`k@arn{`74%8|1L*CC03EzAKoU|&=KQ31cr`*Qzz8Y zUsh3jm#_1V0DYBsCh{FF0yI|7q8r;s7*N8O^t3pAcT_Krlc;MLI#;!>nQMGP3&VG{ zL}turD!fF9pJ{9+_1e2L7W}45XG-;w0o-5ZUdg^#I=?{afP&emp@dCE)maK2ihF7` zgifQlD`!F@Kb$A!SA`6W*Y~%i5887MKq|2h;COZ)sJp1 zUDq0pZ&%kKVMDj#SE8qW)$VC2z6j{Ta+z#FfI7r3J(Znaql{~YB|co_I`(FU)!ORs z2MRe)BxL#20ck6hK!8R4NJ4vKO*TJDR9RLNQqN=;)w9!odjVfDvCjB(8INOspFx2N zBfJ9TNIZ;XBfhJ~s1%Z!RQM!i9EcGit1GGRxSJO*g6$yZtwl_rR9Z#T!(ntbZF$$I zFKe8z0nQ@xX^b^(otu&-%Un1$+VNB8&Oj#fuE`5vP*wgnOh8^WO5+kn6r~MH4P;Ev zE^lP6HE5KFs&#ilJnXUo!KXx@Y#_a=@2}yIJvi;A*u&2n95^@VA72DlLTv|)>vk;) zWU@%Kvg#T$nx&Go65OSi&z<{aiuOZgAmQic@!ompV&>#OkcIBq?T(pS!VKP|4i4I7 zZap4`VYg5WL*!_L)?!FU)h!3II$2GlBn zIM4rT%UKXyN;`Q1#e#Ah`$QYIez;hzBSX)B<10mFo{dLQr%sn-Yo1gN7$&aCnVWNn zr_Ek51Du7e$GKa?Lx+p*EMsccIc)&ezlY%&*yE8DzpAh2PI~=i@uhrM%2&~3XSS_N zz;%e5W|tNfQ4AW86DxE>`l~CfbAx*S`D;ApLc6Pzn?608C=Pe^&@js-u6{(kJXIv+ zDc3JT*sUvQ+oT$Gb1&jT*hYHL2TOycw*QA6=>T|6JxA^r=X^SUp|=SmZ~xZ(8h__Egv*LUHKU0DJ7q775Zx8KTRxs$S@5W?rME<69@eslwd~T8uv?nD?QuMY7?~k z%;Qy?d8Uq-xqzUSDdgkvCpahk!~Eje0vsKmZKv|fG`4n5{Y8aMZNILoA2zBB{EkD; z=e1fuui(^){2F~_NiUs{kDd}5sAFF1ULnFQs-Qe6X8mAR9x*K6l~X$cH18M?mIz!g zTMYO+{eer06|Rx)?tA)Gv&hF52DeZ5&_&BZ9ut7 zPR!SJWCf>cSy(C&d9bQr_8j@@gmpKhlve_ z-)c0ROjv~N8sbU{DH`7R_6^yYonkw)ALLnUnjl3b{LZp=qi`|(iBp>aVC3lMS`z<%qY{M)wtmuRL# zbTYU^ViSIQmUd`v<|f9)l`dWVcD zi>Hy01j_lEq6$4KCYCixm$-yq*eCCmTSw0HiZ*r5GiF{({&oCC)yS$sx4_YA9|EEW zTaBMX>z2HU6u6VD|(V&{jsd1 zfFM+(Ty>rN+nnxi{q>d#Kc;-sG9)qFmMqz&0z!01v|~%HuEE_K;jMY#&&TWBgA0;% zlFM6dUBUH1#20}aI3i|c%Hy)l0j)hd(mYtN%paZRpwdJYRZisv{>WUc6H~EG3;vvb zCi@Pwzw<`2FxOi*JnU@_lo9gVrJJ4o7}uEU=AP^2gtf0&(gnPI-z_@eJ%rDc7OZfVy@`!S z4}hMGXgz7)REsGY-hAPTSnKod=o+l#=yv60El)hjwppFU`P%df3Ep z6j5U~>V(1iiTIWQYwVfu+33pipgX^hJ_ANW$)Me)Aya1GJ&UfDOXO97Kkl4_*B)NX zp_{ljcrpNt#sYC2DYh)Bo8ZXfqm+fKg)653&SB73B-G-EwgOK%ZaS@CAU%-Tmu>N=lep5PPn8-6i$(FS0 z2g=aIeCsU3E*f;_%uo_q@Oo2U@YJz))p&R`;4xba-s7z-eNT|@(FPupg7bg$aw9=( zxxr)6K~WaLjHe9If#7Uq96?QRS2Xw`iAQ%SpF4HgKGCw3IZ?MlN&hs(D&!X!o5}8pO%YG2=H)Vm9$e_O|Q5uvSK42##&ZmfkjX zRHN__X)`=?;FLvRp(>2$35-?d*h(-lL6AJrlGWcCOv9AYn<4n+8n9tXA*GO5<0mCr z2yeIi>3jg!nes~5W@dyU-o4#Xvv-59Tr=)pT!=(z7Ufq)PAQ^<98mht{e#xfK5x=K zRzM57kGxvx^bsg2Tq3a<*1F6Gfchhl(?cd0k^nAA@{kB`2o&Oh@cBz1bfH5pT^vz!?@dv0*E@EHxR1~e=p=4p4aP`MK7RDW4m61Wz zqBfyx$M{t>6fGZxN-=4*hmgy2KBe(&uhE!0&!WKnwBH=E4;vDvdgy0{ z(Zp?bM@#0$7Yb|r`qg>l;4M^%|g zLT9UGww{vq@6DqYAajSRwvJyh<5BS9-FQO&1lBnpcZh`4Il`ji6|M3YI0?vcsRIRw zQt7Wlas&o(1Bv*PV&Wui%?Q6f#{>I|!tzx9s`OJi9 zY%8aN%*xECS z*Ul0REdUrxkfPncj-`u^(I(QhJ8mV$G<7B#3fal+b!@wUj6<-P${d-;>4XU`nAx|> z<|3yNw(`KR3i}HG3_@SG%EVQZCeh{(#`wX~gFEQGruxpnWX^DhCtF&==+fg;H>fhP z3?$|#5-DG9tFJ14! z=U?ynu=m3~XLru-%$D#+SeorD#EL;rKXIh6VB(q+Z4(JApMFlep%gqrl z35Fj+v$m{k*ruRr6(F>a4j9mc(assH2kMuePc!@+Sc{dMJ0vZQx=74jX!gVR$l*gj zhs{abn%_<6t;=<2m@4AlKweAzAv3rSzfWUVV<6avWBge(^(fT!NZN};8p$`5EGAu3 z;r%p)9eAtwH!;%VgAT_B>sTM%p3kbkhicqBmOiH4zL}$*); z!4I!pGU5r~(9EN(aJIzd_czT;b8iNqYW|{2q|0oll1s?QP~phH7<5QJn&KWzAA%S} z&GH~DLM-ZfKONF#o254leD59+j^tMxcp<%{aXD)~?22a2j)QZyHe1ozDe&G{QD&;u zWx_dI+X%2~i>Qg2Bs!vvVq;FTI?@_BvI`~#|g+g8go{>qN znn=V*t9oOK)L)n9sE<4>Y^U0)W{z?9L&oyiLR#)%7B{iyQhV2$BZ4Jm??b>N%IvWI z|KeW|PlI;2tRJk6ib=iJmoI1V=dx#5h z<^3e*J9YlWXO6+BD(*X-v44uhijqNyCB9<|K1Qf~N^|Kif}4B6^eWdh0E!}8`4@^( zI+tU8zZ}9G@Z(Y1}7Em`Wbj z&r%@_mQGFcY?mi=(A2GI=&Av}B6hLnz6010Qb*)BmMB+8ZARFTYV@=6)j}l@RG(+SHwGVGmBYi$MR6KI5>aiy55i3DO%4 z;x9Vc>PpR;0ZE4;jdqC*U0i|uYb9GEhmvJFBzu$o8ap%oW+%aW=IwBAZr4%3N|9rx zVawG+V}`BLZ#HYV`^Zga`{kNU^$uk)+#g2;ICSV~g-woFRsI2qtcT_Up4?Ba zk)d<~Sok@NQO$nC0Q0U za9mf@R@6ZE?^wXu1gLcy_tu|vyE=K;QG4m=?VA>YRJw*40|a-4yANN!VbqpfJJX1d z4f@+9&iRH-W1gu=tQ_MQBHd9n4dg|-rLzT+7dgQilBPPRvz3o!AvC8yLt|Stxr$Sm zYuA2s5HVwEF+q#qD`h7mnD-tcEJo&RjeyBX=7m)dvbq!@;**#(W*%&IhI{KfgMn z98j1US7;r}RXnXd>~<2uxtZvCfLh*{Qnsuh)&B&^6bTQnWi1LSqZH|FrFrBC03toZbA?dtcE)0EEv( zEvg$$@fG=NSH!gG2Qq&}m`&a#T;CSky zpAZ-u9U?gbLwwtpPcdUH4Dc+8BvQRzqFrecdtrg%0ZTLL+LB`c)cqp4d(_AtLuNeF zmcvT3@m%S#z_If_a0rd*Z>f=AL7h9uuJ}kd0n`K}UTpL)qd|dt5ThhNM_dwogxarJ zBkkGf+j-yHe}2mVX>gzoqsX#KPepL2`f1Oz@jTNd^DY(lnI`N}@*@3msjVSx*F7Wk zkU|VSMukso{lx!&a3@8+z@jJZu&FR=`W>ZDr58{m zNl36nP!7hfa135|MMrv|IBMiZJ?Q~6E5^k;+Wdpb#9{{E^+EjyjbY57_a`x)HWWqY zE8hjPV$JYd|2&%v+2}V(fX09QiNw!D|KAEMda|-m!#(y0L!<}VEA@(BnpOvaaw(ho z!FDf1=ZVIlZ=B^~5xEg-2JpGxO@;lbrT(YV$=ZI#CS3U0&%$4;x@_ZdD+I2);AQxq zbf^%;5ivrC;YQ8uJYfSj->5cNCPkI)yZCB_$Ma`ZA8njVy{nULDDT8D$xe3ZD1AUW zf5d?lboxAdr&&zXK{H8Bt#_sW*w-?aDS9eRA#{%z*`GitGSony&km{f{ez*5(7`o{ z|L_kTN0Ea}Aw(?97~M=`{mDHdH2P7&4h{z6r*3-lZD-xsSzWHvT|6DXOir{_p|J{YQ8ETv z+8#~DDChwnyNhBxX!x0$>rcxY4zC1J?_>p@1f4Lrq&bE{g&0#t&NRnR2vRgSEV~-6 z*m*sao!T0eW2EBI7N$LfX4;4%U-f*{3FnYXBH+y4a0Q-}FH#@-Y=n2AU?8oHm?nnN zKxEYB!83`NNAL%lB*QmDkuQ?=?Hd&1Jvcg_4qnS=$Fp?!$9)%v;_=aa1q=Ktp!{lF z!v!Tu%tNZ%Izp26V_*X;)@avZV-&lxg?OggQqy^KCW5*| zXTSBuD6j%Q7Ea~LwRrY)!zrS^202Zyl2H=T%c6Jn;H>bLh!j8V7AeJE)L4Z>fXHM@wnk+5X}x{B>+qI>F7(#q3YB9d( z4nVX?k`i(%A`MtNmZ25ZWe*PeoIB(YU9KxX8zOOJSXul{=rZ{r+HFxEI$XnTJu3`z7#8_a9o{)07xH(!CyB@gNk- zzelxVd41MtAZqz1vs)g|u0g*nxL#PXyRd)+!u$Rg#}s|cMuR^`#m`;z1PK6m@a2$t z7KAWiKr&qSJA~l+HwpUroOzqy#QI{*!0xz+CL8y;qG<}*bT)a%Tnj|`hyZyvUGZ{a z&26@(rrVEyia2m080zr_E~8DXU+4o+sl_hnbR^`m8k=I?s{bibK&AoBX~F&`nilKu zAmrXca@^8R`69R|4V8{VLn)R2v-G-(@^5`<7|ZQ3A5pHj1$1ygc!u?VbNsmg%wPe# zCMRkU|0DO$f%cOi{vfoJN?@az&yasdrUyV67eTX|9dh}XFmAS*gU%}(%Oj$aR-v_}*m}T!z;F8vgxY%#Av-y&Y zqzQb^aS_iCc8f>PAuFG2QK8!B=3HA=lCYf|9FE`4??(-7Z>vcJdr$3z9M~Z2{F7-{ z-z!TO*HW5Mst;Jmy3gm5e;Oo zFpM25jC8>hj7=(cg)Kp+kbNz}6`h{5+GJ`oF<|%4>RnD*x|25>^Hq#{} zb2AY&(GWPB-9zi5j{G|!2g)@p8kr3ABD#1@4OSF)kX(yR9(L>Uu2VFw)S8343fyKO_B_FP{9oZ^NY5vxU0^sqq_eTK?qCT znNuWwF89UyY+B6}j@V$kOTgOogzO3HBB-RFU9^tX(3kbM^2g1^9KI6aOL6uMwtI)cY=ofpqE#FtJ3c7&8%Y)&QRYElPptM|TieECn-(=||5* ze|oDL*Zoihny^-!;t>j#Ym?Tu-1!{fzN>F}8@lwFg8s>M7tyUAg$kyy=&?ZooBamW zA$iCa9nuO^7~us6+@vi)D7gQ;sf zruu01-?0Ev_%9}X$|k z@?EpJv6-H9J9J`Xu62H%O2WaFHq@uo@G z@3(s}aarH4Kk?&|ORtTenibpO)tgY&_8XMu=?Jrrwl`qW>H*NGAUcp~RGsXIgjgPL zvL3-tO+NHO0o#>|rVm&$lXbZxCS7_BgutW!RI+0EIu_D$C5hS&Erf;S@;Ns#u(z)J zr3h~H5djG1b!5pMwHWz#75bl@1jfWu)J!_gb!^`Niw{8Kxur zpzWb|%*0B+rS~FbWBywUQ>Tg!szH75b}m*Uqe#+t5W9x}`0ZyFaq1~PksALXeiGR) z7osFGz9z9hHB3a-D4DEKtxQZsW zy3n(^^V|GBGNCi3Gq(4<-mZ_OUa_UX60u^?dd49!t&5 zzY8(ZK};v7aqsSP4265L?{o5$QW;YVbH&yB>%<3cV=Tuh>FgWBGr6Nj6ZW}3G3Bi` z2NSptg)nE4zXhTB-8>zjlrzeePb?-=IFxBEBbS^J=;&R7aN(_eVdoC4Jm9mR6}Z(+ zv1lCsVCXA2Emu26GkzOtQLMKlG$@QUn4u=A2zGE7Ip(+3kd5GR8w#PToG;tzJdm%~ z;uxFzon3o#Tr}D1Xs9O=qw3qumdSfNXP#40mo8UYc}M(1g8M*ZB+&fQL29(Ce54y9G9FNV;sEPgn&seF2i zP&9X$ULieRqaiZUJ-A)=ZNEZJZyU@=s&zqbJI04kjVS#U-iWXkh;#+rq$qZTE2jA;`v79?rVU;Br388KJQTP};;GHD1WIwWC7@C$b z?uRG8Q*BxDB<--d1{V4-^1YLXbCv|Y%%q7yz-vA3>BYSVb)wBA_G)?E{uz@oGp%(q zpIZ59G}b-(-ex5Kp$S;*Cg$rue zb>B9XdX&8O7BdG=mw#jBY)Gz&Lw5MB>&f|#T@P>DvJvZ!E=oZ2BGg1Lst&HSciM*c^wgrLCM8&~j%OC#NkQYvw_7R@{c%HcyEJ!GD6);AgqlQe8c zaWH94(jX?hZJFe1LX&W1SBUn;N=(ryRiE?Ywa3v)13zK7FfpGD*A~I%(S$_jeMYL` z9|X!uL9SNM#I!-o&|C^PBFlko@YijPEQ;+AX&DtaR)IVp9UlBJ($G6|DijG}!5Hp7 z8pody>KJ>j!u9-H;=kn^^(e%yR)egViZ%z7@oMjfwgcGD7b4xK++?2GHR{wBtL`#_ z70=2@2}8-H$h||R6kqsEvt_~pHk#bC{OCW>Pc716N0JKZ)^p<)E^;&%Z|{@_G2SfN zZ^|OC^tE3yl$quw4J0H$%T>OQj}5v;ko$zzupwQ~9|IOc1(WKMVTUebhB({q|Ge_x z(>CJ?@5FYt_I6kiS#<`aZ0@(2m> zx^vx;xw}r#iH;xXVvaWE(6$^M`a5SHA1vI=esME8ixl!|e>uj)Fh9B9&Djz&HPW>* zUxG!%!Sz$P5w}!@Ur3U3QYnhMYn@ZUAr^`x1#JA-!A9`ga(w7-0|<_sV7uA|TGcTI zboek3rv&5RlbwmCPA_12AIZ{6hX%SBRXI8FMCb6-IMys}{@K z@a1h&Z0tteRPcvUa@Vst4n-;wuzA^##HGS_EoLT;DG#9R!M zBNNA9^BVQYb>ui!$u!V59 zmFaF=ee^EbiN~%DNzR2Tl{)O)jv~XoCo2^WHce)Nb+b^CEj>sW6|C2kroZG?({#V& z8!09@VV@=39#Yj3zi`NO&&K`5s`dR4u`ohh1Z*pTSB*{0hh6AQEH*0hB}OlXl+naJ zu6YBRXmU&XQcmf6y>Pw)InEv3T;!sp1myYw7qiyY1YFnxZkje)%sG0+O0C8$r-((> zQL?E<)Q1r`5rnd#gz=rbIjQllpRkc`h0Z0j6!MEn_4c#(>YSFb4hv%GBRM8QI{4qe zDw|)(E-rQ)SYLCi=k00mq|k*2NF&bA5?dg&wO@Rr-&?$k3z-)tQT=tmbRKs=1KNC) z4wvP%NHv+4OvlIvyY+P`C8`XQRFfvZsV>BNDlBHRY;x#H?f}>_m}u^T-)=r582u1+ zvA?a?T`c{&c)!&VU{0P6HP;e(bqFIDYP3dkCV^k0IB-1@87gFGW~ki3WjaiW!Hozu z{2q+xl3RJ!TxiB)WCiRgl5fNV>hz#0)2LIv_UM07ekP0L|J)Dem-3vw;lnDqio9 zUZajGDf;QA;6VO!FzsMrK)b3j1;z}dtQ7}AOcf(7zvrdhVPwI{l`<;CJ%z-F)=Cy$ zRtV#J9GQ>P^k}L_&2$(Jm_%lYwCd>jxYGHrp)r(-R6M*m@S1GA7A$OVvVeqrpj@N* zaC+pO#?Xw_;QLkMslxt-bS6@58tklDX1uXl^K=eg6jv&uQOVznZtL+*TWLOSQ-wcQ zE=8yFVPVrn-(ZnfQzIiW=~w;2cjrQhnqn_)uc)6zlZQPjNX(sub@po8+hofiA}KROhqy@uAI{R{ z)N69kKA6g?uE^kski>p6=9=TSnyC6F3NHrbp?4`gPJ6RxySc_97Wb&z4&LxhEkk5& zLp4a`-JtA!v~*>Tg9^51BDfkFxXSpJZ#b1Q6K0UYr+wOBG+nh~$ajCioHm$$#D0gx zpDseKoe``A{p|CN4DC@mEOmAsVcf$eV)ht!>QlKPl(BJmR1v3P+fv8<09NLE(@pfsRMp**^aR`wqlROPilGB~8=xNISSX-_1Mu zTsc*nnWv)`R*sOAJg^Q~B(Ha(8m^rVEjJFyxjSBkFI1HJ*X~(#h_8@@$mbvn#A?nG z-)+f$Tq@}5Mh>;uHT*$JEm#QWK3^`ljwPmOE)G^U7=n+&s|h<7iZ9kCoIhbk4yjF~ zbzsA7@$Wgr%{`m-aA8#{dm+k_@5*ZK)aXq-@pOPRT&x%!=7mdw4W-m$A;bORYhn)M zJuty>UEU?5{**mmBlMz>v+OuC-)OY$GNZ3)*P@*r2^tpGD~+vX+?k|Ig~0(?e++6SgtLKRYZXri z{D(DpC}jqDBvgQ27l3emahm9qX4h9DGRfcYs*`Q)OytI|#BmzA>unWeQ zsXgVfDwuz#!-nZZF-!!HD$8gQ?58-9G%1xz&OOmRTeQ14J*VGYUjF-h0q^-9y!}K% zSe0KxkeZ1vs-f=qQts`K&h1UdiSph9g?va1pf!APO8ls_HUn9*ZS#Io*KC;NG?r3! z#Q`y1Y2~DMg`}8hd<7rABo5f0;QSq55@iU=+_XJ>6EwTu@qPGktybF%Pp7)RIt#2O z%jg4(1!5@RSnf2T*+}di%v2l=Xl=U{hc3zWwjm0ZOsG3%pby?F}^L0&P(!gWn# z+xU%Qh|U(3JKB9cNM=!GN;C8E-yOam-kZ(ZZP?)LaNRLJl%Micl%3V>Y05vXkB3bH z+&_vAkT*sg^Jk#?jCijvf%pe#*$e26#wr}qgz8WATcO5sx|u`U#!tz?8iT@5mUTbZ z?C-h?1$*X@p2#-rI7KG5--%9%*tNA1+U7+ex@bx_5jLst$j6BLpBPNzFFw?-R({Wz z%A~4Pv<OQ=mXh!8L(r@{5ZwVS>;%A-gBZ)28H`lquqvjm%r4v<_ zC@|&Mzg2C8?|!|rR~Z!EocDd_mK|->-%cs+y zOZUc~%9CV_B}7})M~yG4$Uj)?$LYT=yZ64BvUjjt;!ASP83?T#N^&9CBUigttY#ac z?j~raN88yO0<<}~jU@U*%P8wgY$H01J$f|$$7k}Vd@6}fVWtff)u>d-T#1t}5g|Qb zYA+6yA=!Nnc|>6ie+4En_W|dA>R@5`zMRITtNEt%et&x=a;?Nc5-8NCDH(P_#n}+a zv`4vY>ZHL3g8~UT$=7W#Nv1xQa1MrDTN5Vw88&+Y2h_fz}slzZf8V!4C0W7vZR zp}OqcC31Z7A6Jsb{BJQ|-$dsP1FM$jk+!FIt1H2x7j9${db4M<`WKQCJZ$K z%Lg4$hl+jU5&^M9JVm31bfZR*38ZP_*7;tRZeA2^zol2lF-rpYRwFlwI-#&mf?tC` zpZEy(rmM*tusN$lHZGEjn}vcEh~|DZ4~opds2xMl!d)sYS9(;)m0{UhC}++t{g~Qz zuoFpVpwsTBN1s%!#blZC3TF5F7mY?HVV)LT6?$9lJ2l!;owY9BjpyMdmC??~42du} z1ORJHTJq^S)Xb7Za5Y`zBJ!**}3FLXn}3$rR*rtW~ltyET!uZ_<=zHK7|)(xPmf#EK93Za_P?`!^f`NwN0$>|HKWtYEr1IwB7o`+m{cr@-f*=P> zlDup9gtruoiZ>)82rKqGXD0InoATE?IgvPxaQL#RV~1cS8&~%?T9HHBj`Hiu_KhTR zgXlF!6XxSt8a5Sl6zHT)zcg|YOudHk?B@uBW(_Tsgj9R4=HjoDUzkm6=iwt9hME{)Un=I!OV+3odKO58TSnNQM0VkzS{((Y-!2*rP zd}l<5@2T#QV@wSzaN_j%oLQ{LgGmN#8l$OXjVzKT9=ggTaifd8 zR|lnMD1#MY+qRH~9fK8JqL$*j{(Ph6FLhMS=cs~~J8sSbZK?f#b|s^LH^>a9x6^!w zyd6y&>bnp#?VCIuBOi2@6%he_JswgfAvock)^gEhh^duK;ntoa4V_||4M^Uwq27t$ z(y3#kZ*a>8Y2yvPx?fY6Qtns!a?fpt%Czbj!(XCRenwvT)s>$H=e`;=+Xfu(gA95E zs8S7<3)3^cS%*LV;hlvgN{-=9lMKjnHz-{c!+e`J8LToV-_(5=z6HC_hEevmPmly% zMPgaB#kRv+Xfs)&hFic)fo({CFa1y(4mHf8Wr?TL#3GSkC`mmI&@3QChi-f4 zPKG@s-YNNhg8r4MJBGU`JC?q*x8RiY)Xmhp)-0BZw5TZ==R+-u-A^ahRS8flVVKAf z1GoMHry^;(^p%yNvy(Bu<)764I}5`!DNPbJ=3@ZIeIC1$WRX>2yyTtoU$9sxXS8tk z2BHGXTobk05P-4}kRb6YVwtzGmoXETsrf1Vk0q1z?$4QGxRumRIm%l!Vzc-eyZID0 zK*kOj5-*cg7Rq%*+Kn(wXo~<7=9S>rt2!(?b-q8KXV;6(RScoG{u;&0q0d@#)HquP zK?B3YBbU?;PsbzjpPPYqq?u$uVp#8mVCy?46|E_jUhIXa!)tGW9FBx4u@Xz2Q84<) zA_E>6=3+ZmHW~MUp)F#~59dT`zBW_#e#?$jQRne_O-!BWKYg0(6*WtVJ+bbX@a6>< zz9~lF43gSs?PZs1VDz^j(CN7V2|>L1*WC<5f84xj`^uwh2fuj$e_||h!4=AT`@14D ztn+pxKqCIDqtM1EZfaOGeTGmfp&8HZgfchJ46QEs z41obHJOLV}a)?KAc<-(H251^#UK>MKs`TXb(#N@WHEp9S`KJ_l@3)zks=om9 zAD-cpt0(RMkO4E&3qkhV`Z2|h2H83tQWA%^qh)sX1cJ@hPzo^S7(NE*yaOdMsgZ6J zPdEHTf@BDPZR-Cvl37U7KXwRox(q9rss-%eD;E0Zb;n-JUAU{CSD5}b()macV;lrJA`D=yRLBz1=GSEh$b8CtTX+dVnA(J} z?CIa5fB>aIldA^5J}my}dK<{dhZmr?739u0ToV&qA3GZsZGVl_H^m zIux>4aYb>P|~NQBfK4h01cxz5=Wa)sM4p?HQG!+GzLAWVD<(&-wf5~4=Zj_i+H zanAu3h4sJh2F$DUj|2jptVUQB+_5i;-izpE_0@vk0}dAVAZDEM#3rZGK@x}GyD~rC z?^|=M@Oidy@z6Lr)YaAk=a0&~G(xR`1835sQSQqu6v~jMWYlb+xeXx4@c(=UXX*)Z8}y@H*Z4t6RVV%uMP1>O%hb>qlxj zSi^G@3_+Fjwjyy?Dl=Oueq%KeW( zTH&YtiMUcxoOQd4_8j3%fNh{dum|#H<36;=73Z8e0E2p+Q1p%u>`=2G|LWaKhwNyM z${)jLnkGjARyFpo3i+2FIb0K#jdN{v(m-aA_YN)tp|QTHtI_TRY#gKC#aG2_wL93M zK5uUfWEFsLPKVdu^_9VG8@xXhwsp@2Tbeg3=n#}3wb;D&goN7ShsiQ$!z07&z2 zD9K-t!+_)e)Y<|&_s!cZ0g~p=2a%*ZtR(A5f@c{}2bQE2>#KxT{dazbl~_&fAJy!F zq#)S1nGd4tY#$)%Z2PC6L*dUJSq>)t}fYovSO87rwet7fwyH-;r zZ^wO&?tb|Vh&enFP*iuB@qhySTsUHr-Y3BU+Q9&x`kw|-;#AR%1C4L2dLLq^4}xq5 zFYx+c@C63I2_92aGu|D~s$@uUb0AmH?%Hj->xF^%hW@*$ zbO`+9C~gvUW16?U{8&tVOCKNK032Q zoe}~gF+50MMEyG!;54V%b_M8s5A|}W`b7n8;<0MJqL>7!&>PUy9cvHXJ7-4$Vq9-g zwdv4glQ=*xjrW_+e14^OPIvPjwHwMD7g#UbX=IPKEUfB6M__LFkScVxeph|a=?rt8 zw(&Nr&H>G`(vQQ#{zNxQRWBx+nuZnw7V^jNH~d$JK!BMevHYVoy!EBkbh4|tMmY!} z;nkur_b7Gs_D@#w9&uz_T@&5J^$z|yJ05HH<5f8t=H~%+90>H2RT833^nM#%r<%UH z>2*;~~rWlk*d@`1xt$&=i-81LlaYQpVis@E&*>5SoAq5UTLY z)TcEqnHh})n>l+=N2m*5GEKX9$75fBE^TAqEcakv3KwypfI9queveG7`014IvDIVT=M9@GLe%9StNsLt(wKd=w6YQ!!u6&U zphha?Gh#Pl(jB6E-3hzm4nMvULl)50=w6CA`i{T;5%2Q@tK+Zoyel20_roQsN*Jai zH)j36g&7{?WLC!-C!?JD*55acAEE*u$QMWEb4XRZjQ}(Um}#C14(Q5TT(80X%2ciZ z%r-1r!!g^r>r(ee6EN-Ac1+T96%FT(PZc}FfY~JfY%B)5dP`8h9sa*v4E!`} z58;yZ?np3>=SO- zNrv-(QPCB7V&;*u$|~>ckmBl%4wzOZXCPeO>;l~C(lzTEU{1xy^B0`Z%O19cUyX~V zB(=ZH-T}SF+d($M)3HR;8oxLUWlq%*0Gp&znC)=vq{iFf?i0kPMFiMKh(GQQzQ>4H zz`f36=LevDoyV}Ui3N?ecSC0uYNguMLT39jZr%5@&fa&@dd{jy9rm)j z{0hC2Km38Wu3`QU$q$}@FVW?3VAr4;L3W}ozYl~V!fDi}j{jrkg2;r19>BgZ!){{S_UuA~5SD2@xE>mX(s>B+;VsZ^a z>4-pwmnP#a3>NQiP?A=D8Z-ikf%acFcLO)O${2g90j6LYBn^wRH%v2ZQj)Ze?M0qw zH3+bb{^4CvS^!+jtdsfiEFL&$k3eVSMk4MFaz)wA0#ApZH5U*%Wr0GW|HsAxToKe{vVgC!!dQSlS@xdyUQtX=Z=zgoD!qe-fbCwS7~Xos7Oq`Bdv)Qw z-gL?BHuHJH2CxN@(wrYkl?fKBP#_pUAQ>4W8(L&I_By;?{6Jt|D^L zUaj*pbt{YcHZSoV`3_ox+NaF=+w7$ z++C?uwukFFdu9K>V__Ku80#UyFa3Fv$k7grhe-iq1`MVL4<5$O-e#LnTczGjp^~c7L#7J;b(D9`rocW)-g3$ z56Y(fkHaGqA9R2X?cNjJaskku;Zs}STvt7k_8WnH6NgUK(3exrlN&-W6@^{o$S9vr zopx7*?3!kKhMYAn;4jNdY*hx8n^46-fsW-Bq5SyhiOl@%-w=WrbuUi^O*}-&NZ;vO z87>S&RN9+1-RnMY=eyKv} zM<3*Ku>N3%vgmaS)BR*$kGgW2s|^B&>35cr_()j#EBl&SQ#)6;(UyH=uXayHk$FWN zXCs+Hw&?=+6VlgJ^L8R`a^x;Mot;>KGH>u=O{51R3kfg_3sZpC&!>d%dC{&#V1Agk zI=%9I{~Z0Y;Dl(-~hC<@~Xr#er9vtrrqCA z=$htOLz_0vITv0^_iT_~A!Nz!P*s%xT91PFm4&M7scFW`T_SggmD5Nn`zhjjzg6aA zJ-O4#Ja>69wexY`D#zGmdHe)(0^!5$>QlVXaWN+fSMwrY!@>kJ$35m4l|jvQ*Qf2x zP&0m4mFMfj+)ZBm^V+Yjhy8X{n`JV=hv|^fVwvu?x1FuE7mT()qV6vJL+K70?j|Gh zj1om$z~|(1kg&yDOL-Q`UO&swwI6Q!w&;&!zbG$iW*+F_nlDt_AEXo{ghwXZ9huT zcRPY^{jsf1#&YlRXOoy5CyIy8EvH%+vi-7$)^W74ScaPv=OmrGj)U>mq@!uJPvCfU z?$g1Q;GK6GpRhFI3{wB#q~*2T_L&)Z+s*HOJJ@*Q9P?RB&2gK{?R=HeanN&gfmp_o zaX}FJQOmWA_R9J`2AMUas_|+2;Pf8nxrh78u6^`3&PPGkIBed4vMlD_OW48Fea_3) zNxkE-_2_6HVzI*nRTi(6WaA)v#<8lKZ}>@)5rs<g|X7{SOL{2N! z8kp9)A9?Gl0WR!`(97C{BHX(jLe9AGQ2DFWSUwbE)}V|<6o9z#0w5)WI0vHvg$AUv zRt@Zs&-Od^)UCqt3K0qUn0QoNjB03K4pONTGGBHMVZDsC`nvp$<@O7Ui(@lFUtCRJ ztkoYZGTU?k1xVf;s>`ffN@ed*q&pkj8Ey3<>C*VUzf_3$<~j3V3~4`x7DVsYj|mT%7L^Tb{Z9TTUhsMoy^=Xpq5Vg#Tpt|orJL}xyj z%xYr3okZ=65vujgIT{iPg)yznDQF$QAQ)5WQTZbhp%BmOCU&w{zKnNtf6Iw9DP2Qx zZv7Ix7qPJJIP*3wjB1QmJv<`HN^50BiY!7e#G@(hX5(!2(PT@Jt8x5%opdX&wN~?m zb(qb~0rp*KpceP}U7*a-aFms2od%vG`s}8$qmntV2UPv7=hOM zH{AO{1bVsos3^L=>0QqEPovNlNPP(}G+LG4doEUbz@5T5tC^4Y{!NA^tV_3U)W4Kk zz%;ur>3Rtz1IrS*n&Wgg%FL23hXL_s^3fbl& zs3$@WcMqjw_(jK%-BRPUg-{L`T4Z1wCL6uFde0iJ@z9AZrcLnaa=IOf0PC*H=;DT* z%>ias%em^F9bnDRp`(r(BvkEu--awo3Cu80dd)t*GDI2%5Oa!uGd+6-Qje}EgJMQz zU8F9IK*%N6`()umhum&;S{wjOFb;`-WGOiany z^E4(@xz54y`9b34>7bL{a_($>dPvj2mO|)>yzK?|%D|qJCv?7WGBvUnvcB~Z)r;*YM=ifn z@ouHAtUTGcf~(%=J$4137KZQGDLZ&<4qg+ufW`RZ+C2nZc7oByXpYsqY8!H&ZeJD( z$A4}y&ju?qn0|37v_x=|ahIX(jX~hvRCc1VP)2I!!CU6Ju&uprB^Tp+f28qM;>%_r z73X!pg->Kiria(!nOV1*#{I#{L?WFV9UUC8#uf@_+QrLU5?oj`m5Q|KMCJf4#{QF&gT;A*6y~ukr%u;K_ zNGC|{vG2{=T|BA8V^^o`pO1<>zL9!WuomRNLtb`(+lk{g3n!E(E|*Q z^DJ?T|BeNSIF?vlh5RgvLbiYMvM&G|j>~M*pUU=UMH8MLpS83<#~~5o-CdVY@7;8b zo@y;mOqI2qQV=Td$j!Mc|f& z9u(3j1?+cOPHA^`W)1@ylTHnGczTsx@s{sC#3%8Zo|$ogMhpFSO~|QhvL6rq+KN z1X~YN#x8G*8gBhE`BBODHQ9~MwI5^hG)s`P>YC!Zl0Ky~7vJ4O$4jRkRHeF<#(?HW zE(NXZFtP{WjVWPm`2qVrA+>jYCreXKcV*`8VWD@|yJ(Me{tScUr>tkUvz5@P3y)3S zHX|z&2K4HdE+rtgum3Bn-S|%b;{LGoZc6(NQ<%wV6Mjdfhf>m7D92K^r9ScF@hlQf z2a^l%wYPUy<=lObq5^3~411&X{OIM;#q9Oyuyboaa^qJ-i{6Nbriy@>h?zL2^mjIcn^<$EK>BW@APK7K~*Gow3v4VNA%i@YeP0U z8b=6u=#8(xGxQdv`4&maH?hf#I!f@;Uvk9TN@3M+?K9GepZ zuuNn9*1a5fjqi6ReEWY1J!ww=Q>)t)cF?xPp-!)ute{!}4+Dvd1MZ&BIV=bHF{`!v zBMF_zIF*Q~Eo=}6_Ffm?YRoTsCxps)y;tbJh3m}B`tVFo9CXR@dJDr5KF%8s+T5V#pZwgcV_J1( zm&SD^hq%8joghvQ;ot7I0~FbU;J;R|tIM=^wmDg&dfA9@oaj4i!H^eTH^p|pVj~IZ z-ZX0I8z0W2&kpyzXlLm*4?r~!9z#r?M_w@AUqG)#%=??9!F|coGmD$)nPoPq)xY)0 zG%io>=M|t#%#lN>KbwE9E|SJ24OvcU-d^pj!@AE|<9p}w?HNt(+XUv4b0km%TmOt$ zPRwOIoebNb+5?a0r$uIg&fz3yTU_seyU#9XPS&zL|E1W`?cw3QVQpib^AXh#?2}Jp z3gH)b*9v86?pjWDsRqXF3$S-xbk>%h@<4==BPm!4AZ*~Kgc~XeC zKjzp!!Ysh4#x^2&XeFga>I(KCTJDX}=^%5$y6b@SudQs-f6+jE10a)?>$ z`V`3NO%e32zxN|G7CKo=z9n-|W7|5X3el|R@>@k8O=HF#&1#<(=hfDn@V6|aUNR#I z-oIN;yj7<~s5|fusD7B{2VfIDLIxfeI&D>}u3AEYp=zb85*=Ao_^p^(lCU;t^y=|h zXJEp22`-J57P30>IyY^W>?ZDP7ud`Aeb_{DV`Jiz>IHN^tRI5QIfRZk8$#Q6e@>6j zc!U_BaSf_iFa!YlJJ2)cm{&{W&GFQ;)YKeHWHUc#IJp7$4-4@qof3|C9tYjWg_Aa{ z>WdI^0{0v}!|nJysow+qH>2M~TEEsL@q47YH9QsZy7`em`@0lBmFMW&tX0c)CVPSA zw(1yl!2p5NH#~p5&2e|bbusmO;|vk=-tfs(_Y|R*9kB?J)DqiwsWx|LJ>-s`(+*zc zU^=kVk4~;w^K%@py~z@(CXH8%_JmogaD3#vClBC$X1AYr&m?c8TPyE%*-2r>mwLHX ztvLq+W zc96p8bbLR&y|d0El-B5?t1L1{dGQ|U9;AIaK`4xdFC=k)o;5Y08uEtW@Z>pc{p9)y zTY4F^bmC(}TUaFYMtHVQeqU%TW482DaGdBNs{7?d5N>|26j2GZrLOzSP9(xORiW_$ z*Y3{!4dzkn+q0UKveZrO`>U^Ns=c!Jzu;p%{P!wnOG~^A$0UFB2B7iFBcnJzJ+5WyB;ermS$-&9`q@EtkKEPP{Iy?-z1ktGSz=6$@G4nhjjudoCw0wcMqa z*0Q)I8?e8CsLfp>l&808M+`Q?p|teGa@GFym~DKwUI1_U`~KQiicWp*;;YL!?^mjo zDz8Y%Q%+RlKx?PyV<`KCcZp}`9-GF;X?zT?Nns63pVlUb&5>pwmr>quK;B5bep_}> zd>6h1+X}~F5NtB=+`^|HRB(&iW=39&_oQizog+U4KreA6Tpia?YRdK%u?~pt(%k(g zbR&LRH@r?$jKRGZd{JzI%O&_nWdkn(%PWo2qYHgFo$3AkL2=g5%H6^e(!zL3$H3uKxz!aJ&#Ovt znSDs*HF3FLQwDXpx!#A}O&C3E!7iXJOT4z|De3*IWF+xCyUL%w=#QngD$@9Lx6VX&t0-JNx+=E-sD62F$CgF|455%}8L z`MQK7*tx`x-c&y;wtUkRxS7;w(z5%Pxbe-+l|BpP&`$3YsYdL5=Nmms$k|b*fUO(6 z)41SzNu}YUbv-l{q}D3S z_VwWV6?7*`abu(1NFJM^J1y{j+qzK}zW}I0n+ct6Zu2^e@>FT@vqMb4X;N?84S&xu zmdky2Q*!V;@pk$>tYnN;SyjCawX6$h;FES{s9k!seX}i3+@`=3PT!o*atBIbrB;6P z&5UsTdGZI#R;a`rfAJ-0<7;J|-%F}1o!i^MWahsZ^X6CB^UhUazPDVu*qKu#a1H%7 zd3QF&xCbUnjJo6Oa}Qd(!FE`znH1fcq`ESwZ1+pU~&5 z?xUq|y+{!5V0z7kGt83UP`d0QhTn2Wr4v`4`Ahk0uywc7omQ0vc;uvc-`IKMefCM_ z=55ZK)PXK*uWHSrP1K2PxYCI?MlHbl_%o&PI`-}@Tz&kE!nFOuqi2F0jukRM(=M$R zuXTh-?nDb{%_N87@)1NknP^ErCkqO^$N6Ip`G5DUuaDLi8U&G)(#c`Pa=Z`|f;7g$0IM#S`3!9n+&_q-ET5|9kWrxCr(_@5PU5mdsedBH?## zGDk=E7wpXX7-!1&H}~IOXD1eFe=D=i&Wxz6h zTc^b2Ws7{RNH)3oYwbbNukoRj77YteGzFfkLqQXs-QY{I77P8U1Wm!kDX-x-BB?im z9J(_Vs3OwI_afecZH-~G=p!jE@^9`gg0X=!%w<%qRP>tX?&nF_YnO5H$2rMZuA6@z z+<@kVo|}(p2Lcgs-H+gu+EYyr9kKyhw(6d)OJz)+W_5Dr6SKdPzPw*zvd-|`!~NQF zzI0nW`mW@6w7K^ExpNp-j6L630{WLJ++PPD--sebP-A@y)9er^KxKn^X>A-awZwZm zM-gjF=)MdenY|;J4t^w{^XH=Y+lTh=N(EDRsyeH~Q#+bkYq zwrESwZQPA{m&;&d+bDdkt?hzq2>ktKz)NzjP3oc%V5{*;%pWL1EAL?MX5=60svFAH z9sBD5|MLUv(zuNnXCR&z3w6bz#=mH}j`e)K9JhAME(snw`SkB@4_Jb^8W<~#JIFnF zEllcaO*271EOWOK#Vb73rou8F{JUSgBL>PeyX8QT;gpxuL*@66mI>Bwk6X0$ED?#= z{~p&MIpBd9buW?m;b}Kpc8+{Ca#8eCYOeNA1N84UNPT8&-MlvS!iHhL&JXo_(BYH= z1~?h3_``p-^4_EVLVM42)0Vs=;V@U4a|?6|Eg{Plo~^(B`&hs(DDkXrK0`A5>bnXr ziXT9JW%c~41;i^j^c>&P{g1{M(HALX$;GW&TJ}LSCPwje_7ZUD!0|l-%(4G$Z5q0v zrxL^>S8V(!Nn|SOp`1^WPUrNRw58ART|9~Yv)6-oLx-g@t|2ZjKer`D1eGR12Y2z= zzIN^D?Qs^yzdzK2D#>Ql?_!%wMo+~2e2-#v!oi8K zU7ld|^EL;HhMRX~D!oR*j&&|M5n_Zw+M}(RBP78>pGZNjB67pjdf0Ibks@PEOEdp5 zN#n&GD&JPMAE|F$Z{*E67L^eTjyvL2jaTQKnx(Pnhj}LFD7-A}_}Y;KZn?HkC>Qy; ziPC{kfvjGD^pQI3dV?vr>*5u%Q47G-pw1j1Jm&h8;P7teO!cExPQ)-lN=x7p6?d0x zr^KReZ>+eg*6MRVUp_)w_&P?yD90AFB455t>?eQfI^4vQ1k5aM*!q-7p z3w!A8$YVbRlv|R9xOFs2mY|5K4YbO;NIRxCm{;>x?2izVaz-g1vK9?Fpo^`$EoUKu z)&l$Q3LKLi(28HDe&AJ(EBPc=DG&%Gl#>VH>P~qv5~|Iz7Jaam!69sy(;sdgx(A&7 z^)5c7JahV#v1PxKtTa;_nh7RO@)!uDNQ}Q6u#z4lHAkR#fwsZ@Gv(^XLgQE6Nayy+ zx!fe$(ebSuL+6I3cEM8K;Y({8b!t-9^ELFYD&fNmaln@CQe(eyjDovE2n3|48ZJw# zVl_G$8UzxUOEuC$zE2bBe66;xLlO^EPMDdZ_A*o$Uqhntgqu{(cz^+bJ0O6N*Gk~Os%j!A>Rx^IkZmsaA+Jx<3OJ*r(AyEqRT;_ zx{^c5_l-UZyVR#^)fptG*8SWR3Ac~0Po7(Ikv^mRmLlZ)vY}ZrBR=Fh0%hT+_!iSij+*OXySc`l$7+hc3IN8@+I z!Qb?=tZZMZGe8<{wF)$7OzOmP;=xgVdbDMl=Jl{%c#76lIZdv>oow(EdB4vT*DP|* zM=iU)h~m2s<%*W(<7Uuc0^T5p)m#!Xy8Zh5N zShfEmE=K2Z<-o4oUvTn)r_x?b2I()gwBI=B*`^1?Ow(zm{9IxgY>wpDHCX)l9SfTD?0h%29*=I zj&B#edPxOWxEup_PotM4qN-1_4_|M# zG&=Tu>PSg*p4fMle(G^58G3kF;Vk=tG^-RHe&OfJAO7}CHRbYwR^0A})G3UpIpWj_ zCB;EzBHL(Pdi8s;*kQ_~eO`CWeXODH?P06X+C)wny;4)Uyq0RSkD2JkL@1sO0Z6rF!mPl|UZ5qn76Fh0BcYoV;j4 z*_+9r%(-#45%Lv3&`kGIPtu|OXVF{t^<>64+L%utu|s{vRf!*7tE4T6M|QVDypy|I zyIcmYDbpm!316GKc_FoKA_X~j>uWyv1QS2Zo8I44K1^l~@h%8cBfM8Kp;U|W=(F+B zlv8Hiz{Kk(PkH@G#KQ6ALh0rJ&w`iR*63|7DO_U^Kag=7ym`_kE^B9IYcx$k5OvD! zz9zQMEwSRln}m)a$=tiBvb0fDhnOYB4pf`@vFLH8poMP~7Ega|FaDWSPSt!3bITL=mhx$IB@ zAhGpcky=7M=gvoc>G7`SE;+0Lk@QUy65jKz(G)K(40#)ll5vqZgo+BrOffL!vSWpz zyJ=owfaYxLKN!BNm#0@uwkoS&$s5>0?vi7|#JLJ}U3np%Jvb9uroY8=20Vhqllb&K z9mgf;V5G_%3=*Ve^=P3l;v7O1fO}r0!n*`_d`%dR_}6CXiPhxLUCn$HUBuO46K8%Z z?;1ved(M_(%!XZ#YCZ)dTPW&V)!zAg8ACDB!+M7d`^y5q zaa@e=1N9Cqop%7urgRnS$?l03qHz}7{5vI`UsT(md=^ySOghEcSD~iasU!*$!%z58 z*g{+|%0sgphlDcVvJE>R)JxM+k3s;H7+ zl`S~EZ!s@WycsE9p<)y}pxVzg1V>rLVSoq3{Inw|5RkH_5lig7Oqd=2)jjYJQss)#oBG@)dR+KOP4d!yuIRtt?y_n0JYJcW!l>PbVEy8B*R zA+F;+2C#)(28}e0umKg$kf|8M#qu)e*3#Ghp86a8moi+QyJx$MdnqDa8a3L~yYyaC znajbs=#Q&y`tQ73^n#9Xd}`Nn>>ydfWb}7us5Le%8=gOgKW|ru1vFmyV%xG=qsd zD!PG%CGz&KvuW^kC{V45HhA0_H&3zLT1+i8SvZB--`I_-r5Upa98wG!B_{@&6)|^X zq-d2Xq-8la#iY3A#gE6?1^)*vRJJQy0Z_X|4F0l+-f7XiOtHEGoCzS7PX#Wj$8t|FK$_^|f?ZS2^&>i?NJ|svidij{3-=M!+7;7-d`p4uLTrmA(;N)p%BlW# z<8>Gt{>^bG2~8eitOU%4iq##}<-r~sNJajxFGb?}E}_14+O&58 z@6r`{E!}fP>i+>if{g%VUV)Fpu~cOvRKfU4RO0iu^aHckc}gS)*VE0m-h9MC!XBv( zz0mGEQ%C*Sp{A6xYgN6oapYO!I;=&7QfLO(Rsxa-Z}FqW%h5m}pEstIjD(LU@#pW3beGR_EwVh03u^a+z z=qc?hi6vbd&I(9X@TJdc&2XR=4cqqXf6C1JvVQCrwWmmOzhS|e9P_C!aB^UbGcU)2 z&N)I-i!c^7q+WolxSo6Bpdd;+b7(&(#ryo~os7wcT^v=XITLyM4c|+0DAtdH1$wxR zo4aC*r1n4`v#z0CLh)b}8x^d=?%TB>C94Kec3!%`V>(AKKJDUu$RmuO4?nLV9O#6$ zHv-v0yun=-wacd{O{Y5zp6#6Yg3y&mCAp+EzD<`={$`m6l$B}!Y5_vfK}Ch(nub6I zos`fnN%m;kfrDqEVC0e&m+*b|k&R$;y=Jwz%>|2R^e6K$Jcp`bRH-nF=dpFP!(SL* zgl0D-*bKagUlcfHA6BWW(&$%^o5wd;DY>#LO&%~kbwEfrFoOc|a)_Nka)d}e>3U;)4nE^jG;pf1QdCbgkM#5WB_Ez)Nsk4T@g_najP z7E#q7LSl+|#KI_}2Jr_r^dLm%?oDfFE!iYtf3m%=N5*2s|C8;#>=w@5KK-8KTW>(8 zPLE$1WJ9@jdgds{1)FsLF!q8WdI(Mz#fWnrv$`Tmr%eY(X1;6f$up#n^LUu{d)0Hr zhFqBrf2_jfWc@qqV)zryF2RWUCshfQV9gn1T=MLV0g&B~k+_6WzH%#1YavOm$P!H& z)2f6L=(*=;3#lF}mstOPwNbES&bjOnY{i<|Z!jJtN*P)7T|*jVi8F8sV^*g@L=!*H z33L{M&uiR~M*Gf~&&~p6|7=69o*uF>Ug6@8=1EF@Q=hV7 z!8{~wLQNV>paExiXJqY~2imqLP^iE|M|Utke0A|W`rGvt*|)DIrs7=|%SR?qBr z50 zf1`ka-&7c=^b2)Jon(_Vp8I$3MFj~**UKkduK6PJ1hrL$p5zhPo)o~^3tYb?Ahm~c zD~t7OStlN@rnuwxZRy9Ydua( z8Z(sH6Jys3&7BB5u;GSd@l?sR4s2lNh##16zj@QxJYZqpr$N05>Abaq^ThW`tT<2~ zn2)W<9QP<(T!DigSiYbRUR2@64@XHxn)7~!&Fo`eCpR86(!P);083l5MoT<>P9i(G z5t0q2zpf|*AyT@cy(@AnFDK6i;#>>zNzltwMc2Fi^YKL2EBhYw_4t04ZCcOhkDK*P z`2PSyOp1jsp&2f#+|EcIjuOq^7{Af8*Y>Nm4(B3RWC8sQlCn99=CzGfv4c5SJ=vYd-;& zbe5-eGqrBEQ?xGQc>(^OnIQRtQErAIGT0>;7Lu*p^jZ{HkTYLfy7a>2@g27+bumC_ zT=?u`s`O@!FJnb!wMsdn=kWWV@VdW!s>x|Em2mP~IC_0v1V$j{v%M^UamjsS9erpD z6$3r8yUINyJU@5)5){Res(7g7=1m2Z*nHI%i%nYI@>oK?V8MC;nZs9vM>@M-MxRYf zVPT28{mK_F^Y!fPYGcRhrP;?xVH$3AwlF>F+w zW_3`oshLpARb-gxJ4ebG*{4KyDChR+_RP=Z!BSq%-fw-YDqB6nfZnpl+ufYgd1ekr zNCk{nrYY$vjSE?GCSY)lw=cSe#Q8DHa}sakCOLme9aF&jQ-SCZn=p-)m0l%=X|Ig~ z`J*3spJYrBWdde`Om}%_en!O1DJ95ewtcWC_3rBuk9$;aNolN--P%m~KS6kEJkAo` zHCmAk7w*;6j)U}oaM@}|tHPDG3#h^`@HA1CPEFfS zAIzO@#_s0uHO+!~TyEei`o%Yf0Vbp{@l&`du4edLwoh11yd-w`=9 zG&ss^?=MN#oVuC3xZ&VX8v`Kz8=*wTq+|bFxMwV zGFhWz|B7$XZlB+4#LDBr3-yy3ns3Q*7{wKh9nDPgG_jxG3Vr(`$xsl^|2pKUhW37x*i|O4ELg}vHF0uu|;ivDH)7D+={yfR%Q8g{jE&pcY59LB*+N$ID?M}km#@2W^ z_0wx96s;V1NOb9?70ZcXR5IXySQVy0OCVmEcbOYLE_in|W`&MI#y*}oc zCq+x~N8~`gOWPU_@-wIAqR!a1wED3Bd=z7-J-xrvh&ypN;2;%J`zAIf!ELzyX`V;=3eqjk|P9?MZWlRDJV zqNRk)A{q_Mp+(#f*5Y}#n#g0KXbe7WFW(8bgd*xjCibF)5L;#SL#q59wbB&qr_riPy( zLlij-V3N8vIXJ5{MGthC3sNoQj-Rg0=+UN)vTwr}Ln`P!yZvuxQL;u<+^S-dEXt!o z+>jJ}g(Z`#ICD&?>p2Y|(4WR!o2dXWi_*|%6SLw~)6cXR9`O3PuF zZ=a*^W=HgqU9Io;G%g^S%7lgLYtIb>DU;3EUQ*eo=c54kovRQ|r@my^!g8 zEYF3HC3uWuS$nvY7J4m8jq`1iEertdzX&9luh_ezc>?`?bI%BO`v%K05HY-GW!^7qwl^XJ|rte30O3u}Srd$mKV#%Jk~=2AQcI z^od9~NI?yO8$4e0Iy`5_Fr(dpeiwsk8>#d8LnoPJ%nU8*baWVJmF_J@kum=Zab;eF zx7XKH?kFsjANr2rc+E%i(RIb!YPJK>BI~@0vALH&Q*tGjnoE>wbZGv!;B0XqMNGwB zP#)VLK{57$b$cnsa6(7Nn{S1o$CPM7ZM1NBte53}I@A+=%ENKXmKdXP4|S$8ag+o~ zYPYG!bUvE?QI}rJMhKTxoTSJoWj(aV(K9ZjAc8-J{4-2<`I-9|{$Zn*yH5>YALdke z>d7B1-y~GZAK=H(B-5DW6)O4}USkGCQK^;7^Sy~>;03)P=LTm@hUg(a3li@)AZ{ z`<=Apzqg#c=fH(n81fhT;p#KvJ%_np*UeY6ILv1CM5p<_swI%kbH~j`sE&U*sB7%f zZgl9zhV^b}AoW$K_rQ!`@ zNbwoLF-X8qKiMG2*ipN3W2ozbM zK_F8;o=d7hyA=Yee5oxu2pX?eP0sa;{>k81m8y(f=}*i*N8#DjIPXUVDXYOblAjrG$M(AX@KX`S$oct8 znZGMiLj&3cFk|CRgrgGl-mXFnqfCj-H{^E`&_|0%2Kr!vi8|vhvoZ_FK8M9QzDO^5 zPez=dJC^;s1B5|C0ot^+`Q^30BgK7#l7Cm=DUxcQj=WuPU6e5w?j;$u>d1AhJ^L8u zxF&XILLQIVy{Zal#2u(7Pk29Pv#a>!xNpJb#+E?d0kr5MKNlpJ<}jl{lSCVHyQl=3 zIjnFGNI7-<#6&I*8#45EOYyUyNn#Y?Eddw9@#IgL)+8#8Gkcv#hBit^YU!w;pNc^b znz3}fZ$PxPcv(AjqVw$$94~3{w$GFQ3siQo_f!aZwazpFPBM#WpU}129R(IxpOV-F<}MX{K$aCA;dh zX??iX5w#O^LbE>69%e}rLdU;(hjCbb7kE2~k%p&!>_(oucWGAm@Z(9zG1QZbla}?w zX$nKesnf>S>`6%M8$3zHAo!di5DVIN04;! zJBzB9APAJso`$BgjrOk=P@}MO)}OPC_Oqk=sn%*ISUK=Qf_kV zto6DWCaIYllEQ0AK@O#CV7(116&Ue#EXINQP-#ZfG4Qx*<#ri%z?@=y6R!ryzgm3E zWfU*Y`ZaoP$0RZma24wa3M~DQ+`{pTyRS3;vw|}>bIAoek6h`oQQ>P598y;JGL}a?5hgS59ExPc= z;xtFj_=nP!A{V9E~4yVTQ z3Cxz!{fQ;iF-*=zN;s)mkq~)z$45vdWb{g3f3c9K7F+524<)-J+4oea3I%~qnca<@ zz&Lo|vNh_^q}_E+Yjfg9t(p!3QkBxCf9l5NbPZzAcXaa&X5SbzqE#eKm3-Riu?i@v5cT!buVd#ASqu_NbJ!;&r^zZU=)1TT!$W7A zoVZg$Pc|AZcf1UW7C7!|YjP;FT&k;!T_(+{JxA7Y5_%besj-#P8qR*Wb|pIyFiX1XY)!q z9H7NEc|n^Z{{hn(6f;>*lvJB)(pGs^u0`kKIDb=)r%h=Xk484vr7XHY?o~P!q?g=o zuh8AM>Ti<8VCv@cXhjE2^vc+G>sN-GkJB#_QLl@X1lcOw40#eOtaw+C13sm;`}#t_ ztJd}X?a|Fg-}Ow5)8=B%4T>Z;S74$~{_5p2m;dVJ0=v6$_)3$h^qW@dOUs$fczRXL zvHwlP`#?t0b1~oO5AM{t-*i84H!JTy*W=y(_w4kHc3zk_cvu37YY2L^p3&#hP_9Mm z5^2=QdwaC-$C8G%=>eV0^-(egSJsmIMLlYtH6{26WQZ4jvnE68sxH|Do@>)+K{l)U zT$7LGW5CI!I-LNF{8Ld%SRXa7-`mk_X+{6)=--Cniz;(~!f4_4`_W=TVr%P13ioKbEyrTz_Z$0q86(kH4R zH8|_tG$jou8sw@rnzgyfVN?Q(oUy?w`s#aXFGZ;Zn#5_i7a(~W={?GjaPX@NK&p$T z8;p?#uD;bvbJ8+z6VU{5VJi|Ky(1n0IcL6&D$52_KgSs~p|YzV19}DVQp!03RLyeY z2FKs**ZP1Csba%=r9^On30=J65I%!464xH&yk@JeU@jdr2aBF^T-(cz8Nlltz&R?< zRUC*N`^}V19N2GIWOK}kbLA3)p5Rf>81u6sr>f`ac==H2pr$7HOHe!yZjhgTi$>I$ zE$Io)AJ5P78^4WX{8Lj@j-9fO-pgXKW?_PDZj|X)hw$msMWt~IPrLq1p*BAY_UK_; znYKK3b|Ltz^%(N#3WFB{pW8RX_(+uph1$PwPM zeM~BrEhV)p>AJ8dDOPRCP@n9Z(-g^~3fVg8+IgZ@U#w`Auk%N|wYgzSW{uEkCOj*t z8n-FuE*PtjuRC7vKe4yj=mV7 z+t>h$)E@%2HcrwDroGjRbF9P?dGGNr3g+HdkUlt_ zb(vT2KxH})?Wz3Mb6l#zof2Fha+DuOR(3`Qa$P$bb#}vPrOiyWz3NQt{Jl{*$)@V9 zt@M|4FVH(3SvMebk;KAFWmg{o#!4N;EY-5BYW=_k?{DdaJ`n69M0-ln=kh^Xh+K`l zCi;8lXyBhRcRa*D(#taIE-|fh)T?9!@Xs-a9V(B1meEB~3H5nQ%0&`xY&daWG;DuO z@e$yfcQO0f)yK&6_-e_VJPf9@c=F;eLA<{@DD@lFap!)`^B%K{ZaX?+sSSx70cv85 z#VQH3ueYT^sBQlM;Z;Z=(f=1?h)ng-VBWiM@f9P`6>z=-gMOrJu#2)o-&&w}<{aT^)P9BR z*OXOW=)?>&GEu`+^>-3=yUR4V-uEcK4llg&GLz@k^FSh}ZX|Jz1|9J)mq$$OooLN; zD?TT*Ze#!A*Xx5rS}1MD;=@Qk0otS8D`;RmUm^~ICq`k2K02oiKi6evQB`ucS!xN7 zQsC|bXXM0=C4DNbgj0z10NQ|dV(@y%S7?q){DSO;-8+f8og+UI>!}9)47ugEp$}N< z1s1aOfSaISD-(Z_!1g{P6TE`9n51b8|D2?q3$Y?WcwdD*D(5_z(&Of8m;3_=7jh-U-rm>|ASR$TH-8G z?ju3d7`u;FFMHliEYjlOMh-C9|F^J*R;yGbafYN^z;bZYEDm|1J4Stf?q|ASIa34XJvlh#--s{xs}R?!1_3nDGrS?CF(Y zNh8R!2Irj1dBGVdfa&`ccpMK|bB`9C+$ak0pc!>q^@Vlt$+<7!#6C(3iplEY@>&Un zj0;_A5ok~Pp5ii7VM!D`n!(`lsHm}?~GD1R8%}og|il2 zMD-5!#O-zy9VOSEL7i92vkvWZpY5b7d74!0UIj&0U@{tqJ*ka)XabzIDKJ}!<2K#@kDsd0~P6A!er=2#!_O3ScD z|7BYMpY+~WB}|)bjs?^5P3|>(;BuZBy}BXv$g?#s62N@_v$gR=8UgO+>zdcCn5yX$ zVF;=2yNRA_Hg@SJ<|0?81t|b8{og%t+Fzqi_x>7`nXCLz#i{(h>H|2J#U&YFm)l3^ zm}C7>dH!xj3Bt{FwzI%QO+-~mbCR@Z(r%9lDB;R0M*W_QSr5QQ-%nAf!76p(`F2e$+T} zT(}Ng&5;JY`4Eu!AG@lNJlgIZpm!o2ejdg(+16;+Xh@29{AHTE-b7Z{_t`;6ZFq!g zy#TLj@A-bukk-tGWZ-pDY0mx>;FQI&Xx(sVtGR2@ybWKfwnzoXFw8Z6fZGEkv<*C! zj|(k20^kCa|IhvLwP%$lZ{hL} z#ZJ5HNi+5W1)V9UtR2Hyhn*6w)Q(M{)F4fmB}Kb|{H<_IQ@cy8N}Lm)!90 zDyap`xF(uK#`Dq{|Juh7Jz^#SY}66>S=0G|tIxy(7ocm$uvG`Rqk;t!*=7VIF|1_r#Jy(Yq5nm4XEuMr16U=4sKi@L=!hIb?3nP61LP?q z=rBg9vJO@~r%-A8^F7-KZH#(bi%7x6RmK)g$VGMO&!oImLo0j@6b7295A zl+2TxiZ48gbNp>#=`S#!)GQ~aKDGN*0HX&BRds#7oyi9iqW9QUuA{r8bV&~L+HZJJ zYujEwPW5v%Zj1>99Uq9&iLI>`;KyoKO7co=JJN0HoeF3mPehIv1xu^92<43V2*mP- z?CRq&t~d-+A~B$W9zWE>P#?{5FmOO-M(FwkzpP+n)OD-=?$G*I3%I*w&9x!O%n)r5 zY;zdBBF(Z^_|dM;QVEK3*{cxI^D<^9{#IGoZMFY@6-eA(g4^7*^B0<;4q{lK`Z?L+K-=qE+ zQ988%(V&R+%B$WKpuZ!yInl2~MIXJpsV0x7pqv=uH-xsG$%?U%9#_0&eu3sHf22_% z;5gj9(J`T)g2!g5G2_}BGY|S{aGU0hBtM{ zuQEYk24wh0bu;1J%bK(C)2sNSy!C)zD>6l+&?bw4ehytjGvo7PzzmPK(T!Rc)>H>Uryg1-x)9y9zRXS<-v}XZ;}0L3>A_u zHR&gzi4g)l9B+Gd@oIuw!8L8qL2Re~ybZu?fHbGyq0#0D5YGK zz(d*yDZ)%GB@sHa8CFhUHc;@ac^O_kU3)jKOWTG^bXYh1*yD<(EyfR0HfI73k;M;jaOiN&8>K-P!-_AgA<$}1j0)xws$VeyJHV?E zW!>=ZmoCXU0v``oW;QCrKBq9M8XbKfkf2y55A~TC&hcZN@b>*o&D1MUS8*Rrvmjb->x`Ei(+s5bF}@CHXZh}c$>cI83Y!x8BVJw|6sW|dSe2>IaBMU8eH4gTM4fc1@J$_bC5&PA@bP)lPY?Ve7S>3BVyJr z@{rh}o%aZCLsD;AnKU7-Dzy9oh5|hF4e^|q0eA{&_+`AFnPVp?v;wV8w{Q0%A}{~h zo3QcpG%fP0avO>Ve|X|;#rhKsQZ69wJPB7fJb>0*SK|CTU$3o-+`VPti;6Xe(WgPlN_@|%}VY7mq@>QP9;KLFB zAioWn|5ZiguV2K8r%5mTa-GLjjnm4V-^sZ;s(1*Vi?}qb@P6G%w?g-HbC;plN+hS( zg|aeQoW1YV>!QPuJ3jKs^qcL%Hl&LAR)gBr^N{o5C4IZ!L>w$(8-6>P$8ihJse9D= z;fJHm$j5@y=%j+vshKQ839GsvKZd>V*LtU$+j_RBoLI8q6#C$1yR6;wDp4a7^3#}g z+1!zm3{bfrgGbA75f#vHmye9zK);P_e0MxC5bs&p%+_$hr9Nxp8Jn-MV1FU%tw4fP=ie~dgxh|Q+c-VP_o7OT+uKKDM{ zH)C8m_p|X&BKv;acqLvi=P4&rD?kbx@qCELoQq67G;k>%8}fPmy{(z<_>GL^P^qTN z8_dbhi1YK2=UZQz{l{4RhxhU?Yej30PP|B5I-^K1&tmuX^<2rqhJr)Dz;W6abqDAd zWSKWTR~hvF0eB3N1p?~MB}mSzx4HMeWjOhUz6Zj>Xtv8n?=M7}x+~7h<#80ybU=8E zFVDWu#OSemV^;6&wn5Yn<=cdM!i0^`bJ?#Zx) zBV3G7ked|M-irBvmC+$%^oc<+IG6hQjj9_w>i+HTCJef+7hh>uIYU17`DD1&xytiy zmzy(Eu5gbRZ$G^nc3V(`Gc-Cx)y)xNu(JF?E$Q;x!CcpjPe}3JhwH;P!>8DVPo!!6 zd@SJg3nNgh({~RM5d}9zTn5goXTiGhu-S}F-#XO9FHl&!H16=rp$|%pj#pDKxKGO| z0P&F}eDcue%2&mW?w4YZFrQP)_EkTNeDF!kR(x21_2&Jp`m_^=p_-3XCj!pJWLG@r7@GXS z?Unas^V}o7O9Ixy)n-?oasZtnw{C>oMOGg}_Qj6xAY}BSH4Nu285`E#AGA*kMs<=?m`& zif6BuQLEKeQIMBNQmK@lhko$dN=$lbdH#&`xkuY~(=^{}-DDEbJ7fJu@#(CkEYIQG zMxADkht@?dE3!6u(^Eu3n8>k1RbfAFy-z_Hwp-49h5MY*?n;_7MBUjRPf$p_{iQd0 zzFH}(8h4p5`ubJArI4xk>)G1m)K?kdYn8LtlXq8o^`d(H31+-tu)@n(y&@IQzfTx2 zSbH(`{|90G1vRSfpX2=hVQY(8S>h=jYA2$?mR--BY}4xTy!f?A6uNaN;I9f?WQW9iVfZO9W0Mp=UUCn2JOXfi%a7{U$~B`vaEF zEbkZYpGgk>_@>D1mz?jm;-Xh&K$It#2jVY5e;8|8rVMan1k*F3{trH{36svF9UnuE zn>!@@?$IT|hxm<~UmpJzt^0j0_q9?D=G38#`;Tlk1_7vdqt^?-d^K`eN4Qh~ArXBT zl^|4gNP3R#e@a4*YVvtRz!&o0_!Z4E!FF9< zx95yGe<-T|(66wQY?8k+%F%H8)=&3C5QXEeVy4gsUluEIQJ&iPG4UQGkQ}D=&mgf1yi@$XXelVac6xSi_`$bN>Ibigm{ z#%%gsjUOE^mc<;W^zYOzV8doM`DKDx2T>VxDve!LLzm4X-q_158kF)G3qAG`W}kG~%T>8G{vSF0gVr9)J|kL(E8~`+)16PxawKJzt55Vl zI``XY_?=asAi{`#+p6Jg_I%1Pwki-rb(M z$AA;gJSZ$fV7vx^*=;EoUpR)iycl%jSLXIoL36Jcv%^TwQ$9J4pT)P7$gKMY7i+*7P8``=yw|R<=^}MY|VdfyR#W zt6BE2e0`Jj|BQ^S0diHTa|l%>5_b$%BJ_lBqG}oL6%jjBf>mS(4ha8Vj-i-smhqyP z1{GHdaW-+2<|W1U`EtS&1X)fU{%sVzEADH4?Y;{b(_NP-!B*LIFew8K;h7CPC!ask z(OH|kcMk8%q8_%U*O2xF5_xy6C?qC}GOfFkv5IMXC`LDRTeNk}28wiHncBvlt&O|6m*vNv8`GW!(Q?C1vR53*#PPTiF`%b1<23{l z!cA;Z2_!V|e138zS^8PvUp#>iGYWdsfRTFJhu+;jOt?*6V8S1Zl+lS}iIeWy${YHk zvRVgmXy1$aF<8ppyM>Q}m)a$g%HvroBxj5N21(Zu7U;e(%X)7~f+@>{d9Y#VroGG+ z0Ikp#dI0_fN8CX`7QF7!EIwHR$-pp;Db7kE892bErc7CHJ71*4)vLhqK$tQA#sg;$ z;GOTflBE4x33_U2ntHi|AN9Q#9(tF==$yPd%tJyiQQub0pMLz*^F4^$J$sjT1KcI) z{O23sPW7+PmUPnFbL(z|dmLqsGj1aa?ZpCso3}!<_&t+tc-A>{cs)@|Yaa$?Rilmt$?W zQ#@;wJEwM_{^SQv&37p!YKexD0{`d!hZ8qO*WS4*y0WrM%u-~sDwp93SaB@YUojgW zbo(@40DjXg9+<8l$-i1MwY2_9`!=Hn(9zoO)!uj81qv=RREGjYl7#R5ub98`Nd9=` z>mcK0W(nXa+aewTA0(E$hXb#rTj!S6;771K-}1|L(IhA13Vz$z zhc+m|`Tdm!A1T85?Z4yi0&8tmVDHFXb&t_d#^SNINWwlxyKjR#^E7^>!!wRjYW^;W z<)Zv9h{gQnA0QThU)fctTAnLx8Ptb~#UdN-!#WghB&wSLkqidJ;5zF10iLtR|AwB> zJ~Z{qK>0r@47M-0KimormXCkRJ!gmoSLklpgCLx0Ba6&Q7OFd?+xw;PZ)XWKEO_v6 zT8d0LO)?JheUqAEEMt2Kg>;7NX3E~|rX8sNpbN2gbk$4i*me5<9v}Mq`IfuaEfQIV zJa-ZfOSm0#s0!Vuop%or4f=~2O7dy;!r<<1>KA8K9xOwD&(P*Y?+ZE3MQ-K6;1ZwW zF#lFjeIyzG8NcPY7VbS~FCm%b#~gR+;U`XLip|#*hCT%u43o0ZVF@g4@UW$BT(VU2 zT*jeY2n)gG>OhPfurGgS<^P+4&;;lxrvBpGhjNRGXxVXnHwe>X1+(4-09dliR~Sm* zvM)Uy6}VtBbXe|+)&r-*41e>iEK7GLEoSa=Zcg?Y|I4WWoz}jyvOuB>7%n>*P7f^@ zofjAlLF<>wW-w*hpLQtlNB59jd=lSoTMDy7{%T9M5#vnlxVkBQh^mk$jLY`%Ou*oM zr9_Wcs?Q{VA3t#U?p}4c)R%Ce>a;aS5}gA$zx0{v?A}=P^TpjyUt7rdaA7`h6+Wcb z4?MR6{McPPRv6^|sxMyS#oBA$YGA^2v|9`D0t$u3vANyW;PG;xVK@vPs*ZLBC?%;j z1K>J)x@#ACP#O=`FMQIf3~{F54&YSaadW007f=S><(x%$@K!9mkdDb&z~%PS!`A{A4Y69IqQSFcS(#`4=gZGkv}TbOy`kkxK(8!N0{V-(e{KBaVPuyZav3ES&H$By>v!^B-ec z?^V#LZ?AZ?TXX?h%VXf=h>kth`RCY}BzblqR?N1&hvnJ{Kr8@u4ZDPeKb&WzOkR^s zk=rM}&HBnJ?{XdDy0%2?{~OdM-d~HmH8UHmH_nvjP!skof(dvzMP~|F{^9S!*Zqxb znz~g<>;p`!ulj)l@pk|o;;byNw3#`v_dF5~aXI2eTX4LT8V8uU&_0~adwvY~40C}} z?JK%e-*k2V9}@#$bsjoTGe`(H;b2049$d@@mmq)-9Y&9>9(g2ICB$SXdoljswn2)%zS@SMH9NzmC9%-#vHU8Xhj}zQf4H z7hE6`cc(~&ReBQmyf?7#k|lp1^?VWf9ex`VyR%Yuq-xqP9DZ7pcnaP2L#V zdA$5m62Zr-DL>_DNnrg&Ci5epU&A}ZPN;-S@6{KBb(FO~QZm1}c84zmfN55#EB3(n znWGPET>kHz_{_Rpb}<3KwhCA(?y;0LJv=wY_iu^7e8g^s#wptDY)-Sei4Kyn155yI zo>GV|)yrc^X`#A>&`ri zMZ!$N{T?!moo6k9)j%FF4w7w}8vZ*?w6~wExidF>KoX^60cU0n5Z`^!E9qu#^tT*uAm^4u1lz z$2Fa10zSd{`Wq4dD1aWVnd$&K&_Cv}P9|WZQwa{tpcequ)Uh^wuf9PW9sq>MY4pZz zd0@b;u?A)i0q-4nfvwcz?@fDm0c+iUavQ$>aMrGAQz((qd7hGwr{~!OX|Vi{+^G8i z3ud6KNgIFwx670HG?10@izNH+Wr}sjeNmru*KxZkDQ72nfO0>7C;&C)iz>SpHSynk zS3(oCcC7_{NGI7ro5Q2~JPW#fSam~O4uhL7)r2pX8U1!snv^t~zN{NqxiC2Lf7kW{C4eL=Z?V;SBI zI+N*NG4$QCgGM(`!SSIYQb($GGY!P52aEv*((Jb#2sj~51+ImQ`I%WZ@O zBN#V0+sJKt9I*BayCcu9qx~uvBWG6(DuycV9lbavU%z0OP=#2}Kla!!uvErtcCSxh zkZ=G6(gk=W*TWLC>-np@rRijP?cBY0CF|&zIxOf3b(Tw&>&;YcFnF+q?|2Y^0h#_i zC61$g8IIT3=9C{8-2UmVz|qDuCV@eMuJnH$tYxQUGbNvQK9;w-Jd~~d7y$9^#xOv7 zkn0gCEEqp7{&79?i@@&6%QE;nr=>18fYfkQZ{+H-X0pWnaXs(&3b59K0~B0$FDU#7 zlFJl;3jgR)@~#3x#?scx2vVT7%%LYwHTbQ9&f2_*j>pcIe6+ocP~R>Znc)=6_Rlf; zXlt7bpTbI6K)~kyWRLY6R{xnU-uwX?9)+l;=a+{Bhv3qt3mRF`kRdeD_1LcmmtZ_; z&|;9TA2P`}qro6M8#hh4Y`8d5U=w6Wt(_S{$;h-`*iMkqVjOIEe3QBh^<~hJmsH%| zo+!e;XKxF0|8!OQK0ll^99}bxyGPW;FdC+!0-l59y*W>fZt17RoM3q}WtNlNA zEH~9B+N4U7$XDdcNqH}w*g^sxKh@h>a&S3H-RSrl#UV6%MYXTk^M@a*_;Yb>#IHvS z4E=iUK}fm;O&t*J4(kz50Kb?xC2$%> zo0yaf(c|M$-WZh=NoH$SB=;6`C#B);ZW2s2>9w2gI(F%L`bEW5>g<(=XOmw(8u-;U zTzuI9C`s*lN{0L7dlHtuULZVRwM;Pym%S^oBdt?-61dM;G`@P|@x2 zi%!2MOL3OpD?%dq5tF4sQ9bt*&2ulUEFB^wPT^ew$k-GZ5y!M&TWtWw4%==JG|{4) zFAoc|MV+4LevnF^Gx6e1t)XvSj)&(kDfL2VZ4;cTRpD&~w04!P(+azb-HDR4M$n7U z-VLeBj4%t$7po=|W|FUh_(I~kpY>|Q5#!9?tNf+KMMUl92=8OfkkiZeulZuXHq44Y zltvb-C#pZka0m&R^YgFesvuF96si%WltvP5L2Ya{X*DIKahfYgTptl?) zr&@Di-n`Dgp;XSSxXNdyv(fPZ0lTt32OAA3K?Spu*}GX03-?vlcFKg|>ua4b>g$Gv zWR?4ZPfE!`yo32fb4$^|ZN-s?mGfT_HIw`N6(Tp()|bi!hpLJpsO5~h=v?IX_bl1Y zpD^reF0aY%vaXjOP1(g!XV*ItW5v&asC#;x0Tdr~q8X6uSpbaih z+muRCemH2pfvb^InKUmWe3vQyRkK>G)y-pirS#cUdM?sY$uUtu*|UOvVcTVPuw9*( zR5QDA6ee}zh(5(fxi(V6Jo%@-^_*)wO{tJFpKscLtsn=7W6$1enVd}>$-arwl7lZ3 z6Vcsq4!V$QuNiAKQSSIygu%@0QNb&ubh@`QHlY$V+dE3ET}@!Uh>4IDW3D@ycv5jyQ^w?ug3H-(XVQ)8Y_q>+rUs1lc+ovlx@A8T%S zRe$|T7M(Mh$&Bpo;lW>oO>|&W6kG&2gXXIqYtDWt?#kp)S#7jJO*__d@Gu0#hr^+r z5HB}~i{5MxZCuGm;BI>QB$H_!z?9dy1h^mQ&$9QM9fW12EDY7UH#9|Sh{^}pen?G; zfGwUpN}y#?5OqY}uXR4pj+pTa4C=vrNDI;2qN-L6{#;ZVE*4>hNpCaCU&Nb_{kZZP zZr(DPg`&km&S19}WVk)O#4LdSAlQ_M7+vTlikbT4`g|dL@$T&qy+}1BRd>CDS5pl0 z7lf!vYZTg28H+5bX3d-Am>jd)w(6YxzN0|BLHkAOBhqOnbdQ!<7pc7#?Uqre7&NP# zD+BXhihTY4-85H;Ed*lay8>!eDR-R2Iie`OJ&qNt1IQz6U5^wBxsj^I55uXoIhFE% zTlSJ0yO`u>NQ*{SE6xz;gvsj&I~*xxR4i#EQtqriN-cfZy05wn1~Dh^5&y3gjbp!*O%rIm9GOlVi7|x#&q( z_3~EsB3m^r1_jJeBAthekf`==QN)ytHY4PyuZ|@XUNb)Mo)^GgJrd2Mr-pcY;{1>JjwI3+L4bOCGa*_&}O;w1LW79T0P~R`X{4v#D0q!mHSwC zQq$iPIbLGY_wb52N1W&@sR46spP(Jwf;F1{i%lrsiqy|4FHjX%>FY?95^DWY&Zxi+ z#lg%zd(Nq7y{DZ+DHU5zs(-}uy1=Y5Aj4-o*b9Tx2zj*H>RnJN;)PxrXICloGo@u* zjfz38SU^2Cb66EwRw7lGo{MdbFB}-84m*`Yq=G+N@NXKNTNarXsNEn!zYVI~K?Pji z+UinkB?hGt$QR1;>c|Oo%-oRmAK{hiFx%O|@kPw}-YVX2a{cCmsd%2v72dklj>Lic zd@$AJSj6&QrfD@u&x!@}ZUY!?bX!3I(f1r{jHb_(%eiEf_e;P`e~$Y$bfEJs0_L`w ziHM0Jf+!EkqG~1>_zwSEXe?82v4Jnm#W<}|Ix}(y^QvbaphY{!wqql|v{aKguvCn2 z@CluTZv&~6ArW$bP5E&S67(<6M)gk~16Y+?kwudSiWK4Gfb%q}ss9Rnt-EVA@1NdQ znOJ7$ibvCp3$T@)a{5A-;A3>H2M(gPnUBvS@Qp`pw$uIJ^FJYH_|V%_VpDU>LH}gg zlx-9U_5=L}(6sD`u%}Oh20fG*qnd zS;b6E24bxax2mXQlJ&e`V^(mqAcQOTn~!^sc!tArBYK<~LHy1%8Ul@l)Z`!&wZqb( zatPWWVyH9JNIisoacq03GvBmqoEA}yjA}A2_y3DtKU=p{D3JIW9|IYAXiY5=#PGes zQqca_sukCXAJwU*9Ef+rIa+=p6d&hW1eu}Iqu~uQkqe!+(y5u=(@C0t)cJF6foSo! zPvhe#B2iNBMkzh?`z$KOFH~eZXnb@Y1+fw^-U@}H{8#N)3H4;dam& zgiF`cePsBwx6A6mrxV!}RV4rYt_+_hx=93_rEGjvuIEVX-0StDn3PHvN{kq~iB#LD zRB4>)5Cqp{U!N7++@g*Sdq?P2YNld$a9z}fJ~Pdq;LB9ip*#6)rg`~b96V1E`^DRq z>fdOprM8@kjpAGop&G2r7lhO~a*>zn^65&7H4{)D7u)0OeH>K}QNiO5&ecke)ta}B zNLG{8E`k-yZF+q-gMC!Dhw6?-g+j0e0;CQEUB{c5Ywe1hqP(baO^qgMF!+XZ%Dc4L z@&Ia4N7JDXXoohnMb&=4QD)R;tGdPqMbC+O3f=p&l$AG!e91IzE}xwj!Y(+pl^fzi z94k-LQxi!ZPwwlbqqJ1;i<}*kJ7l_bTTJX4e~gb>tsl8h4@asYcjlV0#<+}CxJyB8 zq-#j?JAZ%ZvZ^VW!={jovit|lN_l`(cw$_8H#)PUo!8zqn6)0O9{GeYP0d-BI1AXc zLXyAsXe?La*DcTw!@W`43%oA1H|cx^FL1r2nr6RDpC_&zP5915)#s{LvA#Gz9QN%q zWqC!#swov472~_GEu==}t~p z6Nxq^1}0R_Z)vSTPV77Hc&Hm@{uDLUmEy%|HJWZfUxs}@baUQCt(WDO-^?h)=C3CR3F44U~$5>^MbSjfz95x|1LdBJXJJv81hmz?2h}Z3nf> zY*xb6+(_(*?G_{CK)HMkg(f~$4&BOhp)O^y!zByNOo7X|!jw(s1%&6j?#(1pn2<@vo`w1jH-reK%qYTNfs*FJz;Eq8M^0wmG56NQe1=7#HPCG+DcUJ#E^F8Y_i1LG(; zv}8f*rc$|6cdKNL)VtyQWb(plB8SG>s1Gg~OPQQjqr`4{sVJ2be_9-sL9+Td?))UD zw8EdHd%yjxk?g-SY~zlt%e+ZuD!#JV?x@gRel}os+z0c;ErV8;xsyu~9D=_}7A0vA zKC+WAF>+l7rHDj$%mq?Y^eY4-1Ia#btkZ;M^SEut5%M-M>p&430Hw~iS(wM;&-UH&`i%H{+|vfk-$W=};vdqQs`M~^E;}UWN~$i` z-O?+<5r3EcEPcH0SVQgPt??u@!Z3Je`eL++uVjgbmPJHh<=-DXa9Pe<@5_CP9LA5P z0_))O$+^yTgpq;TaPcA6hNH3eN}s~4==ZJ)h^qul3&L;lB5VnQ7H(8Xz$7h;T>?GV z8sXC@7xCzDK5?|_CcAfx1-Wsw;9*A?(ZpwU)>+D%zSiZ#cR$h%Z$0i)D}C$`1palZ zu@(%-*(l6VR;P%|Xcba*pMb!SKh}nR4JLNRsRkdO+N%`Sx5YFPTm@#6bsu6==IaJ{ zT`FgDeK0HN^6~Y?mL|+4e0W1GFR6}PhQES!-NNCwx&8^_H(g0s8-~q`L8@NH#GCi$ zI#=Tlh@Ira)Oz9Tsys$lqY{O9#XmHcEk8i#OCLVx^m?o&sM8EKkm}SA(Ox4Bp});4 z29!X2R=qbY#zuDv<`>O}9a;xNbX)IRjF(@C>fb+0G)S!|yQV_2D8A(0(O4TE3!(ks z9XypW|1hibsit2(?M@nk?7YsEzww~d$n?(P8_tyrQx^W>NJ_sG`igKLtKdm3UetDk z__*r;u)Uy+8IjoLNC((RLsf}4>tUGO!8y{CvePcCIV|49?(GIGOztuIJ_ZbKNMpM+ zGx4vIeQJ@b48;PS-t2`bEUde;M+@viAwk?8t@Lhoi#6g z>pm=ljwoN4gz4eGcy=Wm6gs%D2wFW?N{8k*PWhci}Xs8+q< z(G^=Sc)u23TdR^MtuLXXs622m+vA#?g0$=A+=`)au3{lHYcTRX(O*5aR9{@opWLUd zE-;de^_g2~Y^W~hZLSz`xX5kl>UN&0{b@dvodBO}i*&YGwwZ0!SvI{=zRl>v6XNaL z#*ZeM7I#AD69(GA40!d!b^TNldtx1HhY!Jp^ zpId$YCe{t*hCDD=sg?FOkn8qXPQZ<5^RU{>9XidUsAyKI>2^T9Ay|7D9Cs+vN}t); z^|n^N=+3hT%!~M=ndXJcVOP4lg+F?1S&2Z~DS3&X)7))ReKIyWGaRl7s@yRcRmowV z0uvIv&yB7-#OvbN!pWTwa_tT4{i?6bYgXKm?|&5X&bsI6`E|}N$jIOQ?Hk8=Y z?3?SGRE>qyXs)CfGOUG zjSL0SVzC*jc<8H_6&yDa-xw0it!}hm|Nz3uYL{82zjgyp@fGC))uKNKlx}% zT3nPIPo8f3_%7XNT$m}+*=YLXGDkA5ZSmLmLjI2hwc})cf11ND9 z$Gt7Z@lIvvR(+Nn9~jTSsXiVKFoK8Awf z%a-I!U%!x6)>l<@JUL+KX>wAmSEwOmPAg=gCw)fJ+eh!lN0pjB*9YwEi+I6vhH+mk z{U(CFOiPt9>Xb5%on2$p#`F0JiDSvIYz z|47Wn5~U;G6*xPVdF&&ZS4DjGsj<%nCAZx|o!ZUZ(hu9-QV8$us;BS&J`FEH0|s zaxRunW>s9TE~+kXPWnNzINB2OTIx%^qT>wGhQuVFzA1ej$y=V)nUb+~Ic6X?9a0aP ze!)A*tQCX3SU_3thdBFsC3Y9j_4hst$fOt~<=_;Ap}tzcf|Q>stN-hzflx6_hrJN? zCPiPXs0^rS0>5gapaOx%bT;d-<@$q zAXZgBOA9y&@QzNmG+A-wVb;b|VYA_h1tnQsiZ#$SBiha&#ixX=B8#g~h83EbWd6!3 z=*qL@bbV!kN9&@;nMX4^KOtprRos3(Uto6Sb z7|r_u^kfWK-*X-&h2jnuplu`CJ2cuI$P6N4pkcQonRhp|UcUrkOmwcx&dkK4?AXwE zfJX|=D5kFkFSUxe*pm92RYr=vRuNW$JgTbK?6RSiK9z&Y0wZ;PqnM_<*;V4J!)ld} z2?MEHW9p-K7SI~n()zgXs+S#PbxKP%r`pu~(B-|6bWH$?$8JxFq4T5GPF*clz+UDy z;O6Kr`Jo=-_-tzFY(w2>Uv&jEMstd=uu_|@$yu6UR-=#Bw!7zaQ}AlX;CStQ zITguFK405ckR>pE<9|I%7We{roe~)!nY=w{9-CwC)MiRV4ABlex|T{#Xi>pZmmkoZ z-bReChaUA`NpCQfv)Ryztk4tJDtD7m-=WF`d{*u^Bd4%ceTuda8rN5SCoWT|$x>!j zW;gRwcTfxdR_*}r(@mGUjS?P{RKW_R^$0x+W!S}`0;0h5Yd#gvp{nkIw6q2(nVt2e zG)Cge5%y^I(?-oDcg2nCmM;&yP%eSuS1B7#2n)iG+7%%@=J>QJ6GQ!vM|Nysk8Nv4 zcKjm@kI6gj?p2$4i+pX}YR?P>TgD5$W(A_p&i(`XoT!DC7DVla_56@qM#sG?#e>^5 zop01?=4u6%UFKWckdSQ(o}a)!@>ZNS8o8lD?c->U)UnJphv5tQ9$)5pPivS(SsTel z5-D4;Y6wBzosA`;lb!?5=riV~V{$kclg3joTXLUL>pHWlzP~E{dyH_3kx*qpBX=Ig z)%<7fvR*P0uH?Dd{g2A~qMF2U?z|qMjs~SIv%4YQE(7G=%7B5D+ib0#z4{NgMblFW z&t@K37#1YEArpQrA_schpnq;i&C4`nnOq zueqUX6#Gb&NFY4yu6FLrl0IEU@1eA>b!xI~5QjEaQ(YdA(T#5-%uDBqP~zAJb97bg z!3Q=$^PU;^`ra^l(0XW2RYC99@*fT>5svE{VR7jB`OIJ+40#LT`;Ch!cbWk~u%rI; zM5vUJI;(IA2nTO5>U=+XHe;zNwh>wfL3n1a#IhFAT?5OrQGO0>>sBfkr~F*nP$ zt#$`gnVl{GpfekJ!bJX7UVt3^TlrDK#qd>EN~L3$IOd z##Sh`-q(r(F-cb#tw*a?1j@~)Vm4C#grcPp*_Wc_f_l()uz$SV?3~iWcU5X0bS4p( z>PG|5X!)VyRtr@6R)_n4rw7R*|gj)-!0}us8fMMkm}Ff;G^D8 zBS>jYvB&Zh#tZEf;HxzH)UPeJu5QO8QMO=FwFas+rG@I=_~JP&Y(l=9%+;zSc;})o zf1zTb2fmN87Pq$Jh2KsfpCp*nO$KYpAySz2S!5A7Jj};=q#LbJNKHe+%vpOBjVz$~ ziY@lB4(68Q4NB!-n57_E1vQke!F4YpR5ZTl`fa=Mrp&8Pjj+Lq$c}(ugl8eK$&`f!F7?E>{2SCk>FEmw%$R7t_n^pZqEdeZH&@|6O; zd^|sV8(y;ea6?28yx=@OMy5!rO;fQI<4GV#olEs$EK zOW~AfHtyP|V{bB+>jx|KHI}^oq>Wb;Y(_r~0@{~1&!0D!5ul|MA1=1q^$k1{bvqrR zxT@00j9KkUJ6BlNzSH=YB80A6Z_15ETcjZjBWu^ci3`rhp<$Q=H6E8$^IEX7AmcEt z=7p2N5vRF~1mWBGRKIQfhS(imuqu+R*Y0W^Xj4kH7GWdQ&|TEvh}nc{8V-}|Uz-XR zN#j1scW!=Z(8K!R`^av1?<@501UY2NWRyv;@nFFW#H(P;({%Nu@nulBN~`HQ@j~vy zEM;(lco{r`QULA99A#?C0e`ErYFLE~nOtn3#*2@|6>;G!*J7aGFkG4y6H^XyPGj40 zo|Fb9!OaaWk_tMnYH}oc^lf!W2-&G_dODGy<%1mYTy3&ry~Ax5&_I|RFTd!+)|0#L zy0#s%B_4agdDPQSJpOozTv_&)zw5ijuGh){tE-Rqo{wXxfgL zhvk3IUY>v2cdppyoZv8@0d{p3xtkW*LBkrt>l{e<=yYfp z3mc#O=bNbT>RIzz`^wYQ6YDxpyDDc zh-oRWqcq|NmsFCKpq;3-V5I71zE1A!`FnchCGI*CG0=ET&pc|MCBXwrC7LsuE+BR7 zaKTG*@TCEK#ZR<(EiZA0riS_Q=tAt5avNL|ib7!! zxN8oJ#Zq6TJcv-bGruFl+pr7*N6XE`x|wGW^igI3!(z+T1^v~LK6l!TU{4?HB$m6_ zp7O4~X>PnY?uix?lq9`Pv9ME4U7zwQN34d+pp zae`Se!`j}!AMdee6 z&!#K~P2{5}b)}i=rx+y2eEtioavF%nlM}efezJ31@C3}VE&nUhQPBF!x)VE%D#NjK zP@k;2W|VsS3uaiw2tLi?<7ZQ03f#?-E;?@8_NL7sypM&Po>tr+l5;@m6&LyHz+f7! zS+@D?sri%+<*rPU5y{Bua{c!&oatmK1_oO`K~>4S3foFHoe+|DKB_QMRiJBbVRLE4 zBUaQ=p_c?z^TdUz?Y#3AGLVXR;X_?awZN|OftA}E^-(z+Y5M9)Zh>j&92k2&fxuXS zjI6&Y5j0QWg^RDt$)m3oHV9|~i9riPB3^TY<=h10# zWqqk(ANs8PNDTe!K!dsq0lEz-b(UF~m~3@G?hq-eK(R&g&k4Ch*=`G=r20?5W!CxU zE7v&CmYd*JN!Z~izyTWgx+?gxyH+a<9=~V*tVp$OpVJ$%!&Xq#uHC}ILwSf9&Sa$> zW0X2dSEQ~^VO5}n73@H-YUDNaj+D4Defg`Lg^KZx-uCR26>+r&4(9nU_&SAY8zQ3} z*UCOcM41kLr2!5FSAGD>+QoMIU1~aWqc-D3lkaVIC_^q=uQFN76MZ3D`%S>39+XNt zm>Y8^e6~wzX~xthS)pqjY6wkya!$mXoCI6uOm&qXsjliWgXvVPz8)5k=4NoU@2#vT zM`n4DCnq~oa1I64TQLr`wWp{6`z3$mW$b+Yc2)*e(NhQQx_Ls2(U57XD`3S+o2%a| z`ApypP}fo5K$^5GXajBZ#|@Qw4Wz@~36|b=`P37-6q(s$zx;`VQRQFB4vuD%`yhWv zsyL5srM|QVSqe)GriUfY0)f@`j6&@nF2^344(x?dgh~vPwl-*)M8<+k8=eox!oKry z7$09ly@=mnaM{5EE&lJLe*Q-c3V&W|KkEa2QB@%C6X*1C>Ooe$K7Qz(BoLC_W0B3Q zbc^}G^q;s129SQG;9Da+u$yPRxM9~u9&KkjA`I4`zmCA+%xIF4o#Kb6dT8KnCBfbi zrCX*z*0i{q7t&Hw!{WLZ3uwA^N2=*aEAHRlG3c5ultS{$i|04J;#5*2ju{nReIj!& za7(oNa2DCUZ(q~@-+5^?Q%b5O*_y0*`0YmgkTAj7^{>19yS+0U#vo8_anH2mQ^j zqy5mJFKTB9Rl^26qs5ggzGXq-+%ICu>6p4puf({7 z>#5MClI>eQmQyV)lE-%&(L#}o|F!>W*J}Yt<`x`yONg`9NCI)6%j~&JRDncc_qT3hDO7e8ebB~MLEl><1 zbDDr}$1UUR`NK<&{8IbO|NWi3mn~;{$9+p}A7Wtu%3s`;B^w9!Z3|>(~?=rz$Rovx-Zarri z;vuvEtDW6Fy{_WP-N8jfDxX140~K)U^?!|8_xQp$^VPnjGiHv;5rvlh*BrM}IVp3R z&!RUUnl}7puf^`FQ+VKBPW+okFsahh;Op6pVGrbg*4;DQGh^BARwlVu<$Tgla|i6x zOGjElqY}(>lG0Aa@siLf^mqUYb=l8#1PG=(*AW+iIK9_5n#T?p&`Sa8T!cNwAe^VXT2tNSqTM!A^E%gfJhgL%mA5!iQ-=X=lH&XUr%@wX((4>UCbNgH0tmj2HXxjLz*aoa;gJxvl?RDX;YVK7H)zBhT}DV7w0i@{PpC-k~kMKqGkV;;Dy`H`xA|0<@ zQp=$#V+gV$NR-md2=j;Gdc`bpu1seX_?-T$Cc9gS37w&&eJaU+Mfkfs@y$^Ph_Dml zF4=uPk3*v{)U%?J<0V}$Scc>e;~N=*e*;l=Yv*JKQ=U%O-$y_ST*C8{@f3R;<4kSc zi+&1Rhu?Uj_?Di>Qd{`6)cV`KN2_2|XcvA?QoJay`f{dm-&c zAB@-*X}@)3ul5+UUmb!5ZasY%20pc#z3XxZ`msyI>;3*D2E*Dp%GTTbqspcsH; zwxi|9Z-67}d<8tRr=_!=R3<|@eXoXUq~eM;bqgu*L$Q_dWCqiZ1yP5qdYH^+Dft`` zhvF@mPfcF=x3GafBsM;ynyxNz?-Rz@17}_TPgrYz@&EO^7rUe{ebC`Yjcim}mAC~0 zr~L0k#xe>VuTpQg79JJ0_t5Q%nHYzT_}45$Yt**~u)B#kL&<-4`|Z(c>+||D_yoK)=6t0SSRSuz=Refc4YUK!q$66=T`u34mda8&&^HS78rY@)svD4#H5N z5Ep04*+zX)-vM1WLbC9*$?ECyy=wu1`0Y-cCt;~i);(o!JO&v%*-cF)-P$0J;py4` zZW%b76%XvW3PEiiDhGhpA^l{QiYwP?^kTAHpp(8&ogDn9@fVSzqQE;p?wlV~Ki6=F zIoA&N?5N)Un}-~Vhvf7hMa_@As5qI`rSokt=)1B5g;vBQ*|=KAxVwRMg$<=X3} zM84H{j@we{Php47Ps|}2Q+yQ^{oj~bY!IH!(q-wFJ>BG`RH^Ay8@;po{yvj^xm=;0 zNmP2RGU15O?ai5050)u;0KXmw%{QSzzA2M!?N+ky8q&wS`+wMJ1n)Ovy(CdxuV&YTV zntv$HyB{7Ln{}-4LsCRF+f8zvAe7`WC%MObuD^K}RMjGOpR8|0aa*X&Pj`5$eAjK} zxLoQ~h2O=L8OFLP^@L)nD+U58!yer*}6FF1+@Nf2cHVTgrqfC#RQZB1KT%E6Z1Rh1ueQOIK9-B==~ewFE+q;xue zGitxU#N4b6`+=61R&qFT`r4waJaHw3G8L@+MM?6ScZ9dj>U2Z#EF7a$>T@FP<4rYa z#a*LQY90%VUF^w?k5(_$*aTVP*0*>gu8$jdEVlBh(cJR7zzA}VmgRBl{`;)HgS;+X zdJ#9fn#MIVu{#q<(5r9GKMONuEsGIr?bTDFHQvZ;b{q5x(>^w<`QV(R^bAr|87U&^ z<*kQZOH36?yS~}`{3GsZ!BlDuIaU)REWXuL<)ZxIWRilc0e!nt?d;bC%3<1-fDLZV zF8=t};bAL-n6viX=XDj})>DpM(4t2R(l1Y3i`S@F_MTk%RzXHkar7;w2U5u_w5c1< zP|ZJ5A~K^*cfy|(sf2XCxj*}oE6qxai#pE#5hc=@UhdD2*g}}O=@-uZV0k(Bd?={M z192oRmouE_^~cgXGhR*c^f2mZS}{vxR{&SjrGthi#kZAeT?t{zbC37hF+`z4NICtx zufg*77Q=&9!(l7?<4;cbK2EY>^l7(|?aZw6Z)B}s)~lI)6UF+hGJ74S~JtA3A$v;@(-Q4UfCh1__1Z-xCd$JNdcn7Z+nLXkOipzO~3i+MA^WipwNPrVa-sC#X3Tp(AfNgth22ggkEW ze8}024TG-!Kd#O>KF?+Q+iBCrXzVn$?KEj@J;@W>cH^Y6Z8f%S+qUgAcHXD^?7h$V zz4P~c<{sZO-?`RW*Y5{j1EP;2IDn*w<+l4HxU(B4*;toFk$i%;y`6203$+_|I{^p1 z{ZPsK{{({uZ6)3#-_zi=?0W z5qWVcGsQnXW!qo)MXk7<=aN~Qwr{5Fh2F&2k2Basray1*x0>4wa*3ozyHDXs4o1|a zTy-Ce#6oKUNE%^IGAZ5){jT2)mb${jIyyp>|ifbN?}6IQ8eYJPHU1y3%?V-LzGS9h?32`(pU z`8uI2_d9lAVk##t{`lHDHij~&J=trcVWRyYE!cme4I^lSP`ZEA&`=QG<^1DXvG52V z3HU{9redHD>2_uZj_}6#0w^%3s`7(7)<5=1nfxRpBrcKwk7AD{n(=;|F|AWem~+dR!H zERcNMWnwo`Ivt0s!~0DnRu)T7K90lf@^!Hzd<+*h=kdGD`}OsA<3RF3{8`RUAI2TU zF;NxC!fAdC{@{)nWH8yjqxPB1ru-7kR@9CM_kb{A`aK2}$;8TJ8dQz%coa?vi6!Q_ zrwC$|O359lV<7E%ph$lB(@03nT(As$#rrm#=Ry=Pb5&G{pwS5F=@d64gVY(QMbvuX zd!+qo(pcZvIXs%v-!ek{A1$CoEknh&=F$i7m}q%J|Id$#4vmwib13~2u1bYB-YRD% z-T~*;_4r&GiAYUaL^`*i$M=pqGz z5~<6H)dYQ;G6*-!Zh21{V&k3QYeuG#!+>qn=MF9(8$o(C!u#xM#+P_8?H`S$sMY(D z%H#)_=S-^@w*Da}=Sp%HifG)bB=lM^l-#h9?j+rt`OHn&+xd6PF5^kYrwmc(HfGCg z`yWQAI&VCgdGZopQEld#85x?mm7{iwcBHk%qmE0cTP#j)Gq~H$riR@e;OFR{&b~b5 z+^@P3+I5p;F?IYrws+gVu7NE2P?fMsvTQWk0aI|q%YA?pzfI21dyr?a45QygCXG+0 zeGlB%l+7UGR*H>YSFN^ZZ8D42FZ9x(5*|SeQJ>{>ih!xaSV0} z;3A2U{yf8Z^BIZXH(uRtE$rFE;=vv_fxg*#?lkLwbzxt8vWX!i6NYpH!Tq;OTC?j< z(gm1(t}y$z>}tE0uP*4uZzroAZ8&SsrZ2OLOIs7y7wUGT&LAG-KS^iZ0Q))_LH%>> zdg_}vWStA;4$s7u_-l_yhsr6#S(XkDN2>!H*%I2b28<&-`7S zHDt>$k1NeZ_eD5!dtjrwX`t)NzwEbQ;ZeF;U@X ztA!=v(Wr4_uQ$l!u#l_sB*jy%9sJ~{p^VB$jH#X7JS2_VF=1zuPssmX?o?u>^!b>X zUyTrqcPQ~U;~qWjUA%WxK(3@XoNdxxR0=z{u-IcQGL2EatS$EWNS9z;^Ngmd`O{u4 zQqoGH&}h_J(j1dxJ{&CRXXYq=m09>28Ir#}MfzyIYrK&xtk`{-mOSa<%SKfnB-&Pze-$1dRO!P~=8c8JJ+>@$5b9sTuw+tgF!#}= zUW~kwWI~dDD{pk#UbM(DUAe!uBYwXBZpaRApjQi+8#lFkG3a&TnO~E?+%0pt8B{3z zR=JRqoQgY?6Td9V&3}@ZPL1+w%7F!AhS>r8}U@-kJUh$L@HI1L5uc zEu))UWp66QGDIq!INDq}D5CWj#SO^Omw8DQE19IJv7)$>qv}^lCj=)Te(m|I+S@r6Z3rE~2ajYJhVD^GsFf8UA zyKJYE2D;o1F#7pm@8*@v7;OK^b7zRs_uq>Yn2x{}m*>oa!O^4?BGi~WIo&Vb-c>`Z z1=HpGRMhyX_>+ItU@)-uV+MR3BP>!sHL_a6{;F--1H+rw{#boJ*hXc&2vE!%*ZN2j@n1HiN&DJnz$HL zK8)|ah1=I{{FuJSIpFm9pL%X>LR1`?PY2W@Gh{CDcK(zCT~e>XeE(Rt{+%??w?Uue zA!jIig<%3Y#%bRe1sy~|UWWd)_6GxNlp+!F$^WQWejGZ@+d2F7$9wB&yS6Kq;oYm9 zqs~7ifq?KCdUSNn1V+K=$PDuuk)8J**}?>dZye! z=jMnV_9F0s-Ou1|g z^7iun&;ADLdw;SqaGF7oqnzW;QHsf;zj~_R!87)n#s}iR{YAr)CjToLjJ2n<l12qe%u zMgo-QK?oO*qX>-Ly#vZHmEGkCCKwI<^w_?IY8Nn%OR7bDGfn~c?KX4 zq7Clc6jPpms!a!8jb7OlbV+xI7nc=CS)wxsZ=E-txcxJ0v5Y zRwk0wM8c*+e}JaSlV@xS!v^>$-a+!ogK$vA>(77RBtYxOf+Sl*$jzI16g&*LVXc5d zmb2#G>-a*p{~S&Z(Dp+HH;3L1He?HUi}?=cY<1)$Y*6BSx||#P%YXMLB3`8^8;#nOj2KBAD@rg2Qx{37Y{HhURkR*FOdzpO5zat`dFW8oVXNPb3riUjC`prNkU|W9VCaVr{fZyIS7K(|xK81gf7em3kzQ?VX%Y-6 zC;3qz)%fh@`mFgO*mi*JR%fI&l!#}3Wp!VHU30c2L(yTdt)*zj+GGi!9z&_9JMlKZ zRvsf=HrI=PmrK;tVK)UO3wN)6MvSk`Ktw||5137oLTfaN?F;=%M#+r4^Bjz|z=1kuzp&CPM&5EU?if42`b;ENDtAIHU58}_x$QneDDflh zH3BJefE_<1*wC!Z)6pTV)Ve$gq&HZ}u97%U@8~ z<$Ife2pLi+QY`-cU{KFA7nULT?P0HtY=I#K0WB+bNjRA}$0nX5UKJnrF0idBFH4Y4 zLYy2OK_;v@ttX<*GGnvPJ>7=#i};*Ktau@EHZ|OMUM~iiN=njrYm-97n~}v^;=`3- zV;L`k(v-oxc+YsRT2*Olf3Exx{h7;`^L2z!NuyG0vtChW?$T%4vrlFN_nGCMqOj3n zU-Y}8U)y?!>UefyqcL$-XDn|6e(NQ?1iT`Y;B|bEaL4PwUtC){=wT0U67hGJY0bQuA6ZfU<5p6bjJHzZsg@`MgZ;%UQtyfV-c zw6rQzkQ`K_i=)~L;+S6feJTfRYqrZ#Mt9)G1z*EM8Y&M6z4rXnVSRKMoUD#hNPe4J zQ={Kld&HyloJXL5b!;xGet*va;GQoe`1EH3ZMOpb;?Nm%sq}WVT(PR!H#k-{l0$s1 zzYHIYos1N=;3C=xe#qGR;eE9DRI>T8Umj@h2LE)0ly0-6Nl2oEQ^KN>pup~&+f1eZ zJIHa>@ax@4$^M3S4^<4wA$D>hrMO?*6xf@3X_PP&mv?L-m5sSuyV$H*INKE08~~Fl zZfs1sWk%b_cj3@4XMhP+NvVNl!7Mqu0;s5ue{x|`vvdlfsemAvpF_=zIb3ykc=;G) z61*#6RU#n?$4YuQ>}yZ?8^@m^#xyJd=J;dU1Zlgw->b}ujnslzTRjZJK*AxI z@TJE}Pz@AwNG^U>hv|9EvWJ*2J6o`rCYmf#7I$d}VHl1ZF4=12a2F|+H{0BT($U%3 zjTw*p*!k{GwwMLx{ZkFu=~t%*J+tcsvSS(cLx73;K;?*NY1bBc;x$EJ;fC%J7Ig8b z>{+2W4-C~j=1p5!`W=2r{-=R^1pu^t4YF>59A;ceUGr{e&(Id3id?;`=nNTNlS-2e z`g;AsP6pHoUH?ik#n!!S|6(i*qzB3tkg^#wC~hyGO0=Zxy>*@N&k?#aF*O%5DZ=OT z&)gk$MA7b`IZxAgj-wAE1{fw0%_CDjs%?q#-bYZWIe6Ml9~qW{%k@b}nBQvUdCg9~ z-uWA1`xdq5``O&7ozcA%theUb!Y}2-&mcAlY@J)3JNftKg`Y_qBr?5Zd#3iGnJ7W; z{i6klzoe%h_9B@_&KDLuihdm1ZI89$~|B%R!84TUW6yM%l?kT;`28g>{ zbaRE|-N}MlJDH!=$$#EtY(ohx@lr#>I&?&S%GZR~D?ouw7aTKd6BJ6n%E*t%l9P8y z7vILlyo*`Gnd=W2+h!XzIU5dnw?FhiW{7fbP^Ql+t)l}Rr=1(Q{VA8 z^r1EXsR;eM8HDY~+VYB5F9uZKmnHE@;D%g}h&R?u;-q>6kk$i%o{(-H%S`zi+my(E zy|Di5_9?CBLyp-xQl(t}JXHEQl2@aj>99x@5f9~Dg7{j`4PCHj4H`UTY>HO9nFbrL{P?;sw@XC_>bOYlT2Gn4}vV#=bWssW0)eK;$B!7QO9Q^-=C zTUCpm#)sYz1>d5C<9La(ujeOKF$>K0vKH9gGm+*IZahMBjAc`^az#BM6iX8gJ!NGT zNZV1=8tb!aC2$BUcPjyHK3|C3EODgk0LyVk%oSfRGWOSeuAZ(obvi;%l|$%NJbc9y z>FT#fE-IH#clQdOGL%z>Mr7~6t?}bh&3YdU;Q`FEdv!n*V_EnO77v-$j8@Z|{N4bX zye_R_5%CE&*rjCF$=^AIs%996my0^Gi1F%Kz%0gjYY77k>nfl{`8TP2%8Jri<3^|l zGPCoWc;6OJ#3YcXw(4xIkxKwyU_y@Lxp??6ZJT)zO{>GaEr=KtXIi zUi#Tn3CuR}ilI@gL+-{AypRnqDBO3}YEYH4h4M4QQV&qMv`b|n?XECO3syL%3eMbR zVTPY)Q?NN8Wi*m1y0$cHjUcgq6)Q*k>go0lvMxVhI(m)GC_T4#cHJ;c9Oacbw~r}{ z89iKBQE0a*0sO$`L&MBhMa(e~Pp7=*lqWltz>%$t$%$!Epw?8QIv%=2awt&@#U8RQ z0j|J};|AVj>aBnqC`wsu@kq&u)bghHXZ}mypyFxx8}pA>@(XJ_m(h5YtY~wt-A2U4 zY7ORTvV6gr)q^W{Q8^D<_EYcGp57x~7xR#ol&>Q->-1H`ZYj-ehSK5!Tw!0=@Op~- z$7#`uuO!ZNWIJXmDn20n;V~XuyAIo2J_>Y$rwveb{?7fLg#A0j@qId)ffvyxKiN~Y z4TJFQVd501u2TLPQxwZUlHf<~#56x)oS0tL?qt>34&|I{g~lKBpbSYkz`R&@vZIG(yZC~eq=yj@>#)W4^!OU`}Fz^#Ddk&o*31Sa>RXs-wx`w3Y2PY~W7N`TY47&_#bivVx~0M}%{$ z(&27eIO9`;{|a}hXI{}B$kxEjdQx<4etZpqACM-93X5L_zpc17tJ8aSm?0AidxWEw z;nm*OMetkI`5sO-yEG~f^Eao3RdSKbgycj+l0k+~#;X?5+0CW!x@D>y!1~Cwy`)G@ z7*5^kekNYSPtYn*U2U!QIX=|Hlk4$L=k0L{EF=>{#8pF9#-{j(!7NOjUCD z*es4t?NLmu{9fs_g^K4!kr{TlR}FDUhH;#t2RirWSH33-%-e;^wAK{lOc1kLnR>OC z^yLblx1ZNG3l1N0nfA_IV8V)4(Q&R?;~_}Y?NM3_K;8fHPyndrOypCBj_1S@ zD_656QKJ%_hf~B1#%_c_@X~on6)WwZH)qu0HV(i>Y;`K-&lGfE#T4HhX9sPtA_>$G zMi1`=uOwbZ{(!=@jzvU%qO)1{ND0t%Yi2viCU#p%;XWN~Y&v-?IIis#yLdx7{-}f1 zyuzodaE}V04f>D@+d+v+Bropa7Aj8`ho!FNl5^daLf(SSs#j&CzhKULbbdT~AF5}ymcpG1W_u1^O!7e=`xbbl$Q3) zJ_EY%iuf4yFRL*i+7NvC0Sa{gw)OQbtF8`>e&RKhG2Ue$Vm|@T(QKHGi<14q#L~)? zEmlCgb4S{mVUYS5M|q@>VS0Im-EZR}abY3;z$wSy!)bL|0Lao8%-(RZtQ)rloHONT zvNh^9t%)44Axh=uPHkXmXkb6?qX-~|SuhyRs^T*23H;s|J-fbMo9CiJoqRA@IM#34 zE%Gxar9kU=ZAP^M4dNArBZ@|WN?|!tPx`x?q`l%vIT;fUW5rCcZ_lLx0S&EkqO$eU z)at4rY4}g81tCnxD2Q+dq!0R}eZqYmC5|C+_8AUKPi?u|tyOJpE|Q9F&j=ba6q~i2 zwz=`F9@9{V1b9s$#|d})`TKW9u_<3uLvmpZkxV&A=4u~_<&UZ3{8o-~e&XV4M2&S{ zg?(QL+I6)rqvL7q*x316bt_va1#b`IWxIJTGhtOC3p8WdR0!_x296|B<<+T9Ru#wwRER6=a1C|goLo}2SDT~W5W+rZm(ZN6iUPAGvz4} zEhx{;C4~5%>+;hVcTKn0YqX}E0tphu0B8@jsEiv>OSt*cqePmP`egztM3K_2uYO93 z07Ye@#FAk%wubs05dVvx(YU2$PNgWGXJ_dzuj04kMReQVbwU<3EN41NxhHX!5`cGh z29IVptQGuDuZ&Z2d2hQ8M;0q1b*GA`k5;oGP7xLkT#u26Zyt7yCEKr${FJRK2|gyX zXx{KFXX>FJE<+cehXIS_7+Dp{e+qk?7{>!i+isrg-p7AW7I~ zL*aaN1)4;0|0)Kg3|Sk@yPJD1@ad40>fRjf!rmvQ@lSMiz7m+uZBh(dLA9niu5gML*Qwc*PI#KAB@m8AK+wcjk0(;>02+m2fliR zVYF&pTu<6+V|1;Rtfp?A!5bqTLy)+kTeJITC>Qhlcm!!J)k5WV)+P1IDW4(XW6!YgaT*R zRB#~`g-Za%WtlA}`m9y`NLJKb2YF$Z~hu%fw>dR+@6cm}EzSywm_xh323xOZ}iK}t6@8lSTi z3RLd6E7`KCQS?;(q5w)1eQ#mUA#r;~GdA|x#?*Y#&C2?0ND&Ac_jdC^p(@rEWd;4E z!3t$cR`x0U?&XyZ_A2)NY2$3%N$6HSvQMjYiFG+k3yaf93I&z3hmm68RQZ#_SJh9n zhDzO@A7Ryxdq<#3<*5AEy)%Q3k$t3-E~SNffz1Z`n86x3bk!}t)kuh$36%@ckc~oR zXzLKqOv9Bhhi|#k)sicPjYKH`RaiX>Fp>rw%RzY#YNYWqz|6Xw9_r0`K(|aslv(1fmjO1Vxksu*3Z@7e=?ok$oSbBb~n@w1G9))@oAtF#a`B- zvxa|leh9{}W-whUA&M!IG+=BX|H3xf<%>la1mzMq%D0~ZOr~KcTsk5S^W~s1GNNv< zi!T@A(YvsK#a7-aDWQ!vZf*7(SZ-SpC=B0+31>OQbK-!!yD3~wr9#F->3-YVf-Y*8 z8GF3buo5PFB~~sGRf}KZ9>womnpxUWRA#qK_I)SN=hP5{x_=vAiwJ7Bg)B(qYKO%v zQX`2A@fU0g39kRWBN>#f`%)VEnH(xhDYLNQW-Mf1y8roed?6JamFRm^AVoez0N32LD1u^qC{!j7ioz>P#7UR+Lk>;aftjkgUHGP#bVmceR9o3_CNO z2c!}ASolgvu@-^=MJaScWYyD`y^2Z1i-a^@76s!FyPOD2ILyHamuKV40#Zov8X95P zK^uQy4;Q2;&_Of5Jp^chcK3;l+fn$&3v zXa9Nc^s=dHQ_OmTft~bRN6iooBB$O>J<_tXU?&}RK2G1kVhB=Ozm!#yLs|`qPGog* zuY)Q`Zet%a^oW5KUGjxe=F?$Rt>vE~`~JbCofCdAl!x1ZZlsB250#@BGw4SjVlg}VwIS=52fU1rF9Aq&U_$mrGfYVj{-Xsj zMZ0~Zq_&mAB+jl{Y;;`lRX)e)V(T+!9J zj^vKy7cvJg4PP|BAYMxFY?yyXwoI=kUrv2)a$XZj0-vko(03v`nmSF*sr8Kvs$uLn zdX5FB20%4Uwqja^a@>rkUcArI9w(O6(s=kl|E2R@XPLWfkVK%@&+cgTSaFfxSl*Zxr{pY>WJ7(hy>GyGFmaSKesx+mLIizbzC4L0W=;=Z^*bI;m=N^O z2x3L-jiX>8tZFQ8L<8LmBOIM6r{P2IJJ&gbG|WF$dqy zl9z|$Pe2zABE1_C)jMcT;am%=ns8iO$yGn(fes>hWqzZ$QzcwlWl4|Mc_hudA!bgW z5((@ZR`s&_kQfNHFUTd8rH5At&(L@|U#fZzM99f)!b7gHoUjH5KwnOtEql%<%R9bMz>+6p zzH2naNHJSHfK`Xp?Z>2%JY&Qg)-!wZ*93(B}ik%{A5>S_n|kJ1Jb*Lo`=h zkMVz{vlc6zpD;{lIot&)*p5>23+;yCX6w$Mmas&FI5f+Ck6|ZEcDyPvtCZ-U`2_L@bQp97!n zCYV~o#fp{Dw!D1x&!L%!NcLiuZ%-E3Zy|fBSUEct4Z^Cdgvs0JwEa%&OXRQgrJ|)u zh@MLzct?N8OnJNY$~t8#o1i5x>(%l}4I#ANGIorJ_95uLQ@BvzrVWuIWkwzcmNH`x zJE+BzNR3o88qolQT^*Y~_VuSnOnq4&iYnU41?Card2qNG6{6``EK0VMMHS6)P8Yak z#vbft!;)`;NUm1gnW=99-qP7Llv4_Eg?6fBwp;Nf(bm0N2-G8voGAzL9XSpBK!uLH zqA3d7i-vs8DrQ1?tT7Sc$)%NxEK_qc>4Ft|;&^RXUz7^_`_NF>U#+PgHU$Odh2H8JHiu+l^eVZ-#@aX+(TqE>m+izNzMbf4&7p~FLx z1!0z>aA@=v;F1z!(E6%T#ug2B(x{t`W*|muFY6eDxKL)=wa6`>$Z2#@g^dD z(Cy(XaTig#Jo|HQ_pFqJRZ-EAd$u-mmJ(e!5+A=}t^Bc(@HP3)tKe&}Ho%O;bKuvS zI7M>Td-7|cEp#t3;a~@7I(II>wnHWzJQ&_+v4lc$FpghK6|YMMcKm1~=mT$+>-n}J zM1_lGiABOvC zRYJOjT_={jY=+LRu;Z~(23`g_e1-xE9$38kseRm+U~x|HwC8!P?J`N zZ;>>MLZ~dvEyPhy^+tQ9vXikE)AL|LKjXG}p!Ce$lI18%{J@>x@|FYS=x}+9tUkBg z3)wai&~rwmWLIlYB0-08@Om4A<9gbJI$ijuL)V(5w?!n(8PJ zl?ds4=u_+{+aP9bU@McCm_swG>eH>Fz#eri^6KOYvyKcil>p>1WltcXn&T8X%PPdH ztr|NMnKlKpJ(`Ejr4W1Y@`gazkukm_wT!Wa6+4|4QYQO?kw@>`qm6s>W6q_^(pyIp znKucO2i!TkrN!UwOSpSI1zI}s$E3z@$6cIIJHD>f^Lk7NnDMrUL%P|f&swll3utp3 z!uFD2yPS_kUoXq}=~q>HA&}MFtR}$G?54pqli+&CPB!x@XdPV)&n2GfA*8W9h?7Uiw3RBvjIdNv;k@I$PY^QIzcw>xyYGv>ncyb#$!baSHDL>NAdJ!Fgn9hv$<7G@sBXz_oK>oT<-+UfN&+gISu6?(TX0?P zhi~zvjvP2i4pZacQ27z_u02c;=X9Cb<;z72mdF!qa45u8jFWkZ)z)z@$Iol6R9ZV2 zXiy|X&*;uqWbJOJ9i^sV2d_N`_Jilp30jsi%c?z#5SI$ar*-v4z5`5Vt6_tBcAH_O zqv`V(45j_xyevIkq^Z}=REwFDZ^sfi9c)EM*Z0n?)H4+q1mRb{Yb})96|C{G=-5I~ za>{CyvcJ`iDD@w4VTXPWpuzh-s=dq7j)tQ?ie==Jf0i2IBOq#h4;Eu~<49X)KDbkP za^LV~!sF)`GCe$Y8(*X%mR)9TrGj|3($b(d=uCe+hjVhw+;^*>`MMv@D7mp-pVcv{YNJ&f&@Y1G7;8u!&IwmTLs_&oRosuAY?w;wZO~_y-ZUf?t{D)w zS9gn_?Oa&VGZ$!(XB5l0%#ItHZ|<=B4OpGTPOvapg@`@^nD+TyDKXI82{2Dl+e3KP zu`Y4sA?k-LGA+(~DYcKD&Rd>S%j(-hP#X7IHy0Y4ODJ2V!mj^x4=ha}KQl0-o>yY2 z-E6SQuD!6fN?d%tyRd!^CJi{rm1wYqv7?e4QMA$IBgJhjmNY zy$c+wO6r;3+AO7&NQSw0?}|4Xp{wgM{pzqx13vpQ3ZfzOB|$Vq=6A-O#*MFngen^~ zbmMAS&E;)*5&`=VkJ+WJ*#qZ?>-z+OW6W5rY@%U9n*Q=Thdl@9MHZ$N3+3f)v3)0&4Hu)Ua7yBIJHh0cNAuCo22PpStwU@ zae@Dv6QV6Zy7?OS?UN*@+g;1657<&>Q){ze(=TJeM#v%6pP|Fl0&QUJbYe;nivISI zmXkSUb6O9V`kf0tmwp2~_J~Vqe#;tp;v&sc!AL8cxy!SKfq(o^fIT!vC!L5zG29TH zFRBFB;UY4ywxS_KUn};z=M!nUO50iG<$@@yTQK@bipfNr;Nol%fKNF~uB)PD(FzmS z?25Gsd)76Pgw#VnI8s%1?ewaS8c>+(^r!*h^N`jGnMvCRZQ@)mdtZ+=}(oox+Big&OhX@c8ro+zZi4vqp{2` zQ>rH3-N!J}K8uUAGBY16uIf=nX8855VIfGwjFepX++1ZQo1ufm z4FbRLn>Z0^^|p2Iz*aLR97xhc9Yc)jwAI%3=w@=h4IDlCa1Jws)G*WkOK|<6DDke7 zUsBU=6R(3CGlOc<5|b|2IR~uuR6CO)lbAj*XIgwU|1Tj31`B1}uKmGTT4FU7$`}d9 zt9PdMA1#0xb`XpM@C>5PBt=`pK1#KO$Y;~DQgnja`k&PKGj`JLh#zI7h_RBO2yBMY zS}WylBrH81C_~XH#gmoYxcI|QO^}&fz3f16@@noJ(+(c_oAV9BD+W%X-gAWn* z^9-(*&5#@!L*TdvZr-XJ*64@~|J!qhf7LGcj#?}gGU*Pi#>|Q*BXR1U8dR5>AKn80 z!`jk;e~bW8j3AE#cuCj6$evn01d%6iXt{3QND@??oBx}Wy45!0i1nw^9D4&Kuye{2 zv={lsz%Ym^iu|93Ab=cm&#uAYZ~hntP9EWJ=F+7tf%wPv;MqUZ`0qqR@^M|Ng95~J z18k1?{5-5?GPRG^qguFQ#W=YCB$r*VFO}g&eUCbbseUHWm;#{B=g(7PKomQ zjto#pUtY)Rc86}CC&)d>2lwlTt2iY=Fd0!K*?OUu{%{k7NgA(Jbdi&H}O&6Rdf$&(Cc9-%m%MeZ~B zRIYRsSb4HP9dK#r&AmYnB7>J+Q*Xd#rszV9|1^JsWa7AuM;Z%NXLFk2sQT<{IKk5K z6L#4rkE1WeVUGQJsMkxbffE&7R6yNjsy}io%4)pkgYW_YW751C z)C|RHP-N-p>dPCCcAuaHo7$(96tli$QzL+m^7>50c|^VR3g=Iu;9K=~9CE_Gs^oj6 zXd}bsQt@1mecUn$Ig#-7?9PiX(H7jB7`D%r>x(?>pq5@Hm9>H1Z08o(*-{(?BOM$3 zBP?x|+FI-{pa_|haB#-ZrZ*?o$Jc(uiWwGG0K(5MY@Z1K;>o~bRCzj+LFz-cCdr^E zrTvS-2s1No8~ZpX1o+>yWtGa;Q@}c8P^|~^yO_R3E6`e`af*clLA4E*}|;JRD6&SKt3lM z!$o*l)k_}gIlX=>sXW?stk1=mSRnzR`NV~r&ZAc&>JUzwcYbbV-H#_y%9bgmh}h&K3Vw|g|OS65$7F2@QIjf{*w4QWj>$B{^t z8KdMU?2Nj;rAeyb`nfqP4v2{vy_n{>&d&3n!j7;&D0)akZ=KdHYd*+=-br_`(NMJf z2G)p=C7so8eL7}XV}{=7qu(QqIq?HTmnsz20Y5RtQx;kKlLwUX&g*_n4$szWE6UP^ z#{$z8|5esB5y*n0E;XpzvxEo(*sFuTh2VOh5^w04zp#1!NLZRyINLl&Hj{#ETCTW* zK4nxhIdzgG$Lhp3v0mKWbm4e|*fKz@SC^%0k7wV`0qax(Z|uWUq$e#b-Bu(xgkHX} zw4$G5N04B8c{Gn*X9|O?tk|qhTP`Pm)IU%5eevj~FG{XPt>Vj6%zo^hH&CCggvY6X z{Yx+!T1ENVw9cy*ahsx&8VmS!slzW>G8dFVaHips06vr`TMG|DU+Vv%OW6dii;T&Iz zN8VcX2>VAhoDo9uUE`Sz#Nt`4A=JMG@bZq~S zM1;E*n{agMn?^XPW{0XsOt%4}I>hIXz%2Ut!!R;t&74bN9=)?8`=>(cvi{q|qO92Q zyZzU~e65o@_-0$uKF5~)toD%dY)%E7^B!kkjLfetIdOBdsYAOqZI< zLGn-KMP}#BMCP0ZbYAX5^|wM&E!cT&D~-Zt5vN)64NB2_JsxjEN@_VpSuv&by7^`R zq5-f+mY%s89V-SEikXs_0XpgWi26FhB;89?CWre`08?-XLmY@Tk%Hn?t9g8e_Xya#72ge-gxSM4Br;sT~-W4UD_i~2auug z@FFg0xh0H|^7%Va9QuggIFKd4+AUfPpjCu-dgT0cd&B&f{dfDgTn!c>*Rb#@PrJ*{ z-0IY;p>vdp9)j|_5qS@g+k>BRkN#8fA#xOisgPa79tm&ISwhIL;gJXq&Q7)JxPCw? zk!Wx83oD$pRF>1Fjpcf0DAD+k=_`eJhC`g?mH8?!8XASe%M<6ckO5YKP?X*za~i)W zpn7?9>~AHv)H(l^K5UPokDpubjJZo|Zg|2$3{6Yj$~nv?l#^qV2=-kB9FL?i3D;3= ztrK^v0ox6>se!wJ^?+5gVw#+oQ%u++WV7>%FLJUJChTJXO^fAhSNC~)L_|BGHL#po zyG#-KH7BACkGCh5Qx;xc+O0YWs-bM*JTy2jhSQ-p><7dh&_li{X832$%J#1-QQWFp zN1&*?yrF54T3G1v`kJmI$_+H4Q@z?CZlQ!^sK3C4oVI8SZ5@vFk5Qu|TYta4cy*8( zll^NVP@f}rGJa6VL1w5`xV4^-oN&erRSy;WYqbN@kO61&zc?5e8k2~x7Q2jcA)8We zJ)Z64^pb_`=9kZjv0Ajy5iO;bWxO|(2K+6R8|!P9_YnGm$rAXE_iClB2+?|uMaafH z9Q#ciymmc4&_ra>id^yzb|7{OOW>)$JW*?Tt}qf_o$GnkuQ0d0t&aj_+nKGR6%?%i zM>R;Vi@3h)*K%!9S0NQq=;A?TlVScoFFo&uUW^Nb>z$h-&V3`q1)-Z2c0(=y#+=?X zk+ZflJplVtdC>n)U+E4nP#}lsWyz3hY+j!70S^shiEhMuP}4PQDJ6 zj1BpmG#emS5p5&eFQ|F=K)t6Y>03jlamr!pl>Z_|N;j#r(X;k;=jW>@B3z0)`w%ZN zqf={B_I~Ts=)YI0lnTntOrA{B$xctt@~np{3o1|+JWZRLeix+T6vz4X=;^+!bNDj4 ztK2@v$A^ch12B? zXA(@}$e0Ky|5b#B+Gf*xYWg#?NqZR^|s*kZZgcDrI2pLW7Mi3z8H3hRTq5yz|ix^p1-cSHih!;Y`jnjkn~ zbum;Ie!JY>O{x%@$EV)5E+WSc*WB-uMJ$$DnWA|r5@ZbIbLM?Tc=*T|jQaTG%x+z* zsl75eyL6$uVG&GnwcC*WurTm7mMVS}y9xW9?6XD&frIa#OE*~gdgueb);jsg^IpV{ z_(&$vA%`fbTd#aH9Y3QlCE)a>kQ`s2PFEVNEi6u-PAcA~B0Y2EDE1%vl7?IL?fp?h zp;n&Ut2%St?cEgpQO!wLN_Rd)vSZRBL8P-i|A0e_*Ov}Z`bM6fzCuHX3*8tdy~owI z9FW6kCL0`d*}~)SQWC%OV{RXFfVOuSucZ>*S6u^d<<2$T$vK=YFhb%%)C1@%pPK3v zg$$E`F1qR`M~aqRIkA4x4P$lGf0xf{C%?E>Q`W=Cb$FAwP@F_B8f7JF?kj_Bcy-Zl z+oa67^?S3j+~hVtUphD9C+YH5RZ`k?Hkn;oihy8W2M2_pA@?22;r?QdjPCN3A1Qk& ziIutir#6{_4Y`suIKR9;Gyn0{JZ0*%U&CBtMlykUk#C;#e7a*I5=E)F=N9Kq;oN5# z#mJi5*q=pRT_N17h&*=CnJJqCeBYo~L1#*;B$3P@Wh*}_MRQn$yDf+l^ahRt*l z>2MnJC&7*$AAhslLMzh>Qf@dnCzg9#L7ix!yci;D223dALZJvc@59~2ptcHUmV7oG zK-}ozp|j{LP&p@Vn92To=gcbqVfj4PJ{7Ctg_7PMK8u!AHgL!pfy1txH9p$5rnbBA z@7DN3ca$0%y`mQPHP5RS~RHABC z@w7$}v3&_+sWNvdAHUB<5lxY;1zpu=kEE?+7Q}FoyJ)G*kXLQ8KNUQO2t?Z(RJ$Xon!ULStKJSy+2p~| z@9l2AYSiz=DblyIzB)0dW4{>YccjFks*CX-Q@KAT=OjuA=Y}+iyogyA7qC&7^wa$DFk6Av=01n|u55`jN#?2h-TcqJhg*N=5%@0ZC9hDxcb3n_+y5vR3&m8q~ST zdT7h)+~c{p7^lr~gpav$QZ(rSriO)?<^E8A7HK=^3QV5|exTreeHD}Q4fe|9Ge<0B z((QdU7eiebT`J^*KZe%B!%pPyp9?1*Z;uDuTwMEiyfoa!Hn0FcfFk3SzaJIv+<_ET zZ0OVvKPcp?!o>q3UrgKJjH64cg~K_$1(Qz|)ysQV?__Kf(84+Q_XAh4uOTM0CyE2LY$JJSe#j$i-7)b&F z0>K>;+}$;}yGw9)cMIV3^)!o@va!x%Fl{PQ=~yl$*8G0+1b%+%xGnb zh7!D3*AX!>!IGu9gBp3`hbaA=qvSL(@fP-dHu_1&?fu+FOjwZ<+10WH1JltFJrIyG zJWL(b9szAuA_AzWukSop!Q@kFVRlOiQkn(P?A;-B{jf%GtGC*G71RO@sEvMV#omVs zb<%r{_E3Bcap_)NKN8}da`SqKIf!Q`wXAR7zYkMXKPZz^U~?x}{>~#F9YD@nl>GBc9ut#A zHj8BR9wlXB2y#!r6>b6HmWhi+H^=(t2FTMC3P-#52c+zhJ(rACKaI$90)i^$}YmdzkhC4l%aGIvggoL2su{e`^9? zT6_&NQG&Umuw$zhw1J{(dE!wuvd?SL{$0geLPF34{Ht;`Pz8F1mn}#tpJQ7G6S8hy zs|xoH&TxeT3$PeI5$`sWyK2OJjkfD9R17l8E-@N1;t20)CmR`=jrr^?C04D^=|w;F zmxHTV{ATB4$OR#p@W)0lnoU`Q-#?jiL!uF&UIetma&gS=j9yB(`IsiK*8EXMk`!)P zei?(^1?O=(R@GZLyB!0W8xUsBvLC<)HGURm#oXuVi62JHRxg*-5%`>gZi`KcmhZ-= z;mN~*QWD(E)wrRSN4%xYB<4-au=pGYS{WeR{LU1vFqHT?q<31DyUMr&`!WJ<{k6Y^ zOqrF5dB2O#?EARS^8nOII&Cx`M_M}FXWj8afx2429`(R+cG?#6MQ3_~_3+ais_C#s z{dAFi7FG=mYhky&mB_}WK@PLs`z&s&V4R`(BGDX#zfSD;-<|)^Ce7W{ero&1GO2i2_NMxryeH#SXCCX^P4b(dL2O` zRtu{n4yXsHcQ>)1q>8q8YRMM&P{)=C3$6!Y{i!55ot=`N$2IwZVN`*YA`I39n*EIn zW0{$v1etYxUJmtwsy4ct<5{lq2L1YhA13HEjBmlR>8;IZRZ6#!Hv3Ntti0`h(#id( zf{xS^+BAqV&So0QWu!bTyne!D96y$t*ZTZ+czMi9Y<4V!OuqCnzhR#?60Dii-{ z%DAu?@M-aysf(K9k<&pvsX5WtXK}u3~_vMdB>}#0+KD+nG;FIqEfrx2b_*?PHu=T*ppPkwGmiONh@hbxkr6BQZ9o zBV;(^44sfof(1lKuwDAIk?`(d1A|9iX0jojG-*AjTg7ROh*^%Qh(xoBX)|qY;FWVm zjt49%{XztTpD@FO^jcW(a3d!r-XvsVWa&ia>gTBoq*!z#+8}(8Ak}Mh032Dg2<|O5 z{7Sz%NgbWoh(z=Y$ zu(mhd=hL@kM*iEML^}MPQoDXVcvOz*wwBtSk7%ykbiBNn@M)DW(km^uFGsO9ek(aN zz3IIO=5oJCPWPmt!AtRm8!9Z)z%9zQ1PnuHT3FGok+rvlNPakQ|Gn`c-wemr60Qbt)=IW zc8?)%6~m?LsZrss#6qSw_tTxUU$#SWf{-LGYPzKSk!dCFl^D2;j_TQ>bwvu%U;ZW3%4j z{nY2ZF6#390NUUD99uGN&_2^Y-;W`uOwv=i+N!u_REF+OR>5|Zjc#W5)XsS!V& zF!qT82JQT^`SBfotLN45E_EL`K2x9NgHqsJTECgRhv)aRk`EQpYZ4C)-Y63xjVV$| zqQrsRlJ0YX8&Jk(aP%kQG>=U}YTt&&iWe_AF3wzHsN?8csKPxerk|`Ojy35JNDXi5 zLCx>X$+OD*LZC9zhe9QvIG36};;F3BQ7OHf_Nb-4~_ruLaaTvGT)BN@MkXWTS= z+*?dy5{T{qp$`AoV0ZZnS_Lti=gx}&s@=8OsGbY)d~uTNxK?vyePiUfHwn2o;5PNs z;V=n``=CeP2_*G8!l%=a%8uaCh|%70U*w zs*o=#r66wO6C+S}qV#4m2c!ChKvlJJ2LBP&&TQ}8e-0mMaJssQ(=tF0$FDEA-_q%H$aRDq42^t{wXO)6RX*J2_ICcgr$DP*x$=9|1r{+OB-0Q@_8`b;fo}8s8$v>! zg6o`L^xAYJGlTmV_wH3UrREj`AD?4!u{*bYUXV8KQU2gfc;xrzfWaDpz+htmNaQwsC zWL80kIkO6$y z({D&k5`)q=i|9d#FNeK@O!y2*Q`IcW#s{htZJn04Y!YvD9^aKsqs(JNX3=)wsRL@T zN<|hdKP?3fXG5O+>b<-xDn&Ksb%`hq7)!yMLF!iE!=_oy1(rtF%1Dx_;9n+;97hNqE&F+u{ulp+Hfn z0W>l7()2^T)%dAR6OI-UCCyjMqGIO6ZHt_t4-uR>+-OJr`?5OmsWCOnnx-Xr1?X~0 zCnhQ!$9|)PquIfLbx=h)Rnj18F8xGIETrk6uzynjHj>R_I+;5^A)){a618>A$;_Sv zEiAT)Y|^@HE}Rpmi_cD6TfZw&{L;a3cLcl3lO<{FBr#rvg+&os#I5-vOGMaj#+<^; zxpv6S{hempgdD@$x~jGbNqEj-UdrN%Ud6-e@W`d|uD}tq2spslB+P2$gjhm}J*eL` zy77q}z35lVf@FX)dsJi%sk{j@TM4E}=;h3Uv}R6ElcKu2WmnrojBU1R0ZrkqL?*MR zf&yWc`|G%i&a_ZbgyXK5`I?D8h!2S;DJ%SEo%&7-ESCVDM2Xo4LblC)TGB!vrE*iV zgssKNB{STp;INtI)B^QIs-iMFGaOHNiJ-#j{8laPhT`VJx#pAXR?#9d)-<>cyt#nk z?*x@5^GM73RqC0waei{B<`h`!W`o65PLx<0dD1@@cfqUvt_660pV{pKsgyG_v7{Pd ze&upEiw~Kir)z8niEMpN2mRq{+6E0hZwi-u{hDpVUN-i?wXL|afFwq)uB4<;I{eLg zXVv(9-Z%zUn$)|dV5~QkL%M@z*dsBSFUAcV{l(=YX_Q2#nJb=SR;Jb#m3wF6sn;WI z+_P=<^gyT+FRXAi7~pIZw@0IL8w=uLpGCuV@W7t(u)Vt z=7u7vPV1sW-8_w$-s;h0t!A4rl=0*-AePc|Csm45u)b~eG!mNqY2h#;&Ad1ylym?y zR*&A}m4l5Obz(|Aj*%3>Rj;H3Cizd?)W^Atv?<7RktmCVYp^X|FGWra(%Zb+uPB9X zY<=Wt$+v=#TdH z+?i|>i#5e}QI89sE4@kuX2;uhh8$u5r-@G`yY^E^|JJAPU*7NBK+G%FLB)X6V*Y~p z$lY1v^Y9&YT}ZJ^0?V}uYdCOd_?IaH9pkQjI%6O08YGSkSqGy@Hg|_ML8rcSUoh|1 z4<-J9HnWHu7|TXM(kM2ZRhsPse|!#V2r8Q?kTtmXAJ^ zs>=sZBeK@**)u+)VPy0h*a(8%p_AhFex`h=1x0HUdl(}8b;Vw~TUP6#0$Or1&V81- z54A91Dy&uvBdroXqNXOxNI#B$`}R@|Vw|*G|Hc2*!MwJ}C!DM}RX12sgkogA%KxWk;aHg;ZF{-XfbA zOJNuFFnTw#zK>oBd=D;tN&oU6fkpS`A3?0BHjzeU%q78T6u(KqjOsT8$41?oSfq87 zb$e~$I`wGxl>{swKNe}vkbe)*p9fm(c3FF^XVR<}rW6~1j%yjlBI%Z*+9THg3cg9p z=$T0#+onBB`h<%4JE-Tc;|_^0pw`#GLxP61w^lDl&*=m5a`n)5v>H1ATO;d$khYL? z|Bn|2E!BTj;u*jzgdc{*GCq<3w6G@0w;k_K&@bG17`3!x^A3ju+im}C#|a?GzLoa| zN|Ct_Io)LA(^y9FW!rXI!fUj9aUlT;+#L}AJsUu0IXu}tbp&ty0o^(U-*xc>5N&`3 z=f7n2zt1B(cqGn7UH*;fDt#sa^h1;rR+=xrqmchTV5Q{GBCfbQYUPJ8uTpS{D0?8& zcOQ4WbS9DUg|QEE_}XoBX#e-gLF*>%5a<8$ zBP9j-_onTF3)eb@#V%4$&7{C5+5$1S6SqU42ZC;3eY&{}IJy2lbil<-T1){$pLs*s z>JSy-=}`pO{sA})ycF?n`5Bct`idOpEwhM7T<9WY}JCG zk}sZj&%un7&yrR=cFQv_r z37L3Fa%ePwKK7!$g!r$x*E=*iaynU0el3{l3gDWr8VSU5s>9me_YFqEGj7-K-nxhg z($h;(FV+64W;zb2&Tlzs(6Pd2EdPM$DTDC zX)Mp(A=%B@Qt+ys%3UsiuHN{%h|`*YPgSNo!T(GjBWo^;l!l}k6rX*I$lNU4O@nvs`b1Gaa( zhw#u@)lJx!;!1(j3<<)y2g|Rmp>AqbeuTZl7{w5HG2MM8QjlKNwj2&33Dvd*ouu-m)`Pm3#8EOh4x$nj1>|L^S^) zitz#N?Ci+7xsOo3?$@-AQ5c5y*(x6PsQepaF$G<#qEgW~uH1h(M7)m06$Nd}GaGh5 zO*_yvxFHrv!99td#IQ6-R-Fo&Lw`aQMH@oP7R2J*SO;R}FSKO)&4AJ%0DyhBAk~3T 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 Hx8wdFDH;fX literal 0 HcmV?d00001 diff --git a/scripts/blockly_example.py b/scripts/blockly_example.py new file mode 100644 index 00000000..b3b850ed --- /dev/null +++ b/scripts/blockly_example.py @@ -0,0 +1,186 @@ +""" +Example: Blockly-Generated Code Pattern for OT-2 + +This script demonstrates the Python code that would be generated by the Blockly +visual programming interface. The code mirrors the example shown in the +blockly_concept_demo.html visualization. + +This example shows how custom Blockly blocks can generate Python code that +directly calls functions from OT2mqtt.py, maintaining a one-to-one correspondence +between visual blocks and executable code. + +Note: This is a demonstration of the code generation pattern. To actually execute +this code, you would need: +1. An OT-2 robot connected and configured +2. The MQTT broker connection details +3. The required labware and pipettes loaded +""" + +# The imports below would be generated by Blockly based on which blocks are used +# In a real implementation, these would come from the actual OT2mqtt.py module +# from OT2mqtt import mix_color, move_sensor_back, protocol + + +def example_blockly_generated_workflow(): + """ + This function demonstrates the workflow that would be generated by + the Blockly blocks shown in blockly_concept_demo.html + + The visual workflow consists of: + 1. Home Robot block + 2. Repeat 3 times: + a. Mix Color block (R=100, Y=50, B=75, well=A1) + b. Move Sensor Back block (status=complete) + """ + + # Block: OT-2: Home Robot + # This corresponds to the "🏠 OT-2: Home Robot" block in Blockly + print("Step 1: Homing the OT-2 robot...") + # protocol.home() + + # Block: Repeat 3 times + # This corresponds to the "🔁 Repeat 3 times" control block in Blockly + for count in range(3): + print(f"\n=== Iteration {count + 1} ===") + + # Block: OT-2: Mix Color + # This corresponds to the "🎨 OT-2: Mix Color" block in Blockly + # Each parameter field in the block becomes a key in the payload + payload = { + "command": { + "R": 100, # Red (µL) input field + "Y": 50, # Yellow (µL) input field + "B": 75, # Blue (µL) input field + "well": "A1" # Well input field + }, + "session_id": "session_001", # Session ID input field + "experiment_id": "exp_001" # Experiment ID input field + } + print(f" Mixing colors: R={payload['command']['R']}µL, " + f"Y={payload['command']['Y']}µL, B={payload['command']['B']}µL " + f"in well {payload['command']['well']}") + # mix_color(payload) + + # Block: OT-2: Move Sensor Back + # This corresponds to the "↩️ OT-2: Move Sensor Back" block in Blockly + payload = { + "command": { + "sensor_status": "complete" # Sensor Status input field + }, + "session_id": "session_001", # Session ID input field + "experiment_id": "exp_001" # Experiment ID input field + } + print(f" Moving sensor back to charging position...") + # move_sensor_back(payload) + + print("\n✓ Workflow completed successfully!") + + +def demonstrate_block_to_code_mapping(): + """ + Demonstrates how each Blockly block type maps to Python code + """ + print("=" * 70) + print("BLOCKLY BLOCK-TO-CODE MAPPING DEMONSTRATION") + print("=" * 70) + + print("\n1. OT-2: Home Robot Block") + print(" Visual: [🏠 OT-2: Home Robot]") + print(" Python: protocol.home()") + + print("\n2. OT-2: Mix Color Block") + print(" Visual: [🎨 OT-2: Mix Color]") + print(" Red (µL): 100") + print(" Yellow (µL): 50") + print(" Blue (µL): 75") + print(" Well: A1") + print(" Session ID: session_001") + print(" Experiment ID: exp_001") + print(""" Python: payload = { + "command": { + "R": 100, + "Y": 50, + "B": 75, + "well": "A1" + }, + "session_id": "session_001", + "experiment_id": "exp_001" + } + mix_color(payload)""") + + print("\n3. OT-2: Move Sensor Back Block") + print(" Visual: [↩️ OT-2: Move Sensor Back]") + print(" Sensor Status: complete") + print(" Session ID: session_001") + print(" Experiment ID: exp_001") + print(""" Python: payload = { + "command": { + "sensor_status": "complete" + }, + "session_id": "session_001", + "experiment_id": "exp_001" + } + move_sensor_back(payload)""") + + print("\n4. Repeat N times Block (Standard Blockly)") + print(" Visual: [🔁 Repeat 3 times]") + print(" [nested blocks...]") + print(" Python: for count in range(3):") + print(" # nested code...") + + print("\n" + "=" * 70) + + +def show_extensibility_example(): + """ + Demonstrates how additional OT2mqtt.py functions could be wrapped + as custom Blockly blocks + """ + print("\n" + "=" * 70) + print("EXTENSIBILITY: Adding More Custom Blocks") + print("=" * 70) + + print("\nThe OT2mqtt.py module contains other functions that could be") + print("wrapped as Blockly blocks following the same pattern:\n") + + print("Existing Functions in OT2mqtt.py:") + print(" • mix_color(payload) - Lines 87-142") + print(" ✓ Already implemented as Blockly block") + print(" • move_sensor_back(payload) - Lines 144-162") + print(" ✓ Already implemented as Blockly block") + print(" • handle_command(payload) - Lines 164-173") + print(" → Could be wrapped as a dispatcher block") + print(" • protocol.home() - Used throughout") + print(" ✓ Already implemented as Blockly block") + + print("\nTo add a new custom block for any Python function:") + print("1. Define the Blockly block (JavaScript)") + print("2. Define the Python code generator (JavaScript)") + print("3. Add to the toolbox XML") + print("\nThe one-to-one mapping ensures predictable code generation!") + print("=" * 70) + + +if __name__ == "__main__": + print("\n" + "🧪 " * 20) + print("BLOCKLY + OT-2 INTEGRATION DEMONSTRATION") + print("Visual Programming → Python Code Generation") + print("🧪 " * 20 + "\n") + + # Show the mapping between blocks and code + demonstrate_block_to_code_mapping() + + # Run the example workflow + print("\n" + "=" * 70) + print("EXECUTING BLOCKLY-GENERATED WORKFLOW") + print("=" * 70) + example_blockly_generated_workflow() + + # Show how to extend with more blocks + show_extensibility_example() + + print("\n📚 For more information:") + print(" • Open scripts/blockly_concept_demo.html in a browser") + print(" • Read scripts/BLOCKLY_README.md") + print(" • Try the interactive demo in scripts/blockly_ot2_demo.html") + print() diff --git a/scripts/blockly_ot2_demo.html b/scripts/blockly_ot2_demo.html new file mode 100644 index 00000000..958ee673 --- /dev/null +++ b/scripts/blockly_ot2_demo.html @@ -0,0 +1,343 @@ + + + + + Blockly OT-2 Demo - Concept Visualization + + + + +

Blockly OT-2 Custom Functions Demo

+
+
+
+

Generated Python Code

+
+ This demonstrates how Blockly blocks can generate Python code that calls custom functions from OT2mqtt.py +
+ +
# Python code will appear here...
+
+
+ + + + + + From 05aeb1b5e449e398c0e62e858c156f7937c0a199 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 3 Nov 2025 18:58:38 +0000 Subject: [PATCH 3/9] Add summary document answering the Blockly integration question Co-authored-by: sgbaird <45469701+sgbaird@users.noreply.github.com> --- scripts/BLOCKLY_SUMMARY.md | 123 +++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 scripts/BLOCKLY_SUMMARY.md diff --git a/scripts/BLOCKLY_SUMMARY.md b/scripts/BLOCKLY_SUMMARY.md new file mode 100644 index 00000000..22e31aef --- /dev/null +++ b/scripts/BLOCKLY_SUMMARY.md @@ -0,0 +1,123 @@ +# Blockly Integration with OT2mqtt.py - Summary + +## Question +"How can Blockly be used with custom functions from OT2mqtt.py?" + +## Answer + +Blockly can be integrated with OT2mqtt.py functions by creating **custom Blockly blocks** that generate Python code to call these functions. This demonstration shows a complete working example. + +### Implementation Overview + +1. **Custom Block Definitions**: Each OT-2 function gets a corresponding Blockly block + - `mix_color(payload)` → "OT-2: Mix Color" block + - `move_sensor_back(payload)` → "OT-2: Move Sensor Back" block + - `protocol.home()` → "OT-2: Home Robot" block + +2. **Code Generation**: Each block knows how to generate its corresponding Python code + - Block parameters map to function arguments + - Maintains one-to-one correspondence between visual and code representation + +3. **Workflow Composition**: Standard Blockly blocks (loops, conditionals) can be combined with custom OT-2 blocks + +### Example Workflow + +**Visual Blocks:** +``` +[🏠 Home Robot] +[🔁 Repeat 3 times] + └─ [🎨 Mix Color: R=100, Y=50, B=75, well=A1] + └─ [↩️ Move Sensor Back: status=complete] +``` + +**Generated Python Code:** +```python +from OT2mqtt import mix_color, move_sensor_back, protocol + +protocol.home() +for count in range(3): + payload = { + "command": {"R": 100, "Y": 50, "B": 75, "well": "A1"}, + "session_id": "session_001", + "experiment_id": "exp_001" + } + mix_color(payload) + + payload = { + "command": {"sensor_status": "complete"}, + "session_id": "session_001", + "experiment_id": "exp_001" + } + move_sensor_back(payload) +``` + +### Key Benefits + +1. **Accessibility**: Non-programmers can create OT-2 workflows visually +2. **Educational**: Users learn Python by seeing how blocks translate to code +3. **Reproducibility**: Visual workflows are easy to share and replicate +4. **Extensibility**: Any function in OT2mqtt.py can be wrapped as a block +5. **Production Ready**: Generated code can be saved and executed + +### Files in This Demo + +- **`blockly_concept_demo.html`** - Visual demonstration (open directly in browser) +- **`blockly_ot2_demo.html`** - Interactive Blockly editor with custom blocks +- **`blockly_example.py`** - Runnable Python example showing the pattern +- **`BLOCKLY_README.md`** - Complete documentation + +### How to Extend + +To add more OT2mqtt.py functions as Blockly blocks: + +1. Define the block's appearance and inputs (JavaScript): +```javascript +Blockly.Blocks['your_function'] = { + init: function() { + this.appendValueInput("PARAM1").appendField("Parameter 1"); + // ... configure block appearance + } +}; +``` + +2. Define the Python code generator (JavaScript): +```javascript +Blockly.Python['your_function'] = function(block) { + var param1 = Blockly.Python.valueToCode(block, 'PARAM1', ...); + return `your_function(${param1})\n`; +}; +``` + +3. Add the block to the toolbox in the HTML + +### Comparison with Similar Tools + +Like **n8n**, **NODE-RED**, and **IvoryOS**, Blockly provides visual drag-and-drop workflow creation. However, Blockly's key differentiator is: + +- **Direct Python code generation**: You get executable Python code, not a proprietary workflow format +- **One-to-one mapping**: Each visual block corresponds exactly to specific Python code +- **Educational value**: See the Python code as you build visually + +### References + +- [Blockly Official Docs](https://developers.google.com/blockly) +- [Getting Started Tutorial](https://blocklycodelabs.dev/codelabs/getting-started/index.html) +- OT-2 Functions: `src/ac_training_lab/ot-2/_scripts/OT2mqtt.py` + +### Try It Out + +```bash +# View the concept demo +open scripts/blockly_concept_demo.html + +# Run the Python example +python scripts/blockly_example.py + +# Try the interactive editor +python -m http.server 8000 --directory scripts +# Then open http://localhost:8000/blockly_ot2_demo.html +``` + +--- + +**Conclusion**: Blockly provides an excellent way to make OT-2 automation accessible to non-programmers while maintaining the benefits of Python code generation. The one-to-one correspondence between visual blocks and Python code makes it both educational and production-ready. From a9265b2bf69d8f78c199a61902072cd85d8db161 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 4 Nov 2025 03:01:20 +0000 Subject: [PATCH 4/9] Add real Blockly installation with npm package and webpack Co-authored-by: sgbaird <45469701+sgbaird@users.noreply.github.com> --- .gitignore | 4 + CHANGELOG.md | 13 +- scripts/blockly_app/README.md | 249 ++++++++++ .../blockly_app/blockly_real_installation.png | Bin 0 -> 123121 bytes scripts/blockly_app/dist/bundle.js | 170 +++++++ scripts/blockly_app/dist/index.html | 98 ++++ scripts/blockly_app/package.json | 22 + scripts/blockly_app/src/index.js | 463 ++++++++++++++++++ scripts/blockly_app/webpack.config.js | 18 + 9 files changed, 1033 insertions(+), 4 deletions(-) create mode 100644 scripts/blockly_app/README.md create mode 100644 scripts/blockly_app/blockly_real_installation.png create mode 100644 scripts/blockly_app/dist/bundle.js create mode 100644 scripts/blockly_app/dist/index.html create mode 100644 scripts/blockly_app/package.json create mode 100644 scripts/blockly_app/src/index.js create mode 100644 scripts/blockly_app/webpack.config.js diff --git a/.gitignore b/.gitignore index e26b00e5..cee89f58 100644 --- a/.gitignore +++ b/.gitignore @@ -73,3 +73,7 @@ src/ac_training_lab/apriltag_demo/tag36_11_00000.png src/ac_training_lab/apriltag_demo/tag49_12_00000.png scripts/playwright/sem-open-close/chat.json scripts/blockly_demo/ + +# Node.js dependencies +node_modules/ +package-lock.json diff --git a/CHANGELOG.md b/CHANGELOG.md index a3519da4..16018368 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,12 +3,17 @@ ## [Unreleased] ### Added - Support for both `rpicam-vid` (Raspberry Pi OS Trixie) and `libcamera-vid` (Raspberry Pi OS Bookworm) camera commands in `src/ac_training_lab/picam/device.py` to ensure compatibility across different OS versions. -- Blockly integration demonstration showing how custom visual programming blocks can be created for OT-2 functions from `OT2mqtt.py`: +- **Real Blockly installation** using official npm package (blockly v12.3.1) with custom OT-2 blocks: + - `scripts/blockly_app/`: Complete webpack-bundled application with real Blockly installation + - Custom blocks for `mix_color()`, `move_sensor_back()`, and `protocol.home()` functions + - Real-time Python code generation from visual blocks + - Fully functional drag-and-drop interface + - Documentation: `scripts/blockly_app/README.md` +- Concept demonstrations for documentation: - `scripts/blockly_concept_demo.html`: Visual demonstration of block-to-code mapping - - `scripts/blockly_ot2_demo.html`: Interactive Blockly editor with custom OT-2 blocks + - `scripts/blockly_ot2_demo.html`: Interactive demo (CDN-based) - `scripts/blockly_example.py`: Python example showing generated code patterns - - `scripts/BLOCKLY_README.md`: Comprehensive documentation for Blockly integration - - Custom blocks for `mix_color()`, `move_sensor_back()`, and `protocol.home()` functions + - `scripts/BLOCKLY_README.md` and `scripts/BLOCKLY_SUMMARY.md`: Documentation ### Fixed - Ctrl+C interrupt handling in `src/ac_training_lab/picam/device.py` now properly exits the streaming loop instead of restarting. diff --git a/scripts/blockly_app/README.md b/scripts/blockly_app/README.md new file mode 100644 index 00000000..2b169815 --- /dev/null +++ b/scripts/blockly_app/README.md @@ -0,0 +1,249 @@ +# Blockly OT-2 Integration - Real Installation + +This is a **real Blockly installation** using the official `blockly` npm package (v12.3.1), not a mock-up or concept demo. It demonstrates how Blockly can be integrated with custom functions from `OT2mqtt.py`. + +## What This Is + +- ✅ **Real npm package installation** of Blockly +- ✅ **Webpack bundled** application +- ✅ **Custom blocks** for OT-2 functions +- ✅ **Real-time Python code generation** +- ✅ **Fully functional** drag-and-drop interface + +## Screenshot + +![Blockly Real Installation](./blockly_real_installation.png) + +The screenshot shows the actual Blockly editor running with custom OT-2 blocks generating real Python code. + +## Installation + +The application is already built and ready to use. If you need to rebuild: + +```bash +cd scripts/blockly_app +npm install +npm run build +``` + +## Running the Application + +### Option 1: Using webpack-dev-server (Recommended) + +```bash +cd scripts/blockly_app +npm start +``` + +This will start a development server and automatically open the application in your browser at `http://localhost:8080`. + +### Option 2: Using Python HTTP Server + +```bash +cd scripts/blockly_app/dist +python -m http.server 8081 +``` + +Then navigate to `http://localhost:8081/index.html` in your browser. + +## Custom Blocks + +The application includes three custom blocks that map to OT2mqtt.py functions: + +### 1. 🏠 OT-2: Home Robot +- **Function**: `protocol.home()` +- **Purpose**: Homes the OT-2 robot to its initial position +- **Parameters**: None + +### 2. 🎨 OT-2: Mix Color +- **Function**: `mix_color(payload)` +- **Purpose**: Mix RGB colors in a specified well using the OT-2 pipette +- **Parameters**: + - Red (µL): Volume of red paint + - Yellow (µL): Volume of yellow paint + - Blue (µL): Volume of blue paint + - Well: Target well position (e.g., "A1") + - Session ID: Experiment session identifier + - Experiment ID: Experiment identifier + +### 3. ↩️ OT-2: Move Sensor Back +- **Function**: `move_sensor_back(payload)` +- **Purpose**: Return the sensor to charging position +- **Parameters**: + - Sensor Status: Status of the sensor (e.g., "complete") + - Session ID: Experiment session identifier + - Experiment ID: Experiment identifier + +## Example Workflow + +The application loads with a pre-built example workflow: + +1. Home the OT-2 robot +2. Repeat 3 times: + - Mix colors (100µL red, 50µL yellow, 75µL blue) in well A1 + - Move sensor back to charging position + +This generates the following Python code: + +```python +# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + +from OT2mqtt import mix_color, move_sensor_back, protocol + +# Main workflow +protocol.home() + +for count in range(3): + payload = { + "command": { + "R": 100, + "Y": 50, + "B": 75, + "well": 'A1' + }, + "session_id": 'session_001', + "experiment_id": 'exp_001' + } + mix_color(payload) + + payload = { + "command": { + "sensor_status": 'complete' + }, + "session_id": 'session_001', + "experiment_id": 'exp_001' + } + move_sensor_back(payload) +``` + +## Project Structure + +``` +blockly_app/ +├── dist/ # Built application (served to browser) +│ ├── index.html # Main HTML file +│ └── bundle.js # Webpack bundled JavaScript +├── src/ +│ └── index.js # Main application code with custom blocks +├── node_modules/ # Dependencies (including real Blockly) +├── package.json # npm configuration +└── webpack.config.js # Webpack configuration +``` + +## How It Works + +1. **Custom Block Definition**: Each OT-2 function is defined as a Blockly block in `src/index.js`: + ```javascript + Blockly.Blocks['ot2_mix_color'] = { + init: function() { + // Block configuration + } + }; + ``` + +2. **Python Code Generator**: Each block has a corresponding code generator: + ```javascript + pythonGenerator.forBlock['ot2_mix_color'] = function(block, generator) { + // Generate Python code + }; + ``` + +3. **Real-time Updates**: The workspace listens for changes and regenerates code automatically: + ```javascript + workspace.addChangeListener(generateCode); + ``` + +## Dependencies + +- `blockly`: ^12.3.1 - Official Blockly library +- `webpack`: ^5.102.1 - Module bundler +- `webpack-cli`: ^6.0.1 - Webpack command line interface +- `webpack-dev-server`: ^5.2.2 - Development server + +## Adding More Custom Blocks + +To add additional OT2mqtt.py functions as Blockly blocks: + +1. **Define the block** in `src/index.js`: + ```javascript + Blockly.Blocks['your_block_name'] = { + init: function() { + this.appendValueInput('PARAM1') + .setCheck('Number') + .appendField('Parameter 1'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + } + }; + ``` + +2. **Add the code generator**: + ```javascript + pythonGenerator.forBlock['your_block_name'] = function(block, generator) { + const param1 = generator.valueToCode(block, 'PARAM1', pythonGenerator.ORDER_ATOMIC); + return `your_function(${param1})\n`; + }; + ``` + +3. **Add to toolbox** in the `toolbox` object + +4. **Rebuild**: Run `npm run build` + +## Comparison with Concept Demo + +This real installation differs from the standalone concept demo (`blockly_concept_demo.html`): + +| Feature | Real Installation | Concept Demo | +|---------|------------------|--------------| +| Blockly Source | npm package | Mock-up visualization | +| Installation | Requires npm install | No dependencies | +| Functionality | Fully interactive | Static demonstration | +| Code Generation | Real Blockly Python generator | N/A | +| Extensibility | Full Blockly API | Limited | +| Use Case | Development & Production | Documentation | + +## References + +- [Blockly Official Documentation](https://developers.google.com/blockly) +- [Blockly Getting Started](https://blocklycodelabs.dev/codelabs/getting-started/index.html) +- [Blockly Custom Blocks](https://developers.google.com/blockly/guides/create-custom-blocks/overview) +- [OT2mqtt.py Functions](../../src/ac_training_lab/ot-2/_scripts/OT2mqtt.py) + +## Troubleshooting + +### npm install fails +```bash +# Set longer timeout and retry +export PIP_TIMEOUT=600 +export PIP_RETRIES=2 +npm install +``` + +### Webpack build fails +```bash +# Clean install +rm -rf node_modules package-lock.json +npm install +npm run build +``` + +### Browser shows blank page +- Check that `bundle.js` exists in `dist/` directory +- Check browser console for errors +- Ensure you're accessing the correct URL + +## Next Steps + +To integrate this with actual OT-2 hardware: + +1. Deploy the application to a web server accessible to OT-2 +2. Add a backend API to receive generated Python code +3. Validate and execute the code on the OT-2 +4. Add authentication and authorization +5. Integrate with MQTT broker for real-time communication + +--- + +**This is a real, working Blockly installation** that demonstrates the practical integration of visual programming with laboratory automation. The generated Python code can be directly executed on an OT-2 robot with appropriate backend infrastructure. diff --git a/scripts/blockly_app/blockly_real_installation.png b/scripts/blockly_app/blockly_real_installation.png new file mode 100644 index 0000000000000000000000000000000000000000..7d9e179067268d7a029456484fbe6e8e5b3ad7ac GIT binary patch literal 123121 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Ô)yhkRnBl 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 z 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

dwj{aAd;Dizd-)T!fe|t7EomIkw zl;L&}l)AJ6b-w@}&@J-a7C`I_Hr$6dHf`@(BDfWJzdr7tTy0>#lC(Rc^J&*u`MgAWR})V-=Y036?a~Vtd~;f(Aylz zD3|t;y6-H=&36K2s6HaA<*IG|@#k`8suR~?xfWS9D>W5czwLNJL#(4xton+@ltl@L zkCAT9-l><^V1`H9MmlTo0xZ+<->zW`SX^IV8D+E>(%IFpIm$R17Qz=Rl2dyq@lj=Q zJGcmHKQ$HVc{I9@h&Q{+PTTl|euWeW=4#AK%8%c@9{6d|pfFr%MHS7#HMK9J7rPT# z^PtCBb8@8VkTM09nxtU7qELoJyFeESX|~k zVpgFQUh6Ff5aa(d3lWi*7ucKY7V#xoV?SXO;H3I?zdmeo?%Ftphx^D^a>ALK*8N)M zorptvH@S#aj^doUSwl)ceu8CWXvG5l(fDnBUvheSq?gk?>J=`AMo_&6i#JnI1NE7! zQ%nHW^!7!<;%53=mzbJqIY7tn@(HkkW4B|pyD8MO&=+1G0j<~Es=UK;lN=}Zw|GpD zY7S5urx#iMPNDu9B}X=yP@I8?xr?sJ?wmaFW7+~|fQ_q$Gggx;{z9L9egt?-j5an0 zS#PHLL@K2KR)CgJ?mf|JW;?DvtQkaV!4$O#;ZyntZmIg}Q(8<$5lS*=;nL^Q zK6c5+s&LqGRn?$|SygMfcdSTdS137h!}@8LQ(%>=!!AMuJ4>srThENSY{@hpY9U@J zHp}H37AmUcGvBnM^}xVB+{8<oEX9=Lc08GY=3s8pF=PcSaG z7BJEG=(DTy$P${^6|qP-WjzhoK1utvuyfsS&!t{!ujc|8mTIB8z#4+=e(89EeW{X# z1JL#MxS^IzqUJ>n^S2hPP!0hec7E!svl%62&DYNP*=M5fR6>`|b!+ze8z% z`yxpKvzjQH3*k6CvR}GC({+lCuj7M$wY*uGR5Sc?r54JD|K=$+rq)cYNMt_K_ldip z8v}YN`(-M|cVc29)Q*LIJ$fob3jF00uP!h>;d-0@X6H=N#l^+8juSlo-=+3niV=a+ z`%aJNtNYboFPy?B7`B*%*nlz^mU8A2g61xrBlC<>OQPm7pF8nCJP1j9I|;sYu0E=# zY*9XhZCqt>!hd8%vFACko9$T+^Xq=V5uU>oc`&mWm=})2=xQA%Y zpvC@KQr_jcD8MDcV=!7UK1y-V1jhJ10|;UNeQ%PYu6*}uWH4s0#dSAz0sf;wf0h}v z4{zPdvE5{_hzQ@?zc99hacA)Vv@uini2mlMq9;8Tre$laEeCu%?Qh3C2gb4S z0f8*i&>JapnKvi79ZLV<0xm;{?ctsn5Zk^A@v}V?nX#P(mdxnzR|5;Cr2v4&uYVeT zKezzKS-uu9mjanROLjjIHNiVxr31Q~xO~&j)oo$0@|D|w7`}W4*!?Y(gpKmslcS=U z1&hvwJ6yYmq*$--${^h@k37lgFd$!ImZK=OvUCm)_+j-|+GyGg`9LV~bJ?{7*@gSsr*o})=P}h)=qq5>&)M9K;9s5%_uJz!=v}Ztre;%S!n@PZoc6w* zNocf`X?p|E>FhOv{Tpq+S;z0&E`j2##FcxG`?{h{NraRPTUz$@W}s|fiYM3YLLy*iWUzq!D}{hbvCva7^Sdz z*%8f3O`BLYouq1{Lk>Xv1c13JYNM;V;(x6N?5nt|7BJb@0=N83=O#hm=|xgN@P5N9 zpW>g&6c#m(9Gwg$qj_F5QLM?IAqf7iFu*NcGUclM59Ftx57N?#q~x<-x`9v6EZ?g? zF3I+6elNq%=CuLy#dN1k=dA>2omQFysxsyw9tvCotpNMDf5pbIu~^&e_%;w_6J%iW zdQePc;E|xTevLx6okQ}M-7|71ciSd09^Z#J#;K{Ph9$#O0zOYxr0JOpYz%;Z%<3PZ za5DT~^z$E|D3H^R@gJ!yAdrmQ2;k2Y z_-6)YgBKhSU=I)F&wLlkm=VCO_o*SXd#JgoRpJZM z$Huw7$HB#Bgn#iB2D*oVt}+?vKl?Q5R@E3y$=~$s5AqKrQ!p}kdM4~IPsS$?kqj?X zQ-cnIJ9~x}s(;u!#NU=_bf@p&*vvCg>ay*(6QS}x@g=0ghv!G{24n$cqbR=?^@`7v zSc_~IKX9~Ez}#F>0uE!-pYt~*$`|aLHuJ5{3tGt2zKnN?Ta9x+xkeagFTLk&tlU5D zS9fq=mudWX$JFt6VrJ8RUL{)XfaQGwpPwb&0zbbZR+i)0*>tDsWoD07>OV97HEWaq zFs!Psbpm$Vd?UJZU4??|b|ajTzFO@NKf!Q%DfET1+VM;0FzT|?hy6~nqqy5e>OrU5 z5!Vb}J5_U%wENZKZN4Ug1@mQwzJ3z|e)rnRJSmMz%7gai=_e|}bz#-+A+O-{GESGVI<5Rv6(+$n;(oMt z3tNV}UBwi^(zQXhebMN}q?ivBgk}wnPn!V;HLexA+*ZQNu$mQoKhFB}^t?vqGja1J z8#D%!9^{ub&yQF58+Hr4V8D`2dzDiUGl7erTep8NoEC-1-16WWU2+PcDoYbvx~`rU zM|VNf=oPuJh4*n+0>VD-@RX&klk?<9uIR4?diS$j_z`W=_6S^@!@0=pAo8RWfc%ndJHu_1BmfmGuCzWOf zAMcTl0BDI%@oaODxQS7iBA<%m?bFfslg$XqTzj3I?5_N=o}QA~>B_<2<#H@2cVia~ zi&HLLx0&?d9+7?e{ZIBLduuU6BRmc%9^Id_g+P|`F88O|(0D3G%#Cm>kE6+{yH`g2 zTf)~!gNi4dX}4=|y>p{wMqPifq5pTbWEXY6qqap?}^^Nb!El2kFw!9xBN~f$U>9htJ)g_x$O36T=URv`_E+-DV#Yp5s)pp6n84 zCpb6}ORWje_#Bm{eK6WCZDiD1(w3^SGCV)0qUuT?eX@#4P%BX@9n?_P({zqGIkq_2 z-aERF38P{h(vQl#10xZP<(27j_-Huo33|Q^3I4gxdYIy-YwlP)p=y`RBv5GJ7us~t z+d(rKIzD~hR@JUWgrZs|Y0O|hc2-(4aJWKWovNKq!=S67rJ@MYL_+tP1g4HoeH4a9 zHtdSi!;5kLW7?K^*cXV#O(M?ddl zDRakedzT;}nPPSY16bNMmMJ~X!KLNzY%-^;SEq()O?uhmYAMtmpITDJ zQ|g*rO|(YV?}zrv1d#!2!{w&hz-z<$N?3+qqLou6sf*alr&tb-4B%U<>_pmavEvqU z%>~wLdfEO7%s9!3_fSdanxuWq*ynYp_jU3QBzk+-O8IrH7<5#_)?9*~V4pRx5{~WM z#u}GuMp~?e?I?k!JV@hsg@8}D>^%nxj#hUuaLl>I^btez3N+j0_Ea5bo4H&r8ckA? z9j$DJnI$ePyq6GR(%>*=M$mm?Qnx3a+Ko|NA!$d6i3x)fO(>6an4PcWI<`wQ9(LU) zcz6iXMT$RT1S$1}wo!}o)f-K-8qH;r@kS1uH=zjB{sA}on}6w$-K1-c{HMLTTpm`C z7|w2X7lGBv3eMAQsvYkYqC>LG4yq2f;-VDUXJ>6=8M)ye5ZBR5&(|$zCe%fo$(%mj zsI6QA9Yzg?ymxE)ip=B}DzHEuZ8~IiH%NC2%DgG=f zMn%C3xd*p&M6rDPLXlXW@+NTe_XY}Zd;zZ?!XCUl$(wK)Yk4t06T*MBN!0niMaK}}^B zjiP+4XRf80n;2C{=%H6MfkL|vILY}VBoWs5$wiibSuNi~)4%zU5r$fks} zss?jPW@{$gd(pIY^_;g8NQL6V`Vl77-pW;5Qv)l*ggvC)uqP^M;y5i8)-JK4xm-_J zT={e`!KPrsP(urpx6iQ%@H%5vFFwhBpa}6v(+E17q0vy~SC7-V5Zh?SiFj#Y;Hn7A z_@EvH=X*uZ6RN6df!0O&O$|{!@t)xPUcD{H?afosT33!%3^9a5JK2Z?HwfLWoFIdmF zq{pa5)HHwM{gQO!&ZTSb^d%0H(6;^fyqcSjzD2r3y4lvrV}4O6O}e>y+zL)uoS)ig z>t?d0+xk{DPWF)p)9vDlyGl5Y-Ays@HoD8g3AZioI|MH^xE7w$%J3#P|%;nOvs@y3#k{0!L+a^QS?_C}q%KBd2mR(X9^5-}616reYe?ZbF^8@bF<@CF` zg{u&q6L3N#yk4(qHfa1Hn_2zz)t4kOLwp3@&Fjn&-H2zzDCtu@7hD?`Gm)VRy%w>7 z(j@y*-Q463iF)^|ZCzVdrUGCtI@XDOOP3a|tO$yk17yn5X|bN@aA`^~m7B_gWm;|6 zdI80t<1}xc1QE_4?werOlm%}kS^-dj&)j^vT}yr7_w7ayW4zk$%(@R&qHF2e(6SeJ0&^e<7D)OwEQ2=!28y=yw%}4wWjw<$nN2DQ<^KMDT0UNi%S#BTN4XMWFQH7 z;s$SUgxPt1pwj_r29NhNQI}8M+oY47o*jW!^Zap#HS;YS-4c!cVa%H`Hu%m3o~~al@2Fw$F-ru$UBVcO?<8YDk%l|9RJ1M#I{p=&YES3 z@Cg5f5AL;PKY#AdCNk53L`3?Y2ukfbvs5j7%ZiF5r6+D%o8yw419hVX?!%VS77p6f zfP1}`J&0cxgn2J1g>1`x-oI6R%Q9xmLAU;(K*t%#TZ2BZK!?__C{ugn__ zPKFOC;aA(QOwJrI=-^k;W`qF+z#ovvce-Eyf|CC*0lEnK0oo-+XE*lOW~&S%C*e(o z`7=p@doSecEbgcDnq+``6m0aOrz&6Vrc)@0b}*>gQ*%>R(jFGGdZp3)#Xqo<8nyex zO;s*%8=qe%UWfx{G?6Z&SbfFj(+RhZWg0Cbn-I;#3M97 zZ!qn3U@6X5{ff>?gj?+5-jmbH_ur(*afO+SBBuW&9`-6U84?Cca ztr=>US7Fj59(LQhf``aQ*CCz$Ptv4!<96a5V!yF5(qBFrE}Zyo9C)&h#T$5%d?gjp zZU{B2^NSXE{$Li2P2eWiD$(&*{{#EfKwP^O+Z!BjpKK1MsVX}YGSoHiD_y@}Gv?P9 zx?-sEFvN~3B`G4PoaCo$FOD!vu*`A27(x( zKh^0FLxVU`v8jfmMTJ?=n>ncbTQ1hmTH}r;Czf#XQ{?@nV;vt zh9!rgO39WQPB%VWP+hGJ@vWrnE?N-i^$#nDE}R$55v=?coySz)LS*fRCMjcoi0%yE z-Vs#oSiGROl8AGxnt@yg*gPcJdYbg4I~<`VM)qmDKzle6Z5LY2H-d&F2TUK4yy(vGeKAkcLu2p)bHhS#cKLCx39FFdyv6ZsNZd&i)fPCZ z73!^hzabxG<9!n@kVz3YGpvg}WBjgSze@sPCg}Oa9?_ z`wc$*`W>0$G+1|1`%c_Q$`>*_$r-)YspJ)A-AvFIy)Sd!&yKaInakb9mr zB3E;Mw(+*Cky}YosvuRMRa{N^xBzRZA7M_qTH%u4QOszpg;vG1-R%*Ea>)evDcG1} zlL?}ZN=EVED>(1g-^#+j7l00Hd(Lm)yXkWJwa-6cPHbhMpF~^A84N!Lo zD`l#xI?O5N7Xu!OtbChAPhaR49i>DvWr`C8mauMaD=70;?9^r^^o`c4eT>3q>m3_W z;#_zq>W1t6mq)XGl!n}Idt(a&Ige*1_y^Pu?_}UWKYT89?!G$o7Pm4HI=E^!=85W) z);UI9zxw69-!+BcpyDNWLcOzLW?ZHlXEFy1Ytl>-7vIwPm_i&UmW9)=D;{ul?qaHJ z@y(H9x~<+)EJzFd#E!)t`QUBb+|t-QP@b&9$(N+P+*C2$)idPbcpugs1rjaeU8BG9 z9{N)HXt~jU)XRvw7@%%$vj~lg4yAF}DmauA921`HGgsQ;={Cx|)s6MtnG;4frR$H3 zWUvd<=EVSA1|{JvkA_ILAaAWMkz=>=Aq`6NaU4CP3Tfnlv%Y zZI>ySI=w~4#z72W+6(QitWg_Q$v36Pv*W3KY7EUq?-sUNvOGR-!NI2==z5toqLDaL zePix6mnQj77Uj@CS(M7+#hCeJR{?&g%~NaoQ>h{ahlWQG9LvyKM)LCTxKI;&oF|EI zpF%qRMk^fLx>W7-`&ZiH)r9md^q}~ytjDj?fhdQxa1WGS=is}DOCE0+F!ZzWD*J{R zA)3{CT`)&|Y@}Ed`l_==31`W0>)J3QGdwL3>-}=aoYV@)u)p8eTStzeh|l|HKOSdf z;gmf{=8%R?okkYhq*{~01Ov0sqCTusEOj6RbR`r@ubZ|>Vsu!I{MuoczgclQ#@DOO zp&*MJXu_kD38>i)(EKQO%)GwKW*zR0=pVw|cTAGeX$rHfz4@+k<5KryKBeE|~f;JvlYnmjg zR$*0GaTK+H3r-eoQ1r?FUUAqG5w3E7{n`1W3AKeXHl6D|b4V_D(%V4If`dXZm00rh zP&;?2-0x=SD8uVSGyf1(?vS?pvy{c_AMf?D4RLD)qO;u^z4CHGh8`o7OZtC~(+$}0 zsvjZ}wy~ViJt^eNHz^ZSY}qiBFEsW4&b;FbW1jR?q>u8RF6PDlC~np9FPcNU%PVzX zr>V-RCO95NfK|VQxdW(rz>hqv7EV-mjeI3y;0N7pW4{x_e9N)a*P@bhJUk=5rfLH9 zG|b$m9wBsMA1TGt55vYbi{lQ#VpVNv;GIbHIGn=UMn35&4-HfX)&73KnvDuY)NS*_ zV@AMM+&Hl|+ctw0rvovS!G;o9w^vbE2+DdK;czw(wy6rWC4QBP!~EiGvM#G(kICa@ z*~{r|aRd#%4OoxIZ<|XWOKYRuGJJNH3i7t*s<>6<46*P$a@RFFe#R9<#C>@Kmh@P5PetcR&R1BLoK>-KJQd)`Eq>oI?-I>a7v26M(sDjeK?Y}EFAOW%@VndJ zs~*Q+zNBQ(`}klnY*5iC)2NxD{uJIvm&^h#_uKiNfGs4wQZ`;XsGIq4_p+NwDz7|a=5xtF` z>v7GB+suh76EVF&-q5h0?=Wde?$rKI?s6P)&^4M>nQRsjsKWcMPFGtvr0j0vC_l@Y zN3$l4r)uJ-fM=O+XFQdkKul(KUVVS8@G+>Igqprvpq^I~dW>VjnuO0tgb$4rpNZf& zE@c_Tc1?>>0xq&Li&3~J>+-9w?;6}P+x>jfPx`f4F_*@wsFVU(9oF<4ag}zs^R@Mc zT!gFA5aC3r9t&7vH$5khqV}esA|oBWKATa3gdS6b2c$HMuUwU zqQ&1>Vw>~j?ijhc-iVe&hh|{?YmB1BEj=piptre_jEmnj1vfy?5VUqXlDc~(e~lt= zm+m=pW6=Gh^n*nji8O59zm?oD%iHl|JZRTqyenbx_Gu7)m8&qKGD4{Te@Ibi+MYkdS~Y;j(%;qaqiI8Idtbi8Fna028ltB6w=s;jzrTaTZP5Ln zy(@hO5Uyi-@f(3`!u+vM>U;74v0#tiGXmDLKSeoy|AdD9|0zT{rY>sKzg8MF3~f3Z z9~<}@JY+-o41kOAH$Y;Kiq!MG(6{z}m$oT&{en_PY2%3sw%Pq7+;5$Vzu-Id*I?|Z zu3zu~{hvROS%2TbYkXxrfc}Ryx8Fk!c>SuWvqRL>d?N>zWIg&<-R3W7V8>m#gWsw@ zjm%T|F&=jDY4$%CzhW1A=<_+7nmY0RIkNz}X7!(G|Kb}B`^PaC$Y}!di%i((BET$n zNBop!84&2!piLYd3=0dZqobpbjg9T??I}|8Pm`d-e-ZV6roRglol zfA6o~o13T1z~JnLNV^TubM5QrJvaQT#?YeB>o$4H6qiH(pi_9>A}<&Po^JqIA}X5D zuwikC7AJ#)#-aDXS+f_COa=}&JUu-XfeV+^)zs9qw7S5aW|UBPbL7}D-~}#B3<6Fm zMv`uSflIw&6J-+`3Z?*;jZK(v;lhQ4tx-5dB-sQd(O}O^+o&gmaG&;4(k;R?K^-& z5uoIzcs6URmI#+o608@LpnEZWyIAg@9U6gqfBpQpWd4-JVz!gs*i>!1qA-CmRnu+ z26;&rxX}$1L(ZCifV+km{{LUR+NTr9U<384nHip^&8q(UGCvY1!r { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/blockly/blockly_compressed.js": +/*!****************************************************!*\ + !*** ./node_modules/blockly/blockly_compressed.js ***! + \****************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Do not edit this file; automatically generated.\n\n/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function() {\nvar $={};\nvar register$$module$build$src$core$registry,validate$$module$build$src$core$registry,unregister$$module$build$src$core$registry,getItem$$module$build$src$core$registry,hasItem$$module$build$src$core$registry,getClass$$module$build$src$core$registry,getObject$$module$build$src$core$registry,getAllItems$$module$build$src$core$registry,getClassFromOptions$$module$build$src$core$registry,longStart$$module$build$src$core$touch,longStop$$module$build$src$core$touch,clearTouchIdentifier$$module$build$src$core$touch,\nshouldHandleEvent$$module$build$src$core$touch,getTouchIdentifierFromEvent$$module$build$src$core$touch,checkTouchIdentifier$$module$build$src$core$touch,conditionalBind$$module$build$src$core$browser_events,bind$$module$build$src$core$browser_events,unbind$$module$build$src$core$browser_events,isTargetInput$$module$build$src$core$browser_events,isRightButton$$module$build$src$core$browser_events,mouseToSvg$$module$build$src$core$browser_events,getScrollDeltaPixels$$module$build$src$core$browser_events,\ngetNextUniqueId$$module$build$src$core$utils$idgenerator,genUid$$module$build$src$core$utils$idgenerator,isBlockCreate$$module$build$src$core$events$predicates,isBlockDelete$$module$build$src$core$events$predicates,isBlockChange$$module$build$src$core$events$predicates,isBlockFieldIntermediateChange$$module$build$src$core$events$predicates,isBlockMove$$module$build$src$core$events$predicates,isVarCreate$$module$build$src$core$events$predicates,isVarDelete$$module$build$src$core$events$predicates,\nisVarRename$$module$build$src$core$events$predicates,isBlockDrag$$module$build$src$core$events$predicates,isSelected$$module$build$src$core$events$predicates,isClick$$module$build$src$core$events$predicates,isBubbleOpen$$module$build$src$core$events$predicates,isTrashcanOpen$$module$build$src$core$events$predicates,isToolboxItemSelect$$module$build$src$core$events$predicates,isThemeChange$$module$build$src$core$events$predicates,isViewportChange$$module$build$src$core$events$predicates,isCommentCreate$$module$build$src$core$events$predicates,\nisCommentDelete$$module$build$src$core$events$predicates,isCommentChange$$module$build$src$core$events$predicates,isCommentMove$$module$build$src$core$events$predicates,isCommentResize$$module$build$src$core$events$predicates,isCommentDrag$$module$build$src$core$events$predicates,isCommentCollapse$$module$build$src$core$events$predicates,isFinishedLoading$$module$build$src$core$events$predicates,getRecordUndo$$module$build$src$core$events$utils,fire$$module$build$src$core$events$utils,fireInternal$$module$build$src$core$events$utils,\nfireNow$$module$build$src$core$events$utils,enqueueEvent$$module$build$src$core$events$utils,filter$$module$build$src$core$events$utils,clearPendingUndo$$module$build$src$core$events$utils,isEnabled$$module$build$src$core$events$utils,setGroupInternal$$module$build$src$core$events$utils,getDescendantIds$$module$build$src$core$events$utils,fromJson$$module$build$src$core$events$utils,get$$module$build$src$core$events$utils,disableOrphans$$module$build$src$core$events$utils,createSvgElement$$module$build$src$core$utils$dom,\naddClass$$module$build$src$core$utils$dom,removeClasses$$module$build$src$core$utils$dom,removeClass$$module$build$src$core$utils$dom,hasClass$$module$build$src$core$utils$dom,removeNode$$module$build$src$core$utils$dom,insertAfter$$module$build$src$core$utils$dom,setCssTransform$$module$build$src$core$utils$dom,startTextWidthCache$$module$build$src$core$utils$dom,stopTextWidthCache$$module$build$src$core$utils$dom,getTextWidth$$module$build$src$core$utils$dom,getFastTextWidth$$module$build$src$core$utils$dom,\ngetFastTextWidthWithSizeString$$module$build$src$core$utils$dom,measureFontMetrics$$module$build$src$core$utils$dom,isFocusableNode$$module$build$src$core$interfaces$i_focusable_node,isSelectable$$module$build$src$core$interfaces$i_selectable,deepMerge$$module$build$src$core$utils$object,getWorkspaceById$$module$build$src$core$common,getAllWorkspaces$$module$build$src$core$common,registerWorkspace$$module$build$src$core$common,unregisterWorkpace$$module$build$src$core$common,getMainWorkspace$$module$build$src$core$common,\nsetMainWorkspace$$module$build$src$core$common,getSelected$$module$build$src$core$common,setSelected$$module$build$src$core$common,fireSelectedEvent$$module$build$src$core$common,getParentContainer$$module$build$src$core$common,setParentContainer$$module$build$src$core$common,svgResize$$module$build$src$core$common,getBlockTypeCounts$$module$build$src$core$common,jsonInitFactory$$module$build$src$core$common,defineBlocksWithJsonArray$$module$build$src$core$common,defineBlocksWithJsonArrayInternal$$module$build$src$core$common,\nglobalShortcutHandler$$module$build$src$core$common,removeElem$$module$build$src$core$utils$array,register$$module$build$src$core$css,inject$$module$build$src$core$css,getSize$$module$build$src$core$utils$style,getSizeInternal$$module$build$src$core$utils$style,getSizeWithDisplay$$module$build$src$core$utils$style,getComputedStyle$$module$build$src$core$utils$style,getPageOffset$$module$build$src$core$utils$style,getViewportPageOffset$$module$build$src$core$utils$style,getBorderBox$$module$build$src$core$utils$style,\nscrollIntoContainerView$$module$build$src$core$utils$style,getContainerOffsetToScrollInto$$module$build$src$core$utils$style,getRelativeXY$$module$build$src$core$utils$svg_math,getInjectionDivXY$$module$build$src$core$utils$svg_math,getViewportBBox$$module$build$src$core$utils$svg_math,getDocumentScroll$$module$build$src$core$utils$svg_math,screenToWsCoordinates$$module$build$src$core$utils$svg_math,wsToScreenCoordinates$$module$build$src$core$utils$svg_math,injectDependencies$$module$build$src$core$utils$xml,\ndomToText$$module$build$src$core$utils$xml,sanitizeText$$module$build$src$core$utils$xml,convertToolboxDefToJson$$module$build$src$core$utils$toolbox,validateToolbox$$module$build$src$core$utils$toolbox,convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox,hasCategories$$module$build$src$core$utils$toolbox,hasCategoriesInternal$$module$build$src$core$utils$toolbox,isCategoryCollapsible$$module$build$src$core$utils$toolbox,convertToToolboxJson$$module$build$src$core$utils$toolbox,xmlToJsonArray$$module$build$src$core$utils$toolbox,\naddAttributes$$module$build$src$core$utils$toolbox,parseToolboxTree$$module$build$src$core$utils$toolbox,getStartPositionRect$$module$build$src$core$positionable_helpers,getCornerOppositeToolbox$$module$build$src$core$positionable_helpers,bumpPositionRect$$module$build$src$core$positionable_helpers,register$$module$build$src$core$serialization$registry,unregister$$module$build$src$core$serialization$registry,save$$module$build$src$core$serialization$workspace_comments,append$$module$build$src$core$serialization$workspace_comments,\nregister$$module$build$src$core$clipboard$registry,unregister$$module$build$src$core$clipboard$registry,moveCommentToNotConflict$$module$build$src$core$clipboard$workspace_comment_paster,commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster,setRole$$module$build$src$core$utils$aria,setState$$module$build$src$core$utils$aria,isSerializable$$module$build$src$core$interfaces$i_serializable,queueRender$$module$build$src$core$render_management,finishQueuedRenders$$module$build$src$core$render_management,\ntriggerQueuedRenders$$module$build$src$core$render_management,alwaysImmediatelyRender$$module$build$src$core$render_management,queueBlock$$module$build$src$core$render_management,doRenders$$module$build$src$core$render_management,dequeueBlock$$module$build$src$core$render_management,shouldRenderRootBlock$$module$build$src$core$render_management,renderBlock$$module$build$src$core$render_management,alert$$module$build$src$core$dialog,setAlert$$module$build$src$core$dialog,confirm$$module$build$src$core$dialog,\nsetConfirm$$module$build$src$core$dialog,prompt$$module$build$src$core$dialog,setPrompt$$module$build$src$core$dialog,toast$$module$build$src$core$dialog,setToast$$module$build$src$core$dialog,isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks,isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks,isVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model,warn$$module$build$src$core$utils$deprecation,\ninternalFlyoutCategory$$module$build$src$core$variables,flyoutCategory$$module$build$src$core$variables,generateVariableFieldJson$$module$build$src$core$variables,jsonFlyoutCategoryBlocks$$module$build$src$core$variables,xmlFlyoutCategory$$module$build$src$core$variables,flyoutCategoryBlocks$$module$build$src$core$variables,generateUniqueName$$module$build$src$core$variables,generateUniqueNameInternal$$module$build$src$core$variables,generateUniqueNameFromOptions$$module$build$src$core$variables,\ncreateVariableButtonHandler$$module$build$src$core$variables,promptName$$module$build$src$core$variables,nameUsedWithOtherType$$module$build$src$core$variables,nameUsedWithAnyType$$module$build$src$core$variables,nameUsedWithConflictingParam$$module$build$src$core$variables,checkForConflictingParamWithProcedureModels$$module$build$src$core$variables,checkForConflictingParamWithLegacyProcedures$$module$build$src$core$variables,generateVariableFieldDom$$module$build$src$core$variables,createVariable$$module$build$src$core$variables,\ngetAddedVariables$$module$build$src$core$variables,compareByName$$module$build$src$core$variables,getVariableUsesById$$module$build$src$core$variables,save$$module$build$src$core$serialization$blocks,saveAttributes$$module$build$src$core$serialization$blocks,saveCoords$$module$build$src$core$serialization$blocks,saveExtraState$$module$build$src$core$serialization$blocks,saveIcons$$module$build$src$core$serialization$blocks,saveFields$$module$build$src$core$serialization$blocks,saveInputBlocks$$module$build$src$core$serialization$blocks,\nsaveNextBlocks$$module$build$src$core$serialization$blocks,saveConnection$$module$build$src$core$serialization$blocks,append$$module$build$src$core$serialization$blocks,appendInternal$$module$build$src$core$serialization$blocks,appendPrivate$$module$build$src$core$serialization$blocks,checkNewVariables$$module$build$src$core$serialization$blocks,loadCoords$$module$build$src$core$serialization$blocks,loadAttributes$$module$build$src$core$serialization$blocks,loadExtraState$$module$build$src$core$serialization$blocks,\ntryToConnectParent$$module$build$src$core$serialization$blocks,loadIcons$$module$build$src$core$serialization$blocks,loadFields$$module$build$src$core$serialization$blocks,loadInputBlocks$$module$build$src$core$serialization$blocks,loadNextBlocks$$module$build$src$core$serialization$blocks,loadConnection$$module$build$src$core$serialization$blocks,initBlock$$module$build$src$core$serialization$blocks,hasBubble$$module$build$src$core$interfaces$i_has_bubble,toRadians$$module$build$src$core$utils$math,\ntoDegrees$$module$build$src$core$utils$math,clamp$$module$build$src$core$utils$math,createDom$$module$build$src$core$dropdowndiv,setBoundsElement$$module$build$src$core$dropdowndiv,getOwner$$module$build$src$core$dropdowndiv,getContentDiv$$module$build$src$core$dropdowndiv,clearContent$$module$build$src$core$dropdowndiv,setColour$$module$build$src$core$dropdowndiv,showPositionedByBlock$$module$build$src$core$dropdowndiv,showPositionedByField$$module$build$src$core$dropdowndiv,getScaledBboxOfBlock$$module$build$src$core$dropdowndiv,\ngetScaledBboxOfField$$module$build$src$core$dropdowndiv,showPositionedByRect$$module$build$src$core$dropdowndiv,show$$module$build$src$core$dropdowndiv,getPositionBelowMetrics$$module$build$src$core$dropdowndiv,getPositionAboveMetrics$$module$build$src$core$dropdowndiv,getPositionTopOfPageMetrics$$module$build$src$core$dropdowndiv,getPositionX$$module$build$src$core$dropdowndiv,isVisible$$module$build$src$core$dropdowndiv,hideIfOwner$$module$build$src$core$dropdowndiv,hide$$module$build$src$core$dropdowndiv,\nhideWithoutAnimation$$module$build$src$core$dropdowndiv,positionInternal$$module$build$src$core$dropdowndiv,repositionForWindowResize$$module$build$src$core$dropdowndiv,shortestStringLength$$module$build$src$core$utils$string,commonWordPrefix$$module$build$src$core$utils$string,commonWordSuffix$$module$build$src$core$utils$string,wrapLine$$module$build$src$core$utils$string,wrapScore$$module$build$src$core$utils$string,wrapMutate$$module$build$src$core$utils$string,wrapToText$$module$build$src$core$utils$string,\nsetCustomTooltip$$module$build$src$core$tooltip,getCustomTooltip$$module$build$src$core$tooltip,isVisible$$module$build$src$core$tooltip,getDiv$$module$build$src$core$tooltip,getTooltipOfObject$$module$build$src$core$tooltip,getTargetObject$$module$build$src$core$tooltip,createDom$$module$build$src$core$tooltip,bindMouseEvents$$module$build$src$core$tooltip,unbindMouseEvents$$module$build$src$core$tooltip,onMouseOver$$module$build$src$core$tooltip,onMouseOut$$module$build$src$core$tooltip,onMouseMove$$module$build$src$core$tooltip,\ndispose$$module$build$src$core$tooltip,hide$$module$build$src$core$tooltip,block$$module$build$src$core$tooltip,unblock$$module$build$src$core$tooltip,renderContent$$module$build$src$core$tooltip,renderDefaultContent$$module$build$src$core$tooltip,getPosition$$module$build$src$core$tooltip,show$$module$build$src$core$tooltip,getHsvSaturation$$module$build$src$core$utils$colour,setHsvSaturation$$module$build$src$core$utils$colour,getHsvValue$$module$build$src$core$utils$colour,setHsvValue$$module$build$src$core$utils$colour,\nparse$$module$build$src$core$utils$colour,rgbToHex$$module$build$src$core$utils$colour,hexToRgb$$module$build$src$core$utils$colour,hsvToHex$$module$build$src$core$utils$colour,blend$$module$build$src$core$utils$colour,hueToHex$$module$build$src$core$utils$colour,tokenizeInterpolationInternal$$module$build$src$core$utils$parsing,tokenizeInterpolation$$module$build$src$core$utils$parsing,replaceMessageReferences$$module$build$src$core$utils$parsing,checkMessageReferences$$module$build$src$core$utils$parsing,\nparseBlockColour$$module$build$src$core$utils$parsing,getDiv$$module$build$src$core$widgetdiv,testOnly_setDiv$$module$build$src$core$widgetdiv,createDom$$module$build$src$core$widgetdiv,show$$module$build$src$core$widgetdiv,hide$$module$build$src$core$widgetdiv,isVisible$$module$build$src$core$widgetdiv,hideIfOwner$$module$build$src$core$widgetdiv,hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv,positionInternal$$module$build$src$core$widgetdiv,positionWithAnchor$$module$build$src$core$widgetdiv,\ncalculateX$$module$build$src$core$widgetdiv,calculateY$$module$build$src$core$widgetdiv,isRepositionable$$module$build$src$core$widgetdiv,repositionForWindowResize$$module$build$src$core$widgetdiv,getCurrentBlock$$module$build$src$core$contextmenu,setCurrentBlock$$module$build$src$core$contextmenu,show$$module$build$src$core$contextmenu,populate_$$module$build$src$core$contextmenu,position_$$module$build$src$core$contextmenu,createWidget_$$module$build$src$core$contextmenu,haltPropagation$$module$build$src$core$contextmenu,\nhide$$module$build$src$core$contextmenu,dispose$$module$build$src$core$contextmenu,mouseToWorkspacePoint$$module$build$src$core$utils$drag,start$$module$build$src$core$utils$drag,move$$module$build$src$core$utils$drag,workspaceToDom$$module$build$src$core$xml,saveWorkspaceComment$$module$build$src$core$xml,variablesToDom$$module$build$src$core$xml,blockToDomWithXY$$module$build$src$core$xml,fieldToDom$$module$build$src$core$xml,allFieldsToDom$$module$build$src$core$xml,blockToDom$$module$build$src$core$xml,\ncloneShadow$$module$build$src$core$xml,domToText$$module$build$src$core$xml,domToPrettyText$$module$build$src$core$xml,clearWorkspaceAndLoadFromXml$$module$build$src$core$xml,loadWorkspaceComment$$module$build$src$core$xml,appendDomToWorkspace$$module$build$src$core$xml,domToBlockInternal$$module$build$src$core$xml,domToVariables$$module$build$src$core$xml,mapSupportedXmlTags$$module$build$src$core$xml,applyMutationTagNodes$$module$build$src$core$xml,applyCommentTagNodes$$module$build$src$core$xml,\napplyDataTagNodes$$module$build$src$core$xml,applyFieldTagNodes$$module$build$src$core$xml,findChildBlocks$$module$build$src$core$xml,applyInputTagNodes$$module$build$src$core$xml,applyNextTagNodes$$module$build$src$core$xml,domToBlockHeadless$$module$build$src$core$xml,domToField$$module$build$src$core$xml,deleteNext$$module$build$src$core$xml,isElement$$module$build$src$core$xml,register$$module$build$src$core$field_registry,unregister$$module$build$src$core$field_registry,fromJsonInternal$$module$build$src$core$field_registry,\nisImageProperties$$module$build$src$core$field_dropdown,unregister$$module$build$src$core$extensions,isRegistered$$module$build$src$core$extensions,apply$$module$build$src$core$extensions,checkNoMutatorProperties$$module$build$src$core$extensions,checkXmlHooks$$module$build$src$core$extensions,checkJsonHooks$$module$build$src$core$extensions,checkMutatorDialog$$module$build$src$core$extensions,checkHasFunctionPair$$module$build$src$core$extensions,checkHasMutatorProperties$$module$build$src$core$extensions,\ngetMutatorProperties$$module$build$src$core$extensions,mutatorPropertiesMatch$$module$build$src$core$extensions,runAfterPageLoad$$module$build$src$core$extensions,checkDropdownOptionsInTable$$module$build$src$core$extensions,extensionParentTooltip$$module$build$src$core$extensions,point$$module$build$src$core$utils$svg_paths,curve$$module$build$src$core$utils$svg_paths,moveTo$$module$build$src$core$utils$svg_paths,moveBy$$module$build$src$core$utils$svg_paths,lineTo$$module$build$src$core$utils$svg_paths,\nline$$module$build$src$core$utils$svg_paths,lineOnAxis$$module$build$src$core$utils$svg_paths,arc$$module$build$src$core$utils$svg_paths,connectReciprocally$$module$build$src$core$connection,getSingleConnection$$module$build$src$core$connection,getConnectionForOrphanedOutput$$module$build$src$core$connection,isIcon$$module$build$src$core$interfaces$i_icon,isCommentIcon$$module$build$src$core$interfaces$i_comment_icon,disposeUiEffect$$module$build$src$core$block_animations,disposeUiStep$$module$build$src$core$block_animations,\nconnectionUiEffect$$module$build$src$core$block_animations,disconnectUiEffect$$module$build$src$core$block_animations,disconnectUiStep$$module$build$src$core$block_animations,disconnectUiStop$$module$build$src$core$block_animations,moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster,blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster,blockIsInSnapRadius$$module$build$src$core$clipboard$block_paster,bumpObjectIntoBounds$$module$build$src$core$bump_objects,bumpIntoBoundsHandler$$module$build$src$core$bump_objects,\nextractObjectFromEvent$$module$build$src$core$bump_objects,bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects,isDeletable$$module$build$src$core$interfaces$i_deletable,getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy,navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy,navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy,register$$module$build$src$core$icons$registry,unregister$$module$build$src$core$icons$registry,\nisDraggable$$module$build$src$core$interfaces$i_draggable,isAutoHideable$$module$build$src$core$interfaces$i_autohideable,isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block,isObservable$$module$build$src$core$interfaces$i_observable,allProcedures$$module$build$src$core$procedures,procTupleComparator$$module$build$src$core$procedures,isLegalName$$module$build$src$core$procedures,isNameUsed$$module$build$src$core$procedures,xmlFlyoutCategory$$module$build$src$core$procedures,internalFlyoutCategory$$module$build$src$core$procedures,\nflyoutCategory$$module$build$src$core$procedures,updateMutatorFlyout$$module$build$src$core$procedures,mutatorOpenListener$$module$build$src$core$procedures,mutatorChangeListener$$module$build$src$core$procedures,getCallers$$module$build$src$core$procedures,blockIsModernCallerFor$$module$build$src$core$procedures,isDynamicShape$$module$build$src$core$renderers$common$constants,isPuzzleTab$$module$build$src$core$renderers$common$constants,isNotch$$module$build$src$core$renderers$common$constants,register$$module$build$src$core$renderers$common$block_rendering,\nunregister$$module$build$src$core$renderers$common$block_rendering,init$$module$build$src$core$renderers$common$block_rendering,stringButtonClickHandler$$module$build$src$core$variables_dynamic,numberButtonClickHandler$$module$build$src$core$variables_dynamic,colourButtonClickHandler$$module$build$src$core$variables_dynamic,internalFlyoutCategory$$module$build$src$core$variables_dynamic,flyoutCategory$$module$build$src$core$variables_dynamic,xmlFlyoutCategory$$module$build$src$core$variables_dynamic,\nflyoutCategoryBlocks$$module$build$src$core$variables_dynamic,resizeSvgContents$$module$build$src$core$workspace_svg,copy$$module$build$src$core$clipboard,getLastCopiedData$$module$build$src$core$clipboard,setLastCopiedData$$module$build$src$core$clipboard,getLastCopiedWorkspace$$module$build$src$core$clipboard,setLastCopiedWorkspace$$module$build$src$core$clipboard,getLastCopiedLocation$$module$build$src$core$clipboard,setLastCopiedLocation$$module$build$src$core$clipboard,paste$$module$build$src$core$clipboard,\npasteFromData$$module$build$src$core$clipboard,isCopyable$$module$build$src$core$interfaces$i_copyable,registerEscape$$module$build$src$core$shortcut_items,registerDelete$$module$build$src$core$shortcut_items,isCopyable$$module$build$src$core$shortcut_items,isCuttable$$module$build$src$core$shortcut_items,registerCopy$$module$build$src$core$shortcut_items,registerCut$$module$build$src$core$shortcut_items,registerPaste$$module$build$src$core$shortcut_items,registerUndo$$module$build$src$core$shortcut_items,\nregisterRedo$$module$build$src$core$shortcut_items,registerDefaultShortcuts$$module$build$src$core$shortcut_items,saveProcedure$$module$build$src$core$serialization$procedures,loadProcedure$$module$build$src$core$serialization$procedures,save$$module$build$src$core$serialization$workspaces,load$$module$build$src$core$serialization$workspaces,inject$$module$build$src$core$inject,createDom$$module$build$src$core$inject,createMainWorkspace$$module$build$src$core$inject,init$$module$build$src$core$inject,\nbindDocumentEvents$$module$build$src$core$inject,loadSounds$$module$build$src$core$inject,isFullBlockField$$module$build$src$core$contextmenu_items,registerUndo$$module$build$src$core$contextmenu_items,registerRedo$$module$build$src$core$contextmenu_items,registerCleanup$$module$build$src$core$contextmenu_items,toggleOption_$$module$build$src$core$contextmenu_items,registerCollapse$$module$build$src$core$contextmenu_items,registerExpand$$module$build$src$core$contextmenu_items,addDeletableBlocks_$$module$build$src$core$contextmenu_items,\ngetDeletableBlocks_$$module$build$src$core$contextmenu_items,deleteNext_$$module$build$src$core$contextmenu_items,registerDeleteAll$$module$build$src$core$contextmenu_items,registerWorkspaceOptions_$$module$build$src$core$contextmenu_items,registerDuplicate$$module$build$src$core$contextmenu_items,registerComment$$module$build$src$core$contextmenu_items,registerInline$$module$build$src$core$contextmenu_items,registerCollapseExpandBlock$$module$build$src$core$contextmenu_items,registerDisable$$module$build$src$core$contextmenu_items,\nregisterDelete$$module$build$src$core$contextmenu_items,registerHelp$$module$build$src$core$contextmenu_items,registerCommentDelete$$module$build$src$core$contextmenu_items,registerCommentDuplicate$$module$build$src$core$contextmenu_items,registerCommentCreate$$module$build$src$core$contextmenu_items,registerBlockOptions_$$module$build$src$core$contextmenu_items,registerCommentOptions$$module$build$src$core$contextmenu_items,registerDefaultOptions$$module$build$src$core$contextmenu_items,isPaster$$module$build$src$core$interfaces$i_paster,\nisRenderedElement$$module$build$src$core$interfaces$i_rendered_element,isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item,hideChaff$$module$build$src$core$blockly,isFocusableTree$$module$build$src$core$interfaces$i_focusable_tree,$jscomp;\nregister$$module$build$src$core$registry=function(a,b,c,d){if(!(a instanceof Type$$module$build$src$core$registry)&&typeof a!==\"string\"||`${a}`.trim()===\"\")throw Error('Invalid type \"'+a+'\". The type must be a non-empty string or a Blockly.registry.Type.');a=`${a}`.toLowerCase();if(typeof b!==\"string\"||b.trim()===\"\")throw Error('Invalid name \"'+b+'\". The name must be a non-empty string.');const e=b.toLowerCase();if(!c)throw Error(\"Can not register a null value\");let f=typeMap$$module$build$src$core$registry[a],\ng=nameMap$$module$build$src$core$registry[a];f||(f=typeMap$$module$build$src$core$registry[a]=Object.create(null),g=nameMap$$module$build$src$core$registry[a]=Object.create(null));validate$$module$build$src$core$registry(a,c);if(!d&&f[e]&&f[e]!==c)throw Error('Name \"'+e+'\" with type \"'+a+'\" already registered.');f[e]=c;g[e]=b};\nvalidate$$module$build$src$core$registry=function(a,b){switch(a){case String(Type$$module$build$src$core$registry.FIELD):if(typeof b.fromJson!==\"function\")throw Error('Type \"'+a+'\" must have a fromJson function');}};\nunregister$$module$build$src$core$registry=function(a,b){a=`${a}`.toLowerCase();b=b.toLowerCase();const c=typeMap$$module$build$src$core$registry[a];c&&c[b]?(delete typeMap$$module$build$src$core$registry[a][b],delete nameMap$$module$build$src$core$registry[a][b]):console.warn(\"Unable to unregister [\"+b+\"][\"+a+\"] from the registry.\")};\ngetItem$$module$build$src$core$registry=function(a,b,c){a=`${a}`.toLowerCase();b=b.toLowerCase();const d=typeMap$$module$build$src$core$registry[a];if(!d||!d[b]){b=\"Unable to find [\"+b+\"][\"+a+\"] in the registry.\";if(c)throw Error(b+\" You must require or register a \"+a+\" plugin.\");console.warn(b);return null}return d[b]};hasItem$$module$build$src$core$registry=function(a,b){a=`${a}`.toLowerCase();b=b.toLowerCase();return(a=typeMap$$module$build$src$core$registry[a])?!!a[b]:!1};\ngetClass$$module$build$src$core$registry=function(a,b,c){return getItem$$module$build$src$core$registry(a,b,c)};getObject$$module$build$src$core$registry=function(a,b,c){return getItem$$module$build$src$core$registry(a,b,c)};\ngetAllItems$$module$build$src$core$registry=function(a,b,c){a=`${a}`.toLowerCase();var d=typeMap$$module$build$src$core$registry[a];if(!d){d=`Unable to find [${a}] in the registry.`;if(c)throw Error(`${d} You must require or register a ${a} plugin.`);console.warn(d);return null}if(!b)return d;a=nameMap$$module$build$src$core$registry[a];c=Object.create(null);for(const e of Object.keys(d))c[a[e]]=d[e];return c};\ngetClassFromOptions$$module$build$src$core$registry=function(a,b,c){b=b.plugins[String(a)]||DEFAULT$$module$build$src$core$registry;return typeof b===\"function\"?b:getClass$$module$build$src$core$registry(a,b,c)};longStart$$module$build$src$core$touch=function(a,b){longStop$$module$build$src$core$touch();longPid_$$module$build$src$core$touch=setTimeout(function(){b&&b.handleRightClick(a)},LONGPRESS$$module$build$src$core$touch)};\nlongStop$$module$build$src$core$touch=function(){longPid_$$module$build$src$core$touch&&(clearTimeout(longPid_$$module$build$src$core$touch),longPid_$$module$build$src$core$touch=0)};clearTouchIdentifier$$module$build$src$core$touch=function(){touchIdentifier_$$module$build$src$core$touch=null};shouldHandleEvent$$module$build$src$core$touch=function(a){return!a.type.startsWith(\"pointer\")||a instanceof PointerEvent&&checkTouchIdentifier$$module$build$src$core$touch(a)};\ngetTouchIdentifierFromEvent$$module$build$src$core$touch=function(a){return`${a.pointerId}`};checkTouchIdentifier$$module$build$src$core$touch=function(a){const b=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);return touchIdentifier_$$module$build$src$core$touch?touchIdentifier_$$module$build$src$core$touch===b:a.type===\"pointerdown\"?(touchIdentifier_$$module$build$src$core$touch=b,!0):!1};\nconditionalBind$$module$build$src$core$browser_events=function(a,b,c,d,e){function f(h){if(e||shouldHandleEvent$$module$build$src$core$touch(h))c?d.call(c,h):d(h)}const g=[];if(b in TOUCH_MAP$$module$build$src$core$touch)for(let h=0;h{setTimeout(fireNow$$module$build$src$core$events$utils,0)})}catch(b){setTimeout(fireNow$$module$build$src$core$events$utils,0)}enqueueEvent$$module$build$src$core$events$utils(a)}};\nfireNow$$module$build$src$core$events$utils=function(){const a=filter$$module$build$src$core$events$utils(FIRE_QUEUE$$module$build$src$core$events$utils);FIRE_QUEUE$$module$build$src$core$events$utils.length=0;for(const b of a){if(!b.workspaceId)continue;let c;(c=getWorkspaceById$$module$build$src$core$common(b.workspaceId))==null||c.fireChangeListener(b)}};\nenqueueEvent$$module$build$src$core$events$utils=function(a){if(isBlockChange$$module$build$src$core$events$predicates(a)&&a.element===\"mutation\"){let b;for(b=FIRE_QUEUE$$module$build$src$core$events$utils.length;b>0;b--){const c=FIRE_QUEUE$$module$build$src$core$events$utils[b-1];if(c.group!==a.group||c.workspaceId!==a.workspaceId||!isBlockMove$$module$build$src$core$events$predicates(c)||c.newParentId!==a.blockId)break}FIRE_QUEUE$$module$build$src$core$events$utils.splice(b,0,a)}else FIRE_QUEUE$$module$build$src$core$events$utils.push(a)};\nfilter$$module$build$src$core$events$utils=function(a){const b=[];for(const c of a)if(a=b[b.length-1],!c.isNull())if(a&&a.workspaceId===c.workspaceId&&a.group===c.group)if(isBlockMove$$module$build$src$core$events$predicates(c)&&isBlockMove$$module$build$src$core$events$predicates(a)&&c.blockId===a.blockId){if(a.newParentId=c.newParentId,a.newInputName=c.newInputName,a.newCoordinate=c.newCoordinate,a.reason||c.reason){let d,e;a.reason=Array.from(new Set(((d=a.reason)!=null?d:[]).concat((e=c.reason)!=\nnull?e:[])))}}else isBlockChange$$module$build$src$core$events$predicates(c)&&isBlockChange$$module$build$src$core$events$predicates(a)&&c.blockId===a.blockId&&c.element===a.element&&c.name===a.name?a.newValue=c.newValue:isViewportChange$$module$build$src$core$events$predicates(c)&&isViewportChange$$module$build$src$core$events$predicates(a)?(a.viewTop=c.viewTop,a.viewLeft=c.viewLeft,a.scale=c.scale,a.oldScale=c.oldScale):isClick$$module$build$src$core$events$predicates(c)&&isBubbleOpen$$module$build$src$core$events$predicates(a)||\nb.push(c);else b.push(c);return a=b.filter(c=>!c.isNull())};clearPendingUndo$$module$build$src$core$events$utils=function(){for(let a=0,b;b=FIRE_QUEUE$$module$build$src$core$events$utils[a];a++)b.recordUndo=!1};$.disable$$module$build$src$core$events$utils=function(){disabled$$module$build$src$core$events$utils++};$.enable$$module$build$src$core$events$utils=function(){disabled$$module$build$src$core$events$utils--};\nisEnabled$$module$build$src$core$events$utils=function(){return disabled$$module$build$src$core$events$utils===0};$.getGroup$$module$build$src$core$events$utils=function(){return group$$module$build$src$core$events$utils};$.setGroup$$module$build$src$core$events$utils=function(a){TEST_ONLY$$module$build$src$core$events$utils.setGroupInternal(a)};\nsetGroupInternal$$module$build$src$core$events$utils=function(a){group$$module$build$src$core$events$utils=typeof a===\"boolean\"?a?genUid$$module$build$src$core$utils$idgenerator():\"\":a};getDescendantIds$$module$build$src$core$events$utils=function(a){const b=[];a=a.getDescendants(!1);for(let c=0,d;d=a[c];c++)b[c]=d.id;return b};\nfromJson$$module$build$src$core$events$utils=function(a,b){const c=get$$module$build$src$core$events$utils(a.type);if(!c)throw Error(\"Unknown event type.\");return c.fromJson(a,b)};get$$module$build$src$core$events$utils=function(a){const b=getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,a);if(!b)throw Error(`Event type ${a} not found in registry.`);return b};\ndisableOrphans$$module$build$src$core$events$utils=function(a){if((isBlockMove$$module$build$src$core$events$predicates(a)||isBlockCreate$$module$build$src$core$events$predicates(a))&&a.workspaceId){var b=getWorkspaceById$$module$build$src$core$common(a.workspaceId);if(!a.blockId)throw Error(\"Encountered a blockEvent without a proper blockId\");if(a=b.getBlockById(a.blockId)){const c=recordUndo$$module$build$src$core$events$utils;try{recordUndo$$module$build$src$core$events$utils=!1;const d=a.getParent();\nif(d&&!d.hasDisabledReason(ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils)){const e=a.getDescendants(!1);for(let f=0,g;g=e[f];f++)g.setDisabledReason(!1,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils)}else if((a.outputConnection||a.previousConnection)&&!b.isDragging()){do a.setDisabledReason(!0,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils),a=a.getNextBlock();while(a)}}finally{recordUndo$$module$build$src$core$events$utils=c}}}};\ncreateSvgElement$$module$build$src$core$utils$dom=function(a,b,c){a=document.createElementNS(SVG_NS$$module$build$src$core$utils$dom,`${a}`);for(const d in b)a.setAttribute(d,`${b[d]}`);c&&c.appendChild(a);return a};addClass$$module$build$src$core$utils$dom=function(a,b){b=b.split(\" \");if(b.every(c=>a.classList.contains(c)))return!1;a.classList.add(...b);return!0};removeClasses$$module$build$src$core$utils$dom=function(a,b){a.classList.remove(...b.split(\" \"))};\nremoveClass$$module$build$src$core$utils$dom=function(a,b){b=b.split(\" \");if(b.every(c=>!a.classList.contains(c)))return!1;a.classList.remove(...b);return!0};hasClass$$module$build$src$core$utils$dom=function(a,b){return a.classList.contains(b)};removeNode$$module$build$src$core$utils$dom=function(a){return a&&a.parentNode?a.parentNode.removeChild(a):null};\ninsertAfter$$module$build$src$core$utils$dom=function(a,b){const c=b.nextSibling;b=b.parentNode;if(!b)throw Error(\"Reference node has no parent.\");c?b.insertBefore(a,c):b.appendChild(a)};setCssTransform$$module$build$src$core$utils$dom=function(a,b){a.style.transform=b;a.style[\"-webkit-transform\"]=b};\nstartTextWidthCache$$module$build$src$core$utils$dom=function(){cacheReference$$module$build$src$core$utils$dom++;cacheWidths$$module$build$src$core$utils$dom||(cacheWidths$$module$build$src$core$utils$dom=Object.create(null))};stopTextWidthCache$$module$build$src$core$utils$dom=function(){cacheReference$$module$build$src$core$utils$dom--;cacheReference$$module$build$src$core$utils$dom||(cacheWidths$$module$build$src$core$utils$dom=null)};\ngetTextWidth$$module$build$src$core$utils$dom=function(a){const b=a.textContent+\"\\n\"+a.className.baseVal;var c;if(cacheWidths$$module$build$src$core$utils$dom&&(c=cacheWidths$$module$build$src$core$utils$dom[b]))return c;c=window.getComputedStyle(a);c=getFastTextWidthWithSizeString$$module$build$src$core$utils$dom(a,c.fontSize,c.fontWeight,c.fontFamily);cacheWidths$$module$build$src$core$utils$dom&&(cacheWidths$$module$build$src$core$utils$dom[b]=c);return c};\ngetFastTextWidth$$module$build$src$core$utils$dom=function(a,b,c,d){return getFastTextWidthWithSizeString$$module$build$src$core$utils$dom(a,b+\"pt\",c,d)};\ngetFastTextWidthWithSizeString$$module$build$src$core$utils$dom=function(a,b,c,d){const e=a.textContent;a=e+\"\\n\"+a.className.baseVal;var f;if(cacheWidths$$module$build$src$core$utils$dom&&(f=cacheWidths$$module$build$src$core$utils$dom[a]))return f;canvasContext$$module$build$src$core$utils$dom||(f=document.createElement(\"canvas\"),f.className=\"blocklyComputeCanvas\",document.body.appendChild(f),canvasContext$$module$build$src$core$utils$dom=f.getContext(\"2d\"));e&&canvasContext$$module$build$src$core$utils$dom?\n(canvasContext$$module$build$src$core$utils$dom.font=c+\" \"+b+\" \"+d,f=canvasContext$$module$build$src$core$utils$dom.measureText(e).width):f=0;cacheWidths$$module$build$src$core$utils$dom&&(cacheWidths$$module$build$src$core$utils$dom[a]=f);return f};\nmeasureFontMetrics$$module$build$src$core$utils$dom=function(a,b,c,d){const e=document.createElement(\"span\");e.style.font=c+\" \"+b+\" \"+d;e.textContent=a;a=document.createElement(\"div\");a.style.width=\"1px\";a.style.height=\"0\";b=document.createElement(\"div\");b.style.display=\"flex\";b.style.position=\"fixed\";b.style.top=\"0\";b.style.left=\"0\";b.appendChild(e);b.appendChild(a);document.body.appendChild(b);c={height:0,baseline:0};try{b.style.alignItems=\"baseline\",c.baseline=a.offsetTop-e.offsetTop,b.style.alignItems=\n\"flex-end\",c.height=a.offsetTop-e.offsetTop}finally{document.body.removeChild(b)}return c};$.getFocusManager$$module$build$src$core$focus_manager=function(){return FocusManager$$module$build$src$core$focus_manager.getFocusManager()};isFocusableNode$$module$build$src$core$interfaces$i_focusable_node=function(a){return a&&typeof a.getFocusableElement===\"function\"&&typeof a.getFocusableTree===\"function\"&&typeof a.onNodeFocus===\"function\"&&typeof a.onNodeBlur===\"function\"&&typeof a.canBeFocused===\"function\"};\nisSelectable$$module$build$src$core$interfaces$i_selectable=function(a){return isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(a)&&typeof a.id===\"string\"&&typeof a.workspace===\"object\"&&typeof a.select===\"function\"&&typeof a.unselect===\"function\"};\ndeepMerge$$module$build$src$core$utils$object=function(a,b){for(const c in b)b[c]!==null&&Array.isArray(b[c])?a[c]=deepMerge$$module$build$src$core$utils$object(a[c]||[],b[c]):a[c]=b[c]!==null&&typeof b[c]===\"object\"?deepMerge$$module$build$src$core$utils$object(a[c]||Object.create(null),b[c]):b[c];return a};getWorkspaceById$$module$build$src$core$common=function(a){return WorkspaceDB_$$module$build$src$core$common[a]||null};\ngetAllWorkspaces$$module$build$src$core$common=function(){const a=[];for(const b in WorkspaceDB_$$module$build$src$core$common)a.push(WorkspaceDB_$$module$build$src$core$common[b]);return a};registerWorkspace$$module$build$src$core$common=function(a){WorkspaceDB_$$module$build$src$core$common[a.id]=a};unregisterWorkpace$$module$build$src$core$common=function(a){delete WorkspaceDB_$$module$build$src$core$common[a.id]};getMainWorkspace$$module$build$src$core$common=function(){return mainWorkspace$$module$build$src$core$common};\nsetMainWorkspace$$module$build$src$core$common=function(a){mainWorkspace$$module$build$src$core$common=a};getSelected$$module$build$src$core$common=function(){const a=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode();return a&&isSelectable$$module$build$src$core$interfaces$i_selectable(a)?a:null};setSelected$$module$build$src$core$common=function(a){$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)};\nfireSelectedEvent$$module$build$src$core$common=function(a){const b=getSelected$$module$build$src$core$common();let c,d,e,f;const g=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.SELECTED))((c=b==null?void 0:b.id)!=null?c:null,(d=a==null?void 0:a.id)!=null?d:null,(f=(e=a==null?void 0:a.workspace.id)!=null?e:b==null?void 0:b.workspace.id)!=null?f:\"\");fire$$module$build$src$core$events$utils(g)};getParentContainer$$module$build$src$core$common=function(){return parentContainer$$module$build$src$core$common};\nsetParentContainer$$module$build$src$core$common=function(a){parentContainer$$module$build$src$core$common=a};\nsvgResize$$module$build$src$core$common=function(a){for(;a.options.parentWorkspace;)a=a.options.parentWorkspace;const b=a.getParentSvg(),c=a.getCachedParentSvgSize();var d=b.parentElement;if(d instanceof HTMLElement){var e=d.offsetWidth;d=d.offsetHeight;c.width!==e&&(b.setAttribute(\"width\",e+\"px\"),a.setCachedParentSvgSize(e,null));c.height!==d&&(b.setAttribute(\"height\",d+\"px\"),a.setCachedParentSvgSize(null,d));a.resize()}};\ngetBlockTypeCounts$$module$build$src$core$common=function(a,b){const c=Object.create(null),d=a.getDescendants(!0);b&&(a=a.getNextBlock())&&(a=d.indexOf(a),d.splice(a,d.length-a));for(let e=0,f;f=d[e];e++)c[f.type]?c[f.type]++:c[f.type]=1;return c};jsonInitFactory$$module$build$src$core$common=function(a){return function(){this.jsonInit(a)}};defineBlocksWithJsonArray$$module$build$src$core$common=function(a){TEST_ONLY$$module$build$src$core$common.defineBlocksWithJsonArrayInternal(a)};\ndefineBlocksWithJsonArrayInternal$$module$build$src$core$common=function(a){$.defineBlocks$$module$build$src$core$common($.createBlockDefinitionsFromJsonArray$$module$build$src$core$common(a))};\n$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common=function(a){const b={};for(let c=0;c>>/g,a),content$$module$build$src$core$css=\"\",a=document.createElement(\"style\"),a.id=\"blockly-common-style\",b=document.createTextNode(b),a.appendChild(b),document.head.insertBefore(a,document.head.firstChild)))};getSize$$module$build$src$core$utils$style=function(a){return TEST_ONLY$$module$build$src$core$utils$style.getSizeInternal(a)};\ngetSizeInternal$$module$build$src$core$utils$style=function(a){if(getComputedStyle$$module$build$src$core$utils$style(a,\"display\")!==\"none\")return getSizeWithDisplay$$module$build$src$core$utils$style(a);const b=a.style,c=b.display,d=b.visibility,e=b.position;b.visibility=\"hidden\";b.position=\"absolute\";b.display=\"inline\";const f=a.offsetWidth;a=a.offsetHeight;b.display=c;b.position=e;b.visibility=d;return new Size$$module$build$src$core$utils$size(f,a)};\ngetSizeWithDisplay$$module$build$src$core$utils$style=function(a){return new Size$$module$build$src$core$utils$size(a.offsetWidth,a.offsetHeight)};getComputedStyle$$module$build$src$core$utils$style=function(a,b){a=window.getComputedStyle(a);return a[b]||a.getPropertyValue(b)};\ngetPageOffset$$module$build$src$core$utils$style=function(a){const b=new Coordinate$$module$build$src$core$utils$coordinate(0,0);a=a.getBoundingClientRect();var c=document.documentElement;c=new Coordinate$$module$build$src$core$utils$coordinate(window.pageXOffset||c.scrollLeft,window.pageYOffset||c.scrollTop);b.x=a.left+c.x;b.y=a.top+c.y;return b};\ngetViewportPageOffset$$module$build$src$core$utils$style=function(){const a=document.body,b=document.documentElement;return new Coordinate$$module$build$src$core$utils$coordinate(a.scrollLeft||b.scrollLeft,a.scrollTop||b.scrollTop)};\ngetBorderBox$$module$build$src$core$utils$style=function(a){const b=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderLeftWidth\")),c=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderRightWidth\")),d=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderTopWidth\"));a=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderBottomWidth\"));return new Rect$$module$build$src$core$utils$rect(d,a,b,c)};\nscrollIntoContainerView$$module$build$src$core$utils$style=function(a,b,c){a=getContainerOffsetToScrollInto$$module$build$src$core$utils$style(a,b,c);b.scrollLeft=a.x;b.scrollTop=a.y};\ngetContainerOffsetToScrollInto$$module$build$src$core$utils$style=function(a,b,c){var d=getPageOffset$$module$build$src$core$utils$style(a),e=getPageOffset$$module$build$src$core$utils$style(b),f=getBorderBox$$module$build$src$core$utils$style(b);const g=d.x-e.x-f.left;d=d.y-e.y-f.top;e=getSizeWithDisplay$$module$build$src$core$utils$style(a);a=b.clientWidth-e.width;e=b.clientHeight-e.height;f=b.scrollLeft;b=b.scrollTop;c?(f+=g-a/2,b+=d-e/2):(f+=Math.min(g,Math.max(g-a,0)),b+=Math.min(d,Math.max(d-\ne,0)));return new Coordinate$$module$build$src$core$utils$coordinate(f,b)};\ngetRelativeXY$$module$build$src$core$utils$svg_math=function(a){const b=new Coordinate$$module$build$src$core$utils$coordinate(0,0);var c=a.x&&a.getAttribute(\"x\");const d=a.y&&a.getAttribute(\"y\");c&&(b.x=parseInt(c));d&&(b.y=parseInt(d));if(c=(c=a.getAttribute(\"transform\"))&&c.match(XY_REGEX$$module$build$src$core$utils$svg_math))b.x+=Number(c[1]),c[3]&&(b.y+=Number(c[3]));(a=a.getAttribute(\"style\"))&&a.includes(\"translate\")&&(a=a.match(XY_STYLE_REGEX$$module$build$src$core$utils$svg_math))&&(b.x+=\nNumber(a[1]),a[3]&&(b.y+=Number(a[3])));return b};getInjectionDivXY$$module$build$src$core$utils$svg_math=function(a){let b=0,c=0;for(;a;){const d=getRelativeXY$$module$build$src$core$utils$svg_math(a);b+=d.x;c+=d.y;if((\" \"+(a.getAttribute(\"class\")||\"\")+\" \").includes(\" injectionDiv \"))break;a=a.parentNode}return new Coordinate$$module$build$src$core$utils$coordinate(b,c)};\ngetViewportBBox$$module$build$src$core$utils$svg_math=function(){const a=getViewportPageOffset$$module$build$src$core$utils$style();return new Rect$$module$build$src$core$utils$rect(a.y,document.documentElement.clientHeight+a.y,a.x,document.documentElement.clientWidth+a.x)};getDocumentScroll$$module$build$src$core$utils$svg_math=function(){const a=document.documentElement,b=window;return new Coordinate$$module$build$src$core$utils$coordinate(b.pageXOffset||a.scrollLeft,b.pageYOffset||a.scrollTop)};\nscreenToWsCoordinates$$module$build$src$core$utils$svg_math=function(a,b){var c=b.x;b=b.y;const d=a.getInjectionDiv().getBoundingClientRect();c=new Coordinate$$module$build$src$core$utils$coordinate(c-d.left,b-d.top);b=a.getOriginOffsetInPixels();return Coordinate$$module$build$src$core$utils$coordinate.difference(c,b).scale(1/a.scale)};\nwsToScreenCoordinates$$module$build$src$core$utils$svg_math=function(a,b){var c=b.scale(a.scale);b=c.x;c=c.y;const d=a.getInjectionDiv().getBoundingClientRect();a=a.getOriginOffsetInPixels();return new Coordinate$$module$build$src$core$utils$coordinate(b+d.left+a.x,c+d.top+a.y)};\ninjectDependencies$$module$build$src$core$utils$xml=function(a){({document:document$$module$build$src$core$utils$xml=document$$module$build$src$core$utils$xml,DOMParser:DOMParser$$module$build$src$core$utils$xml=DOMParser$$module$build$src$core$utils$xml,XMLSerializer:XMLSerializer$$module$build$src$core$utils$xml=XMLSerializer$$module$build$src$core$utils$xml}=a);domParser$$module$build$src$core$utils$xml=new DOMParser$$module$build$src$core$utils$xml;xmlSerializer$$module$build$src$core$utils$xml=\nnew XMLSerializer$$module$build$src$core$utils$xml};$.createElement$$module$build$src$core$utils$xml=function(a){return document$$module$build$src$core$utils$xml.createElementNS(NAME_SPACE$$module$build$src$core$utils$xml,a)};$.createTextNode$$module$build$src$core$utils$xml=function(a){return document$$module$build$src$core$utils$xml.createTextNode(a)};\n$.textToDom$$module$build$src$core$utils$xml=function(a){let b=domParser$$module$build$src$core$utils$xml.parseFromString(a,\"text/xml\");if(b&&b.documentElement&&!b.getElementsByTagName(\"parsererror\").length)return b.documentElement;if((b=domParser$$module$build$src$core$utils$xml.parseFromString(a,\"text/html\"))&&b.body.firstChild&&b.body.firstChild.nodeName.toLowerCase()===\"xml\")return b.body.firstChild;throw Error(`DOMParser was unable to parse: ${a}`);};\ndomToText$$module$build$src$core$utils$xml=function(a){return sanitizeText$$module$build$src$core$utils$xml(xmlSerializer$$module$build$src$core$utils$xml.serializeToString(a))};sanitizeText$$module$build$src$core$utils$xml=function(a){return a.replace(INVALID_CONTROL_CHARS$$module$build$src$core$utils$xml,b=>`&#${b.charCodeAt(0)};`)};\nconvertToolboxDefToJson$$module$build$src$core$utils$toolbox=function(a){if(!a)return null;if(a instanceof Element||typeof a===\"string\")a=parseToolboxTree$$module$build$src$core$utils$toolbox(a),a=convertToToolboxJson$$module$build$src$core$utils$toolbox(a);validateToolbox$$module$build$src$core$utils$toolbox(a);return a};\nvalidateToolbox$$module$build$src$core$utils$toolbox=function(a){const b=a.kind;a=a.contents;if(b&&b!==FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox&&b!==CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox)throw Error(\"Invalid toolbox kind \"+b+\". Please supply either \"+FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox+\" or \"+CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox);if(!a)throw Error(\"Toolbox must have a contents attribute.\");};\nconvertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox=function(a){return a?a.contents?a.contents:Array.isArray(a)&&a.length>0&&!a[0].nodeType?a:xmlToJsonArray$$module$build$src$core$utils$toolbox(a):[]};hasCategories$$module$build$src$core$utils$toolbox=function(a){return TEST_ONLY$$module$build$src$core$utils$toolbox.hasCategoriesInternal(a)};\nhasCategoriesInternal$$module$build$src$core$utils$toolbox=function(a){if(!a)return!1;const b=a.kind;return b?b===CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox:!!a.contents.filter(c=>c.kind.toUpperCase()===\"CATEGORY\").length};isCategoryCollapsible$$module$build$src$core$utils$toolbox=function(a){return a&&a.contents?!!a.contents.filter(function(b){return b.kind.toUpperCase()===\"CATEGORY\"}).length:!1};\nconvertToToolboxJson$$module$build$src$core$utils$toolbox=function(a){const b={contents:xmlToJsonArray$$module$build$src$core$utils$toolbox(a)};a instanceof Node&&addAttributes$$module$build$src$core$utils$toolbox(a,b);return b};\nxmlToJsonArray$$module$build$src$core$utils$toolbox=function(a){const b=[];let c=a.childNodes;c||(c=a);for(let d=0,e;e=c[d];d++){if(!e.tagName)continue;a={};const f=e.tagName.toUpperCase();a.kind=f;f===\"BLOCK\"?a.blockxml=e:e.childNodes&&e.childNodes.length>0&&(a.contents=xmlToJsonArray$$module$build$src$core$utils$toolbox(e));addAttributes$$module$build$src$core$utils$toolbox(e,a);b.push(a)}return b};\naddAttributes$$module$build$src$core$utils$toolbox=function(a,b){for(let c=0;c document.\");}else a instanceof Element&&(b=a);return b};\ngetStartPositionRect$$module$build$src$core$positionable_helpers=function(a,b,c,d,e,f){const g=f.scrollbar&&f.scrollbar.canScrollVertically();a.horizontal===horizontalPosition$$module$build$src$core$positionable_helpers.LEFT?(c=e.absoluteMetrics.left+c,g&&f.RTL&&(c+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness)):(c=e.absoluteMetrics.left+e.viewMetrics.width-b.width-c,g&&!f.RTL&&(c-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness));a.vertical===verticalPosition$$module$build$src$core$positionable_helpers.TOP?\na=e.absoluteMetrics.top+d:(a=e.absoluteMetrics.top+e.viewMetrics.height-b.height-d,f.scrollbar&&f.scrollbar.canScrollHorizontally()&&(a-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness));return new Rect$$module$build$src$core$utils$rect(a,a+b.height,c,c+b.width)};\ngetCornerOppositeToolbox$$module$build$src$core$positionable_helpers=function(a,b){return{horizontal:b.toolboxMetrics.position===Position$$module$build$src$core$utils$toolbox.LEFT||a.horizontalLayout&&!a.RTL?horizontalPosition$$module$build$src$core$positionable_helpers.RIGHT:horizontalPosition$$module$build$src$core$positionable_helpers.LEFT,vertical:b.toolboxMetrics.position===Position$$module$build$src$core$utils$toolbox.BOTTOM?verticalPosition$$module$build$src$core$positionable_helpers.TOP:verticalPosition$$module$build$src$core$positionable_helpers.BOTTOM}};\nbumpPositionRect$$module$build$src$core$positionable_helpers=function(a,b,c,d){const e=a.left,f=a.right-a.left,g=a.bottom-a.top;for(let h=0;hf.id!==a.id).map(f=>f.getRelativeToSurfaceXY());for(;commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster(Coordinate$$module$build$src$core$utils$coordinate.sum(c,d),e);)d.translate(b.RTL?-30:30,30);a.moveTo(Coordinate$$module$build$src$core$utils$coordinate.sum(c,\nd))};commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster=function(a,b){return b.some(c=>Math.abs(c.x-a.x)<=1&&Math.abs(c.y-a.y)<=1)};setRole$$module$build$src$core$utils$aria=function(a,b){a.setAttribute(ROLE_ATTRIBUTE$$module$build$src$core$utils$aria,b)};setState$$module$build$src$core$utils$aria=function(a,b,c){Array.isArray(c)&&(c=c.join(\" \"));a.setAttribute(ARIA_PREFIX$$module$build$src$core$utils$aria+b,`${c}`)};\nisSerializable$$module$build$src$core$interfaces$i_serializable=function(a){return a&&typeof a.saveState===\"function\"&&typeof a.loadState===\"function\"};\nqueueRender$$module$build$src$core$render_management=function(a){queueBlock$$module$build$src$core$render_management(a);if(alwaysImmediatelyRender$$module$build$src$core$render_management())return doRenders$$module$build$src$core$render_management(),Promise.resolve();afterRendersPromise$$module$build$src$core$render_management||(afterRendersPromise$$module$build$src$core$render_management=new Promise(b=>{afterRendersResolver$$module$build$src$core$render_management=b;animationRequestId$$module$build$src$core$render_management=\nwindow.requestAnimationFrame(()=>{doRenders$$module$build$src$core$render_management();b()})}));return afterRendersPromise$$module$build$src$core$render_management};finishQueuedRenders$$module$build$src$core$render_management=function(){return afterRendersPromise$$module$build$src$core$render_management?afterRendersPromise$$module$build$src$core$render_management:Promise.resolve()};\ntriggerQueuedRenders$$module$build$src$core$render_management=function(a){a||window.cancelAnimationFrame(animationRequestId$$module$build$src$core$render_management);doRenders$$module$build$src$core$render_management(a);!a&&afterRendersResolver$$module$build$src$core$render_management&&afterRendersResolver$$module$build$src$core$render_management()};alwaysImmediatelyRender$$module$build$src$core$render_management=function(){return JavaFx$$module$build$src$core$utils$useragent};\nqueueBlock$$module$build$src$core$render_management=function(a){dirtyBlocks$$module$build$src$core$render_management.add(a);eventGroups$$module$build$src$core$render_management.set(a,$.getGroup$$module$build$src$core$events$utils());const b=a.getParent();b?queueBlock$$module$build$src$core$render_management(b):rootBlocks$$module$build$src$core$render_management.add(a)};\ndoRenders$$module$build$src$core$render_management=function(a){const b=a?new Set([a]):new Set([...rootBlocks$$module$build$src$core$render_management].map(f=>f.workspace)),c=[...rootBlocks$$module$build$src$core$render_management].filter(shouldRenderRootBlock$$module$build$src$core$render_management).filter(f=>b.has(f.workspace));for(var d of c)renderBlock$$module$build$src$core$render_management(d);for(const f of b)f.resizeContents();for(var e of c)d=e.getRelativeToSurfaceXY(),e.updateComponentLocations(d);\nfor(const f of c)e=$.getGroup$$module$build$src$core$events$utils(),(d=eventGroups$$module$build$src$core$render_management.get(f))&&$.setGroup$$module$build$src$core$events$utils(d),f.bumpNeighbours(),$.setGroup$$module$build$src$core$events$utils(e);for(const f of c)dequeueBlock$$module$build$src$core$render_management(f);a||(afterRendersPromise$$module$build$src$core$render_management=null)};\ndequeueBlock$$module$build$src$core$render_management=function(a){rootBlocks$$module$build$src$core$render_management.delete(a);dirtyBlocks$$module$build$src$core$render_management.delete(a);eventGroups$$module$build$src$core$render_management.delete(a);for(const b of a.getChildren(!1))dequeueBlock$$module$build$src$core$render_management(b)};shouldRenderRootBlock$$module$build$src$core$render_management=function(a){return!a.isDisposed()&&!a.getParent()};\nrenderBlock$$module$build$src$core$render_management=function(a){if(dirtyBlocks$$module$build$src$core$render_management.has(a)&&a.initialized){for(const b of a.getChildren(!1))renderBlock$$module$build$src$core$render_management(b);a.renderEfficiently()}};alert$$module$build$src$core$dialog=function(a,b){alertImplementation$$module$build$src$core$dialog(a,b)};\nsetAlert$$module$build$src$core$dialog=function(a=defaultAlert$$module$build$src$core$dialog){alertImplementation$$module$build$src$core$dialog=a};confirm$$module$build$src$core$dialog=function(a,b){confirmImplementation$$module$build$src$core$dialog(a,b)};setConfirm$$module$build$src$core$dialog=function(a=defaultConfirm$$module$build$src$core$dialog){confirmImplementation$$module$build$src$core$dialog=a};\nprompt$$module$build$src$core$dialog=function(a,b,c){promptImplementation$$module$build$src$core$dialog(a,b,c)};setPrompt$$module$build$src$core$dialog=function(a=defaultPrompt$$module$build$src$core$dialog){promptImplementation$$module$build$src$core$dialog=a};toast$$module$build$src$core$dialog=function(a,b){toastImplementation$$module$build$src$core$dialog(a,b)};\nsetToast$$module$build$src$core$dialog=function(a=defaultToast$$module$build$src$core$dialog){toastImplementation$$module$build$src$core$dialog=a};isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks=function(a){return a&&typeof a.getProcedureDef===\"function\"};isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks=function(a){return a&&typeof a.getProcedureCall===\"function\"&&typeof a.renameProcedure===\"function\"};\nisVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model=function(a){return a.getVariableModel!==void 0};warn$$module$build$src$core$utils$deprecation=function(a,b,c,d){a=a+\" was deprecated in \"+b+\" and will be deleted in \"+c+\".\";d&&(a+=\"\\nUse \"+d+\" instead.\");previousWarnings$$module$build$src$core$utils$deprecation.has(a)||(previousWarnings$$module$build$src$core$utils$deprecation.add(a),console.warn(a))};\n$.allUsedVarModels$$module$build$src$core$variables=function(a){a=a.getAllBlocks(!1);const b=new Set;for(let c=0;c({kind:\"block\",type:d,gap:8,fields:generateVariableFieldJson$$module$build$src$core$variables(g)})));return a};\nxmlFlyoutCategory$$module$build$src$core$variables=function(a){let b=[];const c=document.createElement(\"button\");c.setAttribute(\"text\",\"%{BKY_NEW_VARIABLE}\");c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE\");a.registerButtonCallback(\"CREATE_VARIABLE\",function(d){createVariableButtonHandler$$module$build$src$core$variables(d.getTargetWorkspace())});b.push(c);a=flyoutCategoryBlocks$$module$build$src$core$variables(a);return b=b.concat(a)};\nflyoutCategoryBlocks$$module$build$src$core$variables=function(a){a=a.getVariableMap().getVariablesOfType(\"\");const b=[];if(a.length>0){var c=a[a.length-1];if(Blocks$$module$build$src$core$blocks.variables_set){var d=$.createElement$$module$build$src$core$utils$xml(\"block\");d.setAttribute(\"type\",\"variables_set\");d.setAttribute(\"gap\",Blocks$$module$build$src$core$blocks.math_change?\"8\":\"24\");d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c));b.push(d)}Blocks$$module$build$src$core$blocks.math_change&&\n(d=$.createElement$$module$build$src$core$utils$xml(\"block\"),d.setAttribute(\"type\",\"math_change\"),d.setAttribute(\"gap\",Blocks$$module$build$src$core$blocks.variables_get?\"20\":\"8\"),d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c)),c=$.textToDom$$module$build$src$core$utils$xml('1'),d.appendChild(c),b.push(d));if(Blocks$$module$build$src$core$blocks.variables_get){a.sort(compareByName$$module$build$src$core$variables);\nfor(let e=0,f;f=a[e];e++)c=$.createElement$$module$build$src$core$utils$xml(\"block\"),c.setAttribute(\"type\",\"variables_get\"),c.setAttribute(\"gap\",\"8\"),c.appendChild(generateVariableFieldDom$$module$build$src$core$variables(f)),b.push(c)}}return b};generateUniqueName$$module$build$src$core$variables=function(a){return TEST_ONLY$$module$build$src$core$variables.generateUniqueNameInternal(a)};\ngenerateUniqueNameInternal$$module$build$src$core$variables=function(a){return generateUniqueNameFromOptions$$module$build$src$core$variables(VAR_LETTER_OPTIONS$$module$build$src$core$variables.charAt(0),a.getVariableMap().getAllVariables().map(b=>b.getName()))};\ngenerateUniqueNameFromOptions$$module$build$src$core$variables=function(a,b){if(!b.length)return a;const c=VAR_LETTER_OPTIONS$$module$build$src$core$variables;let d=\"\",e=c.indexOf(a);for(;;){let f=!1;for(let g=0;gf.getVariableModel().getName());if(d&&(c=d.some(f=>f.toLowerCase()===a),d=d.some(f=>f.toLowerCase()===b),c&&d))return e.getName()}return null};\ncheckForConflictingParamWithLegacyProcedures$$module$build$src$core$variables=function(a,b,c){a=a.toLowerCase();b=b.toLowerCase();c=c.getAllBlocks(!1);for(const e of c){if(!isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(e))continue;c=e.getProcedureDef();var d=c[1];const f=d.some(g=>g.toLowerCase()===a);d=d.some(g=>g.toLowerCase()===b);if(f&&d)return c[0]}return null};\ngenerateVariableFieldDom$$module$build$src$core$variables=function(a){const b=$.createElement$$module$build$src$core$utils$xml(\"field\");b.setAttribute(\"name\",\"VAR\");b.setAttribute(\"id\",a.getId());b.setAttribute(\"variabletype\",a.getType());a=$.createTextNode$$module$build$src$core$utils$xml(a.getName());b.appendChild(a);return b};\n$.getOrCreateVariablePackage$$module$build$src$core$variables=function(a,b,c,d){let e=$.getVariable$$module$build$src$core$variables(a,b,c,d);e||(e=createVariable$$module$build$src$core$variables(a,b,c,d));return e};\n$.getVariable$$module$build$src$core$variables=function(a,b,c,d){const e=a.getPotentialVariableMap();let f=null;if(b&&(f=a.getVariableById(b),!f&&e&&(f=e.getVariableById(b)),f))return f;if(c){if(d===void 0)throw Error(\"Tried to look up a variable by name without a type\");f=a.getVariable(c,d);!f&&e&&(f=e.getVariable(c,d))}return f};\ncreateVariable$$module$build$src$core$variables=function(a,b,c,d){const e=a.getVariableMap(),f=a.getPotentialVariableMap();c||(c=generateUniqueName$$module$build$src$core$variables(a.isFlyout?a.targetWorkspace:a));return f?f.createVariable(c,d,b!=null?b:void 0):e.createVariable(c,d,b)};getAddedVariables$$module$build$src$core$variables=function(a,b){a=a.getAllVariables();const c=[];if(b.length!==a.length)for(let d=0;d=0;f--){const g=e[f];if(g.type===\"procedures_defnoreturn\"||g.type===\"procedures_defreturn\"){c=String(g.getFieldValue(\"NAME\"));d=$.Msg$$module$build$src$core$msg.CANNOT_DELETE_VARIABLE_PROCEDURE.replace(\"%1\",d).replace(\"%2\",c);alert$$module$build$src$core$dialog(d);return}g===c&&e.splice(f,1)}c&&e.length||e.length>1?(d=\n$.Msg$$module$build$src$core$msg.DELETE_VARIABLE_CONFIRMATION.replace(\"%1\",String(e.length+(c&&!c.workspace.isFlyout?1:0))).replace(\"%2\",d),confirm$$module$build$src$core$dialog(d,f=>{f&&b&&a.getVariableMap().deleteVariable(b)})):a.getVariableMap().deleteVariable(b)};\nsave$$module$build$src$core$serialization$blocks=function(a,{addCoordinates:b=!1,addInputBlocks:c=!0,addNextBlocks:d=!0,doFullSerialization:e=!0,saveIds:f=!0}={}){if(a.isInsertionMarker())return null;const g={type:a.type,id:f?a.id:void 0};b&&saveCoords$$module$build$src$core$serialization$blocks(a,g);saveAttributes$$module$build$src$core$serialization$blocks(a,g);saveExtraState$$module$build$src$core$serialization$blocks(a,g,e);saveIcons$$module$build$src$core$serialization$blocks(a,g,e);saveFields$$module$build$src$core$serialization$blocks(a,\ng,e);c&&saveInputBlocks$$module$build$src$core$serialization$blocks(a,g,e,f);d&&saveNextBlocks$$module$build$src$core$serialization$blocks(a,g,e,f);return g};\nsaveAttributes$$module$build$src$core$serialization$blocks=function(a,b){a.isCollapsed()&&(b.collapsed=!0);a.isEnabled()||(b.disabledReasons=Array.from(a.getDisabledReasons()));a.isOwnDeletable()||(b.deletable=!1);a.isOwnMovable()||(b.movable=!1);a.isOwnEditable()||(b.editable=!1);a.inputsInline!==void 0&&a.inputsInline!==a.inputsInlineDefault&&(b.inline=a.inputsInline);a.data&&(b.data=a.data)};\nsaveCoords$$module$build$src$core$serialization$blocks=function(a,b){const c=a.workspace;a=a.getRelativeToSurfaceXY();b.x=Math.round(c.RTL?c.getWidth()-a.x:a.x);b.y=Math.round(a.y)};saveExtraState$$module$build$src$core$serialization$blocks=function(a,b,c){a.saveExtraState?(a=a.saveExtraState(c),a!==null&&(b.extraState=a)):a.mutationToDom&&(a=a.mutationToDom(),a!==null&&(b.extraState=domToText$$module$build$src$core$xml(a).replace(' xmlns=\"https://developers.google.com/blockly/xml\"',\"\")))};\nsaveIcons$$module$build$src$core$serialization$blocks=function(a,b,c){const d=Object.create(null);for(const e of a.getIcons())isSerializable$$module$build$src$core$interfaces$i_serializable(e)&&(a=e.saveState(c))&&(d[e.getType().toString()]=a);Object.keys(d).length&&(b.icons=d)};saveFields$$module$build$src$core$serialization$blocks=function(a,b,c){const d=Object.create(null);for(const e of a.getFields())e.isSerializable()&&(d[e.name]=e.saveState(c));Object.keys(d).length&&(b.fields=d)};\nsaveInputBlocks$$module$build$src$core$serialization$blocks=function(a,b,c,d){const e=Object.create(null);for(let f=0;f{k.disposed||k.setConnectionTracking(!0)},\n1)}return h};\nappendPrivate$$module$build$src$core$serialization$blocks=function(a,b,{parentConnection:c,isShadow:d=!1}={}){if(!a.type)throw new MissingBlockType$$module$build$src$core$serialization$exceptions(a);const e=b.newBlock(a.type,a.id);e.setShadow(d);loadCoords$$module$build$src$core$serialization$blocks(e,a);loadAttributes$$module$build$src$core$serialization$blocks(e,a);loadExtraState$$module$build$src$core$serialization$blocks(e,a);tryToConnectParent$$module$build$src$core$serialization$blocks(c,e,\na);loadIcons$$module$build$src$core$serialization$blocks(e,a);loadFields$$module$build$src$core$serialization$blocks(e,a);loadInputBlocks$$module$build$src$core$serialization$blocks(e,a);loadNextBlocks$$module$build$src$core$serialization$blocks(e,a);initBlock$$module$build$src$core$serialization$blocks(e,b.rendered);return e};\ncheckNewVariables$$module$build$src$core$serialization$blocks=function(a,b){if(isEnabled$$module$build$src$core$events$utils())for(a=getAddedVariables$$module$build$src$core$variables(a,b),b=0;bb&&(b=c[d].length);var e=-Infinity;let f,g=1;do{d=e;f=a;a=[];e=c.length/g;let h=1;for(let k=0;kd);return f};\nwrapScore$$module$build$src$core$utils$string=function(a,b,c){const d=[0],e=[];for(var f=0;f1&&d[d.length-1]<=d[d.length-2]&&(b+=.5);return b};\nwrapMutate$$module$build$src$core$utils$string=function(a,b,c){let d=wrapScore$$module$build$src$core$utils$string(a,b,c),e;for(let f=0;fd&&(d=h,e=g)}return e?wrapMutate$$module$build$src$core$utils$string(a,e,c):b};\nwrapToText$$module$build$src$core$utils$string=function(a,b){const c=[];for(let d=0;dRADIUS_OK$$module$build$src$core$tooltip&&hide$$module$build$src$core$tooltip()}else poisonedElement$$module$build$src$core$tooltip!==element$$module$build$src$core$tooltip&&\n(clearTimeout(showPid$$module$build$src$core$tooltip),lastX$$module$build$src$core$tooltip=a.pageX,lastY$$module$build$src$core$tooltip=a.pageY,showPid$$module$build$src$core$tooltip=setTimeout(show$$module$build$src$core$tooltip,HOVER_MS$$module$build$src$core$tooltip))};dispose$$module$build$src$core$tooltip=function(){poisonedElement$$module$build$src$core$tooltip=element$$module$build$src$core$tooltip=null;hide$$module$build$src$core$tooltip()};\nhide$$module$build$src$core$tooltip=function(){visible$$module$build$src$core$tooltip&&(visible$$module$build$src$core$tooltip=!1,containerDiv$$module$build$src$core$tooltip&&(containerDiv$$module$build$src$core$tooltip.style.display=\"none\"));showPid$$module$build$src$core$tooltip&&(clearTimeout(showPid$$module$build$src$core$tooltip),showPid$$module$build$src$core$tooltip=0)};\nblock$$module$build$src$core$tooltip=function(){hide$$module$build$src$core$tooltip();blocked$$module$build$src$core$tooltip=!0};unblock$$module$build$src$core$tooltip=function(){blocked$$module$build$src$core$tooltip=!1};\nrenderContent$$module$build$src$core$tooltip=function(){containerDiv$$module$build$src$core$tooltip&&element$$module$build$src$core$tooltip&&(typeof customTooltip$$module$build$src$core$tooltip===\"function\"?customTooltip$$module$build$src$core$tooltip(containerDiv$$module$build$src$core$tooltip,element$$module$build$src$core$tooltip):renderDefaultContent$$module$build$src$core$tooltip())};\nrenderDefaultContent$$module$build$src$core$tooltip=function(){var a=getTooltipOfObject$$module$build$src$core$tooltip(element$$module$build$src$core$tooltip);a=$.wrap$$module$build$src$core$utils$string(a,LIMIT$$module$build$src$core$tooltip);a=a.split(\"\\n\");for(let b=0;bc+window.scrollY&&(e-=containerDiv$$module$build$src$core$tooltip.offsetHeight+\n2*OFFSET_Y$$module$build$src$core$tooltip);a?d=Math.max(MARGINS$$module$build$src$core$tooltip-window.scrollX,d):d+containerDiv$$module$build$src$core$tooltip.offsetWidth>b+window.scrollX-2*MARGINS$$module$build$src$core$tooltip&&(d=b-containerDiv$$module$build$src$core$tooltip.offsetWidth-2*MARGINS$$module$build$src$core$tooltip);return{x:d,y:e}};\nshow$$module$build$src$core$tooltip=function(){if(!blocked$$module$build$src$core$tooltip&&(poisonedElement$$module$build$src$core$tooltip=element$$module$build$src$core$tooltip,containerDiv$$module$build$src$core$tooltip)){containerDiv$$module$build$src$core$tooltip.textContent=\"\";renderContent$$module$build$src$core$tooltip();var a=element$$module$build$src$core$tooltip.RTL;containerDiv$$module$build$src$core$tooltip.style.direction=a?\"rtl\":\"ltr\";containerDiv$$module$build$src$core$tooltip.style.display=\n\"block\";visible$$module$build$src$core$tooltip=!0;var {x:b,y:c}=getPosition$$module$build$src$core$tooltip(a);containerDiv$$module$build$src$core$tooltip.style.left=b+\"px\";containerDiv$$module$build$src$core$tooltip.style.top=c+\"px\"}};getHsvSaturation$$module$build$src$core$utils$colour=function(){return hsvSaturation$$module$build$src$core$utils$colour};setHsvSaturation$$module$build$src$core$utils$colour=function(a){hsvSaturation$$module$build$src$core$utils$colour=a};\ngetHsvValue$$module$build$src$core$utils$colour=function(){return hsvValue$$module$build$src$core$utils$colour};setHsvValue$$module$build$src$core$utils$colour=function(a){hsvValue$$module$build$src$core$utils$colour=a};\nparse$$module$build$src$core$utils$colour=function(a){a=`${a}`.toLowerCase().trim();var b=names$$module$build$src$core$utils$colour[a];if(b)return b;b=a.substring(0,2)===\"0x\"?\"#\"+a.substring(2):a;b=b[0]===\"#\"?b:\"#\"+b;if(/^#[0-9a-f]{6}$/.test(b))return b;if(/^#[0-9a-f]{3}$/.test(b))return[\"#\",b[1],b[1],b[2],b[2],b[3],b[3]].join(\"\");var c=a.match(/^(?:rgb)?\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/);return c&&(a=Number(c[1]),b=Number(c[2]),c=Number(c[3]),a>=0&&a<256&&b>=0&&b<256&&c>=0&&c<256)?rgbToHex$$module$build$src$core$utils$colour(a,\nb,c):null};rgbToHex$$module$build$src$core$utils$colour=function(a,b,c){b=a<<16|b<<8|c;return a<16?\"#\"+(16777216|b).toString(16).substr(1):\"#\"+b.toString(16)};hexToRgb$$module$build$src$core$utils$colour=function(a){a=parse$$module$build$src$core$utils$colour(a);if(!a)return[0,0,0];a=parseInt(a.substr(1),16);return[a>>16,a>>8&255,a&255]};\nhsvToHex$$module$build$src$core$utils$colour=function(a,b,c){let d=0,e=0,f=0;if(b===0)f=e=d=c;else{const g=Math.floor(a/60),h=a/60-g;a=c*(1-b);const k=c*(1-b*h);b=c*(1-b*(1-h));switch(g){case 1:d=k;e=c;f=a;break;case 2:d=a;e=c;f=b;break;case 3:d=a;e=k;f=c;break;case 4:d=b;e=a;f=c;break;case 5:d=c;e=a;f=k;break;case 6:case 0:d=c,e=b,f=a}}return rgbToHex$$module$build$src$core$utils$colour(Math.floor(d),Math.floor(e),Math.floor(f))};\nblend$$module$build$src$core$utils$colour=function(a,b,c){a=parse$$module$build$src$core$utils$colour(a);if(!a)return null;b=parse$$module$build$src$core$utils$colour(b);if(!b)return null;a=hexToRgb$$module$build$src$core$utils$colour(a);b=hexToRgb$$module$build$src$core$utils$colour(b);return rgbToHex$$module$build$src$core$utils$colour(Math.round(b[0]+c*(a[0]-b[0])),Math.round(b[1]+c*(a[1]-b[1])),Math.round(b[2]+c*(a[2]-b[2])))};\nhueToHex$$module$build$src$core$utils$colour=function(a){return hsvToHex$$module$build$src$core$utils$colour(a,hsvSaturation$$module$build$src$core$utils$colour,hsvValue$$module$build$src$core$utils$colour*255)};\ntokenizeInterpolationInternal$$module$build$src$core$utils$parsing=function(a,b,c){const d=[];var e=a.split(\"\");e.push(\"\");var f=0;a=[];let g=null;for(let l=0;l=a.bottom?b.top-c.height:b.bottom};isRepositionable$$module$build$src$core$widgetdiv=function(a){return!(a==null||!a.repositionForWindowResize)};repositionForWindowResize$$module$build$src$core$widgetdiv=function(){isRepositionable$$module$build$src$core$widgetdiv(owner$$module$build$src$core$widgetdiv)&&owner$$module$build$src$core$widgetdiv.repositionForWindowResize()||hide$$module$build$src$core$widgetdiv()};\ngetCurrentBlock$$module$build$src$core$contextmenu=function(){return currentBlock$$module$build$src$core$contextmenu};setCurrentBlock$$module$build$src$core$contextmenu=function(a){currentBlock$$module$build$src$core$contextmenu=a};\nshow$$module$build$src$core$contextmenu=function(a,b,c,d,e){show$$module$build$src$core$widgetdiv(dummyOwner$$module$build$src$core$contextmenu,c,dispose$$module$build$src$core$contextmenu,d);if(b.length){e||(a instanceof PointerEvent?e=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):(console.warn(\"Context menu opened with keyboard but no location given\"),e=new Coordinate$$module$build$src$core$utils$coordinate(0,0)));var f=populate_$$module$build$src$core$contextmenu(b,\nc,a,e);menu_$$module$build$src$core$contextmenu=f;position_$$module$build$src$core$contextmenu(f,c,e);setTimeout(function(){f.focus()},1);currentBlock$$module$build$src$core$contextmenu=null}else hide$$module$build$src$core$contextmenu()};\npopulate_$$module$build$src$core$contextmenu=function(a,b,c,d){const e=new Menu$$module$build$src$core$menu;e.setRole(Role$$module$build$src$core$utils$aria.MENU);for(let f=0;f{setTimeout(()=>{g.callback(g.scope,c,l,d)},0)})},{})}return e};\nposition_$$module$build$src$core$contextmenu=function(a,b,c){const d=getViewportBBox$$module$build$src$core$utils$svg_math();c=new Rect$$module$build$src$core$utils$rect(c.y+d.top,c.y+d.top,c.x+d.left,c.x+d.left);createWidget_$$module$build$src$core$contextmenu(a);const e=a.getSize();b&&(c.left+=e.width,c.right+=e.width,d.left+=e.width,d.right+=e.width);positionWithAnchor$$module$build$src$core$widgetdiv(d,c,e,b);a.focus()};\ncreateWidget_$$module$build$src$core$contextmenu=function(a){var b=getDiv$$module$build$src$core$widgetdiv();if(!b)throw Error(\"Attempting to create a context menu when widget div is null\");b=a.render(b);addClass$$module$build$src$core$utils$dom(b,\"blocklyContextMenu\");conditionalBind$$module$build$src$core$browser_events(b,\"contextmenu\",null,haltPropagation$$module$build$src$core$contextmenu);a.focus()};haltPropagation$$module$build$src$core$contextmenu=function(a){a.preventDefault();a.stopPropagation()};\nhide$$module$build$src$core$contextmenu=function(){hideIfOwner$$module$build$src$core$widgetdiv(dummyOwner$$module$build$src$core$contextmenu);currentBlock$$module$build$src$core$contextmenu=null};dispose$$module$build$src$core$contextmenu=function(){menu_$$module$build$src$core$contextmenu&&(menu_$$module$build$src$core$contextmenu.dispose(),menu_$$module$build$src$core$contextmenu=null)};\n$.callbackFactory$$module$build$src$core$contextmenu=function(a,b){return()=>{$.disable$$module$build$src$core$events$utils();let c;try{c=b instanceof Element?domToBlockInternal$$module$build$src$core$xml(b,a.workspace):appendInternal$$module$build$src$core$serialization$blocks(b,a.workspace);const d=a.getRelativeToSurfaceXY();d.x=a.RTL?d.x-$.config$$module$build$src$core$config.snapRadius:d.x+$.config$$module$build$src$core$config.snapRadius;d.y+=$.config$$module$build$src$core$config.snapRadius*\n2;c.moveBy(d.x,d.y)}finally{$.enable$$module$build$src$core$events$utils()}isEnabled$$module$build$src$core$events$utils()&&!c.isShadow()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(c));$.getFocusManager$$module$build$src$core$focus_manager().focusNode(c);return c}};\nmouseToWorkspacePoint$$module$build$src$core$utils$drag=function(a,b){b=mouseToSvg$$module$build$src$core$browser_events(b,a.getParentSvg(),a.getInverseScreenCTM());b.x/=a.scale;b.y/=a.scale;return b};start$$module$build$src$core$utils$drag=function(a,b,c){b=mouseToWorkspacePoint$$module$build$src$core$utils$drag(a,b);workspaceToDragDelta$$module$build$src$core$utils$drag.set(a,Coordinate$$module$build$src$core$utils$coordinate.difference(c,b))};\nmove$$module$build$src$core$utils$drag=function(a,b){b=mouseToWorkspacePoint$$module$build$src$core$utils$drag(a,b);a=workspaceToDragDelta$$module$build$src$core$utils$drag.get(a);if(!a)throw Error(\"Drag not initialized\");return Coordinate$$module$build$src$core$utils$coordinate.sum(a,b)};\nworkspaceToDom$$module$build$src$core$xml=function(a,b=!1){const c=$.createElement$$module$build$src$core$utils$xml(\"xml\");var d=variablesToDom$$module$build$src$core$xml($.allUsedVarModels$$module$build$src$core$variables(a));d.hasChildNodes()&&c.appendChild(d);for(const e of a.getTopComments())c.appendChild(saveWorkspaceComment$$module$build$src$core$xml(e,b));a=a.getTopBlocks(!0);for(d=0;d/g,\"<$1$2>\")};\ndomToPrettyText$$module$build$src$core$xml=function(a){a=domToText$$module$build$src$core$xml(a).split(\"<\");let b=\"\";for(let c=1;c\"&&(b+=\" \")}a=a.join(\"\\n\");a=a.replace(/(<(\\w+)\\b[^>]*>[^\\n]*)\\n *<\\/\\2>/g,\"$1\");return a.replace(/^\\n/,\"\")};\nclearWorkspaceAndLoadFromXml$$module$build$src$core$xml=function(a,b){b.setResizesEnabled(!1);b.clear();a=$.domToWorkspace$$module$build$src$core$xml(a,b);b.setResizesEnabled(!0);return a};\n$.domToWorkspace$$module$build$src$core$xml=function(a,b){let c=0;b.RTL&&(c=b.getWidth());const d=[];startTextWidthCache$$module$build$src$core$utils$dom();const e=$.getGroup$$module$build$src$core$events$utils();e||$.setGroup$$module$build$src$core$events$utils(!0);b.setResizesEnabled&&b.setResizesEnabled(!1);let f=!0;try{for(let g=0,h;h=a.childNodes[g];g++){const k=h.nodeName.toLowerCase(),l=h;if(k===\"block\"||k===\"shadow\"&&!getRecordUndo$$module$build$src$core$events$utils()){const m=domToBlockInternal$$module$build$src$core$xml(l,\nb);d.push(m.id);let n;const p=parseInt((n=l.getAttribute(\"x\"))!=null?n:\"10\",10);let r;const q=parseInt((r=l.getAttribute(\"y\"))!=null?r:\"10\",10);isNaN(p)||isNaN(q)||m.moveBy(b.RTL?c-p:p,q,[\"create\"]);f=!1}else{if(k===\"shadow\")throw TypeError(\"Shadow block cannot be a top-level block.\");if(k===\"comment\")loadWorkspaceComment$$module$build$src$core$xml(l,b);else if(k===\"variables\"){if(f)domToVariables$$module$build$src$core$xml(l,b);else throw Error(\"'variables' tag must exist once before block and shadow tag elements in the workspace XML, but it was found in another location.\");\nf=!1}}}}finally{$.setGroup$$module$build$src$core$events$utils(e),b.setResizesEnabled&&b.setResizesEnabled(!0),b.rendered&&triggerQueuedRenders$$module$build$src$core$render_management(),stopTextWidthCache$$module$build$src$core$utils$dom()}fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.FINISHED_LOADING))(b));return d};\nloadWorkspaceComment$$module$build$src$core$xml=function(a,b){var c;const d=(c=a.getAttribute(\"id\"))!=null?c:void 0;c=b.rendered?new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(b,d):new WorkspaceComment$$module$build$src$core$comments$workspace_comment(b,d);var e;c.setText((e=a.textContent)!=null?e:\"\");var f;e=parseInt((f=a.getAttribute(\"x\"))!=null?f:\"\",10);let g;f=parseInt((g=a.getAttribute(\"y\"))!=null?g:\"\",10);isNaN(e)||isNaN(f)||(e=b.RTL?b.getWidth()-e:e,\nc.moveTo(new Coordinate$$module$build$src$core$utils$coordinate(e,f)));var h;b=parseInt((h=a.getAttribute(\"w\"))!=null?h:\"\",10);let k;h=parseInt((k=a.getAttribute(\"h\"))!=null?k:\"\",10);isNaN(b)||isNaN(h)||c.setSize(new Size$$module$build$src$core$utils$size(b,h));a.getAttribute(\"collapsed\")===\"true\"&&c.setCollapsed(!0);a.getAttribute(\"editable\")===\"false\"&&c.setEditable(!1);a.getAttribute(\"movable\")===\"false\"&&c.setMovable(!1);a.getAttribute(\"deletable\")===\"false\"&&c.setDeletable(!1);return c};\nappendDomToWorkspace$$module$build$src$core$xml=function(a,b){if(!b.getBlocksBoundingBox)return $.domToWorkspace$$module$build$src$core$xml(a,b);var c=b.getBlocksBoundingBox();a=$.domToWorkspace$$module$build$src$core$xml(a,b);if(c&&c.top!==c.bottom){var d=c.bottom;c=b.RTL?c.right:c.left;var e=Infinity;let f=-Infinity,g=Infinity;for(let h=0;hf&&(f=k.x)}d=d-g+10;c=b.RTL?c-f:c-e;for(e=0;e=0;g--)f[g].initSvg();for(let g=f.length-1;g>=0;g--)f[g].queueRender();setTimeout(function(){e.disposed||e.setConnectionTracking(!0)},1);b.resizeContents()}else{const e=d.getDescendants(!1);for(let f=e.length-\n1;f>=0;f--)e[f].initModel()}}finally{$.enable$$module$build$src$core$events$utils()}if(isEnabled$$module$build$src$core$events$utils()){a=getAddedVariables$$module$build$src$core$variables(b,c);for(b=0;b{isNaN(n)||isNaN(r)||(n=b.workspace.RTL?b.workspace.getWidth()-(n+h):n,q.setBubbleLocation(new Coordinate$$module$build$src$core$utils$coordinate(n,r)));q.setBubbleVisible(f)},1)}};applyDataTagNodes$$module$build$src$core$xml=function(a,b){for(let c=0;c100)){var b=a.workspace,c=a.getSvgRoot();b.getAudioManager().play(\"delete\");var d=a.getRelativeToSurfaceXY(),e=c.cloneNode(!0);e.setAttribute(\"transform\",\"translate(\"+d.x+\",\"+d.y+\")\");var f;(f=b.getLayerManager())==null||f.appendToAnimationLayer({getSvgRoot:()=>e});disposeUiStep$$module$build$src$core$block_animations(e,{x:d.x,y:d.y,width:a.width,height:a.height},b.RTL,new Date)}};\ndisposeUiStep$$module$build$src$core$block_animations=function(a,b,c,d){const e=((new Date).getTime()-d.getTime())/150;e>1?removeNode$$module$build$src$core$utils$dom(a):(a.setAttribute(\"transform\",\"translate(\"+(b.x+(c?-1:1)*b.width/2*e)+\",\"+(b.y+b.height/2*e)+\") scale(\"+(1-e)+\")\"),setTimeout(disposeUiStep$$module$build$src$core$block_animations,10,a,b,c,d))};\nconnectionUiEffect$$module$build$src$core$block_animations=function(a){var b=a.workspace;const c=b.scale;b.getAudioManager().play(\"click\");if(!(c<1)){var d=b.getSvgXY(a.getSvgRoot());a.outputConnection?(d.x+=(a.RTL?3:-3)*c,d.y+=13*c):a.previousConnection&&(d.x+=(a.RTL?-23:23)*c,d.y+=3*c);var e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CIRCLE,{cx:d.x,cy:d.y,r:0,fill:\"none\",stroke:\"#888\",\"stroke-width\":10},b.getParentSvg());a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.ANIMATE,\n{id:\"animationCircle\",begin:\"indefinite\",attributeName:\"r\",dur:\"150ms\",from:0,to:25*c},e);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.ANIMATE,{id:\"animationOpacity\",begin:\"indefinite\",attributeName:\"opacity\",dur:\"150ms\",from:1,to:0},e);a.beginElement();b.beginElement();setTimeout(()=>void removeNode$$module$build$src$core$utils$dom(e),150)}};\ndisconnectUiEffect$$module$build$src$core$block_animations=function(a){disconnectUiStop$$module$build$src$core$block_animations();a.workspace.getAudioManager().play(\"disconnect\");if(!(a.workspace.scale<1)){var b=a.getHeightWidth().height;b=Math.atan(10/b)/Math.PI*180;a.RTL||(b*=-1);wobblingBlock$$module$build$src$core$block_animations=a;disconnectUiStep$$module$build$src$core$block_animations(a,b,new Date,0)}};\ndisconnectUiStep$$module$build$src$core$block_animations=function(a,b,c,d){const e=[.66,1,.66,0,-.66,-1,-.66,0];let f=\"\";c.getTime()+200>(new Date).getTime()&&(f=`skewX(${Math.round(e[d%e.length]*b)})`,disconnectPid$$module$build$src$core$block_animations=setTimeout(disconnectUiStep$$module$build$src$core$block_animations,15,a,b,c,d+1));a.getSvgRoot().setAttribute(\"transform\",`${a.getTranslation()} ${f}`)};\ndisconnectUiStop$$module$build$src$core$block_animations=function(){wobblingBlock$$module$build$src$core$block_animations&&(disconnectPid$$module$build$src$core$block_animations&&(clearTimeout(disconnectPid$$module$build$src$core$block_animations),disconnectPid$$module$build$src$core$block_animations=null),wobblingBlock$$module$build$src$core$block_animations.getSvgRoot().setAttribute(\"transform\",wobblingBlock$$module$build$src$core$block_animations.getTranslation()),wobblingBlock$$module$build$src$core$block_animations=\nnull)};\nmoveBlockToNotConflict$$module$build$src$core$clipboard$block_paster=function(a,b){a.workspace.RTL&&(b.x=a.workspace.getWidth()-b.x);const c=a.workspace,d=$.config$$module$build$src$core$config.snapRadius,e=Coordinate$$module$build$src$core$utils$coordinate.difference(b,a.getRelativeToSurfaceXY()),f=new Coordinate$$module$build$src$core$utils$coordinate(0,0),g=c.getAllBlocks(!1).filter(h=>h.id!=a.id).map(h=>h.getRelativeToSurfaceXY());for(;blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster(Coordinate$$module$build$src$core$utils$coordinate.sum(b,f),\ng)||blockIsInSnapRadius$$module$build$src$core$clipboard$block_paster(a,Coordinate$$module$build$src$core$utils$coordinate.sum(e,f),d);)c.RTL?f.translate(-d,d*2):f.translate(d,d*2);a.moveTo(Coordinate$$module$build$src$core$utils$coordinate.sum(b,f))};blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster=function(a,b){return b.some(c=>Math.abs(c.x-a.x)<=1&&Math.abs(c.y-a.y)<=1)};\nblockIsInSnapRadius$$module$build$src$core$clipboard$block_paster=function(a,b,c){return a.getConnections_(!1).some(d=>!!d.closest(c,b).connection)};\nbumpObjectIntoBounds$$module$build$src$core$bump_objects=function(a,b,c){const d=c.getBoundingRectangle(),e=d.right-d.left,f=clamp$$module$build$src$core$utils$math(b.top,d.top,b.top+b.height-(d.bottom-d.top))-d.top;let g=b.left;b=b.left+b.width-e;a.RTL?g=Math.min(b,g):b=Math.max(g,b);return(a=clamp$$module$build$src$core$utils$math(g,d.left,b)-d.left)||f?(c.moveBy(a,f,[\"inbounds\"]),!0):!1};\nbumpIntoBoundsHandler$$module$build$src$core$bump_objects=function(a){return b=>{var c=a.getMetricsManager();if(c.hasFixedEdges()&&!a.isDragging()){var d;if(BUMP_EVENTS$$module$build$src$core$events$type.includes((d=b.type)!=null?d:\"\")){d=c.getScrollMetrics(!0);const e=extractObjectFromEvent$$module$build$src$core$bump_objects(a,b);e&&(c=$.getGroup$$module$build$src$core$events$utils()||!1,$.setGroup$$module$build$src$core$events$utils(b.group),bumpObjectIntoBounds$$module$build$src$core$bump_objects(a,\nd,e)&&!b.group&&console.warn(\"Moved object in bounds but there was no event group. This may break undo.\"),$.setGroup$$module$build$src$core$events$utils(c))}else isViewportChange$$module$build$src$core$events$predicates(b)&&b.scale&&b.oldScale&&b.scale>b.oldScale&&bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects(a)}}};\nextractObjectFromEvent$$module$build$src$core$bump_objects=function(a,b){let c=null;switch(b.type){case EventType$$module$build$src$core$events$type.BLOCK_CREATE:case EventType$$module$build$src$core$events$type.BLOCK_MOVE:(c=a.getBlockById(b.blockId))&&(c=c.getRootBlock());break;case EventType$$module$build$src$core$events$type.COMMENT_CREATE:case EventType$$module$build$src$core$events$type.COMMENT_MOVE:case EventType$$module$build$src$core$events$type.COMMENT_RESIZE:c=a.getCommentById(b.commentId)}return c};\nbumpTopObjectsIntoBounds$$module$build$src$core$bump_objects=function(a){var b=a.getMetricsManager();if(b.hasFixedEdges()&&!a.isDragging()){b=b.getScrollMetrics(!0);var c=a.getTopBoundedElements();for(let d=0,e;e=c[d];d++)bumpObjectIntoBounds$$module$build$src$core$bump_objects(a,b,e)}};isDeletable$$module$build$src$core$interfaces$i_deletable=function(a){return a&&typeof a.isDeletable===\"function\"&&typeof a.dispose===\"function\"&&typeof a.setDeleteStyle===\"function\"};\ngetBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){const c=a.getIcons();for(const d of a.inputList){if(!d.isVisible())continue;c.push(...d.fieldRow);let e;if((e=d.connection)==null?0:e.targetBlock())if(a=d.connection.targetBlock(),d.connection.type!==ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||b)c.push(a);else{let f;(a=(f=a.lastConnectionInStack(!1))==null?void 0:f.getSourceBlock())&&c.push(a)}else{let f;((f=d.connection)==\nnull?void 0:f.type)===ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE&&c.push(d.connection)}}return c};\nnavigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){const c=a.workspace.getTopBoundedElements(!0).filter(e=>isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(e));a=c.indexOf(a instanceof BlockSvg$$module$build$src$core$block_svg?a.getRootBlock():a)+b;let d=null;a>=0&&a=c.length&&(d=c[0]);if(b<0&&d instanceof BlockSvg$$module$build$src$core$block_svg){let e,f;return(f=(e=d.lastConnectionInStack(!1))==null?\nvoid 0:e.getSourceBlock())!=null?f:d}return d};\nnavigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){var c;let d;const e=a instanceof BlockSvg$$module$build$src$core$block_svg?(d=(c=a.outputConnection)==null?void 0:c.targetBlock())!=null?d:a.getSurroundParent():a.getSourceBlock();if(!(e instanceof BlockSvg$$module$build$src$core$block_svg))return null;c=getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy(e,b>0);a=c.indexOf(a);if(a===-1)return null;b=a+b;return b>=0&&b!d.getReturnTypes()).map(d=>[d.getName(),d.getParameters().map(e=>e.getName()),!1]);a.getBlocksByType(\"procedures_defnoreturn\",!1).forEach(d=>{!isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(d)&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&b.push(d.getProcedureDef())});const c=a.getProcedureMap().getProcedures().filter(d=>\n!!d.getReturnTypes()).map(d=>[d.getName(),d.getParameters().map(e=>e.getName()),!0]);a.getBlocksByType(\"procedures_defreturn\",!1).forEach(d=>{!isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(d)&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&c.push(d.getProcedureDef())});b.sort(procTupleComparator$$module$build$src$core$procedures);c.sort(procTupleComparator$$module$build$src$core$procedures);return[b,c]};\nprocTupleComparator$$module$build$src$core$procedures=function(a,b){return a[0].localeCompare(b[0],void 0,{sensitivity:\"base\"})};$.findLegalName$$module$build$src$core$procedures=function(a,b){if(b.isInFlyout)return a;for(a=a||$.Msg$$module$build$src$core$msg.UNNAMED_KEY||\"unnamed\";!isLegalName$$module$build$src$core$procedures(a,b.workspace,b);){const c=a.match(/^(.*?)(\\d+)$/);a=c?c[1]+(parseInt(c[2])+1):a+\"2\"}return a};\nisLegalName$$module$build$src$core$procedures=function(a,b,c){return!isNameUsed$$module$build$src$core$procedures(a,b,c)};\nisNameUsed$$module$build$src$core$procedures=function(a,b,c){for(const d of b.getAllBlocks(!1))if(d!==c&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&$.Names$$module$build$src$core$names.equals(d.getProcedureDef()[0],a))return!0;c=c&&isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(c)?c==null?void 0:c.getProcedureModel():void 0;for(const d of b.getProcedureMap().getProcedures())if(d!==c&&$.Names$$module$build$src$core$names.equals(d.getName(),\na))return!0;return!1};\n$.rename$$module$build$src$core$procedures=function(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;a=a.trim();const c=$.findLegalName$$module$build$src$core$procedures(a,b);isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(b)&&!b.isInsertionMarker()&&b.getProcedureModel().setName(c);const d=this.getValue();if(d!==a&&d!==c)for(a=b.workspace.getAllBlocks(!1),b=0;bblockIsModernCallerFor$$module$build$src$core$procedures(c,a)||isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(c)&&$.Names$$module$build$src$core$names.equals(c.getProcedureCall(),a))};\nblockIsModernCallerFor$$module$build$src$core$procedures=function(a,b){return isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(a)&&!a.isProcedureDef()&&a.getProcedureModel()&&$.Names$$module$build$src$core$names.equals(a.getProcedureModel().getName(),b)};\n$.mutateCallers$$module$build$src$core$procedures=function(a){const b=getRecordUndo$$module$build$src$core$events$utils();var c=a.getProcedureDef()[0];const d=a.mutationToDom(!0);a=getCallers$$module$build$src$core$procedures(c,a.workspace);for(let f=0,g;g=a[f];f++){c=(c=g.mutationToDom())&&domToText$$module$build$src$core$utils$xml(c);g.domToMutation&&g.domToMutation(d);var e=g.mutationToDom();e=e&&domToText$$module$build$src$core$utils$xml(e);c!==e&&($.setRecordUndo$$module$build$src$core$events$utils(!1),\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(g,\"mutation\",null,c,e)),$.setRecordUndo$$module$build$src$core$events$utils(b))}};\n$.getDefinition$$module$build$src$core$procedures=function(a,b){for(const c of b.getAllBlocks(!1))if(isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(c)&&c.isProcedureDef()&&$.Names$$module$build$src$core$names.equals(c.getProcedureModel().getName(),a)||isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(c)&&$.Names$$module$build$src$core$names.equals(c.getProcedureDef()[0],a))return c;return null};\nisDynamicShape$$module$build$src$core$renderers$common$constants=function(a){return a.isDynamic};isPuzzleTab$$module$build$src$core$renderers$common$constants=function(a){return a.pathDown!==void 0&&a.pathUp!==void 0};isNotch$$module$build$src$core$renderers$common$constants=function(a){return a.pathLeft!==void 0&&a.pathRight!==void 0};\nregister$$module$build$src$core$renderers$common$block_rendering=function(a,b){register$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a,b)};unregister$$module$build$src$core$renderers$common$block_rendering=function(a){unregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a)};\ninit$$module$build$src$core$renderers$common$block_rendering=function(a,b,c){a=new (getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a))(a);a.init(b,c);return a};stringButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"String\")};\nnumberButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"Number\")};colourButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"Colour\")};\ninternalFlyoutCategory$$module$build$src$core$variables_dynamic=function(a){return flyoutCategory$$module$build$src$core$variables_dynamic(a,!1)};\nflyoutCategory$$module$build$src$core$variables_dynamic=function(a,b=!0){Blocks$$module$build$src$core$blocks.variables_set_dynamic||Blocks$$module$build$src$core$blocks.variables_get_dynamic||console.warn(\"There are no dynamic variable blocks, but there is a dynamic variable category.\");if(b)return warn$$module$build$src$core$utils$deprecation(\"The XML return value of Blockly.VariablesDynamic.flyoutCategory()\",\"v12\",\"v13\",\"the same method, but handle a return type of FlyoutItemInfo[] (JSON) instead.\"),\nxmlFlyoutCategory$$module$build$src$core$variables_dynamic(a);a.registerButtonCallback(\"CREATE_VARIABLE_STRING\",stringButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_NUMBER\",numberButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_COLOUR\",colourButtonClickHandler$$module$build$src$core$variables_dynamic);return[{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_STRING_VARIABLE,callbackkey:\"CREATE_VARIABLE_STRING\"},\n{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_NUMBER_VARIABLE,callbackkey:\"CREATE_VARIABLE_NUMBER\"},{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_COLOUR_VARIABLE,callbackkey:\"CREATE_VARIABLE_COLOUR\"},...jsonFlyoutCategoryBlocks$$module$build$src$core$variables(a,a.getVariableMap().getAllVariables(),!1,\"variables_get_dynamic\",\"variables_set_dynamic\")]};\nxmlFlyoutCategory$$module$build$src$core$variables_dynamic=function(a){let b=[],c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_STRING_VARIABLE);c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_STRING\");b.push(c);c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_NUMBER_VARIABLE);c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_NUMBER\");b.push(c);c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_COLOUR_VARIABLE);\nc.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_COLOUR\");b.push(c);a.registerButtonCallback(\"CREATE_VARIABLE_STRING\",stringButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_NUMBER\",numberButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_COLOUR\",colourButtonClickHandler$$module$build$src$core$variables_dynamic);a=flyoutCategoryBlocks$$module$build$src$core$variables_dynamic(a);return b=b.concat(a)};\nflyoutCategoryBlocks$$module$build$src$core$variables_dynamic=function(a){a=a.getVariableMap().getAllVariables();const b=[];if(a.length>0){if(Blocks$$module$build$src$core$blocks.variables_set_dynamic){var c=a[a.length-1];const d=$.createElement$$module$build$src$core$utils$xml(\"block\");d.setAttribute(\"type\",\"variables_set_dynamic\");d.setAttribute(\"gap\",\"24\");d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c));b.push(d)}if(Blocks$$module$build$src$core$blocks.variables_get_dynamic){a.sort(compareByName$$module$build$src$core$variables);\nfor(let d=0,e;e=a[d];d++)c=$.createElement$$module$build$src$core$utils$xml(\"block\"),c.setAttribute(\"type\",\"variables_get_dynamic\"),c.setAttribute(\"gap\",\"8\"),c.appendChild(generateVariableFieldDom$$module$build$src$core$variables(e)),b.push(c)}}return b};resizeSvgContents$$module$build$src$core$workspace_svg=function(a){a.resizeContents()};\ncopy$$module$build$src$core$clipboard=function(a,b){const c=a.toCopyData();stashedCopyData$$module$build$src$core$clipboard=c;stashedWorkspace$$module$build$src$core$clipboard=isSelectable$$module$build$src$core$interfaces$i_selectable(a)&&a.workspace instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?a.workspace:null;stashedCoordinates$$module$build$src$core$clipboard=b;return c};getLastCopiedData$$module$build$src$core$clipboard=function(){return stashedCopyData$$module$build$src$core$clipboard};\nsetLastCopiedData$$module$build$src$core$clipboard=function(a){stashedCopyData$$module$build$src$core$clipboard=a};getLastCopiedWorkspace$$module$build$src$core$clipboard=function(){return stashedWorkspace$$module$build$src$core$clipboard};setLastCopiedWorkspace$$module$build$src$core$clipboard=function(a){stashedWorkspace$$module$build$src$core$clipboard=a};getLastCopiedLocation$$module$build$src$core$clipboard=function(){return stashedCoordinates$$module$build$src$core$clipboard};\nsetLastCopiedLocation$$module$build$src$core$clipboard=function(a){stashedCoordinates$$module$build$src$core$clipboard=a};\npaste$$module$build$src$core$clipboard=function(a,b,c){return a&&b?pasteFromData$$module$build$src$core$clipboard(a,b,c):stashedCopyData$$module$build$src$core$clipboard&&stashedWorkspace$$module$build$src$core$clipboard?pasteFromData$$module$build$src$core$clipboard(stashedCopyData$$module$build$src$core$clipboard,stashedWorkspace$$module$build$src$core$clipboard,stashedCoordinates$$module$build$src$core$clipboard):null};\npasteFromData$$module$build$src$core$clipboard=function(a,b,c){let d;b=b.isMutator?b:(d=b.options.parentWorkspace)!=null?d:b;let e,f;return(f=(e=getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.PASTER,a.paster,!1))==null?void 0:e.paste(a,b,c))!=null?f:null};isCopyable$$module$build$src$core$interfaces$i_copyable=function(a){return a&&typeof a.toCopyData===\"function\"};\nregisterEscape$$module$build$src$core$shortcut_items=function(){ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.ESCAPE,preconditionFn(a){return!a.isReadOnly()},callback(a){a.hideChaff();return!0},keyCodes:[KeyCodes$$module$build$src$core$utils$keycodes.ESC]})};\nregisterDelete$$module$build$src$core$shortcut_items=function(){ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.DELETE,preconditionFn(a,b){b=b.focusedNode;return!a.isReadOnly()&&b!=null&&isDeletable$$module$build$src$core$interfaces$i_deletable(b)&&b.isDeletable()&&!a.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(a,b,c,d){b.preventDefault();a=d.focusedNode;a instanceof\nBlockSvg$$module$build$src$core$block_svg?a.checkAndDelete():isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&a.isDeletable()&&($.setGroup$$module$build$src$core$events$utils(!0),a.dispose(),$.setGroup$$module$build$src$core$events$utils(!1));return!0},keyCodes:[KeyCodes$$module$build$src$core$utils$keycodes.DELETE,KeyCodes$$module$build$src$core$utils$keycodes.BACKSPACE]})};\nisCopyable$$module$build$src$core$shortcut_items=function(a){return isCopyable$$module$build$src$core$interfaces$i_copyable(a)&&isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&isDraggable$$module$build$src$core$interfaces$i_draggable(a)?a.isCopyable?a.isCopyable():a instanceof BlockSvg$$module$build$src$core$block_svg||a instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment?a.isOwnDeletable()&&a.isOwnMovable():a.isDeletable()&&a.isMovable():!1};\nisCuttable$$module$build$src$core$shortcut_items=function(a){return isCopyable$$module$build$src$core$shortcut_items(a)&&isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&a.isDeletable()};\nregisterCopy$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.C,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.C,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.COPY,\npreconditionFn(c,d){d=d.focusedNode;c=c.isFlyout?c.targetWorkspace:c;return!!d&&!!c&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()&&isCopyable$$module$build$src$core$shortcut_items(d)},callback(c,d,e,f){d.preventDefault();d=f.focusedNode;if(!d||!isCopyable$$module$build$src$core$interfaces$i_copyable(d)||!isCopyable$$module$build$src$core$shortcut_items(d))return!1;c=c.isFlyout?c.targetWorkspace:c;if(!c)return!1;d.workspace.isFlyout||c.hideChaff();\nc=isDraggable$$module$build$src$core$interfaces$i_draggable(d)&&d.workspace==c?d.getRelativeToSurfaceXY():void 0;return!!copy$$module$build$src$core$clipboard(d,c)},keyCodes:[a,b]})};\nregisterCut$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.X,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.X,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.CUT,\npreconditionFn(c,d){d=d.focusedNode;return!!d&&!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()&&isCuttable$$module$build$src$core$shortcut_items(d)},callback(c,d,e,f){c=f.focusedNode;if(!c||!isCuttable$$module$build$src$core$shortcut_items(c)||!isCopyable$$module$build$src$core$interfaces$i_copyable(c))return!1;d=isDraggable$$module$build$src$core$interfaces$i_draggable(c)?c.getRelativeToSurfaceXY():void 0;d=copy$$module$build$src$core$clipboard(c,\nd);c instanceof BlockSvg$$module$build$src$core$block_svg?c.checkAndDelete():isDeletable$$module$build$src$core$interfaces$i_deletable(c)&&c.dispose();return!!d},keyCodes:[a,b]})};\nregisterPaste$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.V,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.V,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.PASTE,\npreconditionFn(){var c=getLastCopiedWorkspace$$module$build$src$core$clipboard();if(!c||!c.rendered)return!1;c=c.isFlyout?c.targetWorkspace:c;return!!getLastCopiedData$$module$build$src$core$clipboard()&&!!c&&!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(c,d){c=getLastCopiedData$$module$build$src$core$clipboard();if(!c)return!1;var e=getLastCopiedWorkspace$$module$build$src$core$clipboard();if(!e)return!1;e=e.isFlyout?e.targetWorkspace:\ne;if(!e||e.isReadOnly())return!1;if(d instanceof PointerEvent)return d=screenToWsCoordinates$$module$build$src$core$utils$svg_math(e,new Coordinate$$module$build$src$core$utils$coordinate(d.clientX,d.clientY)),!!paste$$module$build$src$core$clipboard(c,e,d);d=getLastCopiedLocation$$module$build$src$core$clipboard();if(!d)return!!paste$$module$build$src$core$clipboard(c,e);const {left:f,top:g,width:h,height:k}=e.getMetricsManager().getViewMetrics(!0);if((new Rect$$module$build$src$core$utils$rect(g,\ng+k,f,f+h)).contains(d.x,d.y))return!!paste$$module$build$src$core$clipboard(c,e);d=new Coordinate$$module$build$src$core$utils$coordinate(f+h/2,g+k/2);return!!paste$$module$build$src$core$clipboard(c,e,d)},keyCodes:[a,b]})};\nregisterUndo$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.UNDO,\npreconditionFn(c){return!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(c,d){c.hideChaff();c.undo(!1);d.preventDefault();return!0},keyCodes:[a,b]})};\nregisterRedo$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL,KeyCodes$$module$build$src$core$utils$keycodes.SHIFT]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.META,\nKeyCodes$$module$build$src$core$utils$keycodes.SHIFT]),c=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Y,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.REDO,preconditionFn(d){return!d.isDragging()&&!d.isReadOnly()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},\ncallback(d,e){d.hideChaff();d.undo(!0);e.preventDefault();return!0},keyCodes:[a,b,c]})};registerDefaultShortcuts$$module$build$src$core$shortcut_items=function(){registerEscape$$module$build$src$core$shortcut_items();registerDelete$$module$build$src$core$shortcut_items();registerCopy$$module$build$src$core$shortcut_items();registerCut$$module$build$src$core$shortcut_items();registerPaste$$module$build$src$core$shortcut_items();registerUndo$$module$build$src$core$shortcut_items();registerRedo$$module$build$src$core$shortcut_items()};\nsaveProcedure$$module$build$src$core$serialization$procedures=function(a){const b=a.saveState();if(!a.getParameters().length)return b;b.parameters=a.getParameters().map(c=>c.saveState());return b};loadProcedure$$module$build$src$core$serialization$procedures=function(a,b,c,d){a=a.loadState(c,d);if(!c.parameters)return a;for(const [e,f]of c.parameters.entries())a.insertParameter(b.loadState(f,d),e);return a};\nsave$$module$build$src$core$serialization$workspaces=function(a){const b=Object.create(null),c=getAllItems$$module$build$src$core$registry(Type$$module$build$src$core$registry.SERIALIZER,!0);for(const d in c){let e;const f=(e=c[d])==null?void 0:e.save(a);f&&(b[d]=f)}return b};\nload$$module$build$src$core$serialization$workspaces=function(a,b,{recordUndo:c=!1}={}){var d=getAllItems$$module$build$src$core$registry(Type$$module$build$src$core$registry.SERIALIZER,!0);if(d){d=Object.entries(d).sort((f,g)=>g[1].priority-f[1].priority);var e=getRecordUndo$$module$build$src$core$events$utils();$.setRecordUndo$$module$build$src$core$events$utils(c);(c=$.getGroup$$module$build$src$core$events$utils())||$.setGroup$$module$build$src$core$events$utils(!0);startTextWidthCache$$module$build$src$core$utils$dom();\nb instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&b.setResizesEnabled(!1);for(const [,f]of d.reverse()){let g;(g=f)==null||g.clear(b)}for(const [f,g]of d.reverse())if(a[f]){let h;(h=g)==null||h.load(a[f],b)}b instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&b.setResizesEnabled(!0);stopTextWidthCache$$module$build$src$core$utils$dom();fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.FINISHED_LOADING))(b));\n$.setGroup$$module$build$src$core$events$utils(c);$.setRecordUndo$$module$build$src$core$events$utils(e)}};\ninject$$module$build$src$core$inject=function(a,b){let c=null;c=typeof a===\"string\"?document.getElementById(a)||document.querySelector(a):a;var d;if(!document.contains(c)&&document!==((d=c)==null?void 0:d.ownerDocument))throw Error(\"Error: container is not in current document\");a=new Options$$module$build$src$core$options(b||{});d=document.createElement(\"div\");addClass$$module$build$src$core$utils$dom(d,\"injectionDiv\");(b==null?0:b.rtl)&&addClass$$module$build$src$core$utils$dom(d,\"blocklyRTL\");c.appendChild(d);\nb=createDom$$module$build$src$core$inject(d,a);const e=createMainWorkspace$$module$build$src$core$inject(d,b,a);init$$module$build$src$core$inject(e);setMainWorkspace$$module$build$src$core$common(e);svgResize$$module$build$src$core$common(e);d.addEventListener(\"focusin\",function(){setMainWorkspace$$module$build$src$core$common(e)});conditionalBind$$module$build$src$core$browser_events(d,\"keydown\",null,globalShortcutHandler$$module$build$src$core$common);return e};\ncreateDom$$module$build$src$core$inject=function(a,b){a.setAttribute(\"dir\",\"LTR\");inject$$module$build$src$core$css(b.hasCss,b.pathToMedia);const c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{xmlns:SVG_NS$$module$build$src$core$utils$dom,\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\",\"class\":\"blocklySvg\"},a),d=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.DEFS,\n{},c),e=String(Math.random()).substring(2);b.gridPattern=Grid$$module$build$src$core$grid.createDom(e,b.gridOptions,d,a);return c};\ncreateMainWorkspace$$module$build$src$core$inject=function(a,b,c){c.parentWorkspace=null;c=new WorkspaceSvg$$module$build$src$core$workspace_svg(c);const d=c.options;c.scale=d.zoomOptions.startScale;b.appendChild(c.createDom(\"blocklyMainBackground\",a));var e=c.getRenderer().getClassName();e&&addClass$$module$build$src$core$utils$dom(a,e);(e=c.getTheme().getClassName())&&addClass$$module$build$src$core$utils$dom(a,e);!d.hasCategories&&d.languageTree&&(a=c.addFlyout(Svg$$module$build$src$core$utils$svg.SVG),\ninsertAfter$$module$build$src$core$utils$dom(a,b));d.hasTrashcan&&c.addTrashcan();d.zoomOptions&&d.zoomOptions.controls&&c.addZoomControls();c.getThemeManager().subscribe(b,\"workspaceBackgroundColour\",\"background-color\");c.translate(0,0);c.addChangeListener(bumpIntoBoundsHandler$$module$build$src$core$bump_objects(c));svgResize$$module$build$src$core$common(c);createDom$$module$build$src$core$widgetdiv();createDom$$module$build$src$core$dropdowndiv();createDom$$module$build$src$core$tooltip();return c};\ninit$$module$build$src$core$inject=function(a){const b=a.options;var c=a.getParentSvg();conditionalBind$$module$build$src$core$browser_events(c.parentNode,\"contextmenu\",null,function(d){isTargetInput$$module$build$src$core$browser_events(d)||d.preventDefault()});c=conditionalBind$$module$build$src$core$browser_events(window,\"resize\",null,function(){hide$$module$build$src$core$tooltip();a.hideComponents(!0);repositionForWindowResize$$module$build$src$core$dropdowndiv();repositionForWindowResize$$module$build$src$core$widgetdiv();\nsvgResize$$module$build$src$core$common(a);bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects(a)});a.setResizeHandlerWrapper(c);bindDocumentEvents$$module$build$src$core$inject();if(b.languageTree){c=a.getToolbox();const d=a.getFlyout(!0);c?c.init():d&&(d.init(a),d.show(b.languageTree),typeof d.scrollToStart===\"function\"&&d.scrollToStart())}b.hasTrashcan&&a.trashcan.init();b.zoomOptions&&b.zoomOptions.controls&&a.zoomControls_.init();b.moveOptions&&b.moveOptions.scrollbars?(a.scrollbar=\nnew ScrollbarPair$$module$build$src$core$scrollbar_pair(a,b.moveOptions.scrollbars===!0||!!b.moveOptions.scrollbars.horizontal,b.moveOptions.scrollbars===!0||!!b.moveOptions.scrollbars.vertical,\"blocklyMainWorkspaceScrollbar\"),a.scrollbar.resize()):a.setMetrics({x:.5,y:.5});b.hasSounds&&loadSounds$$module$build$src$core$inject(b.pathToMedia,a)};\nbindDocumentEvents$$module$build$src$core$inject=function(){documentEventsBound$$module$build$src$core$inject||(conditionalBind$$module$build$src$core$browser_events(document,\"scroll\",null,function(){const a=getAllWorkspaces$$module$build$src$core$common();for(let b=0,c;c=a[b];b++)c instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&c.updateInverseScreenCTM()}),bind$$module$build$src$core$browser_events(document,\"touchend\",null,longStop$$module$build$src$core$touch),bind$$module$build$src$core$browser_events(document,\n\"touchcancel\",null,longStop$$module$build$src$core$touch));documentEventsBound$$module$build$src$core$inject=!0};\nloadSounds$$module$build$src$core$inject=function(a,b){function c(){for(;e.length;){const f=e.pop();f&&unbind$$module$build$src$core$browser_events(f)}d.preload()}const d=b.getAudioManager();d.load([a+\"click.mp3\",a+\"click.wav\",a+\"click.ogg\"],\"click\");d.load([a+\"disconnect.wav\",a+\"disconnect.mp3\",a+\"disconnect.ogg\"],\"disconnect\");d.load([a+\"delete.mp3\",a+\"delete.ogg\",a+\"delete.wav\"],\"delete\");const e=[];e.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",null,c,!0));\ne.push(conditionalBind$$module$build$src$core$browser_events(document,\"touchstart\",null,c,!0))};isFullBlockField$$module$build$src$core$contextmenu_items=function(a){if(!a||!a.isSimpleReporter())return!1;let b;return(b=a.getFields().next().value)==null?void 0:b.isFullBlockField()};\nregisterUndo$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.UNDO},preconditionFn(a){return a.workspace.getUndoStack().length>0?\"enabled\":\"disabled\"},callback(a){a.workspace.undo(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"undoWorkspace\",weight:1})};\nregisterRedo$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.REDO},preconditionFn(a){return a.workspace.getRedoStack().length>0?\"enabled\":\"disabled\"},callback(a){a.workspace.undo(!0)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"redoWorkspace\",weight:2})};\nregisterCleanup$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.CLEAN_UP},preconditionFn(a){return a.workspace.isMovable()?a.workspace.getTopBlocks(!1).length>1?\"enabled\":\"disabled\":\"hidden\"},callback(a){a.workspace.cleanUp()},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"cleanWorkspace\",weight:3})};\ntoggleOption_$$module$build$src$core$contextmenu_items=function(a,b){function c(f){e--;f.setCollapsed(a);e===0&&$.setGroup$$module$build$src$core$events$utils(!1)}let d=0,e=0;$.setGroup$$module$build$src$core$events$utils(!0);for(let f=0;f\n0?\"enabled\":\"disabled\":\"disabled\"},callback(a){if(a.workspace){a.workspace.cancelCurrentGesture();var b=getDeletableBlocks_$$module$build$src$core$contextmenu_items(a.workspace);b.length<2?deleteNext_$$module$build$src$core$contextmenu_items(b):confirm$$module$build$src$core$dialog($.Msg$$module$build$src$core$msg.DELETE_ALL_BLOCKS.replace(\"%1\",String(b.length)),function(c){c&&deleteNext_$$module$build$src$core$contextmenu_items(b)})}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,\nid:\"workspaceDelete\",weight:6})};registerWorkspaceOptions_$$module$build$src$core$contextmenu_items=function(){registerUndo$$module$build$src$core$contextmenu_items();registerRedo$$module$build$src$core$contextmenu_items();registerCleanup$$module$build$src$core$contextmenu_items();registerCollapse$$module$build$src$core$contextmenu_items();registerExpand$$module$build$src$core$contextmenu_items();registerDeleteAll$$module$build$src$core$contextmenu_items()};\nregisterDuplicate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.DUPLICATE_BLOCK},preconditionFn(a){a=a.block;return!a.isInFlyout&&a.isDeletable()&&a.isMovable()?a.isDuplicatable()?\"enabled\":\"disabled\":\"hidden\"},callback(a){if(a.block){var b=a.block.toCopyData();b&&paste$$module$build$src$core$clipboard(b,a.block.workspace)}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,\nid:\"blockDuplicate\",weight:1})};\nregisterComment$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){return a.block.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)?$.Msg$$module$build$src$core$msg.REMOVE_COMMENT:$.Msg$$module$build$src$core$msg.ADD_COMMENT},preconditionFn(a){a=a.block;return!a||a.isInFlyout||!a.workspace.options.comments||a.isCollapsed()||!a.isEditable()||!a.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)&&isFullBlockField$$module$build$src$core$contextmenu_items(a)?\n\"hidden\":\"enabled\"},callback(a){(a=a.block)&&a.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)?a.setCommentText(null):a.setCommentText(\"\")},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockComment\",weight:2})};\nregisterInline$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){return a.block.getInputsInline()?$.Msg$$module$build$src$core$msg.EXTERNAL_INPUTS:$.Msg$$module$build$src$core$msg.INLINE_INPUTS},preconditionFn(a){a=a.block;if(!a.isInFlyout&&a.isMovable()&&!a.isCollapsed())for(let b=1;b(b.has(MANUALLY_DISABLED$$module$build$src$core$constants)?\n1:0);return a.getInheritedDisabled()||b?\"disabled\":\"enabled\"}return\"hidden\"},callback(a){a=a.block;const b=$.getGroup$$module$build$src$core$events$utils();b||$.setGroup$$module$build$src$core$events$utils(!0);a.setDisabledReason(!a.hasDisabledReason(MANUALLY_DISABLED$$module$build$src$core$constants),MANUALLY_DISABLED$$module$build$src$core$constants);$.setGroup$$module$build$src$core$events$utils(b)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockDisable\",\nweight:5})};\nregisterDelete$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){var b=a.block;a=b.getDescendants(!1).length;(b=b.getNextBlock())&&(a-=b.getDescendants(!1).length);return a===1?$.Msg$$module$build$src$core$msg.DELETE_BLOCK:$.Msg$$module$build$src$core$msg.DELETE_X_BLOCKS.replace(\"%1\",`${a}`)},preconditionFn(a){return!a.block.isInFlyout&&a.block.isDeletable()?\"enabled\":\"hidden\"},callback(a){a.block&&a.block.checkAndDelete()},\nscopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockDelete\",weight:6})};\nregisterHelp$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.HELP},preconditionFn(a){a=a.block;return(typeof a.helpUrl===\"function\"?a.helpUrl():a.helpUrl)?\"enabled\":\"hidden\"},callback(a){a.block.showHelp()},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockHelp\",weight:7})};\nregisterCommentDelete$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.REMOVE_COMMENT,preconditionFn(a){let b;return((b=a.comment)==null?0:b.isDeletable())?\"enabled\":\"hidden\"},callback(a){$.setGroup$$module$build$src$core$events$utils(!0);let b;(b=a.comment)==null||b.dispose();$.setGroup$$module$build$src$core$events$utils(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.COMMENT,\nid:\"commentDelete\",weight:6})};\nregisterCommentDuplicate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.DUPLICATE_COMMENT,preconditionFn(a){let b;return((b=a.comment)==null?0:b.isMovable())?\"enabled\":\"hidden\"},callback(a){if(a.comment){var b=a.comment.toCopyData();b&&paste$$module$build$src$core$clipboard(b,a.comment.workspace)}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.COMMENT,id:\"commentDuplicate\",\nweight:1})};\nregisterCommentCreate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.ADD_COMMENT,preconditionFn:a=>{let b;return((b=a.workspace)==null?0:b.isMutator)?\"hidden\":\"enabled\"},callback:(a,b,c,d)=>{if(a=a.workspace)$.setGroup$$module$build$src$core$events$utils(!0),b=new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(a),b.setPlaceholderText($.Msg$$module$build$src$core$msg.WORKSPACE_COMMENT_DEFAULT_TEXT),\nb.moveTo(screenToWsCoordinates$$module$build$src$core$utils$svg_math(a,new Coordinate$$module$build$src$core$utils$coordinate(d.x,d.y))),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b),$.setGroup$$module$build$src$core$events$utils(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"commentCreate\",weight:8})};\nregisterBlockOptions_$$module$build$src$core$contextmenu_items=function(){registerDuplicate$$module$build$src$core$contextmenu_items();registerComment$$module$build$src$core$contextmenu_items();registerInline$$module$build$src$core$contextmenu_items();registerCollapseExpandBlock$$module$build$src$core$contextmenu_items();registerDisable$$module$build$src$core$contextmenu_items();registerDelete$$module$build$src$core$contextmenu_items();registerHelp$$module$build$src$core$contextmenu_items()};\nregisterCommentOptions$$module$build$src$core$contextmenu_items=function(){registerCommentDuplicate$$module$build$src$core$contextmenu_items();registerCommentDelete$$module$build$src$core$contextmenu_items();registerCommentCreate$$module$build$src$core$contextmenu_items()};registerDefaultOptions$$module$build$src$core$contextmenu_items=function(){registerWorkspaceOptions_$$module$build$src$core$contextmenu_items();registerBlockOptions_$$module$build$src$core$contextmenu_items()};\nisPaster$$module$build$src$core$interfaces$i_paster=function(a){return a&&typeof a.paste===\"function\"};isRenderedElement$$module$build$src$core$interfaces$i_rendered_element=function(a){return a&&typeof a.getSvgRoot===\"function\"};isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item=function(a){return a.isSelectable()};hideChaff$$module$build$src$core$blockly=function(a){getMainWorkspace$$module$build$src$core$common().hideChaff(a)};\nisFocusableTree$$module$build$src$core$interfaces$i_focusable_tree=function(a){return a&&typeof a.getRootFocusableNode===\"function\"&&typeof a.getRestoredFocusableNode===\"function\"&&typeof a.getNestedTrees===\"function\"&&typeof a.lookUpFocusableNode===\"function\"&&typeof a.onTreeFocus===\"function\"&&typeof a.onTreeBlur===\"function\"};$jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_ES6=!1;$jscomp.ASSUME_ES2020=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;\n$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.INSTRUMENT_ASYNC_CONTEXT=!0;$jscomp.objectCreate=$jscomp.ASSUME_ES5||typeof Object.create==\"function\"?Object.create:function(a){var b=function(){};b.prototype=a;return new b};$jscomp.defineProperty=$jscomp.ASSUME_ES5||typeof Object.defineProperties==\"function\"?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};\n$jscomp.getGlobal=function(a){a=[\"object\"==typeof globalThis&&globalThis,a,\"object\"==typeof window&&window,\"object\"==typeof self&&self,\"object\"==typeof __webpack_require__.g&&__webpack_require__.g];for(var b=0;b>>0,$jscomp.propertyToPolyfillSymbol[e]=$jscomp.IS_SYMBOL_NATIVE?\n$jscomp.global.Symbol(e):$jscomp.POLYFILL_PREFIX+c+\"$\"+e),$jscomp.defineProperty(d,$jscomp.propertyToPolyfillSymbol[e],{configurable:!0,writable:!0,value:b})))};\n$jscomp.getConstructImplementation=function(){function a(){function c(){}new c;Reflect.construct(c,[],function(){});return new c instanceof c}if($jscomp.TRUST_ES6_POLYFILLS&&typeof Reflect!=\"undefined\"&&Reflect.construct){if(a())return Reflect.construct;var b=Reflect.construct;return function(c,d,e){c=b(c,d);e&&Reflect.setPrototypeOf(c,e.prototype);return c}}return function(c,d,e){e===void 0&&(e=c);e=$jscomp.objectCreate(e.prototype||Object.prototype);return Function.prototype.apply.call(c,e,d)||\ne}};$jscomp.construct={valueOf:$jscomp.getConstructImplementation}.valueOf();$jscomp.underscoreProtoCanBeSet=function(){var a={a:!0},b={};try{return b.__proto__=a,b.a}catch(c){}return!1};$jscomp.setPrototypeOf=$jscomp.ASSUME_ES6||$jscomp.TRUST_ES6_POLYFILLS&&typeof Object.setPrototypeOf==\"function\"?Object.setPrototypeOf:$jscomp.underscoreProtoCanBeSet()?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+\" is not extensible\");return a}:null;\n$jscomp.inherits=function(a,b){a.prototype=$jscomp.objectCreate(b.prototype);a.prototype.constructor=a;if($jscomp.ASSUME_ES6||$jscomp.setPrototypeOf){var c=$jscomp.setPrototypeOf;c(a,b)}else for(c in b)if(c!=\"prototype\")if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.superClass_=b.prototype};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b0;){var a=this.properties_.pop();if(a in this.object_)return a}return null};$jscomp.generator.Engine_=function(a){this.context_=new $jscomp.generator.Context;this.program_=a};\n$jscomp.generator.Engine_.prototype.next_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,a,this.context_.next_);this.context_.next_(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.return_=function(a){this.context_.start_();var b=this.context_.yieldAllIterator_;if(b)return this.yieldAllStep_(\"return\"in b?b[\"return\"]:function(c){return{value:c,done:!0}},a,this.context_.return);this.context_.return(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.throw_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_[\"throw\"],a,this.context_.next_);this.context_.throw_(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.yieldAllStep_=function(a,b,c){try{var d=a.call(this.context_.yieldAllIterator_,b);$jscomp.generator.ensureIteratorResultIsObject_(d);if(!d.done)return this.context_.stop_(),d;var e=d.value}catch(f){return this.context_.yieldAllIterator_=null,this.context_.throw_(f),this.nextStep_()}this.context_.yieldAllIterator_=null;c.call(this.context_,e);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var a=this.program_(this.context_);if(a)return this.context_.stop_(),{value:a.value,done:!1}}catch(b){this.context_.yieldResult=void 0,this.context_.throw_(b)}this.context_.stop_();if(this.context_.abruptCompletion_){a=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(a.isException)throw a.exception;return{value:a.return,done:!0}}return{value:void 0,done:!0}};\n$jscomp.generator.Generator_=function(a){this.next=function(b){return a.next_(b)};this.throw=function(b){return a.throw_(b)};this.return=function(b){return a.return_(b)};this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(a,b){b=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(b));$jscomp.setPrototypeOf&&a.prototype&&$jscomp.setPrototypeOf(b,a.prototype);return b};\n$jscomp.asyncExecutePromiseGenerator=function(a){function b(d){return a.next(d)}function c(d){return a.throw(d)}return new Promise(function(d,e){function f(g){g.done?d(g.value):Promise.resolve(g.value).then(b,c).then(f,e)}f(a.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(a){return $jscomp.asyncExecutePromiseGenerator(a())};$jscomp.asyncExecutePromiseGeneratorProgram=function(a){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(a)))};\n$jscomp.polyfill(\"globalThis\",function(a){return a||$jscomp.global},\"es_2020\",\"es3\");$jscomp.polyfill(\"Array.prototype.includes\",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var e=d.length;c=c||0;for(c<0&&(c=Math.max(c+e,0));c0?(d=Array.prototype.flat.call(d,b-1),c.push.apply(c,d)):c.push(d)});return c}},\"es9\",\"es5\");\n$jscomp.polyfill(\"Object.entries\",function(a){return a?a:function(b){var c=[],d;for(d in b)$jscomp.owns(b,d)&&c.push([d,b[d]]);return c}},\"es8\",\"es3\");$jscomp.polyfill(\"Object.values\",function(a){return a?a:function(b){var c=[],d;for(d in b)$jscomp.owns(b,d)&&c.push(b[d]);return c}},\"es8\",\"es3\");\nvar typeMap$$module$build$src$core$registry=Object.create(null),TEST_ONLY$$module$build$src$core$registry={typeMap:typeMap$$module$build$src$core$registry},nameMap$$module$build$src$core$registry=Object.create(null),DEFAULT$$module$build$src$core$registry=\"default\",Type$$module$build$src$core$registry=class{constructor(a){this.name=a}toString(){return this.name}};Type$$module$build$src$core$registry.CONNECTION_CHECKER=new Type$$module$build$src$core$registry(\"connectionChecker\");\nType$$module$build$src$core$registry.CONNECTION_PREVIEWER=new Type$$module$build$src$core$registry(\"connectionPreviewer\");Type$$module$build$src$core$registry.CURSOR=new Type$$module$build$src$core$registry(\"cursor\");Type$$module$build$src$core$registry.EVENT=new Type$$module$build$src$core$registry(\"event\");Type$$module$build$src$core$registry.FIELD=new Type$$module$build$src$core$registry(\"field\");Type$$module$build$src$core$registry.INPUT=new Type$$module$build$src$core$registry(\"input\");\nType$$module$build$src$core$registry.RENDERER=new Type$$module$build$src$core$registry(\"renderer\");Type$$module$build$src$core$registry.TOOLBOX=new Type$$module$build$src$core$registry(\"toolbox\");Type$$module$build$src$core$registry.THEME=new Type$$module$build$src$core$registry(\"theme\");Type$$module$build$src$core$registry.TOOLBOX_ITEM=new Type$$module$build$src$core$registry(\"toolboxItem\");Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX=new Type$$module$build$src$core$registry(\"flyoutsVerticalToolbox\");\nType$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX=new Type$$module$build$src$core$registry(\"flyoutsHorizontalToolbox\");Type$$module$build$src$core$registry.FLYOUT_INFLATER=new Type$$module$build$src$core$registry(\"flyoutInflater\");Type$$module$build$src$core$registry.METRICS_MANAGER=new Type$$module$build$src$core$registry(\"metricsManager\");Type$$module$build$src$core$registry.BLOCK_DRAGGER=new Type$$module$build$src$core$registry(\"blockDragger\");\nType$$module$build$src$core$registry.SERIALIZER=new Type$$module$build$src$core$registry(\"serializer\");Type$$module$build$src$core$registry.ICON=new Type$$module$build$src$core$registry(\"icon\");Type$$module$build$src$core$registry.PASTER=new Type$$module$build$src$core$registry(\"paster\");Type$$module$build$src$core$registry.VARIABLE_MODEL=new Type$$module$build$src$core$registry(\"variableModel\");Type$$module$build$src$core$registry.VARIABLE_MAP=new Type$$module$build$src$core$registry(\"variableMap\");\nvar module$build$src$core$registry={DEFAULT:DEFAULT$$module$build$src$core$registry,TEST_ONLY:TEST_ONLY$$module$build$src$core$registry};module$build$src$core$registry.Type=Type$$module$build$src$core$registry;module$build$src$core$registry.getAllItems=getAllItems$$module$build$src$core$registry;module$build$src$core$registry.getClass=getClass$$module$build$src$core$registry;module$build$src$core$registry.getClassFromOptions=getClassFromOptions$$module$build$src$core$registry;\nmodule$build$src$core$registry.getObject=getObject$$module$build$src$core$registry;module$build$src$core$registry.hasItem=hasItem$$module$build$src$core$registry;module$build$src$core$registry.register=register$$module$build$src$core$registry;module$build$src$core$registry.unregister=unregister$$module$build$src$core$registry;var Blocks$$module$build$src$core$blocks=Object.create(null),module$build$src$core$blocks={Blocks:Blocks$$module$build$src$core$blocks};var LONGPRESS$$module$build$src$core$touch=750,TOUCH_ENABLED$$module$build$src$core$touch=\"ontouchstart\"in globalThis||!!(globalThis.document&&document.documentElement&&\"ontouchstart\"in document.documentElement)||!(!globalThis.navigator||!globalThis.navigator.maxTouchPoints&&!globalThis.navigator.msMaxTouchPoints),touchIdentifier_$$module$build$src$core$touch=null,TOUCH_MAP$$module$build$src$core$touch={mousedown:[\"pointerdown\"],mouseenter:[\"pointerenter\"],mouseleave:[\"pointerleave\"],mousemove:[\"pointermove\"],\nmouseout:[\"pointerout\"],mouseover:[\"pointerover\"],mouseup:[\"pointerup\",\"pointercancel\"],touchend:[\"pointerup\"],touchcancel:[\"pointercancel\"]},longPid_$$module$build$src$core$touch=0,module$build$src$core$touch={TOUCH_ENABLED:TOUCH_ENABLED$$module$build$src$core$touch,TOUCH_MAP:TOUCH_MAP$$module$build$src$core$touch};module$build$src$core$touch.checkTouchIdentifier=checkTouchIdentifier$$module$build$src$core$touch;module$build$src$core$touch.clearTouchIdentifier=clearTouchIdentifier$$module$build$src$core$touch;\nmodule$build$src$core$touch.getTouchIdentifierFromEvent=getTouchIdentifierFromEvent$$module$build$src$core$touch;module$build$src$core$touch.longStart=longStart$$module$build$src$core$touch;module$build$src$core$touch.longStop=longStop$$module$build$src$core$touch;module$build$src$core$touch.shouldHandleEvent=shouldHandleEvent$$module$build$src$core$touch;var rawUserAgent$$module$build$src$core$utils$useragent,isJavaFx$$module$build$src$core$utils$useragent,isWebKit$$module$build$src$core$utils$useragent,isGecko$$module$build$src$core$utils$useragent,isAndroid$$module$build$src$core$utils$useragent,isIPad$$module$build$src$core$utils$useragent,isIPhone$$module$build$src$core$utils$useragent,isMac$$module$build$src$core$utils$useragent,isTablet$$module$build$src$core$utils$useragent,isMobile$$module$build$src$core$utils$useragent;\n(function(a){function b(d){return c.includes(d.toUpperCase())}rawUserAgent$$module$build$src$core$utils$useragent=a;const c=rawUserAgent$$module$build$src$core$utils$useragent.toUpperCase();isJavaFx$$module$build$src$core$utils$useragent=b(\"JavaFX\");isWebKit$$module$build$src$core$utils$useragent=b(\"WebKit\");isGecko$$module$build$src$core$utils$useragent=b(\"Gecko\")&&!isWebKit$$module$build$src$core$utils$useragent;isAndroid$$module$build$src$core$utils$useragent=b(\"Android\");a=globalThis.navigator&&\nglobalThis.navigator.maxTouchPoints;isIPad$$module$build$src$core$utils$useragent=b(\"iPad\")||b(\"Macintosh\")&&a>0;isIPhone$$module$build$src$core$utils$useragent=b(\"iPhone\")&&!isIPad$$module$build$src$core$utils$useragent;isMac$$module$build$src$core$utils$useragent=b(\"Macintosh\");isTablet$$module$build$src$core$utils$useragent=isIPad$$module$build$src$core$utils$useragent||isAndroid$$module$build$src$core$utils$useragent&&!b(\"Mobile\")||b(\"Silk\");isMobile$$module$build$src$core$utils$useragent=!isTablet$$module$build$src$core$utils$useragent&&\n(isIPhone$$module$build$src$core$utils$useragent||isAndroid$$module$build$src$core$utils$useragent)})(globalThis.navigator&&globalThis.navigator.userAgent||\"\");\nvar raw$$module$build$src$core$utils$useragent=rawUserAgent$$module$build$src$core$utils$useragent,JavaFx$$module$build$src$core$utils$useragent=isJavaFx$$module$build$src$core$utils$useragent,GECKO$$module$build$src$core$utils$useragent=isGecko$$module$build$src$core$utils$useragent,ANDROID$$module$build$src$core$utils$useragent=isAndroid$$module$build$src$core$utils$useragent,IPAD$$module$build$src$core$utils$useragent=isIPad$$module$build$src$core$utils$useragent,IPHONE$$module$build$src$core$utils$useragent=\nisIPhone$$module$build$src$core$utils$useragent,MAC$$module$build$src$core$utils$useragent=isMac$$module$build$src$core$utils$useragent,MOBILE$$module$build$src$core$utils$useragent=isMobile$$module$build$src$core$utils$useragent,module$build$src$core$utils$useragent={ANDROID:ANDROID$$module$build$src$core$utils$useragent,GECKO:GECKO$$module$build$src$core$utils$useragent,IPAD:IPAD$$module$build$src$core$utils$useragent,IPHONE:IPHONE$$module$build$src$core$utils$useragent,JavaFx:JavaFx$$module$build$src$core$utils$useragent,\nMAC:MAC$$module$build$src$core$utils$useragent,MOBILE:MOBILE$$module$build$src$core$utils$useragent,raw:raw$$module$build$src$core$utils$useragent};var LINE_MODE_MULTIPLIER$$module$build$src$core$browser_events=40,PAGE_MODE_MULTIPLIER$$module$build$src$core$browser_events=125,module$build$src$core$browser_events={};module$build$src$core$browser_events.bind=bind$$module$build$src$core$browser_events;module$build$src$core$browser_events.conditionalBind=conditionalBind$$module$build$src$core$browser_events;module$build$src$core$browser_events.getScrollDeltaPixels=getScrollDeltaPixels$$module$build$src$core$browser_events;\nmodule$build$src$core$browser_events.isRightButton=isRightButton$$module$build$src$core$browser_events;module$build$src$core$browser_events.isTargetInput=isTargetInput$$module$build$src$core$browser_events;module$build$src$core$browser_events.mouseToSvg=mouseToSvg$$module$build$src$core$browser_events;module$build$src$core$browser_events.unbind=unbind$$module$build$src$core$browser_events;var EventType$$module$build$src$core$events$type;\n(function(a){a.BLOCK_CREATE=\"create\";a.BLOCK_DELETE=\"delete\";a.BLOCK_CHANGE=\"change\";a.BLOCK_FIELD_INTERMEDIATE_CHANGE=\"block_field_intermediate_change\";a.BLOCK_MOVE=\"move\";a.VAR_CREATE=\"var_create\";a.VAR_DELETE=\"var_delete\";a.VAR_RENAME=\"var_rename\";a.VAR_TYPE_CHANGE=\"var_type_change\";a.UI=\"ui\";a.BLOCK_DRAG=\"drag\";a.SELECTED=\"selected\";a.CLICK=\"click\";a.MARKER_MOVE=\"marker_move\";a.BUBBLE_OPEN=\"bubble_open\";a.TRASHCAN_OPEN=\"trashcan_open\";a.TOOLBOX_ITEM_SELECT=\"toolbox_item_select\";a.THEME_CHANGE=\n\"theme_change\";a.VIEWPORT_CHANGE=\"viewport_change\";a.COMMENT_CREATE=\"comment_create\";a.COMMENT_DELETE=\"comment_delete\";a.COMMENT_CHANGE=\"comment_change\";a.COMMENT_MOVE=\"comment_move\";a.COMMENT_RESIZE=\"comment_resize\";a.COMMENT_DRAG=\"comment_drag\";a.COMMENT_COLLAPSE=\"comment_collapse\";a.FINISHED_LOADING=\"finished_loading\"})(EventType$$module$build$src$core$events$type||(EventType$$module$build$src$core$events$type={}));\nvar BUMP_EVENTS$$module$build$src$core$events$type=[EventType$$module$build$src$core$events$type.BLOCK_CREATE,EventType$$module$build$src$core$events$type.BLOCK_MOVE,EventType$$module$build$src$core$events$type.COMMENT_CREATE,EventType$$module$build$src$core$events$type.COMMENT_MOVE],module$build$src$core$events$type={BUMP_EVENTS:BUMP_EVENTS$$module$build$src$core$events$type};module$build$src$core$events$type.EventType=EventType$$module$build$src$core$events$type;var soup$$module$build$src$core$utils$idgenerator=\"!#$%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",internal$$module$build$src$core$utils$idgenerator={genUid:()=>{const a=soup$$module$build$src$core$utils$idgenerator.length,b=[];for(let c=0;c<20;c++)b[c]=soup$$module$build$src$core$utils$idgenerator.charAt(Math.random()*a);return b.join(\"\")}},TEST_ONLY$$module$build$src$core$utils$idgenerator=internal$$module$build$src$core$utils$idgenerator,nextId$$module$build$src$core$utils$idgenerator=\n0,module$build$src$core$utils$idgenerator={TEST_ONLY:internal$$module$build$src$core$utils$idgenerator};module$build$src$core$utils$idgenerator.genUid=genUid$$module$build$src$core$utils$idgenerator;module$build$src$core$utils$idgenerator.getNextUniqueId=getNextUniqueId$$module$build$src$core$utils$idgenerator;var module$build$src$core$events$predicates={};module$build$src$core$events$predicates.isBlockChange=isBlockChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockCreate=isBlockCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockDelete=isBlockDelete$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockDrag=isBlockDrag$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isBlockFieldIntermediateChange=isBlockFieldIntermediateChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockMove=isBlockMove$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBubbleOpen=isBubbleOpen$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isClick=isClick$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isCommentChange=isCommentChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentCollapse=isCommentCollapse$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentCreate=isCommentCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentDelete=isCommentDelete$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isCommentDrag=isCommentDrag$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentMove=isCommentMove$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentResize=isCommentResize$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isFinishedLoading=isFinishedLoading$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isSelected=isSelected$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isThemeChange=isThemeChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isToolboxItemSelect=isToolboxItemSelect$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isTrashcanOpen=isTrashcanOpen$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isVarCreate=isVarCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isVarDelete=isVarDelete$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isVarRename=isVarRename$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isViewportChange=isViewportChange$$module$build$src$core$events$predicates;var group$$module$build$src$core$events$utils=\"\",recordUndo$$module$build$src$core$events$utils=!0,disabled$$module$build$src$core$events$utils=0,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils=\"ORPHANED_BLOCK\",FIRE_QUEUE$$module$build$src$core$events$utils=[],TEST_ONLY$$module$build$src$core$events$utils={FIRE_QUEUE:FIRE_QUEUE$$module$build$src$core$events$utils,enqueueEvent:enqueueEvent$$module$build$src$core$events$utils,fireNow:fireNow$$module$build$src$core$events$utils,fireInternal:fireInternal$$module$build$src$core$events$utils,\nsetGroupInternal:setGroupInternal$$module$build$src$core$events$utils},module$build$src$core$events$utils={TEST_ONLY:TEST_ONLY$$module$build$src$core$events$utils};module$build$src$core$events$utils.clearPendingUndo=clearPendingUndo$$module$build$src$core$events$utils;module$build$src$core$events$utils.disable=$.disable$$module$build$src$core$events$utils;module$build$src$core$events$utils.disableOrphans=disableOrphans$$module$build$src$core$events$utils;\nmodule$build$src$core$events$utils.enable=$.enable$$module$build$src$core$events$utils;module$build$src$core$events$utils.filter=filter$$module$build$src$core$events$utils;module$build$src$core$events$utils.fire=fire$$module$build$src$core$events$utils;module$build$src$core$events$utils.fromJson=fromJson$$module$build$src$core$events$utils;module$build$src$core$events$utils.get=get$$module$build$src$core$events$utils;module$build$src$core$events$utils.getDescendantIds=getDescendantIds$$module$build$src$core$events$utils;\nmodule$build$src$core$events$utils.getGroup=$.getGroup$$module$build$src$core$events$utils;module$build$src$core$events$utils.getRecordUndo=getRecordUndo$$module$build$src$core$events$utils;module$build$src$core$events$utils.isEnabled=isEnabled$$module$build$src$core$events$utils;module$build$src$core$events$utils.setGroup=$.setGroup$$module$build$src$core$events$utils;module$build$src$core$events$utils.setRecordUndo=$.setRecordUndo$$module$build$src$core$events$utils;var SVG_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/2000/svg\",HTML_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/1999/xhtml\",XLINK_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/1999/xlink\",NodeType$$module$build$src$core$utils$dom;(function(a){a[a.ELEMENT_NODE=1]=\"ELEMENT_NODE\";a[a.TEXT_NODE=3]=\"TEXT_NODE\";a[a.COMMENT_NODE=8]=\"COMMENT_NODE\"})(NodeType$$module$build$src$core$utils$dom||(NodeType$$module$build$src$core$utils$dom={}));\nvar cacheWidths$$module$build$src$core$utils$dom=null,cacheReference$$module$build$src$core$utils$dom=0,canvasContext$$module$build$src$core$utils$dom=null,module$build$src$core$utils$dom={HTML_NS:HTML_NS$$module$build$src$core$utils$dom};module$build$src$core$utils$dom.NodeType=NodeType$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.SVG_NS=SVG_NS$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.XLINK_NS=XLINK_NS$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.addClass=addClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.createSvgElement=createSvgElement$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getFastTextWidth=getFastTextWidth$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getFastTextWidthWithSizeString=getFastTextWidthWithSizeString$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getTextWidth=getTextWidth$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.hasClass=hasClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.insertAfter=insertAfter$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.measureFontMetrics=measureFontMetrics$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeClass=removeClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeClasses=removeClasses$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeNode=removeNode$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.setCssTransform=setCssTransform$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.startTextWidthCache=startTextWidthCache$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.stopTextWidthCache=stopTextWidthCache$$module$build$src$core$utils$dom;var FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser=class{static findFocusedNode(a){var b=a.getRootFocusableNode();if(!b.canBeFocused())return null;var c=b.getFocusableElement();if(hasClass$$module$build$src$core$utils$dom(c,FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME)||hasClass$$module$build$src$core$utils$dom(c,FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME))return b;\nb=c.querySelector(this.ACTIVE_FOCUS_NODE_CSS_SELECTOR);if(b instanceof HTMLElement||b instanceof SVGElement)if(b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(b,a))return b;c=c.querySelector(this.PASSIVE_FOCUS_NODE_CSS_SELECTOR);if(c instanceof HTMLElement||c instanceof SVGElement)if(a=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(c,a))return a;return null}static findFocusableNodeFor(a,b){if(!a.id||\na.id===\"null\"||b.getNestedTrees().map(e=>FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(a,e)).findIndex(e=>!!e)!==-1)return null;var c=b.getRootFocusableNode();if(c.canBeFocused()&&a===c.getFocusableElement())return c;var d;if(c=(d=b.lookUpFocusableNode(a.id))!=null?d:null)return c;d=a.parentElement;return!c&&d?FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(d,b):null}};\nFocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME=\"blocklyActiveFocus\";FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME=\"blocklyPassiveFocus\";FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_FOCUS_NODE_CSS_SELECTOR=`.${FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME}`;\nFocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_FOCUS_NODE_CSS_SELECTOR=`.${FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME}`;var module$build$src$core$utils$focusable_tree_traverser={};module$build$src$core$utils$focusable_tree_traverser.FocusableTreeTraverser=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser;var TreeRegistration$$module$build$src$core$focus_manager=class{constructor(a,b){this.tree=a;this.rootShouldBeAutoTabbable=b}},FocusManager$$module$build$src$core$focus_manager=class{constructor(a){this.previouslyFocusedNode=this.focusedNode=null;this.registeredTrees=[];this.isUpdatingFocusedNode=this.recentlyLostAllFocus=this.lockFocusStateChanges=this.currentlyHoldsEphemeralFocus=!1;const b=c=>{if(!this.isUpdatingFocusedNode){this.recentlyLostAllFocus=!c;var d=null;if(c instanceof HTMLElement||\nc instanceof SVGElement)for(var e of this.registeredTrees)if(d=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(c,e.tree))break;if(d&&d.canBeFocused()){c=d.getFocusableTree();let f;e=(f=this.focusedNode)==null?void 0:f.getFocusableTree();d===c.getRootFocusableNode()&&c!==e?this.focusTree(c):this.focusNode(d)}else this.defocusCurrentFocusedNode()}};a(\"focusin\",c=>{c instanceof FocusEvent&&b(document.activeElement)});a(\"focusout\",c=>{c instanceof FocusEvent&&\nb(c.relatedTarget)})}registerTree(a,b=!1){this.ensureManagerIsUnlocked();if(this.isRegistered(a))throw Error(`Attempted to re-register already registered tree: ${a}.`);this.registeredTrees.push(new TreeRegistration$$module$build$src$core$focus_manager(a,b));const c=a.getRootFocusableNode().getFocusableElement();if(!c.id||c.id===\"null\")throw Error(\"Attempting to register a tree with a root element that has an \"+`invalid ID: ${a}.`);b&&(c.tabIndex=0)}isRegistered(a){return!!this.lookUpRegistration(a)}lookUpRegistration(a){let b;\nreturn(b=this.registeredTrees.find(c=>c.tree===a))!=null?b:null}unregisterTree(a){this.ensureManagerIsUnlocked();if(!this.isRegistered(a))throw Error(`Attempted to unregister not registered tree: ${a}.`);var b=this.registeredTrees.findIndex(e=>e.tree===a);const c=this.registeredTrees[b];this.registeredTrees.splice(b,1);b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(a);const d=a.getRootFocusableNode();b&&this.removeHighlight(b);this.focusedNode!==b&&\nthis.focusedNode!==d||this.updateFocusedNode(null);this.removeHighlight(d);c.rootShouldBeAutoTabbable&&a.getRootFocusableNode().getFocusableElement().removeAttribute(\"tabindex\")}getFocusedTree(){let a,b;return(b=(a=this.focusedNode)==null?void 0:a.getFocusableTree())!=null?b:null}getFocusedNode(){return this.focusedNode}focusTree(a){this.ensureManagerIsUnlocked();if(!this.isRegistered(a))throw Error(`Attempted to focus unregistered tree: ${a}.`);const b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(a),\nc=a.getRestoredFocusableNode(b);a=a.getRootFocusableNode();let d;this.focusNode((d=c!=null?c:b)!=null?d:a)}focusNode(a){this.ensureManagerIsUnlocked();const b=!this.currentlyHoldsEphemeralFocus;b&&(this.isUpdatingFocusedNode=!0);var c,d=((c=this.focusedNode)==null?void 0:c.getFocusableElement())!==document.activeElement;if(this.focusedNode!==a||d)if(a.canBeFocused()){c=a.getFocusableTree();if(!this.isRegistered(c))throw Error(`Attempted to focus unregistered node: ${a}.`);d=a.getFocusableElement();\nd.id&&d.id!==\"null\"||console.warn(\"Trying to focus a node that has an invalid ID.\");var e=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(d,c);d=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(c);var f=a;if(e!==a){f=c.getRestoredFocusableNode(d);a=c.getRootFocusableNode();var g;f=(g=f!=null?f:d)!=null?g:a}a=this.focusedNode;g=a==null?void 0:a.getFocusableTree();a&&this.passivelyFocusNode(a,c);c=c.getRootFocusableNode();\nd&&this.removeHighlight(d);c!==f&&this.removeHighlight(c);this.currentlyHoldsEphemeralFocus||this.activelyFocusNode(f,g!=null?g:null);this.updateFocusedNode(f)}else console.warn(\"Trying to focus a node that can't be focused.\");b&&(this.isUpdatingFocusedNode=!1)}takeEphemeralFocus(a){this.ensureManagerIsUnlocked();if(this.currentlyHoldsEphemeralFocus)throw Error(\"Attempted to take ephemeral focus when it's already held, \"+`with new element: ${a}.`);this.currentlyHoldsEphemeralFocus=!0;this.focusedNode&&\nthis.passivelyFocusNode(this.focusedNode,null);a.focus({preventScroll:!0});let b=!1;return()=>{if(b)throw Error(\"Attempted to finish ephemeral focus twice for element: \"+`${a}.`);b=!0;this.currentlyHoldsEphemeralFocus=!1;if(this.focusedNode){this.activelyFocusNode(this.focusedNode,null);const c=this.focusedNode;setTimeout(()=>{!this.focusedNode&&this.previouslyFocusedNode===c&&this.recentlyLostAllFocus&&this.focusNode(c)},0)}}}ephemeralFocusTaken(){return this.currentlyHoldsEphemeralFocus}ensureManagerIsUnlocked(){if(this.lockFocusStateChanges)throw Error(\"FocusManager state changes cannot happen in a tree/node focus/blur callback.\");\n}updateFocusedNode(a){this.previouslyFocusedNode=this.focusedNode;this.focusedNode=a}defocusCurrentFocusedNode(){this.focusedNode&&!this.currentlyHoldsEphemeralFocus&&(this.passivelyFocusNode(this.focusedNode,null),this.updateFocusedNode(null))}activelyFocusNode(a,b){this.lockFocusStateChanges=!0;const c=a.getFocusableTree(),d=a.getFocusableElement();let e;const f=(e=this.lookUpRegistration(c))==null?void 0:e.rootShouldBeAutoTabbable;c!==b&&(c.onTreeFocus(a,b),f&&(c.getRootFocusableNode().getFocusableElement().tabIndex=\n-1));a.onNodeFocus();this.lockFocusStateChanges=!1;f&&a===c.getRootFocusableNode()||d.hasAttribute(\"tabindex\")||(d.tabIndex=-1);this.setNodeToVisualActiveFocus(a);d.focus({preventScroll:!0})}passivelyFocusNode(a,b){this.lockFocusStateChanges=!0;const c=a.getFocusableTree();if(c!==b){c.onTreeBlur(b);let d;if((d=this.lookUpRegistration(c))==null?0:d.rootShouldBeAutoTabbable)c.getRootFocusableNode().getFocusableElement().tabIndex=0}a.onNodeBlur();this.lockFocusStateChanges=!1;c!==b&&this.setNodeToVisualPassiveFocus(a)}setNodeToVisualActiveFocus(a){a=\na.getFocusableElement();addClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}setNodeToVisualPassiveFocus(a){a=a.getFocusableElement();removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);addClass$$module$build$src$core$utils$dom(a,\nFocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}removeHighlight(a){a=a.getFocusableElement();removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}static getFocusManager(){FocusManager$$module$build$src$core$focus_manager.focusManager||(FocusManager$$module$build$src$core$focus_manager.focusManager=\nnew FocusManager$$module$build$src$core$focus_manager(document.addEventListener));return FocusManager$$module$build$src$core$focus_manager.focusManager}};FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME=\"blocklyActiveFocus\";FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME=\"blocklyPassiveFocus\";FocusManager$$module$build$src$core$focus_manager.focusManager=null;var module$build$src$core$focus_manager={};\nmodule$build$src$core$focus_manager.FocusManager=FocusManager$$module$build$src$core$focus_manager;module$build$src$core$focus_manager.getFocusManager=$.getFocusManager$$module$build$src$core$focus_manager;var module$build$src$core$interfaces$i_focusable_node={};module$build$src$core$interfaces$i_focusable_node.isFocusableNode=isFocusableNode$$module$build$src$core$interfaces$i_focusable_node;var module$build$src$core$interfaces$i_selectable={};module$build$src$core$interfaces$i_selectable.isSelectable=isSelectable$$module$build$src$core$interfaces$i_selectable;var module$build$src$core$utils$object={};module$build$src$core$utils$object.deepMerge=deepMerge$$module$build$src$core$utils$object;var ShortcutRegistry$$module$build$src$core$shortcut_registry=class{constructor(){this.shortcuts=new Map;this.keyMap=new Map;this.reset()}reset(){this.shortcuts.clear();this.keyMap.clear()}register(a,b){if(this.shortcuts.get(a.name)&&!b)throw Error(`Shortcut named \"${a.name}\" already exists.`);this.shortcuts.set(a.name,a);b=a.keyCodes;if(b==null?0:b.length)for(const c of b)this.addKeyMapping(c,a.name,!!a.allowCollision)}unregister(a){if(!this.shortcuts.get(a))return console.warn(`Keyboard shortcut named \"${a}\" not found.`),\n!1;this.removeAllKeyMappings(a);this.shortcuts.delete(a);return!0}addKeyMapping(a,b,c){a=`${a}`;const d=this.keyMap.get(a);if(d&&!c)throw Error(`Shortcut named \"${b}\" collides with shortcuts \"${d}\"`);d&&c?d.unshift(b):this.keyMap.set(a,[b])}removeKeyMapping(a,b,c){const d=this.keyMap.get(a);if(!d)return c||console.warn(`No keyboard shortcut named \"${b}\" registered with key code \"${a}\"`),!1;const e=d.indexOf(b);if(e>-1)return d.splice(e,1),d.length===0&&this.keyMap.delete(a),!0;c||console.warn(`No keyboard shortcut named \"${b}\" registered with key code \"${a}\"`);\nreturn!1}removeAllKeyMappings(a){for(const b of this.keyMap.keys())this.removeKeyMapping(b,a,!0)}setKeyMap(a){this.keyMap.clear();for(const b in a)this.keyMap.set(b,a[b])}getKeyMap(){const a=Object.create(null);for(const [b,c]of this.keyMap)a[b]=c;return a}getRegistry(){const a=Object.create(null);for(const [b,c]of this.shortcuts)a[b]=c;return deepMerge$$module$build$src$core$utils$object(Object.create(null),a)}onKeyDown(a,b){var c=this.serializeKeyEvent(b);c=this.getShortcutNamesByKeyCode(c);if(!c)return!1;\nfor(const d of c){c=this.shortcuts.get(d);let e;if(!c||c.preconditionFn&&!c.preconditionFn(a,{focusedNode:(e=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode())!=null?e:void 0}))continue;let f,g,h;if((g=(f=c).callback)==null?0:g.call(f,a,b,c,{focusedNode:(h=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode())!=null?h:void 0}))return!0}return!1}getShortcutNamesByKeyCode(a){let b;return((b=this.keyMap.get(a))==null?void 0:b.slice())||[]}getKeyCodesByShortcutName(a){const b=\n[];for(const [c,d]of this.keyMap)d.indexOf(a)>-1&&b.push(c);return b}serializeKeyEvent(a){let b=\"\";for(const c in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys)a.getModifierState(c)&&(b!==\"\"&&(b+=\"+\"),b+=c);b!==\"\"&&a.keyCode?b+=\"+\"+a.keyCode:a.keyCode&&(b=String(a.keyCode));return b}checkModifiers(a){for(const b of a)if(!(b in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys))throw Error(b+\" is not a valid modifier key.\");}createSerializedKey(a,b){let c=\n\"\";if(b){this.checkModifiers(b);for(const d in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys)b.includes(ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys[d])&&(c!==\"\"&&(c+=\"+\"),c+=d)}c!==\"\"&&a?c+=\"+\"+a:a&&(c=`${a}`);return c}};ShortcutRegistry$$module$build$src$core$shortcut_registry.registry=new ShortcutRegistry$$module$build$src$core$shortcut_registry;\n(function(a){a=a.modifierKeys||(a.modifierKeys={});a[a.Shift=16]=\"Shift\";a[a.Control=17]=\"Control\";a[a.Alt=18]=\"Alt\";a[a.Meta=91]=\"Meta\"})(ShortcutRegistry$$module$build$src$core$shortcut_registry||(ShortcutRegistry$$module$build$src$core$shortcut_registry={}));var module$build$src$core$shortcut_registry={};module$build$src$core$shortcut_registry.ShortcutRegistry=ShortcutRegistry$$module$build$src$core$shortcut_registry;var WorkspaceDB_$$module$build$src$core$common=Object.create(null),mainWorkspace$$module$build$src$core$common,parentContainer$$module$build$src$core$common,draggingConnections$$module$build$src$core$common=[],TEST_ONLY$$module$build$src$core$common={defineBlocksWithJsonArrayInternal:defineBlocksWithJsonArrayInternal$$module$build$src$core$common},module$build$src$core$common={TEST_ONLY:TEST_ONLY$$module$build$src$core$common};module$build$src$core$common.createBlockDefinitionsFromJsonArray=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common;\nmodule$build$src$core$common.defineBlocks=$.defineBlocks$$module$build$src$core$common;module$build$src$core$common.defineBlocksWithJsonArray=defineBlocksWithJsonArray$$module$build$src$core$common;module$build$src$core$common.draggingConnections=draggingConnections$$module$build$src$core$common;module$build$src$core$common.fireSelectedEvent=fireSelectedEvent$$module$build$src$core$common;module$build$src$core$common.getAllWorkspaces=getAllWorkspaces$$module$build$src$core$common;\nmodule$build$src$core$common.getBlockTypeCounts=getBlockTypeCounts$$module$build$src$core$common;module$build$src$core$common.getMainWorkspace=getMainWorkspace$$module$build$src$core$common;module$build$src$core$common.getParentContainer=getParentContainer$$module$build$src$core$common;module$build$src$core$common.getSelected=getSelected$$module$build$src$core$common;module$build$src$core$common.getWorkspaceById=getWorkspaceById$$module$build$src$core$common;\nmodule$build$src$core$common.globalShortcutHandler=globalShortcutHandler$$module$build$src$core$common;module$build$src$core$common.registerWorkspace=registerWorkspace$$module$build$src$core$common;module$build$src$core$common.setMainWorkspace=setMainWorkspace$$module$build$src$core$common;module$build$src$core$common.setParentContainer=setParentContainer$$module$build$src$core$common;module$build$src$core$common.setSelected=setSelected$$module$build$src$core$common;\nmodule$build$src$core$common.svgResize=svgResize$$module$build$src$core$common;module$build$src$core$common.unregisterWorkpace=unregisterWorkpace$$module$build$src$core$common;var Abstract$$module$build$src$core$events$events_abstract=class{constructor(){this.workspaceId=void 0;this.isUiEvent=!1;this.type=\"\";this.group=$.getGroup$$module$build$src$core$events$utils();this.recordUndo=getRecordUndo$$module$build$src$core$events$utils()}toJson(){return{type:this.type,group:this.group}}static fromJson(a,b,c){c.isBlank=!1;c.group=a.group||\"\";c.workspaceId=b.id;return c}isNull(){return!1}run(a){}getEventWorkspace_(){let a;this.workspaceId&&(a=getWorkspaceById$$module$build$src$core$common(this.workspaceId));\nif(!a)throw Error(\"Workspace is null. Event must have been generated from real Blockly events.\");return a}},module$build$src$core$events$events_abstract={};module$build$src$core$events$events_abstract.Abstract=Abstract$$module$build$src$core$events$events_abstract;var UiBase$$module$build$src$core$events$events_ui_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.recordUndo=!1;this.isUiEvent=!0;this.isBlank=typeof a===\"undefined\";this.workspaceId=a?a:\"\"}},module$build$src$core$events$events_ui_base={};module$build$src$core$events$events_ui_base.UiBase=UiBase$$module$build$src$core$events$events_ui_base;var Click$$module$build$src$core$events$events_click=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b,c){b=a?a.workspace.id:b;b===null&&(b=void 0);super(b);this.type=EventType$$module$build$src$core$events$type.CLICK;this.blockId=a?a.id:void 0;this.targetType=c}toJson(){const a=super.toJson();if(!this.targetType)throw Error(\"The click target type is undefined. Either pass a block to the constructor, or call fromJson\");a.targetType=this.targetType;a.blockId=this.blockId;\nreturn a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new Click$$module$build$src$core$events$events_click);b.targetType=a.targetType;b.blockId=a.blockId;return b}},ClickTarget$$module$build$src$core$events$events_click;(function(a){a.BLOCK=\"block\";a.WORKSPACE=\"workspace\";a.ZOOM_CONTROLS=\"zoom_controls\"})(ClickTarget$$module$build$src$core$events$events_click||(ClickTarget$$module$build$src$core$events$events_click={}));\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.CLICK,Click$$module$build$src$core$events$events_click);var module$build$src$core$events$events_click={};module$build$src$core$events$events_click.Click=Click$$module$build$src$core$events$events_click;module$build$src$core$events$events_click.ClickTarget=ClickTarget$$module$build$src$core$events$events_click;var module$build$src$core$utils$array={};module$build$src$core$utils$array.removeElem=removeElem$$module$build$src$core$utils$array;var Capability$$module$build$src$core$component_manager=class{constructor(a){this.name=a}toString(){return this.name}};Capability$$module$build$src$core$component_manager.POSITIONABLE=new Capability$$module$build$src$core$component_manager(\"positionable\");Capability$$module$build$src$core$component_manager.DRAG_TARGET=new Capability$$module$build$src$core$component_manager(\"drag_target\");Capability$$module$build$src$core$component_manager.DELETE_AREA=new Capability$$module$build$src$core$component_manager(\"delete_area\");\nCapability$$module$build$src$core$component_manager.AUTOHIDEABLE=new Capability$$module$build$src$core$component_manager(\"autohideable\");\nvar ComponentManager$$module$build$src$core$component_manager=class{constructor(){this.componentData=new Map;this.capabilityToComponentIds=new Map}addComponent(a,b){const c=a.component.id;if(!b&&this.componentData.has(c)){var d;throw Error('Plugin \"'+c+'\" with capabilities \"'+((d=this.componentData.get(c))==null?void 0:d.capabilities)+'\" already added.');}this.componentData.set(c,a);b=[];for(d=0;d\n{d.push(this.componentData.get(e))});d.sort(function(e,f){return e.weight-f.weight});d.forEach(function(e){c.push(e.component)})}else a.forEach(d=>{c.push(this.componentData.get(d).component)});return c}};ComponentManager$$module$build$src$core$component_manager.Capability=Capability$$module$build$src$core$component_manager;\n(function(a){a=a.ComponentWeight||(a.ComponentWeight={});a[a.TOOLBOX_WEIGHT=0]=\"TOOLBOX_WEIGHT\";a[a.FLYOUT_WEIGHT=1]=\"FLYOUT_WEIGHT\";a[a.TRASHCAN_WEIGHT=2]=\"TRASHCAN_WEIGHT\";a[a.ZOOM_CONTROLS_WEIGHT=3]=\"ZOOM_CONTROLS_WEIGHT\"})(ComponentManager$$module$build$src$core$component_manager||(ComponentManager$$module$build$src$core$component_manager={}));\nvar ComponentWeight$$module$build$src$core$component_manager=ComponentManager$$module$build$src$core$component_manager.ComponentWeight,module$build$src$core$component_manager={};module$build$src$core$component_manager.ComponentManager=ComponentManager$$module$build$src$core$component_manager;module$build$src$core$component_manager.ComponentWeight=ComponentWeight$$module$build$src$core$component_manager;var injected$$module$build$src$core$css=!1,content$$module$build$src$core$css='\\n.blocklySvg {\\n background-color: #fff;\\n outline: none;\\n overflow: hidden; /* IE overflows by default. */\\n position: absolute;\\n display: block;\\n}\\n\\n.blocklyWidgetDiv {\\n display: none;\\n position: absolute;\\n z-index: 99999; /* big value for bootstrap3 compatibility */\\n}\\n\\n.injectionDiv {\\n height: 100%;\\n position: relative;\\n overflow: hidden; /* So blocks in drag surface disappear at edges */\\n touch-action: none;\\n user-select: none;\\n -webkit-user-select: none;\\n}\\n\\n.blocklyBlockCanvas.blocklyCanvasTransitioning,\\n.blocklyBubbleCanvas.blocklyCanvasTransitioning {\\n transition: transform .5s;\\n}\\n\\n.blocklyEmboss {\\n filter: var(--blocklyEmbossFilter);\\n}\\n\\n.blocklyTooltipDiv {\\n background-color: #ffffc7;\\n border: 1px solid #ddc;\\n box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15);\\n color: #000;\\n display: none;\\n font: 9pt sans-serif;\\n opacity: .9;\\n padding: 2px;\\n position: absolute;\\n z-index: 100000; /* big value for bootstrap3 compatibility */\\n}\\n\\n.blocklyDropDownDiv {\\n position: absolute;\\n left: 0;\\n top: 0;\\n z-index: 1000;\\n display: none;\\n border: 1px solid;\\n border-color: #dadce0;\\n background-color: #fff;\\n border-radius: 2px;\\n padding: 4px;\\n box-shadow: 0 0 3px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownDiv:focus {\\n box-shadow: 0 0 6px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownContent {\\n max-height: 300px; /* @todo: spec for maximum height. */\\n}\\n\\n.blocklyDropDownArrow {\\n position: absolute;\\n left: 0;\\n top: 0;\\n width: 16px;\\n height: 16px;\\n z-index: -1;\\n background-color: inherit;\\n border-color: inherit;\\n border-top: 1px solid;\\n border-left: 1px solid;\\n border-top-left-radius: 4px;\\n border-color: inherit;\\n}\\n\\n.blocklyHighlighted>.blocklyPath {\\n filter: var(--blocklyEmbossFilter);\\n}\\n\\n.blocklyHighlightedConnectionPath {\\n fill: none;\\n stroke: #fc3;\\n stroke-width: 4px;\\n}\\n\\n.blocklyPathLight {\\n fill: none;\\n stroke-linecap: round;\\n stroke-width: 1;\\n}\\n\\n.blocklySelected>.blocklyPathLight {\\n display: none;\\n}\\n\\n.blocklyDraggable {\\n cursor: grab;\\n cursor: -webkit-grab;\\n}\\n\\n.blocklyDragging {\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n /* Drag surface disables events to not block the toolbox, so we have to\\n * reenable them here for the cursor values to work. */\\n pointer-events: auto;\\n}\\n\\n /* Changes cursor on mouse down. Not effective in Firefox because of\\n https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */\\n.blocklyDraggable:active {\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n}\\n\\n.blocklyDragging.blocklyDraggingDelete,\\n.blocklyDragging.blocklyDraggingDelete .blocklyField {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyDragging>.blocklyPath,\\n.blocklyDragging>.blocklyPathLight {\\n fill-opacity: .8;\\n stroke-opacity: .8;\\n}\\n\\n.blocklyDragging>.blocklyPathDark {\\n display: none;\\n}\\n\\n.blocklyDisabledPattern>.blocklyPath {\\n fill: var(--blocklyDisabledPattern);\\n fill-opacity: .5;\\n stroke-opacity: .5;\\n}\\n\\n.blocklyDisabled>.blocklyPathLight,\\n.blocklyDisabled>.blocklyPathDark {\\n display: none;\\n}\\n\\n.blocklyInsertionMarker>.blocklyPath,\\n.blocklyInsertionMarker>.blocklyPathLight,\\n.blocklyInsertionMarker>.blocklyPathDark {\\n fill-opacity: .2;\\n stroke: none;\\n}\\n\\n.blocklyNonEditableField>text {\\n pointer-events: none;\\n}\\n\\n.blocklyFlyout {\\n position: absolute;\\n z-index: 20;\\n}\\n\\n.blocklyText text {\\n cursor: default;\\n}\\n\\n/*\\n Don\\'t allow users to select text. It gets annoying when trying to\\n drag a block and selected text moves instead.\\n*/\\n.blocklySvg text {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n cursor: inherit;\\n}\\n\\n.blocklyIconGroup {\\n cursor: default;\\n}\\n\\n.blocklyIconGroup:not(:hover):not(:focus),\\n.blocklyIconGroupReadonly {\\n opacity: .6;\\n}\\n\\n.blocklyIconShape {\\n fill: #00f;\\n stroke: #fff;\\n stroke-width: 1px;\\n}\\n\\n.blocklyIconSymbol {\\n fill: #fff;\\n}\\n\\n.blocklyMinimalBody {\\n margin: 0;\\n padding: 0;\\n height: 100%;\\n}\\n\\n.blocklyHtmlInput {\\n border: none;\\n border-radius: 4px;\\n height: 100%;\\n margin: 0;\\n outline: none;\\n padding: 0;\\n width: 100%;\\n text-align: center;\\n display: block;\\n box-sizing: border-box;\\n}\\n\\n/* Remove the increase and decrease arrows on the field number editor */\\ninput.blocklyHtmlInput[type=number]::-webkit-inner-spin-button,\\ninput.blocklyHtmlInput[type=number]::-webkit-outer-spin-button {\\n -webkit-appearance: none;\\n margin: 0;\\n}\\n\\ninput[type=number] {\\n -moz-appearance: textfield;\\n}\\n\\n.blocklyMainBackground {\\n stroke-width: 1;\\n stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */\\n}\\n\\n.blocklyMutatorBackground {\\n fill: #fff;\\n stroke: #ddd;\\n stroke-width: 1;\\n}\\n\\n.blocklyFlyoutBackground {\\n fill: #ddd;\\n fill-opacity: .8;\\n}\\n\\n.blocklyMainWorkspaceScrollbar {\\n z-index: 20;\\n}\\n\\n.blocklyFlyoutScrollbar {\\n z-index: 30;\\n}\\n\\n.blocklyScrollbarHorizontal,\\n.blocklyScrollbarVertical {\\n position: absolute;\\n outline: none;\\n}\\n\\n.blocklyScrollbarBackground {\\n opacity: 0;\\n pointer-events: none;\\n}\\n\\n.blocklyScrollbarHandle {\\n fill: #ccc;\\n}\\n\\n.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,\\n.blocklyScrollbarHandle:hover {\\n fill: #bbb;\\n}\\n\\n/* Darken flyout scrollbars due to being on a grey background. */\\n/* By contrast, workspace scrollbars are on a white background. */\\n.blocklyFlyout .blocklyScrollbarHandle {\\n fill: #bbb;\\n}\\n\\n.blocklyFlyout .blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,\\n.blocklyFlyout .blocklyScrollbarHandle:hover {\\n fill: #aaa;\\n}\\n\\n.blocklyInvalidInput {\\n background: #faa;\\n}\\n\\n.blocklyVerticalMarker {\\n stroke-width: 3px;\\n fill: rgba(255,255,255,.5);\\n pointer-events: none;\\n}\\n\\n.blocklyComputeCanvas {\\n position: absolute;\\n width: 0;\\n height: 0;\\n}\\n\\n.blocklyNoPointerEvents {\\n pointer-events: none;\\n}\\n\\n.blocklyContextMenu {\\n border-radius: 4px;\\n max-height: 100%;\\n}\\n\\n.blocklyDropdownMenu {\\n border-radius: 2px;\\n padding: 0 !important;\\n}\\n\\n.blocklyDropdownMenu .blocklyMenuItem {\\n /* 28px on the left for icon or checkbox. */\\n padding-left: 28px;\\n}\\n\\n/* BiDi override for the resting state. */\\n.blocklyDropdownMenu .blocklyMenuItemRtl {\\n /* Flip left/right padding for BiDi. */\\n padding-left: 5px;\\n padding-right: 28px;\\n}\\n\\n.blocklyWidgetDiv .blocklyMenu {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background: #fff;\\n border: 1px solid transparent;\\n box-shadow: 0 0 3px 1px rgba(0,0,0,.3);\\n font: normal 13px Arial, sans-serif;\\n margin: 0;\\n outline: none;\\n padding: 4px 0;\\n position: absolute;\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 100%;\\n z-index: 20000; /* Arbitrary, but some apps depend on it... */\\n}\\n\\n.blocklyWidgetDiv .blocklyMenu:focus {\\n box-shadow: 0 0 6px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownDiv .blocklyMenu {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background: inherit; /* Compatibility with gapi, reset from goog-menu */\\n border: inherit; /* Compatibility with gapi, reset from goog-menu */\\n font: normal 13px \"Helvetica Neue\", Helvetica, sans-serif;\\n outline: none;\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 100%;\\n z-index: 20000; /* Arbitrary, but some apps depend on it... */\\n}\\n\\n/* State: resting. */\\n.blocklyMenuItem {\\n border: none;\\n color: #000;\\n cursor: pointer;\\n list-style: none;\\n margin: 0;\\n /* 7em on the right for shortcut. */\\n min-width: 7em;\\n padding: 6px 15px;\\n white-space: nowrap;\\n}\\n\\n/* State: disabled. */\\n.blocklyMenuItemDisabled {\\n color: #ccc;\\n cursor: inherit;\\n}\\n\\n/* State: hover. */\\n.blocklyMenuItemHighlight {\\n background-color: rgba(0,0,0,.1);\\n}\\n\\n/* State: selected/checked. */\\n.blocklyMenuItemCheckbox {\\n height: 16px;\\n position: absolute;\\n width: 16px;\\n}\\n\\n.blocklyMenuItemSelected .blocklyMenuItemCheckbox {\\n background: url(<<>>/sprites.png) no-repeat -48px -16px;\\n float: left;\\n margin-left: -24px;\\n position: static; /* Scroll with the menu. */\\n}\\n\\n.blocklyMenuItemRtl .blocklyMenuItemCheckbox {\\n float: right;\\n margin-right: -24px;\\n}\\n\\n.blocklyMenuSeparator {\\n background-color: #ccc;\\n height: 1px;\\n border: 0;\\n margin-left: 4px;\\n margin-right: 4px;\\n}\\n\\n.blocklyBlockDragSurface, .blocklyAnimationLayer {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n overflow: visible !important;\\n z-index: 80;\\n pointer-events: none;\\n}\\n\\n.blocklyField {\\n cursor: default;\\n}\\n\\n.blocklyInputField {\\n cursor: text;\\n}\\n\\n.blocklyDragging .blocklyField,\\n.blocklyDragging .blocklyIconGroup {\\n cursor: grabbing;\\n}\\n\\n.blocklyActiveFocus:is(\\n .blocklyFlyout,\\n .blocklyWorkspace,\\n .blocklyField,\\n .blocklyPath,\\n .blocklyHighlightedConnectionPath,\\n .blocklyComment,\\n .blocklyBubble,\\n .blocklyIconGroup,\\n .blocklyTextarea\\n) {\\n outline: none;\\n}\\n',\nmodule$build$src$core$css={};module$build$src$core$css.inject=inject$$module$build$src$core$css;module$build$src$core$css.register=register$$module$build$src$core$css;var Coordinate$$module$build$src$core$utils$coordinate=class{constructor(a,b){this.x=a;this.y=b}clone(){return new Coordinate$$module$build$src$core$utils$coordinate(this.x,this.y)}scale(a){this.x*=a;this.y*=a;return this}translate(a,b){this.x+=a;this.y+=b;return this}static equals(a,b){return a===b?!0:a&&b?a.x===b.x&&a.y===b.y:!1}static distance(a,b){const c=a.x-b.x;a=a.y-b.y;return Math.sqrt(c*c+a*a)}static magnitude(a){return Math.sqrt(a.x*a.x+a.y*a.y)}static difference(a,b){return new Coordinate$$module$build$src$core$utils$coordinate(a.x-\nb.x,a.y-b.y)}static sum(a,b){return new Coordinate$$module$build$src$core$utils$coordinate(a.x+b.x,a.y+b.y)}},module$build$src$core$utils$coordinate={};module$build$src$core$utils$coordinate.Coordinate=Coordinate$$module$build$src$core$utils$coordinate;var Svg$$module$build$src$core$utils$svg=class{constructor(a){this.tagName=a}toString(){return this.tagName}};Svg$$module$build$src$core$utils$svg.ANIMATE=new Svg$$module$build$src$core$utils$svg(\"animate\");Svg$$module$build$src$core$utils$svg.CIRCLE=new Svg$$module$build$src$core$utils$svg(\"circle\");Svg$$module$build$src$core$utils$svg.CLIPPATH=new Svg$$module$build$src$core$utils$svg(\"clipPath\");Svg$$module$build$src$core$utils$svg.DEFS=new Svg$$module$build$src$core$utils$svg(\"defs\");\nSvg$$module$build$src$core$utils$svg.FECOMPOSITE=new Svg$$module$build$src$core$utils$svg(\"feComposite\");Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER=new Svg$$module$build$src$core$utils$svg(\"feComponentTransfer\");Svg$$module$build$src$core$utils$svg.FEFLOOD=new Svg$$module$build$src$core$utils$svg(\"feFlood\");Svg$$module$build$src$core$utils$svg.FEFUNCA=new Svg$$module$build$src$core$utils$svg(\"feFuncA\");Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR=new Svg$$module$build$src$core$utils$svg(\"feGaussianBlur\");\nSvg$$module$build$src$core$utils$svg.FEPOINTLIGHT=new Svg$$module$build$src$core$utils$svg(\"fePointLight\");Svg$$module$build$src$core$utils$svg.FESPECULARLIGHTING=new Svg$$module$build$src$core$utils$svg(\"feSpecularLighting\");Svg$$module$build$src$core$utils$svg.FILTER=new Svg$$module$build$src$core$utils$svg(\"filter\");Svg$$module$build$src$core$utils$svg.FOREIGNOBJECT=new Svg$$module$build$src$core$utils$svg(\"foreignObject\");Svg$$module$build$src$core$utils$svg.G=new Svg$$module$build$src$core$utils$svg(\"g\");\nSvg$$module$build$src$core$utils$svg.IMAGE=new Svg$$module$build$src$core$utils$svg(\"image\");Svg$$module$build$src$core$utils$svg.LINE=new Svg$$module$build$src$core$utils$svg(\"line\");Svg$$module$build$src$core$utils$svg.PATH=new Svg$$module$build$src$core$utils$svg(\"path\");Svg$$module$build$src$core$utils$svg.PATTERN=new Svg$$module$build$src$core$utils$svg(\"pattern\");Svg$$module$build$src$core$utils$svg.POLYGON=new Svg$$module$build$src$core$utils$svg(\"polygon\");\nSvg$$module$build$src$core$utils$svg.RECT=new Svg$$module$build$src$core$utils$svg(\"rect\");Svg$$module$build$src$core$utils$svg.SVG=new Svg$$module$build$src$core$utils$svg(\"svg\");Svg$$module$build$src$core$utils$svg.TEXT=new Svg$$module$build$src$core$utils$svg(\"text\");Svg$$module$build$src$core$utils$svg.TSPAN=new Svg$$module$build$src$core$utils$svg(\"tspan\");var module$build$src$core$utils$svg={};module$build$src$core$utils$svg.Svg=Svg$$module$build$src$core$utils$svg;var Rect$$module$build$src$core$utils$rect=class{constructor(a,b,c,d){this.top=a;this.bottom=b;this.left=c;this.right=d}static from(a){return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}clone(){return new Rect$$module$build$src$core$utils$rect(this.top,this.bottom,this.left,this.right)}getHeight(){return this.bottom-this.top}getWidth(){return this.right-this.left}getOrigin(){return new Coordinate$$module$build$src$core$utils$coordinate(this.left,this.top)}contains(a,\nb){return a>=this.left&&a<=this.right&&b>=this.top&&b<=this.bottom}intersects(a){return this.left<=a.right&&this.right>=a.left&&this.bottom>=a.top&&this.top<=a.bottom}static equals(a,b){return a===b?!0:a&&b?a.top===b.top&&a.bottom===b.bottom&&a.left===b.left&&a.right===b.right:!1}static createFromPoint(a,b,c){const d=a.x;a=a.y;return new Rect$$module$build$src$core$utils$rect(a,a+c,d,d+b)}},module$build$src$core$utils$rect={};module$build$src$core$utils$rect.Rect=Rect$$module$build$src$core$utils$rect;var Size$$module$build$src$core$utils$size=class{constructor(a,b){this.width=a;this.height=b}static equals(a,b){return a===b?!0:a&&b?a.width===b.width&&a.height===b.height:!1}static max(a,b){return new Size$$module$build$src$core$utils$size(Math.max(a.width,b.width),Math.max(a.height,b.height))}static min(a,b){return new Size$$module$build$src$core$utils$size(Math.min(a.width,b.width),Math.min(a.height,b.height))}},module$build$src$core$utils$size={};module$build$src$core$utils$size.Size=Size$$module$build$src$core$utils$size;var TEST_ONLY$$module$build$src$core$utils$style={getSizeInternal:getSizeInternal$$module$build$src$core$utils$style},module$build$src$core$utils$style={TEST_ONLY:TEST_ONLY$$module$build$src$core$utils$style};module$build$src$core$utils$style.getBorderBox=getBorderBox$$module$build$src$core$utils$style;module$build$src$core$utils$style.getComputedStyle=getComputedStyle$$module$build$src$core$utils$style;module$build$src$core$utils$style.getContainerOffsetToScrollInto=getContainerOffsetToScrollInto$$module$build$src$core$utils$style;\nmodule$build$src$core$utils$style.getPageOffset=getPageOffset$$module$build$src$core$utils$style;module$build$src$core$utils$style.getSize=getSize$$module$build$src$core$utils$style;module$build$src$core$utils$style.getViewportPageOffset=getViewportPageOffset$$module$build$src$core$utils$style;module$build$src$core$utils$style.scrollIntoContainerView=scrollIntoContainerView$$module$build$src$core$utils$style;var XY_REGEX$$module$build$src$core$utils$svg_math=/translate\\(\\s*([-+\\d.e]+)([ ,]\\s*([-+\\d.e]+)\\s*)?/,XY_STYLE_REGEX$$module$build$src$core$utils$svg_math=/transform:\\s*translate(?:3d)?\\(\\s*([-+\\d.e]+)\\s*px([ ,]\\s*([-+\\d.e]+)\\s*px)?/,TEST_ONLY$$module$build$src$core$utils$svg_math={XY_REGEX:XY_REGEX$$module$build$src$core$utils$svg_math,XY_STYLE_REGEX:XY_STYLE_REGEX$$module$build$src$core$utils$svg_math},module$build$src$core$utils$svg_math={TEST_ONLY:TEST_ONLY$$module$build$src$core$utils$svg_math};\nmodule$build$src$core$utils$svg_math.getDocumentScroll=getDocumentScroll$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getInjectionDivXY=getInjectionDivXY$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getRelativeXY=getRelativeXY$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getViewportBBox=getViewportBBox$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.screenToWsCoordinates=screenToWsCoordinates$$module$build$src$core$utils$svg_math;\nmodule$build$src$core$utils$svg_math.wsToScreenCoordinates=wsToScreenCoordinates$$module$build$src$core$utils$svg_math;var Scrollbar$$module$build$src$core$scrollbar=class{constructor(a,b,c,d,e){this.workspace=a;this.horizontal=b;this.oldHostMetrics=null;this.ratio=1;this.origin=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.startDragHandle=this.handlePosition=this.handleLength=this.scrollbarLength=this.startDragMouse=0;this.containerVisible=this.isHandleVisible=!0;this.position=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.onMouseMoveWrapper_=this.onMouseUpWrapper_=null;this.pair=\nc||!1;this.margin=e!==void 0?e:Scrollbar$$module$build$src$core$scrollbar.DEFAULT_SCROLLBAR_MARGIN;a=\"blocklyScrollbar\"+(this.horizontal?\"Horizontal\":\"Vertical\");d&&(a+=\" \"+d);this.outerSvg=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{\"class\":a});d=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},this.outerSvg);this.svgBackground=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{\"class\":\"blocklyScrollbarBackground\"},d);a=Math.floor((Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-5)/2);this.svgHandle=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyScrollbarHandle\",rx:a,ry:a},d);this.workspace.getThemeManager().subscribe(this.svgHandle,\"scrollbarColour\",\"fill\");this.workspace.getThemeManager().subscribe(this.svgHandle,\"scrollbarOpacity\",\"fill-opacity\");insertAfter$$module$build$src$core$utils$dom(this.outerSvg,\nthis.workspace.getParentSvg());this.setInitialThickness();b?(this.lengthAttribute_=\"width\",this.positionAttribute_=\"x\"):(this.lengthAttribute_=\"height\",this.positionAttribute_=\"y\");this.onMouseDownBarWrapper_=conditionalBind$$module$build$src$core$browser_events(this.svgBackground,\"pointerdown\",this,this.onMouseDownBar);this.onMouseDownHandleWrapper_=conditionalBind$$module$build$src$core$browser_events(this.svgHandle,\"pointerdown\",this,this.onMouseDownHandle)}setInitialThickness(){const a=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;\nthis.horizontal?(this.svgBackground.setAttribute(\"height\",String(a)),this.outerSvg.setAttribute(\"height\",String(a)),this.svgHandle.setAttribute(\"height\",String(a-5)),this.svgHandle.setAttribute(\"y\",\"2.5\")):(this.svgBackground.setAttribute(\"width\",String(a)),this.outerSvg.setAttribute(\"width\",String(a)),this.svgHandle.setAttribute(\"width\",String(a-5)),this.svgHandle.setAttribute(\"x\",\"2.5\"))}dispose(){this.cleanUp();unbind$$module$build$src$core$browser_events(this.onMouseDownBarWrapper_);unbind$$module$build$src$core$browser_events(this.onMouseDownHandleWrapper_);\nremoveNode$$module$build$src$core$utils$dom(this.outerSvg);this.workspace.getThemeManager().unsubscribe(this.svgHandle)}constrainHandleLength(a){return a=a<=0||isNaN(a)?0:Math.min(a,this.scrollbarLength)}setHandleLength(a){this.handleLength=a;this.svgHandle.setAttribute(this.lengthAttribute_,String(this.handleLength))}constrainHandlePosition(a){return a=a<=0||isNaN(a)?0:Math.min(a,this.scrollbarLength-this.handleLength)}setHandlePosition(a){this.handlePosition=a;this.svgHandle.setAttribute(this.positionAttribute_,\nString(this.handlePosition))}setScrollbarLength(a){this.scrollbarLength=a;this.outerSvg.setAttribute(this.lengthAttribute_,String(this.scrollbarLength));this.svgBackground.setAttribute(this.lengthAttribute_,String(this.scrollbarLength))}setPosition(a,b){this.position.x=a;this.position.y=b;setCssTransform$$module$build$src$core$utils$dom(this.outerSvg,\"translate(\"+(this.position.x+this.origin.x)+\"px,\"+(this.position.y+this.origin.y)+\"px)\")}resize(a){if(!a&&(a=this.workspace.getMetrics(),!a))return;\nthis.oldHostMetrics&&Scrollbar$$module$build$src$core$scrollbar.metricsAreEquivalent(a,this.oldHostMetrics)||(this.horizontal?this.resizeHorizontal(a):this.resizeVertical(a),this.oldHostMetrics=a,this.updateMetrics())}requiresViewResize(a){return this.oldHostMetrics?this.oldHostMetrics.viewWidth!==a.viewWidth||this.oldHostMetrics.viewHeight!==a.viewHeight||this.oldHostMetrics.absoluteLeft!==a.absoluteLeft||this.oldHostMetrics.absoluteTop!==a.absoluteTop:!0}resizeHorizontal(a){this.requiresViewResize(a)?\nthis.resizeViewHorizontal(a):this.resizeContentHorizontal(a)}resizeViewHorizontal(a){var b=a.viewWidth-this.margin*2;this.pair&&(b-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setScrollbarLength(Math.max(0,b));b=a.absoluteLeft+this.margin;this.pair&&this.workspace.RTL&&(b+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setPosition(b,a.absoluteTop+a.viewHeight-Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-this.margin);this.resizeContentHorizontal(a)}resizeContentHorizontal(a){if(a.viewWidth>=\na.scrollWidth)this.setHandleLength(this.scrollbarLength),this.setHandlePosition(0),this.pair||this.setVisible(!1);else{this.pair||this.setVisible(!0);var b=this.scrollbarLength*a.viewWidth/a.scrollWidth;b=this.constrainHandleLength(b);this.setHandleLength(b);b=a.scrollWidth-a.viewWidth;var c=this.scrollbarLength-this.handleLength;a=(a.viewLeft-a.scrollLeft)/b*c;a=this.constrainHandlePosition(a);this.setHandlePosition(a);this.ratio=c/b}}resizeVertical(a){this.requiresViewResize(a)?this.resizeViewVertical(a):\nthis.resizeContentVertical(a)}resizeViewVertical(a){let b=a.viewHeight-this.margin*2;this.pair&&(b-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setScrollbarLength(Math.max(0,b));this.setPosition(this.workspace.RTL?a.absoluteLeft+this.margin:a.absoluteLeft+a.viewWidth-Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-this.margin,a.absoluteTop+this.margin);this.resizeContentVertical(a)}resizeContentVertical(a){if(a.viewHeight>=a.scrollHeight)this.setHandleLength(this.scrollbarLength),\nthis.setHandlePosition(0),this.pair||this.setVisible(!1);else{this.pair||this.setVisible(!0);var b=this.scrollbarLength*a.viewHeight/a.scrollHeight;b=this.constrainHandleLength(b);this.setHandleLength(b);b=a.scrollHeight-a.viewHeight;var c=this.scrollbarLength-this.handleLength;a=(a.viewTop-a.scrollTop)/b*c;a=this.constrainHandlePosition(a);this.setHandlePosition(a);this.ratio=c/b}}isVisible(){return this.isHandleVisible}setContainerVisible(a){const b=a!==this.containerVisible;this.containerVisible=\na;b&&this.updateDisplay_()}setVisible(a){if(this.pair)throw Error(\"Unable to toggle visibility of paired scrollbars.\");this.setVisibleInternal(a)}setVisibleInternal(a){const b=a!==this.isVisible();this.isHandleVisible=a;b&&this.updateDisplay_()}updateDisplay_(){this.containerVisible&&this.isVisible()?this.outerSvg.setAttribute(\"display\",\"block\"):this.outerSvg.setAttribute(\"display\",\"none\")}onMouseDownBar(a){this.workspace.markFocused();clearTouchIdentifier$$module$build$src$core$touch();this.cleanUp();\nif(isRightButton$$module$build$src$core$browser_events(a))a.stopPropagation();else{var b=mouseToSvg$$module$build$src$core$browser_events(a,this.workspace.getParentSvg(),this.workspace.getInverseScreenCTM());b=this.horizontal?b.x:b.y;var c=getInjectionDivXY$$module$build$src$core$utils$svg_math(this.svgHandle);c=this.horizontal?c.x:c.y;var d=this.handlePosition,e=this.handleLength*.95;b<=c?d-=e:b>=c+this.handleLength&&(d+=e);this.setHandlePosition(this.constrainHandlePosition(d));this.updateMetrics();\na.stopPropagation();a.preventDefault()}}onMouseDownHandle(a){this.workspace.markFocused();this.cleanUp();isRightButton$$module$build$src$core$browser_events(a)?a.stopPropagation():(this.startDragHandle=this.handlePosition,this.startDragMouse=this.horizontal?a.clientX:a.clientY,this.onMouseUpWrapper_=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onMouseUpHandle),this.onMouseMoveWrapper_=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",\nthis,this.onMouseMoveHandle),a.stopPropagation(),a.preventDefault())}onMouseMoveHandle(a){this.setHandlePosition(this.constrainHandlePosition(this.startDragHandle+((this.horizontal?a.clientX:a.clientY)-this.startDragMouse)));this.updateMetrics()}onMouseUpHandle(){clearTouchIdentifier$$module$build$src$core$touch();this.cleanUp()}cleanUp(){this.workspace.hideChaff(!0);this.onMouseUpWrapper_&&(unbind$$module$build$src$core$browser_events(this.onMouseUpWrapper_),this.onMouseUpWrapper_=null);this.onMouseMoveWrapper_&&\n(unbind$$module$build$src$core$browser_events(this.onMouseMoveWrapper_),this.onMouseMoveWrapper_=null)}getRatio_(){let a=this.handlePosition/(this.scrollbarLength-this.handleLength);isNaN(a)&&(a=0);return a}updateMetrics(){const a=this.getRatio_();this.horizontal?this.workspace.setMetrics({x:a}):this.workspace.setMetrics({y:a})}set(a,b){this.setHandlePosition(this.constrainHandlePosition(a*this.ratio));(b||b===void 0)&&this.updateMetrics()}setOrigin(a,b){this.origin=new Coordinate$$module$build$src$core$utils$coordinate(a,\nb)}static metricsAreEquivalent(a,b){return a.viewWidth===b.viewWidth&&a.viewHeight===b.viewHeight&&a.viewLeft===b.viewLeft&&a.viewTop===b.viewTop&&a.absoluteTop===b.absoluteTop&&a.absoluteLeft===b.absoluteLeft&&a.scrollWidth===b.scrollWidth&&a.scrollHeight===b.scrollHeight&&a.scrollLeft===b.scrollLeft&&a.scrollTop===b.scrollTop}};Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness=TOUCH_ENABLED$$module$build$src$core$touch?25:15;\nScrollbar$$module$build$src$core$scrollbar.DEFAULT_SCROLLBAR_MARGIN=.5;var module$build$src$core$scrollbar={};module$build$src$core$scrollbar.Scrollbar=Scrollbar$$module$build$src$core$scrollbar;var domParser$$module$build$src$core$utils$xml={parseFromString:function(){throw Error(\"DOMParser was not found in the global scope and was not properly injected using injectDependencies\");}},xmlSerializer$$module$build$src$core$utils$xml={serializeToString:function(){throw Error(\"XMLSerializer was not foundin the global scope and was not properly injected using injectDependencies\");}},{document:document$$module$build$src$core$utils$xml,DOMParser:DOMParser$$module$build$src$core$utils$xml,XMLSerializer:XMLSerializer$$module$build$src$core$utils$xml}=\nglobalThis;DOMParser$$module$build$src$core$utils$xml&&(domParser$$module$build$src$core$utils$xml=new DOMParser$$module$build$src$core$utils$xml);XMLSerializer$$module$build$src$core$utils$xml&&(xmlSerializer$$module$build$src$core$utils$xml=new XMLSerializer$$module$build$src$core$utils$xml);\nvar NAME_SPACE$$module$build$src$core$utils$xml=\"https://developers.google.com/blockly/xml\",INVALID_CONTROL_CHARS$$module$build$src$core$utils$xml=/[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F]/g,module$build$src$core$utils$xml={NAME_SPACE:NAME_SPACE$$module$build$src$core$utils$xml};module$build$src$core$utils$xml.createElement=$.createElement$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.createTextNode=$.createTextNode$$module$build$src$core$utils$xml;\nmodule$build$src$core$utils$xml.domToText=domToText$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.injectDependencies=injectDependencies$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.textToDom=$.textToDom$$module$build$src$core$utils$xml;var CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox=\"categoryToolbox\",FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox=\"flyoutToolbox\",Position$$module$build$src$core$utils$toolbox;(function(a){a[a.TOP=0]=\"TOP\";a[a.BOTTOM=1]=\"BOTTOM\";a[a.LEFT=2]=\"LEFT\";a[a.RIGHT=3]=\"RIGHT\"})(Position$$module$build$src$core$utils$toolbox||(Position$$module$build$src$core$utils$toolbox={}));\nvar TEST_ONLY$$module$build$src$core$utils$toolbox={hasCategoriesInternal:hasCategoriesInternal$$module$build$src$core$utils$toolbox},module$build$src$core$utils$toolbox={};module$build$src$core$utils$toolbox.Position=Position$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.TEST_ONLY=TEST_ONLY$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.convertFlyoutDefToJsonArray=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox;\nmodule$build$src$core$utils$toolbox.convertToolboxDefToJson=convertToolboxDefToJson$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.hasCategories=hasCategories$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.isCategoryCollapsible=isCategoryCollapsible$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.parseToolboxTree=parseToolboxTree$$module$build$src$core$utils$toolbox;var verticalPosition$$module$build$src$core$positionable_helpers;(function(a){a[a.TOP=0]=\"TOP\";a[a.BOTTOM=1]=\"BOTTOM\"})(verticalPosition$$module$build$src$core$positionable_helpers||(verticalPosition$$module$build$src$core$positionable_helpers={}));var horizontalPosition$$module$build$src$core$positionable_helpers;(function(a){a[a.LEFT=0]=\"LEFT\";a[a.RIGHT=1]=\"RIGHT\"})(horizontalPosition$$module$build$src$core$positionable_helpers||(horizontalPosition$$module$build$src$core$positionable_helpers={}));\nvar bumpDirection$$module$build$src$core$positionable_helpers;(function(a){a[a.UP=0]=\"UP\";a[a.DOWN=1]=\"DOWN\"})(bumpDirection$$module$build$src$core$positionable_helpers||(bumpDirection$$module$build$src$core$positionable_helpers={}));var module$build$src$core$positionable_helpers={};module$build$src$core$positionable_helpers.bumpDirection=bumpDirection$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.bumpPositionRect=bumpPositionRect$$module$build$src$core$positionable_helpers;\nmodule$build$src$core$positionable_helpers.getCornerOppositeToolbox=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.getStartPositionRect=getStartPositionRect$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.horizontalPosition=horizontalPosition$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.verticalPosition=verticalPosition$$module$build$src$core$positionable_helpers;var SPRITE$$module$build$src$core$sprites={width:96,height:124,url:\"sprites.png\"},module$build$src$core$sprites={SPRITE:SPRITE$$module$build$src$core$sprites};var ZoomControls$$module$build$src$core$zoom_controls=class{constructor(a){this.workspace=a;this.id=\"zoomControls\";this.boundEvents=[];this.zoomResetGroup=this.zoomOutGroup=this.zoomInGroup=null;this.HEIGHT=this.WIDTH=32;this.SMALL_SPACING=2;this.LARGE_SPACING=11;this.MARGIN_HORIZONTAL=this.MARGIN_VERTICAL=20;this.svgGroup=null;this.top=this.left=0;this.initialized=!1}createDom(){this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});const a=String(Math.random()).substring(2);\nthis.createZoomOutSvg(a);this.createZoomInSvg(a);this.workspace.isMovable()&&this.createZoomResetSvg(a);return this.svgGroup}init(){this.workspace.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.ZOOM_CONTROLS_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE]});this.initialized=!0}dispose(){this.workspace.getComponentManager().removeComponent(\"zoomControls\");this.svgGroup&&\nremoveNode$$module$build$src$core$utils$dom(this.svgGroup);for(const a of this.boundEvents)unbind$$module$build$src$core$browser_events(a);this.boundEvents.length=0}getBoundingRectangle(){let a=this.SMALL_SPACING+2*this.HEIGHT;this.zoomResetGroup&&(a+=this.LARGE_SPACING+this.HEIGHT);return new Rect$$module$build$src$core$utils$rect(this.top,this.top+a,this.left,this.left+this.WIDTH)}position(a,b){if(this.initialized){var c=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers(this.workspace,\na),d=this.SMALL_SPACING+2*this.HEIGHT;this.zoomResetGroup&&(d+=this.LARGE_SPACING+this.HEIGHT);a=getStartPositionRect$$module$build$src$core$positionable_helpers(c,new Size$$module$build$src$core$utils$size(this.WIDTH,d),this.MARGIN_HORIZONTAL,this.MARGIN_VERTICAL,a,this.workspace);c=c.vertical;b=bumpPositionRect$$module$build$src$core$positionable_helpers(a,this.MARGIN_VERTICAL,c===verticalPosition$$module$build$src$core$positionable_helpers.TOP?bumpDirection$$module$build$src$core$positionable_helpers.DOWN:\nbumpDirection$$module$build$src$core$positionable_helpers.UP,b);if(c===verticalPosition$$module$build$src$core$positionable_helpers.TOP){var e=this.SMALL_SPACING+this.HEIGHT,f;(f=this.zoomInGroup)==null||f.setAttribute(\"transform\",\"translate(0, \"+e+\")\");this.zoomResetGroup&&this.zoomResetGroup.setAttribute(\"transform\",\"translate(0, \"+(e+this.LARGE_SPACING+this.HEIGHT)+\")\")}else{f=this.zoomResetGroup?this.LARGE_SPACING+this.HEIGHT:0;let h;(h=this.zoomInGroup)==null||h.setAttribute(\"transform\",\"translate(0, \"+\nf+\")\");f=f+this.SMALL_SPACING+this.HEIGHT;(e=this.zoomOutGroup)==null||e.setAttribute(\"transform\",\"translate(0, \"+f+\")\")}this.top=b.top;this.left=b.left;var g;(g=this.svgGroup)==null||g.setAttribute(\"transform\",\"translate(\"+this.left+\",\"+this.top+\")\")}}createZoomOutSvg(a){this.zoomOutGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomOut\"},this.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,\n{id:\"blocklyZoomoutClipPath\"+a},this.zoomOutGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,x:-64,y:-92,\"clip-path\":\"url(#blocklyZoomoutClipPath\"+a+\")\"},this.zoomOutGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomOutGroup,\"pointerdown\",null,this.zoom.bind(this,-1)))}createZoomInSvg(a){this.zoomInGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomIn\"},this.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyZoominClipPath\"+\na},this.zoomInGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,x:-32,y:-92,\"clip-path\":\"url(#blocklyZoominClipPath\"+a+\")\"},this.zoomInGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+\nSPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomInGroup,\"pointerdown\",null,this.zoom.bind(this,1)))}zoom(a,b){this.workspace.markFocused();this.workspace.zoomCenter(a);this.fireZoomEvent();clearTouchIdentifier$$module$build$src$core$touch();b.stopPropagation();b.preventDefault()}createZoomResetSvg(a){this.zoomResetGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomReset\"},\nthis.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyZoomresetClipPath\"+a},this.zoomResetGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,y:-92,\"clip-path\":\"url(#blocklyZoomresetClipPath\"+\na+\")\"},this.zoomResetGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomResetGroup,\"pointerdown\",null,this.resetZoom.bind(this)))}resetZoom(a){this.workspace.markFocused();const b=Math.log(this.workspace.options.zoomOptions.startScale/this.workspace.scale)/Math.log(this.workspace.options.zoomOptions.scaleSpeed);\nthis.workspace.beginCanvasTransition();this.workspace.zoomCenter(b);this.workspace.scrollCenter();setTimeout(this.workspace.endCanvasTransition.bind(this.workspace),500);this.fireZoomEvent();clearTouchIdentifier$$module$build$src$core$touch();a.stopPropagation();a.preventDefault()}fireZoomEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(null,this.workspace.id,\"zoom_controls\");fire$$module$build$src$core$events$utils(a)}};register$$module$build$src$core$css(\"\\n.blocklyZoom>image, .blocklyZoom>svg>image {\\n opacity: .4;\\n}\\n\\n.blocklyZoom>image:hover, .blocklyZoom>svg>image:hover {\\n opacity: .6;\\n}\\n\\n.blocklyZoom>image:active, .blocklyZoom>svg>image:active {\\n opacity: .8;\\n}\\n\");\nvar module$build$src$core$zoom_controls={};module$build$src$core$zoom_controls.ZoomControls=ZoomControls$$module$build$src$core$zoom_controls;var VARIABLES$$module$build$src$core$serialization$priorities=100,PROCEDURES$$module$build$src$core$serialization$priorities=75,BLOCKS$$module$build$src$core$serialization$priorities=50,WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities=25,module$build$src$core$serialization$priorities={BLOCKS:BLOCKS$$module$build$src$core$serialization$priorities,PROCEDURES:PROCEDURES$$module$build$src$core$serialization$priorities,VARIABLES:VARIABLES$$module$build$src$core$serialization$priorities,\nWORKSPACE_COMMENTS:WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities};var module$build$src$core$serialization$registry={};module$build$src$core$serialization$registry.register=register$$module$build$src$core$serialization$registry;module$build$src$core$serialization$registry.unregister=unregister$$module$build$src$core$serialization$registry;var saveComment$$module$build$src$core$serialization$workspace_comments=save$$module$build$src$core$serialization$workspace_comments,WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments=class{constructor(){this.priority=WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities}save(a){const b=[];for(const c of a.getTopComments())(a=save$$module$build$src$core$serialization$workspace_comments(c,{addCoordinates:!0,saveIds:!0}))&&b.push(a);return b.length?b:null}load(a,\nb){for(const c of a)append$$module$build$src$core$serialization$workspace_comments(c,b,{recordUndo:getRecordUndo$$module$build$src$core$events$utils()})}clear(a){for(const b of a.getTopComments())b.dispose()}};register$$module$build$src$core$serialization$registry(\"workspaceComments\",new WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments);var module$build$src$core$serialization$workspace_comments={};\nmodule$build$src$core$serialization$workspace_comments.WorkspaceCommentSerializer=WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments;module$build$src$core$serialization$workspace_comments.append=append$$module$build$src$core$serialization$workspace_comments;module$build$src$core$serialization$workspace_comments.save=save$$module$build$src$core$serialization$workspace_comments;var module$build$src$core$clipboard$registry={};module$build$src$core$clipboard$registry.register=register$$module$build$src$core$clipboard$registry;module$build$src$core$clipboard$registry.unregister=unregister$$module$build$src$core$clipboard$registry;var WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster=class{paste(a,b,c){a=a.commentState;c&&(a.x=c.x,a.y=c.y);$.disable$$module$build$src$core$events$utils();let d;try{d=append$$module$build$src$core$serialization$workspace_comments(a,b),moveCommentToNotConflict$$module$build$src$core$clipboard$workspace_comment_paster(d)}finally{$.enable$$module$build$src$core$events$utils()}if(!d)return null;isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CREATE))(d));\n$.getFocusManager$$module$build$src$core$focus_manager().focusNode(d);return d}};WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE=\"workspace-comment\";register$$module$build$src$core$clipboard$registry(WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE,new WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster);var module$build$src$core$clipboard$workspace_comment_paster={};\nmodule$build$src$core$clipboard$workspace_comment_paster.WorkspaceCommentPaster=WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster;var DEFAULT_SNAP_RADIUS$$module$build$src$core$config,module$build$src$core$config;DEFAULT_SNAP_RADIUS$$module$build$src$core$config=28;$.config$$module$build$src$core$config={dragRadius:5,flyoutDragRadius:10,snapRadius:DEFAULT_SNAP_RADIUS$$module$build$src$core$config,connectingSnapRadius:DEFAULT_SNAP_RADIUS$$module$build$src$core$config,currentConnectionPreference:8,bumpDelay:250};module$build$src$core$config={config:$.config$$module$build$src$core$config};var ARIA_PREFIX$$module$build$src$core$utils$aria=\"aria-\",ROLE_ATTRIBUTE$$module$build$src$core$utils$aria=\"role\",Role$$module$build$src$core$utils$aria;\n(function(a){a.GRID=\"grid\";a.GRIDCELL=\"gridcell\";a.GROUP=\"group\";a.LISTBOX=\"listbox\";a.MENU=\"menu\";a.MENUITEM=\"menuitem\";a.MENUITEMCHECKBOX=\"menuitemcheckbox\";a.OPTION=\"option\";a.PRESENTATION=\"presentation\";a.ROW=\"row\";a.TREE=\"tree\";a.TREEITEM=\"treeitem\";a.SEPARATOR=\"separator\";a.STATUS=\"status\"})(Role$$module$build$src$core$utils$aria||(Role$$module$build$src$core$utils$aria={}));var State$$module$build$src$core$utils$aria;\n(function(a){a.ACTIVEDESCENDANT=\"activedescendant\";a.COLCOUNT=\"colcount\";a.DISABLED=\"disabled\";a.EXPANDED=\"expanded\";a.INVALID=\"invalid\";a.LABEL=\"label\";a.LABELLEDBY=\"labelledby\";a.LEVEL=\"level\";a.ORIENTATION=\"orientation\";a.POSINSET=\"posinset\";a.ROWCOUNT=\"rowcount\";a.SELECTED=\"selected\";a.SETSIZE=\"setsize\";a.VALUEMAX=\"valuemax\";a.VALUEMIN=\"valuemin\";a.LIVE=\"live\";a.HIDDEN=\"hidden\"})(State$$module$build$src$core$utils$aria||(State$$module$build$src$core$utils$aria={}));\nvar module$build$src$core$utils$aria={};module$build$src$core$utils$aria.Role=Role$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.State=State$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.setRole=setRole$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.setState=setState$$module$build$src$core$utils$aria;var MenuItem$$module$build$src$core$menuitem=class{constructor(a,b){this.content=a;this.opt_value=b;this.enabled=!0;this.element=null;this.rightToLeft=!1;this.roleName=null;this.highlight=this.checked=this.checkable=!1;this.actionHandler=null}createDom(){const a=document.createElement(\"div\");a.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();this.element=a;a.className=\"blocklyMenuItem \"+(this.enabled?\"\":\"blocklyMenuItemDisabled \")+(this.checked?\"blocklyMenuItemSelected \":\"\")+(this.highlight?\n\"blocklyMenuItemHighlight \":\"\")+(this.rightToLeft?\"blocklyMenuItemRtl \":\"\");const b=document.createElement(\"div\");b.className=\"blocklyMenuItemContent\";if(this.checkable){var c=document.createElement(\"div\");c.className=\"blocklyMenuItemCheckbox \";b.appendChild(c)}c=this.content;typeof this.content===\"string\"&&(c=document.createTextNode(this.content));b.appendChild(c);a.appendChild(b);this.roleName&&setRole$$module$build$src$core$utils$aria(a,this.roleName);setState$$module$build$src$core$utils$aria(a,\nState$$module$build$src$core$utils$aria.SELECTED,this.checkable&&this.checked||!1);setState$$module$build$src$core$utils$aria(a,State$$module$build$src$core$utils$aria.DISABLED,!this.enabled);return a}dispose(){this.element=null}getElement(){return this.element}getId(){return this.element.id}getValue(){let a;return(a=this.opt_value)!=null?a:null}setRightToLeft(a){this.rightToLeft=a}setRole(a){this.roleName=a}setCheckable(a){this.checkable=a}setChecked(a){this.checked=a}setHighlighted(a){this.highlight=\na;const b=this.getElement();b&&this.isEnabled()&&(a?addClass$$module$build$src$core$utils$dom(b,\"blocklyMenuItemHighlight\"):removeClass$$module$build$src$core$utils$dom(b,\"blocklyMenuItemHighlight\"))}isEnabled(){return this.enabled}setEnabled(a){this.enabled=a}performAction(a){this.isEnabled()&&this.actionHandler&&this.actionHandler(this,a)}onAction(a,b){this.actionHandler=a.bind(b)}},module$build$src$core$menuitem={};module$build$src$core$menuitem.MenuItem=MenuItem$$module$build$src$core$menuitem;var Menu$$module$build$src$core$menu=class{constructor(){this.menuItems=[];this.roleName=this.element=this.onKeyDownHandler=this.pointerLeaveHandler=this.pointerEnterHandler=this.clickHandler=this.pointerMoveHandler=this.highlightedItem=this.openingCoords=null}addChild(a){this.menuItems.push(a)}render(a){const b=document.createElement(\"div\");b.className=\"blocklyMenu\";b.tabIndex=0;this.roleName&&setRole$$module$build$src$core$utils$aria(b,this.roleName);this.element=b;for(let c=0,d;d=this.menuItems[c];c++)b.appendChild(d.createDom());\nthis.pointerMoveHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointermove\",this,this.handlePointerMove,!0);this.clickHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerup\",this,this.handleClick,!0);this.pointerEnterHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerenter\",this,this.handlePointerEnter,!0);this.pointerLeaveHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerleave\",this,this.handlePointerLeave,!0);this.onKeyDownHandler=\nconditionalBind$$module$build$src$core$browser_events(b,\"keydown\",this,this.handleKeyEvent);a.appendChild(b);return b}getElement(){return this.element}focus(){const a=this.getElement();a&&a.focus({preventScroll:!0})}blur(){const a=this.getElement();a&&a.blur()}setRole(a){this.roleName=a}dispose(){this.pointerMoveHandler&&(unbind$$module$build$src$core$browser_events(this.pointerMoveHandler),this.pointerMoveHandler=null);this.clickHandler&&(unbind$$module$build$src$core$browser_events(this.clickHandler),\nthis.clickHandler=null);this.pointerEnterHandler&&(unbind$$module$build$src$core$browser_events(this.pointerEnterHandler),this.pointerEnterHandler=null);this.pointerLeaveHandler&&(unbind$$module$build$src$core$browser_events(this.pointerLeaveHandler),this.pointerLeaveHandler=null);this.onKeyDownHandler&&(unbind$$module$build$src$core$browser_events(this.onKeyDownHandler),this.onKeyDownHandler=null);for(let a=0,b;b=this.menuItems[a];a++)b.dispose();this.element=null}getMenuItem(a){const b=this.getElement();\nfor(;a&&a!==b;){if(a.classList.contains(\"blocklyMenuItem\")){const c=this.getMenuItems();for(let d=0,e;e=c[d];d++)if(e.getElement()===a)return e}a=a.parentElement}return null}setHighlighted(a){var b=this.highlightedItem;b&&(b.setHighlighted(!1),this.highlightedItem=null);if(a){a.setHighlighted(!0);this.highlightedItem=a;b=this.getElement();const c=a.getElement();b&&c&&(scrollIntoContainerView$$module$build$src$core$utils$style(c,b),setState$$module$build$src$core$utils$aria(b,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,\na.getId()))}}highlightNext(){const a=this.highlightedItem?this.menuItems.indexOf(this.highlightedItem):-1;this.highlightHelper(a,1)}highlightPrevious(){const a=this.highlightedItem?this.menuItems.indexOf(this.highlightedItem):-1;this.highlightHelper(a<0?this.menuItems.length:a,-1)}highlightFirst(){this.highlightHelper(-1,1)}highlightLast(){this.highlightHelper(this.menuItems.length,-1)}highlightHelper(a,b){a+=b;let c;const d=this.getMenuItems();for(;c=d[a];){if(c.isEnabled()){this.setHighlighted(c);\nbreak}a+=b}}handlePointerMove(a){Math.max(Math.abs(a.movementX),Math.abs(a.movementY))!==0&&(a=this.getMenuItem(a.target))&&(a.isEnabled()?this.highlightedItem!==a&&this.setHighlighted(a):this.setHighlighted(null))}handleClick(a){var b=this.openingCoords;this.openingCoords=null;if(b&&typeof a.clientX===\"number\"){const c=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY);if(Coordinate$$module$build$src$core$utils$coordinate.distance(b,c)<1)return}(b=this.getMenuItem(a.target))&&\nb.performAction(a)}handlePointerEnter(a){this.focus()}handlePointerLeave(a){this.getElement()&&this.setHighlighted(null)}handleKeyEvent(a){if(this.menuItems.length&&!(a.shiftKey||a.ctrlKey||a.metaKey||a.altKey)){var b=this.highlightedItem;switch(a.key){case \"Enter\":case \" \":b&&b.performAction(a);break;case \"ArrowUp\":this.highlightPrevious();break;case \"ArrowDown\":this.highlightNext();break;case \"PageUp\":case \"Home\":this.highlightFirst();break;case \"PageDown\":case \"End\":this.highlightLast();break;\ndefault:return}a.preventDefault();a.stopPropagation()}}getSize(){const a=this.getElement(),b=getSize$$module$build$src$core$utils$style(a);b.height=a.scrollHeight;return b}getMenuItems(){return this.menuItems.filter(a=>a instanceof MenuItem$$module$build$src$core$menuitem)}},module$build$src$core$menu={};module$build$src$core$menu.Menu=Menu$$module$build$src$core$menu;var MenuSeparator$$module$build$src$core$menu_separator=class{constructor(){this.element=null}createDom(){this.element=document.createElement(\"hr\");this.element.className=\"blocklyMenuSeparator\";setRole$$module$build$src$core$utils$aria(this.element,Role$$module$build$src$core$utils$aria.SEPARATOR);return this.element}dispose(){let a;(a=this.element)==null||a.remove();this.element=null}},module$build$src$core$menu_separator={};module$build$src$core$menu_separator.MenuSeparator=MenuSeparator$$module$build$src$core$menu_separator;var COLLAPSED_INPUT_NAME$$module$build$src$core$constants=\"_TEMP_COLLAPSED_INPUT\",COLLAPSED_FIELD_NAME$$module$build$src$core$constants=\"_TEMP_COLLAPSED_FIELD\",MANUALLY_DISABLED$$module$build$src$core$constants=\"MANUALLY_DISABLED\",module$build$src$core$constants={COLLAPSED_FIELD_NAME:COLLAPSED_FIELD_NAME$$module$build$src$core$constants,COLLAPSED_INPUT_NAME:COLLAPSED_INPUT_NAME$$module$build$src$core$constants,MANUALLY_DISABLED:MANUALLY_DISABLED$$module$build$src$core$constants};(function(a){a[a.VALUE=1]=\"VALUE\";a[a.STATEMENT=3]=\"STATEMENT\";a[a.DUMMY=5]=\"DUMMY\";a[a.CUSTOM=6]=\"CUSTOM\";a[a.END_ROW=7]=\"END_ROW\"})($.inputTypes$$module$build$src$core$inputs$input_types||($.inputTypes$$module$build$src$core$inputs$input_types={}));var module$build$src$core$inputs$input_types={};module$build$src$core$inputs$input_types.inputTypes=$.inputTypes$$module$build$src$core$inputs$input_types;var module$build$src$core$interfaces$i_serializable={};module$build$src$core$interfaces$i_serializable.isSerializable=isSerializable$$module$build$src$core$interfaces$i_serializable;var rootBlocks$$module$build$src$core$render_management=new Set,dirtyBlocks$$module$build$src$core$render_management=new WeakSet,eventGroups$$module$build$src$core$render_management=new WeakMap,afterRendersPromise$$module$build$src$core$render_management=null,afterRendersResolver$$module$build$src$core$render_management=null,animationRequestId$$module$build$src$core$render_management=0,module$build$src$core$render_management={};module$build$src$core$render_management.finishQueuedRenders=finishQueuedRenders$$module$build$src$core$render_management;\nmodule$build$src$core$render_management.queueRender=queueRender$$module$build$src$core$render_management;module$build$src$core$render_management.triggerQueuedRenders=triggerQueuedRenders$$module$build$src$core$render_management;var setLocale$$module$build$src$core$msg,module$build$src$core$msg;$.Msg$$module$build$src$core$msg=Object.create(null);setLocale$$module$build$src$core$msg=function(a){Object.keys(a).forEach(function(b){$.Msg$$module$build$src$core$msg[b]=a[b]})};module$build$src$core$msg={Msg:$.Msg$$module$build$src$core$msg,setLocale:setLocale$$module$build$src$core$msg};var CLASS_NAME$$module$build$src$core$toast=\"blocklyToast\",MESSAGE_CLASS_NAME$$module$build$src$core$toast=\"blocklyToastMessage\",CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast=\"blocklyToastCloseButton\",Toast$$module$build$src$core$toast=class{static show(a,b){if(b.oncePerSession&&b.id){if(this.shownIds.has(b.id))return;this.shownIds.add(b.id)}this.hide(a);const c=this.createDom(a,b);requestAnimationFrame(()=>{c.style.bottom=\"2rem\"})}static createDom(a,b){const {message:c,duration:d=5,assertiveness:e=\nToast$$module$build$src$core$toast.Assertiveness.POLITE}=b,f=document.createElement(\"div\");a.getInjectionDiv().appendChild(f);f.dataset.toastId=b.id;f.className=CLASS_NAME$$module$build$src$core$toast;setRole$$module$build$src$core$utils$aria(f,Role$$module$build$src$core$utils$aria.STATUS);setState$$module$build$src$core$utils$aria(f,State$$module$build$src$core$utils$aria.LIVE,e);b=f.appendChild(document.createElement(\"div\"));b.className=MESSAGE_CLASS_NAME$$module$build$src$core$toast;b.innerText=\nc;b=f.appendChild(document.createElement(\"button\"));b.className=CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast;setState$$module$build$src$core$utils$aria(b,State$$module$build$src$core$utils$aria.LABEL,$.Msg$$module$build$src$core$msg.CLOSE);var g=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{width:24,height:24,viewBox:\"0 0 24 24\",fill:\"none\"},b);setState$$module$build$src$core$utils$aria(g,State$$module$build$src$core$utils$aria.HIDDEN,!0);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{x:19.7782,y:2.80762,width:2,height:24,transform:\"rotate(45, 19.7782, 2.80762)\",fill:\"black\"},g);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{x:2.80762,y:4.22183,width:2,height:24,transform:\"rotate(-45, 2.80762, 4.22183)\",fill:\"black\"},g);b.addEventListener(\"click\",()=>{f.remove();a.markFocused()});let h;b=()=>{h=setTimeout(()=>f.remove(),d*1E3)};g=()=>clearTimeout(h);f.addEventListener(\"focusin\",g);f.addEventListener(\"focusout\",b);f.addEventListener(\"mouseenter\",\ng);f.addEventListener(\"mousemove\",g);f.addEventListener(\"mouseleave\",b);b();return f}static hide(a,b){a=a.getInjectionDiv().querySelector(`.${CLASS_NAME$$module$build$src$core$toast}`);a instanceof HTMLElement&&(!b||b===a.dataset.toastId)&&a.remove()}};Toast$$module$build$src$core$toast.shownIds=new Set;(function(a){a=a.Assertiveness||(a.Assertiveness={});a.ASSERTIVE=\"assertive\";a.POLITE=\"polite\"})(Toast$$module$build$src$core$toast||(Toast$$module$build$src$core$toast={}));register$$module$build$src$core$css(`\n.${CLASS_NAME$$module$build$src$core$toast} {\n font-size: 1.2rem;\n position: absolute;\n bottom: -10rem;\n right: 2rem;\n padding: 1rem;\n color: black;\n background-color: white;\n border: 2px solid black;\n border-radius: 0.4rem;\n z-index: 999;\n display: flex;\n align-items: center;\n gap: 0.8rem;\n line-height: 1.5;\n transition: bottom 0.3s ease-out;\n}\n\n.${CLASS_NAME$$module$build$src$core$toast} .${MESSAGE_CLASS_NAME$$module$build$src$core$toast} {\n maxWidth: 18rem;\n}\n\n.${CLASS_NAME$$module$build$src$core$toast} .${CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast} {\n margin: 0;\n padding: 0.2rem;\n background-color: transparent;\n color: black;\n border: none;\n cursor: pointer;\n}\n`);var module$build$src$core$toast={};module$build$src$core$toast.Toast=Toast$$module$build$src$core$toast;var defaultAlert$$module$build$src$core$dialog=function(a,b){window.alert(a);b&&b()},alertImplementation$$module$build$src$core$dialog=defaultAlert$$module$build$src$core$dialog,defaultConfirm$$module$build$src$core$dialog=function(a,b){b(window.confirm(a))},confirmImplementation$$module$build$src$core$dialog=defaultConfirm$$module$build$src$core$dialog,defaultPrompt$$module$build$src$core$dialog=function(a,b,c){c(window.prompt(a,b))},promptImplementation$$module$build$src$core$dialog=defaultPrompt$$module$build$src$core$dialog,\ndefaultToast$$module$build$src$core$dialog=Toast$$module$build$src$core$toast.show.bind(Toast$$module$build$src$core$toast),toastImplementation$$module$build$src$core$dialog=defaultToast$$module$build$src$core$dialog,module$build$src$core$dialog={};module$build$src$core$dialog.alert=alert$$module$build$src$core$dialog;module$build$src$core$dialog.confirm=confirm$$module$build$src$core$dialog;module$build$src$core$dialog.prompt=prompt$$module$build$src$core$dialog;\nmodule$build$src$core$dialog.setAlert=setAlert$$module$build$src$core$dialog;module$build$src$core$dialog.setConfirm=setConfirm$$module$build$src$core$dialog;module$build$src$core$dialog.setPrompt=setPrompt$$module$build$src$core$dialog;module$build$src$core$dialog.setToast=setToast$$module$build$src$core$dialog;module$build$src$core$dialog.toast=toast$$module$build$src$core$dialog;var module$build$src$core$interfaces$i_legacy_procedure_blocks={};module$build$src$core$interfaces$i_legacy_procedure_blocks.isLegacyProcedureCallBlock=isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks;module$build$src$core$interfaces$i_legacy_procedure_blocks.isLegacyProcedureDefBlock=isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks;var module$build$src$core$interfaces$i_variable_backed_parameter_model={};module$build$src$core$interfaces$i_variable_backed_parameter_model.isVariableBackedParameterModel=isVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model;var previousWarnings$$module$build$src$core$utils$deprecation=new Set,module$build$src$core$utils$deprecation={};module$build$src$core$utils$deprecation.warn=warn$$module$build$src$core$utils$deprecation;var CATEGORY_NAME$$module$build$src$core$variables=\"VARIABLE\",VAR_LETTER_OPTIONS$$module$build$src$core$variables=\"ijkmnopqrstuvwxyzabcdefgh\",TEST_ONLY$$module$build$src$core$variables={generateUniqueNameInternal:generateUniqueNameInternal$$module$build$src$core$variables},module$build$src$core$variables={CATEGORY_NAME:CATEGORY_NAME$$module$build$src$core$variables,TEST_ONLY:TEST_ONLY$$module$build$src$core$variables,VAR_LETTER_OPTIONS:VAR_LETTER_OPTIONS$$module$build$src$core$variables};\nmodule$build$src$core$variables.allDeveloperVariables=$.allDeveloperVariables$$module$build$src$core$variables;module$build$src$core$variables.allUsedVarModels=$.allUsedVarModels$$module$build$src$core$variables;module$build$src$core$variables.compareByName=compareByName$$module$build$src$core$variables;module$build$src$core$variables.createVariableButtonHandler=createVariableButtonHandler$$module$build$src$core$variables;module$build$src$core$variables.deleteVariable=$.deleteVariable$$module$build$src$core$variables;\nmodule$build$src$core$variables.flyoutCategory=flyoutCategory$$module$build$src$core$variables;module$build$src$core$variables.flyoutCategoryBlocks=flyoutCategoryBlocks$$module$build$src$core$variables;module$build$src$core$variables.generateUniqueName=generateUniqueName$$module$build$src$core$variables;module$build$src$core$variables.generateUniqueNameFromOptions=generateUniqueNameFromOptions$$module$build$src$core$variables;module$build$src$core$variables.generateVariableFieldDom=generateVariableFieldDom$$module$build$src$core$variables;\nmodule$build$src$core$variables.getAddedVariables=getAddedVariables$$module$build$src$core$variables;module$build$src$core$variables.getOrCreateVariablePackage=$.getOrCreateVariablePackage$$module$build$src$core$variables;module$build$src$core$variables.getVariable=$.getVariable$$module$build$src$core$variables;module$build$src$core$variables.getVariableUsesById=getVariableUsesById$$module$build$src$core$variables;module$build$src$core$variables.internalFlyoutCategory=internalFlyoutCategory$$module$build$src$core$variables;\nmodule$build$src$core$variables.jsonFlyoutCategoryBlocks=jsonFlyoutCategoryBlocks$$module$build$src$core$variables;module$build$src$core$variables.nameUsedWithAnyType=nameUsedWithAnyType$$module$build$src$core$variables;module$build$src$core$variables.nameUsedWithConflictingParam=nameUsedWithConflictingParam$$module$build$src$core$variables;module$build$src$core$variables.promptName=promptName$$module$build$src$core$variables;module$build$src$core$variables.renameVariable=$.renameVariable$$module$build$src$core$variables;var DeserializationError$$module$build$src$core$serialization$exceptions=class extends Error{},MissingBlockType$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a){super(\"Expected to find a 'type' property, defining the block type\");this.state=a}},MissingConnection$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,\nb,c){super(`The block ${b.toDevString()} is missing a(n) ${a}\nconnection`);this.block=b;this.state=c}},BadConnectionCheck$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,b,c,d){super(`The block ${c.toDevString()} could not connect its\n${b} to its parent, because: ${a}`);this.childBlock=c;this.childState=d}},RealChildOfShadow$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a){super(\"Encountered a real block which is defined as a child of a shadow\\nblock. It is an invariant of Blockly that shadow blocks only have shadow\\nchildren\");this.state=a}},UnregisteredIcon$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,\nb,c){super(`Cannot add an icon of type '${a}' to the block `+`${b.toDevString()}, because there is no icon registered with `+`type '${a}'. Make sure that all of your icons have been `+\"registered.\");this.block=b;this.state=c}},module$build$src$core$serialization$exceptions={};module$build$src$core$serialization$exceptions.BadConnectionCheck=BadConnectionCheck$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.DeserializationError=DeserializationError$$module$build$src$core$serialization$exceptions;\nmodule$build$src$core$serialization$exceptions.MissingBlockType=MissingBlockType$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.MissingConnection=MissingConnection$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.RealChildOfShadow=RealChildOfShadow$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.UnregisteredIcon=UnregisteredIcon$$module$build$src$core$serialization$exceptions;var saveBlock$$module$build$src$core$serialization$blocks=save$$module$build$src$core$serialization$blocks,BlockSerializer$$module$build$src$core$serialization$blocks=class{constructor(){this.priority=BLOCKS$$module$build$src$core$serialization$priorities}save(a){const b=[];for(const c of a.getTopBlocks(!1))(a=save$$module$build$src$core$serialization$blocks(c,{addCoordinates:!0,doFullSerialization:!1}))&&b.push(a);return b.length?{languageVersion:0,blocks:b}:null}load(a,b){a=a.blocks;for(const c of a)append$$module$build$src$core$serialization$blocks(c,\nb,{recordUndo:getRecordUndo$$module$build$src$core$events$utils()})}clear(a){for(const b of a.getTopBlocks(!1))b.dispose(!1)}};register$$module$build$src$core$serialization$registry(\"blocks\",new BlockSerializer$$module$build$src$core$serialization$blocks);var module$build$src$core$serialization$blocks={};module$build$src$core$serialization$blocks.BlockSerializer=BlockSerializer$$module$build$src$core$serialization$blocks;module$build$src$core$serialization$blocks.append=append$$module$build$src$core$serialization$blocks;\nmodule$build$src$core$serialization$blocks.appendInternal=appendInternal$$module$build$src$core$serialization$blocks;module$build$src$core$serialization$blocks.save=save$$module$build$src$core$serialization$blocks;var IconType$$module$build$src$core$icons$icon_types=class{constructor(a){this.name=a}toString(){return this.name}equals(a){return this.name===a.toString()}};IconType$$module$build$src$core$icons$icon_types.MUTATOR=new IconType$$module$build$src$core$icons$icon_types(\"mutator\");IconType$$module$build$src$core$icons$icon_types.WARNING=new IconType$$module$build$src$core$icons$icon_types(\"warning\");IconType$$module$build$src$core$icons$icon_types.COMMENT=new IconType$$module$build$src$core$icons$icon_types(\"comment\");\nvar module$build$src$core$icons$icon_types={};module$build$src$core$icons$icon_types.IconType=IconType$$module$build$src$core$icons$icon_types;var module$build$src$core$interfaces$i_has_bubble={};module$build$src$core$interfaces$i_has_bubble.hasBubble=hasBubble$$module$build$src$core$interfaces$i_has_bubble;var BlockBase$$module$build$src$core$events$events_block_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.isBlank=!a;a&&(this.blockId=a.id,this.workspaceId=a.workspace.id)}toJson(){const a=super.toJson();if(!this.blockId)throw Error(\"The block ID is undefined. Either pass a block to the constructor, or call fromJson\");a.blockId=this.blockId;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new BlockBase$$module$build$src$core$events$events_block_base);\nb.blockId=a.blockId;return b}},module$build$src$core$events$events_block_base={};module$build$src$core$events$events_block_base.BlockBase=BlockBase$$module$build$src$core$events$events_block_base;var BlockChange$$module$build$src$core$events$events_block_change=class extends BlockBase$$module$build$src$core$events$events_block_base{constructor(a,b,c,d,e){super(a);this.type=EventType$$module$build$src$core$events$type.BLOCK_CHANGE;a&&(this.element=b,this.name=c||void 0,this.oldValue=d,this.newValue=e)}toJson(){const a=super.toJson();if(!this.element)throw Error(\"The changed element is undefined. Either pass an element to the constructor, or call fromJson\");a.element=this.element;a.name=this.name;\na.oldValue=this.oldValue;a.newValue=this.newValue;this.disabledReason&&(a.disabledReason=this.disabledReason);return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new BlockChange$$module$build$src$core$events$events_block_change);b.element=a.element;b.name=a.name;b.oldValue=a.oldValue;b.newValue=a.newValue;a.disabledReason!==void 0&&(b.disabledReason=a.disabledReason);return b}setDisabledReason(a){if(this.element!==\"disabled\")throw Error('Cannot set the disabled reason for a BlockChange event if the element is not \"disabled\".');\nthis.disabledReason=a}isNull(){return this.oldValue===this.newValue}run(a){var b=this.getEventWorkspace_();if(!this.blockId)throw Error(\"The block ID is undefined. Either pass a block to the constructor, or call fromJson\");b=b.getBlockById(this.blockId);if(!b)throw Error(\"The associated block is undefined. Either pass a block to the constructor, or call fromJson\");const c=b.getIcon(IconType$$module$build$src$core$icons$icon_types.MUTATOR);c&&hasBubble$$module$build$src$core$interfaces$i_has_bubble(c)&&\nc.bubbleIsVisible()&&c.setBubbleVisible(!1);a=a?this.newValue:this.oldValue;switch(this.element){case \"field\":(b=b.getField(this.name))?b.setValue(a):console.warn(\"Can't set non-existent field: \"+this.name);break;case \"comment\":b.setCommentText(a||null);break;case \"collapsed\":b.setCollapsed(!!a);break;case \"disabled\":var d;b.setDisabledReason(!!a,(d=this.disabledReason)!=null?d:MANUALLY_DISABLED$$module$build$src$core$constants);break;case \"inline\":b.setInputsInline(!!a);break;case \"mutation\":d=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(b);\nb.loadExtraState?b.loadExtraState(JSON.parse(a||\"{}\")):b.domToMutation&&b.domToMutation($.textToDom$$module$build$src$core$utils$xml(a||\"\"));fire$$module$build$src$core$events$utils(new BlockChange$$module$build$src$core$events$events_block_change(b,\"mutation\",null,d,a));break;default:console.warn(\"Unknown change type: \"+this.element)}}static getExtraBlockState_(a){return a.saveExtraState?(a=a.saveExtraState(!0))?JSON.stringify(a):\"\":a.mutationToDom?(a=a.mutationToDom())?domToText$$module$build$src$core$xml(a):\n\"\":\"\"}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.BLOCK_CHANGE,BlockChange$$module$build$src$core$events$events_block_change);var module$build$src$core$events$events_block_change={};module$build$src$core$events$events_block_change.BlockChange=BlockChange$$module$build$src$core$events$events_block_change;var module$build$src$core$utils$math={};module$build$src$core$utils$math.clamp=clamp$$module$build$src$core$utils$math;module$build$src$core$utils$math.toDegrees=toDegrees$$module$build$src$core$utils$math;module$build$src$core$utils$math.toRadians=toRadians$$module$build$src$core$utils$math;var ARROW_SIZE$$module$build$src$core$dropdowndiv=16,BORDER_SIZE$$module$build$src$core$dropdowndiv=1,ARROW_HORIZONTAL_PADDING$$module$build$src$core$dropdowndiv=12,PADDING_Y$$module$build$src$core$dropdowndiv=16,ANIMATION_TIME$$module$build$src$core$dropdowndiv=.25,animateOutTimer$$module$build$src$core$dropdowndiv=null,onHide$$module$build$src$core$dropdowndiv=null,renderedClassName$$module$build$src$core$dropdowndiv=\"\",themeClassName$$module$build$src$core$dropdowndiv=\"\",div$$module$build$src$core$dropdowndiv,\ncontent$$module$build$src$core$dropdowndiv,arrow$$module$build$src$core$dropdowndiv,boundsElement$$module$build$src$core$dropdowndiv=null,owner$$module$build$src$core$dropdowndiv=null,positionToField$$module$build$src$core$dropdowndiv=null,returnEphemeralFocus$$module$build$src$core$dropdowndiv=null,keydownListener$$module$build$src$core$dropdowndiv=null,internal$$module$build$src$core$dropdowndiv={getBoundsInfo:function(){const a=getPageOffset$$module$build$src$core$utils$style(boundsElement$$module$build$src$core$dropdowndiv),\nb=getSize$$module$build$src$core$utils$style(boundsElement$$module$build$src$core$dropdowndiv);return{left:a.x,right:a.x+b.width,top:a.y,bottom:a.y+b.height,width:b.width,height:b.height}},getPositionMetrics:function(a,b,c,d){const e=internal$$module$build$src$core$dropdowndiv.getBoundsInfo(),f=getSize$$module$build$src$core$utils$style(div$$module$build$src$core$dropdowndiv);return b+f.heighte.top?getPositionAboveMetrics$$module$build$src$core$dropdowndiv(c,\nd,e,f):b+f.heightdocument.documentElement.clientTop?getPositionAboveMetrics$$module$build$src$core$dropdowndiv(c,d,e,f):getPositionTopOfPageMetrics$$module$build$src$core$dropdowndiv(a,e,f)}},TEST_ONLY$$module$build$src$core$dropdowndiv=internal$$module$build$src$core$dropdowndiv,module$build$src$core$dropdowndiv={ANIMATION_TIME:ANIMATION_TIME$$module$build$src$core$dropdowndiv,ARROW_HORIZONTAL_PADDING:ARROW_HORIZONTAL_PADDING$$module$build$src$core$dropdowndiv,\nARROW_SIZE:ARROW_SIZE$$module$build$src$core$dropdowndiv,BORDER_SIZE:BORDER_SIZE$$module$build$src$core$dropdowndiv,PADDING_Y:PADDING_Y$$module$build$src$core$dropdowndiv,TEST_ONLY:internal$$module$build$src$core$dropdowndiv};module$build$src$core$dropdowndiv.clearContent=clearContent$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.createDom=createDom$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.getContentDiv=getContentDiv$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.getOwner=getOwner$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.getPositionX=getPositionX$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hide=hide$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hideIfOwner=hideIfOwner$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hideWithoutAnimation=hideWithoutAnimation$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.isVisible=isVisible$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.repositionForWindowResize=repositionForWindowResize$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.setBoundsElement=setBoundsElement$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.setColour=setColour$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.show=show$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.showPositionedByBlock=showPositionedByBlock$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.showPositionedByField=showPositionedByField$$module$build$src$core$dropdowndiv;var module$build$src$core$utils$string={};module$build$src$core$utils$string.commonWordPrefix=commonWordPrefix$$module$build$src$core$utils$string;module$build$src$core$utils$string.commonWordSuffix=commonWordSuffix$$module$build$src$core$utils$string;module$build$src$core$utils$string.isNumber=$.isNumber$$module$build$src$core$utils$string;module$build$src$core$utils$string.shortestStringLength=shortestStringLength$$module$build$src$core$utils$string;module$build$src$core$utils$string.wrap=$.wrap$$module$build$src$core$utils$string;var customTooltip$$module$build$src$core$tooltip=void 0,visible$$module$build$src$core$tooltip=!1,blocked$$module$build$src$core$tooltip=!1,LIMIT$$module$build$src$core$tooltip=50,mouseOutPid$$module$build$src$core$tooltip=0,showPid$$module$build$src$core$tooltip=0,lastX$$module$build$src$core$tooltip=0,lastY$$module$build$src$core$tooltip=0,element$$module$build$src$core$tooltip=null,poisonedElement$$module$build$src$core$tooltip=null,OFFSET_X$$module$build$src$core$tooltip=0,OFFSET_Y$$module$build$src$core$tooltip=\n10,RADIUS_OK$$module$build$src$core$tooltip=10,HOVER_MS$$module$build$src$core$tooltip=750,MARGINS$$module$build$src$core$tooltip=5,containerDiv$$module$build$src$core$tooltip=null,module$build$src$core$tooltip={HOVER_MS:HOVER_MS$$module$build$src$core$tooltip,LIMIT:LIMIT$$module$build$src$core$tooltip,MARGINS:MARGINS$$module$build$src$core$tooltip,OFFSET_X:OFFSET_X$$module$build$src$core$tooltip,OFFSET_Y:OFFSET_Y$$module$build$src$core$tooltip,RADIUS_OK:RADIUS_OK$$module$build$src$core$tooltip};\nmodule$build$src$core$tooltip.bindMouseEvents=bindMouseEvents$$module$build$src$core$tooltip;module$build$src$core$tooltip.block=block$$module$build$src$core$tooltip;module$build$src$core$tooltip.createDom=createDom$$module$build$src$core$tooltip;module$build$src$core$tooltip.dispose=dispose$$module$build$src$core$tooltip;module$build$src$core$tooltip.getCustomTooltip=getCustomTooltip$$module$build$src$core$tooltip;module$build$src$core$tooltip.getDiv=getDiv$$module$build$src$core$tooltip;\nmodule$build$src$core$tooltip.getTooltipOfObject=getTooltipOfObject$$module$build$src$core$tooltip;module$build$src$core$tooltip.hide=hide$$module$build$src$core$tooltip;module$build$src$core$tooltip.isVisible=isVisible$$module$build$src$core$tooltip;module$build$src$core$tooltip.setCustomTooltip=setCustomTooltip$$module$build$src$core$tooltip;module$build$src$core$tooltip.unbindMouseEvents=unbindMouseEvents$$module$build$src$core$tooltip;module$build$src$core$tooltip.unblock=unblock$$module$build$src$core$tooltip;var hsvSaturation$$module$build$src$core$utils$colour=.45,hsvValue$$module$build$src$core$utils$colour=.65,names$$module$build$src$core$utils$colour={aqua:\"#00ffff\",black:\"#000000\",blue:\"#0000ff\",fuchsia:\"#ff00ff\",gray:\"#808080\",green:\"#008000\",lime:\"#00ff00\",maroon:\"#800000\",navy:\"#000080\",olive:\"#808000\",purple:\"#800080\",red:\"#ff0000\",silver:\"#c0c0c0\",teal:\"#008080\",white:\"#ffffff\",yellow:\"#ffff00\"},module$build$src$core$utils$colour={};module$build$src$core$utils$colour.blend=blend$$module$build$src$core$utils$colour;\nmodule$build$src$core$utils$colour.getHsvSaturation=getHsvSaturation$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.getHsvValue=getHsvValue$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hexToRgb=hexToRgb$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hsvToHex=hsvToHex$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hueToHex=hueToHex$$module$build$src$core$utils$colour;\nmodule$build$src$core$utils$colour.names=names$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.parse=parse$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.rgbToHex=rgbToHex$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.setHsvSaturation=setHsvSaturation$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.setHsvValue=setHsvValue$$module$build$src$core$utils$colour;var module$build$src$core$utils$parsing={};module$build$src$core$utils$parsing.checkMessageReferences=checkMessageReferences$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.parseBlockColour=parseBlockColour$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.replaceMessageReferences=replaceMessageReferences$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.tokenizeInterpolation=tokenizeInterpolation$$module$build$src$core$utils$parsing;var Field$$module$build$src$core$field=class{get size_(){return this.size}set size_(a){this.size=a}constructor(a,b,c){this.DEFAULT_VALUE=null;this.name=void 0;this.tooltip=this.validator_=null;this.size=new Size$$module$build$src$core$utils$size(0,0);this.constants_=this.mouseDownWrapper=this.textContent_=this.textElement_=this.borderRect_=this.fieldGroup_=null;this.disposed=!1;this.maxDisplayLength=50;this.sourceBlock_=null;this.enabled_=this.visible_=this.isDirty_=!0;this.suffixField=this.prefixField=\nthis.clickTarget_=null;this.EDITABLE=!0;this.SERIALIZABLE=!1;this.id_=null;this.value_=\"DEFAULT_VALUE\"in new.target.prototype?new.target.prototype.DEFAULT_VALUE:this.DEFAULT_VALUE;this.size_=new Size$$module$build$src$core$utils$size(0,0);a!==Field$$module$build$src$core$field.SKIP_SETUP&&(c&&this.configure_(c),this.setValue(a),b&&this.setValidator(b))}configure_(a){a.tooltip&&this.setTooltip(replaceMessageReferences$$module$build$src$core$utils$parsing(a.tooltip))}setSourceBlock(a){if(this.sourceBlock_)throw Error(\"Field already bound to a block\");\nthis.sourceBlock_=a;if(a.id.includes(\"_field\"))throw Error(\"Field ID indicator is contained in block ID. This may cause \"+`problems with focus: ${a.id}.`);this.id_=`${a.id}_field_${getNextUniqueId$$module$build$src$core$utils$idgenerator()}`}getConstants(){!this.constants_&&this.sourceBlock_&&!this.sourceBlock_.isDeadOrDying()&&this.sourceBlock_.workspace.rendered&&(this.constants_=this.sourceBlock_.workspace.getRenderer().getConstants());return this.constants_}getSourceBlock(){return this.sourceBlock_}init(){if(!this.fieldGroup_){var a=\nthis.id_;if(!a)throw Error(\"Expected ID to be defined prior to init.\");this.fieldGroup_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{id:a});this.isVisible()||(this.fieldGroup_.style.display=\"none\");this.sourceBlock_.getSvgRoot().appendChild(this.fieldGroup_);this.initView();this.updateEditable();this.setTooltip(this.tooltip);this.bindEvents_();this.initModel();this.applyColour()}}initView(){this.createBorderRect_();this.createTextElement_();this.fieldGroup_&&\naddClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyField\")}initModel(){}isFullBlockField(){return!this.borderRect_}createBorderRect_(){this.borderRect_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{rx:this.getConstants().FIELD_BORDER_RECT_RADIUS,ry:this.getConstants().FIELD_BORDER_RECT_RADIUS,x:0,y:0,height:this.size_.height,width:this.size_.width,\"class\":\"blocklyFieldRect\"},this.fieldGroup_)}createTextElement_(){this.textElement_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,\n{\"class\":\"blocklyText blocklyFieldText\"},this.fieldGroup_);this.getConstants().FIELD_TEXT_BASELINE_CENTER&&this.textElement_.setAttribute(\"dominant-baseline\",\"central\");this.textContent_=document.createTextNode(\"\");this.textElement_.appendChild(this.textContent_)}bindEvents_(){const a=this.getClickTarget_();if(!a)throw Error(\"A click target has not been set.\");bindMouseEvents$$module$build$src$core$tooltip(a);this.mouseDownWrapper=conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",\nthis,this.onMouseDown_)}fromXml(a){this.setValue(a.textContent)}toXml(a){a.textContent=this.getValue();return a}saveState(a){a=this.saveLegacyState(Field$$module$build$src$core$field);return a!==null?a:this.getValue()}loadState(a){this.loadLegacyState(Field$$module$build$src$core$field,a)||this.setValue(a)}saveLegacyState(a){return a.prototype.saveState===this.saveState&&a.prototype.toXml!==this.toXml?(a=$.createElement$$module$build$src$core$utils$xml(\"field\"),a.setAttribute(\"name\",this.name||\"\"),\ndomToText$$module$build$src$core$utils$xml(this.toXml(a)).replace(' xmlns=\"https://developers.google.com/blockly/xml\"',\"\")):null}loadLegacyState(a,b){return a.prototype.loadState===this.loadState&&a.prototype.fromXml!==this.fromXml?(this.fromXml($.textToDom$$module$build$src$core$utils$xml(b)),!0):!1}dispose(){hideIfOwner$$module$build$src$core$dropdowndiv(this);hideIfOwner$$module$build$src$core$widgetdiv(this);let a;((a=this.getSourceBlock())==null?0:a.isDeadOrDying())||removeNode$$module$build$src$core$utils$dom(this.fieldGroup_);\nthis.disposed=!0}updateEditable(){const a=this.fieldGroup_,b=this.getSourceBlock();this.EDITABLE&&a&&b&&(this.enabled_&&b.isEditable()?(addClass$$module$build$src$core$utils$dom(a,\"blocklyEditableField\"),removeClass$$module$build$src$core$utils$dom(a,\"blocklyNonEditableField\")):(addClass$$module$build$src$core$utils$dom(a,\"blocklyNonEditableField\"),removeClass$$module$build$src$core$utils$dom(a,\"blocklyEditableField\")))}setEnabled(a){this.enabled_=a;this.updateEditable()}isEnabled(){return this.enabled_}isClickable(){return this.enabled_&&\n!!this.sourceBlock_&&this.sourceBlock_.isEditable()&&this.showEditor_!==Field$$module$build$src$core$field.prototype.showEditor_}isClickableInFlyout(a){return!a}isCurrentlyEditable(){return this.enabled_&&this.EDITABLE&&!!this.sourceBlock_&&this.sourceBlock_.isEditable()}isSerializable(){let a=!1;this.name&&(this.SERIALIZABLE?a=!0:this.EDITABLE&&(console.warn(\"Detected an editable field that was not serializable. Please define SERIALIZABLE property as true on all editable custom fields. Proceeding with serialization.\"),\na=!0));return a}isVisible(){return this.visible_}setVisible(a){if(this.visible_!==a){this.visible_=a;var b=this.fieldGroup_;b&&(b.style.display=a?\"block\":\"none\")}}setValidator(a){this.validator_=a}getValidator(){return this.validator_}getSvgRoot(){return this.fieldGroup_}getBorderRect(){if(!this.borderRect_)throw Error(`The border rectangle is ${this.borderRect_}.`);return this.borderRect_}getTextElement(){if(!this.textElement_)throw Error(`The text element is ${this.textElement_}.`);return this.textElement_}getTextContent(){if(!this.textContent_)throw Error(`The text content is ${this.textContent_}.`);\nreturn this.textContent_}applyColour(){}render_(){this.textContent_&&(this.textContent_.nodeValue=this.getDisplayText_());this.updateSize_()}showEditor(a){this.isClickable()&&this.showEditor_(a)}showEditor_(a){}repositionForWindowResize(){return!1}updateSize_(a){const b=this.getConstants();a=a!==void 0?a:this.isFullBlockField()?0:this.getConstants().FIELD_BORDER_RECT_X_PADDING;let c=a*2,d=b.FIELD_TEXT_HEIGHT,e=0;this.textElement_&&(e=getTextWidth$$module$build$src$core$utils$dom(this.textElement_),\nc+=e);this.isFullBlockField()||(d=Math.max(d,b.FIELD_BORDER_RECT_HEIGHT));this.size_=new Size$$module$build$src$core$utils$size(c,d);this.positionTextElement_(a,e);this.positionBorderRect_()}positionTextElement_(a,b){if(this.textElement_){var c=this.getConstants(),d=this.size_.height/2,e;this.textElement_.setAttribute(\"x\",String(((e=this.getSourceBlock())==null?0:e.RTL)?this.size_.width-b-a:a));this.textElement_.setAttribute(\"y\",String(c.FIELD_TEXT_BASELINE_CENTER?d:d-c.FIELD_TEXT_HEIGHT/2+c.FIELD_TEXT_BASELINE))}}positionBorderRect_(){this.borderRect_&&\n(this.borderRect_.setAttribute(\"width\",String(this.size_.width)),this.borderRect_.setAttribute(\"height\",String(this.size_.height)),this.borderRect_.setAttribute(\"rx\",String(this.getConstants().FIELD_BORDER_RECT_RADIUS)),this.borderRect_.setAttribute(\"ry\",String(this.getConstants().FIELD_BORDER_RECT_RADIUS)))}getSize(){if(!this.isVisible())return new Size$$module$build$src$core$utils$size(0,0);this.isDirty_&&(this.render_(),this.isDirty_=!1);return this.size_}getScaledBBox(){let a;var b=this.getSourceBlock();\nif(!b)throw new UnattachedFieldError$$module$build$src$core$field;if(this.isFullBlockField()){var c=this.sourceBlock_.getHeightWidth();const d=b.workspace.scale;a=this.getAbsoluteXY_();b=(c.width+1)*d;c=(c.height+1)*d;GECKO$$module$build$src$core$utils$useragent?(a.x+=1.5*d,a.y+=1.5*d):(a.x-=.5*d,a.y-=.5*d)}else c=this.borderRect_.getBoundingClientRect(),a=getPageOffset$$module$build$src$core$utils$style(this.borderRect_),b=c.width,c=c.height;return new Rect$$module$build$src$core$utils$rect(a.y,\na.y+c,a.x,a.x+b)}onLocationChange(a){}getDisplayText_(){let a=this.getText();a.length>this.maxDisplayLength&&(a=a.substring(0,this.maxDisplayLength-2)+\"\\u2026\");a=a.replace(/\\s/g,Field$$module$build$src$core$field.NBSP);this.sourceBlock_&&this.sourceBlock_.RTL&&(a+=\"\\u200f\");return a}getText(){const a=this.getText_();return a!==null?String(a):String(this.getValue())}getText_(){return null}markDirty(){this.isDirty_=!0;this.constants_=null}forceRerender(){this.isDirty_=!0;this.sourceBlock_&&this.sourceBlock_.rendered&&\nthis.sourceBlock_.queueRender()}setValue(a,b=!0){if(a!==null){var c=$.getGroup$$module$build$src$core$events$utils();c||$.setGroup$$module$build$src$core$events$utils(!0);try{const k=this.doClassValidation_(a),l=this.processValidation(a,k,b);if(!(l instanceof Error)){var d,e=(d=this.getValidator())==null?void 0:d.call(this,l),f=this.processValidation(l,e,b);if(!(f instanceof Error)){var g=this.sourceBlock_;if(!g||!g.disposed){var h=this.getValue();h===f?this.doValueUpdate_(f):(this.doValueUpdate_(f),\nb&&g&&isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(g,\"field\",this.name||null,h,f)),this.isDirty_&&this.forceRerender())}}}}finally{$.setGroup$$module$build$src$core$events$utils(c)}}}processValidation(a,b,c){return b===null?(this.doValueInvalid_(a,c),this.isDirty_&&this.forceRerender(),Error()):b===void 0?a:b}getValue(){return this.value_}doClassValidation_(a){return a===\nnull||a===void 0?null:a}doValueUpdate_(a){this.value_=a;this.isDirty_=!0}doValueInvalid_(a,b){}onMouseDown_(a){this.sourceBlock_&&!this.sourceBlock_.isDeadOrDying()&&(a=this.sourceBlock_.workspace.getGesture(a))&&a.setStartField(this)}setTooltip(a){a||a===\"\"||(a=this.sourceBlock_);const b=this.getClickTarget_();b?b.tooltip=a:this.tooltip=a}getTooltip(){const a=this.getClickTarget_();return a?getTooltipOfObject$$module$build$src$core$tooltip(a):getTooltipOfObject$$module$build$src$core$tooltip({tooltip:this.tooltip})}getClickTarget_(){return this.clickTarget_||\nthis.getSvgRoot()}getAbsoluteXY_(){return getPageOffset$$module$build$src$core$utils$style(this.getClickTarget_())}referencesVariables(){return!1}refreshVariableName(){}getParentInput(){let a=null;const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;const c=b.inputList;for(let d=0;d{d.stopPropagation();$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this);clearTouchIdentifier$$module$build$src$core$touch()});\nconditionalBind$$module$build$src$core$browser_events(this.textArea,\"wheel\",this,d=>{d.stopPropagation()});conditionalBind$$module$build$src$core$browser_events(this.textArea,\"keydown\",this,this.handleKeyDown)}getDom(){return this.foreignObject}getText(){return this.text}setText(a){this.textArea.value=a;this.onTextChange()}onTextChange(){const a=this.text;this.text=this.textArea.value;for(let b=this.textChangeListeners.length-1;b>=0;b--)this.textChangeListeners[b](a,this.text)}handleKeyDown(a){if(a.key===\n\"Escape\"||a.key===\"Enter\"&&(a.ctrlKey||a.metaKey)){if(this.onFinishEditing)this.onFinishEditing();a.stopPropagation()}}addTextChangeListener(a){this.textChangeListeners.push(a)}removeTextChangeListener(a){this.textChangeListeners.splice(this.textChangeListeners.indexOf(a),1)}setPlaceholderText(a){this.textArea.placeholder=a}setEditable(a){a?this.textArea.removeAttribute(\"readonly\"):this.textArea.setAttribute(\"readonly\",\"true\")}updateSize(a,b){this.foreignObject.setAttribute(\"height\",`${a.height-b.height}`);\nthis.foreignObject.setAttribute(\"width\",`${a.width}`);this.foreignObject.setAttribute(\"y\",`${b.height}`);this.workspace.RTL&&this.foreignObject.setAttribute(\"x\",`${-a.width}`)}getFocusableElement(){return this.textArea}getFocusableTree(){return this.workspace}onNodeFocus(){const a=Rect$$module$build$src$core$utils$rect.from(this.foreignObject.getBoundingClientRect());this.workspace.scrollBoundsIntoView(Rect$$module$build$src$core$utils$rect.createFromPoint(screenToWsCoordinates$$module$build$src$core$utils$svg_math(this.workspace,\na.getOrigin()),a.getWidth(),a.getHeight()))}onNodeBlur(){}canBeFocused(){return this.id?!0:!1}},module$build$src$core$comments$comment_editor={COMMENT_EDITOR_FOCUS_IDENTIFIER:COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor};module$build$src$core$comments$comment_editor.CommentEditor=CommentEditor$$module$build$src$core$comments$comment_editor;var COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button=\"_delete_bar_button\",DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button=class extends CommentBarButton$$module$build$src$core$comments$comment_bar_button{constructor(a,b,c,d){super(a,b,c,d);this.id=a;this.workspace=b;this.container=c;this.commentView=d;this.icon=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{\"class\":\"blocklyDeleteIcon\",\nhref:`${this.workspace.options.pathToMedia}delete-icon.svg`,id:`${this.id}${COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button}`},c);this.bindId=conditionalBind$$module$build$src$core$browser_events(this.icon,\"pointerdown\",this,this.performAction.bind(this))}dispose(){unbind$$module$build$src$core$browser_events(this.bindId)}reposition(){const a=this.getMargin();this.icon.setAttribute(\"x\",\"0\");const b=this.container.getBBox();this.icon.setAttribute(\"y\",\n`${a}`);this.icon.setAttribute(\"x\",`${b.width-this.getSize(!0).getWidth()}`)}performAction(a){clearTouchIdentifier$$module$build$src$core$touch();a&&a instanceof PointerEvent&&isRightButton$$module$build$src$core$browser_events(a)?a.stopPropagation():(this.getCommentView().dispose(),a==null||a.stopPropagation(),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.workspace))}},module$build$src$core$comments$delete_comment_bar_button={COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER:COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button};\nmodule$build$src$core$comments$delete_comment_bar_button.DeleteCommentBarButton=DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button;var CommentView$$module$build$src$core$comments$comment_view=class{constructor(a,b){this.workspace=a;this.commentId=b;this.collapsed=!1;this.editable=!0;this.location=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.sizeChangeListeners=[];this.disposeListeners=[];this.collapseChangeListeners=[];this.resizePointerMoveListener=this.resizePointerUpListener=null;this.disposed=this.disposing=!1;this.svgRoot=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,\n{\"class\":\"blocklyComment blocklyEditable blocklyDraggable\"});this.highlightRect=this.createHighlightRect(this.svgRoot);({topBarGroup:this.topBarGroup,topBarBackground:this.topBarBackground,deleteButton:this.deleteButton,foldoutButton:this.foldoutButton,textPreview:this.textPreview,textPreviewNode:this.textPreviewNode}=this.createTopBar(this.svgRoot));this.commentEditor=this.createTextArea();this.resizeHandle=this.createResizeHandle(this.svgRoot,a);let c;(c=a.getLayerManager())==null||c.append(this,\nBLOCK$$module$build$src$core$layers);this.size=CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize;this.setSizeWithoutFiringEvents(this.size);this.moveTo(new Coordinate$$module$build$src$core$utils$coordinate(0,0))}createHighlightRect(a){return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyCommentHighlight\"},a)}createTopBar(a){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,\n{\"class\":\"blocklyCommentTopbar\"},a);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyCommentTopbarBackground\"},a),c=new DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button(this.commentId,this.workspace,a,this),d=new CollapseCommentBarButton$$module$build$src$core$comments$collapse_comment_bar_button(this.commentId,this.workspace,a,this);this.addDisposeListener(()=>{c.dispose();d.dispose()});const e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,\n{\"class\":\"blocklyCommentPreview blocklyCommentText blocklyText\"},a),f=document.createTextNode(\"\");e.appendChild(f);return{topBarGroup:a,topBarBackground:b,deleteButton:c,foldoutButton:d,textPreview:e,textPreviewNode:f}}createTextArea(){const a=new CommentEditor$$module$build$src$core$comments$comment_editor(this.workspace,this.commentId,()=>this.svgRoot.focus());this.svgRoot.appendChild(a.getDom());a.addTextChangeListener((b,c)=>{this.updateTextPreview(c);this.setSize(this.size)});return a}getEditorFocusableNode(){return this.commentEditor}createResizeHandle(a,\nb){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{\"class\":\"blocklyResizeHandle\",href:`${b.options.pathToMedia}resize-handle.svg`},a);conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onResizePointerDown);return a}getSvgRoot(){return this.svgRoot}getSize(){return this.collapsed?this.topBarBackground.getBBox():this.size}setSizeWithoutFiringEvents(a){const b=this.topBarBackground.getBBox(),c=this.textPreview.getBBox(),d=this.resizeHandle.getBBox();\nthis.size=a=Size$$module$build$src$core$utils$size.max(a,this.calcMinSize(b));this.svgRoot.setAttribute(\"height\",`${a.height}`);this.svgRoot.setAttribute(\"width\",`${a.width}`);this.updateHighlightRect(a);this.updateTopBarSize(a);this.commentEditor.updateSize(a,b);this.deleteButton.reposition();this.foldoutButton.reposition();this.updateTextPreviewSize(a,b,c);this.updateResizeHandlePosition(a,d)}setSize(a){const b=this.preResizeSize||this.size;this.setSizeWithoutFiringEvents(a);this.onSizeChange(b,\nthis.size)}calcMinSize(a){var b;this.updateTextPreview((b=this.commentEditor.getText())!=null?b:\"\");let c=b=getTextWidth$$module$build$src$core$utils$dom(this.textPreview);this.foldoutButton.isVisible()?c+=this.foldoutButton.getSize(!0).getWidth():b&&(c+=4);this.deleteButton.isVisible()?c+=this.deleteButton.getSize(!0).getWidth():b&&(c+=4);return new Size$$module$build$src$core$utils$size(c,a.height+20)}updateHighlightRect(a){this.highlightRect.setAttribute(\"height\",`${a.height}`);this.highlightRect.setAttribute(\"width\",\n`${a.width}`);this.workspace.RTL&&this.highlightRect.setAttribute(\"x\",`${-a.width}`)}updateTopBarSize(a){this.topBarBackground.setAttribute(\"width\",`${a.width}`)}updateTextPreviewSize(a,b,c){b=(b.height-c.height)/2;const d=this.foldoutButton.getSize(!0),e=this.deleteButton.getSize(!0);a=a.width-d.getWidth()-e.getWidth();this.textPreview.setAttribute(\"x\",`${(this.workspace.RTL?-1:1)*d.getWidth()}`);this.textPreview.setAttribute(\"y\",`${b+c.height/2}`);this.textPreview.setAttribute(\"width\",`${a}`)}updateResizeHandlePosition(a,\nb){this.resizeHandle.setAttribute(\"y\",`${a.height-b.height}`);this.resizeHandle.setAttribute(\"x\",`${a.width-b.width}`)}onSizeChange(a,b){for(let c=this.sizeChangeListeners.length-1;c>=0;c--)this.sizeChangeListeners[c](a,b)}addSizeChangeListener(a){this.sizeChangeListeners.push(a)}removeSizeChangeListener(a){this.sizeChangeListeners.splice(this.sizeChangeListeners.indexOf(a),1)}onResizePointerDown(a){this.isEditable()&&(this.bringToFront(),isRightButton$$module$build$src$core$browser_events(a)||(this.preResizeSize=\nthis.getSize(),start$$module$build$src$core$utils$drag(this.workspace,a,new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.getSize().width:this.getSize().width,this.getSize().height)),this.resizePointerUpListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onResizePointerUp),this.resizePointerMoveListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",this,this.onResizePointerMove),this.workspace.hideChaff()),\na.stopPropagation())}onResizePointerUp(a){clearTouchIdentifier$$module$build$src$core$touch();this.resizePointerUpListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerUpListener),this.resizePointerUpListener=null);this.resizePointerMoveListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerMoveListener),this.resizePointerMoveListener=null);this.setSize(this.size);this.preResizeSize=void 0}onResizePointerMove(a){a=move$$module$build$src$core$utils$drag(this.workspace,\na);this.setSizeWithoutFiringEvents(new Size$$module$build$src$core$utils$size(this.workspace.RTL?-a.x:a.x,a.y))}isCollapsed(){return this.collapsed}setCollapsed(a){(this.collapsed=a)?addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCollapsed\"):removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCollapsed\");this.setSizeWithoutFiringEvents(this.size);this.onCollapse()}onCollapse(){for(let a=this.collapseChangeListeners.length-1;a>=0;a--)this.collapseChangeListeners[a](this.collapsed)}addOnCollapseListener(a){this.collapseChangeListeners.push(a)}removeOnCollapseListener(a){this.collapseChangeListeners.splice(this.collapseChangeListeners.indexOf(a),\n1)}isEditable(){return this.editable}setEditable(a){(this.editable=a)?(addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyEditable\"),removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyReadonly\")):(removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyEditable\"),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyReadonly\"));this.commentEditor.setEditable(a)}getRelativeToSurfaceXY(){return this.location}moveTo(a){this.location=a;this.svgRoot.setAttribute(\"transform\",\n`translate(${a.x}, ${a.y})`)}getText(){return this.commentEditor.getText()}setText(a){this.commentEditor.setText(a)}setPlaceholderText(a){this.commentEditor.setPlaceholderText(a)}addTextChangeListener(a){this.commentEditor.addTextChangeListener(a)}removeTextChangeListener(a){this.commentEditor.removeTextChangeListener(a)}updateTextPreview(a){this.textPreviewNode.textContent=this.truncateText(a)}truncateText(a){return a.length>=12?`${a.substring(0,9)}...`:a}bringToFront(){const a=this.svgRoot.parentNode,\nb=a.childNodes;b[b.length-1]!==this.svgRoot&&a.appendChild(this.svgRoot)}onDeleteDown(a){clearTouchIdentifier$$module$build$src$core$touch();isRightButton$$module$build$src$core$browser_events(a)||this.dispose();a.stopPropagation()}dispose(){this.disposing=!0;removeNode$$module$build$src$core$utils$dom(this.svgRoot);for(let a=this.disposeListeners.length-1;a>=0;a--)this.disposeListeners[a]();this.disposeListeners.length=0;this.disposed=!0}isDisposed(){return this.disposed}isDeadOrDying(){return this.disposing||\nthis.disposed}addDisposeListener(a){this.disposeListeners.push(a)}removeDisposeListener(a){this.disposeListeners.splice(this.disposeListeners.indexOf(a),1)}getCommentBarButtons(){return[this.foldoutButton,this.deleteButton]}};CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize=new Size$$module$build$src$core$utils$size(120,100);register$$module$build$src$core$css(\"\\n.injectionDiv {\\n --commentFillColour: #FFFCC7;\\n --commentBorderColour: #F2E49B;\\n}\\n\\n.blocklyComment .blocklyTextarea {\\n background-color: var(--commentFillColour);\\n border: 1px solid var(--commentBorderColour);\\n box-sizing: border-box;\\n display: block;\\n outline: 0;\\n padding: 5px;\\n resize: none;\\n width: 100%;\\n height: 100%;\\n}\\n\\n.blocklyReadonly.blocklyComment .blocklyTextarea {\\n cursor: inherit;\\n}\\n\\n.blocklyDeleteIcon {\\n width: 20px;\\n height: 20px;\\n display: none;\\n cursor: pointer;\\n}\\n\\n.blocklyFoldoutIcon {\\n width: 20px;\\n height: 20px;\\n transform-origin: 12px 12px;\\n cursor: pointer;\\n}\\n.blocklyResizeHandle {\\n width: 12px;\\n height: 12px;\\n cursor: se-resize;\\n}\\n.blocklyReadonly.blocklyComment .blocklyResizeHandle {\\n cursor: inherit;\\n}\\n\\n.blocklyCommentTopbarBackground {\\n fill: var(--commentBorderColour);\\n height: 24px;\\n}\\n\\n.blocklyComment .blocklyCommentPreview.blocklyText {\\n fill: #000;\\n dominant-baseline: middle;\\n visibility: hidden;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyCommentPreview {\\n visibility: visible;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyCommentForeignObject,\\n.blocklyCollapsed.blocklyComment .blocklyResizeHandle {\\n display: none;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyFoldoutIcon {\\n transform: rotate(-90deg);\\n}\\n\\n.blocklyRTL .blocklyCommentTopbar {\\n transform: scale(-1, 1);\\n}\\n\\n.blocklyRTL .blocklyCommentForeignObject {\\n direction: rtl;\\n}\\n\\n.blocklyRTL .blocklyCommentPreview {\\n /* Revert the scale and control RTL using direction instead. */\\n transform: scale(-1, 1);\\n direction: rtl;\\n}\\n\\n.blocklyRTL .blocklyResizeHandle {\\n transform: scale(-1, 1);\\n cursor: sw-resize;\\n}\\n\\n.blocklyCommentHighlight {\\n fill: none;\\n}\\n\\n.blocklyCommentText.blocklyActiveFocus {\\n border-color: #fc3;\\n border-width: 2px;\\n}\\n\\n.blocklySelected .blocklyCommentHighlight {\\n stroke: #fc3;\\n stroke-width: 3px;\\n}\\n\\n.blocklyCollapsed.blocklySelected .blocklyCommentHighlight {\\n stroke: none;\\n}\\n\\n.blocklyCollapsed.blocklySelected .blocklyCommentTopbarBackground {\\n stroke: #fc3;\\n stroke-width: 3px;\\n}\\n\");\nvar module$build$src$core$comments$comment_view={};module$build$src$core$comments$comment_view.CommentView=CommentView$$module$build$src$core$comments$comment_view;var WorkspaceComment$$module$build$src$core$comments$workspace_comment=class{constructor(a,b){this.workspace=a;this.text=\"\";this.collapsed=!1;this.deletable=this.movable=this.editable=!0;this.location=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.disposing=this.disposed=!1;this.id=b&&!a.getCommentById(b)?b:genUid$$module$build$src$core$utils$idgenerator();this.size=CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize;a.addTopComment(this);this.fireCreateEvent()}fireCreateEvent(){isEnabled$$module$build$src$core$events$utils()&&\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CREATE))(this))}fireDeleteEvent(){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_DELETE))(this))}fireChangeEvent(a,b){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CHANGE))(this,\na,b))}fireCollapseEvent(a){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_COLLAPSE))(this,a))}setText(a){const b=this.text;this.text=a;this.fireChangeEvent(b,a)}getText(){return this.text}setSize(a){const b=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_RESIZE))(this);this.size=a;b.recordCurrentSizeAsNewSize();\nfire$$module$build$src$core$events$utils(b)}getSize(){return this.size}setCollapsed(a){this.collapsed=a;this.fireCollapseEvent(a)}isCollapsed(){return this.collapsed}setEditable(a){this.editable=a}isEditable(){return this.isOwnEditable()&&!this.workspace.isReadOnly()}isOwnEditable(){return this.editable}setMovable(a){this.movable=a}isMovable(){return this.isOwnMovable()&&!this.workspace.isReadOnly()&&!this.workspace.isFlyout}isOwnMovable(){return this.movable}setDeletable(a){this.deletable=a}isDeletable(){return this.isOwnDeletable()&&\n!this.isDeadOrDying()&&!this.workspace.isReadOnly()&&!this.workspace.isFlyout}isOwnDeletable(){return this.deletable}moveTo(a,b){const c=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_MOVE))(this);b&&c.setReason(b);this.location=a;c.recordNew();fire$$module$build$src$core$events$utils(c)}getRelativeToSurfaceXY(){return this.location}dispose(){this.disposing=!0;this.fireDeleteEvent();this.workspace.removeTopComment(this);this.disposed=!0}isDisposed(){return this.disposed}isDeadOrDying(){return this.disposing||\nthis.disposed}},module$build$src$core$comments$workspace_comment={};module$build$src$core$comments$workspace_comment.WorkspaceComment=WorkspaceComment$$module$build$src$core$comments$workspace_comment;var RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment=class extends WorkspaceComment$$module$build$src$core$comments$workspace_comment{constructor(a,b){super(a,b);this.dragStrategy=new CommentDragStrategy$$module$build$src$core$dragging$comment_drag_strategy(this);this.workspace=a;this.view=new CommentView$$module$build$src$core$comments$comment_view(a,this.id);this.view.setSize(this.getSize());this.view.setEditable(this.isEditable());this.view.getSvgRoot().setAttribute(\"data-id\",\nthis.id);this.view.getSvgRoot().setAttribute(\"id\",this.id);this.addModelUpdateBindings();conditionalBind$$module$build$src$core$browser_events(this.view.getSvgRoot(),\"pointerdown\",this,this.startGesture)}addModelUpdateBindings(){this.view.addTextChangeListener((a,b)=>void super.setText(b));this.view.addSizeChangeListener((a,b)=>void super.setSize(b));this.view.addOnCollapseListener(()=>void super.setCollapsed(this.view.isCollapsed()));this.view.addDisposeListener(()=>{this.isDeadOrDying()||this.dispose()})}setText(a){this.view.setText(a)}setPlaceholderText(a){this.view.setPlaceholderText(a)}setSize(a){this.view.setSize(a)}setCollapsed(a){this.view.setCollapsed(a)}setEditable(a){super.setEditable(a);\nthis.view.setEditable(this.isEditable())}getSvgRoot(){return this.view.getSvgRoot()}getSize(){return super.getSize()}getBoundingRectangle(){const a=this.getRelativeToSurfaceXY();var b,c;const d=(c=(b=this.view)==null?void 0:b.getSize())!=null?c:this.getSize();this.workspace.RTL?(b=a.x-d.width,c=a.x):(b=a.x,c=a.x+d.width);return new Rect$$module$build$src$core$utils$rect(a.y,a.y+d.height,b,c)}moveBy(a,b,c){const d=this.getRelativeToSurfaceXY();a=new Coordinate$$module$build$src$core$utils$coordinate(d.x+\na,d.y+b);this.moveTo(a,c)}moveTo(a,b){super.moveTo(a,b);this.view.moveTo(a)}moveDuringDrag(a){this.location=a;this.view.moveTo(a)}setDragging(a){a?addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDragging\"):removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDragging\")}dispose(){this.disposing=!0;const a=$.getFocusManager$$module$build$src$core$focus_manager();a.getFocusedNode()===this&&setTimeout(()=>a.focusTree(this.workspace),0);this.view.isDeadOrDying()||\nthis.view.dispose();super.dispose()}startGesture(a){const b=this.workspace.getGesture(a);b&&(b.handleCommentStart(a,this),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this))}setDeleteStyle(a){a?addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDraggingDelete\"):removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDraggingDelete\")}isCopyable(){return this.isOwnMovable()&&this.isOwnDeletable()}isMovable(){return this.dragStrategy.isMovable()}startDrag(){this.dragStrategy.startDrag()}drag(a){this.dragStrategy.drag(a)}endDrag(){this.dragStrategy.endDrag()}revertDrag(){this.dragStrategy.revertDrag()}select(){addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\n\"blocklySelected\");fireSelectedEvent$$module$build$src$core$common(this)}unselect(){removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklySelected\");fireSelectedEvent$$module$build$src$core$common(null)}toCopyData(){return{paster:WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE,commentState:save$$module$build$src$core$serialization$workspace_comments(this,{addCoordinates:!0,saveIds:!1})}}showContextMenu(a){const b=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({comment:this,\nfocusedNode:this},a);let c;c=a instanceof PointerEvent?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this.workspace,this.getRelativeToSurfaceXY()).translate(10,10);show$$module$build$src$core$contextmenu(a,b,this.workspace.RTL,this.workspace,c)}snapToGrid(){if(!this.isDeadOrDying()){var a=this.workspace.getGrid();if(a!=null&&a.shouldSnap()){var b=this.getRelativeToSurfaceXY();a=a.alignXY(b);a!==b&&this.moveTo(a,\n[\"snap\"])}}}getEditorFocusableNode(){return this.view.getEditorFocusableNode()}getFocusableElement(){return this.getSvgRoot()}getFocusableTree(){return this.workspace}onNodeFocus(){this.select();let a;(a=this.workspace.getLayerManager())==null||a.append(this,BLOCK$$module$build$src$core$layers);this.workspace.scrollBoundsIntoView(this.getBoundingRectangle())}onNodeBlur(){this.unselect()}canBeFocused(){return!0}},module$build$src$core$comments$rendered_workspace_comment={};\nmodule$build$src$core$comments$rendered_workspace_comment.RenderedWorkspaceComment=RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment;var module$build$src$core$xml={};module$build$src$core$xml.appendDomToWorkspace=appendDomToWorkspace$$module$build$src$core$xml;module$build$src$core$xml.blockToDom=blockToDom$$module$build$src$core$xml;module$build$src$core$xml.blockToDomWithXY=blockToDomWithXY$$module$build$src$core$xml;module$build$src$core$xml.clearWorkspaceAndLoadFromXml=clearWorkspaceAndLoadFromXml$$module$build$src$core$xml;module$build$src$core$xml.deleteNext=deleteNext$$module$build$src$core$xml;\nmodule$build$src$core$xml.domToBlock=$.domToBlock$$module$build$src$core$xml;module$build$src$core$xml.domToBlockInternal=domToBlockInternal$$module$build$src$core$xml;module$build$src$core$xml.domToPrettyText=domToPrettyText$$module$build$src$core$xml;module$build$src$core$xml.domToText=domToText$$module$build$src$core$xml;module$build$src$core$xml.domToVariables=domToVariables$$module$build$src$core$xml;module$build$src$core$xml.domToWorkspace=$.domToWorkspace$$module$build$src$core$xml;\nmodule$build$src$core$xml.loadWorkspaceComment=loadWorkspaceComment$$module$build$src$core$xml;module$build$src$core$xml.saveWorkspaceComment=saveWorkspaceComment$$module$build$src$core$xml;module$build$src$core$xml.variablesToDom=variablesToDom$$module$build$src$core$xml;module$build$src$core$xml.workspaceToDom=workspaceToDom$$module$build$src$core$xml;var BlockCreate$$module$build$src$core$events$events_block_create=class extends BlockBase$$module$build$src$core$events$events_block_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.BLOCK_CREATE;a&&(a.isShadow()&&(this.recordUndo=!1),this.xml=blockToDomWithXY$$module$build$src$core$xml(a),this.ids=getDescendantIds$$module$build$src$core$events$utils(a),this.json=save$$module$build$src$core$serialization$blocks(a,{addCoordinates:!0}))}toJson(){const a=super.toJson();\nif(!this.xml)throw Error(\"The block XML is undefined. Either pass a block to the constructor, or call fromJson\");if(!this.ids)throw Error(\"The block IDs are undefined. Either pass a block to the constructor, or call fromJson\");if(!this.json)throw Error(\"The block JSON is undefined. Either pass a block to the constructor, or call fromJson\");a.xml=domToText$$module$build$src$core$xml(this.xml);a.ids=this.ids;a.json=this.json;this.recordUndo||(a.recordUndo=this.recordUndo);return a}static fromJson(a,\nb,c){b=super.fromJson(a,b,c!=null?c:new BlockCreate$$module$build$src$core$events$events_block_create);b.xml=$.textToDom$$module$build$src$core$utils$xml(a.xml);b.ids=a.ids;b.json=a.json;a.recordUndo!==void 0&&(b.recordUndo=a.recordUndo);return b}run(a){const b=this.getEventWorkspace_();if(!this.json)throw Error(\"The block JSON is undefined. Either pass a block to the constructor, or call fromJson\");if(!this.ids)throw Error(\"The block IDs are undefined. Either pass a block to the constructor, or call fromJson\");\nif(!allShadowBlocks$$module$build$src$core$events$events_block_create(b,this.ids))if(a)append$$module$build$src$core$serialization$blocks(this.json,b);else for(a=0;aa.getBlockById(c)).filter(c=>c&&c.isShadow()).length===b.length};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.BLOCK_CREATE,BlockCreate$$module$build$src$core$events$events_block_create);var module$build$src$core$events$events_block_create={};module$build$src$core$events$events_block_create.BlockCreate=BlockCreate$$module$build$src$core$events$events_block_create;var ThemeChange$$module$build$src$core$events$events_theme_change=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b){super(b);this.type=EventType$$module$build$src$core$events$type.THEME_CHANGE;this.themeName=a}toJson(){const a=super.toJson();if(!this.themeName)throw Error(\"The theme name is undefined. Either pass a theme name to the constructor, or call fromJson\");a.themeName=this.themeName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new ThemeChange$$module$build$src$core$events$events_theme_change);\nb.themeName=a.themeName;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.THEME_CHANGE,ThemeChange$$module$build$src$core$events$events_theme_change);var module$build$src$core$events$events_theme_change={};module$build$src$core$events$events_theme_change.ThemeChange=ThemeChange$$module$build$src$core$events$events_theme_change;var ViewportChange$$module$build$src$core$events$events_viewport=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b,c,d,e){super(d);this.type=EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE;this.viewTop=a;this.viewLeft=b;this.scale=c;this.oldScale=e}toJson(){const a=super.toJson();if(this.viewTop===void 0)throw Error(\"The view top is undefined. Either pass a value to the constructor, or call fromJson\");if(this.viewLeft===void 0)throw Error(\"The view left is undefined. Either pass a value to the constructor, or call fromJson\");\nif(this.scale===void 0)throw Error(\"The scale is undefined. Either pass a value to the constructor, or call fromJson\");if(this.oldScale===void 0)throw Error(\"The old scale is undefined. Either pass a value to the constructor, or call fromJson\");a.viewTop=this.viewTop;a.viewLeft=this.viewLeft;a.scale=this.scale;a.oldScale=this.oldScale;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new ViewportChange$$module$build$src$core$events$events_viewport);b.viewTop=a.viewTop;b.viewLeft=a.viewLeft;\nb.scale=a.scale;b.oldScale=a.oldScale;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE,ViewportChange$$module$build$src$core$events$events_viewport);var module$build$src$core$events$events_viewport={};module$build$src$core$events$events_viewport.ViewportChange=ViewportChange$$module$build$src$core$events$events_viewport;var TEST_ONLY$$module$build$src$core$field_registry={fromJsonInternal:fromJsonInternal$$module$build$src$core$field_registry},module$build$src$core$field_registry={TEST_ONLY:TEST_ONLY$$module$build$src$core$field_registry};module$build$src$core$field_registry.fromJson=$.fromJson$$module$build$src$core$field_registry;module$build$src$core$field_registry.register=register$$module$build$src$core$field_registry;module$build$src$core$field_registry.unregister=unregister$$module$build$src$core$field_registry;var FieldDropdown$$module$build$src$core$field_dropdown=class extends Field$$module$build$src$core$field{constructor(a,b,c){super(Field$$module$build$src$core$field.SKIP_SETUP);this.svgArrow=this.arrow=this.imageElement=this.menu_=this.selectedMenuItem=null;this.SERIALIZABLE=!0;this.clickTarget_=this.suffixField=this.prefixField=this.generatedOptions=null;a!==Field$$module$build$src$core$field.SKIP_SETUP&&(this.setOptions(a),c&&this.configure_(c),b&&this.setValidator(b))}fromXml(a){this.isOptionListDynamic()&&\nthis.getOptions(!1);this.setValue(a.textContent)}loadState(a){this.loadLegacyState(FieldDropdown$$module$build$src$core$field_dropdown,a)||(this.isOptionListDynamic()&&this.getOptions(!1),this.setValue(a))}initView(){this.shouldAddBorderRect_()?this.createBorderRect_():this.clickTarget_=this.sourceBlock_.getSvgRoot();this.createTextElement_();this.imageElement=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{},this.fieldGroup_);this.getConstants().FIELD_DROPDOWN_SVG_ARROW?\nthis.createSVGArrow_():this.createTextArrow_();this.borderRect_&&addClass$$module$build$src$core$utils$dom(this.borderRect_,\"blocklyDropdownRect\");this.fieldGroup_&&(addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyField\"),addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyDropdownField\"))}shouldAddBorderRect_(){let a;return!this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW||this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW&&!((a=this.getSourceBlock())==\nnull?0:a.isShadow())}createTextArrow_(){this.arrow=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TSPAN,{},this.textElement_);let a;this.arrow.appendChild(document.createTextNode(((a=this.getSourceBlock())==null?0:a.RTL)?FieldDropdown$$module$build$src$core$field_dropdown.ARROW_CHAR+\" \":\" \"+FieldDropdown$$module$build$src$core$field_dropdown.ARROW_CHAR));this.getConstants().FIELD_TEXT_BASELINE_CENTER&&this.arrow.setAttribute(\"dominant-baseline\",\"central\");let b;\n((b=this.getSourceBlock())==null?0:b.RTL)?this.getTextElement().insertBefore(this.arrow,this.textContent_):this.getTextElement().appendChild(this.arrow)}createSVGArrow_(){this.svgArrow=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{height:this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE+\"px\",width:this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE+\"px\"},this.fieldGroup_);this.svgArrow.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.getConstants().FIELD_DROPDOWN_SVG_ARROW_DATAURI)}showEditor_(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.dropdownCreate();this.menu_&&(this.menu_.openingCoords=a&&typeof a.clientX===\"number\"?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):null,clearContent$$module$build$src$core$dropdowndiv(),a=this.menu_.render(getContentDiv$$module$build$src$core$dropdowndiv()),addClass$$module$build$src$core$utils$dom(a,\n\"blocklyDropdownMenu\"),this.getConstants().FIELD_DROPDOWN_COLOURED_DIV&&(b=b.getColour(),a=this.sourceBlock_.getColourTertiary(),setColour$$module$build$src$core$dropdowndiv(b,a)),showPositionedByField$$module$build$src$core$dropdowndiv(this,this.dropdownDispose_.bind(this)),getContentDiv$$module$build$src$core$dropdowndiv().style.height=`${this.menu_.getSize().height}px`,this.menu_.focus(),this.selectedMenuItem&&this.menu_.setHighlighted(this.selectedMenuItem),this.applyColour())}dropdownCreate(){const a=\nthis.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;const b=new Menu$$module$build$src$core$menu;b.setRole(Role$$module$build$src$core$utils$aria.LISTBOX);this.menu_=b;const c=this.getOptions(!1);this.selectedMenuItem=null;for(let e=0;eb[1]===a)?a:(this.sourceBlock_&&console.warn(\"Cannot set the dropdown's value to an unavailable option. Block type: \"+this.sourceBlock_.type+\", Field name: \"+this.name+\", Value: \"+a),null)}doValueUpdate_(a){super.doValueUpdate_(a);\na=this.getOptions(!0);for(let b=0,c;c=a[b];b++)c[1]===this.value_&&(this.selectedOption=c)}applyColour(){const a=this.sourceBlock_;this.borderRect_&&(this.borderRect_.setAttribute(\"stroke\",a.getColourTertiary()),this.menu_?this.borderRect_.setAttribute(\"fill\",a.getColourTertiary()):this.borderRect_.setAttribute(\"fill\",\"transparent\"));a&&this.arrow&&(a.isShadow()?this.arrow.style.fill=a.getColourSecondary():this.arrow.style.fill=a.getColour())}render_(){this.getTextContent().nodeValue=\"\";this.imageElement.style.display=\n\"none\";const a=this.selectedOption&&this.selectedOption[0];isImageProperties$$module$build$src$core$field_dropdown(a)?this.renderSelectedImage(a):this.renderSelectedText();this.positionBorderRect_()}renderSelectedImage(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.imageElement.style.display=\"\";this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",a.src);this.imageElement.setAttribute(\"height\",String(a.height));\nthis.imageElement.setAttribute(\"width\",String(a.width));const c=Number(a.height);a=Number(a.width);var d=!!this.borderRect_;const e=Math.max(d?this.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT:0,c+FieldDropdown$$module$build$src$core$field_dropdown.IMAGE_Y_PADDING);d=d?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0;let f;f=this.svgArrow?this.positionSVGArrow(a+d,e/2-this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE/2):getTextWidth$$module$build$src$core$utils$dom(this.arrow);this.size_=new Size$$module$build$src$core$utils$size(a+\nf+d*2,e);let g=0;b.RTL?this.imageElement.setAttribute(\"x\",`${d+f}`):(g=a+f,this.getTextElement().setAttribute(\"text-anchor\",\"end\"),this.imageElement.setAttribute(\"x\",`${d}`));this.imageElement.setAttribute(\"y\",String(e/2-c/2));this.positionTextElement_(g+d,a+f)}renderSelectedText(){this.getTextContent().nodeValue=this.getDisplayText_();var a=this.getTextElement();addClass$$module$build$src$core$utils$dom(a,\"blocklyDropdownText\");a.setAttribute(\"text-anchor\",\"start\");var b=!!this.borderRect_;a=Math.max(b?\nthis.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT:0,this.getConstants().FIELD_TEXT_HEIGHT);const c=getTextWidth$$module$build$src$core$utils$dom(this.getTextElement());b=b?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0;let d=0;this.svgArrow&&(d=this.positionSVGArrow(c+b,a/2-this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE/2));this.size_=new Size$$module$build$src$core$utils$size(c+d+b*2,a);this.positionTextElement_(b,c)}positionSVGArrow(a,b){if(!this.svgArrow)return 0;const c=this.getSourceBlock();\nif(!c)throw new UnattachedFieldError$$module$build$src$core$field;const d=this.borderRect_?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0,e=this.getConstants().FIELD_DROPDOWN_SVG_ARROW_PADDING,f=this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE;this.svgArrow.setAttribute(\"transform\",\"translate(\"+(c.RTL?d:a+e)+\",\"+b+\")\");return f+e}getText_(){if(!this.selectedOption)return null;const a=this.selectedOption[0];if(isImageProperties$$module$build$src$core$field_dropdown(a))return a.alt;if(typeof HTMLElement!==\n\"undefined\"&&a instanceof HTMLElement){let b,c;return(c=(b=a.title)!=null?b:a.ariaLabel)!=null?c:a.innerText}if(typeof a===\"string\")return a;console.warn(\"Can't get text for existing dropdown option. If you're using HTMLElement dropdown options in node, ensure you're using jsdom-global or similar.\");return null}static fromJson(a){if(!a.options)throw Error(\"options are required for the dropdown field. The options property must be assigned an array of [humanReadableValue, languageNeutralValue] tuples.\");\nreturn new this(a.options,void 0,a)}trimOptions(a){let b=!1;const c=a.map(g=>{if(g===FieldDropdown$$module$build$src$core$field_dropdown.SEPARATOR)return b=!0,g;const [h,k]=g;if(typeof h===\"string\")return[replaceMessageReferences$$module$build$src$core$utils$parsing(h),k];b=!0;return[isImageProperties$$module$build$src$core$field_dropdown(h)?Object.assign({},h,{alt:replaceMessageReferences$$module$build$src$core$utils$parsing(h.alt)}):h,k]});if(b||a.length<2)return{options:c};var d=c.map(([g])=>g),\ne=shortestStringLength$$module$build$src$core$utils$string(d);a=commonWordPrefix$$module$build$src$core$utils$string(d,e);const f=commonWordSuffix$$module$build$src$core$utils$string(d,e);if(!a&&!f||e<=a+f)return{options:c};e=a?d[0].substring(0,a-1):void 0;d=f?d[0].substr(1-f):void 0;return{options:this.applyTrim(c,a,f),prefix:e,suffix:d}}applyTrim(a,b,c){return a.map(([d,e])=>[d.substring(b,d.length-c),e])}validateOptions(a){if(!Array.isArray(a))throw TypeError(\"FieldDropdown options must be an array.\");\nif(!a.length)throw TypeError(\"FieldDropdown options must not be an empty array.\");let b=!1;for(let c=0;c0&&!!a.snap;return b}static parseThemeOptions(a){a=a.theme||Classic$$module$build$src$core$theme$classic;return typeof a===\"string\"?getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.THEME,a):a instanceof Theme$$module$build$src$core$theme?a:Theme$$module$build$src$core$theme.defineTheme(a.name||\"builtin\"+getNextUniqueId$$module$build$src$core$utils$idgenerator(),a)}},module$build$src$core$options=\n{};module$build$src$core$options.Options=Options$$module$build$src$core$options;var BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy=class{constructor(a,b){this.bubble=a;this.workspace=b;this.startLoc=null}isMovable(){return!0}startDrag(){this.startLoc=this.bubble.getRelativeToSurfaceXY();this.workspace.setResizesEnabled(!1);let a;(a=this.workspace.getLayerManager())==null||a.moveToDragLayer(this.bubble);this.bubble.setDragging&&this.bubble.setDragging(!0)}drag(a){this.bubble.moveDuringDrag(a)}endDrag(){this.workspace.setResizesEnabled(!0);let a;(a=this.workspace.getLayerManager())==\nnull||a.moveOffDragLayer(this.bubble,BUBBLE$$module$build$src$core$layers);this.bubble.setDragging(!1)}revertDrag(){this.startLoc&&this.bubble.moveDuringDrag(this.startLoc)}},module$build$src$core$dragging$bubble_drag_strategy={};module$build$src$core$dragging$bubble_drag_strategy.BubbleDragStrategy=BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy;var _a$$module$build$src$core$bubbles$bubble,Bubble$$module$build$src$core$bubbles$bubble=class{constructor(a,b,c,d,e){this.workspace=a;this.anchor=b;this.ownerRect=c;this.owner=e;this.size=new Size$$module$build$src$core$utils$size(0,0);this.colour=\"#ffffff\";this.disposed=!1;this.relativeLeft=this.relativeTop=0;this.dragStrategy=new BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy(this,this.workspace);this.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();this.svgRoot=\ncreateSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyBubble\"},a.getBubbleCanvas());a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyEmboss\"},this.svgRoot);this.tail=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyBubbleTail\"},a);this.background=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{\"class\":\"blocklyDraggable\",x:0,y:0,rx:_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH,ry:_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},a);this.contentContainer=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},this.svgRoot);this.focusableElement=d!=null?d:this.svgRoot;this.focusableElement.setAttribute(\"id\",this.id);conditionalBind$$module$build$src$core$browser_events(this.background,\"pointerdown\",this,this.onMouseDown);conditionalBind$$module$build$src$core$browser_events(this.focusableElement,\n\"keydown\",this,this.onKeyDown)}dispose(){removeNode$$module$build$src$core$utils$dom(this.svgRoot);this.disposed=!0}setAnchorLocation(a,b=!1){this.anchor=a;b?this.positionByRect(this.ownerRect):this.positionRelativeToAnchor();this.renderTail()}setPositionRelativeToAnchor(a,b){this.relativeLeft=a;this.relativeTop=b;this.positionRelativeToAnchor();this.renderTail()}getSize(){return this.size}setSize(a,b=!1){a.width=Math.max(a.width,_a$$module$build$src$core$bubbles$bubble.MIN_SIZE);a.height=Math.max(a.height,\n_a$$module$build$src$core$bubbles$bubble.MIN_SIZE);this.size=a;this.background.setAttribute(\"width\",`${a.width}`);this.background.setAttribute(\"height\",`${a.height}`);b?this.positionByRect(this.ownerRect):this.positionRelativeToAnchor();this.renderTail()}getColour(){return this.colour}setColour(a){this.colour=a;this.tail.setAttribute(\"fill\",a);this.background.setAttribute(\"fill\",a)}onMouseDown(a){let b;(b=this.workspace.getGesture(a))==null||b.handleBubbleStart(a,this);$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this)}onKeyDown(a){a.key===\n\"Escape\"&&this.owner&&(this.owner.setBubbleVisible(!1),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.owner))}positionRelativeToAnchor(){let a=this.anchor.x;a=this.workspace.RTL?a-(this.relativeLeft+this.size.width):a+this.relativeLeft;this.moveTo(a,this.relativeTop+this.anchor.y)}moveTo(a,b){this.svgRoot.setAttribute(\"transform\",`translate(${a}, ${b})`)}positionByRect(a=new Rect$$module$build$src$core$utils$rect(0,0,0,0)){var b=this.workspace.getMetricsManager().getViewMetrics(!0),\nc=this.getOptimalRelativeLeft(b),d=this.getOptimalRelativeTop(b);const e={x:c,y:-this.size.height-this.workspace.getRenderer().getConstants().MIN_BLOCK_HEIGHT},f={x:-this.size.width-30,y:d};d={x:a.getWidth(),y:d};var g={x:c,y:a.getHeight()};c=a.getWidth()a.width)return b;a=this.getWorkspaceViewRect(a);if(this.workspace.RTL){var c=this.anchor.x-b;c-this.size.widtha.right&&(b=-(a.right-this.anchor.x))}else{c=b+this.anchor.x;const d=c+this.size.width;ca.right&&(b=a.right-this.anchor.x-this.size.width)}return b}getOptimalRelativeTop(a){let b=-this.size.height/4;if(this.size.height>a.height)return b;const c=this.anchor.y+b,d=c+this.size.height;a=this.getWorkspaceViewRect(a);\nca.bottom&&(b=a.bottom-this.anchor.y-this.size.height);return b}getWorkspaceViewRect(a){const b=a.top;let c=a.top+a.height,d=a.left;a=a.left+a.width;c-=this.getScrollbarThickness();this.workspace.RTL?d-=this.getScrollbarThickness():a-=this.getScrollbarThickness();return new Rect$$module$build$src$core$utils$rect(b,c,d,a)}getScrollbarThickness(){return Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness/this.workspace.scale}renderTail(){const a=[];var b=this.size.width/\n2,c=this.size.height/2,d=-this.relativeLeft,e=-this.relativeTop;if(b===d&&c===e)a.push(\"M \"+b+\",\"+c);else{e-=c;d-=b;this.workspace.RTL&&(d*=-1);var f=Math.sqrt(e*e+d*d),g=Math.acos(d/f);e<0&&(g=2*Math.PI-g);var h=g+Math.PI/2;h>Math.PI*2&&(h-=Math.PI*2);var k=Math.sin(h);const m=Math.cos(h);let n=(this.size.width+this.size.height)/_a$$module$build$src$core$bubbles$bubble.TAIL_THICKNESS;n=Math.min(n,this.size.width,this.size.height)/4;h=1-_a$$module$build$src$core$bubbles$bubble.ANCHOR_RADIUS/f;d=b+\nh*d;e=c+h*e;h=b+n*m;const p=c+n*k;b-=n*m;c-=n*k;k=toRadians$$module$build$src$core$utils$math(this.workspace.RTL?-_a$$module$build$src$core$bubbles$bubble.TAIL_ANGLE:_a$$module$build$src$core$bubbles$bubble.TAIL_ANGLE);k=g+k;k>Math.PI*2&&(k-=Math.PI*2);g=Math.sin(k)*f/_a$$module$build$src$core$bubbles$bubble.TAIL_BEND;f=Math.cos(k)*f/_a$$module$build$src$core$bubbles$bubble.TAIL_BEND;a.push(\"M\"+h+\",\"+p);a.push(\"C\"+(h+f)+\",\"+(p+g)+\" \"+d+\",\"+e+\" \"+d+\",\"+e);a.push(\"C\"+d+\",\"+e+\" \"+(b+f)+\",\"+(c+g)+\" \"+\nb+\",\"+c)}a.push(\"z\");let l;(l=this.tail)==null||l.setAttribute(\"d\",a.join(\" \"))}bringToFront(){let a;const b=(a=this.svgRoot)==null?void 0:a.parentNode;return this.svgRoot&&(b==null?void 0:b.lastChild)!==this.svgRoot?(b==null||b.appendChild(this.svgRoot),!0):!1}getRelativeToSurfaceXY(){return new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.relativeLeft+this.anchor.x-this.size.width:this.anchor.x+this.relativeLeft,this.anchor.y+this.relativeTop)}getSvgRoot(){return this.svgRoot}moveDuringDrag(a){this.moveTo(a.x,\na.y);this.relativeLeft=this.workspace.RTL?this.anchor.x-a.x-this.size.width:a.x-this.anchor.x;this.relativeTop=a.y-this.anchor.y;this.renderTail()}setDragging(a){}setDeleteStyle(a){}isDeletable(){return!1}showContextMenu(a){}isMovable(){return!0}startDrag(){this.dragStrategy.startDrag()}drag(a){this.dragStrategy.drag(a)}endDrag(){this.dragStrategy.endDrag()}revertDrag(){this.dragStrategy.revertDrag()}select(){fireSelectedEvent$$module$build$src$core$common(this)}unselect(){fireSelectedEvent$$module$build$src$core$common(null)}getFocusableElement(){return this.focusableElement}getFocusableTree(){return this.workspace}onNodeFocus(){this.select();\nthis.bringToFront();var a=this.getRelativeToSurfaceXY();const b=this.getSize();a=new Rect$$module$build$src$core$utils$rect(a.y,a.y+b.height,a.x,a.x+b.width);this.workspace.scrollBoundsIntoView(a)}onNodeBlur(){this.unselect()}canBeFocused(){return!0}getOwner(){return this.owner}};_a$$module$build$src$core$bubbles$bubble=Bubble$$module$build$src$core$bubbles$bubble;Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH=6;\nBubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER=_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2;Bubble$$module$build$src$core$bubbles$bubble.MIN_SIZE=_a$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER;Bubble$$module$build$src$core$bubbles$bubble.TAIL_THICKNESS=1;Bubble$$module$build$src$core$bubbles$bubble.TAIL_ANGLE=20;Bubble$$module$build$src$core$bubbles$bubble.TAIL_BEND=4;Bubble$$module$build$src$core$bubbles$bubble.ANCHOR_RADIUS=8;\nvar module$build$src$core$bubbles$bubble={};module$build$src$core$bubbles$bubble.Bubble=Bubble$$module$build$src$core$bubbles$bubble;var MiniWorkspaceBubble$$module$build$src$core$bubbles$mini_workspace_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(b,c,d);this.workspace=b;this.anchor=c;this.ownerRect=d;this.autoLayout=!0;b=new Options$$module$build$src$core$options(a);this.validateWorkspaceOptions(b);this.svgDialog=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{x:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH,y:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},\nthis.contentContainer);a.parentWorkspace=this.workspace;this.miniWorkspace=this.newWorkspaceSvg(new Options$$module$build$src$core$options(a));this.miniWorkspace.internalIsMutator=!0;a=this.miniWorkspace.createDom(\"blocklyMutatorBackground\");this.svgDialog.appendChild(a);b.languageTree&&(a.insertBefore(this.miniWorkspace.addFlyout(Svg$$module$build$src$core$utils$svg.G),this.miniWorkspace.getCanvas()),a=this.miniWorkspace.getFlyout(),a==null||a.init(this.miniWorkspace),a==null||a.show(b.languageTree));\naddClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyMiniWorkspaceBubble\");this.miniWorkspace.addChangeListener(this.onWorkspaceChange.bind(this));let e,f;(e=this.miniWorkspace.getFlyout())==null||(f=e.getWorkspace())==null||f.addChangeListener(this.onWorkspaceChange.bind(this));this.updateBubbleSize()}dispose(){this.miniWorkspace.dispose();super.dispose()}getWorkspace(){return this.miniWorkspace}addWorkspaceChangeListener(a){this.miniWorkspace.addChangeListener(a)}validateWorkspaceOptions(a){if(a.hasCategories)throw Error(\"The miniworkspace bubble does not support toolboxes with categories\");\nif(a.hasTrashcan)throw Error(\"The miniworkspace bubble does not support trashcans\");if(a.zoomOptions.controls||a.zoomOptions.wheel||a.zoomOptions.pinch)throw Error(\"The miniworkspace bubble does not support zooming\");if(a.moveOptions.scrollbars||a.moveOptions.wheel||a.moveOptions.drag)throw Error(\"The miniworkspace bubble does not scrolling/moving the workspace\");if(a.horizontalLayout)throw Error(\"The miniworkspace bubble does not support horizontal layouts\");}onWorkspaceChange(){this.bumpBlocksIntoBounds();\nthis.updateBubbleSize()}bumpBlocksIntoBounds(){if(!this.miniWorkspace.isDragging()||this.miniWorkspace.keyboardMoveInProgress)for(const a of this.miniWorkspace.getTopBlocks(!1)){const b=a.getRelativeToSurfaceXY();b.y<20&&a.moveBy(0,20-b.y);if(a.RTL){let c=-20;const d=this.miniWorkspace.getFlyout();d&&(c-=d.getWidth());b.x>c&&a.moveBy(c-b.x,0)}else b.x<20&&a.moveBy(20-b.x,0)}}updateBubbleSize(){if(!this.miniWorkspace.isDragging()||this.miniWorkspace.keyboardMoveInProgress){this.autoLayout&&(this.autoLayout=\n!this.miniWorkspace.keyboardMoveInProgress);var a=this.getSize(),b=this.calculateWorkspaceSize();Math.abs(a.width-b.width)({kind:\"block\",type:c}))});return b}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$mutator_icon/\n2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,new Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){const a=this.sourceBlock.getSvgRoot().getBBox();return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}createRootBlock(){if(!this.sourceBlock.decompose)throw Error(\"Blocks with mutator icons must include a decompose method\");this.rootBlock=this.sourceBlock.decompose(this.miniWorkspaceBubble.getWorkspace());\nfor(var a of this.rootBlock.getDescendants(!1))a.queueRender();this.rootBlock.setMovable(!1);this.rootBlock.setDeletable(!1);let b,c,d,e;a=(e=(b=this.miniWorkspaceBubble)==null?void 0:(c=b.getWorkspace())==null?void 0:(d=c.getFlyout())==null?void 0:d.getWidth())!=null?e:0;this.rootBlock.moveBy(this.rootBlock.RTL?-(a+WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon):WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon,WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon)}addSaveConnectionsListener(){this.sourceBlock.saveConnections&&\nthis.rootBlock&&(this.saveConnectionsListener=()=>{this.sourceBlock.saveConnections&&this.rootBlock&&this.sourceBlock.saveConnections(this.rootBlock)},this.saveConnectionsListener(),this.sourceBlock.workspace.addChangeListener(this.saveConnectionsListener))}createMiniWorkspaceChangeListener(){return a=>{$.MutatorIcon$$module$build$src$core$icons$mutator_icon.isIgnorableMutatorEvent(a)||this.updateWorkspacePid||(this.updateWorkspacePid=setTimeout(()=>{this.updateWorkspacePid=null;this.recomposeSourceBlock()},\n0))}}static isIgnorableMutatorEvent(a){return a.isUiEvent||isBlockCreate$$module$build$src$core$events$predicates(a)||isBlockChange$$module$build$src$core$events$predicates(a)&&a.element===\"disabled\"}recomposeSourceBlock(){if(this.rootBlock){if(!this.sourceBlock.compose)throw Error(\"Blocks with mutator icons must include a compose method\");var a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);var b=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(this.sourceBlock);\nthis.sourceBlock.compose(this.rootBlock);var c=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(this.sourceBlock);b!==c&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\"mutation\",null,b,c));$.setGroup$$module$build$src$core$events$utils(a)}}getWorkspace(){let a;return(a=this.miniWorkspaceBubble)==null?void 0:a.getWorkspace()}};\n$.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.MUTATOR;$.MutatorIcon$$module$build$src$core$icons$mutator_icon.WEIGHT=1;var module$build$src$core$icons$mutator_icon={};module$build$src$core$icons$mutator_icon.MutatorIcon=$.MutatorIcon$$module$build$src$core$icons$mutator_icon;var allExtensions$$module$build$src$core$extensions=Object.create(null),TEST_ONLY$$module$build$src$core$extensions={allExtensions:allExtensions$$module$build$src$core$extensions};$.register$$module$build$src$core$extensions(\"parent_tooltip_when_inline\",extensionParentTooltip$$module$build$src$core$extensions);var module$build$src$core$extensions={TEST_ONLY:TEST_ONLY$$module$build$src$core$extensions};module$build$src$core$extensions.apply=apply$$module$build$src$core$extensions;\nmodule$build$src$core$extensions.buildTooltipForDropdown=$.buildTooltipForDropdown$$module$build$src$core$extensions;module$build$src$core$extensions.buildTooltipWithFieldText=$.buildTooltipWithFieldText$$module$build$src$core$extensions;module$build$src$core$extensions.isRegistered=isRegistered$$module$build$src$core$extensions;module$build$src$core$extensions.register=$.register$$module$build$src$core$extensions;module$build$src$core$extensions.registerMixin=$.registerMixin$$module$build$src$core$extensions;\nmodule$build$src$core$extensions.registerMutator=$.registerMutator$$module$build$src$core$extensions;module$build$src$core$extensions.runAfterPageLoad=runAfterPageLoad$$module$build$src$core$extensions;module$build$src$core$extensions.unregister=unregister$$module$build$src$core$extensions;var KeyCodes$$module$build$src$core$utils$keycodes;\n(function(a){a[a.WIN_KEY_FF_LINUX=0]=\"WIN_KEY_FF_LINUX\";a[a.MAC_ENTER=3]=\"MAC_ENTER\";a[a.BACKSPACE=8]=\"BACKSPACE\";a[a.TAB=9]=\"TAB\";a[a.NUM_CENTER=12]=\"NUM_CENTER\";a[a.ENTER=13]=\"ENTER\";a[a.SHIFT=16]=\"SHIFT\";a[a.CTRL=17]=\"CTRL\";a[a.ALT=18]=\"ALT\";a[a.PAUSE=19]=\"PAUSE\";a[a.CAPS_LOCK=20]=\"CAPS_LOCK\";a[a.ESC=27]=\"ESC\";a[a.SPACE=32]=\"SPACE\";a[a.PAGE_UP=33]=\"PAGE_UP\";a[a.PAGE_DOWN=34]=\"PAGE_DOWN\";a[a.END=35]=\"END\";a[a.HOME=36]=\"HOME\";a[a.LEFT=37]=\"LEFT\";a[a.UP=38]=\"UP\";a[a.RIGHT=39]=\"RIGHT\";a[a.DOWN=40]=\n\"DOWN\";a[a.PLUS_SIGN=43]=\"PLUS_SIGN\";a[a.PRINT_SCREEN=44]=\"PRINT_SCREEN\";a[a.INSERT=45]=\"INSERT\";a[a.DELETE=46]=\"DELETE\";a[a.ZERO=48]=\"ZERO\";a[a.ONE=49]=\"ONE\";a[a.TWO=50]=\"TWO\";a[a.THREE=51]=\"THREE\";a[a.FOUR=52]=\"FOUR\";a[a.FIVE=53]=\"FIVE\";a[a.SIX=54]=\"SIX\";a[a.SEVEN=55]=\"SEVEN\";a[a.EIGHT=56]=\"EIGHT\";a[a.NINE=57]=\"NINE\";a[a.FF_SEMICOLON=59]=\"FF_SEMICOLON\";a[a.FF_EQUALS=61]=\"FF_EQUALS\";a[a.FF_DASH=173]=\"FF_DASH\";a[a.FF_HASH=163]=\"FF_HASH\";a[a.QUESTION_MARK=63]=\"QUESTION_MARK\";a[a.AT_SIGN=64]=\"AT_SIGN\";\na[a.A=65]=\"A\";a[a.B=66]=\"B\";a[a.C=67]=\"C\";a[a.D=68]=\"D\";a[a.E=69]=\"E\";a[a.F=70]=\"F\";a[a.G=71]=\"G\";a[a.H=72]=\"H\";a[a.I=73]=\"I\";a[a.J=74]=\"J\";a[a.K=75]=\"K\";a[a.L=76]=\"L\";a[a.M=77]=\"M\";a[a.N=78]=\"N\";a[a.O=79]=\"O\";a[a.P=80]=\"P\";a[a.Q=81]=\"Q\";a[a.R=82]=\"R\";a[a.S=83]=\"S\";a[a.T=84]=\"T\";a[a.U=85]=\"U\";a[a.V=86]=\"V\";a[a.W=87]=\"W\";a[a.X=88]=\"X\";a[a.Y=89]=\"Y\";a[a.Z=90]=\"Z\";a[a.META=91]=\"META\";a[a.WIN_KEY_RIGHT=92]=\"WIN_KEY_RIGHT\";a[a.CONTEXT_MENU=93]=\"CONTEXT_MENU\";a[a.NUM_ZERO=96]=\"NUM_ZERO\";a[a.NUM_ONE=97]=\n\"NUM_ONE\";a[a.NUM_TWO=98]=\"NUM_TWO\";a[a.NUM_THREE=99]=\"NUM_THREE\";a[a.NUM_FOUR=100]=\"NUM_FOUR\";a[a.NUM_FIVE=101]=\"NUM_FIVE\";a[a.NUM_SIX=102]=\"NUM_SIX\";a[a.NUM_SEVEN=103]=\"NUM_SEVEN\";a[a.NUM_EIGHT=104]=\"NUM_EIGHT\";a[a.NUM_NINE=105]=\"NUM_NINE\";a[a.NUM_MULTIPLY=106]=\"NUM_MULTIPLY\";a[a.NUM_PLUS=107]=\"NUM_PLUS\";a[a.NUM_MINUS=109]=\"NUM_MINUS\";a[a.NUM_PERIOD=110]=\"NUM_PERIOD\";a[a.NUM_DIVISION=111]=\"NUM_DIVISION\";a[a.F1=112]=\"F1\";a[a.F2=113]=\"F2\";a[a.F3=114]=\"F3\";a[a.F4=115]=\"F4\";a[a.F5=116]=\"F5\";a[a.F6=\n117]=\"F6\";a[a.F7=118]=\"F7\";a[a.F8=119]=\"F8\";a[a.F9=120]=\"F9\";a[a.F10=121]=\"F10\";a[a.F11=122]=\"F11\";a[a.F12=123]=\"F12\";a[a.NUMLOCK=144]=\"NUMLOCK\";a[a.SCROLL_LOCK=145]=\"SCROLL_LOCK\";a[a.FIRST_MEDIA_KEY=166]=\"FIRST_MEDIA_KEY\";a[a.LAST_MEDIA_KEY=183]=\"LAST_MEDIA_KEY\";a[a.SEMICOLON=186]=\"SEMICOLON\";a[a.DASH=189]=\"DASH\";a[a.EQUALS=187]=\"EQUALS\";a[a.COMMA=188]=\"COMMA\";a[a.PERIOD=190]=\"PERIOD\";a[a.SLASH=191]=\"SLASH\";a[a.APOSTROPHE=192]=\"APOSTROPHE\";a[a.TILDE=192]=\"TILDE\";a[a.SINGLE_QUOTE=222]=\"SINGLE_QUOTE\";\na[a.OPEN_SQUARE_BRACKET=219]=\"OPEN_SQUARE_BRACKET\";a[a.BACKSLASH=220]=\"BACKSLASH\";a[a.CLOSE_SQUARE_BRACKET=221]=\"CLOSE_SQUARE_BRACKET\";a[a.WIN_KEY=224]=\"WIN_KEY\";a[a.MAC_FF_META=224]=\"MAC_FF_META\";a[a.MAC_WK_CMD_LEFT=91]=\"MAC_WK_CMD_LEFT\";a[a.MAC_WK_CMD_RIGHT=93]=\"MAC_WK_CMD_RIGHT\";a[a.WIN_IME=229]=\"WIN_IME\";a[a.VK_NONAME=252]=\"VK_NONAME\";a[a.PHANTOM=255]=\"PHANTOM\"})(KeyCodes$$module$build$src$core$utils$keycodes||(KeyCodes$$module$build$src$core$utils$keycodes={}));\nvar module$build$src$core$utils$keycodes={};module$build$src$core$utils$keycodes.KeyCodes=KeyCodes$$module$build$src$core$utils$keycodes;var module$build$src$core$utils$svg_paths={};module$build$src$core$utils$svg_paths.arc=arc$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.curve=curve$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.line=line$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.lineOnAxis=lineOnAxis$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.lineTo=lineTo$$module$build$src$core$utils$svg_paths;\nmodule$build$src$core$utils$svg_paths.moveBy=moveBy$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.moveTo=moveTo$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.point=point$$module$build$src$core$utils$svg_paths;var module$build$src$core$utils={};module$build$src$core$utils.Coordinate=Coordinate$$module$build$src$core$utils$coordinate;module$build$src$core$utils.KeyCodes=KeyCodes$$module$build$src$core$utils$keycodes;module$build$src$core$utils.Rect=Rect$$module$build$src$core$utils$rect;module$build$src$core$utils.Size=Size$$module$build$src$core$utils$size;module$build$src$core$utils.Svg=Svg$$module$build$src$core$utils$svg;module$build$src$core$utils.aria=module$build$src$core$utils$aria;\nmodule$build$src$core$utils.array=module$build$src$core$utils$array;module$build$src$core$utils.browserEvents=module$build$src$core$browser_events;module$build$src$core$utils.colour=module$build$src$core$utils$colour;module$build$src$core$utils.deprecation=module$build$src$core$utils$deprecation;module$build$src$core$utils.dom=module$build$src$core$utils$dom;module$build$src$core$utils.extensions=module$build$src$core$extensions;module$build$src$core$utils.idGenerator=module$build$src$core$utils$idgenerator;\nmodule$build$src$core$utils.math=module$build$src$core$utils$math;module$build$src$core$utils.object=module$build$src$core$utils$object;module$build$src$core$utils.parsing=module$build$src$core$utils$parsing;module$build$src$core$utils.string=module$build$src$core$utils$string;module$build$src$core$utils.style=module$build$src$core$utils$style;module$build$src$core$utils.svgMath=module$build$src$core$utils$svg_math;module$build$src$core$utils.svgPaths=module$build$src$core$utils$svg_paths;\nmodule$build$src$core$utils.toolbox=module$build$src$core$utils$toolbox;module$build$src$core$utils.userAgent=module$build$src$core$utils$useragent;module$build$src$core$utils.xml=module$build$src$core$utils$xml;var TextInputBubble$$module$build$src$core$bubbles$textinput_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(a,b,c,void 0,d);this.workspace=a;this.anchor=b;this.ownerRect=c;this.owner=d;this.resizePointerMoveListener=this.resizePointerUpListener=null;this.sizeChangeListeners=[];this.locationChangeListeners=[];this.DEFAULT_SIZE=new Size$$module$build$src$core$utils$size(160+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,80+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER);\nthis.MIN_SIZE=new Size$$module$build$src$core$utils$size(45+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,20+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER);this.editable=!0;addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyTextInputBubble\");this.editor=new CommentEditor$$module$build$src$core$comments$comment_editor(a,this.id,()=>{$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this)});this.contentContainer.appendChild(this.editor.getDom());\nthis.resizeGroup=this.createResizeHandle(this.svgRoot,a);this.setSize(this.DEFAULT_SIZE,!0)}getText(){return this.editor.getText()}setText(a){this.editor.setText(a)}setEditable(a){this.editable=a;this.editor.setEditable(a)}isEditable(){return this.editable}addTextChangeListener(a){this.editor.addTextChangeListener(a)}addSizeChangeListener(a){this.sizeChangeListeners.push(a)}addLocationChangeListener(a){this.locationChangeListeners.push(a)}createResizeHandle(a,b){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,\n{\"class\":\"blocklyResizeHandle\",href:`${b.options.pathToMedia}resize-handle.svg`},a);conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onResizePointerDown);return a}setSize(a,b=!1){a.width=Math.max(a.width,this.MIN_SIZE.width);a.height=Math.max(a.height,this.MIN_SIZE.height);const c=a.width-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,d=a.height-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER;this.editor.updateSize(new Size$$module$build$src$core$utils$size(c,\nd),new Size$$module$build$src$core$utils$size(0,0));this.editor.getDom().setAttribute(\"x\",`${Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER/2}`);this.editor.getDom().setAttribute(\"y\",`${Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER/2}`);this.resizeGroup.setAttribute(\"y\",`${d}`);this.workspace.RTL?this.resizeGroup.setAttribute(\"x\",`${-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER}`):this.resizeGroup.setAttribute(\"x\",`${c}`);super.setSize(a,b);this.onSizeChange()}getSize(){return super.getSize()}moveDuringDrag(a){super.moveDuringDrag(a);\nthis.onLocationChange()}setPositionRelativeToAnchor(a,b){super.setPositionRelativeToAnchor(a,b);this.onLocationChange()}positionByRect(a=new Rect$$module$build$src$core$utils$rect(0,0,0,0)){super.positionByRect(a);this.onLocationChange()}onResizePointerDown(a){this.bringToFront();isRightButton$$module$build$src$core$browser_events(a)||(start$$module$build$src$core$utils$drag(this.workspace,a,new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.getSize().width:this.getSize().width,\nthis.getSize().height)),this.resizePointerUpListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onResizePointerUp),this.resizePointerMoveListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",this,this.onResizePointerMove),this.workspace.hideChaff());a.stopPropagation()}onResizePointerUp(a){clearTouchIdentifier$$module$build$src$core$touch();this.resizePointerUpListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerUpListener),\nthis.resizePointerUpListener=null);this.resizePointerMoveListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerMoveListener),this.resizePointerMoveListener=null)}onResizePointerMove(a){a=move$$module$build$src$core$utils$drag(this.workspace,a);this.setSize(new Size$$module$build$src$core$utils$size(this.workspace.RTL?-a.x:a.x,a.y),!1);this.onSizeChange()}onSizeChange(){for(const a of this.sizeChangeListeners)a()}onLocationChange(){for(const a of this.locationChangeListeners)a()}getEditor(){return this.editor}};\nregister$$module$build$src$core$css(\"\\n.blocklyTextInputBubble .blocklyTextarea {\\n background-color: var(--commentFillColour);\\n border: 0;\\n box-sizing: border-box;\\n display: block;\\n outline: 0;\\n padding: 5px;\\n resize: none;\\n width: 100%;\\n height: 100%;\\n}\\n\");var module$build$src$core$bubbles$textinput_bubble={};module$build$src$core$bubbles$textinput_bubble.TextInputBubble=TextInputBubble$$module$build$src$core$bubbles$textinput_bubble;var ConnectionType$$module$build$src$core$connection_type;(function(a){a[a.INPUT_VALUE=1]=\"INPUT_VALUE\";a[a.OUTPUT_VALUE=2]=\"OUTPUT_VALUE\";a[a.NEXT_STATEMENT=3]=\"NEXT_STATEMENT\";a[a.PREVIOUS_STATEMENT=4]=\"PREVIOUS_STATEMENT\"})(ConnectionType$$module$build$src$core$connection_type||(ConnectionType$$module$build$src$core$connection_type={}));var module$build$src$core$connection_type={};module$build$src$core$connection_type.ConnectionType=ConnectionType$$module$build$src$core$connection_type;var ConnectionDB$$module$build$src$core$connection_db=class{constructor(a){this.connectionChecker=a;this.connections=[]}addConnection(a,b){b=this.calculateIndexForYPos(b);this.connections.splice(b,0,a)}findIndexOfConnection(a,b){if(!this.connections.length)return-1;const c=this.calculateIndexForYPos(b);if(c>=this.connections.length)return-1;b=a.y;let d=c;for(;d>=0&&this.connections[d].y===b;){if(this.connections[d]===a)return d;d--}for(d=c;da)c=d;else{b=d;break}}return b}removeConnection(a,b){a=this.findIndexOfConnection(a,b);if(a===-1)throw Error(\"Unable to find connection in connectionDB.\");this.connections.splice(a,1)}getNeighbours(a,b){function c(l){const m=e-d[l].x,n=f-d[l].y;Math.sqrt(m*m+n*n)<=b&&k.push(d[l]);\nreturn n=0&&c(a);)a--;do g++;while(g=0&&this.isInYRange(k,a.y,b);)h=this.connections[k],\nthis.connectionChecker.canConnect(a,h,!0,g)&&(c=h,g=h.distanceFrom(a)),k--;for(;fthis.fieldRow.length)throw Error(\"index \"+a+\" out of bounds.\");if(!(b||\nb===\"\"&&c))return a;typeof b===\"string\"&&(b=$.fromJson$$module$build$src$core$field_registry({type:\"field_label\",text:b}));b.setSourceBlock(this.sourceBlock);this.sourceBlock.initialized&&this.initField(b);b.name=c;b.setVisible(this.isVisible());b.prefixField&&(a=this.insertFieldAt(a,b.prefixField));this.fieldRow.splice(a,0,b);a++;b.suffixField&&(a=this.insertFieldAt(a,b.suffixField));this.sourceBlock.rendered&&this.sourceBlock.queueRender();return a}removeField(a,b){for(let c=0,d;d=this.fieldRow[c];c++)if(d.name===\na)return d.dispose(),this.fieldRow.splice(c,1),this.sourceBlock.rendered&&this.sourceBlock.queueRender(),!0;if(b)return!1;throw Error('Field \"'+a+'\" not found.');}isVisible(){return this.visible}setVisible(a){let b=[];if(this.visible===a)return b;this.visible=a;for(let c=0,d;d=this.fieldRow[c];c++)d.setVisible(a);if(this.connection&&this.connection instanceof RenderedConnection$$module$build$src$core$rendered_connection){a?b=this.connection.startTrackingAll():this.connection.stopTrackingAll();const c=\nthis.connection.targetBlock();c&&(c.getSvgRoot().style.display=a?\"block\":\"none\")}return b}markDirty(){for(let a=0,b;b=this.fieldRow[a];a++)b.markDirty()}setCheck(a){if(!this.connection)throw Error(\"This input does not have a connection.\");this.connection.setCheck(a);return this}setAlign(a){this.align=a;this.sourceBlock.rendered&&this.sourceBlock.queueRender();return this}setShadowDom(a){if(!this.connection)throw Error(\"This input does not have a connection.\");this.connection.setShadowDom(a);return this}getShadowDom(){if(!this.connection)throw Error(\"This input does not have a connection.\");\nreturn this.connection.getShadowDom()}init(){for(const a of this.fieldRow)a.init()}initModel(){for(const a of this.fieldRow)a.initModel()}initField(a){this.sourceBlock.rendered?a.init():a.initModel()}dispose(){for(let a=0,b;b=this.fieldRow[a];a++)b.dispose();this.connection&&this.connection.dispose()}makeConnection(a){return this.sourceBlock.makeConnection_(a)}},module$build$src$core$inputs$input={};module$build$src$core$inputs$input.Input=Input$$module$build$src$core$inputs$input;var DummyInput$$module$build$src$core$inputs$dummy_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.DUMMY}},module$build$src$core$inputs$dummy_input={};module$build$src$core$inputs$dummy_input.DummyInput=DummyInput$$module$build$src$core$inputs$dummy_input;var EndRowInput$$module$build$src$core$inputs$end_row_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.END_ROW}},module$build$src$core$inputs$end_row_input={};module$build$src$core$inputs$end_row_input.EndRowInput=EndRowInput$$module$build$src$core$inputs$end_row_input;var StatementInput$$module$build$src$core$inputs$statement_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){if(!a)throw Error(\"Statement inputs must have a non-empty name\");super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.STATEMENT;this.connection=this.makeConnection(ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT)}},module$build$src$core$inputs$statement_input={};\nmodule$build$src$core$inputs$statement_input.StatementInput=StatementInput$$module$build$src$core$inputs$statement_input;var module$build$src$core$inputs$value_input;$.ValueInput$$module$build$src$core$inputs$value_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){if(!a)throw Error(\"Value inputs must have a non-empty name\");super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.VALUE;this.connection=this.makeConnection(ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE)}};module$build$src$core$inputs$value_input={};\nmodule$build$src$core$inputs$value_input.ValueInput=$.ValueInput$$module$build$src$core$inputs$value_input;var module$build$src$core$interfaces$i_icon={};module$build$src$core$interfaces$i_icon.isIcon=isIcon$$module$build$src$core$interfaces$i_icon;var module$build$src$core$interfaces$i_comment_icon={};module$build$src$core$interfaces$i_comment_icon.isCommentIcon=isCommentIcon$$module$build$src$core$interfaces$i_comment_icon;var Block$$module$build$src$core$block=class{constructor(a,b,c){this.data=null;this.disposed=!1;this.hue=null;this.colour_=\"#000000\";this.styleName_=\"\";this.suppressPrefixSuffix=!1;this.previousConnection=this.nextConnection=this.outputConnection=null;this.inputList=[];this.icons=[];this.disabledReasons=new Set;this.tooltip=\"\";this.contextMenu=!0;this.parentBlock_=null;this.childBlocks_=[];this.editable=this.movable=this.deletable=!0;this.collapsed_=this.shadow=!1;this.outputShape_=null;this.rendered=\nthis.isInsertionMarker_=this.initialized=this.disposing=!1;this.onchangeWrapper=this.helpUrl=null;this.statementInputCount=0;this.workspace=a;this.id=c&&!a.getBlockById(c)?c:genUid$$module$build$src$core$utils$idgenerator();a.setBlockById(this.id,this);this.xy=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.isInFlyout=a.isFlyout;this.isInMutator=a.isMutator;this.RTL=a.RTL;if(b){this.type=b;c=Blocks$$module$build$src$core$blocks[b];if(!c||typeof c!==\"object\")throw TypeError(\"Invalid block definition for type: \"+\nb);Object.assign(this,c)}a.addTopBlock(this);a.addTypedBlock(this);new.target===Block$$module$build$src$core$block&&this.doInit_()}doInit_(){const a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);const b=getRecordUndo$$module$build$src$core$events$utils();try{typeof this.init===\"function\"&&($.setRecordUndo$$module$build$src$core$events$utils(!1),this.init(),$.setRecordUndo$$module$build$src$core$events$utils(b)),isEnabled$$module$build$src$core$events$utils()&&\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(this))}finally{$.setGroup$$module$build$src$core$events$utils(a),$.setRecordUndo$$module$build$src$core$events$utils(b)}this.inputsInlineDefault=this.inputsInline;typeof this.onchange===\"function\"&&this.setOnChange(this.onchange)}dispose(a=!1){this.disposing=!0;this.onchangeWrapper&&this.workspace.removeChangeListener(this.onchangeWrapper);this.unplug(a);\nisEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DELETE))(this));this.workspace.removeTopBlock(this);this.disposeInternal()}disposeInternal(){this.disposing=!0;this.onchangeWrapper&&this.workspace.removeChangeListener(this.onchangeWrapper);this.workspace.removeTypedBlock(this);this.workspace.removeBlockById(this.id);typeof this.destroy===\"function\"&&this.destroy();\nthis.childBlocks_.forEach(a=>a.disposeInternal());this.inputList.forEach(a=>a.dispose());this.inputList.length=0;this.getConnections_(!0).forEach(a=>a.dispose());this.disposed=!0}isDeadOrDying(){return this.disposing||this.disposed}initModel(){if(!this.initialized){for(const a of this.inputList)a.initModel();this.initialized=!0}}unplug(a){this.outputConnection&&this.unplugFromRow(a);this.previousConnection&&this.unplugFromStack(a)}unplugFromRow(a){let b=null,c;if((c=this.outputConnection)==null?0:\nc.isConnected())b=this.outputConnection.targetConnection,this.outputConnection.disconnect();b&&a&&(a=this.getOnlyValueConnection())&&a.isConnected()&&!a.targetBlock().isShadow()&&(a=a.targetConnection,a==null||a.disconnect(),this.workspace.connectionChecker.canConnect(a,b,!1)?b.connect(a):a==null||a.onFailedConnect(b))}getOnlyValueConnection(){let a=null;for(let b=0;b1)return!1;return!0}getMatchingConnection(a,\nb){const c=this.getConnections_(!0);a=a.getConnections_(!0);if(c.length!==a.length)throw Error(\"Connection lists did not match in length.\");for(let d=0;d{d=d+(c===\"(\"||e===\")\"?\"\":\" \")+e;c=e[e.length-1];return d},\"\");b=b.trim()||\"???\";a&&b.length>a&&(b=b.substring(0,a-3)+\"...\");return b}toTokens(a=\"?\"){const b=[];for(const d of this.inputList)if(d.name!=COLLAPSED_INPUT_NAME$$module$build$src$core$constants){for(const e of d.fieldRow)b.push(e.getText());if(d.connection){const e=d.connection.targetBlock();if(e){var c=d.connection;let f=c.getCheck();\n!f&&c.targetConnection&&(f=c.targetConnection.getCheck());(c=!!f&&(f.includes(\"Boolean\")||f.includes(\"Number\")))&&b.push(\"(\");b.push(...e.toTokens(a));c&&b.push(\")\")}else b.push(a)}}return b}appendValueInput(a){return this.appendInput(new $.ValueInput$$module$build$src$core$inputs$value_input(a,this))}appendStatementInput(a){this.statementInputCount++;return this.appendInput(new StatementInput$$module$build$src$core$inputs$statement_input(a,this))}appendDummyInput(a=\"\"){return this.appendInput(new DummyInput$$module$build$src$core$inputs$dummy_input(a,\nthis))}appendEndRowInput(a=\"\"){return this.appendInput(new EndRowInput$$module$build$src$core$inputs$end_row_input(a,this))}appendInput(a){this.inputList.push(a);return a}appendInputFromRegistry(a,b){return(a=getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.INPUT,a,!1))?this.appendInput(new a(b,this)):null}jsonInit(a){var b=a.type?'Block \"'+a.type+'\": ':\"\";if(a.output&&a.previousStatement)throw Error(b+\"Must not have both an output and a previousStatement.\");for(var c=\n0;a[\"args\"+c];){if(a[\"message\"+c]===void 0)throw Error(b+`args${c} must have a corresponding message (message${c}).`);c++}a.style&&a.style.hat&&(this.hat=a.style.hat,a.style=null);if(a.style&&a.colour)throw Error(b+\"Must not have both a colour and a style.\");a.style?this.jsonInitStyle(a,b):this.jsonInitColour(a,b);for(c=0;a[\"message\"+c]!==void 0;)this.interpolate(a[\"message\"+c],a[\"args\"+c]||[],a[\"implicitAlign\"+c]||a[\"lastDummyAlign\"+c],b),c++;a.inputsInline!==void 0&&($.disable$$module$build$src$core$events$utils(),\nthis.setInputsInline(a.inputsInline),$.enable$$module$build$src$core$events$utils());a.output!==void 0&&this.setOutput(!0,a.output);a.outputShape!==void 0&&this.setOutputShape(a.outputShape);a.previousStatement!==void 0&&this.setPreviousStatement(!0,a.previousStatement);a.nextStatement!==void 0&&this.setNextStatement(!0,a.nextStatement);a.tooltip!==void 0&&(c=replaceMessageReferences$$module$build$src$core$utils$parsing(a.tooltip),this.setTooltip(c));a.enableContextMenu!==void 0&&(this.contextMenu=\n!!a.enableContextMenu);a.suppressPrefixSuffix!==void 0&&(this.suppressPrefixSuffix=!!a.suppressPrefixSuffix);a.helpUrl!==void 0&&(c=replaceMessageReferences$$module$build$src$core$utils$parsing(a.helpUrl),this.setHelpUrl(c));typeof a.extensions===\"string\"&&(console.warn(b+\"JSON attribute 'extensions' should be an array of strings. Found raw string in JSON for '\"+a.type+\"' block.\"),a.extensions=[a.extensions]);a.mutator!==void 0&&apply$$module$build$src$core$extensions(a.mutator,this,!0);a=a.extensions;\nif(Array.isArray(a))for(b=0;bb)throw Error('Block \"'+this.type+'\": Message index %'+f+\" out of range.\");if(c[f])throw Error('Block \"'+this.type+'\": Message index %'+f+\" duplicated.\");c[f]=!0;d++}}if(d!==b)throw Error('Block \"'+this.type+'\": Message does not reference all '+b+\" arg(s).\");}interpolateArguments(a,b,c){const d=[];for(let f=0;f=this.inputList.length)throw RangeError(\"Input index \"+a+\" out of bounds.\");if(b>this.inputList.length)throw RangeError(\"Reference input \"+b+\" out of bounds.\");const c=this.inputList[a];this.inputList.splice(a,1);ab.getWeight()-c.getWeight());return a}removeIcon(a){if(!this.hasIcon(a))return!1;let b;(b=this.getIcon(a))==null||b.dispose();this.icons=this.icons.filter(c=>!c.getType().equals(a));return!0}hasIcon(a){return this.icons.some(b=>b.getType().equals(a))}getIcon(a){return a instanceof IconType$$module$build$src$core$icons$icon_types?\nthis.icons.find(b=>b.getType().equals(a)):this.icons.find(b=>b.getType().toString()===a)}getIcons(){return[...this.icons]}getRelativeToSurfaceXY(){return this.xy}moveBy(a,b,c){if(this.parentBlock_)throw Error(\"Block has parent\");const d=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this);c&&d.setReason(c);this.xy.translate(a,b);d.recordNew();fire$$module$build$src$core$events$utils(d)}makeConnection_(a){return new Connection$$module$build$src$core$connection(this,\na)}allInputsFilled(a){a===void 0&&(a=!0);if(!a&&this.isShadow())return!1;for(let c=0,d;d=this.inputList[c];c++)if(d.connection){var b=d.connection.targetBlock();if(!b||!b.allInputsFilled(a))return!1}return(b=this.getNextBlock())?b.allInputsFilled(a):!0}toDevString(){let a=this.type?'\"'+this.type+'\" block':\"Block\";this.id&&(a+=' (id=\"'+this.id+'\")');return a}};Block$$module$build$src$core$block.COLLAPSED_INPUT_NAME=COLLAPSED_INPUT_NAME$$module$build$src$core$constants;\nBlock$$module$build$src$core$block.COLLAPSED_FIELD_NAME=COLLAPSED_FIELD_NAME$$module$build$src$core$constants;var module$build$src$core$block={};module$build$src$core$block.Block=Block$$module$build$src$core$block;var disconnectPid$$module$build$src$core$block_animations=null,wobblingBlock$$module$build$src$core$block_animations=null,module$build$src$core$block_animations={};module$build$src$core$block_animations.connectionUiEffect=connectionUiEffect$$module$build$src$core$block_animations;module$build$src$core$block_animations.disconnectUiEffect=disconnectUiEffect$$module$build$src$core$block_animations;module$build$src$core$block_animations.disconnectUiStop=disconnectUiStop$$module$build$src$core$block_animations;\nmodule$build$src$core$block_animations.disposeUiEffect=disposeUiEffect$$module$build$src$core$block_animations;var BlockPaster$$module$build$src$core$clipboard$block_paster=class{paste(a,b,c){if(!b.isCapacityAvailable(a.typeCounts))return null;c&&(a.blockState.x=c.x,a.blockState.y=c.y);c=c||new Coordinate$$module$build$src$core$utils$coordinate(a.blockState.x||0,a.blockState.y||0);$.disable$$module$build$src$core$events$utils();let d;try{d=append$$module$build$src$core$serialization$blocks(a.blockState,b),moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster(d,c)}finally{$.enable$$module$build$src$core$events$utils()}if(!d)return d;\nisEnabled$$module$build$src$core$events$utils()&&!d.isShadow()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(d));const e=d;finishQueuedRenders$$module$build$src$core$render_management().then(()=>$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e));return d}};BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE=\"block\";\nregister$$module$build$src$core$clipboard$registry(BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE,new BlockPaster$$module$build$src$core$clipboard$block_paster);var module$build$src$core$clipboard$block_paster={};module$build$src$core$clipboard$block_paster.BlockPaster=BlockPaster$$module$build$src$core$clipboard$block_paster;module$build$src$core$clipboard$block_paster.moveBlockToNotConflict=moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster;var bumpIntoBounds$$module$build$src$core$bump_objects=bumpObjectIntoBounds$$module$build$src$core$bump_objects,module$build$src$core$bump_objects={};module$build$src$core$bump_objects.bumpIntoBounds=bumpObjectIntoBounds$$module$build$src$core$bump_objects;module$build$src$core$bump_objects.bumpIntoBoundsHandler=bumpIntoBoundsHandler$$module$build$src$core$bump_objects;module$build$src$core$bump_objects.bumpTopObjectsIntoBounds=bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects;var BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy=class{constructor(a){this.block=a;this.connectionPreviewer=this.connectionCandidate=this.startLoc=this.startChildConn=this.startParentConn=null;this.dragging=!1;this.dragOffset=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.originalEventGroup=\"\";this.workspace=a.workspace}isMovable(){if(this.block.isShadow()){let a,b;return(b=(a=this.block.getParent())==null?void 0:a.isMovable())!=null?b:!1}return this.block.isOwnMovable()&&\n!this.block.isDeadOrDying()&&!this.workspace.isReadOnly()&&!this.block.isInFlyout}startDrag(a){if(this.block.isShadow())this.startDraggingShadow(a);else{this.dragging=!0;this.fireDragStartEvent();this.startLoc=this.block.getRelativeToSurfaceXY();this.connectionCandidate=null;this.connectionPreviewer=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_PREVIEWER,this.workspace.options))(this.block);startTextWidthCache$$module$build$src$core$utils$dom();\nthis.workspace.setResizesEnabled(!1);disconnectUiStop$$module$build$src$core$block_animations();a=this.shouldHealStack(a);this.shouldDisconnect(a)&&this.disconnectBlock(a);this.block.setDragging(!0);var b;(b=this.workspace.getLayerManager())==null||b.moveToDragLayer(this.block)}}shouldHealStack(a){return!!a&&(a.altKey||a.ctrlKey||a.metaKey)}startDraggingShadow(a){const b=this.block.getParent();if(!b)throw Error(\"Tried to drag a shadow block with no parent. Shadow blocks should always have parents.\");\nthis.dragOffset=Coordinate$$module$build$src$core$utils$coordinate.difference(b.getRelativeToSurfaceXY(),this.block.getRelativeToSurfaceXY());b.startDrag(a)}shouldDisconnect(a){return!!(this.block.getParent()||a&&this.block.nextConnection&&this.block.nextConnection.targetBlock())}disconnectBlock(a){let b,c,d;this.startParentConn=(d=(b=this.block.outputConnection)==null?void 0:b.targetConnection)!=null?d:(c=this.block.previousConnection)==null?void 0:c.targetConnection;if(a){let e;this.startChildConn=\n(e=this.block.nextConnection)==null?void 0:e.targetConnection}this.block.unplug(a);disconnectUiEffect$$module$build$src$core$block_animations(this.block)}fireDragStartEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DRAG))(this.block,!0,this.block.getDescendants(!1));fire$$module$build$src$core$events$utils(a)}fireDragEndEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DRAG))(this.block,\n!1,this.block.getDescendants(!1));fire$$module$build$src$core$events$utils(a)}fireMoveEvent(){if(!this.block.isDeadOrDying()){var a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this.block);a.setReason([\"drag\"]);a.oldCoordinate=this.startLoc;a.recordNew();fire$$module$build$src$core$events$utils(a)}}drag(a){if(this.block.isShadow()){let b;(b=this.block.getParent())==null||b.drag(Coordinate$$module$build$src$core$utils$coordinate.sum(a,this.dragOffset))}else this.block.moveDuringDrag(a),\nthis.updateConnectionPreview(this.block,Coordinate$$module$build$src$core$utils$coordinate.difference(a,this.startLoc))}updateConnectionPreview(a,b){var c=this.connectionCandidate;const d=this.getConnectionCandidate(a,b);if(d){this.connectionCandidate=b=c&&this.currCandidateIsBetter(c,b,d)?c:d;var {local:e,neighbour:f}=b;b=e.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE||e.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT;var g;c=f.isConnected()&&\n!((g=f.targetBlock())==null?0:g.isInsertionMarker());if(b&&c&&!this.orphanCanConnectAtEnd(a,f.targetBlock(),e.type)){let k;(k=this.connectionPreviewer)==null||k.previewReplacement(e,f,f.targetBlock())}else{var h;(h=this.connectionPreviewer)==null||h.previewConnection(e,f)}}else{let k;(k=this.connectionPreviewer)==null||k.hidePreview();this.connectionCandidate=null}}orphanCanConnectAtEnd(a,b,c){return!!Connection$$module$build$src$core$connection.getConnectionForOrphanedConnection(a,c===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE?\nb.outputConnection:b.previousConnection)}currCandidateIsBetter(a,b,c){const {local:d,neighbour:e}=a;a=new Coordinate$$module$build$src$core$utils$coordinate(d.x,d.y);const f=new Coordinate$$module$build$src$core$utils$coordinate(e.x,e.y);b=Coordinate$$module$build$src$core$utils$coordinate.distance(Coordinate$$module$build$src$core$utils$coordinate.sum(a,b),f);return c.distance>b-$.config$$module$build$src$core$config.currentConnectionPreference}getConnectionCandidate(a,b){a=this.getLocalConnections(a);\nlet c=this.getSearchRadius(),d=null;for(const e of a){const {connection:f,radius:g}=e.closest(c,b);f&&(d={local:e,neighbour:f,distance:g},c=g)}return d}getSearchRadius(){return this.connectionCandidate?$.config$$module$build$src$core$config.connectingSnapRadius:$.config$$module$build$src$core$config.snapRadius}getLocalConnections(a){const b=a.getConnections_(!1),c=a.lastConnectionInStack(!0);c&&c!==a.nextConnection&&b.push(c);return b}endDrag(a){if(this.block.isShadow()){let c;(c=this.block.getParent())==\nnull||c.endDrag(a)}else{this.originalEventGroup=$.getGroup$$module$build$src$core$events$utils();this.fireDragEndEvent();this.fireMoveEvent();stopTextWidthCache$$module$build$src$core$utils$dom();disconnectUiStop$$module$build$src$core$block_animations();var b;(b=this.connectionPreviewer)==null||b.hidePreview();if(!this.block.isDeadOrDying()&&this.dragging){let c;(c=this.workspace.getLayerManager())==null||c.moveOffDragLayer(this.block,BLOCK$$module$build$src$core$layers);this.block.setDragging(!1)}this.connectionCandidate?\n(this.applyConnections(this.connectionCandidate),this.disposeStep()):this.block.queueRender().then(()=>this.disposeStep())}}disposeStep(){const a=$.getGroup$$module$build$src$core$events$utils();$.setGroup$$module$build$src$core$events$utils(this.originalEventGroup);this.block.snapToGrid();let b;(b=this.connectionPreviewer)==null||b.dispose();this.workspace.setResizesEnabled(!0);$.setGroup$$module$build$src$core$events$utils(a)}applyConnections(a){const {local:b,neighbour:c}=a;b.connect(c);const d=\nb.isSuperior()?c:b,e=this.block.getRootBlock();finishQueuedRenders$$module$build$src$core$render_management().then(()=>{connectionUiEffect$$module$build$src$core$block_animations(d.getSourceBlock());setTimeout(()=>{e.bringToFront()},0)})}revertDrag(){if(this.block.isShadow()){let c;(c=this.block.getParent())==null||c.revertDrag()}else{var a;(a=this.connectionPreviewer)==null||a.hidePreview();this.connectionCandidate=null;var b;(b=this.startChildConn)==null||b.connect(this.block.nextConnection);if(this.startParentConn)switch(this.startParentConn.type){case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:this.startParentConn.connect(this.block.outputConnection);\nbreak;case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:this.startParentConn.connect(this.block.previousConnection)}else{this.block.moveTo(this.startLoc,[\"drag\"]);let c;(c=this.workspace.getLayerManager())==null||c.moveOffDragLayer(this.block,BLOCK$$module$build$src$core$layers);bumpObjectIntoBounds$$module$build$src$core$bump_objects(this.workspace,this.workspace.getMetricsManager().getScrollMetrics(!0),this.block)}this.startParentConn=this.startChildConn=null;this.block.setDragging(!1);\nthis.dragging=!1}}},module$build$src$core$dragging$block_drag_strategy={};module$build$src$core$dragging$block_drag_strategy.BlockDragStrategy=BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy;var TextBubble$$module$build$src$core$bubbles$text_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(b,c,d);this.text=a;this.workspace=b;this.anchor=c;this.ownerRect=d;this.paragraph=this.stringToSvg(a,this.contentContainer);this.updateBubbleSize();addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyTextBubble\")}getText(){return this.text}setText(a){this.text=a;removeNode$$module$build$src$core$utils$dom(this.paragraph);this.paragraph=this.stringToSvg(a,\nthis.contentContainer);this.updateBubbleSize()}stringToSvg(a,b){b=this.createParagraph(b);a=this.createTextFragments(b,a);this.workspace.RTL&&this.rightAlignTextFragments(b.getBBox().width,a);return b}createParagraph(a){return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyText blocklyBubbleText blocklyNoPointerEvents\",transform:`translate(0,${Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH})`,style:`direction: ${this.workspace.RTL?\n\"rtl\":\"ltr\"}`},a)}createTextFragments(a,b){let c=1;return b.split(\"\\n\").map(d=>{const e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,{y:`${c}em`,x:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},a);d=document.createTextNode(d);e.appendChild(d);c+=1;return e})}rightAlignTextFragments(a,b){for(const c of b)c.setAttribute(\"text-anchor\",\"start\"),c.setAttribute(\"x\",`${a+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH}`)}updateBubbleSize(){const a=\nthis.paragraph.getBBox();this.setSize(new Size$$module$build$src$core$utils$size(a.width+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2,a.height+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2),!0)}},module$build$src$core$bubbles$text_bubble={};module$build$src$core$bubbles$text_bubble.TextBubble=TextBubble$$module$build$src$core$bubbles$text_bubble;var SIZE$$module$build$src$core$icons$warning_icon=17,WarningIcon$$module$build$src$core$icons$warning_icon=class extends Icon$$module$build$src$core$icons$icon{constructor(a){super(a);this.sourceBlock=a;this.textMap=new Map;this.textBubble=null}getType(){return WarningIcon$$module$build$src$core$icons$warning_icon.TYPE}initView(a){this.svgRoot||(super.initView(a),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconShape\",d:\"M2,15Q-1,15 0.5,12L6.5,1.7Q8,-1 9.5,1.7L15.5,12Q17,15 14,15z\"},\nthis.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconSymbol\",d:\"m7,4.8v3.16l0.27,2.27h1.46l0.27,-2.27v-3.16z\"},this.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyIconSymbol\",x:\"7\",y:\"11\",height:\"2\",width:\"2\"},this.svgRoot),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyWarningIcon\"))}dispose(){super.dispose();let a;(a=this.textBubble)==null||\na.dispose()}getWeight(){return WarningIcon$$module$build$src$core$icons$warning_icon.WEIGHT}getSize(){return new Size$$module$build$src$core$utils$size(SIZE$$module$build$src$core$icons$warning_icon,SIZE$$module$build$src$core$icons$warning_icon)}applyColour(){super.applyColour();let a;(a=this.textBubble)==null||a.setColour(this.sourceBlock.getColour())}updateCollapsed(){}isShownWhenCollapsed(){return!0}onLocationChange(a){super.onLocationChange(a);let b;(b=this.textBubble)==null||b.setAnchorLocation(this.getAnchorLocation())}addMessage(a,\nb){if(this.textMap.get(b)===a)return this;a?this.textMap.set(b,a):this.textMap.delete(b);let c;(c=this.textBubble)==null||c.setText(this.getText());return this}getText(){return[...this.textMap.values()].join(\"\\n\")}onClick(){super.onClick();this.setBubbleVisible(!this.bubbleIsVisible())}isClickableInFlyout(){return!1}bubbleIsVisible(){return!!this.textBubble}setBubbleVisible(a){const b=this;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){if(b.bubbleIsVisible()!==a){yield finishQueuedRenders$$module$build$src$core$render_management();\nif(a)b.textBubble=new TextBubble$$module$build$src$core$bubbles$text_bubble(b.getText(),b.sourceBlock.workspace,b.getAnchorLocation(),b.getBubbleOwnerRect()),b.applyColour();else{let c;(c=b.textBubble)==null||c.dispose();b.textBubble=null}fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BUBBLE_OPEN))(b.sourceBlock,a,\"warning\"))}})}getBubble(){return this.textBubble}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$warning_icon/\n2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,new Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){const a=this.sourceBlock.getSvgRoot().getBBox();return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}};WarningIcon$$module$build$src$core$icons$warning_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.WARNING;WarningIcon$$module$build$src$core$icons$warning_icon.WEIGHT=2;\nvar module$build$src$core$icons$warning_icon={};module$build$src$core$icons$warning_icon.WarningIcon=WarningIcon$$module$build$src$core$icons$warning_icon;var BlockSvg$$module$build$src$core$block_svg=class extends Block$$module$build$src$core$block{constructor(a,b,c){super(a,b,c);this.childlessWidth=this.width=this.height=0;this.warningTextDb=new Map;this.mutator=null;this.rendered=!0;this.visuallyDisabled=!1;this.translation=\"\";this.dragging=!1;this.relativeCoords=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.dragStrategy=new BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy(this);if(!a.rendered)throw TypeError(\"Cannot create a rendered block in a headless workspace\");\nthis.workspace=a;this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});b&&addClass$$module$build$src$core$utils$dom(this.svgGroup,b);this.style=a.getRenderer().getConstants().getBlockStyle(null);this.pathObject=a.getRenderer().makePathObject(this.svgGroup,this.style);a=this.pathObject.svgPath;a.tooltip=this;bindMouseEvents$$module$build$src$core$tooltip(a);this.svgGroup.setAttribute(\"data-id\",this.id);a.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();\nthis.doInit_()}initSvg(){if(!this.initialized){for(var a of this.inputList)a.init();for(const b of this.getIcons())b.initView(this.createIconPointerDownListener(b)),b.updateEditable();this.applyColour();this.pathObject.updateMovable(this.isMovable()||this.isInFlyout);(a=this.getSvgRoot())&&conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onMouseDown);a.parentNode||this.workspace.getCanvas().appendChild(a);this.initialized=!0}}getColourSecondary(){return this.style.colourSecondary}getColourTertiary(){return this.style.colourTertiary}select(){this.addSelect();\nfireSelectedEvent$$module$build$src$core$common(this)}unselect(){this.removeSelect();fireSelectedEvent$$module$build$src$core$common(null)}setParent(a){var b=this.parentBlock_;if(a!==b){startTextWidthCache$$module$build$src$core$utils$dom();super.setParent(a);stopTextWidthCache$$module$build$src$core$utils$dom();var c=this.getSvgRoot();if(!this.workspace.isClearing&&c){var d=this.getRelativeToSurfaceXY(),e=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode(),f,g=this.getSvgRoot().contains((f=\ne==null?void 0:e.getFocusableElement())!=null?f:null);a?(a.getSvgRoot().appendChild(c),g&&e&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e)):b&&(a=this.workspace.getCanvas().querySelector(\".blocklyDragging\"),b=a==null?void 0:a.parentElement,f=this.workspace.getCanvas(),b===f?f.insertBefore(c,a):(f.appendChild(c),g&&e&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e)),this.translate(d.x,d.y));this.applyColour()}}}getRelativeToSurfaceXY(){const a=this.workspace.getLayerManager();\nif(!a)throw Error(\"Cannot calculate position because the workspace has not been appended\");let b=0,c=0,d=this.getSvgRoot();if(d){do{const e=getRelativeXY$$module$build$src$core$utils$svg_math(d);b+=e.x;c+=e.y;d=d.parentNode}while(d&&!a.hasLayer(d))}return new Coordinate$$module$build$src$core$utils$coordinate(b,c)}moveBy(a,b,c){if(this.parentBlock_)throw Error(\"Block has parent\");const d=isEnabled$$module$build$src$core$events$utils();let e=null;d&&(e=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this),\nc&&e.setReason(c));a=new Coordinate$$module$build$src$core$utils$coordinate(a,b);b=this.getRelativeToSurfaceXY();a=Coordinate$$module$build$src$core$utils$coordinate.sum(b,a);this.translate(a.x,a.y);this.updateComponentLocations(a);d&&e&&(e.recordNew(),fire$$module$build$src$core$events$utils(e));this.workspace.resizeContents()}translate(a,b){this.translation=`translate(${a}, ${b})`;this.relativeCoords=new Coordinate$$module$build$src$core$utils$coordinate(a,b);this.getSvgRoot().setAttribute(\"transform\",\nthis.getTranslation())}getTranslation(){return this.translation}moveTo(a,b){const c=this.getRelativeToSurfaceXY();this.moveBy(a.x-c.x,a.y-c.y,b)}moveDuringDrag(a){this.translate(a.x,a.y);this.getSvgRoot().setAttribute(\"transform\",this.getTranslation());this.updateComponentLocations(a)}snapToGrid(){if(!this.isDeadOrDying()&&!this.getParent()&&!this.isInFlyout){var a=this.workspace.getGrid();if(a!=null&&a.shouldSnap()){var b=this.getRelativeToSurfaceXY();a=a.alignXY(b);a!==b&&this.moveTo(a,[\"snap\"])}}}getBoundingRectangle(){return this.getBoundingRectangleWithDimensions(this.getHeightWidth())}getBoundingRectangleWithoutChildren(){return this.getBoundingRectangleWithDimensions({height:this.height,\nwidth:this.childlessWidth})}getBoundingRectangleWithDimensions(a){const b=this.getRelativeToSurfaceXY();let c,d;this.RTL?(c=b.x-a.width,d=b.x):(c=b.x,d=b.x+a.width);return new Rect$$module$build$src$core$utils$rect(b.y,b.y+a.height,c,d)}markDirty(){this.pathObject.constants=this.workspace.getRenderer().getConstants();for(let a=0,b;b=this.inputList[a];a++)b.markDirty()}setCollapsed(a){this.collapsed_!==a&&(super.setCollapsed(a),this.updateCollapsed())}childHasWarning(){const a=this.getChildren(!1);\nfor(const b of a)if(b.getIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE)||b.childHasWarning())return!0;return!1}updateCollapsed(){var a=this.isCollapsed();const b=COLLAPSED_INPUT_NAME$$module$build$src$core$constants,c=COLLAPSED_FIELD_NAME$$module$build$src$core$constants;for(let e=0,f;f=this.inputList[e];e++)f.name!==b&&f.setVisible(!a);for(var d of this.getIcons())d.updateCollapsed();a?(addClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyCollapsed\"),this.childHasWarning()&&\nthis.setWarningText($.Msg$$module$build$src$core$msg.COLLAPSED_WARNINGS_WARNING,BlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID),a=this.toString(COLLAPSE_CHARS$$module$build$src$core$internal_constants),(d=this.getField(c))?d.setValue(a):(this.getInput(b)||this.appendDummyInput(b)).appendField(new FieldLabel$$module$build$src$core$field_label(a),c)):(this.updateDisabled(),this.removeInput(b),removeClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyCollapsed\"),this.setWarningText(null,\nBlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID))}onMouseDown(a){if(!this.workspace.isReadOnly()){var b=this.workspace.getGesture(a);b&&b.handleBlockStart(a,this)}}showHelp(){const a=typeof this.helpUrl===\"function\"?this.helpUrl():this.helpUrl;a&&window.open(a)}generateContextMenu(a){if(this.workspace.isReadOnly()||!this.contextMenu)return null;a=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({block:this,focusedNode:this},a);this.customContextMenu&&\nthis.customContextMenu(a);return a}calculateContextMenuLocation(a){if(a instanceof PointerEvent)return new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY);a=wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this.workspace,this.getRelativeToSurfaceXY());let b,c;const d=(b=this.inputList.filter(e=>e.isVisible()).flatMap(e=>e.fieldRow).find(e=>e.isVisible()))==null?void 0:(c=b.getSvgRoot())==null?void 0:c.getBoundingClientRect();return new Coordinate$$module$build$src$core$utils$coordinate(this.RTL?\na.x-5:a.x+5,(d&&d.height?d.y+d.height:a.y+this.height)+5)}showContextMenu(a){const b=this.generateContextMenu(a),c=this.calculateContextMenuLocation(a);b&&b.length&&(show$$module$build$src$core$contextmenu(a,b,this.RTL,this.workspace,c),setCurrentBlock$$module$build$src$core$contextmenu(this))}updateComponentLocations(a){this.dragging||this.updateConnectionLocations(a);this.updateIconLocations(a);this.updateFieldLocations(a);for(const b of this.getChildren(!1))b.updateComponentLocations(Coordinate$$module$build$src$core$utils$coordinate.sum(a,\nb.relativeCoords))}updateConnectionLocations(a){for(const b of this.getConnections_(!1))b.moveToOffset(a)}updateIconLocations(a){for(const b of this.getIcons())b.onLocationChange(a)}updateFieldLocations(a){for(const b of this.inputList)for(const c of b.fieldRow)c.onLocationChange(a)}addClass(a){addClass$$module$build$src$core$utils$dom(this.svgGroup,a)}removeClass(a){removeClass$$module$build$src$core$utils$dom(this.svgGroup,a)}setDragging(a){(this.dragging=a)?(this.translation=\"\",draggingConnections$$module$build$src$core$common.push(...this.getConnections_(!0)),\nthis.addClass(\"blocklyDragging\")):(draggingConnections$$module$build$src$core$common.length=0,this.removeClass(\"blocklyDragging\"));for(let b=0;bc.focusTree(this.workspace),0)}b&&(this.unplug(a),disposeUiEffect$$module$build$src$core$block_animations(this));super.dispose(!!a);\nremoveNode$$module$build$src$core$utils$dom(this.svgGroup)}disposeInternal(){this.disposing=!0;super.disposeInternal();$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===this&&this.workspace.cancelCurrentGesture();[...this.warningTextDb.values()].forEach(a=>clearTimeout(a));this.warningTextDb.clear();this.getIcons().forEach(a=>a.dispose())}checkAndDelete(){this.workspace.isFlyout||($.setGroup$$module$build$src$core$events$utils(!0),this.workspace.hideChaff(),this.outputConnection?\nthis.dispose(!1,!0):this.dispose(!0,!0),$.setGroup$$module$build$src$core$events$utils(!1))}toCopyData(a=!1){return this.isInsertionMarker_?null:{paster:BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE,blockState:save$$module$build$src$core$serialization$blocks(this,{addCoordinates:!0,addNextBlocks:a,saveIds:!1}),typeCounts:getBlockTypeCounts$$module$build$src$core$common(this,!0)}}applyColour(){var a,b;(b=(a=this.pathObject).applyColour)==null||b.call(a,this);a=this.getIcons();for(b=\n0;b{this.isDeadOrDying()||(this.warningTextDb.delete(b),this.setWarningText(a,b))},100));else if(this.isInFlyout&&(a=null),c=this.getIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE),a){let d=this.getSurroundParent(),e=null;for(;d;)d.isCollapsed()&&(e=d),d=d.getSurroundParent();e&&e.setWarningText($.Msg$$module$build$src$core$msg.COLLAPSED_WARNINGS_WARNING,BlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID);\nc?c.addMessage(a,b):this.addIcon((new WarningIcon$$module$build$src$core$icons$warning_icon(this)).addMessage(a,b))}else c&&(b?(c.addMessage(\"\",b),c.getText()||this.removeIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE)):this.removeIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE))}setMutator(a){this.removeIcon($.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE);a&&this.addIcon(a)}addIcon(a){super.addIcon(a);a instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&\n(this.mutator=a);a.initView(this.createIconPointerDownListener(a));a.applyColour();a.updateEditable();this.queueRender();return a}createIconPointerDownListener(a){return b=>{this.isDeadOrDying()||(b=this.workspace.getGesture(b))&&b.setStartIcon(a)}}removeIcon(a){const b=super.removeIcon(a);a.equals($.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE)&&(this.mutator=null);this.queueRender();return b}setDisabledReason(a,b){const c=this.isEnabled();super.setDisabledReason(a,b);this.isEnabled()===\nc||this.getInheritedDisabled()||this.updateDisabled()}setDeletable(a){super.setDeletable(a);a?removeClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyNotDeletable\"):addClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyNotDeletable\")}setHighlighted(a){this.pathObject.updateHighlighted(a)}addSelect(){this.pathObject.updateSelected(!0)}removeSelect(){this.pathObject.updateSelected(!1)}setDeleteStyle(a){this.pathObject.updateDraggingDelete(a)}getColour(){return this.style.colourPrimary}setColour(a){super.setColour(a);\na=this.workspace.getRenderer().getConstants().getBlockStyleForColour(this.colour_);let b,c;(c=(b=this.pathObject).setStyle)==null||c.call(b,a.style);this.style=a.style;this.styleName_=a.name;this.applyColour()}setStyle(a){const b=this.workspace.getRenderer().getConstants().getBlockStyle(a);this.styleName_&&removeClass$$module$build$src$core$utils$dom(this.svgGroup,this.styleName_);if(b){this.hat=b.hat;let c,d;(d=(c=this.pathObject).setStyle)==null||d.call(c,b);this.colour_=b.colourPrimary;this.style=\nb;this.applyColour();addClass$$module$build$src$core$utils$dom(this.svgGroup,a);this.styleName_=a}else throw Error(\"Invalid style name: \"+a);}getStyle(){return this.style}bringToFront(a=!1){const b=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode();let c=this;if(!c.isDeadOrDying()){do{const d=c.getSvgRoot(),e=d.parentNode,f=e.childNodes;f[f.length-1]!==d&&e.appendChild(d);if(a)break;c=c.getParent()}while(c);b&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b)}}setPreviousStatement(a,\nb){super.setPreviousStatement(a,b);this.queueRender()}setNextStatement(a,b){super.setNextStatement(a,b);this.queueRender()}setOutput(a,b){super.setOutput(a,b);this.queueRender()}setInputsInline(a){super.setInputsInline(a);this.queueRender()}removeInput(a,b){a=super.removeInput(a,b);this.queueRender();return a}moveNumberedInputBefore(a,b){super.moveNumberedInputBefore(a,b);this.queueRender()}appendInput(a){super.appendInput(a);this.queueRender();return a}setConnectionTracking(a){this.previousConnection&&\nthis.previousConnection.setTracking(a);this.outputConnection&&this.outputConnection.setTracking(a);if(this.nextConnection){this.nextConnection.setTracking(a);var b=this.nextConnection.targetBlock();b&&b.setConnectionTracking(a)}if(!this.collapsed_)for(b=0;bd.getElement()===a);if(c===-1)return null;c++;c>=b.length&&(c=0);return b[c].getElement()}getPreviousSibling(a){const b=this.flyout.getContents();if(!b)return null;let c=b.findIndex(d=>d.getElement()===\na);if(c===-1)return null;c--;c<0&&(c=b.length-1);return b[c].getElement()}isNavigable(a){return this.policy.isNavigable(a)}isApplicable(a){return this.policy.isApplicable(a)}},module$build$src$core$keyboard_nav$flyout_navigation_policy={};module$build$src$core$keyboard_nav$flyout_navigation_policy.FlyoutNavigationPolicy=FlyoutNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_navigation_policy;var FlyoutSeparator$$module$build$src$core$flyout_separator=class{constructor(a,b){this.gap=a;this.axis=b;this.y=this.x=0}getBoundingRectangle(){switch(this.axis){case \"x\":return new Rect$$module$build$src$core$utils$rect(this.y,this.y,this.x,this.x+this.gap);case \"y\":return new Rect$$module$build$src$core$utils$rect(this.y,this.y+this.gap,this.x,this.x)}}moveBy(a,b,c){this.x+=a;this.y+=b}isNavigable(){return!1}getFocusableElement(){throw Error(\"Cannot be focused\");}getFocusableTree(){throw Error(\"Cannot be focused\");\n}onNodeFocus(){}onNodeBlur(){}canBeFocused(){return!1}},module$build$src$core$flyout_separator={};module$build$src$core$flyout_separator.FlyoutSeparator=FlyoutSeparator$$module$build$src$core$flyout_separator;var FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy=class{getFirstChild(a){return null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return!1}isApplicable(a){return a instanceof FlyoutSeparator$$module$build$src$core$flyout_separator}},module$build$src$core$keyboard_nav$flyout_separator_navigation_policy={};\nmodule$build$src$core$keyboard_nav$flyout_separator_navigation_policy.FlyoutSeparatorNavigationPolicy=FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy;var BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy=class{getFirstChild(a){return a.getEditor()}getParent(a){let b;return(b=a.getOwner())!=null?b:null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof TextInputBubble$$module$build$src$core$bubbles$textinput_bubble}},module$build$src$core$keyboard_nav$block_comment_navigation_policy={};\nmodule$build$src$core$keyboard_nav$block_comment_navigation_policy.BlockCommentNavigationPolicy=BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy;var BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy=class{getFirstChild(a){return getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy(a,!0)[0]}getParent(a){var b;if((b=a.previousConnection)==null?0:b.targetBlock()){if(b=a.getSurroundParent())return b}else{let c;if((c=a.outputConnection)==null?0:c.targetBlock())return a.outputConnection.targetBlock()}return a.workspace}getNextSibling(a){let b;if((b=a.nextConnection)==null?0:b.targetBlock()){let d;\nreturn(d=a.nextConnection)==null?void 0:d.targetBlock()}let c;return((c=a.outputConnection)==null?0:c.targetBlock())?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1):a.getSurroundParent()?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a.getTopStackBlock(),1):this.getParent(a)instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1):null}getPreviousSibling(a){let b;\nif((b=a.previousConnection)==null?0:b.targetBlock()){let d;return(d=a.previousConnection)==null?void 0:d.targetBlock()}let c;return((c=a.outputConnection)==null?0:c.targetBlock())?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1):this.getParent(a)instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1):null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof BlockSvg$$module$build$src$core$block_svg}},\nmodule$build$src$core$keyboard_nav$block_navigation_policy={};module$build$src$core$keyboard_nav$block_navigation_policy.BlockNavigationPolicy=BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy;module$build$src$core$keyboard_nav$block_navigation_policy.navigateBlock=navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy;module$build$src$core$keyboard_nav$block_navigation_policy.navigateStacks=navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy;var CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy=class{getFirstChild(a){return null}getParent(a){return a.getCommentView().workspace.getCommentById(a.getCommentView().commentId)}getNextSibling(a){const b=a.getCommentView().getCommentBarButtons();a=b.indexOf(a);return a>=0&&a+10?b[a-1]:null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof\nCommentBarButton$$module$build$src$core$comments$comment_bar_button}},module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy={};module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy.CommentBarButtonNavigationPolicy=CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy;var CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy=class{getFirstChild(a){return null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof CommentEditor$$module$build$src$core$comments$comment_editor}},module$build$src$core$keyboard_nav$comment_editor_navigation_policy={};\nmodule$build$src$core$keyboard_nav$comment_editor_navigation_policy.CommentEditorNavigationPolicy=CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy;var ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy=class{getFirstChild(a){return a.getParentInput()?a.targetConnection:null}getParent(a){return a.getSourceBlock()}getNextSibling(a){if(a.getParentInput())return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1);if(a.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT){const c=a.targetConnection;var b=a.getSourceBlock();if(!c&&b.getRootBlock().lastConnectionInStack(!1)===\na){a=b.workspace.getTopBlocks(!0);b=a.indexOf(b.getRootBlock())+1;b>=a.length&&(b=0);b=a[b];let d;return(d=this.getParentConnection(b))!=null?d:b}return c}return a.getSourceBlock()}getPreviousSibling(a){if(a.getParentInput())return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1);if(a.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||a.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE){const c=a.targetConnection&&\n!a.targetConnection.getParentInput()?a.targetConnection:null;var b=a.getSourceBlock();if(!c&&this.getParentConnection(b.getRootBlock())===a){a=b.workspace.getTopBlocks(!0);b=a.indexOf(b.getRootBlock())-1;b<0&&(b=a.length-1);b=a[b];let d;return(d=b.lastConnectionInStack(!1))!=null?d:b}return c}return a.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT?a.getSourceBlock():null}getParentConnection(a){let b;return!a.outputConnection||((b=a.previousConnection)==null?0:b.isConnected())?\na.previousConnection:a.outputConnection}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof RenderedConnection$$module$build$src$core$rendered_connection}},module$build$src$core$keyboard_nav$connection_navigation_policy={};module$build$src$core$keyboard_nav$connection_navigation_policy.ConnectionNavigationPolicy=ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy;var FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy=class{getFirstChild(a){return null}getParent(a){return a.getSourceBlock()}getNextSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){let b;return a.canBeFocused()&&a.isVisible()&&(a.isClickable()||a.isCurrentlyEditable())&&!(((b=a.getSourceBlock())==\nnull?0:b.isSimpleReporter())&&a.isFullBlockField())&&a.getParentInput().isVisible()}isApplicable(a){return a instanceof Field$$module$build$src$core$field}},module$build$src$core$keyboard_nav$field_navigation_policy={};module$build$src$core$keyboard_nav$field_navigation_policy.FieldNavigationPolicy=FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy;var module$build$src$core$icons$registry={};module$build$src$core$icons$registry.register=register$$module$build$src$core$icons$registry;module$build$src$core$icons$registry.unregister=unregister$$module$build$src$core$icons$registry;var SIZE$$module$build$src$core$icons$comment_icon=17,DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon=160,DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon=80,CommentIcon$$module$build$src$core$icons$comment_icon=class extends Icon$$module$build$src$core$icons$icon{constructor(a){super(a);this.sourceBlock=a;this.textInputBubble=null;this.text=\"\";this.bubbleSize=new Size$$module$build$src$core$utils$size(DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon,DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon);\nthis.bubbleVisiblity=!1}getType(){return CommentIcon$$module$build$src$core$icons$comment_icon.TYPE}initView(a){this.svgRoot||(super.initView(a),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CIRCLE,{\"class\":\"blocklyIconShape\",r:\"8\",cx:\"8\",cy:\"8\"},this.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconSymbol\",d:\"m6.8,10h2c0.003,-0.617 0.271,-0.962 0.633,-1.266 2.875,-2.4050.607,-5.534 -3.765,-3.874v1.7c3.12,-1.657 3.698,0.118 2.336,1.25-1.201,0.998 -1.201,1.528 -1.204,2.19z\"},\nthis.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyIconSymbol\",x:\"6.8\",y:\"10.78\",height:\"2\",width:\"2\"},this.svgRoot),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCommentIcon\"))}dispose(){super.dispose();let a;(a=this.textInputBubble)==null||a.dispose()}getWeight(){return CommentIcon$$module$build$src$core$icons$comment_icon.WEIGHT}getSize(){return new Size$$module$build$src$core$utils$size(SIZE$$module$build$src$core$icons$comment_icon,\nSIZE$$module$build$src$core$icons$comment_icon)}applyColour(){super.applyColour();const a=this.sourceBlock.getColour();let b;(b=this.textInputBubble)==null||b.setColour(a)}updateEditable(){const a=this,b=()=>super.updateEditable;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){b().call(a);a.bubbleIsVisible()&&(yield a.setBubbleVisible(!1),yield a.setBubbleVisible(!0))})}onLocationChange(a){const b=this.workspaceLocation;super.onLocationChange(a);this.bubbleLocation&&(a=Coordinate$$module$build$src$core$utils$coordinate.difference(this.workspaceLocation,\nb),this.bubbleLocation=Coordinate$$module$build$src$core$utils$coordinate.sum(this.bubbleLocation,a));a=this.getAnchorLocation();let c;(c=this.textInputBubble)==null||c.setAnchorLocation(a)}setText(a){const b=this.text;fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\"comment\",null,b,a));this.text=a;let c;(c=this.textInputBubble)==null||c.setText(this.text)}getText(){return this.text}setBubbleSize(a){this.bubbleSize=\na;let b;(b=this.textInputBubble)==null||b.setSize(this.bubbleSize,!0)}getBubbleSize(){return this.bubbleSize}setBubbleLocation(a){this.bubbleLocation=a;let b;(b=this.textInputBubble)==null||b.moveDuringDrag(a)}getBubbleLocation(){return this.bubbleLocation}saveState(){if(this.text){const a={text:this.text,pinned:this.bubbleIsVisible(),height:this.bubbleSize.height,width:this.bubbleSize.width},b=this.getBubbleLocation();b&&(a.x=this.sourceBlock.workspace.RTL?this.sourceBlock.workspace.getWidth()-(b.x+\nthis.bubbleSize.width):b.x,a.y=b.y);return a}return null}loadState(a){let b;this.text=(b=a.text)!=null?b:\"\";let c,d;this.bubbleSize=new Size$$module$build$src$core$utils$size((c=a.width)!=null?c:DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon,(d=a.height)!=null?d:DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon);let e;this.bubbleVisiblity=(e=a.pinned)!=null?e:!1;this.setBubbleVisible(this.bubbleVisiblity);let f=a.x;const g=a.y;finishQueuedRenders$$module$build$src$core$render_management().then(()=>\n{f&&g&&(f=this.sourceBlock.workspace.RTL?this.sourceBlock.workspace.getWidth()-(f+this.bubbleSize.width):f,this.setBubbleLocation(new Coordinate$$module$build$src$core$utils$coordinate(f,g)))})}onClick(){super.onClick();this.setBubbleVisible(!this.bubbleIsVisible())}isClickableInFlyout(){return!1}onTextChange(){if(this.textInputBubble){var a=this.textInputBubble.getText();this.text!==a&&(fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\n\"comment\",null,this.text,a)),this.text=a)}}onSizeChange(){this.textInputBubble&&(this.bubbleSize=this.textInputBubble.getSize())}onBubbleLocationChange(){this.textInputBubble&&(this.bubbleLocation=this.textInputBubble.getRelativeToSurfaceXY())}bubbleIsVisible(){return this.bubbleVisiblity}setBubbleVisible(a){const b=this;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){b.bubbleVisiblity!==a&&(b.bubbleVisiblity=a,yield finishQueuedRenders$$module$build$src$core$render_management(),\n!b.sourceBlock.rendered||b.sourceBlock.isInFlyout||b.sourceBlock.isInsertionMarker()||(a?(b.sourceBlock.isEditable()?b.showEditableBubble():b.showNonEditableBubble(),b.applyColour()):b.hideBubble(),fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BUBBLE_OPEN))(b.sourceBlock,a,\"comment\"))))})}getBubble(){return this.textInputBubble}showEditableBubble(){this.createBubble();let a;(a=this.textInputBubble)==null||a.addTextChangeListener(()=>\nthis.onTextChange());let b;(b=this.textInputBubble)==null||b.addSizeChangeListener(()=>this.onSizeChange())}showNonEditableBubble(){this.createBubble();let a;(a=this.textInputBubble)==null||a.setEditable(!1)}createBubble(){this.textInputBubble=new TextInputBubble$$module$build$src$core$bubbles$textinput_bubble(this.sourceBlock.workspace,this.getAnchorLocation(),this.getBubbleOwnerRect(),this);this.textInputBubble.setText(this.getText());this.textInputBubble.setSize(this.bubbleSize,!0);this.bubbleLocation&&\nthis.textInputBubble.moveDuringDrag(this.bubbleLocation);this.textInputBubble.addTextChangeListener(()=>this.onTextChange());this.textInputBubble.addSizeChangeListener(()=>this.onSizeChange());this.textInputBubble.addLocationChangeListener(()=>this.onBubbleLocationChange())}hideBubble(){let a;(a=this.textInputBubble)==null||a.dispose();this.textInputBubble=null}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$comment_icon/2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,\nnew Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){return this.sourceBlock.getBoundingRectangleWithoutChildren()}};CommentIcon$$module$build$src$core$icons$comment_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.COMMENT;CommentIcon$$module$build$src$core$icons$comment_icon.WEIGHT=3;register$$module$build$src$core$icons$registry(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE,CommentIcon$$module$build$src$core$icons$comment_icon);\nvar module$build$src$core$icons$comment_icon={};module$build$src$core$icons$comment_icon.CommentIcon=CommentIcon$$module$build$src$core$icons$comment_icon;var IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy=class{getFirstChild(a){if(a instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&a.bubbleIsVisible()&&$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===a){let b,c;return(c=(b=a.getBubble())==null?void 0:b.getWorkspace())!=null?c:null}if(a instanceof CommentIcon$$module$build$src$core$icons$comment_icon&&a.bubbleIsVisible()&&$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===\na){let b,c;return(c=(b=a.getBubble())==null?void 0:b.getEditor())!=null?c:null}return null}getParent(a){return a.getSourceBlock()}getNextSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof Icon$$module$build$src$core$icons$icon}},module$build$src$core$keyboard_nav$icon_navigation_policy=\n{};module$build$src$core$keyboard_nav$icon_navigation_policy.IconNavigationPolicy=IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy;var WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy=class{getFirstChild(a){return a.view.getCommentBarButtons()[0]}getParent(a){return a.workspace}getNextSibling(a){return navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment}},\nmodule$build$src$core$keyboard_nav$workspace_comment_navigation_policy={};module$build$src$core$keyboard_nav$workspace_comment_navigation_policy.WorkspaceCommentNavigationPolicy=WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy;var WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy=class{getFirstChild(a){a=a.getTopBlocks(!0);return a.length?a[0]:null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()&&!a.isMutator}isApplicable(a){return a instanceof WorkspaceSvg$$module$build$src$core$workspace_svg}},module$build$src$core$keyboard_nav$workspace_navigation_policy={};\nmodule$build$src$core$keyboard_nav$workspace_navigation_policy.WorkspaceNavigationPolicy=WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy;var Navigator$$module$build$src$core$navigator=class{constructor(){this.rules=[new BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy,new FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy,new ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy,new WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy,new IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy,\nnew WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy,new CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy,new BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy,new CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy]}addNavigationPolicy(a){this.rules.push(a)}get(a){return this.rules.find(b=>b.isApplicable(a))}getFirstChild(a){let b;\nconst c=(b=this.get(a))==null?void 0:b.getFirstChild(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getFirstChild(c)||this.getNextSibling(c)}getParent(a){let b;const c=(b=this.get(a))==null?void 0:b.getParent(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getParent(c)}getNextSibling(a){let b;const c=(b=this.get(a))==null?void 0:b.getNextSibling(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getNextSibling(c)}getPreviousSibling(a){let b;\nconst c=(b=this.get(a))==null?void 0:b.getPreviousSibling(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getPreviousSibling(c)}},module$build$src$core$navigator={};module$build$src$core$navigator.Navigator=Navigator$$module$build$src$core$navigator;var FlyoutNavigator$$module$build$src$core$flyout_navigator=class extends Navigator$$module$build$src$core$navigator{constructor(a){super();this.rules.push(new FlyoutButtonNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_button_navigation_policy,new FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy);this.rules=this.rules.map(b=>new FlyoutNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_navigation_policy(b,a))}},module$build$src$core$flyout_navigator=\n{};module$build$src$core$flyout_navigator.FlyoutNavigator=FlyoutNavigator$$module$build$src$core$flyout_navigator;var ScrollbarPair$$module$build$src$core$scrollbar_pair=class{constructor(a,b,c,d,e){this.workspace=a;this.oldHostMetrics=this.corner_=this.vScroll=this.hScroll=null;b=b===void 0?!0:b;c=c===void 0?!0:c;const f=b&&c;b&&(this.hScroll=new Scrollbar$$module$build$src$core$scrollbar(a,!0,f,d,e));c&&(this.vScroll=new Scrollbar$$module$build$src$core$scrollbar(a,!1,f,d,e));f&&(this.corner_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{height:Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness,\nwidth:Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness,\"class\":\"blocklyScrollbarBackground\"}),insertAfter$$module$build$src$core$utils$dom(this.corner_,a.getBubbleCanvas()))}dispose(){removeNode$$module$build$src$core$utils$dom(this.corner_);this.oldHostMetrics=this.corner_=null;this.hScroll&&(this.hScroll.dispose(),this.hScroll=null);this.vScroll&&(this.vScroll.dispose(),this.vScroll=null)}resize(){const a=this.workspace.getMetrics();if(a){var b=!1,c=!1;this.oldHostMetrics&&this.oldHostMetrics.viewWidth===\na.viewWidth&&this.oldHostMetrics.viewHeight===a.viewHeight&&this.oldHostMetrics.absoluteTop===a.absoluteTop&&this.oldHostMetrics.absoluteLeft===a.absoluteLeft?(this.oldHostMetrics&&this.oldHostMetrics.scrollWidth===a.scrollWidth&&this.oldHostMetrics.viewLeft===a.viewLeft&&this.oldHostMetrics.scrollLeft===a.scrollLeft||(b=!0),this.oldHostMetrics&&this.oldHostMetrics.scrollHeight===a.scrollHeight&&this.oldHostMetrics.viewTop===a.viewTop&&this.oldHostMetrics.scrollTop===a.scrollTop||(c=!0)):c=b=!0;if(b||\nc){try{$.disable$$module$build$src$core$events$utils(),this.hScroll&&b&&this.hScroll.resize(a),this.vScroll&&c&&this.vScroll.resize(a)}finally{$.enable$$module$build$src$core$events$utils()}this.workspace.maybeFireViewportChangeEvent()}if(this.hScroll&&this.vScroll){if(!this.oldHostMetrics||this.oldHostMetrics.viewWidth!==a.viewWidth||this.oldHostMetrics.absoluteLeft!==a.absoluteLeft){let d;(d=this.corner_)==null||d.setAttribute(\"x\",String(this.vScroll.position.x))}if(!this.oldHostMetrics||this.oldHostMetrics.viewHeight!==\na.viewHeight||this.oldHostMetrics.absoluteTop!==a.absoluteTop){let d;(d=this.corner_)==null||d.setAttribute(\"y\",String(this.hScroll.position.y))}}this.oldHostMetrics=a}}canScrollHorizontally(){return!!this.hScroll}canScrollVertically(){return!!this.vScroll}setOrigin(a,b){this.hScroll&&this.hScroll.setOrigin(a,b);this.vScroll&&this.vScroll.setOrigin(a,b)}set(a,b,c){this.hScroll&&this.hScroll.set(a,!1);this.vScroll&&this.vScroll.set(b,!1);if(c||c===void 0)a={},this.hScroll&&(a.x=this.hScroll.getRatio_()),\nthis.vScroll&&(a.y=this.vScroll.getRatio_()),this.workspace.setMetrics(a)}setX(a){this.hScroll&&this.hScroll.set(a,!0)}setY(a){this.vScroll&&this.vScroll.set(a,!0)}setContainerVisible(a){this.hScroll&&this.hScroll.setContainerVisible(a);this.vScroll&&this.vScroll.setContainerVisible(a)}isVisible(){let a=!1;this.hScroll&&(a=this.hScroll.isVisible());this.vScroll&&(a=a||this.vScroll.isVisible());return a}setVisible(a){this.hScroll&&this.hScroll.setVisibleInternal(a);this.vScroll&&this.vScroll.setVisibleInternal(a)}resizeContent(a){this.hScroll&&\nthis.hScroll.resizeContentHorizontal(a);this.vScroll&&this.vScroll.resizeContentVertical(a)}resizeView(a){this.hScroll&&this.hScroll.resizeViewHorizontal(a);this.vScroll&&this.vScroll.resizeViewVertical(a)}},module$build$src$core$scrollbar_pair={};module$build$src$core$scrollbar_pair.ScrollbarPair=ScrollbarPair$$module$build$src$core$scrollbar_pair;var SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater=\"sep\",SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater=class{load(a,b){a=new FlyoutSeparator$$module$build$src$core$flyout_separator(0,b.horizontalLayout?\"x\":\"y\");return new FlyoutItem$$module$build$src$core$flyout_item(a,SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater)}gapForItem(a,b){let c;return(c=parseInt(String(a.gap)))!=null?c:b}disposeItem(a){}getType(){return SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater}};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater,SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater);var module$build$src$core$separator_flyout_inflater={SEPARATOR_TYPE:SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater};module$build$src$core$separator_flyout_inflater.SeparatorFlyoutInflater=SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater;var Flyout$$module$build$src$core$flyout_base=class extends DeleteArea$$module$build$src$core$delete_area{constructor(a){super();this.horizontalLayout=!1;this.boundEvents=[];this.reflowWrapper=null;this.contents=[];this.autoClose=!0;this.visible=!1;this.containerVisible=!0;this.CORNER_RADIUS=8;this.SCROLLBAR_MARGIN=2.5;this.height_=this.width_=0;this.dragAngleRange_=70;this.svgGroup_=this.svgBackground_=null;this.inflaters=new Map;a.setMetrics=this.setMetrics_.bind(this);this.workspace_=new WorkspaceSvg$$module$build$src$core$workspace_svg(a);\nthis.workspace_.setMetricsManager(new FlyoutMetricsManager$$module$build$src$core$flyout_metrics_manager(this.workspace_,this));this.workspace_.internalIsFlyout=!0;this.workspace_.setVisible(this.visible);this.workspace_.setNavigator(new FlyoutNavigator$$module$build$src$core$flyout_navigator(this));this.id=genUid$$module$build$src$core$utils$idgenerator();this.RTL=!!a.RTL;this.toolboxPosition_=a.toolboxPosition;this.tabWidth_=this.workspace_.getRenderer().getConstants().TAB_WIDTH;this.MARGIN=this.CORNER_RADIUS;\nthis.GAP_X=this.MARGIN*3;this.GAP_Y=this.MARGIN*3}createDom(a){this.svgGroup_=createSvgElement$$module$build$src$core$utils$dom(a,{\"class\":\"blocklyFlyout\"});this.svgGroup_.style.display=\"none\";this.svgBackground_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyFlyoutBackground\"},this.svgGroup_);this.svgGroup_.appendChild(this.workspace_.createDom());this.workspace_.getThemeManager().subscribe(this.svgBackground_,\"flyoutBackgroundColour\",\n\"fill\");this.workspace_.getThemeManager().subscribe(this.svgBackground_,\"flyoutOpacity\",\"fill-opacity\");return this.svgGroup_}init(a){this.targetWorkspace=a;this.workspace_.targetWorkspace=a;this.workspace_.scrollbar=new ScrollbarPair$$module$build$src$core$scrollbar_pair(this.workspace_,this.horizontalLayout,!this.horizontalLayout,\"blocklyFlyoutScrollbar\",this.SCROLLBAR_MARGIN);this.hide();this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"wheel\",this,this.wheel_));\nthis.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.svgBackground_,\"pointerdown\",this,this.onMouseDown));this.workspace_.getGesture=this.targetWorkspace.getGesture.bind(this.targetWorkspace);this.workspace_.setVariableMap(this.targetWorkspace.getVariableMap());this.workspace_.createPotentialVariableMap();a.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.FLYOUT_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,\nComponentManager$$module$build$src$core$component_manager.Capability.DELETE_AREA,ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET]})}dispose(){this.hide();this.targetWorkspace.getComponentManager().removeComponent(this.id);for(const a of this.boundEvents)unbind$$module$build$src$core$browser_events(a);this.boundEvents.length=0;this.workspace_&&(this.workspace_.getThemeManager().unsubscribe(this.svgBackground_),this.workspace_.dispose());this.svgGroup_&&removeNode$$module$build$src$core$utils$dom(this.svgGroup_)}getWidth(){return this.width_}getHeight(){return this.height_}getFlyoutScale(){return this.targetWorkspace.scale}getWorkspace(){return this.workspace_}setAutoClose(a){this.autoClose=\na;this.targetWorkspace.recordDragTargets();this.targetWorkspace.resizeContents()}autoHide(a){!a&&this.targetWorkspace.getFlyout(!0)===this&&this.autoClose&&this.hide()}getTargetWorkspace(){return this.targetWorkspace}isVisible(){return this.visible}setVisible(a){const b=a!==this.isVisible();this.visible=a;b&&(this.autoClose||this.targetWorkspace.recordDragTargets(),this.updateDisplay())}setContainerVisible(a){const b=a!==this.containerVisible;this.containerVisible=a;b&&this.updateDisplay()}getContents(){return this.contents}setContents(a){this.contents=\na}updateDisplay(){let a;a=this.containerVisible?this.isVisible():!1;this.svgGroup_&&(this.svgGroup_.style.display=a?\"block\":\"none\");let b;(b=this.workspace_.scrollbar)==null||b.setContainerVisible(a)}positionAt_(a,b,c,d){let e;(e=this.svgGroup_)==null||e.setAttribute(\"width\",`${a}`);let f;(f=this.svgGroup_)==null||f.setAttribute(\"height\",`${b}`);this.workspace_.setCachedParentSvgSize(a,b);this.svgGroup_&&setCssTransform$$module$build$src$core$utils$dom(this.svgGroup_,\"translate(\"+c+\"px,\"+d+\"px)\");\nif(a=this.workspace_.scrollbar)a.setOrigin(c,d),a.resize(),a.hScroll&&a.hScroll.setPosition(a.hScroll.position.x,a.hScroll.position.y),a.vScroll&&a.vScroll.setPosition(a.vScroll.position.x,a.vScroll.position.y)}hide(){this.isVisible()&&(this.setVisible(!1),this.reflowWrapper&&(this.workspace_.removeChangeListener(this.reflowWrapper),this.reflowWrapper=null))}show(a){this.workspace_.setResizesEnabled(!1);this.hide();this.clearOldBlocks();typeof a===\"string\"&&(a=this.getDynamicCategoryContents(a));\nthis.setVisible(!0);a=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox(a);a=this.createFlyoutInfo(a);triggerQueuedRenders$$module$build$src$core$render_management(this.workspace_);this.setContents(a);this.layout_(a);this.horizontalLayout?this.height_=0:this.width_=0;this.reflow();this.workspace_.setResizesEnabled(!0);this.reflowWrapper=b=>{b.type!==EventType$$module$build$src$core$events$type.BLOCK_CHANGE&&b.type!==EventType$$module$build$src$core$events$type.BLOCK_FIELD_INTERMEDIATE_CHANGE||\nthis.reflow()};this.workspace_.addChangeListener(this.reflowWrapper)}createFlyoutInfo(a){const b=[],c=this.horizontalLayout?this.GAP_X:this.GAP_Y;for(const d of a)if(\"custom\"in d&&(a=this.getDynamicCategoryContents(d.custom),a=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox(a),b.push(...this.createFlyoutInfo(a))),a=d.kind.toLowerCase(),a=this.getInflaterForType(a))b.push(a.load(d,this)),(a=a.gapForItem(d,c))&&b.push(new FlyoutItem$$module$build$src$core$flyout_item(new FlyoutSeparator$$module$build$src$core$flyout_separator(a,\nthis.horizontalLayout?\"x\":\"y\"),SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater));return this.normalizeSeparators(b)}normalizeSeparators(a){for(let b=a.length-1;b>0;b--){const c=a[b].getType().toLowerCase(),d=a[b-1].getType().toLowerCase();c===SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater&&d===SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater&&a.splice(b-1,1)}return a}getDynamicCategoryContents(a){a=this.workspace_.targetWorkspace.getToolboxCategoryCallback(a);\nif(typeof a!==\"function\")throw TypeError(\"Couldn't find a callback function when opening a toolbox category.\");return a(this.workspace_.targetWorkspace)}clearOldBlocks(){this.getContents().forEach(b=>{let c;(c=this.getInflaterForType(b.getType()))==null||c.disposeItem(b)});let a;(a=this.workspace_.getPotentialVariableMap())==null||a.clear()}onMouseDown(a){const b=this.targetWorkspace.getGesture(a);b&&b.handleFlyoutStart(a,this)}isBlockCreatable(a){return a.isEnabled()&&!this.getTargetWorkspace().isReadOnly()}createBlock(a){let b=\nnull;$.disable$$module$build$src$core$events$utils();var c=this.targetWorkspace.getAllVariables();this.targetWorkspace.setResizesEnabled(!1);try{b=this.placeNewBlock(a)}finally{$.enable$$module$build$src$core$events$utils()}this.targetWorkspace.hideChaff();a=getAddedVariables$$module$build$src$core$variables(this.targetWorkspace,c);if(isEnabled$$module$build$src$core$events$utils()){$.setGroup$$module$build$src$core$events$utils(!0);for(c=0;c\n(this.flyout?$.config$$module$build$src$core$config.flyoutDragRadius:$.config$$module$build$src$core$config.dragRadius)}updateIsDraggingFromFlyout(){let a;if(!this.targetBlock||(a=this.flyout)==null||!a.isBlockCreatable(this.targetBlock))return!1;if(!this.flyout.targetWorkspace)throw Error(\"Cannot update dragging from the flyout because the ' +\\n 'flyout's target workspace is undefined\");return!this.flyout.isScrollable()||this.flyout.isDragTowardWorkspace(this.currentDragDeltaXY)?(this.startWorkspace_=\nthis.flyout.targetWorkspace,this.startWorkspace_.updateScreenCalculationsIfScrolled(),$.getGroup$$module$build$src$core$events$utils()||$.setGroup$$module$build$src$core$events$utils(!0),this.startBlock=null,this.targetBlock=this.flyout.createBlock(this.targetBlock),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.targetBlock),!0):!1}updateIsDraggingWorkspace(){if(!this.startWorkspace_)throw Error(\"Cannot update dragging the workspace because the start workspace is undefined\");\nif(this.flyout?this.flyout.isScrollable():this.startWorkspace_&&this.startWorkspace_.isDraggable())this.dragging=!0,this.workspaceDragger=new WorkspaceDragger$$module$build$src$core$workspace_dragger(this.startWorkspace_),this.workspaceDragger.startDrag()}updateIsDragging(a){if(!this.startWorkspace_)throw Error(\"Cannot update dragging because the start workspace is undefined\");if(this.calledUpdateIsDragging)throw Error(\"updateIsDragging_ should only be called once per gesture.\");this.calledUpdateIsDragging=\n!0;this.flyout&&this.updateIsDraggingFromFlyout();const b=getSelected$$module$build$src$core$common();b&&isDraggable$$module$build$src$core$interfaces$i_draggable(b)&&b.isMovable()?(this.dragging=!0,this.dragger=this.createDragger(b,this.startWorkspace_),this.dragger.onDragStart(a),this.dragger.onDrag(a,this.currentDragDeltaXY)):this.updateIsDraggingWorkspace()}createDragger(a,b){return new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.BLOCK_DRAGGER,this.creatorWorkspace.options,\n!0))(a,b)}doStart(a){if(!this.startWorkspace_)throw Error(\"Cannot start the touch gesture becauase the start workspace is undefined\");this.isPinchZoomEnabled=this.startWorkspace_.options.zoomOptions&&this.startWorkspace_.options.zoomOptions.pinch;isTargetInput$$module$build$src$core$browser_events(a)?this.cancel():(this.gestureHasStarted=!0,disconnectUiStop$$module$build$src$core$block_animations(),this.startWorkspace_.updateScreenCalculationsIfScrolled(),this.startWorkspace_.isMutator&&this.startWorkspace_.resize(),\nthis.currentDropdownOwner=getOwner$$module$build$src$core$dropdowndiv(),this.startWorkspace_.hideChaff(!!this.flyout),this.startWorkspace_.markFocused(),this.mostRecentEvent=a,block$$module$build$src$core$tooltip(),isRightButton$$module$build$src$core$browser_events(a)?this.handleRightClick(a):(a.type.toLowerCase()===\"pointerdown\"&&a.pointerType!==\"mouse\"&&longStart$$module$build$src$core$touch(a,this),this.mouseDownXY=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY),this.bindMouseEvents(a),\nthis.isEnding_||this.handleTouchStart(a)))}bindMouseEvents(a){this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointerdown\",null,this.handleStart.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",null,this.handleMove.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",null,this.handleUp.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\n\"pointercancel\",null,this.handleUp.bind(this),!0));a.preventDefault();a.stopPropagation()}handleStart(a){this.isDragging()||(this.handleTouchStart(a),this.isMultiTouch()&&longStop$$module$build$src$core$touch())}handleMove(a){if(this.isDragging()&&shouldHandleEvent$$module$build$src$core$touch(a)||!this.isMultiTouch()){this.updateFromEvent(a);if(this.workspaceDragger)this.workspaceDragger.drag(this.currentDragDeltaXY);else if(this.dragger)this.dragger.onDrag(this.mostRecentEvent,this.currentDragDeltaXY);\na.preventDefault();a.stopPropagation()}else this.isMultiTouch()&&(this.handleTouchMove(a),longStop$$module$build$src$core$touch())}handleUp(a){this.isDragging()||this.handleTouchEnd(a);if(!this.isMultiTouch()||this.isDragging()){if(!shouldHandleEvent$$module$build$src$core$touch(a))return;this.updateFromEvent(a);longStop$$module$build$src$core$touch();if(this.isEnding_){console.log(\"Trying to end a gesture recursively.\");return}this.isEnding_=!0;this.dragger?(keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1),\nthis.dragger.onDragEnd(a,this.currentDragDeltaXY)):this.workspaceDragger?(keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1),this.workspaceDragger.endDrag(this.currentDragDeltaXY)):this.isBubbleClick()||this.isCommentClick()||(this.isFieldClick()?this.doFieldClick():this.isIconClick()?this.doIconClick():this.isBlockClick()?this.doBlockClick():this.isWorkspaceClick()&&this.doWorkspaceClick(a))}a.preventDefault();a.stopPropagation();this.dispose()}handleTouchStart(a){var b=\ngetTouchIdentifierFromEvent$$module$build$src$core$touch(a);this.cachedPoints.set(b,this.getTouchPoint(a));var c=Array.from(this.cachedPoints.keys());c.length===2&&(b=this.cachedPoints.get(c[0]),c=this.cachedPoints.get(c[1]),this.startDistance=Coordinate$$module$build$src$core$utils$coordinate.distance(b,c),this.multiTouch=!0,a.preventDefault())}handleTouchMove(a){const b=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);this.cachedPoints.set(b,this.getTouchPoint(a));if(this.isPinchZoomEnabled&&\nthis.cachedPoints.size===2)this.handlePinch(a);else{this.updateFromEvent(a);if(this.workspaceDragger)this.workspaceDragger.drag(this.currentDragDeltaXY);else if(this.dragger)this.dragger.onDrag(this.mostRecentEvent,this.currentDragDeltaXY);a.preventDefault();a.stopPropagation()}}handlePinch(a){var b=Array.from(this.cachedPoints.keys()),c=this.cachedPoints.get(b[0]);b=this.cachedPoints.get(b[1]);c=Coordinate$$module$build$src$core$utils$coordinate.distance(c,b)/this.startDistance;if(this.previousScale>\n0&&this.previousScale0?b*ZOOM_IN_MULTIPLIER$$module$build$src$core$gesture:b*ZOOM_OUT_MULTIPLIER$$module$build$src$core$gesture;if(!this.startWorkspace_)throw Error(\"Cannot handle a pinch because the start workspace is undefined\");const d=this.startWorkspace_,e=mouseToSvg$$module$build$src$core$browser_events(a,d.getParentSvg(),d.getInverseScreenCTM());d.zoom(e.x,e.y,b)}this.previousScale=c;a.preventDefault()}handleTouchEnd(a){a=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);\nthis.cachedPoints.has(a)&&this.cachedPoints.delete(a);this.cachedPoints.size<2&&(this.cachedPoints.clear(),this.previousScale=0)}getTouchPoint(a){return this.startWorkspace_?new Coordinate$$module$build$src$core$utils$coordinate(a.pageX,a.pageY):null}isMultiTouch(){return this.multiTouch}cancel(){if(!this.isEnding_){longStop$$module$build$src$core$touch();if(this.dragger)this.dragger.onDragEnd(this.mostRecentEvent,this.currentDragDeltaXY);else this.workspaceDragger&&this.workspaceDragger.endDrag(this.currentDragDeltaXY);\nthis.dispose()}}handleRightClick(a){this.targetBlock?(this.bringBlockToFront(),this.targetBlock.workspace.hideChaff(!!this.flyout),this.targetBlock.showContextMenu(a)):this.startBubble?this.startBubble.showContextMenu(a):this.startComment?(this.startComment.workspace.hideChaff(),this.startComment.showContextMenu(a)):this.startWorkspace_&&!this.flyout&&(this.startWorkspace_.hideChaff(),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.startWorkspace_),this.startWorkspace_.showContextMenu(a));\na.preventDefault();a.stopPropagation();keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1);this.dispose()}handleWsStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleWsStart, but the gesture had already been started.\");this.setStartWorkspace(b);this.mostRecentEvent=a;this.startBlock||this.startBubble||this.startComment?this.startBlock&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.startBlock):$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b);\nthis.doStart(a)}fireWorkspaceClick(a){fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(null,a.id,\"workspace\"))}handleFlyoutStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleFlyoutStart, but the gesture had already been started.\");this.setStartFlyout(b);this.handleWsStart(a,b.getWorkspace())}handleBlockStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleBlockStart, but the gesture had already been started.\");\nthis.setStartBlock(b);this.mostRecentEvent=a}handleBubbleStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleBubbleStart, but the gesture had already been started.\");this.setStartBubble(b);this.mostRecentEvent=a}handleCommentStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleCommentStart, but the gesture had already been started.\");this.setStartComment(b);this.mostRecentEvent=a}doFieldClick(){if(!this.startField)throw Error(\"Cannot do a field click because the start field is undefined\");\nthis.bringBlockToFront();this.currentDropdownOwner!==this.startField&&this.startField.showEditor(this.mostRecentEvent)}doIconClick(){if(!this.startIcon)throw Error(\"Cannot do an icon click because the start icon is undefined\");this.bringBlockToFront();this.startIcon.onClick()}doBlockClick(){if(this.flyout&&this.flyout.autoClose){if(!this.targetBlock)throw Error(\"Cannot do a block click because the target block is undefined\");if(this.flyout.isBlockCreatable(this.targetBlock)){$.getGroup$$module$build$src$core$events$utils()||\n$.setGroup$$module$build$src$core$events$utils(!0);var a=this.flyout.createBlock(this.targetBlock);a.snapToGrid();a.bumpNeighbours();$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}}else{if(!this.startWorkspace_)throw Error(\"Cannot do a block click because the start workspace is undefined\");a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(this.startBlock,this.startWorkspace_.id,\"block\");fire$$module$build$src$core$events$utils(a)}this.bringBlockToFront();\n$.setGroup$$module$build$src$core$events$utils(!1)}doWorkspaceClick(a){this.fireWorkspaceClick(this.startWorkspace_||this.creatorWorkspace)}bringBlockToFront(){this.targetBlock&&!this.flyout&&($.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.targetBlock),this.targetBlock.bringToFront())}setStartField(a){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.setStartField, but the gesture had already been started.\");this.startField||(this.startField=a)}setStartIcon(a){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.setStartIcon, but the gesture had already been started.\");\nthis.startIcon||(this.startIcon=a)}setStartBubble(a){this.startBubble||(this.startBubble=a)}setStartComment(a){this.startComment||(this.startComment=a)}setStartBlock(a){this.startBlock||this.startBubble||(this.startBlock=a,a.isInFlyout&&a!==a.getRootBlock()?this.setTargetBlock(a.getRootBlock()):this.setTargetBlock(a))}setTargetBlock(a){a.isShadow()?this.setTargetBlock(a.getParent()):(this.targetBlock=a,$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a))}setStartWorkspace(a){this.startWorkspace_||\n(this.startWorkspace_=a)}setStartFlyout(a){this.flyout||(this.flyout=a)}isBubbleClick(){return!!this.startBubble&&!this.hasExceededDragRadius}isCommentClick(){return!!this.startComment&&!this.hasExceededDragRadius}isBlockClick(){return!!this.startBlock&&!this.hasExceededDragRadius&&!this.isFieldClick()&&!this.isIconClick()}isFieldClick(){return this.startField?this.startField.isClickable()&&!this.hasExceededDragRadius&&(!this.flyout||this.startField.isClickableInFlyout(this.flyout.autoClose)):!1}isIconClick(){if(!this.startIcon)return!1;\nconst a=!this.flyout||!this.startIcon.isClickableInFlyout||this.startIcon.isClickableInFlyout(this.flyout.autoClose);return!this.hasExceededDragRadius&&a}isWorkspaceClick(){return!this.startBlock&&!this.startBubble&&!this.startField&&!this.hasExceededDragRadius}getCurrentDragger(){let a,b;return(b=(a=this.workspaceDragger)!=null?a:this.dragger)!=null?b:null}isDragging(){return this.dragging}hasStarted(){return this.gestureHasStarted}static inProgress(){const a=getAllWorkspaces$$module$build$src$core$common();\nfor(let b=0,c;c=a[b];b++)if(c.currentGesture_)return!0;return!1}},module$build$src$core$gesture={};module$build$src$core$gesture.Gesture=Gesture$$module$build$src$core$gesture;var Grid$$module$build$src$core$grid=class{constructor(a,b){this.pattern=a;this.scale=1;let c;this.spacing=(c=b.spacing)!=null?c:0;let d;this.length=(d=b.length)!=null?d:1;this.line2=(this.line1=a.firstChild)&&this.line1.nextSibling;let e;this.snapToGrid=(e=b.snap)!=null?e:!1}setSpacing(a){this.spacing=a;this.update(this.scale)}getSpacing(){return this.spacing}setLength(a){this.length=a;this.update(this.scale)}getLength(){return this.length}setSnapToGrid(a){this.snapToGrid=a}shouldSnap(){return this.snapToGrid}getPatternId(){return this.pattern.id}update(a){this.scale=\na;var b=this.spacing*a;this.pattern.setAttribute(\"width\",`${b}`);this.pattern.setAttribute(\"height\",`${b}`);b=Math.floor(this.spacing/2)+.5;let c=b-this.length/2,d=b+this.length/2;b*=a;c*=a;d*=a;this.setLineAttributes(this.line1,a,c,d,b,b);this.setLineAttributes(this.line2,a,b,b,c,d)}setLineAttributes(a,b,c,d,e,f){a&&(a.setAttribute(\"stroke-width\",`${b}`),a.setAttribute(\"x1\",`${c}`),a.setAttribute(\"y1\",`${e}`),a.setAttribute(\"x2\",`${d}`),a.setAttribute(\"y2\",`${f}`))}moveTo(a,b){this.pattern.setAttribute(\"x\",\n`${a}`);this.pattern.setAttribute(\"y\",`${b}`)}alignXY(a){var b=this.getSpacing();const c=b/2,d=Math.round(Math.round((a.x-c)/b)*b+c);b=Math.round(Math.round((a.y-c)/b)*b+c);return d===a.x&&b===a.y?a:new Coordinate$$module$build$src$core$utils$coordinate(d,b)}static createDom(a,b,c,d){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATTERN,{id:\"blocklyGridPattern\"+a,patternUnits:\"userSpaceOnUse\"},c);let e,f;if(((e=b.length)!=null?e:1)>0&&((f=b.spacing)!=null?\nf:0)>0){createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{stroke:b.colour},a);let g;(g=b.length)!=null&&g&&createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{stroke:b.colour},a)}else createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{},a);d&&d.style.setProperty(\"--blocklyGridPattern\",`url(#${a.id})`);return a}},module$build$src$core$grid={};\nmodule$build$src$core$grid.Grid=Grid$$module$build$src$core$grid;var module$build$src$core$interfaces$i_autohideable={};module$build$src$core$interfaces$i_autohideable.isAutoHideable=isAutoHideable$$module$build$src$core$interfaces$i_autohideable;var LayerManager$$module$build$src$core$layer_manager=class{constructor(a){this.workspace=a;this.layers=new Map;if(a=a.getInjectionDiv())this.dragLayer=this.createDragLayer(a),this.animationLayer=this.createAnimationLayer(a);a=this.createLayer(BLOCK$$module$build$src$core$layers);addClass$$module$build$src$core$utils$dom(a,\"blocklyBlockCanvas\");a=this.createLayer(BUBBLE$$module$build$src$core$layers);addClass$$module$build$src$core$utils$dom(a,\"blocklyBubbleCanvas\")}createDragLayer(a){const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,\n{\"class\":\"blocklyBlockDragSurface\",xmlns:SVG_NS$$module$build$src$core$utils$dom,\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\"});a.append(b);return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},b)}createAnimationLayer(a){const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{\"class\":\"blocklyAnimationLayer\",xmlns:SVG_NS$$module$build$src$core$utils$dom,\n\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\"});a.append(b);return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},b)}appendToAnimationLayer(a){let b;const c=(b=this.dragLayer)==null?void 0:b.getAttribute(\"transform\");if(c){let e;(e=this.animationLayer)==null||e.setAttribute(\"transform\",c)}let d;(d=this.animationLayer)==null||d.appendChild(a.getSvgRoot())}translateLayers(a,b){a=\n`translate(${a.x}, ${a.y}) scale(${b})`;let c;(c=this.dragLayer)==null||c.setAttribute(\"transform\",a);for(const [,d]of this.layers)d.setAttribute(\"transform\",a)}moveToDragLayer(a){let b;(b=this.dragLayer)==null||b.appendChild(a.getSvgRoot());a.canBeFocused()&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}moveOffDragLayer(a,b){this.append(a,b);a.canBeFocused()&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}append(a,b){this.layers.has(b)||this.createLayer(b);\na=a.getSvgRoot();let c;if(((c=this.layers.get(b))==null?void 0:c.lastChild)!==a){let d;(d=this.layers.get(b))==null||d.appendChild(a)}}createLayer(a){const b=this.workspace.getSvgGroup(),c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});let d=!1;const e=[...this.layers].sort((f,g)=>f[0]-g[0]);for(const [f,g]of e)if(a{let c;return b instanceof BlockSvg$$module$build$src$core$block_svg&&!((c=b.outputConnection)==null?0:c.targetBlock())||b instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment},\n!0))&&this.setCurNode(a);return a}in(){var a=this.getCurNode();if(!a)return null;(a=this.getNextNode(a,()=>!0,!0))&&this.setCurNode(a);return a}prev(){var a=this.getCurNode();if(!a)return null;(a=this.getPreviousNode(a,b=>{let c;return b instanceof BlockSvg$$module$build$src$core$block_svg&&!((c=b.outputConnection)==null?0:c.targetBlock())||b instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment},!0))&&this.setCurNode(a);return a}out(){var a=this.getCurNode();\nif(!a)return null;(a=this.getPreviousNode(a,()=>!0,!0))&&this.setCurNode(a);return a}atEndOfLine(){var a=this.getCurNode();if(!a)return!1;const b=this.getNextNode(a,()=>!0,!0);a=this.getNextNode(a,c=>{let d;return c instanceof BlockSvg$$module$build$src$core$block_svg&&!((d=c.outputConnection)==null?0:d.targetBlock())},!0);return b===a}getNextNodeImpl(a,b,c=new Set){if(!a||c.has(a))return null;let d=this.workspace.getNavigator().getFirstChild(a)||this.workspace.getNavigator().getNextSibling(a);for(var e=\na;e&&!d;){e=this.workspace.getNavigator().getParent(e);if(!e)break;d=this.workspace.getNavigator().getNextSibling(e)}return b(d)?d:d?(c.add(a),this.getNextNodeImpl(d,b,c)):null}getNextNode(a,b,c){return!a||!c&&this.getLastNode()===a?null:this.getNextNodeImpl(a,b)}getPreviousNodeImpl(a,b,c=new Set){if(!a||c.has(a))return null;const d=this.getRightMostChild(this.workspace.getNavigator().getPreviousSibling(a),a)||this.workspace.getNavigator().getParent(a);return b(d)?d:d?(c.add(a),this.getPreviousNodeImpl(d,\nb,c)):null}getPreviousNode(a,b,c){return!a||!c&&this.getFirstNode()===a?null:this.getPreviousNodeImpl(a,b)}getRightMostChild(a,b){if(!a)return a;let c=this.workspace.getNavigator().getFirstChild(a);if(!c||c===b)return a;for(a=c;a&&a!==b;a=this.workspace.getNavigator().getNextSibling(c))c=a;return this.getRightMostChild(c,b)}preDelete(a){var b=this.getCurNode();b=b?[b]:[];var c;let d,e;const f=(e=(c=a.previousConnection)==null?void 0:c.targetConnection)!=null?e:(d=a.outputConnection)==null?void 0:\nd.targetConnection;f&&b.push(f);(c=a.getNextBlock())&&b.push(c);(a=a.getParent())&&b.push(a);b.push(this.workspace);this.potentialNodes=b}postDelete(){const a=this.potentialNodes;this.potentialNodes=null;if(!a)throw Error(\"must call preDelete first\");for(const b of a){let c;if((c=this.getSourceBlockFromNode(b))==null||!c.disposed){this.setCurNode(b);return}}throw Error(\"no valid nodes in this.potentialNodes\");}getCurNode(){return $.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()}setCurNode(a){$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}getFirstNode(){return this.workspace.getNavigator().getFirstChild(this.workspace)}getLastNode(){const a=\nthis.getFirstNode();return this.getPreviousNode(a,()=>!0,!0)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.CURSOR,DEFAULT$$module$build$src$core$registry,LineCursor$$module$build$src$core$keyboard_nav$line_cursor);var module$build$src$core$keyboard_nav$line_cursor={};module$build$src$core$keyboard_nav$line_cursor.LineCursor=LineCursor$$module$build$src$core$keyboard_nav$line_cursor;var MarkerManager$$module$build$src$core$marker_manager=class{constructor(a){this.workspace=a;this.markers=new Map;this.cursor=new LineCursor$$module$build$src$core$keyboard_nav$line_cursor(this.workspace)}registerMarker(a,b){this.markers.has(a)&&this.unregisterMarker(a);this.markers.set(a,b)}unregisterMarker(a){const b=this.markers.get(a);if(b)b.dispose(),this.markers.delete(a);else throw Error(\"Marker with ID \"+a+\" does not exist. Can only unregister markers that exist.\");}getCursor(){return this.cursor}getMarker(a){return this.markers.get(a)||\nnull}setCursor(a){this.cursor=a}dispose(){const a=Object.keys(this.markers);for(let b=0,c;c=a[b];b++)this.unregisterMarker(c);this.markers.clear();this.cursor.dispose()}};MarkerManager$$module$build$src$core$marker_manager.LOCAL_MARKER=\"local_marker_1\";var module$build$src$core$marker_manager={};module$build$src$core$marker_manager.MarkerManager=MarkerManager$$module$build$src$core$marker_manager;var module$build$src$core$icons={};module$build$src$core$icons.CommentIcon=CommentIcon$$module$build$src$core$icons$comment_icon;module$build$src$core$icons.Icon=Icon$$module$build$src$core$icons$icon;module$build$src$core$icons.IconType=IconType$$module$build$src$core$icons$icon_types;module$build$src$core$icons.MutatorIcon=$.MutatorIcon$$module$build$src$core$icons$mutator_icon;module$build$src$core$icons.WarningIcon=WarningIcon$$module$build$src$core$icons$warning_icon;\nmodule$build$src$core$icons.exceptions=module$build$src$core$icons$exceptions;module$build$src$core$icons.registry=module$build$src$core$icons$registry;var module$build$src$core$interfaces$i_procedure_block={};module$build$src$core$interfaces$i_procedure_block.isProcedureBlock=isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block;$.Names$$module$build$src$core$names=class{constructor(a,b){this.db=new Map;this.dbReverse=new Set;this.variableMap=null;this.variablePrefix=b||\"\";this.reservedWords=new Set(a?a.split(\",\"):[])}reset(){this.db.clear();this.dbReverse.clear();this.variableMap=null}setVariableMap(a){this.variableMap=a}getNameForUserVariable(a){return this.variableMap?(a=this.variableMap.getVariableById(a))?a.getName():null:(console.warn(\"Deprecated call to Names.prototype.getName without defining a variable map. To fix, add the following code in your generator's init() function:\\nBlockly.YourGeneratorName.nameDB_.setVariableMap(workspace.getVariableMap());\"),\nnull)}populateVariables(a){a=$.allUsedVarModels$$module$build$src$core$variables(a);for(let b=0;b=1}isHat(a){return(a.type&this.HAT)>=1}isIcon(a){return(a.type&\nthis.ICON)>=1}isSpacer(a){return(a.type&this.SPACER)>=1}isInRowSpacer(a){return(a.type&this.IN_ROW_SPACER)>=1}isSpacerRow(a){return(a.type&this.BETWEEN_ROW_SPACER)>=1}isInput(a){return(a.type&this.INPUT)>=1}isExternalInput(a){return(a.type&this.EXTERNAL_VALUE_INPUT)>=1}isInlineInput(a){return(a.type&this.INLINE_INPUT)>=1}isStatementInput(a){return(a.type&this.STATEMENT_INPUT)>=1}isPreviousConnection(a){return(a.type&this.PREVIOUS_CONNECTION)>=1}isNextConnection(a){return(a.type&this.NEXT_CONNECTION)>=\n1}isPreviousOrNextConnection(a){return this.isPreviousConnection(a)||this.isNextConnection(a)}isRoundCorner(a){return(a.type&this.LEFT_ROUND_CORNER)>=1||(a.type&this.RIGHT_ROUND_CORNER)>=1}isLeftRoundedCorner(a){return this.isRoundCorner(a)&&(a.type&this.LEFT_ROUND_CORNER)>=1}isRightRoundedCorner(a){return this.isRoundCorner(a)&&(a.type&this.RIGHT_ROUND_CORNER)>=1}isLeftSquareCorner(a){return(a.type&this.LEFT_SQUARE_CORNER)>=1}isRightSquareCorner(a){return(a.type&this.RIGHT_SQUARE_CORNER)>=1}isCorner(a){return(a.type&\nthis.CORNER)>=1}isJaggedEdge(a){return(a.type&this.JAGGED_EDGE)>=1}isRow(a){return(a.type&this.ROW)>=1}isBetweenRowSpacer(a){return(a.type&this.BETWEEN_ROW_SPACER)>=1}isTopRow(a){return(a.type&this.TOP_ROW)>=1}isBottomRow(a){return(a.type&this.BOTTOM_ROW)>=1}isTopOrBottomRow(a){return this.isTopRow(a)||this.isBottomRow(a)}isInputRow(a){return(a.type&this.INPUT_ROW)>=1}},Types$$module$build$src$core$renderers$measurables$types=new TypesContainer$$module$build$src$core$renderers$measurables$types,module$build$src$core$renderers$measurables$types=\n{Types:Types$$module$build$src$core$renderers$measurables$types};var Measurable$$module$build$src$core$renderers$measurables$base=class{constructor(a){this.centerline=this.xPos=this.height=this.width=0;this.constants_=a;this.type=Types$$module$build$src$core$renderers$measurables$types.NONE;this.notchOffset=this.constants_.NOTCH_OFFSET_LEFT}},module$build$src$core$renderers$measurables$base={};module$build$src$core$renderers$measurables$base.Measurable=Measurable$$module$build$src$core$renderers$measurables$base;var Row$$module$build$src$core$renderers$measurables$row=class{constructor(a){this.elements=[];this.xPos=this.yPos=this.widthWithConnectedBlocks=this.minWidth=this.minHeight=this.width=this.height=0;this.hasStatement=this.hasExternalInput=!1;this.statementEdge=0;this.hasJaggedEdge=this.hasDummyInput=this.hasInlineInput=!1;this.align=null;this.constants_=a;this.type=Types$$module$build$src$core$renderers$measurables$types.ROW;this.notchOffset=this.constants_.NOTCH_OFFSET_LEFT}getLastInput(){for(let a=\nthis.elements.length-1;a>=0;a--){const b=this.elements[a];if(Types$$module$build$src$core$renderers$measurables$types.isInput(b))return b}return null}measure(){throw Error(\"Unexpected attempt to measure a base Row.\");}startsWithElemSpacer(){return!0}endsWithElemSpacer(){return!0}getFirstSpacer(){for(let a=0;a=0;a--){const b=this.elements[a];if(Types$$module$build$src$core$renderers$measurables$types.isInRowSpacer(b))return b}return null}},module$build$src$core$renderers$measurables$row={};module$build$src$core$renderers$measurables$row.Row=Row$$module$build$src$core$renderers$measurables$row;var BottomRow$$module$build$src$core$renderers$measurables$bottom_row=class extends Row$$module$build$src$core$renderers$measurables$row{constructor(a){super(a);this.hasNextConnection=!1;this.connection=null;this.baseline=this.descenderHeight=0;this.type|=Types$$module$build$src$core$renderers$measurables$types.BOTTOM_ROW}hasLeftSquareCorner(a){return!!a.outputConnection||!!a.getNextBlock()}hasRightSquareCorner(a){return!0}measure(){let a=0,b=0,c=0;for(let d=0;drect,`,`${a} .blocklyEditableField>rect {`,`fill: ${this.FIELD_BORDER_RECT_COLOUR};`,\"fill-opacity: .6;\",\"stroke: none;\",\"}\",`${a} .blocklyNonEditableField>text,`,`${a} .blocklyEditableField>text {`,\n\"fill: #000;\",\"}\",`${a} .blocklyFlyoutLabelText {`,\"fill: #000;\",\"}\",`${a} .blocklyText.blocklyBubbleText {`,\"fill: #000;\",\"}\",`${a} .blocklyEditableField:not(.blocklyEditing):hover>rect {`,\"stroke: #fff;\",\"stroke-width: 2;\",\"}\",`${a} .blocklyHtmlInput {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,`font-weight: ${this.FIELD_TEXT_FONTWEIGHT};`,\"}\",`${a} .blocklySelected>.blocklyPath {`,\"stroke: #fc3;\",\"stroke-width: 3px;\",\"}\",`${a} .blocklyHighlightedConnectionPath {`,\"stroke: #fc3;\",\"}\",`${a} .blocklyReplaceable .blocklyPath {`,\n\"fill-opacity: .5;\",\"}\",`${a} .blocklyReplaceable .blocklyPathLight,`,`${a} .blocklyReplaceable .blocklyPathDark {`,\"display: none;\",\"}\",`${a} .blocklyInsertionMarker>.blocklyPath {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\"stroke: none;\",\"}\"]}},module$build$src$core$renderers$common$constants={};module$build$src$core$renderers$common$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$common$constants;\nmodule$build$src$core$renderers$common$constants.isDynamicShape=isDynamicShape$$module$build$src$core$renderers$common$constants;module$build$src$core$renderers$common$constants.isNotch=isNotch$$module$build$src$core$renderers$common$constants;module$build$src$core$renderers$common$constants.isPuzzleTab=isPuzzleTab$$module$build$src$core$renderers$common$constants;var Drawer$$module$build$src$core$renderers$common$drawer=class{constructor(a,b){this.inlinePath_=this.outlinePath_=\"\";this.block_=a;this.info_=b;this.topLeft_=a.getRelativeToSurfaceXY();this.constants_=b.getRenderer().getConstants()}draw(){this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();this.block_.pathObject.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);this.info_.RTL&&this.block_.pathObject.flipRTL();this.recordSizeOnBlock_()}recordSizeOnBlock_(){this.block_.height=\nthis.info_.height;this.block_.width=this.info_.widthWithChildren;this.block_.childlessWidth=this.info_.width}drawOutline_(){this.drawTop_();for(let a=1;a0&&this.addAlignmentPadding_(c,a);Types$$module$build$src$core$renderers$measurables$types.isTopOrBottomRow(c)&&(c.widthWithConnectedBlocks=c.width)}}getDesiredRowWidth_(a){return this.width-this.startX}addAlignmentPadding_(a,\nb){const c=a.getFirstSpacer(),d=a.getLastSpacer();if(a.hasExternalInput||a.hasStatement)a.widthWithConnectedBlocks+=b;if(a.align===$.Align$$module$build$src$core$inputs$align.LEFT&&d)d.width+=b;else if(a.align===$.Align$$module$build$src$core$inputs$align.CENTRE&&c&&d)c.width+=b/2,d.width+=b/2;else if(a.align===$.Align$$module$build$src$core$inputs$align.RIGHT&&c)c.width+=b;else if(d)d.width+=b;else return;a.width+=b}alignStatementRow_(a){const b=a.getLastInput();if(b){var c=a.width-b.width,d=this.statementEdge;\nc=d-c;c>0&&this.addAlignmentPadding_(a,c);c=a.width;d=this.getDesiredRowWidth_(a);b.width+=d-c;b.height=Math.max(b.height,a.height);a.width+=d-c;a.widthWithConnectedBlocks=Math.max(a.width,this.statementEdge+a.connectedBlockWidths)}}addRowSpacing_(){const a=this.rows;this.rows=[];for(let b=0;b=0;d--)c[d].element===a&&c.splice(d,1);c.length||this.componentDB.delete(b)}}dispose(){this.subscribedWorkspaces.length=0;this.componentDB.clear()}},module$build$src$core$theme_manager={};module$build$src$core$theme_manager.ThemeManager=ThemeManager$$module$build$src$core$theme_manager;var CATEGORY_NAME$$module$build$src$core$variables_dynamic=\"VARIABLE_DYNAMIC\",onCreateVariableButtonClick_String$$module$build$src$core$variables_dynamic=stringButtonClickHandler$$module$build$src$core$variables_dynamic,onCreateVariableButtonClick_Number$$module$build$src$core$variables_dynamic=numberButtonClickHandler$$module$build$src$core$variables_dynamic,onCreateVariableButtonClick_Colour$$module$build$src$core$variables_dynamic=colourButtonClickHandler$$module$build$src$core$variables_dynamic,\nmodule$build$src$core$variables_dynamic={CATEGORY_NAME:CATEGORY_NAME$$module$build$src$core$variables_dynamic};module$build$src$core$variables_dynamic.flyoutCategory=flyoutCategory$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.flyoutCategoryBlocks=flyoutCategoryBlocks$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.internalFlyoutCategory=internalFlyoutCategory$$module$build$src$core$variables_dynamic;\nmodule$build$src$core$variables_dynamic.onCreateVariableButtonClick_Colour=colourButtonClickHandler$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.onCreateVariableButtonClick_Number=numberButtonClickHandler$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.onCreateVariableButtonClick_String=stringButtonClickHandler$$module$build$src$core$variables_dynamic;var ConnectionChecker$$module$build$src$core$connection_checker=class{canConnect(a,b,c,d){return this.canConnectWithReason(a,b,c,d)===Connection$$module$build$src$core$connection.CAN_CONNECT}canConnectWithReason(a,b,c,d){const e=this.doSafetyChecks(a,b);return e!==Connection$$module$build$src$core$connection.CAN_CONNECT?e:this.doTypeChecks(a,b)?c&&!this.doDragChecks(a,b,d||0)?Connection$$module$build$src$core$connection.REASON_DRAG_CHECKS_FAILED:Connection$$module$build$src$core$connection.CAN_CONNECT:\nConnection$$module$build$src$core$connection.REASON_CHECKS_FAILED}getErrorMessage(a,b,c){switch(a){case Connection$$module$build$src$core$connection.REASON_SELF_CONNECTION:return\"Attempted to connect a block to itself.\";case Connection$$module$build$src$core$connection.REASON_DIFFERENT_WORKSPACES:return\"Blocks not on same workspace.\";case Connection$$module$build$src$core$connection.REASON_WRONG_TYPE:return\"Attempt to connect incompatible types.\";case Connection$$module$build$src$core$connection.REASON_TARGET_NULL:return\"Target connection is null.\";\ncase Connection$$module$build$src$core$connection.REASON_CHECKS_FAILED:return\"Connection checks failed. \"+(b+\" expected \"+b.getCheck()+\", found \"+c.getCheck());case Connection$$module$build$src$core$connection.REASON_SHADOW_PARENT:return\"Connecting non-shadow to shadow block.\";case Connection$$module$build$src$core$connection.REASON_DRAG_CHECKS_FAILED:return\"Drag checks failed.\";case Connection$$module$build$src$core$connection.REASON_PREVIOUS_AND_OUTPUT:return\"Block would have an output and a previous connection.\";\ndefault:return\"Unknown connection failure: this should never happen!\"}}doSafetyChecks(a,b){if(!a||!b)return Connection$$module$build$src$core$connection.REASON_TARGET_NULL;let c,d,e;a.isSuperior()?(c=a.getSourceBlock(),d=b.getSourceBlock(),e=b):(d=a.getSourceBlock(),c=b.getSourceBlock(),e=a,a=b);return c===d?Connection$$module$build$src$core$connection.REASON_SELF_CONNECTION:e.type!==OPPOSITE_TYPE$$module$build$src$core$internal_constants[a.type]?Connection$$module$build$src$core$connection.REASON_WRONG_TYPE:\nc.workspace!==d.workspace?Connection$$module$build$src$core$connection.REASON_DIFFERENT_WORKSPACES:c.isShadow()&&!d.isShadow()?Connection$$module$build$src$core$connection.REASON_SHADOW_PARENT:e.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE&&d.previousConnection&&d.previousConnection.isConnected()||e.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT&&d.outputConnection&&d.outputConnection.isConnected()?Connection$$module$build$src$core$connection.REASON_PREVIOUS_AND_OUTPUT:\nConnection$$module$build$src$core$connection.CAN_CONNECT}doTypeChecks(a,b){a=a.getCheck();b=b.getCheck();if(!a||!b)return!0;for(let c=0;cc||b.getSourceBlock().isInsertionMarker())return!1;switch(b.type){case ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT:return this.canConnectToPrevious_(a,b);case ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE:if(b.isConnected()&&\n!b.targetBlock().isInsertionMarker()||a.isConnected())return!1;break;case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:if(b.isConnected()&&!b.targetBlock().isMovable()&&!b.targetBlock().isShadow())return!1;break;case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:if(b.isConnected()&&!a.getSourceBlock().nextConnection&&!b.targetBlock().isShadow()&&b.targetBlock().nextConnection||b.targetBlock()&&!b.targetBlock().isMovable()&&!b.targetBlock().isShadow())return!1;\nbreak;default:return!1}return draggingConnections$$module$build$src$core$common.includes(b)?!1:!0}canConnectToPrevious_(a,b){if(a.targetConnection||draggingConnections$$module$build$src$core$common.includes(b))return!1;if(!b.targetConnection)return!0;a=b.targetBlock();return a.isInsertionMarker()?!a.getPreviousBlock():!1}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_CHECKER,DEFAULT$$module$build$src$core$registry,ConnectionChecker$$module$build$src$core$connection_checker);\nvar module$build$src$core$connection_checker={};module$build$src$core$connection_checker.ConnectionChecker=ConnectionChecker$$module$build$src$core$connection_checker;var Workspace$$module$build$src$core$workspace=class{get isFlyout(){return this.internalIsFlyout}get isMutator(){return this.internalIsMutator}constructor(a){this.isClearing=this.internalIsMutator=this.internalIsFlyout=this.rendered=!1;this.MAX_UNDO=1024;this.connectionDBList=[];this.topBlocks=[];this.topComments=[];this.commentDB=new Map;this.listeners=[];this.undoStack_=[];this.redoStack_=[];this.blockDB=new Map;this.typedBlocksDB=new Map;this.procedureMap=new ObservableProcedureMap$$module$build$src$core$observable_procedure_map;\nthis.readOnly=!1;this.potentialVariableMap=null;this.id=genUid$$module$build$src$core$utils$idgenerator();registerWorkspace$$module$build$src$core$common(this);this.options=a||new Options$$module$build$src$core$options({});this.RTL=!!this.options.RTL;this.horizontalLayout=!!this.options.horizontalLayout;this.toolboxPosition=this.options.toolboxPosition;this.connectionChecker=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_CHECKER,this.options,\n!0))(this);this.variableMap=new (this.getVariableMapClass())(this);this.setIsReadOnly(this.options.readOnly)}dispose(){this.listeners.length=0;this.clear();unregisterWorkpace$$module$build$src$core$common(this)}sortObjects(a,b){const c=d=>({getBoundingRectangle:()=>{const e=d.getRelativeToSurfaceXY();return new Rect$$module$build$src$core$utils$rect(e.y,e.y,e.x,e.x)},moveBy:()=>{}});return this.sortByOrigin(c(a),c(b))}sortByOrigin(a,b){const c=Math.sin(toRadians$$module$build$src$core$utils$math(Workspace$$module$build$src$core$workspace.SCAN_ANGLE))*\n(this.RTL?-1:1);a=a.getBoundingRectangle().getOrigin();b=b.getBoundingRectangle().getOrigin();return a.y+c*a.x-(b.y+c*b.x)}addTopBlock(a){this.topBlocks.push(a)}removeTopBlock(a){if(!removeElem$$module$build$src$core$utils$array(this.topBlocks,a))throw Error(\"Block not present in workspace's list of top-most blocks.\");}getTopBlocks(a=!1){const b=[].concat(this.topBlocks);a&&b.length>1&&b.sort(this.sortObjects.bind(this));return b}addTypedBlock(a){this.typedBlocksDB.has(a.type)||this.typedBlocksDB.set(a.type,\n[]);this.typedBlocksDB.get(a.type).push(a)}removeTypedBlock(a){removeElem$$module$build$src$core$utils$array(this.typedBlocksDB.get(a.type),a);this.typedBlocksDB.get(a.type).length||this.typedBlocksDB.delete(a.type)}getBlocksByType(a,b=!1){if(!this.typedBlocksDB.has(a))return[];a=this.typedBlocksDB.get(a).slice(0);b&&a&&a.length>1&&a.sort(this.sortObjects.bind(this));return a.filter(c=>!c.isInsertionMarker())}addTopComment(a){this.topComments.push(a);this.commentDB.has(a.id)&&console.warn('Overriding an existing comment on this workspace, with id \"'+\na.id+'\"');this.commentDB.set(a.id,a)}removeTopComment(a){if(!removeElem$$module$build$src$core$utils$array(this.topComments,a))throw Error(\"Comment not present in workspace's list of top-most comments.\");this.commentDB.delete(a.id)}getTopComments(a=!1){const b=[].concat(this.topComments);a&&b.length>1&&b.sort(this.sortObjects.bind(this));return b}getAllBlocks(a=!1){if(a){var b=this.getTopBlocks(!0);a=[];for(let c=0;c!c.isInsertionMarker())}clear(){this.isClearing=!0;try{const a=$.getGroup$$module$build$src$core$events$utils();for(a||$.setGroup$$module$build$src$core$events$utils(!0);this.topBlocks.length;)this.topBlocks[0].dispose(!1);for(;this.topComments.length;)this.topComments[this.topComments.length-1].dispose();$.setGroup$$module$build$src$core$events$utils(a);this.isFlyout||this.variableMap.clear();this.potentialVariableMap&&this.potentialVariableMap.clear()}finally{this.isClearing=\n!1}}renameVariableById(a,b){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.renameVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().renameVariable\");(a=this.variableMap.getVariableById(a))&&this.variableMap.renameVariable(a,b)}createVariable(a,b,c){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.createVariable\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().createVariable\");return this.variableMap.createVariable(a,b!=null?b:void 0,c!=null?c:void 0)}getVariableUsesById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariableUsesById\",\n\"v12\",\"v13\",\"Blockly.Variables.getVariableUsesById\");return getVariableUsesById$$module$build$src$core$variables(this,a)}deleteVariableById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.deleteVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().deleteVariable\");const b=this.variableMap.getVariableById(a);b?$.deleteVariable$$module$build$src$core$variables(this,b):console.warn(`Can't delete non-existent variable: ${a}`)}getVariable(a,b){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariable\",\n\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariable\");return this.variableMap.getVariable(a,b)}getVariableById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariableById\");return this.variableMap.getVariableById(a)}getVariablesOfType(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariablesOfType\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariablesOfType\");return this.variableMap.getVariablesOfType(a!=\nnull?a:\"\")}getAllVariables(){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getAllVariables\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getAllVariables\");return this.variableMap.getAllVariables()}getAllVariableNames(){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getAllVariableNames\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getAllVariables\");return this.variableMap.getAllVariables().map(a=>a.getName())}getWidth(){return 0}newBlock(a,b){throw Error(\"The implementation of newBlock should be monkey-patched in by blockly.ts\");\n}newComment(a){throw Error(\"The implementation of newComment should be monkey-patched in by blockly.ts\");}remainingCapacity(){return isNaN(this.options.maxBlocks)?Infinity:this.options.maxBlocks-this.getAllBlocks(!1).length}remainingCapacityOfType(a){return this.options.maxInstances?(this.options.maxInstances[a]!==void 0?this.options.maxInstances[a]:Infinity)-this.getBlocksByType(a,!1).length:Infinity}isCapacityAvailable(a){if(!this.hasBlockLimits())return!0;let b=0;for(const c in a){if(a[c]>this.remainingCapacityOfType(c))return!1;\nb+=a[c]}return b>this.remainingCapacity()?!1:!0}hasBlockLimits(){return this.options.maxBlocks!==Infinity||!!this.options.maxInstances}getUndoStack(){return this.undoStack_}getRedoStack(){return this.redoStack_}undo(a){var b=a?this.redoStack_:this.undoStack_,c=a?this.undoStack_:this.redoStack_;const d=b.pop();if(d){for(var e=[d];b.length&&d.group&&d.group===b[b.length-1].group;){const f=b.pop();f&&e.push(f)}for(b=0;bthis.MAX_UNDO&&this.MAX_UNDO>=\n0;)this.undoStack_.shift();for(let b=0;b!!b.getStyleName()));this.refreshToolboxSelection();this.toolbox&&this.toolbox.refreshTheme();this.isVisible()&&this.setVisible(!0);a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.THEME_CHANGE))(this.getTheme().name,this.id);fire$$module$build$src$core$events$utils(a)}updateBlockStyles(a){for(let b=0,c;c=a[b];b++){const d=\nc.getStyleName();d&&c.setStyle(d)}}getInverseScreenCTM(){if(this.inverseScreenCTMDirty){const a=this.getParentSvg().getScreenCTM();a&&(this.inverseScreenCTM=a.inverse(),this.inverseScreenCTMDirty=!1)}return this.inverseScreenCTM}updateInverseScreenCTM(){this.inverseScreenCTMDirty=!0}isVisible(){return this.visible}getSvgXY(a){let b=0,c=0,d=1;if(this.getCanvas().contains(a)||this.getBubbleCanvas().contains(a))d=this.scale;do{const e=getRelativeXY$$module$build$src$core$utils$svg_math(a);if(a===this.getCanvas()||\na===this.getBubbleCanvas())d=1;b+=e.x*d;c+=e.y*d;a=a.parentNode}while(a&&a!==this.getParentSvg()&&a!==this.getInjectionDiv());return new Coordinate$$module$build$src$core$utils$coordinate(b,c)}getCachedParentSvgSize(){const a=this.cachedParentSvgSize;return new Size$$module$build$src$core$utils$size(a.width,a.height)}getOriginOffsetInPixels(){return getInjectionDivXY$$module$build$src$core$utils$svg_math(this.getCanvas())}getInjectionDiv(){if(!this.injectionDiv){let a=this.svgGroup_;for(;a;){if((\" \"+\n(a.getAttribute(\"class\")||\"\")+\" \").includes(\" injectionDiv \")){this.injectionDiv=a;break}a=a.parentNode}}return this.injectionDiv}getSvgGroup(){return this.svgGroup_}getBlockCanvas(){return this.getCanvas()}setResizeHandlerWrapper(a){this.resizeHandlerWrapper=a}createDom(a,b){this.injectionDiv||(this.injectionDiv=b!=null?b:null);this.svgGroup_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyWorkspace\",id:this.id});b&&setState$$module$build$src$core$utils$aria(this.svgGroup_,\nState$$module$build$src$core$utils$aria.LABEL,$.Msg$$module$build$src$core$msg.WORKSPACE_ARIA_LABEL);a&&(this.svgBackground_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{height:\"100%\",width:\"100%\",\"class\":a},this.svgGroup_),a===\"blocklyMainBackground\"&&this.grid?this.svgBackground_.style.fill=\"var(--blocklyGridPattern)\":this.themeManager_.subscribe(this.svgBackground_,\"workspaceBackgroundColour\",\"fill\"));this.layerManager=new LayerManager$$module$build$src$core$layer_manager(this);\nthis.svgBlockCanvas_=this.layerManager.getBlockLayer();this.svgBubbleCanvas_=this.layerManager.getBubbleLayer();this.isFlyout||(conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"pointerdown\",this,this.onMouseDown,!1),this.dummyWheelListener=()=>{},document.body.addEventListener(\"wheel\",this.dummyWheelListener),conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"wheel\",this,this.onMouseWheel));this.options.hasCategories&&(this.toolbox=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX,\nthis.options,!0))(this));this.grid&&this.grid.update(this.scale);this.recordDragTargets();(a=getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CURSOR,this.options))&&this.markerManager.setCursor(new a(this));a=this.options.parentWorkspace===null;this.renderer.createDom(this.svgGroup_,this.getTheme(),a?this.getInjectionDiv():void 0);$.getFocusManager$$module$build$src$core$focus_manager().registerTree(this,!!this.injectionDiv||this.isFlyout);return this.svgGroup_}dispose(){this.rendered=\n!1;this.currentGesture_&&this.currentGesture_.cancel();this.svgGroup_&&removeNode$$module$build$src$core$utils$dom(this.svgGroup_);this.toolbox&&(this.toolbox.dispose(),this.toolbox=null);this.flyout&&(this.flyout.dispose(),this.flyout=null);this.trashcan&&(this.trashcan.dispose(),this.trashcan=null);this.scrollbar&&(this.scrollbar.dispose(),this.scrollbar=null);this.zoomControls_&&this.zoomControls_.dispose();this.audioManager&&this.audioManager.dispose();this.grid&&(this.grid=null);this.renderer.dispose();\nthis.markerManager.dispose();super.dispose();this.themeManager_&&(this.themeManager_.unsubscribeWorkspace(this),this.themeManager_.unsubscribe(this.svgBackground_),this.options.parentWorkspace||this.themeManager_.dispose());this.connectionDBList.length=0;this.toolboxCategoryCallbacks.clear();this.flyoutButtonCallbacks.clear();if(!this.options.parentWorkspace){const a=this.getParentSvg();a&&a.parentNode&&removeNode$$module$build$src$core$utils$dom(a.parentNode)}this.resizeHandlerWrapper&&(unbind$$module$build$src$core$browser_events(this.resizeHandlerWrapper),\nthis.resizeHandlerWrapper=null);this.dummyWheelListener&&(document.body.removeEventListener(\"wheel\",this.dummyWheelListener),this.dummyWheelListener=null);$.getFocusManager$$module$build$src$core$focus_manager().isRegistered(this)&&$.getFocusManager$$module$build$src$core$focus_manager().unregisterTree(this)}addTrashcan(){this.trashcan=WorkspaceSvg$$module$build$src$core$workspace_svg.newTrashcan(this);const a=this.trashcan.createDom();this.svgGroup_.insertBefore(a,this.getCanvas())}static newTrashcan(a){throw Error(\"The implementation of newTrashcan should be monkey-patched in by blockly.ts\");\n}addZoomControls(){this.zoomControls_=new ZoomControls$$module$build$src$core$zoom_controls(this);const a=this.zoomControls_.createDom();this.svgGroup_.appendChild(a)}copyOptionsForFlyout(){return new Options$$module$build$src$core$options({parentWorkspace:this,rtl:this.RTL,oneBasedIndex:this.options.oneBasedIndex,horizontalLayout:this.horizontalLayout,renderer:this.options.renderer,rendererOverrides:this.options.rendererOverrides,plugins:this.options.plugins,modalInputs:this.options.modalInputs,\nmove:{scrollbars:!0}})}addFlyout(a){const b=this.copyOptionsForFlyout();b.toolboxPosition=this.options.toolboxPosition;this.flyout=this.horizontalLayout?new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,this.options,!0))(b):new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,this.options,!0))(b);this.flyout.autoClose=!1;this.flyout.getWorkspace().setVisible(!0);\nreturn this.flyout.createDom(a)}getFlyout(a){return this.flyout||a?this.flyout:this.toolbox?this.toolbox.getFlyout():null}getToolbox(){return this.toolbox}updateScreenCalculations(){this.updateInverseScreenCTM();this.recordDragTargets()}resizeContents(){this.resizesEnabled&&this.rendered&&(this.scrollbar&&this.scrollbar.resize(),this.updateInverseScreenCTM())}resize(){this.toolbox?this.toolbox.position():this.flyout&&this.flyout.position();const a=this.componentManager.getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE,\n!0),b=this.getMetricsManager().getUiMetrics(),c=[];for(let d=0,e;e=a[d];d++){e.position(b,c);const f=e.getBoundingRectangle();f&&c.push(f)}this.scrollbar&&this.scrollbar.resize();this.updateScreenCalculations()}updateScreenCalculationsIfScrolled(){const a=getDocumentScroll$$module$build$src$core$utils$svg_math();Coordinate$$module$build$src$core$utils$coordinate.equals(this.lastRecordedPageScroll,a)||(this.lastRecordedPageScroll=a,this.updateScreenCalculations())}getLayerManager(){return this.layerManager}getCanvas(){return this.layerManager.getBlockLayer()}setCachedParentSvgSize(a,\nb){const c=this.getParentSvg();a!=null&&(this.cachedParentSvgSize.width=a,c.setAttribute(\"data-cached-width\",`${a}`));b!=null&&(this.cachedParentSvgSize.height=b,c.setAttribute(\"data-cached-height\",`${b}`))}getBubbleCanvas(){return this.layerManager.getBubbleLayer()}getParentSvg(){if(!this.cachedParentSvg){let a=this.svgGroup_;for(;a;){if(a.tagName===\"svg\"){this.cachedParentSvg=a;break}a=a.parentNode}}return this.cachedParentSvg}maybeFireViewportChangeEvent(){if(isEnabled$$module$build$src$core$events$utils()){var a=\nthis.scale,b=-this.scrollY,c=-this.scrollX;if(!(a===this.oldScale&&Math.abs(b-this.oldTop)<1&&Math.abs(c-this.oldLeft)<1)){var d=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE))(b,c,a,this.id,this.oldScale);this.oldScale=a;this.oldTop=b;this.oldLeft=c;fire$$module$build$src$core$events$utils(d)}}}translate(a,b){let c;(c=this.layerManager)==null||c.translateLayers(new Coordinate$$module$build$src$core$utils$coordinate(a,b),this.scale);let d;\n(d=this.grid)==null||d.moveTo(a,b);this.maybeFireViewportChangeEvent()}getWidth(){const a=this.getMetrics();return a?a.viewWidth/this.scale:0}setVisible(a){this.visible=a;this.svgGroup_&&(this.scrollbar&&this.scrollbar.setContainerVisible(a),this.getFlyout()&&this.getFlyout().setContainerVisible(a),this.getParentSvg().style.display=a?\"block\":\"none\",this.toolbox&&this.toolbox.setVisible(a),a||this.hideChaff(!0))}render(){const a=this.getAllBlocks(!1);for(let b=a.length-1;b>=0;b--)a[b].queueRender();\nthis.getTopBlocks().flatMap(b=>b.getDescendants(!1)).filter(b=>b.isInsertionMarker()).forEach(b=>b.queueRender())}highlightBlock(a,b){if(b===void 0){for(let c=0,d;d=this.highlightedBlocks[c];c++)d.setHighlighted(!1);this.highlightedBlocks.length=0}if(a=a?this.getBlockById(a):null)(b=b===void 0||b)?this.highlightedBlocks.includes(a)||this.highlightedBlocks.push(a):removeElem$$module$build$src$core$utils$array(this.highlightedBlocks,a),a.setHighlighted(b)}variableChangeCallback(a){switch(a.type){case EventType$$module$build$src$core$events$type.VAR_CREATE:case EventType$$module$build$src$core$events$type.VAR_DELETE:case EventType$$module$build$src$core$events$type.VAR_RENAME:case EventType$$module$build$src$core$events$type.VAR_TYPE_CHANGE:this.refreshToolboxSelection()}}refreshToolboxSelection(){const a=\nthis.isFlyout?this.targetWorkspace:this;a&&!a.currentGesture_&&a.toolbox&&a.toolbox.getFlyout()&&a.toolbox.refreshSelection()}recordDragTargets(){const a=this.componentManager.getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET,!0);this.dragTargetAreas=[];for(let b=0,c;c=a[b];b++){const d=c.getClientRect();d&&this.dragTargetAreas.push({component:c,clientRect:d})}}newBlock(a,b){throw Error(\"The implementation of newBlock should be monkey-patched in by blockly.ts\");\n}newComment(a){throw Error(\"The implementation of newComment should be monkey-patched in by blockly.ts\");}getDragTarget(a){for(let b=0,c;c=this.dragTargetAreas[b];b++)if(c.clientRect.contains(a.clientX,a.clientY))return c.component;return null}onMouseDown(a){const b=this.getGesture(a);b&&b.handleWsStart(a,this)}startDrag(a,b){start$$module$build$src$core$utils$drag(this,a,b)}moveDrag(a){return move$$module$build$src$core$utils$drag(this,a)}setKeyboardMoveInProgress(a){this.keyboardMoveInProgress=\na}isDragging(){return this.keyboardMoveInProgress||this.currentGesture_!==null&&this.currentGesture_.isDragging()}isDraggable(){return this.options.moveOptions&&this.options.moveOptions.drag}isMovable(){return this.options.moveOptions&&!!this.options.moveOptions.scrollbars||this.options.moveOptions&&this.options.moveOptions.wheel||this.options.moveOptions&&this.options.moveOptions.drag||this.options.zoomOptions&&this.options.zoomOptions.wheel||this.options.zoomOptions&&this.options.zoomOptions.pinch}isMovableHorizontally(){const a=\n!!this.scrollbar;return this.isMovable()&&(!a||a&&this.scrollbar.canScrollHorizontally())}isMovableVertically(){const a=!!this.scrollbar;return this.isMovable()&&(!a||a&&this.scrollbar.canScrollVertically())}onMouseWheel(a){if(Gesture$$module$build$src$core$gesture.inProgress())a.preventDefault(),a.stopPropagation();else{var b=this.options.zoomOptions&&this.options.zoomOptions.wheel,c=this.options.moveOptions&&this.options.moveOptions.wheel;if(b||c){var d=getScrollDeltaPixels$$module$build$src$core$browser_events(a);\nif(MAC$$module$build$src$core$utils$useragent)var e=a.metaKey;b&&(a.ctrlKey||e||!c)?(d=-d.y/50,b=mouseToSvg$$module$build$src$core$browser_events(a,this.getParentSvg(),this.getInverseScreenCTM()),this.zoom(b.x,b.y,d)):(b=this.scrollX-d.x,c=this.scrollY-d.y,a.shiftKey&&!d.x&&(b=this.scrollX-d.y,c=this.scrollY),this.scroll(b,c));a.preventDefault()}}}getBlocksBoundingBox(){const a=this.getTopBoundedElements();if(!a.length)return new Rect$$module$build$src$core$utils$rect(0,0,0,0);const b=a[0].getBoundingRectangle();\nfor(let d=1;db.bottom&&(b.bottom=c.bottom),c.leftb.right&&(b.right=c.right))}return b}cleanUp(){this.setResizesEnabled(!1);const a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);var b=this.getTopBlocks(!0),c=b.filter(g=>g.isMovable());const d=b.filter(g=>!g.isMovable()).map(g=>\ng.getBoundingRectangle());b=function(g){for(const h of d)if(g.intersects(h))return h;return null};var e=0;const f=this.renderer.getConstants().MIN_BLOCK_HEIGHT;for(const g of c){c=g.getBoundingRectangle();g.moveBy(-c.left,e-c.top,[\"cleanup\"]);g.snapToGrid();c=g.getBoundingRectangle();for(e=b(c);e!=null;)e=e.top+e.getHeight()+f,g.moveBy(0,e-c.top,[\"cleanup\"]),g.snapToGrid(),c=g.getBoundingRectangle(),e=b(c);e=g.getRelativeToSurfaceXY().y+g.getHeightWidth().height+f}$.setGroup$$module$build$src$core$events$utils(a);\nthis.setResizesEnabled(!0)}showContextMenu(a){if(!this.isReadOnly()&&!this.isFlyout){var b=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({workspace:this,focusedNode:this},a);this.configureContextMenu&&this.configureContextMenu(b,a);var c=a instanceof PointerEvent?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this,new Coordinate$$module$build$src$core$utils$coordinate(5,\n5));show$$module$build$src$core$contextmenu(a,b,this.RTL,this,c)}}updateToolbox(a){if(a=convertToolboxDefToJson$$module$build$src$core$utils$toolbox(a)){if(!this.options.languageTree)throw Error(\"Existing toolbox is null. Can't create new toolbox.\");if(hasCategories$$module$build$src$core$utils$toolbox(a)){if(!this.toolbox)throw Error(\"Existing toolbox has no categories. Can't change mode.\");this.options.languageTree=a;this.toolbox.render(a)}else{if(!this.flyout)throw Error(\"Existing toolbox has categories. Can't change mode.\");\nthis.options.languageTree=a;this.flyout.show(a)}}else if(this.options.languageTree)throw Error(\"Can't nullify an existing toolbox.\");}markFocused(){this.options.parentWorkspace?this.options.parentWorkspace.markFocused():(setMainWorkspace$$module$build$src$core$common(this),this.getParentSvg().focus({preventScroll:!0}))}zoom(a,b,c){c=Math.pow(this.options.zoomOptions.scaleSpeed,c);const d=this.scale*c;if(this.scale!==d){d>this.options.zoomOptions.maxScale?c=this.options.zoomOptions.maxScale/this.scale:\ndthis.options.zoomOptions.maxScale?a=this.options.zoomOptions.maxScale:this.options.zoomOptions.minScale&&a{if(c.isFlyout){let d;const e=(d=c.targetWorkspace)==null?void 0:d.getFlyout();if(e instanceof Flyout$$module$build$src$core$flyout_base)return e.getFlyoutScale()}return c.getScale()},b=(c,d)=>c.options.parentWorkspace&&c.options.parentWorkspace.getSvgGroup().contains(c.getSvgGroup())?b(c.options.parentWorkspace,d*a(c)):d*a(c);return b(this,1)}scroll(a,b){this.hideChaff(!0);\nconst c=this.getMetrics();a=Math.min(a,-c.scrollLeft);b=Math.min(b,-c.scrollTop);const d=c.scrollTop+Math.max(0,c.scrollHeight-c.viewHeight);a=Math.max(a,-(c.scrollLeft+Math.max(0,c.scrollWidth-c.viewWidth)));b=Math.max(b,-d);this.scrollX=a;this.scrollY=b;this.scrollbar&&this.scrollbar.set(-(a+c.scrollLeft),-(b+c.scrollTop),!1);a+=c.absoluteLeft;b+=c.absoluteTop;this.translate(a,b)}getBlockById(a){return super.getBlockById(a)}getAllBlocks(a=!1){return super.getAllBlocks(a)}getTopBlocks(a=!1){return super.getTopBlocks(a)}addTopBlock(a){this.addTopBoundedElement(a);\nsuper.addTopBlock(a)}removeTopBlock(a){this.removeTopBoundedElement(a);super.removeTopBlock(a)}addTopComment(a){this.addTopBoundedElement(a);super.addTopComment(a)}removeTopComment(a){this.removeTopBoundedElement(a);super.removeTopComment(a)}getTopComments(a=!1){return super.getTopComments(a)}getCommentById(a){return super.getCommentById(a)}getRootWorkspace(){return super.getRootWorkspace()}addTopBoundedElement(a){this.topBoundedElements.push(a)}removeTopBoundedElement(a){removeElem$$module$build$src$core$utils$array(this.topBoundedElements,\na)}getTopBoundedElements(a=!1){const b=[].concat(this.topBoundedElements);a&&b.sort(this.sortByOrigin.bind(this));return b}setResizesEnabled(a){const b=!this.resizesEnabled&&a;this.resizesEnabled=a;b&&this.resizeContents()}clear(){this.setResizesEnabled(!1);super.clear();this.topBoundedElements=[];this.setResizesEnabled(!0)}registerButtonCallback(a,b){if(typeof b!==\"function\")throw TypeError(\"Button callbacks must be functions.\");this.flyoutButtonCallbacks.set(a,b)}getButtonCallback(a){let b;return(b=\nthis.flyoutButtonCallbacks.get(a))!=null?b:null}removeButtonCallback(a){this.flyoutButtonCallbacks.delete(a)}registerToolboxCategoryCallback(a,b){if(typeof b!==\"function\")throw TypeError(\"Toolbox category callbacks must be functions.\");this.toolboxCategoryCallbacks.set(a,b)}getToolboxCategoryCallback(a){return this.toolboxCategoryCallbacks.get(a)||null}removeToolboxCategoryCallback(a){this.toolboxCategoryCallbacks.delete(a)}getGesture(a){if(this.keyboardMoveInProgress)return a.preventDefault(),a.stopPropagation(),\nnull;const b=a.type===\"pointerdown\";let c;b&&((c=this.currentGesture_)==null?0:c.hasStarted())&&(console.warn(\"Tried to start the same gesture twice.\"),this.currentGesture_.cancel());!this.currentGesture_&&b&&(this.currentGesture_=new Gesture$$module$build$src$core$gesture(a,this));return this.currentGesture_}clearGesture(){this.currentGesture_=null}cancelCurrentGesture(){this.currentGesture_&&this.currentGesture_.cancel()}getAudioManager(){return this.audioManager}getGrid(){return this.grid}hideChaff(a=\n!1){hide$$module$build$src$core$tooltip();hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv(this);hideWithoutAnimation$$module$build$src$core$dropdowndiv();this.hideComponents(a)}hideComponents(a=!1){this.getComponentManager().getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,!0).forEach(b=>b.autoHide(a))}static setTopLevelWorkspaceMetrics(a){const b=this.getMetrics();typeof a.x===\"number\"&&(this.scrollX=-(b.scrollLeft+(b.scrollWidth-b.viewWidth)*\na.x));typeof a.y===\"number\"&&(this.scrollY=-(b.scrollTop+(b.scrollHeight-b.viewHeight)*a.y));this.translate(this.scrollX+b.absoluteLeft,this.scrollY+b.absoluteTop)}addClass(a){this.injectionDiv&&addClass$$module$build$src$core$utils$dom(this.injectionDiv,a)}removeClass(a){this.injectionDiv&&removeClass$$module$build$src$core$utils$dom(this.injectionDiv,a)}setIsReadOnly(a){super.setIsReadOnly(a);a?this.addClass(\"blocklyReadOnly\"):this.removeClass(\"blocklyReadOnly\")}scrollBoundsIntoView(a,b=10){if(!Gesture$$module$build$src$core$gesture.inProgress()){var c=\nthis.getScale(),d=this.getMetricsManager().getViewMetrics(!0);d=new Rect$$module$build$src$core$utils$rect(d.top,d.top+d.height,d.left,d.left+d.width);if(!(a.left>=d.left&&a.top>=d.top&&a.right<=d.right&&a.bottom<=d.bottom)){a=a.clone();a.top-=b;a.bottom+=b;a.left-=b;a.right+=b;var e=b=0;a.leftd.right&&(b=this.RTL?d.right-a.right:Math.max(d.right-a.right,d.left-a.left));a.topd.bottom&&(e=\nMath.max(d.bottom-a.bottom,d.top-a.top));this.scroll(this.scrollX+b*c,this.scrollY+e*c)}}}getFocusableElement(){return this.svgGroup_}getFocusableTree(){return this.isMutator&&this.options.parentWorkspace||this}onNodeFocus(){}onNodeBlur(){}canBeFocused(){return!0}getRootFocusableNode(){return this}getRestoredFocusableNode(a){if(a)return null;let b;a=(b=this.targetWorkspace)==null?void 0:b.getFlyout();if(this.isFlyout&&a){let d,e;return(e=(d=a.getContents().find(f=>{f=f.getElement();return isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(f)&&\nf.canBeFocused()}))==null?void 0:d.getElement())!=null?e:null}let c;return(c=this.getTopBlocks(!0)[0])!=null?c:null}getNestedTrees(){const a=this.getAllBlocks().map(c=>c.getIcons()).flat().filter(c=>c instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&c.bubbleIsVisible()).map(c=>{let d;return(d=c.getBubble())==null?void 0:d.getWorkspace()}).filter(c=>!!c),b=this.getFlyout(!0);b&&a.push(b.getWorkspace());return a}searchForWorkspaceComment(a){for(const b of this.getTopComments())if(b instanceof\nRenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment&&b.canBeFocused()&&b.getFocusableElement().id===a)return b}lookUpFocusableNode(a){var b;const c=(b=this.targetWorkspace)==null?void 0:b.getFlyout();if(this.isFlyout&&c)for(var d of c.getContents())if(b=d.getElement(),isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(b)&&b.canBeFocused()&&b.getFocusableElement().id===a)return b;d=a.indexOf(\"_field_\");b=a.indexOf(\"_connection_\");if(d!==-1){var e=a.substring(0,\nd);if(e=this.getBlockById(e))for(var f of e.getFields())if(f.canBeFocused()&&f.getFocusableElement().id===a)return f;return null}if(b!==-1){e=a.substring(0,b);if(e=this.getBlockById(e))for(const h of e.getConnections_(!0))if(h.id===a)return h;return null}f=Math.max(a.indexOf(COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor),a.indexOf(COMMENT_COLLAPSE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$collapse_comment_bar_button),a.indexOf(COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button));\nif(f!==-1&&(f=a.substring(0,f),f=this.searchForWorkspaceComment(f))){if(a.indexOf(COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor)>-1)return f.getEditorFocusableNode();var g;return(g=f.view.getCommentBarButtons().find(h=>h.getFocusableElement().id.includes(a)))!=null?g:null}if((g=this.getAllBlocks(!1).find(h=>h.getFocusableElement().id===a))||(g=this.searchForWorkspaceComment(a)))return g;g=this.getAllBlocks().map(h=>h.getIcons()).flat();for(e of g){if(e.canBeFocused()&&\ne.getFocusableElement().id===a)return e;if(hasBubble$$module$build$src$core$interfaces$i_has_bubble(e)){if((g=e.getBubble())&&g.canBeFocused()&&g.getFocusableElement().id===a)return g;if(g instanceof TextInputBubble$$module$build$src$core$bubbles$textinput_bubble&&g.getEditor().getFocusableElement().id===a)return g.getEditor()}}return null}onTreeFocus(a,b){}onTreeBlur(a){if(this.isFlyout&&this.targetWorkspace&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()){var b=\nthis.targetWorkspace.getToolbox();b&&a===b||isAutoHideable$$module$build$src$core$interfaces$i_autohideable(b)&&b.autoHide(!1)}}getNavigator(){return this.navigator}setNavigator(a){this.navigator=a}},module$build$src$core$workspace_svg={};module$build$src$core$workspace_svg.WorkspaceSvg=WorkspaceSvg$$module$build$src$core$workspace_svg;module$build$src$core$workspace_svg.resizeSvgContents=resizeSvgContents$$module$build$src$core$workspace_svg;var VarBase$$module$build$src$core$events$events_var_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.isBlank=typeof a===\"undefined\";a&&(this.varId=a.getId(),this.workspaceId=a.getWorkspace().id)}toJson(){const a=super.toJson();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");a.varId=this.varId;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarBase$$module$build$src$core$events$events_var_base);\nb.varId=a.varId;return b}},module$build$src$core$events$events_var_base={};module$build$src$core$events$events_var_base.VarBase=VarBase$$module$build$src$core$events$events_var_base;var VarCreate$$module$build$src$core$events$events_var_create=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_CREATE;a&&(this.varType=a.getType(),this.varName=a.getName())}toJson(){const a=super.toJson();if(this.varType===void 0)throw Error(\"The var type is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");\na.varType=this.varType;a.varName=this.varName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarCreate$$module$build$src$core$events$events_var_create);b.varType=a.varType;b.varName=a.varName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");b=b.getVariableMap();\na?b.createVariable(this.varName,this.varType,this.varId):(a=b.getVariableById(this.varId))&&b.deleteVariable(a)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_CREATE,VarCreate$$module$build$src$core$events$events_var_create);var module$build$src$core$events$events_var_create={};module$build$src$core$events$events_var_create.VarCreate=VarCreate$$module$build$src$core$events$events_var_create;var VariableModel$$module$build$src$core$variable_model=class{constructor(a,b,c,d){this.workspace=a;this.name=b;this.type=c||\"\";this.id=d||genUid$$module$build$src$core$utils$idgenerator()}getId(){return this.id}getName(){return this.name}setName(a){this.name=a;return this}getType(){return this.type}setType(a){this.type=a;return this}getWorkspace(){return this.workspace}save(){const a={name:this.getName(),id:this.getId()},b=this.getType();b&&(a.type=b);return a}static load(a,b){a=new this(b,a.name,\na.type,a.id);b.getVariableMap().addVariable(a);fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_CREATE))(a))}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MODEL,DEFAULT$$module$build$src$core$registry,VariableModel$$module$build$src$core$variable_model);var module$build$src$core$variable_model={};module$build$src$core$variable_model.VariableModel=VariableModel$$module$build$src$core$variable_model;var VarDelete$$module$build$src$core$events$events_var_delete=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_DELETE;a&&(this.varType=a.getType(),this.varName=a.getName())}toJson(){const a=super.toJson();if(this.varType===void 0)throw Error(\"The var type is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");\na.varType=this.varType;a.varName=this.varName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarDelete$$module$build$src$core$events$events_var_delete);b.varType=a.varType;b.varName=a.varName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");b=b.getVariableMap();\na?(a=b.getVariableById(this.varId))&&b.deleteVariable(a):b.createVariable(this.varName,this.varType,this.varId)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_DELETE,VarDelete$$module$build$src$core$events$events_var_delete);var module$build$src$core$events$events_var_delete={};module$build$src$core$events$events_var_delete.VarDelete=VarDelete$$module$build$src$core$events$events_var_delete;var VarRename$$module$build$src$core$events$events_var_rename=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a,b){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_RENAME;a&&(this.oldName=a.getName(),this.newName=typeof b===\"undefined\"?\"\":b)}toJson(){const a=super.toJson();if(!this.oldName)throw Error(\"The old var name is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.newName)throw Error(\"The new var name is undefined. Either pass a value to the constructor, or call fromJson\");\na.oldName=this.oldName;a.newName=this.newName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarRename$$module$build$src$core$events$events_var_rename);b.oldName=a.oldName;b.newName=a.newName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.oldName)throw Error(\"The old var name is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.newName)throw Error(\"The new var name is undefined. Either pass a value to the constructor, or call fromJson\");\nb=b.getVariableMap();const c=b.getVariableById(this.varId);a?c&&b.renameVariable(c,this.newName):c&&b.renameVariable(c,this.oldName)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_RENAME,VarRename$$module$build$src$core$events$events_var_rename);var module$build$src$core$events$events_var_rename={};module$build$src$core$events$events_var_rename.VarRename=VarRename$$module$build$src$core$events$events_var_rename;var VariableMap$$module$build$src$core$variable_map=class{constructor(a,b=!1){this.workspace=a;this.potentialMap=b;this.variableMap=new Map}clear(){for(const a of this.variableMap.values())for(const b of a.values())this.deleteVariable(b);if(this.variableMap.size!==0)throw Error(\"Non-empty variable map\");}renameVariable(a,b){if(a.getName()===b)return a;var c=a.getType();c=this.getVariable(b,c);const d=this.workspace.getAllBlocks(!1);let e=\"\";this.potentialMap||(e=$.getGroup$$module$build$src$core$events$utils())||\n$.setGroup$$module$build$src$core$events$utils(!0);try{c&&c.getId()!==a.getId()?this.renameVariableWithConflict(a,b,c,d):this.renameVariableAndUses(a,b,d)}finally{this.potentialMap||$.setGroup$$module$build$src$core$events$utils(e)}return a}changeVariableType(a,b){const c=a.getType();if(c===b)return a;var d=this.variableMap.get(c);d==null||d.delete(a.getId());(d==null?void 0:d.size)===0&&this.variableMap.delete(c);a.setType(b);let e;d=(e=this.variableMap.get(b))!=null?e:new Map;d.set(a.getId(),a);\nthis.variableMap.has(b)||this.variableMap.set(b,d);fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_TYPE_CHANGE))(a,c,b));return a}renameVariableById(a,b){warn$$module$build$src$core$utils$deprecation(\"VariableMap.renameVariableById\",\"v12\",\"v13\",\"VariableMap.renameVariable\");const c=this.getVariableById(a);if(!c)throw Error(\"Tried to rename a variable that didn't exist. ID: \"+a);this.renameVariable(c,b)}renameVariableAndUses(a,\nb,c){this.potentialMap||fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_RENAME))(a,b));a.setName(b);for(b=0;b$.Names$$module$build$src$core$names.equals(d.getName(),\na)))!=null?c:null}getVariableById(a){for(const b of this.variableMap.values())if(b.has(a)){let c;return(c=b.get(a))!=null?c:null}return null}getVariablesOfType(a){return(a=this.variableMap.get(a||\"\"))?[...a.values()]:[]}getTypes(){return[...this.variableMap.keys()]}getAllVariables(){let a=[];for(const b of this.variableMap.values())a=a.concat(...b.values());return a}getAllVariableNames(){warn$$module$build$src$core$utils$deprecation(\"VariableMap.getAllVariableNames\",\"v12\",\"v13\",\"Blockly.Variables.getAllVariables\");\nconst a=[];for(const b of this.variableMap.values())for(const c of b.values())a.push(c.getName());return a}getVariableUsesById(a){warn$$module$build$src$core$utils$deprecation(\"VariableMap.getVariableUsesById\",\"v12\",\"v13\",\"Blockly.Variables.getVariableUsesById\");return getVariableUsesById$$module$build$src$core$variables(this.workspace,a)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MAP,DEFAULT$$module$build$src$core$registry,VariableMap$$module$build$src$core$variable_map);\nvar module$build$src$core$variable_map={};module$build$src$core$variable_map.VariableMap=VariableMap$$module$build$src$core$variable_map;var TrashcanOpen$$module$build$src$core$events$events_trashcan_open=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b){super(b);this.type=EventType$$module$build$src$core$events$type.TRASHCAN_OPEN;this.isOpen=a}toJson(){const a=super.toJson();if(this.isOpen===void 0)throw Error(\"Whether this is already open or not is undefined. Either pass a value to the constructor, or call fromJson\");a.isOpen=this.isOpen;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?\nc:new TrashcanOpen$$module$build$src$core$events$events_trashcan_open);b.isOpen=a.isOpen;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.TRASHCAN_OPEN,TrashcanOpen$$module$build$src$core$events$events_trashcan_open);var module$build$src$core$events$events_trashcan_open={};module$build$src$core$events$events_trashcan_open.TrashcanOpen=TrashcanOpen$$module$build$src$core$events$events_trashcan_open;var Trashcan$$module$build$src$core$trashcan=class extends DeleteArea$$module$build$src$core$delete_area{constructor(a){super();this.workspace=a;this.id=\"trashcan\";this.contents=[];this.flyout=null;this.isLidOpen=!1;this.minOpenness=0;this.lidTask=this.svgLid=this.svgGroup=null;this.top=this.left=this.lidOpen=0;this.initialized=!1;this.workspace.options.maxTrashcanContents<=0||(a=this.workspace.copyOptionsForFlyout(),this.workspace.horizontalLayout?(a.toolboxPosition=this.workspace.toolboxPosition===\nPosition$$module$build$src$core$utils$toolbox.TOP?Position$$module$build$src$core$utils$toolbox.BOTTOM:Position$$module$build$src$core$utils$toolbox.TOP,this.flyout=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,this.workspace.options,!0))(a)):(a.toolboxPosition=this.workspace.toolboxPosition===Position$$module$build$src$core$utils$toolbox.RIGHT?Position$$module$build$src$core$utils$toolbox.LEFT:Position$$module$build$src$core$utils$toolbox.RIGHT,\nthis.flyout=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,this.workspace.options,!0))(a)),this.workspace.addChangeListener(this.onDelete.bind(this)))}createDom(){this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyTrash\"});let a;const b=String(Math.random()).substring(2);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,\n{id:\"blocklyTrashBodyClipPath\"+b},this.svgGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:WIDTH$$module$build$src$core$trashcan,height:BODY_HEIGHT$$module$build$src$core$trashcan,y:LID_HEIGHT$$module$build$src$core$trashcan},a);const c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,x:-SPRITE_LEFT$$module$build$src$core$trashcan,height:SPRITE$$module$build$src$core$sprites.height,\ny:-SPRITE_TOP$$module$build$src$core$trashcan,\"clip-path\":\"url(#blocklyTrashBodyClipPath\"+b+\")\"},this.svgGroup);c.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyTrashLidClipPath\"+b},this.svgGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:WIDTH$$module$build$src$core$trashcan,\nheight:LID_HEIGHT$$module$build$src$core$trashcan},a);this.svgLid=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,x:-SPRITE_LEFT$$module$build$src$core$trashcan,height:SPRITE$$module$build$src$core$sprites.height,y:-SPRITE_TOP$$module$build$src$core$trashcan,\"clip-path\":\"url(#blocklyTrashLidClipPath\"+b+\")\"},this.svgGroup);this.svgLid.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);bind$$module$build$src$core$browser_events(this.svgGroup,\"pointerdown\",this,this.blockMouseDownWhenOpenable);bind$$module$build$src$core$browser_events(this.svgGroup,\"pointerup\",this,this.click);bind$$module$build$src$core$browser_events(c,\"pointerover\",this,this.mouseOver);bind$$module$build$src$core$browser_events(c,\"pointerout\",this,this.mouseOut);this.animateLid();return this.svgGroup}init(){if(this.workspace.options.maxTrashcanContents>\n0){const a=this.flyout.createDom(Svg$$module$build$src$core$utils$svg.SVG);addClass$$module$build$src$core$utils$dom(a,\"blocklyTrashcanFlyout\");insertAfter$$module$build$src$core$utils$dom(a,this.workspace.getParentSvg());this.flyout.init(this.workspace)}this.workspace.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.TRASHCAN_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,\nComponentManager$$module$build$src$core$component_manager.Capability.DELETE_AREA,ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET,ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE]});this.initialized=!0;this.setLidOpen(!1)}dispose(){this.workspace.getComponentManager().removeComponent(\"trashcan\");this.svgGroup&&removeNode$$module$build$src$core$utils$dom(this.svgGroup);this.lidTask&&clearTimeout(this.lidTask)}hasContents(){return!!this.contents.length}contentsIsOpen(){return!!this.flyout&&\nthis.flyout.isVisible()}openFlyout(){if(!this.contentsIsOpen()){var a=this.contents.map(function(c){return JSON.parse(c)}),b=this.workspace.getParentSvg().style;b.cursor=\"wait\";setTimeout(()=>{let c;(c=this.flyout)==null||c.show(a);b.cursor=\"\";let d;(d=this.workspace.scrollbar)==null||d.setVisible(!1)},10);this.fireUiEvent(!0)}}closeFlyout(){if(this.contentsIsOpen()){var a;(a=this.flyout)==null||a.hide();var b;(b=this.workspace.scrollbar)==null||b.setVisible(!0);this.fireUiEvent(!1);this.workspace.recordDragTargets()}}autoHide(a){!a&&\nthis.flyout&&this.closeFlyout()}emptyContents(){this.hasContents()&&(this.contents.length=0,this.setMinOpenness(0),this.closeFlyout())}position(a,b){if(this.initialized){var c=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers(this.workspace,a);a=getStartPositionRect$$module$build$src$core$positionable_helpers(c,new Size$$module$build$src$core$utils$size(WIDTH$$module$build$src$core$trashcan,BODY_HEIGHT$$module$build$src$core$trashcan+LID_HEIGHT$$module$build$src$core$trashcan),\nMARGIN_HORIZONTAL$$module$build$src$core$trashcan,MARGIN_VERTICAL$$module$build$src$core$trashcan,a,this.workspace);b=bumpPositionRect$$module$build$src$core$positionable_helpers(a,MARGIN_VERTICAL$$module$build$src$core$trashcan,c.vertical===verticalPosition$$module$build$src$core$positionable_helpers.TOP?bumpDirection$$module$build$src$core$positionable_helpers.DOWN:bumpDirection$$module$build$src$core$positionable_helpers.UP,b);this.top=b.top;this.left=b.left;var d;(d=this.svgGroup)==null||d.setAttribute(\"transform\",\n\"translate(\"+this.left+\",\"+this.top+\")\");var e;(e=this.flyout)==null||e.position()}}getBoundingRectangle(){return new Rect$$module$build$src$core$utils$rect(this.top,this.top+BODY_HEIGHT$$module$build$src$core$trashcan+LID_HEIGHT$$module$build$src$core$trashcan,this.left,this.left+WIDTH$$module$build$src$core$trashcan)}getClientRect(){if(!this.svgGroup)return null;var a=this.svgGroup.getBoundingClientRect();const b=a.top+SPRITE_TOP$$module$build$src$core$trashcan-MARGIN_HOTSPOT$$module$build$src$core$trashcan;\na=a.left+SPRITE_LEFT$$module$build$src$core$trashcan-MARGIN_HOTSPOT$$module$build$src$core$trashcan;return new Rect$$module$build$src$core$utils$rect(b,b+LID_HEIGHT$$module$build$src$core$trashcan+BODY_HEIGHT$$module$build$src$core$trashcan+2*MARGIN_HOTSPOT$$module$build$src$core$trashcan,a,a+WIDTH$$module$build$src$core$trashcan+2*MARGIN_HOTSPOT$$module$build$src$core$trashcan)}onDragOver(a){this.setLidOpen(this.wouldDelete_)}onDragExit(a){this.setLidOpen(!1)}onDrop(a){setTimeout(this.setLidOpen.bind(this,\n!1),100)}setLidOpen(a){this.isLidOpen!==a&&(this.lidTask&&clearTimeout(this.lidTask),this.isLidOpen=a,this.animateLid())}animateLid(){const a=ANIMATION_FRAMES$$module$build$src$core$trashcan;var b=1/(a+1);this.lidOpen+=this.isLidOpen?b:-b;this.lidOpen=Math.min(Math.max(this.lidOpen,this.minOpenness),1);this.setLidAngle(this.lidOpen*MAX_LID_ANGLE$$module$build$src$core$trashcan);b=OPACITY_MIN$$module$build$src$core$trashcan+this.lidOpen*(OPACITY_MAX$$module$build$src$core$trashcan-OPACITY_MIN$$module$build$src$core$trashcan);\nthis.svgGroup&&(this.svgGroup.style.opacity=`${b}`);this.lidOpen>this.minOpenness&&this.lidOpen<1&&(this.lidTask=setTimeout(this.animateLid.bind(this),ANIMATION_LENGTH$$module$build$src$core$trashcan/a))}setLidAngle(a){const b=this.workspace.toolboxPosition===Position$$module$build$src$core$utils$toolbox.RIGHT||this.workspace.horizontalLayout&&this.workspace.RTL;let c;(c=this.svgLid)==null||c.setAttribute(\"transform\",\"rotate(\"+(b?-a:a)+\",\"+(b?4:WIDTH$$module$build$src$core$trashcan-4)+\",\"+(LID_HEIGHT$$module$build$src$core$trashcan-\n2)+\")\")}setMinOpenness(a){this.minOpenness=a;this.isLidOpen||this.setLidAngle(a*MAX_LID_ANGLE$$module$build$src$core$trashcan)}closeLid(){this.setLidOpen(!1)}click(){this.hasContents()&&!this.workspace.isDragging()&&this.openFlyout()}fireUiEvent(a){a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.TRASHCAN_OPEN))(a,this.workspace.id);fire$$module$build$src$core$events$utils(a)}blockMouseDownWhenOpenable(a){!this.contentsIsOpen()&&this.hasContents()&&a.stopPropagation()}mouseOver(){this.hasContents()&&\nthis.setLidOpen(!0)}mouseOut(){this.setLidOpen(!1)}onDelete(a){if(!(this.workspace.options.maxTrashcanContents<=0||!isBlockDelete$$module$build$src$core$events$predicates(a)||a.wasShadow)){if(!a.oldJson)throw Error(\"Encountered a delete event without proper oldJson\");a=JSON.stringify(this.cleanBlockJson(a.oldJson));if(!this.contents.includes(a)){for(this.contents.unshift(a);this.contents.length>this.workspace.options.maxTrashcanContents;)this.contents.pop();this.setMinOpenness(HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan)}}}cleanBlockJson(a){function b(c){if(c){delete c.id;\ndelete c.x;delete c.y;delete c.enabled;delete c.disabledReasons;if(c.icons&&c.icons.comment){var d=c.icons.comment;delete d.height;delete d.width;delete d.pinned}d=c.inputs;for(var e in d){var f=d[e];const g=f.block;f=f.shadow;g&&b(g);f&&b(f)}c.next&&(e=c.next,c=e.block,e=e.shadow,c&&b(c),e&&b(e))}}a=JSON.parse(JSON.stringify(a));b(a);return Object.assign({},{kind:\"BLOCK\"},a)}},WIDTH$$module$build$src$core$trashcan=47,BODY_HEIGHT$$module$build$src$core$trashcan=44,LID_HEIGHT$$module$build$src$core$trashcan=\n16,MARGIN_VERTICAL$$module$build$src$core$trashcan=20,MARGIN_HORIZONTAL$$module$build$src$core$trashcan=20,MARGIN_HOTSPOT$$module$build$src$core$trashcan=10,SPRITE_LEFT$$module$build$src$core$trashcan=0,SPRITE_TOP$$module$build$src$core$trashcan=32,HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan=.1,ANIMATION_LENGTH$$module$build$src$core$trashcan=80,ANIMATION_FRAMES$$module$build$src$core$trashcan=4,OPACITY_MIN$$module$build$src$core$trashcan=.4,OPACITY_MAX$$module$build$src$core$trashcan=.8,\nMAX_LID_ANGLE$$module$build$src$core$trashcan=45,module$build$src$core$trashcan={};module$build$src$core$trashcan.Trashcan=Trashcan$$module$build$src$core$trashcan;var stashedCopyData$$module$build$src$core$clipboard=null,stashedWorkspace$$module$build$src$core$clipboard=null,stashedCoordinates$$module$build$src$core$clipboard=void 0,module$build$src$core$clipboard={};module$build$src$core$clipboard.BlockPaster=BlockPaster$$module$build$src$core$clipboard$block_paster;module$build$src$core$clipboard.copy=copy$$module$build$src$core$clipboard;module$build$src$core$clipboard.getLastCopiedData=getLastCopiedData$$module$build$src$core$clipboard;\nmodule$build$src$core$clipboard.getLastCopiedLocation=getLastCopiedLocation$$module$build$src$core$clipboard;module$build$src$core$clipboard.getLastCopiedWorkspace=getLastCopiedWorkspace$$module$build$src$core$clipboard;module$build$src$core$clipboard.paste=paste$$module$build$src$core$clipboard;module$build$src$core$clipboard.registry=module$build$src$core$clipboard$registry;module$build$src$core$clipboard.setLastCopiedData=setLastCopiedData$$module$build$src$core$clipboard;\nmodule$build$src$core$clipboard.setLastCopiedLocation=setLastCopiedLocation$$module$build$src$core$clipboard;module$build$src$core$clipboard.setLastCopiedWorkspace=setLastCopiedWorkspace$$module$build$src$core$clipboard;var module$build$src$core$comments={};module$build$src$core$comments.CollapseCommentBarButton=CollapseCommentBarButton$$module$build$src$core$comments$collapse_comment_bar_button;module$build$src$core$comments.CommentBarButton=CommentBarButton$$module$build$src$core$comments$comment_bar_button;module$build$src$core$comments.CommentEditor=CommentEditor$$module$build$src$core$comments$comment_editor;module$build$src$core$comments.CommentView=CommentView$$module$build$src$core$comments$comment_view;\nmodule$build$src$core$comments.DeleteCommentBarButton=DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button;module$build$src$core$comments.RenderedWorkspaceComment=RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment;module$build$src$core$comments.WorkspaceComment=WorkspaceComment$$module$build$src$core$comments$workspace_comment;var module$build$src$core$interfaces$i_copyable={};module$build$src$core$interfaces$i_copyable.isCopyable=isCopyable$$module$build$src$core$interfaces$i_copyable;var names$$module$build$src$core$shortcut_items;(function(a){a.ESCAPE=\"escape\";a.DELETE=\"delete\";a.COPY=\"copy\";a.CUT=\"cut\";a.PASTE=\"paste\";a.UNDO=\"undo\";a.REDO=\"redo\"})(names$$module$build$src$core$shortcut_items||(names$$module$build$src$core$shortcut_items={}));registerDefaultShortcuts$$module$build$src$core$shortcut_items();var module$build$src$core$shortcut_items={};module$build$src$core$shortcut_items.names=names$$module$build$src$core$shortcut_items;\nmodule$build$src$core$shortcut_items.registerCopy=registerCopy$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerCut=registerCut$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerDefaultShortcuts=registerDefaultShortcuts$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerDelete=registerDelete$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerEscape=registerEscape$$module$build$src$core$shortcut_items;\nmodule$build$src$core$shortcut_items.registerPaste=registerPaste$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerRedo=registerRedo$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerUndo=registerUndo$$module$build$src$core$shortcut_items;var ProcedureSerializer$$module$build$src$core$serialization$procedures=class{constructor(a,b){this.procedureModelClass=a;this.parameterModelClass=b;this.priority=PROCEDURES$$module$build$src$core$serialization$priorities}save(a){a=a.getProcedureMap().getProcedures().map(b=>saveProcedure$$module$build$src$core$serialization$procedures(b));return a.length?a:null}load(a,b){const c=b.getProcedureMap();for(const d of a)c.add(loadProcedure$$module$build$src$core$serialization$procedures(this.procedureModelClass,\nthis.parameterModelClass,d,b))}clear(a){a.getProcedureMap().clear()}},module$build$src$core$serialization$procedures={};module$build$src$core$serialization$procedures.ProcedureSerializer=ProcedureSerializer$$module$build$src$core$serialization$procedures;module$build$src$core$serialization$procedures.loadProcedure=loadProcedure$$module$build$src$core$serialization$procedures;module$build$src$core$serialization$procedures.saveProcedure=saveProcedure$$module$build$src$core$serialization$procedures;var VariableSerializer$$module$build$src$core$serialization$variables=class{constructor(){this.priority=VARIABLES$$module$build$src$core$serialization$priorities}save(a){a=a.getAllVariables().map(b=>b.save());return a.length?a:null}load(a,b){const c=getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MODEL,DEFAULT$$module$build$src$core$registry);a.forEach(d=>{c==null||c.load(d,b)})}clear(a){a.getVariableMap().clear()}};\nregister$$module$build$src$core$serialization$registry(\"variables\",new VariableSerializer$$module$build$src$core$serialization$variables);var module$build$src$core$serialization$variables={};module$build$src$core$serialization$variables.VariableSerializer=VariableSerializer$$module$build$src$core$serialization$variables;var module$build$src$core$serialization$workspaces={};module$build$src$core$serialization$workspaces.load=load$$module$build$src$core$serialization$workspaces;module$build$src$core$serialization$workspaces.save=save$$module$build$src$core$serialization$workspaces;var module$build$src$core$serialization={blocks:module$build$src$core$serialization$blocks,exceptions:module$build$src$core$serialization$exceptions,priorities:module$build$src$core$serialization$priorities,procedures:module$build$src$core$serialization$procedures,registry:module$build$src$core$serialization$registry,variables:module$build$src$core$serialization$variables,workspaceComments:module$build$src$core$serialization$workspace_comments,workspaces:module$build$src$core$serialization$workspaces};\"Blockly\"in globalThis||(globalThis.Blockly={Msg:module$build$src$core$msg});var module$build$src$core$main={};var LABEL_TYPE$$module$build$src$core$label_flyout_inflater=\"label\",LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater=class{load(a,b){a=new FlyoutButton$$module$build$src$core$flyout_button(b.getWorkspace(),b.targetWorkspace,a,!0);a.show();return new FlyoutItem$$module$build$src$core$flyout_item(a,LABEL_TYPE$$module$build$src$core$label_flyout_inflater)}gapForItem(a,b){return b}disposeItem(a){a=a.getElement();a instanceof FlyoutButton$$module$build$src$core$flyout_button&&a.dispose()}getType(){return LABEL_TYPE$$module$build$src$core$label_flyout_inflater}};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,LABEL_TYPE$$module$build$src$core$label_flyout_inflater,LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater);var module$build$src$core$label_flyout_inflater={};module$build$src$core$label_flyout_inflater.LabelFlyoutInflater=LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater;var ConstantProvider$$module$build$src$core$renderers$zelos$constants=class extends ConstantProvider$$module$build$src$core$renderers$common$constants{constructor(a){super();this.GRID_UNIT=4;this.CURSOR_COLOUR=\"#ffa200\";this.CURSOR_RADIUS=5;this.JAGGED_TEETH_WIDTH=this.JAGGED_TEETH_HEIGHT=0;this.START_HAT_HEIGHT=22;this.START_HAT_WIDTH=96;this.SHAPES={HEXAGONAL:1,ROUND:2,SQUARE:3,PUZZLE:4,NOTCH:5};this.SHAPE_IN_SHAPE_PADDING={1:{0:5*this.GRID_UNIT,1:2*this.GRID_UNIT,2:5*this.GRID_UNIT,3:5*this.GRID_UNIT},\n2:{0:3*this.GRID_UNIT,1:3*this.GRID_UNIT,2:1*this.GRID_UNIT,3:2*this.GRID_UNIT},3:{0:2*this.GRID_UNIT,1:2*this.GRID_UNIT,2:2*this.GRID_UNIT,3:2*this.GRID_UNIT}};this.FULL_BLOCK_FIELDS=!0;this.FIELD_TEXT_FONTWEIGHT=\"bold\";this.FIELD_TEXT_FONTFAMILY='\"Helvetica Neue\", \"Segoe UI\", Helvetica, sans-serif';this.FIELD_COLOUR_FULL_BLOCK=this.FIELD_TEXTINPUT_BOX_SHADOW=this.FIELD_DROPDOWN_SVG_ARROW=this.FIELD_DROPDOWN_COLOURED_DIV=this.FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW=!0;this.SELECTED_GLOW_COLOUR=\"#fff200\";\nthis.SELECTED_GLOW_SIZE=.5;this.REPLACEMENT_GLOW_COLOUR=\"#fff200\";this.REPLACEMENT_GLOW_SIZE=2;this.selectedGlowFilterId=\"\";this.selectedGlowFilter=null;this.replacementGlowFilterId=\"\";this.SQUARED=this.ROUNDED=this.HEXAGONAL=this.replacementGlowFilter=null;a&&(this.GRID_UNIT=a);this.SMALL_PADDING=this.GRID_UNIT;this.MEDIUM_PADDING=2*this.GRID_UNIT;this.MEDIUM_LARGE_PADDING=3*this.GRID_UNIT;this.LARGE_PADDING=4*this.GRID_UNIT;this.CORNER_RADIUS=1*this.GRID_UNIT;this.NOTCH_WIDTH=9*this.GRID_UNIT;this.NOTCH_HEIGHT=\n2*this.GRID_UNIT;this.STATEMENT_INPUT_NOTCH_OFFSET=this.NOTCH_OFFSET_LEFT=3*this.GRID_UNIT;this.MIN_BLOCK_WIDTH=2*this.GRID_UNIT;this.MIN_BLOCK_HEIGHT=12*this.GRID_UNIT;this.EMPTY_STATEMENT_INPUT_HEIGHT=6*this.GRID_UNIT;this.TOP_ROW_MIN_HEIGHT=this.CORNER_RADIUS;this.TOP_ROW_PRECEDES_STATEMENT_MIN_HEIGHT=this.LARGE_PADDING;this.BOTTOM_ROW_MIN_HEIGHT=this.CORNER_RADIUS;this.BOTTOM_ROW_AFTER_STATEMENT_MIN_HEIGHT=6*this.GRID_UNIT;this.STATEMENT_BOTTOM_SPACER=-this.NOTCH_HEIGHT;this.STATEMENT_INPUT_SPACER_MIN_WIDTH=\n40*this.GRID_UNIT;this.STATEMENT_INPUT_PADDING_LEFT=4*this.GRID_UNIT;this.EMPTY_INLINE_INPUT_PADDING=4*this.GRID_UNIT;this.EMPTY_INLINE_INPUT_HEIGHT=8*this.GRID_UNIT;this.DUMMY_INPUT_MIN_HEIGHT=8*this.GRID_UNIT;this.DUMMY_INPUT_SHADOW_MIN_HEIGHT=6*this.GRID_UNIT;this.CURSOR_WS_WIDTH=20*this.GRID_UNIT;this.FIELD_TEXT_FONTSIZE=3*this.GRID_UNIT;this.FIELD_BORDER_RECT_RADIUS=this.CORNER_RADIUS;this.FIELD_BORDER_RECT_X_PADDING=2*this.GRID_UNIT;this.FIELD_BORDER_RECT_Y_PADDING=1.625*this.GRID_UNIT;this.FIELD_BORDER_RECT_HEIGHT=\n8*this.GRID_UNIT;this.FIELD_DROPDOWN_BORDER_RECT_HEIGHT=8*this.GRID_UNIT;this.FIELD_DROPDOWN_SVG_ARROW_PADDING=this.FIELD_BORDER_RECT_X_PADDING;this.FIELD_COLOUR_DEFAULT_WIDTH=6*this.GRID_UNIT;this.FIELD_COLOUR_DEFAULT_HEIGHT=8*this.GRID_UNIT;this.FIELD_CHECKBOX_X_OFFSET=1*this.GRID_UNIT;this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH=12*this.GRID_UNIT}setFontConstants_(a){super.setFontConstants_(a);this.FIELD_DROPDOWN_BORDER_RECT_HEIGHT=this.FIELD_BORDER_RECT_HEIGHT=this.FIELD_TEXT_HEIGHT+this.FIELD_BORDER_RECT_Y_PADDING*\n2}init(){super.init();this.HEXAGONAL=this.makeHexagonal();this.ROUNDED=this.makeRounded();this.SQUARED=this.makeSquared();this.STATEMENT_INPUT_NOTCH_OFFSET=this.NOTCH_OFFSET_LEFT+this.INSIDE_CORNERS.rightWidth}setDynamicProperties_(a){super.setDynamicProperties_(a);this.SELECTED_GLOW_COLOUR=a.getComponentStyle(\"selectedGlowColour\")||this.SELECTED_GLOW_COLOUR;const b=Number(a.getComponentStyle(\"selectedGlowSize\"));this.SELECTED_GLOW_SIZE=b&&!isNaN(b)?b:this.SELECTED_GLOW_SIZE;this.REPLACEMENT_GLOW_COLOUR=\na.getComponentStyle(\"replacementGlowColour\")||this.REPLACEMENT_GLOW_COLOUR;this.REPLACEMENT_GLOW_SIZE=(a=Number(a.getComponentStyle(\"replacementGlowSize\")))&&!isNaN(a)?a:this.REPLACEMENT_GLOW_SIZE}dispose(){super.dispose();this.selectedGlowFilter&&removeNode$$module$build$src$core$utils$dom(this.selectedGlowFilter);this.replacementGlowFilter&&removeNode$$module$build$src$core$utils$dom(this.replacementGlowFilter)}makeStartHat(){const a=this.START_HAT_HEIGHT,b=this.START_HAT_WIDTH,c=curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(25,-a),point$$module$build$src$core$utils$svg_paths(71,-a),point$$module$build$src$core$utils$svg_paths(b,0)]);return{height:a*.75,width:b,path:c}}makeHexagonal(){function a(c,d,e){var f=c/2;f=f>b?b:f;e=e?-1:1;c=(d?-1:1)*c/2;return lineTo$$module$build$src$core$utils$svg_paths(-e*f,c)+lineTo$$module$build$src$core$utils$svg_paths(e*f,c)}const b=this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH;return{type:this.SHAPES.HEXAGONAL,isDynamic:!0,width(c){c/=2;return c>\nb?b:c},height(c){return c},connectionOffsetY(c){return c/2},connectionOffsetX(c){return-c},pathDown(c){return a(c,!1,!1)},pathUp(c){return a(c,!0,!1)},pathRightDown(c){return a(c,!1,!0)},pathRightUp(c){return a(c,!1,!0)}}}makeRounded(){function a(d,e,f){const g=d>c?d-c:0;d=(d>c?c:d)/2;const h=f===e?\"0\":\"1\";return arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+h,d,point$$module$build$src$core$utils$svg_paths((f?1:-1)*d,(e?-1:1)*d))+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",(e?-1:\n1)*g)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+h,d,point$$module$build$src$core$utils$svg_paths((f?-1:1)*d,(e?-1:1)*d))}const b=this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH,c=b*2;return{type:this.SHAPES.ROUND,isDynamic:!0,width(d){d/=2;return d>b?b:d},height(d){return d},connectionOffsetY(d){return d/2},connectionOffsetX(d){return-d},pathDown(d){return a(d,!1,!1)},pathUp(d){return a(d,!0,!1)},pathRightDown(d){return a(d,!1,!0)},pathRightUp(d){return a(d,!1,!0)}}}makeSquared(){function a(c,\nd,e){c-=b*2;const f=e===d?\"0\":\"1\";return arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+f,b,point$$module$build$src$core$utils$svg_paths((e?1:-1)*b,(d?-1:1)*b))+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",(d?-1:1)*c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+f,b,point$$module$build$src$core$utils$svg_paths((e?-1:1)*b,(d?-1:1)*b))}const b=this.CORNER_RADIUS;return{type:this.SHAPES.SQUARE,isDynamic:!0,width(c){return b},height(c){return c},connectionOffsetY(c){return c/\n2},connectionOffsetX(c){return-c},pathDown(c){return a(c,!1,!1)},pathUp(c){return a(c,!0,!1)},pathRightDown(c){return a(c,!1,!0)},pathRightUp(c){return a(c,!1,!0)}}}shapeFor(a){let b=a.getCheck();!b&&a.targetConnection&&(b=a.targetConnection.getCheck());switch(a.type){case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:case ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE:a=a.getSourceBlock().getOutputShape();if(a!==null)switch(a){case this.SHAPES.HEXAGONAL:return this.HEXAGONAL;\ncase this.SHAPES.ROUND:return this.ROUNDED;case this.SHAPES.SQUARE:return this.SQUARED}if(b&&b.includes(\"Boolean\"))return this.HEXAGONAL;if(b&&b.includes(\"Number\"))return this.ROUNDED;b&&b.includes(\"String\");return this.ROUNDED;case ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT:case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:return this.NOTCH;default:throw Error(\"Unknown type\");}}makeNotch(){function a(l){return curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(l*e/2,0),point$$module$build$src$core$utils$svg_paths(l*e*3/4,g/2),point$$module$build$src$core$utils$svg_paths(l*e,g)])+line$$module$build$src$core$utils$svg_paths([point$$module$build$src$core$utils$svg_paths(l*e,f)])+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/4,g/2),point$$module$build$src$core$utils$svg_paths(l*e/2,g),point$$module$build$src$core$utils$svg_paths(l*e,g)])+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",\nl*d)+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/2,0),point$$module$build$src$core$utils$svg_paths(l*e*3/4,-(g/2)),point$$module$build$src$core$utils$svg_paths(l*e,-g)])+line$$module$build$src$core$utils$svg_paths([point$$module$build$src$core$utils$svg_paths(l*e,-f)])+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/4,-(g/2)),point$$module$build$src$core$utils$svg_paths(l*e/2,-g),point$$module$build$src$core$utils$svg_paths(l*\ne,-g)])}const b=this.NOTCH_WIDTH,c=this.NOTCH_HEIGHT,d=b/3,e=d/3,f=c/2,g=f/2,h=a(1),k=a(-1);return{type:this.SHAPES.NOTCH,width:b,height:c,pathLeft:h,pathRight:k}}makeInsideCorners(){const a=this.CORNER_RADIUS,b=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(-a,a)),c=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a,point$$module$build$src$core$utils$svg_paths(-a,a)),d=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(a,\na)),e=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a,point$$module$build$src$core$utils$svg_paths(a,a));return{width:a,height:a,pathTop:b,pathBottom:d,rightWidth:a,rightHeight:a,pathTopRight:c,pathBottomRight:e}}generateSecondaryColour_(a){return blend$$module$build$src$core$utils$colour(\"#000\",a,.15)||a}generateTertiaryColour_(a){return blend$$module$build$src$core$utils$colour(\"#000\",a,.25)||a}createDom(a,b,c,d){super.createDom(a,b,c,d);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.DEFS,\n{},a);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FILTER,{id:\"blocklySelectedGlowFilter\"+this.randomIdentifier,height:\"160%\",width:\"180%\",y:\"-30%\",x:\"-40%\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR,{\"in\":\"SourceGraphic\",stdDeviation:this.SELECTED_GLOW_SIZE},b);c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER,{result:\"outBlur\"},b);\ncreateSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFUNCA,{type:\"table\",tableValues:\"0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\"},c);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFLOOD,{\"flood-color\":this.SELECTED_GLOW_COLOUR,\"flood-opacity\":1,result:\"outColor\"},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"outColor\",in2:\"outBlur\",operator:\"in\",result:\"outGlow\"},b);\nthis.selectedGlowFilterId=b.id;this.selectedGlowFilter=b;a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FILTER,{id:\"blocklyReplacementGlowFilter\"+this.randomIdentifier,height:\"160%\",width:\"180%\",y:\"-30%\",x:\"-40%\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR,{\"in\":\"SourceGraphic\",stdDeviation:this.REPLACEMENT_GLOW_SIZE},a);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER,\n{result:\"outBlur\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFUNCA,{type:\"table\",tableValues:\"0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\"},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFLOOD,{\"flood-color\":this.REPLACEMENT_GLOW_COLOUR,\"flood-opacity\":1,result:\"outColor\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"outColor\",in2:\"outBlur\",operator:\"in\",\nresult:\"outGlow\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"SourceGraphic\",in2:\"outGlow\",operator:\"over\"},a);this.replacementGlowFilterId=a.id;this.replacementGlowFilter=a;d&&(d.style.setProperty(\"--blocklySelectedGlowFilter\",`url(#${this.selectedGlowFilterId})`),d.style.setProperty(\"--blocklyReplacementGlowFilter\",`url(#${this.replacementGlowFilterId})`))}getCSS_(a){return[`${a} .blocklyText,`,`${a} .blocklyFlyoutLabelText {`,`font: ${this.FIELD_TEXT_FONTWEIGHT} ${this.FIELD_TEXT_FONTSIZE}`+\n`pt ${this.FIELD_TEXT_FONTFAMILY};`,\"}\",`${a} .blocklyTextInputBubble textarea {`,\"font-weight: normal;\",\"}\",`${a} .blocklyText {`,\"fill: #fff;\",\"}\",`${a} .blocklyNonEditableField>rect:not(.blocklyDropdownRect),`,`${a} .blocklyEditableField>rect:not(.blocklyDropdownRect) {`,`fill: ${this.FIELD_BORDER_RECT_COLOUR};`,\"}\",`${a} .blocklyNonEditableField>text,`,`${a} .blocklyEditableField>text,`,`${a} .blocklyNonEditableField>g>text,`,`${a} .blocklyEditableField>g>text {`,\"fill: #575E75;\",\"}\",`${a} .blocklyFlyoutLabelText {`,\n\"fill: #575E75;\",\"}\",`${a} .blocklyText.blocklyBubbleText {`,\"fill: #575E75;\",\"}\",`${a} .blocklyDraggable:not(.blocklyDisabled)`,\" .blocklyEditableField:not(.blocklyEditing):hover>rect,\",`${a} .blocklyDraggable:not(.blocklyDisabled)`,\" .blocklyEditableField:not(.blocklyEditing):hover>.blocklyPath {\",\"stroke: #fff;\",\"stroke-width: 2;\",\"}\",`${a} .blocklyHtmlInput {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,`font-weight: ${this.FIELD_TEXT_FONTWEIGHT};`,\"color: #575E75;\",\"}\",`${a} .blocklyDropdownText {`,\n\"fill: #fff !important;\",\"}\",`${a}.blocklyWidgetDiv .blocklyMenuItem,`,`${a}.blocklyDropDownDiv .blocklyMenuItem {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,\"}\",`${a}.blocklyDropDownDiv .blocklyMenuItemContent {`,\"color: #fff;\",\"}\",`${a} .blocklyHighlightedConnectionPath {`,`stroke: ${this.SELECTED_GLOW_COLOUR};`,\"}\",`${a} .blocklyDisabledPattern > .blocklyOutlinePath {`,\"fill: var(--blocklyDisabledPattern)\",\"}\",`${a} .blocklyInsertionMarker>.blocklyPath {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\n\"stroke: none;\",\"}\",`${a} .blocklySelected>.blocklyPath.blocklyPathSelected {`,\"fill: none;\",\"filter: var(--blocklySelectedGlowFilter);\",\"}\",`${a} .blocklyReplaceable>.blocklyPath {`,\"filter: var(--blocklyReplacementGlowFilter);\",\"}\"]}},module$build$src$core$renderers$zelos$constants={};module$build$src$core$renderers$zelos$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$zelos$constants;var Drawer$$module$build$src$core$renderers$zelos$drawer=class extends Drawer$$module$build$src$core$renderers$common$drawer{constructor(a,b){super(a,b)}draw(){const a=this.block_.pathObject;a.beginDrawing();this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();a.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);this.info_.RTL&&a.flipRTL();this.recordSizeOnBlock_();this.info_.outputConnection&&(a.outputShapeType=this.info_.outputConnection.shape.type);a.endDrawing()}drawOutline_(){this.info_.outputConnection&&\nthis.info_.outputConnection.isDynamicShape&&!this.info_.hasStatementInput&&!this.info_.bottomRow.hasNextConnection?(this.drawFlatTop_(),this.drawRightDynamicConnection_(),this.drawFlatBottom_(),this.drawLeftDynamicConnection_()):super.drawOutline_()}drawLeft_(){this.info_.outputConnection&&this.info_.outputConnection.isDynamicShape?this.drawLeftDynamicConnection_():super.drawLeft_()}drawRightSideRow_(a){if(!(a.height<=0)){if(Types$$module$build$src$core$renderers$measurables$types.isSpacer(a)){const d=\na.precedesStatement;var b=a.followsStatement;if(d||b){const e=this.constants_.INSIDE_CORNERS;var c=e.rightHeight;c=a.height-(d?c:0);b=b?e.pathBottomRight:\"\";a=c>0?lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+c):\"\";this.outlinePath_+=b+a+(d?e.pathTopRight:\"\");return}}this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+a.height)}}drawRightDynamicConnection_(){if(!this.info_.outputConnection)throw Error(\"Cannot draw the output connection of a block that doesn't have one\");\nthis.outlinePath_+=this.info_.outputConnection.shape.pathRightDown(this.info_.outputConnection.height)}drawLeftDynamicConnection_(){if(!this.info_.outputConnection)throw Error(\"Cannot draw the output connection of a block that doesn't have one\");this.positionOutputConnection_();this.outlinePath_+=this.info_.outputConnection.shape.pathUp(this.info_.outputConnection.height);this.outlinePath_+=\"z\"}drawFlatTop_(){const a=this.info_.topRow;this.positionPreviousConnection_();this.outlinePath_+=moveBy$$module$build$src$core$utils$svg_paths(a.xPos,\nthis.info_.startY);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",a.width)}drawFlatBottom_(){const a=this.info_.bottomRow;this.positionNextConnection_();this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.baseline);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-a.width)}drawInlineInput_(a){this.positionInlineInputConnection_(a);const b=a.input.name;a.connectedBlock||this.info_.isInsertionMarker||(a=moveTo$$module$build$src$core$utils$svg_paths(a.xPos+\na.connectionWidth,a.centerline-a.height/2)+this.getInlineInputPath(a),this.block_.pathObject.setOutlinePath(b,a))}getInlineInputPath(a){const b=a.width-a.connectionWidth*2,c=a.height;return lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",b)+a.shape.pathRightDown(c)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-b)+a.shape.pathUp(c)+\"z\"}drawStatementInput_(a){var b=a.getLastInput();const c=b.xPos+b.notchOffset+b.shape.width,d=this.constants_.INSIDE_CORNERS,e=b.shape.pathRight+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",\n-(b.notchOffset-d.width))+d.pathTop,f=a.height-2*d.height;b=d.pathBottom+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",b.notchOffset-d.width)+(b.connectedBottomNextConnection?\"\":b.shape.pathLeft);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",c)+e+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",f)+b+lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",a.xPos+a.width);this.positionStatementInputConnection_(a)}drawConnectionHighlightPath(a){const b=a.connectionModel;\nif(b.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE&&!a.isDynamicShape)return super.drawConnectionHighlightPath(a);a=b.type===ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE?moveTo$$module$build$src$core$utils$svg_paths(a.connectionWidth,-a.height/2)+this.getInlineInputPath(a):moveTo$$module$build$src$core$utils$svg_paths(a.width,\n-a.height/2)+a.shape.pathDown(a.height);const c=b.getSourceBlock();let d,e;return(e=(d=c.pathObject).addConnectionHighlight)==null?void 0:e.call(d,b,a,b.getOffsetInBlock(),c.RTL)}},module$build$src$core$renderers$zelos$drawer={};module$build$src$core$renderers$zelos$drawer.Drawer=Drawer$$module$build$src$core$renderers$zelos$drawer;var FieldImage$$module$build$src$core$field_image=class extends Field$$module$build$src$core$field{constructor(a,b,c,d,e,f,g){super(Field$$module$build$src$core$field.SKIP_SETUP);this.imageElement=this.clickHandler=null;this.flipRtl=this.isDirty_=this.EDITABLE=!1;this.altText=\"\";c=Number(replaceMessageReferences$$module$build$src$core$utils$parsing(c));b=Number(replaceMessageReferences$$module$build$src$core$utils$parsing(b));if(isNaN(c)||isNaN(b))throw Error(\"Height and width values of an image field must cast to numbers.\");\nif(c<=0||b<=0)throw Error(\"Height and width values of an image field must be greater than 0.\");this.size_=new Size$$module$build$src$core$utils$size(b,c+FieldImage$$module$build$src$core$field_image.Y_PADDING);this.imageHeight=c;typeof e===\"function\"&&(this.clickHandler=e);a!==Field$$module$build$src$core$field.SKIP_SETUP&&(g?this.configure_(g):(this.flipRtl=!!f,this.altText=replaceMessageReferences$$module$build$src$core$utils$parsing(d)||\"\"),this.setValue(replaceMessageReferences$$module$build$src$core$utils$parsing(a)))}configure_(a){super.configure_(a);\na.flipRtl&&(this.flipRtl=a.flipRtl);a.alt&&(this.altText=replaceMessageReferences$$module$build$src$core$utils$parsing(a.alt))}initView(){this.imageElement=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{height:this.imageHeight+\"px\",width:this.size_.width+\"px\",alt:this.altText},this.fieldGroup_);this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.value_);this.fieldGroup_&&addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\n\"blocklyImageField\");this.clickHandler&&(this.imageElement.style.cursor=\"pointer\")}updateSize_(){}doClassValidation_(a){return typeof a!==\"string\"?null:a}doValueUpdate_(a){this.value_=a;this.imageElement&&this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.value_)}getFlipRtl(){return this.flipRtl}setAlt(a){a!==this.altText&&(this.altText=a||\"\",this.imageElement&&this.imageElement.setAttribute(\"alt\",this.altText))}isClickable(){return super.isClickable()&&!!this.clickHandler}showEditor_(){this.clickHandler&&\nthis.clickHandler(this)}setOnClickHandler(a){this.clickHandler=a}getText_(){return this.altText}static fromJson(a){if(!a.src||!a.width||!a.height)throw Error(\"src, width, and height values for an image field arerequired. The width and height must be non-zero.\");return new this(a.src,a.width,a.height,void 0,void 0,void 0,a)}};FieldImage$$module$build$src$core$field_image.Y_PADDING=1;register$$module$build$src$core$field_registry(\"field_image\",FieldImage$$module$build$src$core$field_image);\nFieldImage$$module$build$src$core$field_image.prototype.DEFAULT_VALUE=\"\";var module$build$src$core$field_image={};module$build$src$core$field_image.FieldImage=FieldImage$$module$build$src$core$field_image;var MINIMUM_WIDTH$$module$build$src$core$field_input=14,FieldInput$$module$build$src$core$field_input=class extends Field$$module$build$src$core$field{set size_(a){super.size_=a}get size_(){const a=super.size_;a.width{a!==null&&this.setValue(this.getValueFromEditorText_(a));this.onFinishEditing_(this.value_)})}showInlineEditor(a,b){const c=this.getSourceBlock();if(!c)throw new UnattachedFieldError$$module$build$src$core$field;show$$module$build$src$core$widgetdiv(this,c.RTL,this.widgetDispose_.bind(this),this.workspace_,b);this.htmlInput_=this.widgetCreate_();this.isBeingEdited_=!0;this.valueWhenEditorWasOpened_=this.value_;a||(this.htmlInput_.focus({preventScroll:!0}),this.htmlInput_.select())}widgetCreate_(){var a=\nthis.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;$.setGroup$$module$build$src$core$events$utils(!0);const b=getDiv$$module$build$src$core$widgetdiv();var c=this.getClickTarget_();if(!c)throw Error(\"A click target has not been set.\");addClass$$module$build$src$core$utils$dom(c,\"blocklyEditing\");c=document.createElement(\"input\");c.className=\"blocklyHtmlInput\";c.setAttribute(\"spellcheck\",this.spellcheck_);const d=this.workspace_.getAbsoluteScale();var e=this.getConstants().FIELD_TEXT_FONTSIZE*\nd+\"pt\";b.style.fontSize=e;c.style.fontSize=e;e=FieldInput$$module$build$src$core$field_input.BORDERRADIUS*d+\"px\";this.isFullBlockField()&&(e=this.getScaledBBox(),e=(e.bottom-e.top)/2+\"px\",a=a.getParent()?a.getParent().getColourTertiary():this.sourceBlock_.getColourTertiary(),c.style.border=1*d+\"px solid \"+a,b.style.borderRadius=e,b.style.transition=\"box-shadow 0.25s ease 0s\",this.getConstants().FIELD_TEXTINPUT_BOX_SHADOW&&(b.style.boxShadow=\"rgba(255, 255, 255, 0.3) 0 0 0 \"+4*d+\"px\"));c.style.borderRadius=\ne;b.appendChild(c);c.value=c.defaultValue=this.getEditorText_(this.value_);c.setAttribute(\"data-untyped-default-value\",String(this.value_));this.resizeEditor_();this.bindInputEvents_(c);return c}widgetDispose_(){this.isBeingEdited_=!1;this.isTextValid_=!0;this.forceRerender();this.onFinishEditing_(this.value_);this.sourceBlock_&&isEnabled$$module$build$src$core$events$utils()&&this.valueWhenEditorWasOpened_!==null&&this.valueWhenEditorWasOpened_!==this.value_&&(fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock_,\n\"field\",this.name||null,this.valueWhenEditorWasOpened_,this.value_)),this.valueWhenEditorWasOpened_=null);$.setGroup$$module$build$src$core$events$utils(!1);this.unbindInputEvents_();var a=getDiv$$module$build$src$core$widgetdiv().style;a.width=\"auto\";a.height=\"auto\";a.fontSize=\"\";a.transition=\"\";a.boxShadow=\"\";this.htmlInput_=null;a=this.getClickTarget_();if(!a)throw Error(\"A click target has not been set.\");removeClass$$module$build$src$core$utils$dom(a,\"blocklyEditing\")}onFinishEditing_(a){}bindInputEvents_(a){this.onKeyDownWrapper=\nconditionalBind$$module$build$src$core$browser_events(a,\"keydown\",this,this.onHtmlInputKeyDown_);this.onInputWrapper=conditionalBind$$module$build$src$core$browser_events(a,\"input\",this,this.onHtmlInputChange)}unbindInputEvents_(){this.onKeyDownWrapper&&(unbind$$module$build$src$core$browser_events(this.onKeyDownWrapper),this.onKeyDownWrapper=null);this.onInputWrapper&&(unbind$$module$build$src$core$browser_events(this.onInputWrapper),this.onInputWrapper=null)}onHtmlInputKeyDown_(a){if(a.key===\"Enter\")hideIfOwner$$module$build$src$core$widgetdiv(this),\nhideWithoutAnimation$$module$build$src$core$dropdowndiv();else if(a.key===\"Escape\")this.setValue(this.htmlInput_.getAttribute(\"data-untyped-default-value\"),!1),hideIfOwner$$module$build$src$core$widgetdiv(this),hideWithoutAnimation$$module$build$src$core$dropdowndiv();else if(a.key===\"Tab\"){a.preventDefault();var b,c=(b=this.workspace_)==null?void 0:b.getCursor();b=d=>(d instanceof FieldInput$$module$build$src$core$field_input||d instanceof BlockSvg$$module$build$src$core$block_svg&&d.isSimpleReporter())&&\nd!==this.getSourceBlock();a=a.shiftKey?c==null?void 0:c.getPreviousNode(this,b,!1):c==null?void 0:c.getNextNode(this,b,!1);a=a instanceof BlockSvg$$module$build$src$core$block_svg&&a.isSimpleReporter()?a.getFields().next().value:a;a instanceof FieldInput$$module$build$src$core$field_input&&(hideIfOwner$$module$build$src$core$widgetdiv(this),hideWithoutAnimation$$module$build$src$core$dropdowndiv(),c=a.getSourceBlock(),a.isFullBlockField()&&c&&c instanceof BlockSvg$$module$build$src$core$block_svg?\n$.getFocusManager$$module$build$src$core$focus_manager().focusNode(c):$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a),a.showEditor())}}onHtmlInputChange(a){a=this.value_;this.setValue(this.getValueFromEditorText_(this.htmlInput_.value),!1);this.sourceBlock_&&isEnabled$$module$build$src$core$events$utils()&&this.value_!==a&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_FIELD_INTERMEDIATE_CHANGE))(this.sourceBlock_,\nthis.name||null,a,this.value_))}setEditorValue_(a,b=!0){this.isDirty_=!0;this.isBeingEdited_&&(this.htmlInput_.value=this.getEditorText_(a));this.setValue(a,b)}resizeEditor_(){finishQueuedRenders$$module$build$src$core$render_management().then(()=>{const a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;const b=getDiv$$module$build$src$core$widgetdiv(),c=this.getScaledBBox();b.style.width=c.right-c.left+\"px\";b.style.height=c.bottom-c.top+\"px\";const d=c.top;\nb.style.left=`${a.RTL?c.right-b.offsetWidth:c.left}px`;b.style.top=`${d}px`})}repositionForWindowResize(){let a;const b=(a=this.getSourceBlock())==null?void 0:a.getRootBlock();if(!(b instanceof BlockSvg$$module$build$src$core$block_svg))return!1;bumpObjectIntoBounds$$module$build$src$core$bump_objects(this.workspace_,this.workspace_.getMetricsManager().getViewMetrics(!0),b)||this.resizeEditor_();return!0}positionTextElement_(a,b){const c=a*2+b;super.positionTextElement_(a+(c0;this.rightSide=this.outputConnection?new RightConnectionShape$$module$build$src$core$renderers$zelos$measurables$row_elements(this.constants_):null;this.rightAlignedDummyInputs=new WeakMap}getRenderer(){return this.renderer_}measure(){this.createRows_();this.addElemSpacing_();this.addRowSpacing_();this.adjustXPosition_();this.computeBounds_();this.alignRowElements_();this.finalize_()}shouldStartNewRow_(a,b){return b?b instanceof EndRowInput$$module$build$src$core$inputs$end_row_input||\na instanceof StatementInput$$module$build$src$core$inputs$statement_input||b instanceof StatementInput$$module$build$src$core$inputs$statement_input?!0:a instanceof $.ValueInput$$module$build$src$core$inputs$value_input||a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input?!this.isInline||this.isMultiRow:!1:!1}getDesiredRowWidth_(a){return a.hasStatement?this.width-this.startX-(this.constants_.INSIDE_CORNERS.rightWidth||\n0):super.getDesiredRowWidth_(a)}getInRowSpacing_(a,b){return a&&b||!this.outputConnection||!this.outputConnection.isDynamicShape||this.hasStatementInput||this.bottomRow.hasNextConnection?!a&&b&&Types$$module$build$src$core$renderers$measurables$types.isStatementInput(b)?this.constants_.STATEMENT_INPUT_PADDING_LEFT:a&&Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(a)&&b&&(Types$$module$build$src$core$renderers$measurables$types.isPreviousConnection(b)||Types$$module$build$src$core$renderers$measurables$types.isNextConnection(b))?\nb.notchOffset-this.constants_.CORNER_RADIUS:a&&Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(a)&&b&&Types$$module$build$src$core$renderers$measurables$types.isHat(b)||a&&Types$$module$build$src$core$renderers$measurables$types.isField(a)&&a.width===0?this.constants_.NO_PADDING:this.constants_.MEDIUM_PADDING:this.constants_.NO_PADDING}getSpacerRowHeight_(a,b){if(Types$$module$build$src$core$renderers$measurables$types.isTopRow(a)&&Types$$module$build$src$core$renderers$measurables$types.isBottomRow(b))return this.constants_.EMPTY_BLOCK_SPACER_HEIGHT;\nconst c=Types$$module$build$src$core$renderers$measurables$types.isInputRow(a)&&a.hasStatement,d=Types$$module$build$src$core$renderers$measurables$types.isInputRow(b)&&b.hasStatement;return d||c?(a=Math.max(this.constants_.NOTCH_HEIGHT,this.constants_.INSIDE_CORNERS.rightHeight||0),d&&c?Math.max(a,this.constants_.DUMMY_INPUT_MIN_HEIGHT):a):Types$$module$build$src$core$renderers$measurables$types.isTopRow(a)?a.hasPreviousConnection||this.outputConnection&&!this.hasStatementInput?this.constants_.NO_PADDING:\nMath.abs(this.constants_.NOTCH_HEIGHT-this.constants_.CORNER_RADIUS):Types$$module$build$src$core$renderers$measurables$types.isBottomRow(b)?this.outputConnection?!b.hasNextConnection&&this.hasStatementInput?Math.abs(this.constants_.NOTCH_HEIGHT-this.constants_.CORNER_RADIUS):this.constants_.NO_PADDING:Math.max(this.topRow.minHeight,Math.max(this.constants_.NOTCH_HEIGHT,this.constants_.CORNER_RADIUS))-this.constants_.CORNER_RADIUS:this.constants_.MEDIUM_PADDING}getSpacerRowWidth_(a,b){const c=this.width-\nthis.startX;return Types$$module$build$src$core$renderers$measurables$types.isInputRow(a)&&a.hasStatement||Types$$module$build$src$core$renderers$measurables$types.isInputRow(b)&&b.hasStatement?Math.max(c,this.constants_.STATEMENT_INPUT_SPACER_MIN_WIDTH):c}getElemCenterline_(a,b){if(a.hasStatement&&!Types$$module$build$src$core$renderers$measurables$types.isSpacer(b)&&!Types$$module$build$src$core$renderers$measurables$types.isStatementInput(b))return a.yPos+this.constants_.EMPTY_STATEMENT_INPUT_HEIGHT/\n2;if(Types$$module$build$src$core$renderers$measurables$types.isInlineInput(b)){const c=b.connectedBlock;if(c&&c.outputConnection&&c.nextConnection)return a.yPos+c.height/2}return super.getElemCenterline_(a,b)}addInput_(a,b){if((a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input)&&b.hasDummyInput&&b.align===$.Align$$module$build$src$core$inputs$align.LEFT&&a.align===$.Align$$module$build$src$core$inputs$align.RIGHT)this.rightAlignedDummyInputs.set(b,\na);else if(a instanceof StatementInput$$module$build$src$core$inputs$statement_input){b.elements.push(new StatementInput$$module$build$src$core$renderers$zelos$measurables$inputs(this.constants_,a));b.hasStatement=!0;b.align===null&&(b.align=a.align);return}super.addInput_(a,b)}addAlignmentPadding_(a,b){if(this.rightAlignedDummyInputs.get(a)){let c;for(let d=0;d=this.rows.length-1?!!this.bottomRow.hasNextConnection:!!d.precedesStatement;if(Types$$module$build$src$core$renderers$measurables$types.isInputRow(f)&&\nf.hasStatement){f.measure();let g,h;b=f.width-((h=(g=f.getLastInput())==null?void 0:g.width)!=null?h:0)+a}else if(c&&(e===2||d)&&Types$$module$build$src$core$renderers$measurables$types.isInputRow(f)&&!f.hasStatement){d=f.xPos;c=null;for(let g=0;g1)switch(c){case d.SHAPES.ROUND:return c=this.constants_.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH,c=this.height/2>c?c:this.height/2,b-c*(1-Math.sin(Math.acos((c-this.constants_.SMALL_PADDING)/c)));default:return 0}if(Types$$module$build$src$core$renderers$measurables$types.isInlineInput(a)){const e=a.connectedBlock;a=\ne?e.pathObject.outputShapeType:a.shape.type;return a==null||e&&e.outputConnection&&(e.statementInputCount||e.nextConnection)||c===d.SHAPES.HEXAGONAL&&c!==a?0:b-this.constants_.SHAPE_IN_SHAPE_PADDING[c][a]}return Types$$module$build$src$core$renderers$measurables$types.isField(a)?c===d.SHAPES.ROUND&&a.field instanceof $.FieldTextInput$$module$build$src$core$field_textinput?b-2.75*d.GRID_UNIT:b-this.constants_.SHAPE_IN_SHAPE_PADDING[c][0]:Types$$module$build$src$core$renderers$measurables$types.isIcon(a)?\nthis.constants_.SMALL_PADDING:0}finalizeVerticalAlignment_(){if(!this.outputConnection)for(let d=2;d=this.rows.length-1?!!this.bottomRow.hasNextConnection:!!g.precedesStatement;if(a?this.topRow.hasPreviousConnection:e.followsStatement){var c=f.elements[1];c=f.elements.length===3&&c instanceof Field$$module$build$src$core$renderers$measurables$field&&(c.field instanceof FieldLabel$$module$build$src$core$field_label||\nc.field instanceof FieldImage$$module$build$src$core$field_image);if(!a&&c)e.height-=this.constants_.SMALL_PADDING,g.height-=this.constants_.SMALL_PADDING,f.height-=this.constants_.MEDIUM_PADDING;else if(!a&&!b)e.height+=this.constants_.SMALL_PADDING;else if(b){a=!1;for(b=0;b=40){a=!0;break}a&&\n(e.height-=this.constants_.SMALL_PADDING,g.height-=this.constants_.SMALL_PADDING)}}}}finalize_(){this.finalizeOutputConnection_();this.finalizeHorizontalAlignment_();this.finalizeVerticalAlignment_();super.finalize_();this.rightSide&&(this.widthWithChildren+=this.rightSide.width)}},module$build$src$core$renderers$zelos$info={};module$build$src$core$renderers$zelos$info.RenderInfo=RenderInfo$$module$build$src$core$renderers$zelos$info;var PathObject$$module$build$src$core$renderers$zelos$path_object=class extends PathObject$$module$build$src$core$renderers$common$path_object{constructor(a,b,c){super(a,b,c);this.svgPathSelected=null;this.outlines=new Map;this.remainingOutlines=new Set;this.outputShapeType=null;this.constants=c}setPath(a){super.setPath(a);this.svgPathSelected&&this.svgPathSelected.setAttribute(\"d\",a)}applyColour(a){super.applyColour(a);const b=a.getParent();a.isShadow()&&b&&this.svgPath.setAttribute(\"stroke\",b.getColourTertiary());\nfor(const c of this.outlines.values())c.setAttribute(\"fill\",this.style.colourTertiary)}flipRTL(){super.flipRTL();for(const a of this.outlines.values())a.setAttribute(\"transform\",\"scale(-1 1)\")}updateSelected(a){this.setClass_(\"blocklySelected\",a);a?this.svgPathSelected||(this.svgPathSelected=this.svgPath.cloneNode(!0),this.svgPathSelected.classList.add(\"blocklyPathSelected\"),removeClass$$module$build$src$core$utils$dom(this.svgPathSelected,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME),\nremoveClass$$module$build$src$core$utils$dom(this.svgPathSelected,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME),this.svgPathSelected.removeAttribute(\"tabindex\"),this.svgPathSelected.removeAttribute(\"id\"),this.svgRoot.appendChild(this.svgPathSelected)):this.svgPathSelected&&(this.svgRoot.removeChild(this.svgPathSelected),this.svgPathSelected=null)}updateReplacementFade(a){this.setClass_(\"blocklyReplaceable\",a)}updateShapeForInputHighlight(a,b){a=a.getParentInput().name;\n(a=this.getOutlinePath(a))&&(b?a.setAttribute(\"filter\",\"url(#\"+this.constants.replacementGlowFilterId+\")\"):a.removeAttribute(\"filter\"))}beginDrawing(){this.remainingOutlines.clear();for(const a of this.outlines.keys())this.remainingOutlines.add(a)}endDrawing(){if(this.remainingOutlines.size)for(const a of this.remainingOutlines)this.removeOutlinePath(a);this.remainingOutlines.clear()}setOutlinePath(a,b){a=this.getOutlinePath(a);a.setAttribute(\"d\",b);a.setAttribute(\"fill\",this.style.colourTertiary)}getOutlinePath(a){this.outlines.has(a)||\nthis.outlines.set(a,createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyOutlinePath\",d:\"\"},this.svgRoot));this.remainingOutlines.delete(a);return this.outlines.get(a)}removeOutlinePath(a){let b,c;(b=this.outlines.get(a))==null||(c=b.parentNode)==null||c.removeChild(this.outlines.get(a));this.outlines.delete(a)}},module$build$src$core$renderers$zelos$path_object={};module$build$src$core$renderers$zelos$path_object.PathObject=PathObject$$module$build$src$core$renderers$zelos$path_object;var Renderer$$module$build$src$core$renderers$zelos$renderer=class extends Renderer$$module$build$src$core$renderers$common$renderer{constructor(a){super(a)}makeConstants_(){return new ConstantProvider$$module$build$src$core$renderers$zelos$constants}makeRenderInfo_(a){return new RenderInfo$$module$build$src$core$renderers$zelos$info(this,a)}makeDrawer_(a,b){return new Drawer$$module$build$src$core$renderers$zelos$drawer(a,b)}makePathObject(a,b){return new PathObject$$module$build$src$core$renderers$zelos$path_object(a,\nb,this.getConstants())}getConstants(){return this.constants_}};register$$module$build$src$core$renderers$common$block_rendering(\"zelos\",Renderer$$module$build$src$core$renderers$zelos$renderer);var module$build$src$core$renderers$zelos$renderer={};module$build$src$core$renderers$zelos$renderer.Renderer=Renderer$$module$build$src$core$renderers$zelos$renderer;var InsertionMarkerPreviewer$$module$build$src$core$insertion_marker_previewer=class{constructor(a){this.staticConn=this.draggedConn=this.markerConn=this.fadedBlock=null;this.workspace=a.workspace}previewReplacement(a,b,c){$.disable$$module$build$src$core$events$utils();try{this.hidePreview(),this.fadedBlock=c,c.fadeForReplacement(!0),this.workspace.getRenderer().shouldHighlightConnection(b)&&(b.highlight(),this.staticConn=b)}finally{$.enable$$module$build$src$core$events$utils()}}previewConnection(a,\nb){if(a!==this.draggedConn||b!==this.staticConn){$.disable$$module$build$src$core$events$utils();try{this.hidePreview(),this.shouldUseMarkerPreview(a,b)&&(this.markerConn=this.previewMarker(a,b)),this.workspace.getRenderer().shouldHighlightConnection(b)&&b.highlight(),this.draggedConn=a,this.staticConn=b}finally{$.enable$$module$build$src$core$events$utils()}}}shouldUseMarkerPreview(a,b){return b.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||\n!(this.workspace.getRenderer()instanceof Renderer$$module$build$src$core$renderers$zelos$renderer)}previewMarker(a,b){const c=a.getSourceBlock(),d=this.createInsertionMarker(c),e=this.getMatchingConnection(c,d,a);if(!e)return null;d.queueRender();triggerQueuedRenders$$module$build$src$core$render_management();e.connect(b);const f={x:b.x-e.x,y:b.y-e.y},g=e.getOffsetInBlock().clone();finishQueuedRenders$$module$build$src$core$render_management().then(()=>{if(!d.isDeadOrDying()){$.disable$$module$build$src$core$events$utils();\ntry{d==null||d.positionNearConnection(e,f,g),d==null||d.getSvgRoot().setAttribute(\"visibility\",\"visible\")}finally{$.enable$$module$build$src$core$events$utils()}}});return e}serializeBlockToInsertionMarker(a){const b=save$$module$build$src$core$serialization$blocks(a,{addCoordinates:!1,addInputBlocks:!1,addNextBlocks:!1,doFullSerialization:!1});if(!b)throw Error(`Failed to serialize source block. ${a.toDevString()}`);return b}createInsertionMarker(a){a=this.serializeBlockToInsertionMarker(a);a=append$$module$build$src$core$serialization$blocks(a,\nthis.workspace);for(const b of a.getDescendants(!1))b.setInsertionMarker(!0);a.initSvg();a.getSvgRoot().setAttribute(\"visibility\",\"hidden\");return a}getMatchingConnection(a,b,c){a=a.getConnections_(!0);b=b.getConnections_(!0);if(a.length!==b.length)return null;for(let d=0;d-b||a<-180+b||a>180-b?!0:!1}getClientRect(){if(!this.svgGroup_||this.autoClose||!this.isVisible())return null;const a=this.svgGroup_.getBoundingClientRect(),b=a.left;return this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.LEFT?new Rect$$module$build$src$core$utils$rect(-1E9,1E9,-1E9,b+a.width):new Rect$$module$build$src$core$utils$rect(-1E9,1E9,b,1E9)}reflowInternal_(){this.workspace_.scale=this.getFlyoutScale();\nlet a=this.getContents().reduce((b,c)=>Math.max(b,c.getElement().getBoundingRectangle().getWidth()),0);a+=this.MARGIN*1.5+this.tabWidth_;a*=this.workspace_.scale;a+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;if(this.getWidth()!==a){if(this.RTL)for(const b of this.getContents()){const c=b.getElement().getBoundingRectangle().left,d=a/this.workspace_.scale-b.getElement().getBoundingRectangle().getWidth()-this.MARGIN-this.tabWidth_;b.getElement().moveBy(d-c,0)}this.targetWorkspace.scrollbar||\nthis.autoClose||this.targetWorkspace.getFlyout()!==this||this.toolboxPosition_!==Position$$module$build$src$core$utils$toolbox.LEFT||this.targetWorkspace.translate(this.targetWorkspace.scrollX+a,this.targetWorkspace.scrollY);this.width_=a;this.position();this.targetWorkspace.resizeContents();this.targetWorkspace.recordDragTargets()}}};VerticalFlyout$$module$build$src$core$flyout_vertical.registryName=\"verticalFlyout\";\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,DEFAULT$$module$build$src$core$registry,VerticalFlyout$$module$build$src$core$flyout_vertical);var module$build$src$core$flyout_vertical={};module$build$src$core$flyout_vertical.VerticalFlyout=VerticalFlyout$$module$build$src$core$flyout_vertical;var HorizontalFlyout$$module$build$src$core$flyout_horizontal=class extends Flyout$$module$build$src$core$flyout_base{constructor(a){super(a);this.horizontalLayout=!0}setMetrics_(a){if(this.isVisible()){var b=this.workspace_.getMetricsManager(),c=b.getScrollMetrics(),d=b.getViewMetrics();b=b.getAbsoluteMetrics();typeof a.x===\"number\"&&(this.workspace_.scrollX=-(c.left+(c.width-d.width)*a.x));this.workspace_.translate(this.workspace_.scrollX+b.left,this.workspace_.scrollY+b.top)}}getX(){return 0}getY(){if(!this.isVisible())return 0;\nvar a=this.targetWorkspace.getMetricsManager();const b=a.getAbsoluteMetrics(),c=a.getViewMetrics();a=a.getToolboxMetrics();const d=this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.TOP;return this.targetWorkspace.toolboxPosition===this.toolboxPosition_?this.targetWorkspace.getToolbox()?d?a.height:c.height-this.getHeight():d?0:c.height:d?0:c.height+b.top-this.getHeight()}position(){if(this.isVisible()&&this.targetWorkspace.isVisible()){var a=this.targetWorkspace.getMetricsManager().getViewMetrics();\nthis.width_=a.width;a=a.width-2*this.CORNER_RADIUS;var b=this.getHeight()-this.CORNER_RADIUS;this.setBackgroundPath(a,b);a=this.getX();b=this.getY();this.positionAt_(this.getWidth(),this.getHeight(),a,b)}}setBackgroundPath(a,b){const c=this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.TOP,d=[\"M 0,\"+(c?0:this.CORNER_RADIUS)];c?(d.push(\"h\",a+2*this.CORNER_RADIUS),d.push(\"v\",b),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,-this.CORNER_RADIUS,this.CORNER_RADIUS),d.push(\"h\",\n-a),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,-this.CORNER_RADIUS,-this.CORNER_RADIUS)):(d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,this.CORNER_RADIUS,-this.CORNER_RADIUS),d.push(\"h\",a),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,this.CORNER_RADIUS,this.CORNER_RADIUS),d.push(\"v\",b),d.push(\"h\",-a-2*this.CORNER_RADIUS));d.push(\"z\");this.svgBackground_.setAttribute(\"d\",d.join(\" \"))}scrollToStart(){let a;(a=this.workspace_.scrollbar)==null||a.setX(this.RTL?Infinity:\n0)}wheel_(a){var b=getScrollDeltaPixels$$module$build$src$core$browser_events(a);if(b=b.x||b.y){const c=this.workspace_.getMetricsManager(),d=c.getScrollMetrics();b=c.getViewMetrics().left-d.left+b;let e;(e=this.workspace_.scrollbar)==null||e.setX(b);hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv(this.workspace_);hideWithoutAnimation$$module$build$src$core$dropdowndiv()}a.preventDefault();a.stopPropagation()}layout_(a){this.workspace_.scale=this.targetWorkspace.scale;const b=this.MARGIN;\nlet c=b+this.tabWidth_;this.RTL&&(a=a.reverse());for(const d of a)a=d.getElement().getBoundingRectangle(),a=this.RTL?c+a.getWidth():c,d.getElement().moveBy(a,b),c+=d.getElement().getBoundingRectangle().getWidth()}isDragTowardWorkspace(a){a=Math.atan2(a.y,a.x)/Math.PI*180;const b=this.dragAngleRange_;return a<90+b&&a>90-b||a>-90-b&&a<-90+b?!0:!1}getClientRect(){if(!this.svgGroup_||this.autoClose||!this.isVisible())return null;const a=this.svgGroup_.getBoundingClientRect(),b=a.top;return this.toolboxPosition_===\nPosition$$module$build$src$core$utils$toolbox.TOP?new Rect$$module$build$src$core$utils$rect(-1E9,b+a.height,-1E9,1E9):new Rect$$module$build$src$core$utils$rect(b,1E9,-1E9,1E9)}reflowInternal_(){this.workspace_.scale=this.getFlyoutScale();let a=this.getContents().reduce((b,c)=>Math.max(b,c.getElement().getBoundingRectangle().getHeight()),0);a+=this.MARGIN*1.5;a*=this.workspace_.scale;a+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;this.getHeight()!==a&&(this.targetWorkspace.scrollbar||\nthis.autoClose||this.targetWorkspace.getFlyout()!==this||this.toolboxPosition_!==Position$$module$build$src$core$utils$toolbox.TOP||this.targetWorkspace.translate(this.targetWorkspace.scrollX,this.targetWorkspace.scrollY+a),this.height_=a,this.position(),this.targetWorkspace.resizeContents(),this.targetWorkspace.recordDragTargets())}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,DEFAULT$$module$build$src$core$registry,HorizontalFlyout$$module$build$src$core$flyout_horizontal);\nvar module$build$src$core$flyout_horizontal={};module$build$src$core$flyout_horizontal.HorizontalFlyout=HorizontalFlyout$$module$build$src$core$flyout_horizontal;var FieldVariable$$module$build$src$core$field_variable=class extends FieldDropdown$$module$build$src$core$field_dropdown{constructor(a,b,c,d,e){super(Field$$module$build$src$core$field.SKIP_SETUP);this.defaultType=\"\";this.variableTypes=[];this.variable=null;this.SERIALIZABLE=!0;this.menuGenerator_=FieldVariable$$module$build$src$core$field_variable.dropdownCreate;this.defaultVariableName=typeof a===\"string\"?a:\"\";this.size_=new Size$$module$build$src$core$utils$size(0,0);a!==Field$$module$build$src$core$field.SKIP_SETUP&&\n(e?this.configure_(e):this.setTypes(c,d),b&&this.setValidator(b))}configure_(a){super.configure_(a);this.setTypes(a.variableTypes,a.defaultType)}initModel(){var a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;this.variable||(a=$.getOrCreateVariablePackage$$module$build$src$core$variables(a.workspace,null,this.defaultVariableName,this.defaultType),this.doValueUpdate_(a.getId()))}initView(){super.initView();addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\n\"blocklyVariableField\")}shouldAddBorderRect_(){const a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;return super.shouldAddBorderRect_()&&(!this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW||a.type!==\"variables_get\")}fromXml(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;const c=a.getAttribute(\"id\"),d=a.textContent,e=a.getAttribute(\"variabletype\")||a.getAttribute(\"variableType\")||\"\";b=$.getOrCreateVariablePackage$$module$build$src$core$variables(b.workspace,\nc,d,e);if(e!==null&&e!==b.getType())throw Error(\"Serialized variable type with id '\"+b.getId()+\"' had type \"+b.getType()+\", and does not match variable field that references it: \"+domToText$$module$build$src$core$xml(a)+\".\");this.setValue(b.getId())}toXml(a){this.initModel();a.id=this.variable.getId();a.textContent=this.variable.getName();this.variable.getType()&&a.setAttribute(\"variabletype\",this.variable.getType());return a}saveState(a){var b=this.saveLegacyState(FieldVariable$$module$build$src$core$field_variable);\nif(b!==null)return b;this.initModel();b={id:this.variable.getId()};a&&(b.name=this.variable.getName(),b.type=this.variable.getType());return b}loadState(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.loadLegacyState(FieldVariable$$module$build$src$core$field_variable,a)||(a=$.getOrCreateVariablePackage$$module$build$src$core$variables(b.workspace,a.id||null,a.name,a.type||\"\"),this.setValue(a.getId()))}setSourceBlock(a){if(a.isShadow())throw Error(\"Variable fields are not allowed to exist on shadow blocks.\");\nsuper.setSourceBlock(a)}getValue(){return this.variable?this.variable.getId():null}getText(){return this.variable?this.variable.getName():\"\"}getVariable(){return this.variable}getDefaultType(){return this.defaultType}getValidator(){return this.variable?this.validator_:null}doClassValidation_(a){if(a===null)return null;var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;b=$.getVariable$$module$build$src$core$variables(b.workspace,a);if(!b)return console.warn(\"Variable id doesn't point to a real variable! ID was \"+\na),null;b=b.getType();return this.typeIsAllowed(b)?a:(console.warn(\"Variable type doesn't match this field! Type was \"+b),null)}doValueUpdate_(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.variable=$.getVariable$$module$build$src$core$variables(b.workspace,a);super.doValueUpdate_(a)}typeIsAllowed(a){const b=this.getVariableTypes();if(!b)return!0;for(let c=0;c-Infinity&&(a.min=`${this.min_}`,setState$$module$build$src$core$utils$aria(a,State$$module$build$src$core$utils$aria.VALUEMIN,this.min_));this.max_c.isInFlyout=!0);this.addBlockListeners(a);return new FlyoutItem$$module$build$src$core$flyout_item(a,BLOCK_TYPE$$module$build$src$core$block_flyout_inflater)}createBlock(a,b){a.blockxml?(a=typeof a.blockxml===\"string\"?$.textToDom$$module$build$src$core$utils$xml(a.blockxml):a.blockxml,b=domToBlockInternal$$module$build$src$core$xml(a,b)):(a.enabled===void 0&&(a.enabled=a.disabled!==\"true\"&&a.disabled!==!0),a.disabledReasons===\nvoid 0&&a.enabled===!1&&(a.disabledReasons=[MANUALLY_DISABLED$$module$build$src$core$constants]),\"x\"in a&&delete a.x,\"y\"in a&&delete a.y,b=appendInternal$$module$build$src$core$serialization$blocks(a,b));return b}gapForItem(a,b){let c;a.gap?c=parseInt(String(a.gap)):a.blockxml&&(a=typeof a.blockxml===\"string\"?$.textToDom$$module$build$src$core$utils$xml(a.blockxml):a.blockxml,c=parseInt(a.getAttribute(\"gap\")));return!c||isNaN(c)?b:c}disposeItem(a){a=a.getElement();a instanceof BlockSvg$$module$build$src$core$block_svg&&\n(this.removeListeners(a.id),a.dispose(!1,!1))}removeListeners(a){let b;((b=this.listeners.get(a))!=null?b:[]).forEach(c=>unbind$$module$build$src$core$browser_events(c));this.listeners.delete(a)}setFlyout(a){if(this.flyout!==a){if(this.flyout){let c;(c=this.flyout.targetWorkspace)==null||c.removeChangeListener(this.capacityWrapper)}this.flyout=a;var b;(b=this.flyout.targetWorkspace)==null||b.addChangeListener(this.capacityWrapper)}}updateStateBasedOnCapacity(a){let b,c;const d=(b=this.flyout)==null?\nvoid 0:(c=b.targetWorkspace)==null?void 0:c.isCapacityAvailable(getBlockTypeCounts$$module$build$src$core$common(a));for(;a;)a.setDisabledReason(!d,WORKSPACE_AT_BLOCK_CAPACITY_DISABLED_REASON$$module$build$src$core$block_flyout_inflater),a=a.getNextBlock()}addBlockListeners(a){const b=[];b.push(conditionalBind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointerdown\",a,c=>{let d,e;const f=(d=this.flyout)==null?void 0:(e=d.targetWorkspace)==null?void 0:e.getGesture(c);f&&this.flyout&&(f.setStartBlock(a),\nf.handleFlyoutStart(c,this.flyout))}));b.push(bind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointermove\",null,()=>{let c,d;((c=this.flyout)==null?0:(d=c.targetWorkspace)==null?0:d.isDragging())||a.addSelect()}));b.push(bind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointerleave\",null,()=>{let c,d;((c=this.flyout)==null?0:(d=c.targetWorkspace)==null?0:d.isDragging())||a.removeSelect()}));this.listeners.set(a.id,b)}filterFlyoutBasedOnCapacity(a){!this.flyout||a&&a.type!==EventType$$module$build$src$core$events$type.BLOCK_CREATE&&\na.type!==EventType$$module$build$src$core$events$type.BLOCK_DELETE||this.flyout.getWorkspace().getTopBlocks(!1).forEach(b=>{this.permanentlyDisabledBlocks.has(b)||this.updateStateBasedOnCapacity(b)})}getType(){return BLOCK_TYPE$$module$build$src$core$block_flyout_inflater}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,BLOCK_TYPE$$module$build$src$core$block_flyout_inflater,BlockFlyoutInflater$$module$build$src$core$block_flyout_inflater);\nvar module$build$src$core$block_flyout_inflater={};module$build$src$core$block_flyout_inflater.BlockFlyoutInflater=BlockFlyoutInflater$$module$build$src$core$block_flyout_inflater;var module$build$src$core$interfaces$i_paster={};module$build$src$core$interfaces$i_paster.isPaster=isPaster$$module$build$src$core$interfaces$i_paster;var module$build$src$core$interfaces$i_rendered_element={};module$build$src$core$interfaces$i_rendered_element.isRenderedElement=isRenderedElement$$module$build$src$core$interfaces$i_rendered_element;var ConstantProvider$$module$build$src$core$renderers$geras$constants=class extends ConstantProvider$$module$build$src$core$renderers$common$constants{constructor(){super();this.FIELD_TEXT_BASELINE_CENTER=!1;this.DARK_PATH_OFFSET=1;this.MAX_BOTTOM_WIDTH=30;this.STATEMENT_BOTTOM_SPACER=-this.NOTCH_HEIGHT/2}getCSS_(a){return super.getCSS_(a).concat([`${a} .blocklyInsertionMarker>.blocklyPathLight,`,`${a} .blocklyInsertionMarker>.blocklyPathDark {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\"stroke: none;\",\n\"}\"])}},module$build$src$core$renderers$geras$constants={};module$build$src$core$renderers$geras$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$geras$constants;var Highlighter$$module$build$src$core$renderers$geras$highlighter=class{constructor(a){this.inlineSteps_=this.steps_=\"\";this.info_=a;this.RTL_=this.info_.RTL;a=a.getRenderer();this.constants_=a.getConstants();this.highlightConstants_=a.getHighlightConstants();this.highlightOffset=this.highlightConstants_.OFFSET;this.outsideCornerPaths_=this.highlightConstants_.OUTSIDE_CORNER;this.insideCornerPaths_=this.highlightConstants_.INSIDE_CORNER;this.puzzleTabPaths_=this.highlightConstants_.PUZZLE_TAB;this.notchPaths_=\nthis.highlightConstants_.NOTCH;this.startPaths_=this.highlightConstants_.START_HAT;this.jaggedTeethPaths_=this.highlightConstants_.JAGGED_TEETH}getPath(){return this.steps_+\"\\n\"+this.inlineSteps_}drawTopCorner(a){this.steps_+=moveBy$$module$build$src$core$utils$svg_paths(a.xPos,this.info_.startY);for(let b=0,c;c=a.elements[b];b++)Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(c)?this.steps_+=this.highlightConstants_.START_POINT:Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(c)?\nthis.steps_+=this.outsideCornerPaths_.topLeft(this.RTL_):Types$$module$build$src$core$renderers$measurables$types.isPreviousConnection(c)?this.steps_+=this.notchPaths_.pathLeft:Types$$module$build$src$core$renderers$measurables$types.isHat(c)?this.steps_+=this.startPaths_.path(this.RTL_):Types$$module$build$src$core$renderers$measurables$types.isSpacer(c)&&c.width!==0&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",c.xPos+c.width-this.highlightOffset));this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",\na.xPos+a.width-this.highlightOffset)}drawJaggedEdge_(a){this.info_.RTL&&(this.steps_+=this.jaggedTeethPaths_.pathLeft+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a.height-this.jaggedTeethPaths_.height-this.highlightOffset))}drawValueInput(a){const b=a.getLastInput();if(this.RTL_){const c=a.height-b.connectionHeight;this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos+b.width-this.highlightOffset,a.yPos)+this.puzzleTabPaths_.pathDown(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",\nc)}else this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos+b.width,a.yPos)+this.puzzleTabPaths_.pathDown(this.RTL_)}drawStatementInput(a){const b=a.getLastInput();if(b)if(this.RTL_){const c=a.height-2*this.insideCornerPaths_.height;this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos,a.yPos)+this.insideCornerPaths_.pathTop(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",c)+this.insideCornerPaths_.pathBottom(this.RTL_)+lineTo$$module$build$src$core$utils$svg_paths(a.width-\nb.xPos-this.insideCornerPaths_.width,0)}else this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos,a.yPos+a.height)+this.insideCornerPaths_.pathBottom(this.RTL_)+lineTo$$module$build$src$core$utils$svg_paths(a.width-b.xPos-this.insideCornerPaths_.width,0)}drawRightSideRow(a){const b=a.xPos+a.width-this.highlightOffset;a instanceof SpacerRow$$module$build$src$core$renderers$measurables$spacer_row&&a.followsStatement&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",b));\nthis.RTL_&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",b),a.height>this.highlightOffset&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+a.height-this.highlightOffset)))}drawBottomRow(a){if(this.RTL_)this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.baseline-this.highlightOffset);else{const b=this.info_.bottomRow.elements[0];Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(b)?this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(a.xPos+\nthis.highlightOffset,a.baseline-this.highlightOffset):Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(b)&&(this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(a.xPos,a.baseline),this.steps_+=this.outsideCornerPaths_.bottomLeft())}}drawLeft(){var a=this.info_.outputConnection;a&&(a=a.connectionOffsetY+a.height,this.RTL_?this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(this.info_.startX,a):(this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(this.info_.startX+\nthis.highlightOffset,this.info_.bottomRow.baseline-this.highlightOffset),this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a)),this.steps_+=this.puzzleTabPaths_.pathUp(this.RTL_));this.RTL_||(a=this.info_.topRow,Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(a.elements[0])?this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",this.outsideCornerPaths_.height):this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.capline+this.highlightOffset))}drawInlineInput(a){const b=\nthis.highlightOffset,c=a.xPos+a.connectionWidth;var d=a.centerline-a.height/2;const e=a.width-a.connectionWidth,f=d+b;this.RTL_?(d=a.connectionOffsetY-b,a=a.height-(a.connectionOffsetY+a.connectionHeight)+b,this.inlineSteps_+=moveTo$$module$build$src$core$utils$svg_paths(c-b,f)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",d)+this.puzzleTabPaths_.pathDown(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",e)):this.inlineSteps_+=\nmoveTo$$module$build$src$core$utils$svg_paths(a.xPos+a.width+b,f)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a.height)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-e)+moveTo$$module$build$src$core$utils$svg_paths(c,d+a.connectionOffsetY)+this.puzzleTabPaths_.pathDown(this.RTL_)}},module$build$src$core$renderers$geras$highlighter={};module$build$src$core$renderers$geras$highlighter.Highlighter=Highlighter$$module$build$src$core$renderers$geras$highlighter;var Drawer$$module$build$src$core$renderers$geras$drawer=class extends Drawer$$module$build$src$core$renderers$common$drawer{constructor(a,b){super(a,b);this.highlighter_=new Highlighter$$module$build$src$core$renderers$geras$highlighter(b)}draw(){this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();const a=this.block_.pathObject;a.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);a.setHighlightPath(this.highlighter_.getPath());this.info_.RTL&&a.flipRTL();this.recordSizeOnBlock_()}drawTop_(){this.highlighter_.drawTopCorner(this.info_.topRow);\nthis.highlighter_.drawRightSideRow(this.info_.topRow);super.drawTop_()}drawJaggedEdge_(a){this.highlighter_.drawJaggedEdge_(a);super.drawJaggedEdge_(a)}drawValueInput_(a){this.highlighter_.drawValueInput(a);super.drawValueInput_(a)}drawStatementInput_(a){this.highlighter_.drawStatementInput(a);super.drawStatementInput_(a)}drawRightSideRow_(a){this.highlighter_.drawRightSideRow(a);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",a.xPos+a.width)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",\na.yPos+a.height)}drawBottom_(){this.highlighter_.drawBottomRow(this.info_.bottomRow);super.drawBottom_()}drawLeft_(){this.highlighter_.drawLeft();super.drawLeft_()}drawInlineInput_(a){this.highlighter_.drawInlineInput(a);super.drawInlineInput_(a)}positionInlineInputConnection_(a){const b=a.centerline-a.height/2;if(a.connectionModel){let c=a.xPos+a.connectionWidth+this.constants_.DARK_PATH_OFFSET;this.info_.RTL&&(c*=-1);a.connectionModel.setOffsetInBlock(c,b+a.connectionOffsetY+this.constants_.DARK_PATH_OFFSET)}}positionStatementInputConnection_(a){const b=\na.getLastInput();if(b==null?0:b.connectionModel){let c=a.xPos+a.statementEdge+b.notchOffset;c=this.info_.RTL?c*-1:c+this.constants_.DARK_PATH_OFFSET;b.connectionModel.setOffsetInBlock(c,a.yPos+this.constants_.DARK_PATH_OFFSET)}}positionExternalValueConnection_(a){const b=a.getLastInput();if(b&&b.connectionModel){let c=a.xPos+a.width+this.constants_.DARK_PATH_OFFSET;this.info_.RTL&&(c*=-1);b.connectionModel.setOffsetInBlock(c,a.yPos)}}positionNextConnection_(){const a=this.info_.bottomRow;if(a.connection){const b=\na.connection,c=b.xPos;b.connectionModel.setOffsetInBlock((this.info_.RTL?-c:c)+this.constants_.DARK_PATH_OFFSET/2,a.baseline+this.constants_.DARK_PATH_OFFSET)}}},module$build$src$core$renderers$geras$drawer={};module$build$src$core$renderers$geras$drawer.Drawer=Drawer$$module$build$src$core$renderers$geras$drawer;var HighlightConstantProvider$$module$build$src$core$renderers$geras$highlight_constants=class{constructor(a){this.OFFSET=.5;this.constantProvider=a;this.START_POINT=moveBy$$module$build$src$core$utils$svg_paths(this.OFFSET,this.OFFSET)}init(){this.INSIDE_CORNER=this.makeInsideCorner();this.OUTSIDE_CORNER=this.makeOutsideCorner();this.PUZZLE_TAB=this.makePuzzleTab();this.NOTCH=this.makeNotch();this.JAGGED_TEETH=this.makeJaggedTeeth();this.START_HAT=this.makeStartHat()}makeInsideCorner(){const a=this.constantProvider.CORNER_RADIUS,\nb=this.OFFSET,c=(1-Math.SQRT1_2)*(a+b)-b,d=moveBy$$module$build$src$core$utils$svg_paths(c,c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(-c-b,a-c)),e=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a+b,point$$module$build$src$core$utils$svg_paths(a+b,a+b)),f=moveBy$$module$build$src$core$utils$svg_paths(c,-c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a+b,point$$module$build$src$core$utils$svg_paths(a-c,c+b));return{width:a+\nb,height:a,pathTop(g){return g?d:\"\"},pathBottom(g){return g?e:f}}}makeOutsideCorner(){const a=this.constantProvider.CORNER_RADIUS,b=this.OFFSET,c=(1-Math.SQRT1_2)*(a-b)+b,d=moveBy$$module$build$src$core$utils$svg_paths(c,c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(a-c,-c+b)),e=moveBy$$module$build$src$core$utils$svg_paths(b,a)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(a,-a+\nb)),f=-c,g=moveBy$$module$build$src$core$utils$svg_paths(c,f)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(-c+b,-f-a));return{height:a,topLeft(h){return h?d:e},bottomLeft(){return g}}}makePuzzleTab(){const a=this.constantProvider.TAB_WIDTH,b=this.constantProvider.TAB_HEIGHT,c=moveBy$$module$build$src$core$utils$svg_paths(-2,-b+2.5+.9)+lineTo$$module$build$src$core$utils$svg_paths(a*-.45,-2.1),d=lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",\n2.5)+moveBy$$module$build$src$core$utils$svg_paths(-a*.97,2.5)+curve$$module$build$src$core$utils$svg_paths(\"q\",[point$$module$build$src$core$utils$svg_paths(-a*.05,10),point$$module$build$src$core$utils$svg_paths(a*.3,9.5)])+moveBy$$module$build$src$core$utils$svg_paths(a*.67,-1.9)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",2.5),e=lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",-1.5)+moveBy$$module$build$src$core$utils$svg_paths(a*-.92,-.5)+curve$$module$build$src$core$utils$svg_paths(\"q\",\n[point$$module$build$src$core$utils$svg_paths(a*-.19,-5.5),point$$module$build$src$core$utils$svg_paths(0,-11)])+moveBy$$module$build$src$core$utils$svg_paths(a*.92,1),f=moveBy$$module$build$src$core$utils$svg_paths(-5,b-.7)+lineTo$$module$build$src$core$utils$svg_paths(a*.46,-2.1);return{width:a,height:b,pathUp(g){return g?c:e},pathDown(g){return g?d:f}}}makeNotch(){return{pathLeft:lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",this.OFFSET)+this.constantProvider.NOTCH.pathLeft}}makeJaggedTeeth(){return{pathLeft:lineTo$$module$build$src$core$utils$svg_paths(5.1,\n2.6)+moveBy$$module$build$src$core$utils$svg_paths(-10.2,6.8)+lineTo$$module$build$src$core$utils$svg_paths(5.1,2.6),height:12,width:10.2}}makeStartHat(){const a=this.constantProvider.START_HAT.height,b=moveBy$$module$build$src$core$utils$svg_paths(25,-8.7)+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(29.7,-6.2),point$$module$build$src$core$utils$svg_paths(57.2,-.5),point$$module$build$src$core$utils$svg_paths(75,8.7)]),c=curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(17.8,-9.2),point$$module$build$src$core$utils$svg_paths(45.3,-14.9),point$$module$build$src$core$utils$svg_paths(75,-8.7)])+moveTo$$module$build$src$core$utils$svg_paths(100.5,a+.5);return{path(d){return d?b:c}}}},module$build$src$core$renderers$geras$highlight_constants={};module$build$src$core$renderers$geras$highlight_constants.HighlightConstantProvider=HighlightConstantProvider$$module$build$src$core$renderers$geras$highlight_constants;var InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input=class extends InlineInput$$module$build$src$core$renderers$measurables$inline_input{constructor(a,b){super(a,b);this.constants_=a;this.connectedBlock&&(this.width+=this.constants_.DARK_PATH_OFFSET,this.height+=this.constants_.DARK_PATH_OFFSET)}},module$build$src$core$renderers$geras$measurables$inline_input={};module$build$src$core$renderers$geras$measurables$inline_input.InlineInput=InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input;var StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input=class extends StatementInput$$module$build$src$core$renderers$measurables$statement_input{constructor(a,b){super(a,b);this.constants_=a;this.connectedBlock&&(this.height+=this.constants_.DARK_PATH_OFFSET)}},module$build$src$core$renderers$geras$measurables$statement_input={};module$build$src$core$renderers$geras$measurables$statement_input.StatementInput=StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input;var RenderInfo$$module$build$src$core$renderers$geras$info=class extends RenderInfo$$module$build$src$core$renderers$common$info{constructor(a,b){super(a,b);this.renderer_=a}getRenderer(){return this.renderer_}populateBottomRow_(){super.populateBottomRow_();this.block_.inputList.length&&this.block_.inputList[this.block_.inputList.length-1]instanceof StatementInput$$module$build$src$core$inputs$statement_input||(this.bottomRow.minHeight=this.constants_.MEDIUM_PADDING-this.constants_.DARK_PATH_OFFSET)}addInput_(a,\nb){if(this.isInline&&a instanceof $.ValueInput$$module$build$src$core$inputs$value_input)b.elements.push(new InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input(this.constants_,a)),b.hasInlineInput=!0;else if(a instanceof StatementInput$$module$build$src$core$inputs$statement_input)b.elements.push(new StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input(this.constants_,a)),b.hasStatement=!0;else if(a instanceof $.ValueInput$$module$build$src$core$inputs$value_input)b.elements.push(new ExternalValueInput$$module$build$src$core$renderers$measurables$external_value_input(this.constants_,\na)),b.hasExternalInput=!0;else if(a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input)b.minHeight=Math.max(b.minHeight,this.constants_.DUMMY_INPUT_MIN_HEIGHT),b.hasDummyInput=!0;this.isInline||b.align!==null||(b.align=a.align)}addElemSpacing_(){let a=!1;for(let c=0,d;d=this.rows[c];c++)d.hasExternalInput&&(a=!0);for(let c=0,d;d=this.rows[c];c++){var b=d.elements;d.elements=[];d.startsWithElemSpacer()&&d.elements.push(new InRowSpacer$$module$build$src$core$renderers$measurables$in_row_spacer(this.constants_,\nthis.getInRowSpacing_(null,b[0])));if(b.length){for(let e=0;e0&&this.addAlignmentPadding_(e,a),a=e.width)}else super.alignRowElements_()}getDesiredRowWidth_(a){return this.isInline&&a.hasStatement?this.statementEdge+\nthis.constants_.MAX_BOTTOM_WIDTH+this.startX:super.getDesiredRowWidth_(a)}finalize_(){let a=0,b=0;for(let d=0,e;e=this.rows[d];d++){e.yPos=b;e.xPos=this.startX;b+=e.height;a=Math.max(a,e.widthWithConnectedBlocks);var c=b-this.topRow.ascenderHeight;e===this.bottomRow&&c>>/sprites.png);\\n height: 16px;\\n vertical-align: middle;\\n visibility: hidden;\\n width: 16px;\\n}\\n\\n.blocklyToolboxCategoryIconClosed {\\n background-position: -32px -1px;\\n}\\n\\n.blocklyToolbox[dir=\"RTL\"] .blocklyToolboxCategoryIconClosed {\\n background-position: 0 -1px;\\n}\\n\\n.blocklyToolboxSelected>.blocklyToolboxCategoryIconClosed {\\n background-position: -32px -17px;\\n}\\n\\n.blocklyToolbox[dir=\"RTL\"] .blocklyToolboxSelected>.blocklyToolboxCategoryIconClosed {\\n background-position: 0 -17px;\\n}\\n\\n.blocklyToolboxCategoryIconOpen {\\n background-position: -16px -1px;\\n}\\n\\n.blocklyToolboxSelected>.blocklyToolboxCategoryIconOpen {\\n background-position: -16px -17px;\\n}\\n\\n.blocklyToolboxCategoryLabel {\\n cursor: default;\\n font: 16px sans-serif;\\n padding: 0 3px;\\n vertical-align: middle;\\n}\\n\\n.blocklyToolboxDelete .blocklyToolboxCategoryLabel {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyToolboxSelected .blocklyToolboxCategoryLabel {\\n color: #fff;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX_ITEM,ToolboxCategory$$module$build$src$core$toolbox$category.registrationName,ToolboxCategory$$module$build$src$core$toolbox$category);var module$build$src$core$toolbox$category={};module$build$src$core$toolbox$category.ToolboxCategory=ToolboxCategory$$module$build$src$core$toolbox$category;var ToolboxSeparator$$module$build$src$core$toolbox$separator=class extends ToolboxItem$$module$build$src$core$toolbox$toolbox_item{constructor(a,b){super(a,b);this.cssConfig_={container:\"blocklyTreeSeparator\"};this.htmlDiv=null;Object.assign(this.cssConfig_,a.cssconfig||a.cssConfig)}init(){this.createDom_()}createDom_(){const a=document.createElement(\"div\");a.tabIndex=-1;a.id=this.getId();const b=this.cssConfig_.container;b&&addClass$$module$build$src$core$utils$dom(a,b);return this.htmlDiv=a}getDiv(){return this.htmlDiv}dispose(){removeNode$$module$build$src$core$utils$dom(this.htmlDiv)}};\nToolboxSeparator$$module$build$src$core$toolbox$separator.registrationName=\"sep\";register$$module$build$src$core$css('\\n.blocklyTreeSeparator {\\n border-bottom: solid #e5e5e5 1px;\\n height: 0;\\n margin: 5px 0;\\n}\\n\\n.blocklyToolbox[layout=\"h\"] .blocklyTreeSeparator {\\n border-right: solid #e5e5e5 1px;\\n border-bottom: none;\\n height: auto;\\n margin: 0 5px 0 5px;\\n padding: 5px 0;\\n width: 0;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX_ITEM,ToolboxSeparator$$module$build$src$core$toolbox$separator.registrationName,ToolboxSeparator$$module$build$src$core$toolbox$separator);var module$build$src$core$toolbox$separator={};module$build$src$core$toolbox$separator.ToolboxSeparator=ToolboxSeparator$$module$build$src$core$toolbox$separator;var CollapsibleToolboxCategory$$module$build$src$core$toolbox$collapsible_category=class extends ToolboxCategory$$module$build$src$core$toolbox$category{constructor(a,b,c){super(a,b,c);this.subcategoriesDiv_=null;this.expanded_=!1;this.toolboxItems_=[]}makeDefaultCssConfig_(){const a=super.makeDefaultCssConfig_();a.contents=\"blocklyToolboxCategoryGroup\";return a}parseContents_(a){if(\"custom\"in a)this.flyoutItems_=a.custom;else{const b=a.contents;if(b){this.flyoutItems_=[];a=!0;for(let c=0;cb.dispose());this.contents.clear();this.renderContents_(a.contents);this.position();this.handleToolboxItemResize()}renderContents_(a){const b=document.createDocumentFragment();\nfor(let c=0;c\n{a.refreshTheme&&a.refreshTheme()})}refreshSelection(){this.selectedItem_&&this.selectedItem_.isSelectable()&&this.selectedItem_.getContents().length&&this.flyout.show(this.selectedItem_.getContents())}setVisible(a){this.isVisible_!==a&&(this.HtmlDiv.style.display=a?\"block\":\"none\",this.isVisible_=a,this.workspace_.recordDragTargets())}autoHide(a){!a&&this.flyout&&this.flyout.autoClose&&this.clearSelection()}setSelectedItem(a){const b=this.selectedItem_;!a&&!b||a&&!isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item(a)||\n(this.shouldDeselectItem_(b,a)&&b!==null&&this.deselectItem_(b),this.shouldSelectItem_(b,a)&&a!==null&&this.selectItem_(b,a),this.updateFlyout_(b,a),this.fireSelectEvent(b,a))}shouldDeselectItem_(a,b){return a!==null&&(!a.isCollapsible()||a!==b)}shouldSelectItem_(a,b){return b!==null&&b!==a}deselectItem_(a){this.selectedItem_=null;this.previouslySelectedItem_=a;a.setSelected(!1);setState$$module$build$src$core$utils$aria(this.contentsDiv_,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,\"\")}selectItem_(a,\nb){this.selectedItem_=b;this.previouslySelectedItem_=a;b.setSelected(!0);setState$$module$build$src$core$utils$aria(this.contentsDiv_,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,b.getId())}selectItemByPosition(a){(a=this.getToolboxItems()[a])&&this.setSelectedItem(a)}updateFlyout_(a,b){b&&(a!==b||b.isCollapsible())&&b.getContents().length?(this.flyout.show(b.getContents()),this.flyout.scrollToStart()):this.flyout.hide()}fireSelectEvent(a,b){const c=a&&a.getName();let d=b&&b.getName();\na===b&&(d=null);a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.TOOLBOX_ITEM_SELECT))(c,d,this.workspace_.id);fire$$module$build$src$core$events$utils(a)}selectParent(){return this.selectedItem_?this.selectedItem_.isCollapsible()&&this.selectedItem_.isExpanded()?(this.selectedItem_.toggleExpanded(),!0):this.selectedItem_.getParent()&&this.selectedItem_.getParent().isSelectable()?(this.setSelectedItem(this.selectedItem_.getParent()),!0):!1:!1}selectChild(){if(!this.selectedItem_||\n!this.selectedItem_.isCollapsible())return!1;const a=this.selectedItem_;a.isExpanded()?this.selectNext():a.toggleExpanded();return!0}selectNext(){if(!this.selectedItem_)return!1;const a=[...this.contents.values()];let b=a.indexOf(this.selectedItem_)+1;if(b>-1&&b-1&&ba.dispose());for(let a=0;ac.isSelectable()))!=null?b:null}return null}getNestedTrees(){return[]}lookUpFocusableNode(a){return this.getToolboxItemById(a)}onTreeFocus(a,\nb){a!==this?this.getSelectedItem()!==a&&this.setSelectedItem(a):this.clearSelection()}onTreeBlur(a){let b;a&&a===((b=this.flyout)==null?void 0:b.getWorkspace())||this.autoHide(!1)}};register$$module$build$src$core$css('\\n.blocklyToolboxDelete {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyToolboxGrab {\\n cursor: url(\"<<>>/handclosed.cur\"), auto;\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n}\\n\\n/* Category tree in Toolbox. */\\n.blocklyToolbox {\\n box-sizing: border-box;\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background-color: #ddd;\\n overflow-x: visible;\\n overflow-y: auto;\\n padding: 4px 0 4px 0;\\n position: absolute;\\n z-index: 70; /* so blocks go under toolbox when dragging */\\n -webkit-tap-highlight-color: transparent; /* issue #1345 */\\n}\\n\\n.blocklyToolboxCategoryGroup {\\n display: flex;\\n flex-wrap: wrap;\\n flex-direction: column;\\n}\\n\\n.blocklyToolboxCategoryGroup:focus {\\n outline: none;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX,DEFAULT$$module$build$src$core$registry,Toolbox$$module$build$src$core$toolbox$toolbox);var module$build$src$core$toolbox$toolbox={};module$build$src$core$toolbox$toolbox.Toolbox=Toolbox$$module$build$src$core$toolbox$toolbox;var module$build$src$core$interfaces$i_navigation_policy={};var VERSION$$module$build$src$core$blockly=\"12.3.1\",INPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE,OUTPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE,NEXT_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT,PREVIOUS_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT,\nTOOLBOX_AT_TOP$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.TOP,TOOLBOX_AT_BOTTOM$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.BOTTOM,TOOLBOX_AT_LEFT$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.LEFT,TOOLBOX_AT_RIGHT$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.RIGHT,svgResize$$module$build$src$core$blockly=svgResize$$module$build$src$core$common,getMainWorkspace$$module$build$src$core$blockly=\ngetMainWorkspace$$module$build$src$core$common,getSelected$$module$build$src$core$blockly=getSelected$$module$build$src$core$common,defineBlocksWithJsonArray$$module$build$src$core$blockly=defineBlocksWithJsonArray$$module$build$src$core$common,setParentContainer$$module$build$src$core$blockly=setParentContainer$$module$build$src$core$common,COLLAPSE_CHARS$$module$build$src$core$blockly=COLLAPSE_CHARS$$module$build$src$core$internal_constants,OPPOSITE_TYPE$$module$build$src$core$blockly=OPPOSITE_TYPE$$module$build$src$core$internal_constants,\nRENAME_VARIABLE_ID$$module$build$src$core$blockly=RENAME_VARIABLE_ID$$module$build$src$core$internal_constants,DELETE_VARIABLE_ID$$module$build$src$core$blockly=DELETE_VARIABLE_ID$$module$build$src$core$internal_constants,COLLAPSED_INPUT_NAME$$module$build$src$core$blockly=COLLAPSED_INPUT_NAME$$module$build$src$core$constants,COLLAPSED_FIELD_NAME$$module$build$src$core$blockly=COLLAPSED_FIELD_NAME$$module$build$src$core$constants,VARIABLE_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$variables,\nVARIABLE_DYNAMIC_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$variables_dynamic,PROCEDURE_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$procedures;Workspace$$module$build$src$core$workspace.prototype.newBlock=function(a,b){return new Block$$module$build$src$core$block(this,a,b)};WorkspaceSvg$$module$build$src$core$workspace_svg.prototype.newBlock=function(a,b){return new BlockSvg$$module$build$src$core$block_svg(this,a,b)};\nWorkspace$$module$build$src$core$workspace.prototype.newComment=function(a){return new WorkspaceComment$$module$build$src$core$comments$workspace_comment(this,a)};WorkspaceSvg$$module$build$src$core$workspace_svg.prototype.newComment=function(a){return new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(this,a)};WorkspaceSvg$$module$build$src$core$workspace_svg.newTrashcan=function(a){return new Trashcan$$module$build$src$core$trashcan(a)};\nMiniWorkspaceBubble$$module$build$src$core$bubbles$mini_workspace_bubble.prototype.newWorkspaceSvg=function(a){return new WorkspaceSvg$$module$build$src$core$workspace_svg(a)};$.Names$$module$build$src$core$names.prototype.populateProcedures=function(a){a=allProcedures$$module$build$src$core$procedures(a);a=a[0].concat(a[1]);for(let b=0;b0,text:c.replace(\"%1\",d.getText()),callback:$.callbackFactory$$module$build$src$core$contextmenu(this,b)})}else if(this.type===\"variables_get_dynamic\"||this.type===\"variables_get_reporter_dynamic\")c={text:$.Msg$$module$build$src$core$msg.RENAME_VARIABLE,\nenabled:!0,callback:renameOptionCallbackFactory$$module$build$src$blocks$variables_dynamic(this)},d=this.getField(\"VAR\").getText(),d={text:$.Msg$$module$build$src$core$msg.DELETE_VARIABLE.replace(\"%1\",d),enabled:!0,callback:deleteOptionCallbackFactory$$module$build$src$blocks$variables_dynamic(this)},a.unshift(c),a.unshift(d)},onchange:function(a){a=this.getFieldValue(\"VAR\");a=$.getVariable$$module$build$src$core$variables(this.workspace,a);this.type===\"variables_get_dynamic\"?this.outputConnection.setCheck(a.getType()):\nthis.getInput(\"VALUE\").connection.setCheck(a.getType())}},renameOptionCallbackFactory$$module$build$src$blocks$variables_dynamic=function(a){return function(){const b=a.workspace,c=a.getField(\"VAR\").getVariable();$.renameVariable$$module$build$src$core$variables(b,c)}},deleteOptionCallbackFactory$$module$build$src$blocks$variables_dynamic=function(a){return function(){const b=a.getField(\"VAR\").getVariable();b&&$.deleteVariable$$module$build$src$core$variables(b.getWorkspace(),b,a)}};\n$.registerMixin$$module$build$src$core$extensions(\"contextMenu_variableDynamicSetterGetter\",CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables_dynamic);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$variables_dynamic);var module$build$src$blocks$variables_dynamic={blocks:blocks$$module$build$src$blocks$variables_dynamic};var blocks$$module$build$src$blocks$variables=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"variables_get\",message0:\"%1\",args0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_VARIABLES_DEFAULT_NAME}\"}],output:null,style:\"variable_blocks\",helpUrl:\"%{BKY_VARIABLES_GET_HELPURL}\",tooltip:\"%{BKY_VARIABLES_GET_TOOLTIP}\",extensions:[\"contextMenu_variableSetterGetter\"]},{type:\"variables_set\",message0:\"%{BKY_VARIABLES_SET}\",args0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_VARIABLES_DEFAULT_NAME}\"},\n{type:\"input_value\",name:\"VALUE\"}],previousStatement:null,nextStatement:null,style:\"variable_blocks\",tooltip:\"%{BKY_VARIABLES_SET_TOOLTIP}\",helpUrl:\"%{BKY_VARIABLES_SET_HELPURL}\",extensions:[\"contextMenu_variableSetterGetter\"]}]),CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables={customContextMenu:function(a){if(!this.isInFlyout){if(this.type===\"variables_get\"){var b=\"variables_set\";var c=$.Msg$$module$build$src$core$msg.VARIABLES_GET_CREATE_SET}else b=\"variables_get\",\nc=$.Msg$$module$build$src$core$msg.VARIABLES_SET_CREATE_GET;var d=this.getField(\"VAR\");b={type:b,fields:{VAR:d.saveState(!0)}};a.push({enabled:this.workspace.remainingCapacity()>0,text:c.replace(\"%1\",d.getText()),callback:$.callbackFactory$$module$build$src$core$contextmenu(this,b)})}else if(this.type===\"variables_get\"||this.type===\"variables_get_reporter\")c={text:$.Msg$$module$build$src$core$msg.RENAME_VARIABLE,enabled:!0,callback:renameOptionCallbackFactory$$module$build$src$blocks$variables(this)},\nd=this.getField(\"VAR\").getText(),d={text:$.Msg$$module$build$src$core$msg.DELETE_VARIABLE.replace(\"%1\",d),enabled:!0,callback:deleteOptionCallbackFactory$$module$build$src$blocks$variables(this)},a.unshift(c),a.unshift(d)}},renameOptionCallbackFactory$$module$build$src$blocks$variables=function(a){return function(){const b=a.workspace,c=a.getField(\"VAR\").getVariable();$.renameVariable$$module$build$src$core$variables(b,c)}},deleteOptionCallbackFactory$$module$build$src$blocks$variables=function(a){return function(){const b=\na.getField(\"VAR\").getVariable();b&&$.deleteVariable$$module$build$src$core$variables(b.getWorkspace(),b,a)}};$.registerMixin$$module$build$src$core$extensions(\"contextMenu_variableSetterGetter\",CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$variables);var module$build$src$blocks$variables={blocks:blocks$$module$build$src$blocks$variables};var blocks$$module$build$src$blocks$text=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"text\",message0:\"%1\",args0:[{type:\"field_input\",name:\"TEXT\",text:\"\"}],output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_TEXT_HELPURL}\",tooltip:\"%{BKY_TEXT_TEXT_TOOLTIP}\",extensions:[\"text_quotes\",\"parent_tooltip_when_inline\"]},{type:\"text_join\",message0:\"\",output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_JOIN_HELPURL}\",tooltip:\"%{BKY_TEXT_JOIN_TOOLTIP}\",mutator:\"text_join_mutator\"},\n{type:\"text_create_join_container\",message0:\"%{BKY_TEXT_CREATE_JOIN_TITLE_JOIN} %1 %2\",args0:[{type:\"input_dummy\"},{type:\"input_statement\",name:\"STACK\"}],style:\"text_blocks\",tooltip:\"%{BKY_TEXT_CREATE_JOIN_TOOLTIP}\",enableContextMenu:!1},{type:\"text_create_join_item\",message0:\"%{BKY_TEXT_CREATE_JOIN_ITEM_TITLE_ITEM}\",previousStatement:null,nextStatement:null,style:\"text_blocks\",tooltip:\"%{BKY_TEXT_CREATE_JOIN_ITEM_TOOLTIP}\",enableContextMenu:!1},{type:\"text_append\",message0:\"%{BKY_TEXT_APPEND_TITLE}\",\nargs0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_TEXT_APPEND_VARIABLE}\"},{type:\"input_value\",name:\"TEXT\"}],previousStatement:null,nextStatement:null,style:\"text_blocks\",extensions:[\"text_append_tooltip\"]},{type:\"text_length\",message0:\"%{BKY_TEXT_LENGTH_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Number\",style:\"text_blocks\",tooltip:\"%{BKY_TEXT_LENGTH_TOOLTIP}\",helpUrl:\"%{BKY_TEXT_LENGTH_HELPURL}\"},{type:\"text_isEmpty\",message0:\"%{BKY_TEXT_ISEMPTY_TITLE}\",\nargs0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Boolean\",style:\"text_blocks\",tooltip:\"%{BKY_TEXT_ISEMPTY_TOOLTIP}\",helpUrl:\"%{BKY_TEXT_ISEMPTY_HELPURL}\"},{type:\"text_indexOf\",message0:\"%{BKY_TEXT_INDEXOF_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:\"String\"},{type:\"field_dropdown\",name:\"END\",options:[[\"%{BKY_TEXT_INDEXOF_OPERATOR_FIRST}\",\"FIRST\"],[\"%{BKY_TEXT_INDEXOF_OPERATOR_LAST}\",\"LAST\"]]},{type:\"input_value\",name:\"FIND\",check:\"String\"}],output:\"Number\",style:\"text_blocks\",\nhelpUrl:\"%{BKY_TEXT_INDEXOF_HELPURL}\",inputsInline:!0,extensions:[\"text_indexOf_tooltip\"]},{type:\"text_charAt\",message0:\"%{BKY_TEXT_CHARAT_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:\"String\"},{type:\"field_dropdown\",name:\"WHERE\",options:[[\"%{BKY_TEXT_CHARAT_FROM_START}\",\"FROM_START\"],[\"%{BKY_TEXT_CHARAT_FROM_END}\",\"FROM_END\"],[\"%{BKY_TEXT_CHARAT_FIRST}\",\"FIRST\"],[\"%{BKY_TEXT_CHARAT_LAST}\",\"LAST\"],[\"%{BKY_TEXT_CHARAT_RANDOM}\",\"RANDOM\"]]}],output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_CHARAT_HELPURL}\",\ninputsInline:!0,mutator:\"text_charAt_mutator\"}]),GET_SUBSTRING_BLOCK$$module$build$src$blocks$text={init:function(){this.WHERE_OPTIONS_1=[[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FIRST,\"FIRST\"]];this.WHERE_OPTIONS_2=[[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_FROM_END,\n\"FROM_END\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_LAST,\"LAST\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"STRING\").setCheck(\"String\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_INPUT_IN_TEXT);const a=b=>{const c=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this[\"WHERE_OPTIONS_\"+b]});c.setValidator(function(d){const e=this.getValue();d=d===\n\"FROM_START\"||d===\"FROM_END\";d!==(e===\"FROM_START\"||e===\"FROM_END\")&&this.getSourceBlock().updateAt_(b,d)});return c};this.appendDummyInput(\"WHERE1_INPUT\").appendField(a(1),\"WHERE1\");this.appendDummyInput(\"AT1\");this.appendDummyInput(\"WHERE2_INPUT\").appendField(a(2),\"WHERE2\");this.appendDummyInput(\"AT2\");$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL);this.setInputsInline(!0);this.setOutput(!0,\n\"String\");this.updateAt_(1,!0);this.updateAt_(2,!0);this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");var b=this.getInput(\"AT1\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at1\",`${b}`);b=this.getInput(\"AT2\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at2\",`${b}`);return a},domToMutation:function(a){const b=\na.getAttribute(\"at1\")===\"true\";a=a.getAttribute(\"at2\")===\"true\";this.updateAt_(1,b);this.updateAt_(2,a)},updateAt_:function(a,b){this.removeInput(\"AT\"+a);this.removeInput(\"ORDINAL\"+a,!0);b?(this.appendValueInput(\"AT\"+a).setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\"+a).appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\"+a);a===2&&$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL&&(this.removeInput(\"TAIL\",\n!0),this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL));a===1&&(this.moveInputBefore(\"AT1\",\"WHERE2_INPUT\"),this.getInput(\"ORDINAL1\")&&this.moveInputBefore(\"ORDINAL1\",\"WHERE2_INPUT\"))}};blocks$$module$build$src$blocks$text.text_getSubstring=GET_SUBSTRING_BLOCK$$module$build$src$blocks$text;\nblocks$$module$build$src$blocks$text.text_changeCase={init:function(){const a=[[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_UPPERCASE,\"UPPERCASE\"],[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_LOWERCASE,\"LOWERCASE\"],[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_TITLECASE,\"TITLECASE\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"TEXT\").setCheck(\"String\").appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",\noptions:a}),\"CASE\");this.setOutput(!0,\"String\");this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_TOOLTIP)}};\nblocks$$module$build$src$blocks$text.text_trim={init:function(){const a=[[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_BOTH,\"BOTH\"],[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_LEFT,\"LEFT\"],[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_RIGHT,\"RIGHT\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_TRIM_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"TEXT\").setCheck(\"String\").appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a}),\n\"MODE\");this.setOutput(!0,\"String\");this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_TRIM_TOOLTIP)}};blocks$$module$build$src$blocks$text.text_print={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_PRINT_TITLE,args0:[{type:\"input_value\",name:\"TEXT\"}],previousStatement:null,nextStatement:null,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_PRINT_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_PRINT_HELPURL})}};\nvar PROMPT_COMMON$$module$build$src$blocks$text={updateType_:function(a){this.outputConnection.setCheck(a===\"NUMBER\"?\"Number\":\"String\")},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"type\",this.getFieldValue(\"TYPE\"));return a},domToMutation:function(a){this.updateType_(a.getAttribute(\"type\"))}};\nblocks$$module$build$src$blocks$text.text_prompt_ext=Object.assign({},PROMPT_COMMON$$module$build$src$blocks$text,{init:function(){var a=[[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_TEXT,\"TEXT\"],[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_NUMBER,\"NUMBER\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_PROMPT_HELPURL);this.setStyle(\"text_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});a.setValidator(b=>{this.updateType_(b)});this.appendValueInput(\"TEXT\").appendField(a,\n\"TYPE\");this.setOutput(!0,\"String\");this.setTooltip(()=>this.getFieldValue(\"TYPE\")===\"TEXT\"?$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_TEXT:$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_NUMBER)}});\nblocks$$module$build$src$blocks$text.text_prompt=Object.assign({},PROMPT_COMMON$$module$build$src$blocks$text,{init:function(){this.mixin(QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);var a=[[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_TEXT,\"TEXT\"],[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_NUMBER,\"NUMBER\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_PROMPT_HELPURL);this.setStyle(\"text_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});\na.setValidator(b=>{this.updateType_(b)});this.appendDummyInput().appendField(a,\"TYPE\").appendField(this.newQuote_(!0)).appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_input\",text:\"\"}),\"TEXT\").appendField(this.newQuote_(!1));this.setOutput(!0,\"String\");this.setTooltip(()=>this.getFieldValue(\"TYPE\")===\"TEXT\"?$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_TEXT:$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_NUMBER)}});\nblocks$$module$build$src$blocks$text.text_count={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_COUNT_MESSAGE0,args0:[{type:\"input_value\",name:\"SUB\",check:\"String\"},{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"Number\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_COUNT_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_COUNT_HELPURL})}};\nblocks$$module$build$src$blocks$text.text_replace={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_MESSAGE0,args0:[{type:\"input_value\",name:\"FROM\",check:\"String\"},{type:\"input_value\",name:\"TO\",check:\"String\"},{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"String\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_HELPURL})}};\nblocks$$module$build$src$blocks$text.text_reverse={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_MESSAGE0,args0:[{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"String\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_HELPURL})}};\nvar QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text={QUOTE_IMAGE_LEFT_DATAURI:\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC\",QUOTE_IMAGE_RIGHT_DATAURI:\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==\",\nQUOTE_IMAGE_WIDTH:12,QUOTE_IMAGE_HEIGHT:12,quoteField_:function(a){for(let b=0,c;c=this.inputList[b];b++)for(let d=0,e;e=c.fieldRow[d];d++)if(a===e.name){c.insertFieldAt(d,this.newQuote_(!0));c.insertFieldAt(d+2,this.newQuote_(!1));return}console.warn('field named \"'+a+'\" not found in '+this.toDevString())},newQuote_:function(a){a=this.RTL?!a:a;return $.fromJson$$module$build$src$core$field_registry({type:\"field_image\",src:a?this.QUOTE_IMAGE_LEFT_DATAURI:this.QUOTE_IMAGE_RIGHT_DATAURI,width:this.QUOTE_IMAGE_WIDTH,\nheight:this.QUOTE_IMAGE_HEIGHT,alt:a?\"\\u201c\":\"\\u201d\"})}},QUOTES_EXTENSION$$module$build$src$blocks$text=function(){this.mixin(QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);this.quoteField_(\"TEXT\")},JOIN_MUTATOR_MIXIN$$module$build$src$blocks$text={itemCount_:0,mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"items\",`${this.itemCount_}`);return a},domToMutation:function(a){this.itemCount_=parseInt(a.getAttribute(\"items\"),10);this.updateShape_()},\nsaveExtraState:function(){return{itemCount:this.itemCount_}},loadExtraState:function(a){this.itemCount_=a.itemCount;this.updateShape_()},decompose:function(a){const b=a.newBlock(\"text_create_join_container\");b.initSvg();let c=b.getInput(\"STACK\").connection;for(let d=0;d$.Msg$$module$build$src$core$msg.TEXT_INDEXOF_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\"0\":\"-1\"))},CHARAT_MUTATOR_MIXIN$$module$build$src$blocks$text={isAt_:!1,mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"at\",`${this.isAt_}`);return a},domToMutation:function(a){a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},updateAt_:function(a){this.removeInput(\"AT\",\n!0);this.removeInput(\"ORDINAL\",!0);a&&(this.appendValueInput(\"AT\").setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX));$.Msg$$module$build$src$core$msg.TEXT_CHARAT_TAIL&&(this.removeInput(\"TAIL\",!0),this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_CHARAT_TAIL));this.isAt_=a}},CHARAT_EXTENSION$$module$build$src$blocks$text=function(){this.getField(\"WHERE\").setValidator(function(a){a=\na===\"FROM_START\"||a===\"FROM_END\";const b=this.getSourceBlock();a!==b.isAt_&&b.updateAt_(a)});this.updateAt_(!0);this.setTooltip(()=>{var a=this.getFieldValue(\"WHERE\");let b=$.Msg$$module$build$src$core$msg.TEXT_CHARAT_TOOLTIP;(a===\"FROM_START\"||a===\"FROM_END\")&&(a=a===\"FROM_START\"?$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP:$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_END_TOOLTIP)&&(b+=\" \"+a.replace(\"%1\",this.workspace.options.oneBasedIndex?\"#1\":\"#0\"));return b})};\n$.register$$module$build$src$core$extensions(\"text_indexOf_tooltip\",INDEXOF_TOOLTIP_EXTENSION$$module$build$src$blocks$text);$.register$$module$build$src$core$extensions(\"text_quotes\",QUOTES_EXTENSION$$module$build$src$blocks$text);$.registerMixin$$module$build$src$core$extensions(\"quote_image_mixin\",QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);$.registerMutator$$module$build$src$core$extensions(\"text_join_mutator\",JOIN_MUTATOR_MIXIN$$module$build$src$blocks$text,JOIN_EXTENSION$$module$build$src$blocks$text);\n$.registerMutator$$module$build$src$core$extensions(\"text_charAt_mutator\",CHARAT_MUTATOR_MIXIN$$module$build$src$blocks$text,CHARAT_EXTENSION$$module$build$src$blocks$text);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$text);var module$build$src$blocks$text={blocks:blocks$$module$build$src$blocks$text};var blocks$$module$build$src$blocks$procedures={},PROCEDURE_DEF_COMMON$$module$build$src$blocks$procedures={setStatements_:function(a){this.hasStatements_!==a&&(a?(this.appendStatementInput(\"STACK\").appendField($.Msg$$module$build$src$core$msg.PROCEDURES_DEFNORETURN_DO),this.getInput(\"RETURN\")&&this.moveInputBefore(\"STACK\",\"RETURN\")):this.removeInput(\"STACK\",!0),this.hasStatements_=a)},updateParams_:function(){let a=\"\";this.arguments_.length&&(a=$.Msg$$module$build$src$core$msg.PROCEDURES_BEFORE_PARAMS+\n\" \"+this.arguments_.join(\", \"));$.disable$$module$build$src$core$events$utils();try{this.setFieldValue(a,\"PARAMS\")}finally{$.enable$$module$build$src$core$events$utils()}},mutationToDom:function(a){const b=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a&&b.setAttribute(\"name\",this.getFieldValue(\"NAME\"));for(let c=0;c\",\"GT\"],[\"\\u200f\\u2265\",\"GTE\"]]},{type:\"input_value\",name:\"B\"}],\ninputsInline:!0,output:\"Boolean\",style:\"logic_blocks\",helpUrl:\"%{BKY_LOGIC_COMPARE_HELPURL}\",extensions:[\"logic_compare\",\"logic_op_tooltip\"]},{type:\"logic_operation\",message0:\"%1 %2 %3\",args0:[{type:\"input_value\",name:\"A\",check:\"Boolean\"},{type:\"field_dropdown\",name:\"OP\",options:[[\"%{BKY_LOGIC_OPERATION_AND}\",\"AND\"],[\"%{BKY_LOGIC_OPERATION_OR}\",\"OR\"]]},{type:\"input_value\",name:\"B\",check:\"Boolean\"}],inputsInline:!0,output:\"Boolean\",style:\"logic_blocks\",helpUrl:\"%{BKY_LOGIC_OPERATION_HELPURL}\",extensions:[\"logic_op_tooltip\"]},\n{type:\"logic_negate\",message0:\"%{BKY_LOGIC_NEGATE_TITLE}\",args0:[{type:\"input_value\",name:\"BOOL\",check:\"Boolean\"}],output:\"Boolean\",style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_NEGATE_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_NEGATE_HELPURL}\"},{type:\"logic_null\",message0:\"%{BKY_LOGIC_NULL}\",output:null,style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_NULL_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_NULL_HELPURL}\"},{type:\"logic_ternary\",message0:\"%{BKY_LOGIC_TERNARY_CONDITION} %1\",args0:[{type:\"input_value\",name:\"IF\",check:\"Boolean\"}],\nmessage1:\"%{BKY_LOGIC_TERNARY_IF_TRUE} %1\",args1:[{type:\"input_value\",name:\"THEN\"}],message2:\"%{BKY_LOGIC_TERNARY_IF_FALSE} %1\",args2:[{type:\"input_value\",name:\"ELSE\"}],output:null,style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_TERNARY_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_TERNARY_HELPURL}\",extensions:[\"logic_ternary\"]},{type:\"controls_if_if\",message0:\"%{BKY_CONTROLS_IF_IF_TITLE_IF}\",nextStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_IF_TOOLTIP}\"},{type:\"controls_if_elseif\",\nmessage0:\"%{BKY_CONTROLS_IF_ELSEIF_TITLE_ELSEIF}\",previousStatement:null,nextStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_ELSEIF_TOOLTIP}\"},{type:\"controls_if_else\",message0:\"%{BKY_CONTROLS_IF_ELSE_TITLE_ELSE}\",previousStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_ELSE_TOOLTIP}\"}]),TOOLTIPS_BY_OP$$module$build$src$blocks$logic={EQ:\"%{BKY_LOGIC_COMPARE_TOOLTIP_EQ}\",NEQ:\"%{BKY_LOGIC_COMPARE_TOOLTIP_NEQ}\",LT:\"%{BKY_LOGIC_COMPARE_TOOLTIP_LT}\",\nLTE:\"%{BKY_LOGIC_COMPARE_TOOLTIP_LTE}\",GT:\"%{BKY_LOGIC_COMPARE_TOOLTIP_GT}\",GTE:\"%{BKY_LOGIC_COMPARE_TOOLTIP_GTE}\",AND:\"%{BKY_LOGIC_OPERATION_TOOLTIP_AND}\",OR:\"%{BKY_LOGIC_OPERATION_TOOLTIP_OR}\"};$.register$$module$build$src$core$extensions(\"logic_op_tooltip\",$.buildTooltipForDropdown$$module$build$src$core$extensions(\"OP\",TOOLTIPS_BY_OP$$module$build$src$blocks$logic));\nvar CONTROLS_IF_MUTATOR_MIXIN$$module$build$src$blocks$logic={elseifCount_:0,elseCount_:0,mutationToDom:function(){if(!this.elseifCount_&&!this.elseCount_)return null;const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");this.elseifCount_&&a.setAttribute(\"elseif\",String(this.elseifCount_));this.elseCount_&&a.setAttribute(\"else\",\"1\");return a},domToMutation:function(a){this.elseifCount_=parseInt(a.getAttribute(\"elseif\"),10)||0;this.elseCount_=parseInt(a.getAttribute(\"else\"),10)||0;this.rebuildShape_()},\nsaveExtraState:function(){if(!this.elseifCount_&&!this.elseCount_)return null;const a=Object.create(null);this.elseifCount_&&(a.elseIfCount=this.elseifCount_);this.elseCount_&&(a.hasElse=!0);return a},loadExtraState:function(a){this.elseifCount_=a.elseIfCount||0;this.elseCount_=a.hasElse?1:0;this.updateShape_()},decompose:function(a){const b=a.newBlock(\"controls_if_if\");b.initSvg();let c=b.nextConnection;for(let d=1;d<=this.elseifCount_;d++){const e=a.newBlock(\"controls_if_elseif\");e.initSvg();c.connect(e.previousConnection);\nc=e.nextConnection}this.elseCount_&&(a=a.newBlock(\"controls_if_else\"),a.initSvg(),c.connect(a.previousConnection));return b},compose:function(a){a=a.nextConnection.targetBlock();this.elseCount_=this.elseifCount_=0;const b=[null],c=[null];let d=null;for(;a;){if(!a.isInsertionMarker())switch(a.type){case \"controls_if_elseif\":this.elseifCount_++;b.push(a.valueConnection_);c.push(a.statementConnection_);break;case \"controls_if_else\":this.elseCount_++;d=a.statementConnection_;break;default:throw TypeError(\"Unknown block type: \"+\na.type);}a=a.getNextBlock()}this.updateShape_();this.reconnectChildBlocks_(b,c,d)},saveConnections:function(a){a=a.nextConnection.targetBlock();let b=1;for(;a;){if(!a.isInsertionMarker())switch(a.type){case \"controls_if_elseif\":var c=this.getInput(\"IF\"+b);const d=this.getInput(\"DO\"+b);a.valueConnection_=c&&c.connection.targetConnection;a.statementConnection_=d&&d.connection.targetConnection;b++;break;case \"controls_if_else\":c=this.getInput(\"ELSE\");a.statementConnection_=c&&c.connection.targetConnection;\nbreak;default:throw TypeError(\"Unknown block type: \"+a.type);}a=a.getNextBlock()}},rebuildShape_:function(){const a=[null],b=[null];let c=null;this.getInput(\"ELSE\")&&(c=this.getInput(\"ELSE\").connection.targetConnection);for(let d=1;this.getInput(\"IF\"+d);d++){const e=this.getInput(\"IF\"+d),f=this.getInput(\"DO\"+d);a.push(e.connection.targetConnection);b.push(f.connection.targetConnection)}this.updateShape_();this.reconnectChildBlocks_(a,b,c)},updateShape_:function(){this.getInput(\"ELSE\")&&this.removeInput(\"ELSE\");\nfor(var a=1;this.getInput(\"IF\"+a);a++)this.removeInput(\"IF\"+a),this.removeInput(\"DO\"+a);for(a=1;a<=this.elseifCount_;a++)this.appendValueInput(\"IF\"+a).setCheck(\"Boolean\").appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_ELSEIF),this.appendStatementInput(\"DO\"+a).appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_THEN);this.elseCount_&&this.appendStatementInput(\"ELSE\").appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_ELSE)},reconnectChildBlocks_:function(a,b,c){for(let d=\n1;d<=this.elseifCount_;d++){let e;(e=a[d])==null||e.reconnect(this,\"IF\"+d);let f;(f=b[d])==null||f.reconnect(this,\"DO\"+d)}c==null||c.reconnect(this,\"ELSE\")}};$.registerMutator$$module$build$src$core$extensions(\"controls_if_mutator\",CONTROLS_IF_MUTATOR_MIXIN$$module$build$src$blocks$logic,null,[\"controls_if_elseif\",\"controls_if_else\"]);\nvar CONTROLS_IF_TOOLTIP_EXTENSION$$module$build$src$blocks$logic=function(){this.setTooltip(function(){if(this.elseifCount_||this.elseCount_){if(!this.elseifCount_&&this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_2;if(this.elseifCount_&&!this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_3;if(this.elseifCount_&&this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_4}else return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_1;\nreturn\"\"}.bind(this))};$.register$$module$build$src$core$extensions(\"controls_if_tooltip\",CONTROLS_IF_TOOLTIP_EXTENSION$$module$build$src$blocks$logic);\nvar LOGIC_COMPARE_ONCHANGE_MIXIN$$module$build$src$blocks$logic={onchange:function(a){this.prevBlocks_||(this.prevBlocks_=[null,null]);var b=this.getInputTargetBlock(\"A\");const c=this.getInputTargetBlock(\"B\");b&&c&&!this.workspace.connectionChecker.doTypeChecks(b.outputConnection,c.outputConnection)&&($.setGroup$$module$build$src$core$events$utils(a.group),a=this.prevBlocks_[0],a!==b&&(b.unplug(),!a||a.isDisposed()||a.isShadow()||this.getInput(\"A\").connection.connect(a.outputConnection)),b=this.prevBlocks_[1],\nb!==c&&(c.unplug(),!b||b.isDisposed()||b.isShadow()||this.getInput(\"B\").connection.connect(b.outputConnection)),this.bumpNeighbours(),$.setGroup$$module$build$src$core$events$utils(!1));this.prevBlocks_[0]=this.getInputTargetBlock(\"A\");this.prevBlocks_[1]=this.getInputTargetBlock(\"B\")}},LOGIC_COMPARE_EXTENSION$$module$build$src$blocks$logic=function(){this.mixin(LOGIC_COMPARE_ONCHANGE_MIXIN$$module$build$src$blocks$logic)};$.register$$module$build$src$core$extensions(\"logic_compare\",LOGIC_COMPARE_EXTENSION$$module$build$src$blocks$logic);\nvar LOGIC_TERNARY_ONCHANGE_MIXIN$$module$build$src$blocks$logic={prevParentConnection_:null,onchange:function(a){const b=this.getInputTargetBlock(\"THEN\"),c=this.getInputTargetBlock(\"ELSE\"),d=this.outputConnection.targetConnection;if((b||c)&&d)for(let e=0;e<2;e++){const f=e===1?b:c;f&&!f.workspace.connectionChecker.doTypeChecks(f.outputConnection,d)&&($.setGroup$$module$build$src$core$events$utils(a.group),d===this.prevParentConnection_?(this.unplug(),d.getSourceBlock().bumpNeighbours()):(f.unplug(),\nf.bumpNeighbours()),$.setGroup$$module$build$src$core$events$utils(!1))}this.prevParentConnection_=d}};$.registerMixin$$module$build$src$core$extensions(\"logic_ternary\",LOGIC_TERNARY_ONCHANGE_MIXIN$$module$build$src$blocks$logic);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$logic);var module$build$src$blocks$logic={blocks:blocks$$module$build$src$blocks$logic};var blocks$$module$build$src$blocks$lists=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"lists_create_empty\",message0:\"%{BKY_LISTS_CREATE_EMPTY_TITLE}\",output:\"Array\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_CREATE_EMPTY_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_CREATE_EMPTY_HELPURL}\"},{type:\"lists_repeat\",message0:\"%{BKY_LISTS_REPEAT_TITLE}\",args0:[{type:\"input_value\",name:\"ITEM\"},{type:\"input_value\",name:\"NUM\",check:\"Number\"}],output:\"Array\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_REPEAT_TOOLTIP}\",\nhelpUrl:\"%{BKY_LISTS_REPEAT_HELPURL}\"},{type:\"lists_reverse\",message0:\"%{BKY_LISTS_REVERSE_MESSAGE0}\",args0:[{type:\"input_value\",name:\"LIST\",check:\"Array\"}],output:\"Array\",inputsInline:!0,style:\"list_blocks\",tooltip:\"%{BKY_LISTS_REVERSE_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_REVERSE_HELPURL}\"},{type:\"lists_isEmpty\",message0:\"%{BKY_LISTS_ISEMPTY_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Boolean\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_ISEMPTY_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_ISEMPTY_HELPURL}\"},\n{type:\"lists_length\",message0:\"%{BKY_LISTS_LENGTH_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Number\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_LENGTH_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_LENGTH_HELPURL}\"}]),LISTS_CREATE_WITH$$module$build$src$blocks$lists={init:function(){this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_CREATE_WITH_HELPURL);this.setStyle(\"list_blocks\");this.itemCount_=3;this.updateShape_();this.setOutput(!0,\"Array\");this.setMutator(new $.MutatorIcon$$module$build$src$core$icons$mutator_icon([\"lists_create_with_item\"],\nthis));this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_CREATE_WITH_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"items\",String(this.itemCount_));return a},domToMutation:function(a){a=a.getAttribute(\"items\");if(!a)throw new TypeError(\"element did not have items\");this.itemCount_=parseInt(a,10);this.updateShape_()},saveExtraState:function(){return{itemCount:this.itemCount_}},loadExtraState:function(a){this.itemCount_=a.itemCount;\nthis.updateShape_()},decompose:function(a){const b=a.newBlock(\"lists_create_with_container\");b.initSvg();let c=b.getInput(\"STACK\").connection;for(let d=0;d$.Msg$$module$build$src$core$msg.LISTS_INDEX_OF_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\"0\":\"-1\"))}};blocks$$module$build$src$blocks$lists.lists_indexOf=LISTS_INDEXOF$$module$build$src$blocks$lists;\nvar LISTS_GETINDEX$$module$build$src$blocks$lists={init:function(){var a=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_GET,\"GET\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_GET_REMOVE,\"GET_REMOVE\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_REMOVE,\"REMOVE\"]];this.WHERE_OPTIONS=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FIRST,\"FIRST\"],\n[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_LAST,\"LAST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_RANDOM,\"RANDOM\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_HELPURL);this.setStyle(\"list_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});a.setValidator(function(b){b=b===\"REMOVE\";this.getSourceBlock().updateStatement_(b)});this.appendValueInput(\"VALUE\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_INPUT_IN_LIST);\nthis.appendDummyInput().appendField(a,\"MODE\").appendField(\"\",\"SPACE\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this.WHERE_OPTIONS});a.setValidator(function(b){const c=this.getValue();b=b===\"FROM_START\"||b===\"FROM_END\";b!==(c===\"FROM_START\"||c===\"FROM_END\")&&this.getSourceBlock().updateAt_(b)});this.appendDummyInput().appendField(a,\"WHERE\");this.appendDummyInput(\"AT\");$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL);\nthis.setInputsInline(!0);this.setOutput(!0);this.updateAt_(!0);this.setTooltip(()=>{const b=this.getFieldValue(\"MODE\"),c=this.getFieldValue(\"WHERE\");let d=\"\";switch(b+\" \"+c){case \"GET FROM_START\":case \"GET FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM;break;case \"GET FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_FIRST;break;case \"GET LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_LAST;break;case \"GET RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM;\nbreak;case \"GET_REMOVE FROM_START\":case \"GET_REMOVE FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM;break;case \"GET_REMOVE FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST;break;case \"GET_REMOVE LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST;break;case \"GET_REMOVE RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM;break;case \"REMOVE FROM_START\":case \"REMOVE FROM_END\":d=\n$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM;break;case \"REMOVE FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST;break;case \"REMOVE LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST;break;case \"REMOVE RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM}if(c===\"FROM_START\"||c===\"FROM_END\")d+=\" \"+(c===\"FROM_START\"?$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP:$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_END_TOOLTIP).replace(\"%1\",\nthis.workspace.options.oneBasedIndex?\"#1\":\"#0\");return d})},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"statement\",String(!this.outputConnection));const b=this.getInput(\"AT\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at\",String(b));return a},domToMutation:function(a){const b=a.getAttribute(\"statement\")===\"true\";this.updateStatement_(b);a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},saveExtraState:function(){return this.outputConnection?\nnull:{isStatement:!0}},loadExtraState:function(a){a.isStatement?this.updateStatement_(!0):typeof a===\"string\"&&this.domToMutation($.textToDom$$module$build$src$core$utils$xml(a))},updateStatement_:function(a){a!==!this.outputConnection&&(this.unplug(!0,!0),a?(this.setOutput(!1),this.setPreviousStatement(!0),this.setNextStatement(!0)):(this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0)))},updateAt_:function(a){this.removeInput(\"AT\");this.removeInput(\"ORDINAL\",!0);a?(this.appendValueInput(\"AT\").setCheck(\"Number\"),\n$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\");$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL&&this.moveInputBefore(\"TAIL\",null)}};blocks$$module$build$src$blocks$lists.lists_getIndex=LISTS_GETINDEX$$module$build$src$blocks$lists;\nvar LISTS_SETINDEX$$module$build$src$blocks$lists={init:function(){var a=[[$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_SET,\"SET\"],[$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INSERT,\"INSERT\"]];this.WHERE_OPTIONS=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FIRST,\"FIRST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_LAST,\"LAST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_RANDOM,\n\"RANDOM\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"LIST\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INPUT_IN_LIST);a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});this.appendDummyInput().appendField(a,\"MODE\").appendField(\"\",\"SPACE\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this.WHERE_OPTIONS});a.setValidator(function(b){const c=\nthis.getValue();b=b===\"FROM_START\"||b===\"FROM_END\";b!==(c===\"FROM_START\"||c===\"FROM_END\")&&this.getSourceBlock().updateAt_(b)});this.appendDummyInput().appendField(a,\"WHERE\");this.appendDummyInput(\"AT\");this.appendValueInput(\"TO\").appendField($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INPUT_TO);this.setInputsInline(!0);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP);this.updateAt_(!0);this.setTooltip(()=>{const b=\nthis.getFieldValue(\"MODE\"),c=this.getFieldValue(\"WHERE\");let d=\"\";switch(b+\" \"+c){case \"SET FROM_START\":case \"SET FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_FROM;break;case \"SET FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_FIRST;break;case \"SET LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_LAST;break;case \"SET RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_RANDOM;break;case \"INSERT FROM_START\":case \"INSERT FROM_END\":d=\n$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FROM;break;case \"INSERT FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST;break;case \"INSERT LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_LAST;break;case \"INSERT RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM}if(c===\"FROM_START\"||c===\"FROM_END\")d+=\" \"+$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\n\"#1\":\"#0\");return d})},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\"),b=this.getInput(\"AT\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at\",String(b));return a},domToMutation:function(a){a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},saveExtraState:function(){return null},loadExtraState:function(){},updateAt_:function(a){this.removeInput(\"AT\");this.removeInput(\"ORDINAL\",!0);a?(this.appendValueInput(\"AT\").setCheck(\"Number\"),\n$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\");this.moveInputBefore(\"AT\",\"TO\");this.getInput(\"ORDINAL\")&&this.moveInputBefore(\"ORDINAL\",\"TO\")}};blocks$$module$build$src$blocks$lists.lists_setIndex=LISTS_SETINDEX$$module$build$src$blocks$lists;\nvar LISTS_GETSUBLIST$$module$build$src$blocks$lists={init:function(){this.WHERE_OPTIONS_1=[[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FIRST,\"FIRST\"]];this.WHERE_OPTIONS_2=[[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_FROM_END,\"FROM_END\"],\n[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_LAST,\"LAST\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"LIST\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_INPUT_IN_LIST);const a=b=>{const c=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this[\"WHERE_OPTIONS_\"+b]});c.setValidator(function(d){const e=this.getValue();d=d===\"FROM_START\"||d===\n\"FROM_END\";d!==(e===\"FROM_START\"||e===\"FROM_END\")&&this.getSourceBlock().updateAt_(b,d)});return c};this.appendDummyInput(\"WHERE1_INPUT\").appendField(a(1),\"WHERE1\");this.appendDummyInput(\"AT1\");this.appendDummyInput(\"WHERE2_INPUT\").appendField(a(2),\"WHERE2\");this.appendDummyInput(\"AT2\");$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL);this.setInputsInline(!0);this.setOutput(!0,\"Array\");this.updateAt_(1,\n!0);this.updateAt_(2,!0);this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");var b=this.getInput(\"AT1\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at1\",String(b));b=this.getInput(\"AT2\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at2\",String(b));return a},domToMutation:function(a){const b=a.getAttribute(\"at1\")===\n\"true\";a=a.getAttribute(\"at2\")===\"true\";this.updateAt_(1,b);this.updateAt_(2,a)},saveExtraState:function(){return null},loadExtraState:function(){},updateAt_:function(a,b){this.removeInput(\"AT\"+a);this.removeInput(\"ORDINAL\"+a,!0);b?(this.appendValueInput(\"AT\"+a).setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\"+a).appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\"+a);a===1&&(this.moveInputBefore(\"AT1\",\n\"WHERE2_INPUT\"),this.getInput(\"ORDINAL1\")&&this.moveInputBefore(\"ORDINAL1\",\"WHERE2_INPUT\"));$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL&&this.moveInputBefore(\"TAIL\",null)}};blocks$$module$build$src$blocks$lists.lists_getSublist=LISTS_GETSUBLIST$$module$build$src$blocks$lists;\nblocks$$module$build$src$blocks$lists.lists_sort={init:function(){this.jsonInit({message0:\"%{BKY_LISTS_SORT_TITLE}\",args0:[{type:\"field_dropdown\",name:\"TYPE\",options:[[\"%{BKY_LISTS_SORT_TYPE_NUMERIC}\",\"NUMERIC\"],[\"%{BKY_LISTS_SORT_TYPE_TEXT}\",\"TEXT\"],[\"%{BKY_LISTS_SORT_TYPE_IGNORECASE}\",\"IGNORE_CASE\"]]},{type:\"field_dropdown\",name:\"DIRECTION\",options:[[\"%{BKY_LISTS_SORT_ORDER_ASCENDING}\",\"1\"],[\"%{BKY_LISTS_SORT_ORDER_DESCENDING}\",\"-1\"]]},{type:\"input_value\",name:\"LIST\",check:\"Array\"}],output:\"Array\",\nstyle:\"list_blocks\",tooltip:\"%{BKY_LISTS_SORT_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_SORT_HELPURL}\"})}};\nblocks$$module$build$src$blocks$lists.lists_split={init:function(){const a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:[[$.Msg$$module$build$src$core$msg.LISTS_SPLIT_LIST_FROM_TEXT,\"SPLIT\"],[$.Msg$$module$build$src$core$msg.LISTS_SPLIT_TEXT_FROM_LIST,\"JOIN\"]]});if(!a)throw Error(\"field_dropdown not found\");a.setValidator(b=>{this.updateType_(b)});this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_SPLIT_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"INPUT\").setCheck(\"String\").appendField(a,\n\"MODE\");this.appendValueInput(\"DELIM\").setCheck(\"String\").appendField($.Msg$$module$build$src$core$msg.LISTS_SPLIT_WITH_DELIMITER);this.setInputsInline(!0);this.setOutput(!0,\"Array\");this.setTooltip(()=>{const b=this.getFieldValue(\"MODE\");if(b===\"SPLIT\")return $.Msg$$module$build$src$core$msg.LISTS_SPLIT_TOOLTIP_SPLIT;if(b===\"JOIN\")return $.Msg$$module$build$src$core$msg.LISTS_SPLIT_TOOLTIP_JOIN;throw Error(\"Unknown mode: \"+b);})},updateType_:function(a){if(this.getFieldValue(\"MODE\")!==a){const b=\nthis.getInput(\"INPUT\").connection;b.setShadowDom(null);const c=b.targetBlock();c&&(b.disconnect(),c.isShadow()?c.dispose(!1):this.bumpNeighbours())}a===\"SPLIT\"?(this.outputConnection.setCheck(\"Array\"),this.getInput(\"INPUT\").setCheck(\"String\")):(this.outputConnection.setCheck(\"String\"),this.getInput(\"INPUT\").setCheck(\"Array\"))},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"mode\",this.getFieldValue(\"MODE\"));return a},domToMutation:function(a){this.updateType_(a.getAttribute(\"mode\"))},\nsaveExtraState:function(){return{mode:this.getFieldValue(\"MODE\")}},loadExtraState:function(a){this.updateType_(a.mode)}};$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$lists);var module$build$src$blocks$lists={blocks:blocks$$module$build$src$blocks$lists};var blocks$$module$build$src$blocks$blocks=Object.assign({},blocks$$module$build$src$blocks$lists,blocks$$module$build$src$blocks$logic,blocks$$module$build$src$blocks$loops,blocks$$module$build$src$blocks$math,blocks$$module$build$src$blocks$procedures,blocks$$module$build$src$blocks$text,blocks$$module$build$src$blocks$variables,blocks$$module$build$src$blocks$variables_dynamic),module$build$src$blocks$blocks={blocks:blocks$$module$build$src$blocks$blocks,lists:module$build$src$blocks$lists,logic:module$build$src$blocks$logic,\nloops:module$build$src$blocks$loops,math:module$build$src$blocks$math,procedures:module$build$src$blocks$procedures,texts:module$build$src$blocks$text,variables:module$build$src$blocks$variables,variablesDynamic:module$build$src$blocks$variables_dynamic};\nmodule$build$src$blocks$blocks.__namespace__=$;\nreturn module$build$src$blocks$blocks;\n}));\n\n\n//# sourceMappingURL=blocks_compressed.js.map\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/blocks_compressed.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/index.js": +/*!***************************************!*\ + !*** ./node_modules/blockly/index.js ***! + \***************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! blockly/core */ \"./node_modules/blockly/blockly_compressed.js\"), __webpack_require__(/*! blockly/msg/en */ \"./node_modules/blockly/msg/en.js\"), __webpack_require__(/*! blockly/blocks */ \"./node_modules/blockly/blocks_compressed.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function(Blockly, en, blocks) {\n/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Main entrypoint for blockly package. Via its UMD wrapper,\n * this module loads blockly/core, blockly/blocks and blockly/msg/en\n * and then calls setLocale(en).\n *\n * This entrypoint previously also loaded one or more generators\n * (JavaScript in browser, all five in node.js environments) but it no\n * longer makes sense to do so because of changes to generators\n * exports (they no longer have the side effect of defining\n * Blockly.JavaScript, etc., when loaded as modules).\n */\n\n/* eslint-disable */\n'use strict';\n\n// Include the EN Locale by default.\nBlockly.setLocale(en);\n\nreturn Blockly;\n}));\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/index.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/index.mjs": +/*!****************************************!*\ + !*** ./node_modules/blockly/index.mjs ***! + \****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Block: () => (/* binding */ Block),\n/* harmony export */ BlockFlyoutInflater: () => (/* binding */ BlockFlyoutInflater),\n/* harmony export */ BlockNavigationPolicy: () => (/* binding */ BlockNavigationPolicy),\n/* harmony export */ BlockSvg: () => (/* binding */ BlockSvg),\n/* harmony export */ Blocks: () => (/* binding */ Blocks),\n/* harmony export */ ButtonFlyoutInflater: () => (/* binding */ ButtonFlyoutInflater),\n/* harmony export */ COLLAPSED_FIELD_NAME: () => (/* binding */ COLLAPSED_FIELD_NAME),\n/* harmony export */ COLLAPSED_INPUT_NAME: () => (/* binding */ COLLAPSED_INPUT_NAME),\n/* harmony export */ COLLAPSE_CHARS: () => (/* binding */ COLLAPSE_CHARS),\n/* harmony export */ CodeGenerator: () => (/* binding */ CodeGenerator),\n/* harmony export */ CollapsibleToolboxCategory: () => (/* binding */ CollapsibleToolboxCategory),\n/* harmony export */ ComponentManager: () => (/* binding */ ComponentManager),\n/* harmony export */ Connection: () => (/* binding */ Connection),\n/* harmony export */ ConnectionChecker: () => (/* binding */ ConnectionChecker),\n/* harmony export */ ConnectionDB: () => (/* binding */ ConnectionDB),\n/* harmony export */ ConnectionNavigationPolicy: () => (/* binding */ ConnectionNavigationPolicy),\n/* harmony export */ ConnectionType: () => (/* binding */ ConnectionType),\n/* harmony export */ ContextMenu: () => (/* binding */ ContextMenu),\n/* harmony export */ ContextMenuItems: () => (/* binding */ ContextMenuItems),\n/* harmony export */ ContextMenuRegistry: () => (/* binding */ ContextMenuRegistry),\n/* harmony export */ Css: () => (/* binding */ Css),\n/* harmony export */ DELETE_VARIABLE_ID: () => (/* binding */ DELETE_VARIABLE_ID),\n/* harmony export */ DeleteArea: () => (/* binding */ DeleteArea),\n/* harmony export */ DragTarget: () => (/* binding */ DragTarget),\n/* harmony export */ DropDownDiv: () => (/* binding */ DropDownDiv),\n/* harmony export */ Events: () => (/* binding */ Events),\n/* harmony export */ Extensions: () => (/* binding */ Extensions),\n/* harmony export */ Field: () => (/* binding */ Field),\n/* harmony export */ FieldCheckbox: () => (/* binding */ FieldCheckbox),\n/* harmony export */ FieldDropdown: () => (/* binding */ FieldDropdown),\n/* harmony export */ FieldImage: () => (/* binding */ FieldImage),\n/* harmony export */ FieldLabel: () => (/* binding */ FieldLabel),\n/* harmony export */ FieldLabelSerializable: () => (/* binding */ FieldLabelSerializable),\n/* harmony export */ FieldNavigationPolicy: () => (/* binding */ FieldNavigationPolicy),\n/* harmony export */ FieldNumber: () => (/* binding */ FieldNumber),\n/* harmony export */ FieldTextInput: () => (/* binding */ FieldTextInput),\n/* harmony export */ FieldVariable: () => (/* binding */ FieldVariable),\n/* harmony export */ Flyout: () => (/* binding */ Flyout),\n/* harmony export */ FlyoutButton: () => (/* binding */ FlyoutButton),\n/* harmony export */ FlyoutButtonNavigationPolicy: () => (/* binding */ FlyoutButtonNavigationPolicy),\n/* harmony export */ FlyoutItem: () => (/* binding */ FlyoutItem),\n/* harmony export */ FlyoutMetricsManager: () => (/* binding */ FlyoutMetricsManager),\n/* harmony export */ FlyoutNavigationPolicy: () => (/* binding */ FlyoutNavigationPolicy),\n/* harmony export */ FlyoutNavigator: () => (/* binding */ FlyoutNavigator),\n/* harmony export */ FlyoutSeparator: () => (/* binding */ FlyoutSeparator),\n/* harmony export */ FlyoutSeparatorNavigationPolicy: () => (/* binding */ FlyoutSeparatorNavigationPolicy),\n/* harmony export */ FocusManager: () => (/* binding */ FocusManager),\n/* harmony export */ FocusableTreeTraverser: () => (/* binding */ FocusableTreeTraverser),\n/* harmony export */ Generator: () => (/* binding */ Generator),\n/* harmony export */ Gesture: () => (/* binding */ Gesture),\n/* harmony export */ Grid: () => (/* binding */ Grid),\n/* harmony export */ HorizontalFlyout: () => (/* binding */ HorizontalFlyout),\n/* harmony export */ INPUT_VALUE: () => (/* binding */ INPUT_VALUE),\n/* harmony export */ Input: () => (/* binding */ Input),\n/* harmony export */ InsertionMarkerPreviewer: () => (/* binding */ InsertionMarkerPreviewer),\n/* harmony export */ KeyboardNavigationController: () => (/* binding */ KeyboardNavigationController),\n/* harmony export */ LabelFlyoutInflater: () => (/* binding */ LabelFlyoutInflater),\n/* harmony export */ LineCursor: () => (/* binding */ LineCursor),\n/* harmony export */ Marker: () => (/* binding */ Marker),\n/* harmony export */ MarkerManager: () => (/* binding */ MarkerManager),\n/* harmony export */ Menu: () => (/* binding */ Menu),\n/* harmony export */ MenuItem: () => (/* binding */ MenuItem),\n/* harmony export */ MetricsManager: () => (/* binding */ MetricsManager),\n/* harmony export */ Msg: () => (/* binding */ Msg),\n/* harmony export */ NEXT_STATEMENT: () => (/* binding */ NEXT_STATEMENT),\n/* harmony export */ Names: () => (/* binding */ Names),\n/* harmony export */ Navigator: () => (/* binding */ Navigator),\n/* harmony export */ OPPOSITE_TYPE: () => (/* binding */ OPPOSITE_TYPE),\n/* harmony export */ OUTPUT_VALUE: () => (/* binding */ OUTPUT_VALUE),\n/* harmony export */ Options: () => (/* binding */ Options),\n/* harmony export */ PREVIOUS_STATEMENT: () => (/* binding */ PREVIOUS_STATEMENT),\n/* harmony export */ PROCEDURE_CATEGORY_NAME: () => (/* binding */ PROCEDURE_CATEGORY_NAME),\n/* harmony export */ Procedures: () => (/* binding */ Procedures),\n/* harmony export */ RENAME_VARIABLE_ID: () => (/* binding */ RENAME_VARIABLE_ID),\n/* harmony export */ RenderedConnection: () => (/* binding */ RenderedConnection),\n/* harmony export */ Scrollbar: () => (/* binding */ Scrollbar),\n/* harmony export */ ScrollbarPair: () => (/* binding */ ScrollbarPair),\n/* harmony export */ SeparatorFlyoutInflater: () => (/* binding */ SeparatorFlyoutInflater),\n/* harmony export */ ShortcutItems: () => (/* binding */ ShortcutItems),\n/* harmony export */ ShortcutRegistry: () => (/* binding */ ShortcutRegistry),\n/* harmony export */ TOOLBOX_AT_BOTTOM: () => (/* binding */ TOOLBOX_AT_BOTTOM),\n/* harmony export */ TOOLBOX_AT_LEFT: () => (/* binding */ TOOLBOX_AT_LEFT),\n/* harmony export */ TOOLBOX_AT_RIGHT: () => (/* binding */ TOOLBOX_AT_RIGHT),\n/* harmony export */ TOOLBOX_AT_TOP: () => (/* binding */ TOOLBOX_AT_TOP),\n/* harmony export */ Theme: () => (/* binding */ Theme),\n/* harmony export */ ThemeManager: () => (/* binding */ ThemeManager),\n/* harmony export */ Themes: () => (/* binding */ Themes),\n/* harmony export */ Toast: () => (/* binding */ Toast),\n/* harmony export */ Toolbox: () => (/* binding */ Toolbox),\n/* harmony export */ ToolboxCategory: () => (/* binding */ ToolboxCategory),\n/* harmony export */ ToolboxItem: () => (/* binding */ ToolboxItem),\n/* harmony export */ ToolboxSeparator: () => (/* binding */ ToolboxSeparator),\n/* harmony export */ Tooltip: () => (/* binding */ Tooltip),\n/* harmony export */ Touch: () => (/* binding */ Touch),\n/* harmony export */ Trashcan: () => (/* binding */ Trashcan),\n/* harmony export */ UnattachedFieldError: () => (/* binding */ UnattachedFieldError),\n/* harmony export */ VARIABLE_CATEGORY_NAME: () => (/* binding */ VARIABLE_CATEGORY_NAME),\n/* harmony export */ VARIABLE_DYNAMIC_CATEGORY_NAME: () => (/* binding */ VARIABLE_DYNAMIC_CATEGORY_NAME),\n/* harmony export */ VERSION: () => (/* binding */ VERSION),\n/* harmony export */ VariableMap: () => (/* binding */ VariableMap),\n/* harmony export */ VariableModel: () => (/* binding */ VariableModel),\n/* harmony export */ Variables: () => (/* binding */ Variables),\n/* harmony export */ VariablesDynamic: () => (/* binding */ VariablesDynamic),\n/* harmony export */ VerticalFlyout: () => (/* binding */ VerticalFlyout),\n/* harmony export */ WidgetDiv: () => (/* binding */ WidgetDiv),\n/* harmony export */ Workspace: () => (/* binding */ Workspace),\n/* harmony export */ WorkspaceAudio: () => (/* binding */ WorkspaceAudio),\n/* harmony export */ WorkspaceDragger: () => (/* binding */ WorkspaceDragger),\n/* harmony export */ WorkspaceNavigationPolicy: () => (/* binding */ WorkspaceNavigationPolicy),\n/* harmony export */ WorkspaceSvg: () => (/* binding */ WorkspaceSvg),\n/* harmony export */ Xml: () => (/* binding */ Xml),\n/* harmony export */ ZoomControls: () => (/* binding */ ZoomControls),\n/* harmony export */ blockAnimations: () => (/* binding */ blockAnimations),\n/* harmony export */ blockRendering: () => (/* binding */ blockRendering),\n/* harmony export */ browserEvents: () => (/* binding */ browserEvents),\n/* harmony export */ bubbles: () => (/* binding */ bubbles),\n/* harmony export */ bumpObjects: () => (/* binding */ bumpObjects),\n/* harmony export */ clipboard: () => (/* binding */ clipboard),\n/* harmony export */ comments: () => (/* binding */ comments),\n/* harmony export */ common: () => (/* binding */ common),\n/* harmony export */ config: () => (/* binding */ config),\n/* harmony export */ constants: () => (/* binding */ constants),\n/* harmony export */ defineBlocksWithJsonArray: () => (/* binding */ defineBlocksWithJsonArray),\n/* harmony export */ dialog: () => (/* binding */ dialog),\n/* harmony export */ dragging: () => (/* binding */ dragging),\n/* harmony export */ fieldRegistry: () => (/* binding */ fieldRegistry),\n/* harmony export */ geras: () => (/* binding */ geras),\n/* harmony export */ getFocusManager: () => (/* binding */ getFocusManager),\n/* harmony export */ getMainWorkspace: () => (/* binding */ getMainWorkspace),\n/* harmony export */ getSelected: () => (/* binding */ getSelected),\n/* harmony export */ hasBubble: () => (/* binding */ hasBubble),\n/* harmony export */ hideChaff: () => (/* binding */ hideChaff),\n/* harmony export */ icons: () => (/* binding */ icons),\n/* harmony export */ inject: () => (/* binding */ inject),\n/* harmony export */ inputs: () => (/* binding */ inputs),\n/* harmony export */ isCopyable: () => (/* binding */ isCopyable),\n/* harmony export */ isDeletable: () => (/* binding */ isDeletable),\n/* harmony export */ isDraggable: () => (/* binding */ isDraggable),\n/* harmony export */ isIcon: () => (/* binding */ isIcon),\n/* harmony export */ isObservable: () => (/* binding */ isObservable),\n/* harmony export */ isPaster: () => (/* binding */ isPaster),\n/* harmony export */ isRenderedElement: () => (/* binding */ isRenderedElement),\n/* harmony export */ isSelectable: () => (/* binding */ isSelectable),\n/* harmony export */ isSerializable: () => (/* binding */ isSerializable),\n/* harmony export */ isVariableBackedParameterModel: () => (/* binding */ isVariableBackedParameterModel),\n/* harmony export */ keyboardNavigationController: () => (/* binding */ keyboardNavigationController),\n/* harmony export */ layers: () => (/* binding */ layers),\n/* harmony export */ navigateBlock: () => (/* binding */ navigateBlock),\n/* harmony export */ navigateStacks: () => (/* binding */ navigateStacks),\n/* harmony export */ procedures: () => (/* binding */ procedures),\n/* harmony export */ registry: () => (/* binding */ registry),\n/* harmony export */ renderManagement: () => (/* binding */ renderManagement),\n/* harmony export */ serialization: () => (/* binding */ serialization),\n/* harmony export */ setLocale: () => (/* binding */ setLocale),\n/* harmony export */ setParentContainer: () => (/* binding */ setParentContainer),\n/* harmony export */ svgResize: () => (/* binding */ svgResize),\n/* harmony export */ thrasos: () => (/* binding */ thrasos),\n/* harmony export */ uiPosition: () => (/* binding */ uiPosition),\n/* harmony export */ utils: () => (/* binding */ utils),\n/* harmony export */ zelos: () => (/* binding */ zelos)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"./node_modules/blockly/index.js\");\n\nconst {\n Block,\n BlockFlyoutInflater,\n BlockNavigationPolicy,\n BlockSvg,\n Blocks,\n ButtonFlyoutInflater,\n COLLAPSED_FIELD_NAME,\n COLLAPSED_INPUT_NAME,\n COLLAPSE_CHARS,\n CodeGenerator,\n CollapsibleToolboxCategory,\n ComponentManager,\n Connection,\n ConnectionChecker,\n ConnectionDB,\n ConnectionNavigationPolicy,\n ConnectionType,\n ContextMenu,\n ContextMenuItems,\n ContextMenuRegistry,\n Css,\n DELETE_VARIABLE_ID,\n DeleteArea,\n DragTarget,\n DropDownDiv,\n Events,\n Extensions,\n Field,\n FieldCheckbox,\n FieldDropdown,\n FieldImage,\n FieldLabel,\n FieldLabelSerializable,\n FieldNavigationPolicy,\n FieldNumber,\n FieldTextInput,\n FieldVariable,\n Flyout,\n FlyoutButton,\n FlyoutButtonNavigationPolicy,\n FlyoutItem,\n FlyoutMetricsManager,\n FlyoutNavigationPolicy,\n FlyoutNavigator,\n FlyoutSeparator,\n FlyoutSeparatorNavigationPolicy,\n FocusManager,\n FocusableTreeTraverser,\n Generator,\n Gesture,\n Grid,\n HorizontalFlyout,\n INPUT_VALUE,\n Input,\n InsertionMarkerPreviewer,\n KeyboardNavigationController,\n LabelFlyoutInflater,\n LineCursor,\n Marker,\n MarkerManager,\n Menu,\n MenuItem,\n MetricsManager,\n Msg,\n NEXT_STATEMENT,\n Names,\n Navigator,\n OPPOSITE_TYPE,\n OUTPUT_VALUE,\n Options,\n PREVIOUS_STATEMENT,\n PROCEDURE_CATEGORY_NAME,\n Procedures,\n RENAME_VARIABLE_ID,\n RenderedConnection,\n Scrollbar,\n ScrollbarPair,\n SeparatorFlyoutInflater,\n ShortcutItems,\n ShortcutRegistry,\n TOOLBOX_AT_BOTTOM,\n TOOLBOX_AT_LEFT,\n TOOLBOX_AT_RIGHT,\n TOOLBOX_AT_TOP,\n Theme,\n ThemeManager,\n Themes,\n Toast,\n Toolbox,\n ToolboxCategory,\n ToolboxItem,\n ToolboxSeparator,\n Tooltip,\n Touch,\n Trashcan,\n UnattachedFieldError,\n VARIABLE_CATEGORY_NAME,\n VARIABLE_DYNAMIC_CATEGORY_NAME,\n VERSION,\n VariableMap,\n VariableModel,\n Variables,\n VariablesDynamic,\n VerticalFlyout,\n WidgetDiv,\n Workspace,\n WorkspaceAudio,\n WorkspaceDragger,\n WorkspaceNavigationPolicy,\n WorkspaceSvg,\n Xml,\n ZoomControls,\n blockAnimations,\n blockRendering,\n browserEvents,\n bubbles,\n bumpObjects,\n clipboard,\n comments,\n common,\n config,\n constants,\n defineBlocksWithJsonArray,\n dialog,\n dragging,\n fieldRegistry,\n geras,\n getFocusManager,\n getMainWorkspace,\n getSelected,\n hasBubble,\n hideChaff,\n icons,\n inject,\n inputs,\n isCopyable,\n isDeletable,\n isDraggable,\n isIcon,\n isObservable,\n isPaster,\n isRenderedElement,\n isSelectable,\n isSerializable,\n isVariableBackedParameterModel,\n keyboardNavigationController,\n layers,\n navigateBlock,\n navigateStacks,\n procedures,\n registry,\n renderManagement,\n serialization,\n setLocale,\n setParentContainer,\n svgResize,\n thrasos,\n uiPosition,\n utils,\n zelos,\n} = _index_js__WEBPACK_IMPORTED_MODULE_0__;\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/index.mjs?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/msg/en.js": +/*!****************************************!*\ + !*** ./node_modules/blockly/msg/en.js ***! + \****************************************/ +/***/ (function(module, exports) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{ var key, messages; }\n}(this, function() {\n// This file was automatically generated. Do not modify.\n\n'use strict';\n\nvar Blockly = Blockly || { Msg: Object.create(null) };\n\nBlockly.Msg[\"ADD_COMMENT\"] = \"Add Comment\";\nBlockly.Msg[\"ALT_KEY\"] = \"Alt\";\nBlockly.Msg[\"CANNOT_DELETE_VARIABLE_PROCEDURE\"] = \"Can't delete the variable '%1' because it's part of the definition of the function '%2'\";\nBlockly.Msg[\"CHANGE_VALUE_TITLE\"] = \"Change value:\";\nBlockly.Msg[\"CHROME_OS\"] = \"ChromeOS\";\nBlockly.Msg[\"CLEAN_UP\"] = \"Clean up Blocks\";\nBlockly.Msg[\"CLOSE\"] = \"Close\";\nBlockly.Msg[\"COLLAPSED_WARNINGS_WARNING\"] = \"Collapsed blocks contain warnings.\";\nBlockly.Msg[\"COLLAPSE_ALL\"] = \"Collapse Blocks\";\nBlockly.Msg[\"COLLAPSE_BLOCK\"] = \"Collapse Block\";\nBlockly.Msg[\"COLOUR_BLEND_COLOUR1\"] = \"colour 1\";\nBlockly.Msg[\"COLOUR_BLEND_COLOUR2\"] = \"colour 2\";\nBlockly.Msg[\"COLOUR_BLEND_HELPURL\"] = \"https://meyerweb.com/eric/tools/color-blend/#:::rgbp\";\nBlockly.Msg[\"COLOUR_BLEND_RATIO\"] = \"ratio\";\nBlockly.Msg[\"COLOUR_BLEND_TITLE\"] = \"blend\";\nBlockly.Msg[\"COLOUR_BLEND_TOOLTIP\"] = \"Blends two colours together with a given ratio (0.0 - 1.0).\";\nBlockly.Msg[\"COLOUR_PICKER_HELPURL\"] = \"https://en.wikipedia.org/wiki/Color\";\nBlockly.Msg[\"COLOUR_PICKER_TOOLTIP\"] = \"Choose a colour from the palette.\";\nBlockly.Msg[\"COLOUR_RANDOM_HELPURL\"] = \"http://randomcolour.com\";\nBlockly.Msg[\"COLOUR_RANDOM_TITLE\"] = \"random colour\";\nBlockly.Msg[\"COLOUR_RANDOM_TOOLTIP\"] = \"Choose a colour at random.\";\nBlockly.Msg[\"COLOUR_RGB_BLUE\"] = \"blue\";\nBlockly.Msg[\"COLOUR_RGB_GREEN\"] = \"green\";\nBlockly.Msg[\"COLOUR_RGB_HELPURL\"] = \"https://www.december.com/html/spec/colorpercompact.html\";\nBlockly.Msg[\"COLOUR_RGB_RED\"] = \"red\";\nBlockly.Msg[\"COLOUR_RGB_TITLE\"] = \"colour with\";\nBlockly.Msg[\"COLOUR_RGB_TOOLTIP\"] = \"Create a colour with the specified amount of red, green, and blue. All values must be between 0 and 100.\";\nBlockly.Msg[\"COMMAND_KEY\"] = \"⌘ Command\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#loop-termination-blocks\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK\"] = \"break out of loop\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE\"] = \"continue with next iteration of loop\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK\"] = \"Break out of the containing loop.\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE\"] = \"Skip the rest of this loop, and continue with the next iteration.\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_WARNING\"] = \"Warning: This block may only be used within a loop.\";\nBlockly.Msg[\"CONTROLS_FOREACH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#for-each\";\nBlockly.Msg[\"CONTROLS_FOREACH_TITLE\"] = \"for each item %1 in list %2\";\nBlockly.Msg[\"CONTROLS_FOREACH_TOOLTIP\"] = \"For each item in a list, set the variable '%1' to the item, and then do some statements.\";\nBlockly.Msg[\"CONTROLS_FOR_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#count-with\";\nBlockly.Msg[\"CONTROLS_FOR_TITLE\"] = \"count with %1 from %2 to %3 by %4\";\nBlockly.Msg[\"CONTROLS_FOR_TOOLTIP\"] = \"Have the variable '%1' take on the values from the start number to the end number, counting by the specified interval, and do the specified blocks.\";\nBlockly.Msg[\"CONTROLS_IF_ELSEIF_TOOLTIP\"] = \"Add a condition to the if block.\";\nBlockly.Msg[\"CONTROLS_IF_ELSE_TOOLTIP\"] = \"Add a final, catch-all condition to the if block.\";\nBlockly.Msg[\"CONTROLS_IF_HELPURL\"] = \"https://github.com/google/blockly/wiki/IfElse\";\nBlockly.Msg[\"CONTROLS_IF_IF_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this if block.\";\nBlockly.Msg[\"CONTROLS_IF_MSG_ELSE\"] = \"else\";\nBlockly.Msg[\"CONTROLS_IF_MSG_ELSEIF\"] = \"else if\";\nBlockly.Msg[\"CONTROLS_IF_MSG_IF\"] = \"if\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_1\"] = \"If a value is true, then do some statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_2\"] = \"If a value is true, then do the first block of statements. Otherwise, do the second block of statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_3\"] = \"If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_4\"] = \"If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements. If none of the values are true, do the last block of statements.\";\nBlockly.Msg[\"CONTROLS_REPEAT_HELPURL\"] = \"https://en.wikipedia.org/wiki/For_loop\";\nBlockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"] = \"do\";\nBlockly.Msg[\"CONTROLS_REPEAT_TITLE\"] = \"repeat %1 times\";\nBlockly.Msg[\"CONTROLS_REPEAT_TOOLTIP\"] = \"Do some statements several times.\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#repeat\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_OPERATOR_UNTIL\"] = \"repeat until\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_OPERATOR_WHILE\"] = \"repeat while\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL\"] = \"While a value is false, then do some statements.\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_TOOLTIP_WHILE\"] = \"While a value is true, then do some statements.\";\nBlockly.Msg[\"CONTROL_KEY\"] = \"Ctrl\";\nBlockly.Msg[\"COPY_SHORTCUT\"] = \"Copy\";\nBlockly.Msg[\"CUT_SHORTCUT\"] = \"Cut\";\nBlockly.Msg[\"DELETE_ALL_BLOCKS\"] = \"Delete all %1 blocks?\";\nBlockly.Msg[\"DELETE_BLOCK\"] = \"Delete Block\";\nBlockly.Msg[\"DELETE_VARIABLE\"] = \"Delete the '%1' variable\";\nBlockly.Msg[\"DELETE_VARIABLE_CONFIRMATION\"] = \"Delete %1 uses of the '%2' variable?\";\nBlockly.Msg[\"DELETE_X_BLOCKS\"] = \"Delete %1 Blocks\";\nBlockly.Msg[\"DIALOG_CANCEL\"] = \"Cancel\";\nBlockly.Msg[\"DIALOG_OK\"] = \"OK\";\nBlockly.Msg[\"DISABLE_BLOCK\"] = \"Disable Block\";\nBlockly.Msg[\"DUPLICATE_BLOCK\"] = \"Duplicate\";\nBlockly.Msg[\"DUPLICATE_COMMENT\"] = \"Duplicate Comment\";\nBlockly.Msg[\"EDIT_BLOCK_CONTENTS\"] = \"Edit Block contents\";\nBlockly.Msg[\"ENABLE_BLOCK\"] = \"Enable Block\";\nBlockly.Msg[\"EXPAND_ALL\"] = \"Expand Blocks\";\nBlockly.Msg[\"EXPAND_BLOCK\"] = \"Expand Block\";\nBlockly.Msg[\"EXTERNAL_INPUTS\"] = \"External Inputs\";\nBlockly.Msg[\"HELP\"] = \"Help\";\nBlockly.Msg[\"HELP_PROMPT\"] = \"Press %1 for help on keyboard controls\";\nBlockly.Msg[\"INLINE_INPUTS\"] = \"Inline Inputs\";\nBlockly.Msg[\"KEYBOARD_NAV_CONSTRAINED_MOVE_HINT\"] = \"Use the arrow keys to move, then %1 to accept the position\";\nBlockly.Msg[\"KEYBOARD_NAV_COPIED_HINT\"] = \"Copied. Press %1 to paste.\";\nBlockly.Msg[\"KEYBOARD_NAV_CUT_HINT\"] = \"Cut. Press %1 to paste.\";\nBlockly.Msg[\"KEYBOARD_NAV_UNCONSTRAINED_MOVE_HINT\"] = \"Hold %1 and use arrow keys to move freely, then %2 to accept the position\";\nBlockly.Msg[\"LINUX\"] = \"Linux\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-empty-list\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_TITLE\"] = \"create empty list\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_TOOLTIP\"] = \"Returns a list, of length 0, containing no data records\";\nBlockly.Msg[\"LISTS_CREATE_WITH_CONTAINER_TITLE_ADD\"] = \"list\";\nBlockly.Msg[\"LISTS_CREATE_WITH_CONTAINER_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this list block.\";\nBlockly.Msg[\"LISTS_CREATE_WITH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-list-with\";\nBlockly.Msg[\"LISTS_CREATE_WITH_INPUT_WITH\"] = \"create list with\";\nBlockly.Msg[\"LISTS_CREATE_WITH_ITEM_TOOLTIP\"] = \"Add an item to the list.\";\nBlockly.Msg[\"LISTS_CREATE_WITH_TOOLTIP\"] = \"Create a list with any number of items.\";\nBlockly.Msg[\"LISTS_GET_INDEX_FIRST\"] = \"first\";\nBlockly.Msg[\"LISTS_GET_INDEX_FROM_END\"] = \"# from end\";\nBlockly.Msg[\"LISTS_GET_INDEX_FROM_START\"] = \"#\";\nBlockly.Msg[\"LISTS_GET_INDEX_GET\"] = \"get\";\nBlockly.Msg[\"LISTS_GET_INDEX_GET_REMOVE\"] = \"get and remove\";\nBlockly.Msg[\"LISTS_GET_INDEX_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list\";\nBlockly.Msg[\"LISTS_GET_INDEX_LAST\"] = \"last\";\nBlockly.Msg[\"LISTS_GET_INDEX_RANDOM\"] = \"random\";\nBlockly.Msg[\"LISTS_GET_INDEX_REMOVE\"] = \"remove\";\nBlockly.Msg[\"LISTS_GET_INDEX_TAIL\"] = \"\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_FIRST\"] = \"Returns the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_FROM\"] = \"Returns the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_LAST\"] = \"Returns the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_RANDOM\"] = \"Returns a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST\"] = \"Removes and returns the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM\"] = \"Removes and returns the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST\"] = \"Removes and returns the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM\"] = \"Removes and returns a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST\"] = \"Removes the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM\"] = \"Removes the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST\"] = \"Removes the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM\"] = \"Removes a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_FROM_END\"] = \"to # from end\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_FROM_START\"] = \"to #\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_LAST\"] = \"to last\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#getting-a-sublist\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FIRST\"] = \"get sub-list from first\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FROM_END\"] = \"get sub-list from # from end\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FROM_START\"] = \"get sub-list from #\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_TAIL\"] = \"\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_TOOLTIP\"] = \"Creates a copy of the specified portion of a list.\";\nBlockly.Msg[\"LISTS_INDEX_FROM_END_TOOLTIP\"] = \"%1 is the last item.\";\nBlockly.Msg[\"LISTS_INDEX_FROM_START_TOOLTIP\"] = \"%1 is the first item.\";\nBlockly.Msg[\"LISTS_INDEX_OF_FIRST\"] = \"find first occurrence of item\";\nBlockly.Msg[\"LISTS_INDEX_OF_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#finding-items-in-a-list\";\nBlockly.Msg[\"LISTS_INDEX_OF_LAST\"] = \"find last occurrence of item\";\nBlockly.Msg[\"LISTS_INDEX_OF_TOOLTIP\"] = \"Returns the index of the first/last occurrence of the item in the list. Returns %1 if item is not found.\";\nBlockly.Msg[\"LISTS_INLIST\"] = \"in list\";\nBlockly.Msg[\"LISTS_ISEMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#is-empty\";\nBlockly.Msg[\"LISTS_ISEMPTY_TITLE\"] = \"%1 is empty\";\nBlockly.Msg[\"LISTS_ISEMPTY_TOOLTIP\"] = \"Returns true if the list is empty.\";\nBlockly.Msg[\"LISTS_LENGTH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#length-of\";\nBlockly.Msg[\"LISTS_LENGTH_TITLE\"] = \"length of %1\";\nBlockly.Msg[\"LISTS_LENGTH_TOOLTIP\"] = \"Returns the length of a list.\";\nBlockly.Msg[\"LISTS_REPEAT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-list-with\";\nBlockly.Msg[\"LISTS_REPEAT_TITLE\"] = \"create list with item %1 repeated %2 times\";\nBlockly.Msg[\"LISTS_REPEAT_TOOLTIP\"] = \"Creates a list consisting of the given value repeated the specified number of times.\";\nBlockly.Msg[\"LISTS_REVERSE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#reversing-a-list\";\nBlockly.Msg[\"LISTS_REVERSE_MESSAGE0\"] = \"reverse %1\";\nBlockly.Msg[\"LISTS_REVERSE_TOOLTIP\"] = \"Reverse a copy of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#in-list--set\";\nBlockly.Msg[\"LISTS_SET_INDEX_INPUT_TO\"] = \"as\";\nBlockly.Msg[\"LISTS_SET_INDEX_INSERT\"] = \"insert at\";\nBlockly.Msg[\"LISTS_SET_INDEX_SET\"] = \"set\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST\"] = \"Inserts the item at the start of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_FROM\"] = \"Inserts the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_LAST\"] = \"Append the item to the end of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM\"] = \"Inserts the item randomly in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_FIRST\"] = \"Sets the first item in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_FROM\"] = \"Sets the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_LAST\"] = \"Sets the last item in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_RANDOM\"] = \"Sets a random item in a list.\";\nBlockly.Msg[\"LISTS_SORT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#sorting-a-list\";\nBlockly.Msg[\"LISTS_SORT_ORDER_ASCENDING\"] = \"ascending\";\nBlockly.Msg[\"LISTS_SORT_ORDER_DESCENDING\"] = \"descending\";\nBlockly.Msg[\"LISTS_SORT_TITLE\"] = \"sort %1 %2 %3\";\nBlockly.Msg[\"LISTS_SORT_TOOLTIP\"] = \"Sort a copy of a list.\";\nBlockly.Msg[\"LISTS_SORT_TYPE_IGNORECASE\"] = \"alphabetic, ignore case\";\nBlockly.Msg[\"LISTS_SORT_TYPE_NUMERIC\"] = \"numeric\";\nBlockly.Msg[\"LISTS_SORT_TYPE_TEXT\"] = \"alphabetic\";\nBlockly.Msg[\"LISTS_SPLIT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists\";\nBlockly.Msg[\"LISTS_SPLIT_LIST_FROM_TEXT\"] = \"make list from text\";\nBlockly.Msg[\"LISTS_SPLIT_TEXT_FROM_LIST\"] = \"make text from list\";\nBlockly.Msg[\"LISTS_SPLIT_TOOLTIP_JOIN\"] = \"Join a list of texts into one text, separated by a delimiter.\";\nBlockly.Msg[\"LISTS_SPLIT_TOOLTIP_SPLIT\"] = \"Split text into a list of texts, breaking at each delimiter.\";\nBlockly.Msg[\"LISTS_SPLIT_WITH_DELIMITER\"] = \"with delimiter\";\nBlockly.Msg[\"LOGIC_BOOLEAN_FALSE\"] = \"false\";\nBlockly.Msg[\"LOGIC_BOOLEAN_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#values\";\nBlockly.Msg[\"LOGIC_BOOLEAN_TOOLTIP\"] = \"Returns either true or false.\";\nBlockly.Msg[\"LOGIC_BOOLEAN_TRUE\"] = \"true\";\nBlockly.Msg[\"LOGIC_COMPARE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Inequality_(mathematics)\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_EQ\"] = \"Return true if both inputs equal each other.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_GT\"] = \"Return true if the first input is greater than the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_GTE\"] = \"Return true if the first input is greater than or equal to the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_LT\"] = \"Return true if the first input is smaller than the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_LTE\"] = \"Return true if the first input is smaller than or equal to the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_NEQ\"] = \"Return true if both inputs are not equal to each other.\";\nBlockly.Msg[\"LOGIC_NEGATE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#not\";\nBlockly.Msg[\"LOGIC_NEGATE_TITLE\"] = \"not %1\";\nBlockly.Msg[\"LOGIC_NEGATE_TOOLTIP\"] = \"Returns true if the input is false. Returns false if the input is true.\";\nBlockly.Msg[\"LOGIC_NULL\"] = \"null\";\nBlockly.Msg[\"LOGIC_NULL_HELPURL\"] = \"https://en.wikipedia.org/wiki/Nullable_type\";\nBlockly.Msg[\"LOGIC_NULL_TOOLTIP\"] = \"Returns null.\";\nBlockly.Msg[\"LOGIC_OPERATION_AND\"] = \"and\";\nBlockly.Msg[\"LOGIC_OPERATION_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#logical-operations\";\nBlockly.Msg[\"LOGIC_OPERATION_OR\"] = \"or\";\nBlockly.Msg[\"LOGIC_OPERATION_TOOLTIP_AND\"] = \"Return true if both inputs are true.\";\nBlockly.Msg[\"LOGIC_OPERATION_TOOLTIP_OR\"] = \"Return true if at least one of the inputs is true.\";\nBlockly.Msg[\"LOGIC_TERNARY_CONDITION\"] = \"test\";\nBlockly.Msg[\"LOGIC_TERNARY_HELPURL\"] = \"https://en.wikipedia.org/wiki/%3F:\";\nBlockly.Msg[\"LOGIC_TERNARY_IF_FALSE\"] = \"if false\";\nBlockly.Msg[\"LOGIC_TERNARY_IF_TRUE\"] = \"if true\";\nBlockly.Msg[\"LOGIC_TERNARY_TOOLTIP\"] = \"Check the condition in 'test'. If the condition is true, returns the 'if true' value; otherwise returns the 'if false' value.\";\nBlockly.Msg[\"MAC_OS\"] = \"macOS\";\nBlockly.Msg[\"MATH_ADDITION_SYMBOL\"] = \"+\";\nBlockly.Msg[\"MATH_ARITHMETIC_HELPURL\"] = \"https://en.wikipedia.org/wiki/Arithmetic\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_ADD\"] = \"Return the sum of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_DIVIDE\"] = \"Return the quotient of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_MINUS\"] = \"Return the difference of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_MULTIPLY\"] = \"Return the product of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_POWER\"] = \"Return the first number raised to the power of the second number.\";\nBlockly.Msg[\"MATH_ATAN2_HELPURL\"] = \"https://en.wikipedia.org/wiki/Atan2\";\nBlockly.Msg[\"MATH_ATAN2_TITLE\"] = \"atan2 of X:%1 Y:%2\";\nBlockly.Msg[\"MATH_ATAN2_TOOLTIP\"] = \"Return the arctangent of point (X, Y) in degrees from -180 to 180.\";\nBlockly.Msg[\"MATH_CHANGE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter\";\nBlockly.Msg[\"MATH_CHANGE_TITLE\"] = \"change %1 by %2\";\nBlockly.Msg[\"MATH_CHANGE_TOOLTIP\"] = \"Add a number to variable '%1'.\";\nBlockly.Msg[\"MATH_CONSTANT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Mathematical_constant\";\nBlockly.Msg[\"MATH_CONSTANT_TOOLTIP\"] = \"Return one of the common constants: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (infinity).\";\nBlockly.Msg[\"MATH_CONSTRAIN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Clamping_(graphics)\";\nBlockly.Msg[\"MATH_CONSTRAIN_TITLE\"] = \"constrain %1 low %2 high %3\";\nBlockly.Msg[\"MATH_CONSTRAIN_TOOLTIP\"] = \"Constrain a number to be between the specified limits (inclusive).\";\nBlockly.Msg[\"MATH_DIVISION_SYMBOL\"] = \"÷\";\nBlockly.Msg[\"MATH_IS_DIVISIBLE_BY\"] = \"is divisible by\";\nBlockly.Msg[\"MATH_IS_EVEN\"] = \"is even\";\nBlockly.Msg[\"MATH_IS_NEGATIVE\"] = \"is negative\";\nBlockly.Msg[\"MATH_IS_ODD\"] = \"is odd\";\nBlockly.Msg[\"MATH_IS_POSITIVE\"] = \"is positive\";\nBlockly.Msg[\"MATH_IS_PRIME\"] = \"is prime\";\nBlockly.Msg[\"MATH_IS_TOOLTIP\"] = \"Check if a number is an even, odd, prime, whole, positive, negative, or if it is divisible by certain number. Returns true or false.\";\nBlockly.Msg[\"MATH_IS_WHOLE\"] = \"is whole\";\nBlockly.Msg[\"MATH_MODULO_HELPURL\"] = \"https://en.wikipedia.org/wiki/Modulo_operation\";\nBlockly.Msg[\"MATH_MODULO_TITLE\"] = \"remainder of %1 ÷ %2\";\nBlockly.Msg[\"MATH_MODULO_TOOLTIP\"] = \"Return the remainder from dividing the two numbers.\";\nBlockly.Msg[\"MATH_MULTIPLICATION_SYMBOL\"] = \"×\";\nBlockly.Msg[\"MATH_NUMBER_HELPURL\"] = \"https://en.wikipedia.org/wiki/Number\";\nBlockly.Msg[\"MATH_NUMBER_TOOLTIP\"] = \"A number.\";\nBlockly.Msg[\"MATH_ONLIST_HELPURL\"] = \"\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_AVERAGE\"] = \"average of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MAX\"] = \"max of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MEDIAN\"] = \"median of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MIN\"] = \"min of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MODE\"] = \"modes of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_RANDOM\"] = \"random item of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_STD_DEV\"] = \"standard deviation of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_SUM\"] = \"sum of list\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_AVERAGE\"] = \"Return the average (arithmetic mean) of the numeric values in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MAX\"] = \"Return the largest number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MEDIAN\"] = \"Return the median number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MIN\"] = \"Return the smallest number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MODE\"] = \"Return a list of the most common item(s) in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_RANDOM\"] = \"Return a random element from the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_STD_DEV\"] = \"Return the standard deviation of the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_SUM\"] = \"Return the sum of all the numbers in the list.\";\nBlockly.Msg[\"MATH_POWER_SYMBOL\"] = \"^\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Random_number_generation\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_TITLE_RANDOM\"] = \"random fraction\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_TOOLTIP\"] = \"Return a random fraction between 0.0 (inclusive) and 1.0 (exclusive).\";\nBlockly.Msg[\"MATH_RANDOM_INT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Random_number_generation\";\nBlockly.Msg[\"MATH_RANDOM_INT_TITLE\"] = \"random integer from %1 to %2\";\nBlockly.Msg[\"MATH_RANDOM_INT_TOOLTIP\"] = \"Return a random integer between the two specified limits, inclusive.\";\nBlockly.Msg[\"MATH_ROUND_HELPURL\"] = \"https://en.wikipedia.org/wiki/Rounding\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUND\"] = \"round\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUNDDOWN\"] = \"round down\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUNDUP\"] = \"round up\";\nBlockly.Msg[\"MATH_ROUND_TOOLTIP\"] = \"Round a number up or down.\";\nBlockly.Msg[\"MATH_SINGLE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Square_root\";\nBlockly.Msg[\"MATH_SINGLE_OP_ABSOLUTE\"] = \"absolute\";\nBlockly.Msg[\"MATH_SINGLE_OP_ROOT\"] = \"square root\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_ABS\"] = \"Return the absolute value of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_EXP\"] = \"Return e to the power of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_LN\"] = \"Return the natural logarithm of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_LOG10\"] = \"Return the base 10 logarithm of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_NEG\"] = \"Return the negation of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_POW10\"] = \"Return 10 to the power of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_ROOT\"] = \"Return the square root of a number.\";\nBlockly.Msg[\"MATH_SUBTRACTION_SYMBOL\"] = \"-\";\nBlockly.Msg[\"MATH_TRIG_ACOS\"] = \"acos\";\nBlockly.Msg[\"MATH_TRIG_ASIN\"] = \"asin\";\nBlockly.Msg[\"MATH_TRIG_ATAN\"] = \"atan\";\nBlockly.Msg[\"MATH_TRIG_COS\"] = \"cos\";\nBlockly.Msg[\"MATH_TRIG_HELPURL\"] = \"https://en.wikipedia.org/wiki/Trigonometric_functions\";\nBlockly.Msg[\"MATH_TRIG_SIN\"] = \"sin\";\nBlockly.Msg[\"MATH_TRIG_TAN\"] = \"tan\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ACOS\"] = \"Return the arccosine of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ASIN\"] = \"Return the arcsine of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ATAN\"] = \"Return the arctangent of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_COS\"] = \"Return the cosine of a degree (not radian).\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_SIN\"] = \"Return the sine of a degree (not radian).\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_TAN\"] = \"Return the tangent of a degree (not radian).\";\nBlockly.Msg[\"MOVE_BLOCK\"] = \"Move Block\";\nBlockly.Msg[\"NEW_COLOUR_VARIABLE\"] = \"Create colour variable...\";\nBlockly.Msg[\"NEW_NUMBER_VARIABLE\"] = \"Create number variable...\";\nBlockly.Msg[\"NEW_STRING_VARIABLE\"] = \"Create string variable...\";\nBlockly.Msg[\"NEW_VARIABLE\"] = \"Create variable...\";\nBlockly.Msg[\"NEW_VARIABLE_TITLE\"] = \"New variable name:\";\nBlockly.Msg[\"NEW_VARIABLE_TYPE_TITLE\"] = \"New variable type:\";\nBlockly.Msg[\"OPTION_KEY\"] = \"⌥ Option\";\nBlockly.Msg[\"ORDINAL_NUMBER_SUFFIX\"] = \"\";\nBlockly.Msg[\"PASTE_SHORTCUT\"] = \"Paste\";\nBlockly.Msg[\"PROCEDURES_ALLOW_STATEMENTS\"] = \"allow statements\";\nBlockly.Msg[\"PROCEDURES_BEFORE_PARAMS\"] = \"with:\";\nBlockly.Msg[\"PROCEDURES_CALLNORETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_CALLNORETURN_TOOLTIP\"] = \"Run the user-defined function '%1'.\";\nBlockly.Msg[\"PROCEDURES_CALLRETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_CALLRETURN_TOOLTIP\"] = \"Run the user-defined function '%1' and use its output.\";\nBlockly.Msg[\"PROCEDURES_CALL_BEFORE_PARAMS\"] = \"with:\";\nBlockly.Msg[\"PROCEDURES_CALL_DISABLED_DEF_WARNING\"] = \"Can't run the user-defined function '%1' because the definition block is disabled.\";\nBlockly.Msg[\"PROCEDURES_CREATE_DO\"] = \"Create '%1'\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_COMMENT\"] = \"Describe this function...\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_DO\"] = \"\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_PROCEDURE\"] = \"do something\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_TITLE\"] = \"to\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_TOOLTIP\"] = \"Creates a function with no output.\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_RETURN\"] = \"return\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_TOOLTIP\"] = \"Creates a function with an output.\";\nBlockly.Msg[\"PROCEDURES_DEF_DUPLICATE_WARNING\"] = \"Warning: This function has duplicate parameters.\";\nBlockly.Msg[\"PROCEDURES_HIGHLIGHT_DEF\"] = \"Highlight function definition\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_HELPURL\"] = \"https://c2.com/cgi/wiki?GuardClause\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_TOOLTIP\"] = \"If a value is true, then return a second value.\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_WARNING\"] = \"Warning: This block may be used only within a function definition.\";\nBlockly.Msg[\"PROCEDURES_MUTATORARG_TITLE\"] = \"input name:\";\nBlockly.Msg[\"PROCEDURES_MUTATORARG_TOOLTIP\"] = \"Add an input to the function.\";\nBlockly.Msg[\"PROCEDURES_MUTATORCONTAINER_TITLE\"] = \"inputs\";\nBlockly.Msg[\"PROCEDURES_MUTATORCONTAINER_TOOLTIP\"] = \"Add, remove, or reorder inputs to this function.\";\nBlockly.Msg[\"REDO\"] = \"Redo\";\nBlockly.Msg[\"REMOVE_COMMENT\"] = \"Remove Comment\";\nBlockly.Msg[\"RENAME_VARIABLE\"] = \"Rename variable...\";\nBlockly.Msg[\"RENAME_VARIABLE_TITLE\"] = \"Rename all '%1' variables to:\";\nBlockly.Msg[\"SHORTCUTS_CODE_NAVIGATION\"] = \"Code navigation\";\nBlockly.Msg[\"SHORTCUTS_EDITING\"] = \"Editing\";\nBlockly.Msg[\"SHORTCUTS_GENERAL\"] = \"General\";\nBlockly.Msg[\"TEXT_APPEND_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-modification\";\nBlockly.Msg[\"TEXT_APPEND_TITLE\"] = \"to %1 append text %2\";\nBlockly.Msg[\"TEXT_APPEND_TOOLTIP\"] = \"Append some text to variable '%1'.\";\nBlockly.Msg[\"TEXT_CHANGECASE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#adjusting-text-case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_LOWERCASE\"] = \"to lower case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_TITLECASE\"] = \"to Title Case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_UPPERCASE\"] = \"to UPPER CASE\";\nBlockly.Msg[\"TEXT_CHANGECASE_TOOLTIP\"] = \"Return a copy of the text in a different case.\";\nBlockly.Msg[\"TEXT_CHARAT_FIRST\"] = \"get first letter\";\nBlockly.Msg[\"TEXT_CHARAT_FROM_END\"] = \"get letter # from end\";\nBlockly.Msg[\"TEXT_CHARAT_FROM_START\"] = \"get letter #\";\nBlockly.Msg[\"TEXT_CHARAT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#extracting-text\";\nBlockly.Msg[\"TEXT_CHARAT_LAST\"] = \"get last letter\";\nBlockly.Msg[\"TEXT_CHARAT_RANDOM\"] = \"get random letter\";\nBlockly.Msg[\"TEXT_CHARAT_TAIL\"] = \"\";\nBlockly.Msg[\"TEXT_CHARAT_TITLE\"] = \"in text %1 %2\";\nBlockly.Msg[\"TEXT_CHARAT_TOOLTIP\"] = \"Returns the letter at the specified position.\";\nBlockly.Msg[\"TEXT_COUNT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#counting-substrings\";\nBlockly.Msg[\"TEXT_COUNT_MESSAGE0\"] = \"count %1 in %2\";\nBlockly.Msg[\"TEXT_COUNT_TOOLTIP\"] = \"Count how many times some text occurs within some other text.\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_ITEM_TOOLTIP\"] = \"Add an item to the text.\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_TITLE_JOIN\"] = \"join\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this text block.\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_FROM_END\"] = \"to letter # from end\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_FROM_START\"] = \"to letter #\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_LAST\"] = \"to last letter\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_INPUT_IN_TEXT\"] = \"in text\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FIRST\"] = \"get substring from first letter\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FROM_END\"] = \"get substring from letter # from end\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FROM_START\"] = \"get substring from letter #\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_TAIL\"] = \"\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_TOOLTIP\"] = \"Returns a specified portion of the text.\";\nBlockly.Msg[\"TEXT_INDEXOF_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#finding-text\";\nBlockly.Msg[\"TEXT_INDEXOF_OPERATOR_FIRST\"] = \"find first occurrence of text\";\nBlockly.Msg[\"TEXT_INDEXOF_OPERATOR_LAST\"] = \"find last occurrence of text\";\nBlockly.Msg[\"TEXT_INDEXOF_TITLE\"] = \"in text %1 %2 %3\";\nBlockly.Msg[\"TEXT_INDEXOF_TOOLTIP\"] = \"Returns the index of the first/last occurrence of the first text in the second text. Returns %1 if text is not found.\";\nBlockly.Msg[\"TEXT_ISEMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#checking-for-empty-text\";\nBlockly.Msg[\"TEXT_ISEMPTY_TITLE\"] = \"%1 is empty\";\nBlockly.Msg[\"TEXT_ISEMPTY_TOOLTIP\"] = \"Returns true if the provided text is empty.\";\nBlockly.Msg[\"TEXT_JOIN_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-creation\";\nBlockly.Msg[\"TEXT_JOIN_TITLE_CREATEWITH\"] = \"create text with\";\nBlockly.Msg[\"TEXT_JOIN_TOOLTIP\"] = \"Create a piece of text by joining together any number of items.\";\nBlockly.Msg[\"TEXT_LENGTH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-modification\";\nBlockly.Msg[\"TEXT_LENGTH_TITLE\"] = \"length of %1\";\nBlockly.Msg[\"TEXT_LENGTH_TOOLTIP\"] = \"Returns the number of letters (including spaces) in the provided text.\";\nBlockly.Msg[\"TEXT_PRINT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#printing-text\";\nBlockly.Msg[\"TEXT_PRINT_TITLE\"] = \"print %1\";\nBlockly.Msg[\"TEXT_PRINT_TOOLTIP\"] = \"Print the specified text, number or other value.\";\nBlockly.Msg[\"TEXT_PROMPT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#getting-input-from-the-user\";\nBlockly.Msg[\"TEXT_PROMPT_TOOLTIP_NUMBER\"] = \"Prompt for user for a number.\";\nBlockly.Msg[\"TEXT_PROMPT_TOOLTIP_TEXT\"] = \"Prompt for user for some text.\";\nBlockly.Msg[\"TEXT_PROMPT_TYPE_NUMBER\"] = \"prompt for number with message\";\nBlockly.Msg[\"TEXT_PROMPT_TYPE_TEXT\"] = \"prompt for text with message\";\nBlockly.Msg[\"TEXT_REPLACE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#replacing-substrings\";\nBlockly.Msg[\"TEXT_REPLACE_MESSAGE0\"] = \"replace %1 with %2 in %3\";\nBlockly.Msg[\"TEXT_REPLACE_TOOLTIP\"] = \"Replace all occurances of some text within some other text.\";\nBlockly.Msg[\"TEXT_REVERSE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#reversing-text\";\nBlockly.Msg[\"TEXT_REVERSE_MESSAGE0\"] = \"reverse %1\";\nBlockly.Msg[\"TEXT_REVERSE_TOOLTIP\"] = \"Reverses the order of the characters in the text.\";\nBlockly.Msg[\"TEXT_TEXT_HELPURL\"] = \"https://en.wikipedia.org/wiki/String_(computer_science)\";\nBlockly.Msg[\"TEXT_TEXT_TOOLTIP\"] = \"A letter, word, or line of text.\";\nBlockly.Msg[\"TEXT_TRIM_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#trimming-removing-spaces\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_BOTH\"] = \"trim spaces from both sides of\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_LEFT\"] = \"trim spaces from left side of\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_RIGHT\"] = \"trim spaces from right side of\";\nBlockly.Msg[\"TEXT_TRIM_TOOLTIP\"] = \"Return a copy of the text with spaces removed from one or both ends.\";\nBlockly.Msg[\"TODAY\"] = \"Today\";\nBlockly.Msg[\"UNDO\"] = \"Undo\";\nBlockly.Msg[\"UNKNOWN\"] = \"Unknown\";\nBlockly.Msg[\"UNNAMED_KEY\"] = \"unnamed\";\nBlockly.Msg[\"VARIABLES_DEFAULT_NAME\"] = \"item\";\nBlockly.Msg[\"VARIABLES_GET_CREATE_SET\"] = \"Create 'set %1'\";\nBlockly.Msg[\"VARIABLES_GET_HELPURL\"] = \"https://github.com/google/blockly/wiki/Variables#get\";\nBlockly.Msg[\"VARIABLES_GET_TOOLTIP\"] = \"Returns the value of this variable.\";\nBlockly.Msg[\"VARIABLES_SET\"] = \"set %1 to %2\";\nBlockly.Msg[\"VARIABLES_SET_CREATE_GET\"] = \"Create 'get %1'\";\nBlockly.Msg[\"VARIABLES_SET_HELPURL\"] = \"https://github.com/google/blockly/wiki/Variables#set\";\nBlockly.Msg[\"VARIABLES_SET_TOOLTIP\"] = \"Sets this variable to be equal to the input.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS\"] = \"A variable named '%1' already exists.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE\"] = \"A variable named '%1' already exists for another type: '%2'.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS_FOR_A_PARAMETER\"] = \"A variable named '%1' already exists as a parameter in the procedure '%2'.\";\nBlockly.Msg[\"WINDOWS\"] = \"Windows\";\nBlockly.Msg[\"WORKSPACE_ARIA_LABEL\"] = \"Blockly Workspace\";\nBlockly.Msg[\"WORKSPACE_COMMENT_DEFAULT_TEXT\"] = \"Say something...\";\nBlockly.Msg[\"CONTROLS_FOREACH_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_FOR_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_IF_ELSEIF_TITLE_ELSEIF\"] = Blockly.Msg[\"CONTROLS_IF_MSG_ELSEIF\"];\nBlockly.Msg[\"CONTROLS_IF_ELSE_TITLE_ELSE\"] = Blockly.Msg[\"CONTROLS_IF_MSG_ELSE\"];\nBlockly.Msg[\"CONTROLS_IF_IF_TITLE_IF\"] = Blockly.Msg[\"CONTROLS_IF_MSG_IF\"];\nBlockly.Msg[\"CONTROLS_IF_MSG_THEN\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"LISTS_CREATE_WITH_ITEM_TITLE\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"LISTS_GET_INDEX_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_GET_SUBLIST_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_INDEX_OF_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_SET_INDEX_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"MATH_CHANGE_TITLE_ITEM\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_COMMENT\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_COMMENT\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_DO\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_DO\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_PROCEDURE\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_PROCEDURE\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_TITLE\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_TITLE\"];\nBlockly.Msg[\"TEXT_APPEND_VARIABLE\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"TEXT_CREATE_JOIN_ITEM_TITLE_ITEM\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\n\nBlockly.Msg[\"COLOUR_HUE\"] = \"20\";\nBlockly.Msg[\"LISTS_HUE\"] = \"260\";\nBlockly.Msg[\"LOGIC_HUE\"] = \"210\";\nBlockly.Msg[\"LOOPS_HUE\"] = \"120\";\nBlockly.Msg[\"MATH_HUE\"] = \"230\";\nBlockly.Msg[\"PROCEDURES_HUE\"] = \"290\";\nBlockly.Msg[\"TEXTS_HUE\"] = \"160\";\nBlockly.Msg[\"VARIABLES_DYNAMIC_HUE\"] = \"310\";\nBlockly.Msg[\"VARIABLES_HUE\"] = \"330\";\nreturn Blockly.Msg;\n}));\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/msg/en.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/python.mjs": +/*!*****************************************!*\ + !*** ./node_modules/blockly/python.mjs ***! + \*****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Order: () => (/* binding */ Order),\n/* harmony export */ PythonGenerator: () => (/* binding */ PythonGenerator),\n/* harmony export */ pythonGenerator: () => (/* binding */ pythonGenerator)\n/* harmony export */ });\n/* harmony import */ var _python_compressed_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./python_compressed.js */ \"./node_modules/blockly/python_compressed.js\");\n\nconst {\n Order,\n PythonGenerator,\n pythonGenerator,\n} = _python_compressed_js__WEBPACK_IMPORTED_MODULE_0__;\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/python.mjs?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/python_compressed.js": +/*!***************************************************!*\ + !*** ./node_modules/blockly/python_compressed.js ***! + \***************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Do not edit this file; automatically generated.\n\n/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ./blockly_compressed.js */ \"./node_modules/blockly/blockly_compressed.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function(__parent__) {\nvar $=__parent__.__namespace__;\nvar lists_create_empty$$module$build$src$generators$python$lists=function(a,b){return[\"[]\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},lists_create_with$$module$build$src$generators$python$lists=function(a,b){const c=Array(a.itemCount_);for(let d=0;d\",GTE:\">=\"}[a.getFieldValue(\"OP\")],d=Order$$module$build$src$generators$python$python_generator.RELATIONAL,e=b.valueToCode(a,\"A\",d)||\"0\";a=b.valueToCode(a,\"B\",d)||\"0\";return[e+\" \"+c+\" \"+a,d]},logic_operation$$module$build$src$generators$python$logic=function(a,\nb){const c=a.getFieldValue(\"OP\")===\"AND\"?\"and\":\"or\",d=c===\"and\"?Order$$module$build$src$generators$python$python_generator.LOGICAL_AND:Order$$module$build$src$generators$python$python_generator.LOGICAL_OR;let e=b.valueToCode(a,\"A\",d);a=b.valueToCode(a,\"B\",d);e||a?(b=c===\"and\"?\"True\":\"False\",e||(e=b),a||(a=b)):a=e=\"False\";return[e+\" \"+c+\" \"+a,d]},logic_negate$$module$build$src$generators$python$logic=function(a,b){return[\"not \"+(b.valueToCode(a,\"BOOL\",Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT)||\n\"True\"),Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT]},logic_boolean$$module$build$src$generators$python$logic=function(a,b){return[a.getFieldValue(\"BOOL\")===\"TRUE\"?\"True\":\"False\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},logic_null$$module$build$src$generators$python$logic=function(a,b){return[\"None\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},logic_ternary$$module$build$src$generators$python$logic=function(a,b){const c=\nb.valueToCode(a,\"IF\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"False\",d=b.valueToCode(a,\"THEN\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"None\";a=b.valueToCode(a,\"ELSE\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"None\";return[d+\" if \"+c+\" else \"+a,Order$$module$build$src$generators$python$python_generator.CONDITIONAL]},controls_repeat_ext$$module$build$src$generators$python$loops=function(a,b){let c;c=a.getField(\"TIMES\")?\nString(parseInt(a.getFieldValue(\"TIMES\"),10)):b.valueToCode(a,\"TIMES\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";c=$.isNumber$$module$build$src$core$utils$string(c)?parseInt(c,10):\"int(\"+c+\")\";let d=b.statementToCode(a,\"DO\");d=b.addLoopTrap(d,a)||b.PASS;return\"for \"+b.nameDB_.getDistinctName(\"count\",$.NameType$$module$build$src$core$names.VARIABLE)+\" in range(\"+c+\"):\\n\"+d},controls_whileUntil$$module$build$src$generators$python$loops=function(a,b){const c=a.getFieldValue(\"MODE\")===\n\"UNTIL\";let d=b.valueToCode(a,\"BOOL\",c?Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT:Order$$module$build$src$generators$python$python_generator.NONE)||\"False\",e=b.statementToCode(a,\"DO\");e=b.addLoopTrap(e,a)||b.PASS;c&&(d=\"not \"+d);return\"while \"+d+\":\\n\"+e},controls_for$$module$build$src$generators$python$loops=function(a,b){const c=b.getVariableName(a.getFieldValue(\"VAR\"));var d=b.valueToCode(a,\"FROM\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",\ne=b.valueToCode(a,\"TO\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",f=b.valueToCode(a,\"BY\",Order$$module$build$src$generators$python$python_generator.NONE)||\"1\";let g=b.statementToCode(a,\"DO\");g=b.addLoopTrap(g,a)||b.PASS;let h=\"\";a=function(){return b.provideFunction_(\"upRange\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):\n while start <= stop:\n yield start\n start += abs(step)\n`)};const k=function(){return b.provideFunction_(\"downRange\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):\n while start >= stop:\n yield start\n start -= abs(step)\n`)};if($.isNumber$$module$build$src$core$utils$string(d)&&$.isNumber$$module$build$src$core$utils$string(e)&&$.isNumber$$module$build$src$core$utils$string(f))d=Number(d),e=Number(e),f=Math.abs(Number(f)),d%1===0&&e%1===0&&f%1===0?(d<=e?(e++,a=d===0&&f===1?e:d+\", \"+e,f!==1&&(a+=\", \"+f)):(e--,a=d+\", \"+e+\", -\"+f),a=\"range(\"+a+\")\"):(a=d 0\",Order$$module$build$src$generators$python$python_generator.RELATIONAL,Order$$module$build$src$generators$python$python_generator.RELATIONAL],NEGATIVE:[\" < 0\",\nOrder$$module$build$src$generators$python$python_generator.RELATIONAL,Order$$module$build$src$generators$python$python_generator.RELATIONAL],DIVISIBLE_BY:[null,Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE,Order$$module$build$src$generators$python$python_generator.RELATIONAL],PRIME:[null,Order$$module$build$src$generators$python$python_generator.NONE,Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]};const d=a.getFieldValue(\"PROPERTY\"),[e,f,g]=c[d];\nc=b.valueToCode(a,\"NUMBER_TO_CHECK\",f)||\"0\";if(d===\"PRIME\")b.definitions_.import_math=\"import math\",b.definitions_.from_numbers_import_Number=\"from numbers import Number\",a=b.provideFunction_(\"math_isPrime\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(n):\n # https://en.wikipedia.org/wiki/Primality_test#Naive_methods\n # If n is not a number but a string, try parsing it.\n if not isinstance(n, Number):\n try:\n n = float(n)\n except:\n return False\n if n == 2 or n == 3:\n return True\n # False if n is negative, is 1, or not whole, or if n is divisible by 2 or 3.\n if n <= 1 or n % 1 != 0 or n % 2 == 0 or n % 3 == 0:\n return False\n # Check all the numbers of form 6k +/- 1, up to sqrt(n).\n for x in range(6, int(math.sqrt(n)) + 2, 6):\n if n % (x - 1) == 0 or n % (x + 1) == 0:\n return False\n return True\n`)+\"(\"+c+\")\";else if(d===\"DIVISIBLE_BY\"){a=b.valueToCode(a,\"DIVISOR\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\"0\";if(a===\"0\")return[\"False\",Order$$module$build$src$generators$python$python_generator.ATOMIC];a=c+\" % \"+a+\" == 0\"}else a=c+e;return[a,g]},math_change$$module$build$src$generators$python$math=function(a,b){b.definitions_.from_numbers_import_Number=\"from numbers import Number\";const c=b.valueToCode(a,\"DELTA\",Order$$module$build$src$generators$python$python_generator.ADDITIVE)||\n\"0\";a=b.getVariableName(a.getFieldValue(\"VAR\"));return a+\" = (\"+a+\" if isinstance(\"+a+\", Number) else 0) + \"+c+\"\\n\"},math_on_list$$module$build$src$generators$python$math=function(a,b){const c=a.getFieldValue(\"OP\");a=b.valueToCode(a,\"LIST\",Order$$module$build$src$generators$python$python_generator.NONE)||\"[]\";switch(c){case \"SUM\":b=\"sum(\"+a+\")\";break;case \"MIN\":b=\"min(\"+a+\")\";break;case \"MAX\":b=\"max(\"+a+\")\";break;case \"AVERAGE\":b.definitions_.from_numbers_import_Number=\"from numbers import Number\";\nb=b.provideFunction_(\"math_mean\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(myList):\n localList = [e for e in myList if isinstance(e, Number)]\n if not localList: return\n return float(sum(localList)) / len(localList)\n`)+\"(\"+a+\")\";break;case \"MEDIAN\":b.definitions_.from_numbers_import_Number=\"from numbers import Number\";b=b.provideFunction_(\"math_median\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(myList):\n localList = sorted([e for e in myList if isinstance(e, Number)])\n if not localList: return\n if len(localList) % 2 == 0:\n return (localList[len(localList) // 2 - 1] + localList[len(localList) // 2]) / 2.0\n else:\n return localList[(len(localList) - 1) // 2]\n`)+\"(\"+a+\")\";break;case \"MODE\":b=b.provideFunction_(\"math_modes\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(some_list):\n modes = []\n # Using a lists of [item, count] to keep count rather than dict\n # to avoid \"unhashable\" errors when the counted item is itself a list or dict.\n counts = []\n maxCount = 1\n for item in some_list:\n found = False\n for count in counts:\n if count[0] == item:\n count[1] += 1\n maxCount = max(maxCount, count[1])\n found = True\n if not found:\n counts.append([item, 1])\n for counted_item, item_count in counts:\n if item_count == maxCount:\n modes.append(counted_item)\n return modes\n`)+\"(\"+a+\")\";break;case \"STD_DEV\":b.definitions_.import_math=\"import math\";b=b.provideFunction_(\"math_standard_deviation\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(numbers):\n n = len(numbers)\n if n == 0: return\n mean = float(sum(numbers)) / n\n variance = sum((x - mean) ** 2 for x in numbers) / n\n return math.sqrt(variance)\n`)+\"(\"+a+\")\";break;case \"RANDOM\":b.definitions_.import_random=\"import random\";b=\"random.choice(\"+a+\")\";break;default:throw Error(\"Unknown operator: \"+c);}return[b,Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_modulo$$module$build$src$generators$python$math=function(a,b){const c=b.valueToCode(a,\"DIVIDEND\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\"0\";a=b.valueToCode(a,\"DIVISOR\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\n\"0\";return[c+\" % \"+a,Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE]},math_constrain$$module$build$src$generators$python$math=function(a,b){const c=b.valueToCode(a,\"VALUE\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",d=b.valueToCode(a,\"LOW\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";a=b.valueToCode(a,\"HIGH\",Order$$module$build$src$generators$python$python_generator.NONE)||\"float('inf')\";return[\"min(max(\"+c+\", \"+d+\"), \"+\na+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_random_int$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_random=\"import random\";const c=b.valueToCode(a,\"FROM\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";a=b.valueToCode(a,\"TO\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";return[\"random.randint(\"+c+\", \"+a+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},\nmath_random_float$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_random=\"import random\";return[\"random.random()\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_atan2$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_math=\"import math\";const c=b.valueToCode(a,\"X\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";return[\"math.atan2(\"+(b.valueToCode(a,\"Y\",Order$$module$build$src$generators$python$python_generator.NONE)||\n\"0\")+\", \"+c+\") / math.pi * 180\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE]},procedures_defreturn$$module$build$src$generators$python$procedures=function(a,b){var c=[],d=a.workspace,e=$.allUsedVarModels$$module$build$src$core$variables(d)||[];for(var f of e)e=f.getName(),a.getVars().includes(e)||c.push(b.getVariableName(e));d=$.allDeveloperVariables$$module$build$src$core$variables(d);for(f=0;f0?\"int(\"+a+\" + \"+c+\")\":c<0?\"int(\"+a+\" - \"+-c+\")\":\"int(\"+a+\")\",d&&(a=\"-\"+a));return a}},module$build$src$generators$python$python_generator={};module$build$src$generators$python$python_generator.Order=Order$$module$build$src$generators$python$python_generator;module$build$src$generators$python$python_generator.PythonGenerator=PythonGenerator$$module$build$src$generators$python$python_generator;var module$build$src$generators$python$lists={};module$build$src$generators$python$lists.lists_create_empty=lists_create_empty$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_create_with=lists_create_with$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_getIndex=lists_getIndex$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_getSublist=lists_getSublist$$module$build$src$generators$python$lists;\nmodule$build$src$generators$python$lists.lists_indexOf=lists_indexOf$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_isEmpty=lists_isEmpty$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_length=lists_length$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_repeat=lists_repeat$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_reverse=lists_reverse$$module$build$src$generators$python$lists;\nmodule$build$src$generators$python$lists.lists_setIndex=lists_setIndex$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_sort=lists_sort$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_split=lists_split$$module$build$src$generators$python$lists;var controls_ifelse$$module$build$src$generators$python$logic=controls_if$$module$build$src$generators$python$logic,module$build$src$generators$python$logic={};module$build$src$generators$python$logic.controls_if=controls_if$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.controls_ifelse=controls_if$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_boolean=logic_boolean$$module$build$src$generators$python$logic;\nmodule$build$src$generators$python$logic.logic_compare=logic_compare$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_negate=logic_negate$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_null=logic_null$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_operation=logic_operation$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_ternary=logic_ternary$$module$build$src$generators$python$logic;var controls_repeat$$module$build$src$generators$python$loops=controls_repeat_ext$$module$build$src$generators$python$loops,module$build$src$generators$python$loops={};module$build$src$generators$python$loops.controls_flow_statements=controls_flow_statements$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_for=controls_for$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_forEach=controls_forEach$$module$build$src$generators$python$loops;\nmodule$build$src$generators$python$loops.controls_repeat=controls_repeat_ext$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_repeat_ext=controls_repeat_ext$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_whileUntil=controls_whileUntil$$module$build$src$generators$python$loops;var math_round$$module$build$src$generators$python$math=math_single$$module$build$src$generators$python$math,math_trig$$module$build$src$generators$python$math=math_single$$module$build$src$generators$python$math,module$build$src$generators$python$math={};module$build$src$generators$python$math.math_arithmetic=math_arithmetic$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_atan2=math_atan2$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_change=math_change$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_constant=math_constant$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_constrain=math_constrain$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_modulo=math_modulo$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_number=math_number$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_number_property=math_number_property$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_on_list=math_on_list$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_random_float=math_random_float$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_random_int=math_random_int$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_round=math_single$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_single=math_single$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_trig=math_single$$module$build$src$generators$python$math;var procedures_defnoreturn$$module$build$src$generators$python$procedures=procedures_defreturn$$module$build$src$generators$python$procedures,module$build$src$generators$python$procedures={};module$build$src$generators$python$procedures.procedures_callnoreturn=procedures_callnoreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_callreturn=procedures_callreturn$$module$build$src$generators$python$procedures;\nmodule$build$src$generators$python$procedures.procedures_defnoreturn=procedures_defreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_defreturn=procedures_defreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_ifreturn=procedures_ifreturn$$module$build$src$generators$python$procedures;var strRegExp$$module$build$src$generators$python$text=/^\\s*'([^']|\\\\')*'\\s*$/,forceString$$module$build$src$generators$python$text=function(a){return strRegExp$$module$build$src$generators$python$text.test(a)?[a,Order$$module$build$src$generators$python$python_generator.ATOMIC]:[\"str(\"+a+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},text_prompt$$module$build$src$generators$python$text=text_prompt_ext$$module$build$src$generators$python$text,module$build$src$generators$python$text=\n{};module$build$src$generators$python$text.text=text$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_append=text_append$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_changeCase=text_changeCase$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_charAt=text_charAt$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_count=text_count$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_getSubstring=text_getSubstring$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_indexOf=text_indexOf$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_isEmpty=text_isEmpty$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_join=text_join$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_length=text_length$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_print=text_print$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_prompt=text_prompt_ext$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_prompt_ext=text_prompt_ext$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_replace=text_replace$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_reverse=text_reverse$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_trim=text_trim$$module$build$src$generators$python$text;var module$build$src$generators$python$variables={};module$build$src$generators$python$variables.variables_get=variables_get$$module$build$src$generators$python$variables;module$build$src$generators$python$variables.variables_set=variables_set$$module$build$src$generators$python$variables;var module$build$src$generators$python$variables_dynamic={};module$build$src$generators$python$variables_dynamic.variables_get_dynamic=variables_get$$module$build$src$generators$python$variables;module$build$src$generators$python$variables_dynamic.variables_set_dynamic=variables_set$$module$build$src$generators$python$variables;var pythonGenerator$$module$build$src$generators$python=new PythonGenerator$$module$build$src$generators$python$python_generator;pythonGenerator$$module$build$src$generators$python.addReservedWords(\"math,random,Number\");\nvar generators$$module$build$src$generators$python=Object.assign({},module$build$src$generators$python$lists,module$build$src$generators$python$logic,module$build$src$generators$python$loops,module$build$src$generators$python$math,module$build$src$generators$python$procedures,module$build$src$generators$python$text,module$build$src$generators$python$variables,module$build$src$generators$python$variables_dynamic);\nfor(const a in generators$$module$build$src$generators$python)pythonGenerator$$module$build$src$generators$python.forBlock[a]=generators$$module$build$src$generators$python[a];var module$build$src$generators$python={};module$build$src$generators$python.Order=Order$$module$build$src$generators$python$python_generator;module$build$src$generators$python.PythonGenerator=PythonGenerator$$module$build$src$generators$python$python_generator;module$build$src$generators$python.pythonGenerator=pythonGenerator$$module$build$src$generators$python;\nmodule$build$src$generators$python.__namespace__=$;\nreturn module$build$src$generators$python;\n}));\n\n\n//# sourceMappingURL=python_compressed.js.map\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/python_compressed.js?\n}"); + +/***/ }), + +/***/ "./src/index.js": +/*!**********************!*\ + !*** ./src/index.js ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var blockly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly */ \"./node_modules/blockly/index.mjs\");\n/* harmony import */ var blockly_python__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! blockly/python */ \"./node_modules/blockly/python.mjs\");\n/**\n * Blockly OT-2 Integration Application\n * \n * This application demonstrates real Blockly installation with custom blocks\n * for OT-2 liquid handler functions from OT2mqtt.py\n */\n\n\n\n\n// Define custom block: OT-2 Home\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_home'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('🏠 OT-2: Home Robot');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Home the OT-2 robot to its initial position');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_home'] = function(block, generator) {\n const code = 'protocol.home()\\n';\n return code;\n};\n\n// Define custom block: OT-2 Mix Color\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_mix_color'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('🎨 OT-2: Mix Color');\n this.appendValueInput('R')\n .setCheck('Number')\n .appendField('Red (µL)');\n this.appendValueInput('Y')\n .setCheck('Number')\n .appendField('Yellow (µL)');\n this.appendValueInput('B')\n .setCheck('Number')\n .appendField('Blue (µL)');\n this.appendValueInput('WELL')\n .setCheck('String')\n .appendField('Well');\n this.appendValueInput('SESSION_ID')\n .setCheck('String')\n .appendField('Session ID');\n this.appendValueInput('EXPERIMENT_ID')\n .setCheck('String')\n .appendField('Experiment ID');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Mix RGB colors in a well using the OT-2 pipette');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_mix_color'] = function(block, generator) {\n const value_r = generator.valueToCode(block, 'R', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_y = generator.valueToCode(block, 'Y', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_b = generator.valueToCode(block, 'B', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_well = generator.valueToCode(block, 'WELL', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"A1\"';\n const value_session_id = generator.valueToCode(block, 'SESSION_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"session_001\"';\n const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"exp_001\"';\n \n const code = `payload = {\n \"command\": {\n \"R\": ${value_r},\n \"Y\": ${value_y},\n \"B\": ${value_b},\n \"well\": ${value_well}\n },\n \"session_id\": ${value_session_id},\n \"experiment_id\": ${value_experiment_id}\n}\nmix_color(payload)\n`;\n return code;\n};\n\n// Define custom block: OT-2 Move Sensor Back\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_move_sensor_back'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('↩️ OT-2: Move Sensor Back');\n this.appendValueInput('SENSOR_STATUS')\n .setCheck('String')\n .appendField('Sensor Status');\n this.appendValueInput('SESSION_ID')\n .setCheck('String')\n .appendField('Session ID');\n this.appendValueInput('EXPERIMENT_ID')\n .setCheck('String')\n .appendField('Experiment ID');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Move the sensor back to charging position');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_move_sensor_back'] = function(block, generator) {\n const value_sensor_status = generator.valueToCode(block, 'SENSOR_STATUS', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"complete\"';\n const value_session_id = generator.valueToCode(block, 'SESSION_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"session_001\"';\n const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"exp_001\"';\n \n const code = `payload = {\n \"command\": {\n \"sensor_status\": ${value_sensor_status}\n },\n \"session_id\": ${value_session_id},\n \"experiment_id\": ${value_experiment_id}\n}\nmove_sensor_back(payload)\n`;\n return code;\n};\n\n// Create toolbox\nconst toolbox = {\n \"kind\": \"categoryToolbox\",\n \"contents\": [\n {\n \"kind\": \"category\",\n \"name\": \"OT-2 Commands\",\n \"colour\": \"#5C81A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"ot2_home\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"ot2_mix_color\",\n \"inputs\": {\n \"R\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 100\n }\n }\n },\n \"Y\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 50\n }\n }\n },\n \"B\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 75\n }\n }\n },\n \"WELL\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"A1\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n },\n {\n \"kind\": \"block\",\n \"type\": \"ot2_move_sensor_back\",\n \"inputs\": {\n \"SENSOR_STATUS\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"complete\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Logic\",\n \"colour\": \"#5C68A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"controls_if\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"logic_compare\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Loops\",\n \"colour\": \"#5CA65C\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"controls_repeat_ext\",\n \"inputs\": {\n \"TIMES\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 3\n }\n }\n }\n }\n },\n {\n \"kind\": \"block\",\n \"type\": \"controls_whileUntil\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Math\",\n \"colour\": \"#5C68A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"math_number\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"math_arithmetic\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Text\",\n \"colour\": \"#5CA68A\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"text\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"text_print\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Variables\",\n \"colour\": \"#A65C81\",\n \"custom\": \"VARIABLE\"\n }\n ]\n};\n\n// Initialize Blockly workspace\nconst workspace = blockly__WEBPACK_IMPORTED_MODULE_0__.inject('blocklyDiv', {\n toolbox: toolbox,\n grid: {\n spacing: 20,\n length: 3,\n colour: '#ccc',\n snap: true\n },\n zoom: {\n controls: true,\n wheel: true,\n startScale: 1.0,\n maxScale: 3,\n minScale: 0.3,\n scaleSpeed: 1.2\n },\n trashcan: true\n});\n\n// Load initial workspace\nconst startBlocks = {\n \"blocks\": {\n \"languageVersion\": 0,\n \"blocks\": [\n {\n \"type\": \"ot2_home\",\n \"id\": \"start_home\",\n \"x\": 50,\n \"y\": 50\n },\n {\n \"type\": \"controls_repeat_ext\",\n \"id\": \"repeat_loop\",\n \"x\": 50,\n \"y\": 120,\n \"inputs\": {\n \"TIMES\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"id\": \"repeat_times\",\n \"fields\": {\n \"NUM\": 3\n }\n }\n },\n \"DO\": {\n \"block\": {\n \"type\": \"ot2_mix_color\",\n \"id\": \"mix_block\",\n \"inputs\": {\n \"R\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 100\n }\n }\n },\n \"Y\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 50\n }\n }\n },\n \"B\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 75\n }\n }\n },\n \"WELL\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"A1\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n },\n \"next\": {\n \"block\": {\n \"type\": \"ot2_move_sensor_back\",\n \"id\": \"sensor_block\",\n \"inputs\": {\n \"SENSOR_STATUS\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"complete\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n ]\n }\n};\n\nblockly__WEBPACK_IMPORTED_MODULE_0__.serialization.workspaces.load(startBlocks, workspace);\n\n// Generate code function\nfunction generateCode() {\n const code = blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.workspaceToCode(workspace);\n const fullCode = `# Generated from Blockly visual programming\n# This code uses functions from OT2mqtt.py\n\nfrom OT2mqtt import mix_color, move_sensor_back, protocol\n\n# Main workflow\n${code}`;\n \n document.getElementById('codeOutput').textContent = fullCode;\n}\n\n// Update code on workspace change\nworkspace.addChangeListener(generateCode);\n\n// Generate initial code\ngenerateCode();\n\n// Expose generate function to button\nwindow.generateCode = generateCode;\n\n\n//# sourceURL=webpack://blockly_app/./src/index.js?\n}"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./src/index.js"); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/scripts/blockly_app/dist/index.html b/scripts/blockly_app/dist/index.html new file mode 100644 index 00000000..a6ca67b1 --- /dev/null +++ b/scripts/blockly_app/dist/index.html @@ -0,0 +1,98 @@ + + + + + Blockly OT-2 Integration - Real Installation + + + +

Blockly OT-2 Custom Functions - Real Installation

+
+ ✅ This is a real Blockly installation using npm package (blockly v11.1.1) +
+
+
+
+

Generated Python Code

+
+ Real-time code generation from Blockly workspace. Drag blocks from the toolbox to build workflows. +
+ +
# Python code will appear here...
+
+
+ + + diff --git a/scripts/blockly_app/package.json b/scripts/blockly_app/package.json new file mode 100644 index 00000000..0ded3990 --- /dev/null +++ b/scripts/blockly_app/package.json @@ -0,0 +1,22 @@ +{ + "name": "blockly_app", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "build": "webpack", + "start": "webpack serve", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "blockly": "^12.3.1" + }, + "devDependencies": { + "webpack": "^5.102.1", + "webpack-cli": "^6.0.1", + "webpack-dev-server": "^5.2.2" + } +} diff --git a/scripts/blockly_app/src/index.js b/scripts/blockly_app/src/index.js new file mode 100644 index 00000000..7adb174e --- /dev/null +++ b/scripts/blockly_app/src/index.js @@ -0,0 +1,463 @@ +/** + * Blockly OT-2 Integration Application + * + * This application demonstrates real Blockly installation with custom blocks + * for OT-2 liquid handler functions from OT2mqtt.py + */ + +import * as Blockly from 'blockly'; +import {pythonGenerator} from 'blockly/python'; + +// Define custom block: OT-2 Home +Blockly.Blocks['ot2_home'] = { + init: function() { + this.appendDummyInput() + .appendField('🏠 OT-2: Home Robot'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Home the OT-2 robot to its initial position'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_home'] = function(block, generator) { + const code = 'protocol.home()\n'; + return code; +}; + +// Define custom block: OT-2 Mix Color +Blockly.Blocks['ot2_mix_color'] = { + init: function() { + this.appendDummyInput() + .appendField('🎨 OT-2: Mix Color'); + this.appendValueInput('R') + .setCheck('Number') + .appendField('Red (µL)'); + this.appendValueInput('Y') + .setCheck('Number') + .appendField('Yellow (µL)'); + this.appendValueInput('B') + .setCheck('Number') + .appendField('Blue (µL)'); + this.appendValueInput('WELL') + .setCheck('String') + .appendField('Well'); + this.appendValueInput('SESSION_ID') + .setCheck('String') + .appendField('Session ID'); + this.appendValueInput('EXPERIMENT_ID') + .setCheck('String') + .appendField('Experiment ID'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Mix RGB colors in a well using the OT-2 pipette'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_mix_color'] = function(block, generator) { + const value_r = generator.valueToCode(block, 'R', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_y = generator.valueToCode(block, 'Y', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_b = generator.valueToCode(block, 'B', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_well = generator.valueToCode(block, 'WELL', pythonGenerator.ORDER_ATOMIC) || '"A1"'; + const value_session_id = generator.valueToCode(block, 'SESSION_ID', pythonGenerator.ORDER_ATOMIC) || '"session_001"'; + const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', pythonGenerator.ORDER_ATOMIC) || '"exp_001"'; + + const code = `payload = { + "command": { + "R": ${value_r}, + "Y": ${value_y}, + "B": ${value_b}, + "well": ${value_well} + }, + "session_id": ${value_session_id}, + "experiment_id": ${value_experiment_id} +} +mix_color(payload) +`; + return code; +}; + +// Define custom block: OT-2 Move Sensor Back +Blockly.Blocks['ot2_move_sensor_back'] = { + init: function() { + this.appendDummyInput() + .appendField('↩️ OT-2: Move Sensor Back'); + this.appendValueInput('SENSOR_STATUS') + .setCheck('String') + .appendField('Sensor Status'); + this.appendValueInput('SESSION_ID') + .setCheck('String') + .appendField('Session ID'); + this.appendValueInput('EXPERIMENT_ID') + .setCheck('String') + .appendField('Experiment ID'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Move the sensor back to charging position'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_move_sensor_back'] = function(block, generator) { + const value_sensor_status = generator.valueToCode(block, 'SENSOR_STATUS', pythonGenerator.ORDER_ATOMIC) || '"complete"'; + const value_session_id = generator.valueToCode(block, 'SESSION_ID', pythonGenerator.ORDER_ATOMIC) || '"session_001"'; + const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', pythonGenerator.ORDER_ATOMIC) || '"exp_001"'; + + const code = `payload = { + "command": { + "sensor_status": ${value_sensor_status} + }, + "session_id": ${value_session_id}, + "experiment_id": ${value_experiment_id} +} +move_sensor_back(payload) +`; + return code; +}; + +// Create toolbox +const toolbox = { + "kind": "categoryToolbox", + "contents": [ + { + "kind": "category", + "name": "OT-2 Commands", + "colour": "#5C81A6", + "contents": [ + { + "kind": "block", + "type": "ot2_home" + }, + { + "kind": "block", + "type": "ot2_mix_color", + "inputs": { + "R": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 100 + } + } + }, + "Y": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 50 + } + } + }, + "B": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 75 + } + } + }, + "WELL": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "A1" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + }, + { + "kind": "block", + "type": "ot2_move_sensor_back", + "inputs": { + "SENSOR_STATUS": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "complete" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + } + ] + }, + { + "kind": "category", + "name": "Logic", + "colour": "#5C68A6", + "contents": [ + { + "kind": "block", + "type": "controls_if" + }, + { + "kind": "block", + "type": "logic_compare" + } + ] + }, + { + "kind": "category", + "name": "Loops", + "colour": "#5CA65C", + "contents": [ + { + "kind": "block", + "type": "controls_repeat_ext", + "inputs": { + "TIMES": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 3 + } + } + } + } + }, + { + "kind": "block", + "type": "controls_whileUntil" + } + ] + }, + { + "kind": "category", + "name": "Math", + "colour": "#5C68A6", + "contents": [ + { + "kind": "block", + "type": "math_number" + }, + { + "kind": "block", + "type": "math_arithmetic" + } + ] + }, + { + "kind": "category", + "name": "Text", + "colour": "#5CA68A", + "contents": [ + { + "kind": "block", + "type": "text" + }, + { + "kind": "block", + "type": "text_print" + } + ] + }, + { + "kind": "category", + "name": "Variables", + "colour": "#A65C81", + "custom": "VARIABLE" + } + ] +}; + +// Initialize Blockly workspace +const workspace = Blockly.inject('blocklyDiv', { + toolbox: toolbox, + grid: { + spacing: 20, + length: 3, + colour: '#ccc', + snap: true + }, + zoom: { + controls: true, + wheel: true, + startScale: 1.0, + maxScale: 3, + minScale: 0.3, + scaleSpeed: 1.2 + }, + trashcan: true +}); + +// Load initial workspace +const startBlocks = { + "blocks": { + "languageVersion": 0, + "blocks": [ + { + "type": "ot2_home", + "id": "start_home", + "x": 50, + "y": 50 + }, + { + "type": "controls_repeat_ext", + "id": "repeat_loop", + "x": 50, + "y": 120, + "inputs": { + "TIMES": { + "shadow": { + "type": "math_number", + "id": "repeat_times", + "fields": { + "NUM": 3 + } + } + }, + "DO": { + "block": { + "type": "ot2_mix_color", + "id": "mix_block", + "inputs": { + "R": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 100 + } + } + }, + "Y": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 50 + } + } + }, + "B": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 75 + } + } + }, + "WELL": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "A1" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + }, + "next": { + "block": { + "type": "ot2_move_sensor_back", + "id": "sensor_block", + "inputs": { + "SENSOR_STATUS": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "complete" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + } + } + } + } + } + } + ] + } +}; + +Blockly.serialization.workspaces.load(startBlocks, workspace); + +// Generate code function +function generateCode() { + const code = pythonGenerator.workspaceToCode(workspace); + const fullCode = `# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + +from OT2mqtt import mix_color, move_sensor_back, protocol + +# Main workflow +${code}`; + + document.getElementById('codeOutput').textContent = fullCode; +} + +// Update code on workspace change +workspace.addChangeListener(generateCode); + +// Generate initial code +generateCode(); + +// Expose generate function to button +window.generateCode = generateCode; diff --git a/scripts/blockly_app/webpack.config.js b/scripts/blockly_app/webpack.config.js new file mode 100644 index 00000000..9701f9c3 --- /dev/null +++ b/scripts/blockly_app/webpack.config.js @@ -0,0 +1,18 @@ +const path = require('path'); + +module.exports = { + mode: 'development', + entry: './src/index.js', + output: { + filename: 'bundle.js', + path: path.resolve(__dirname, 'dist'), + }, + devServer: { + static: { + directory: path.join(__dirname, 'dist'), + }, + compress: true, + port: 8080, + open: true, + }, +}; From 495e4ebd5acfdb19b0e2f366760433c80895c098 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 4 Nov 2025 03:24:50 +0000 Subject: [PATCH 5/9] Add step-by-step guide showing workflow building process Co-authored-by: sgbaird <45469701+sgbaird@users.noreply.github.com> --- scripts/blockly_app/STEP_BY_STEP_GUIDE.md | 212 ++++++++++++++ .../dist/build_workflow_steps.html | 258 ++++++++++++++++++ 2 files changed, 470 insertions(+) create mode 100644 scripts/blockly_app/STEP_BY_STEP_GUIDE.md create mode 100644 scripts/blockly_app/dist/build_workflow_steps.html diff --git a/scripts/blockly_app/STEP_BY_STEP_GUIDE.md b/scripts/blockly_app/STEP_BY_STEP_GUIDE.md new file mode 100644 index 00000000..f79e8e6c --- /dev/null +++ b/scripts/blockly_app/STEP_BY_STEP_GUIDE.md @@ -0,0 +1,212 @@ +# Building a Blockly Workflow: Step-by-Step Guide + +This guide demonstrates how to build an OT-2 automation workflow using Blockly's visual programming interface, from an empty workspace to a complete workflow with generated Python code. + +## Step-by-Step Process + +### Step 1: Start with Empty Workspace + +![Empty Workspace](https://github.com/user-attachments/assets/PLACEHOLDER-step1) + +- Open the Blockly application +- The workspace is empty and ready for blocks +- Toolbox on the left shows available block categories: + - OT-2 Commands + - Logic + - Loops + - Math + - Text + - Variables + +**Generated Code:** +```python +# No blocks yet... +``` + +--- + +### Step 2: Add "OT-2: Home Robot" Block + +![Adding Home Block](https://github.com/user-attachments/assets/PLACEHOLDER-step2) + +1. Click on **"OT-2 Commands"** category in toolbox +2. Drag the **"🏠 OT-2: Home Robot"** block to workspace +3. Place it at the top of your workflow + +**Generated Code:** +```python +from OT2mqtt import protocol + +protocol.home() +``` + +--- + +### Step 3: Add "Repeat 3 Times" Loop + +![Adding Loop Block](https://github.com/user-attachments/assets/PLACEHOLDER-step3) + +1. Click on **"Loops"** category in toolbox +2. Drag the **"repeat _ times"** block to workspace +3. Change the number to `3` +4. Place it below the Home Robot block + +**Generated Code:** +```python +from OT2mqtt import protocol + +protocol.home() + +for count in range(3): + pass # Loop body empty for now +``` + +--- + +### Step 4: Add "OT-2: Mix Color" Block Inside Loop + +![Adding Mix Color Block](https://github.com/user-attachments/assets/PLACEHOLDER-step4) + +1. From **"OT-2 Commands"**, drag **"🎨 OT-2: Mix Color"** block +2. Drop it inside the loop's "do" section +3. Fill in the parameters: + - **Red (µL):** 100 + - **Yellow (µL):** 50 + - **Blue (µL):** 75 + - **Well:** A1 + - **Session ID:** session_001 + - **Experiment ID:** exp_001 + +**Generated Code:** +```python +from OT2mqtt import mix_color, protocol + +protocol.home() + +for count in range(3): + payload = { + "command": { + "R": 100, + "Y": 50, + "B": 75, + "well": "A1" + }, + "session_id": "session_001", + "experiment_id": "exp_001" + } + mix_color(payload) +``` + +--- + +### Step 5: Add "OT-2: Move Sensor Back" Block + +![Adding Sensor Block](https://github.com/user-attachments/assets/PLACEHOLDER-step5) + +1. From **"OT-2 Commands"**, drag **"↩️ OT-2: Move Sensor Back"** block +2. Attach it below the Mix Color block (still inside the loop) +3. Fill in the parameters: + - **Sensor Status:** complete + - **Session ID:** session_001 + - **Experiment ID:** exp_001 + +**Generated Code:** +```python +from OT2mqtt import mix_color, move_sensor_back, protocol + +protocol.home() + +for count in range(3): + payload = { + "command": { + "R": 100, + "Y": 50, + "B": 75, + "well": "A1" + }, + "session_id": "session_001", + "experiment_id": "exp_001" + } + mix_color(payload) + + payload = { + "command": { + "sensor_status": "complete" + }, + "session_id": "session_001", + "experiment_id": "exp_001" + } + move_sensor_back(payload) +``` + +--- + +### Step 6: Complete Workflow + +![Complete Workflow](https://github.com/user-attachments/assets/e03bf195-edc8-4926-9980-170590c5fc24) + +The workflow is now complete! The visual blocks on the left automatically generate the Python code on the right. + +**Final Generated Code:** +```python +# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + +from OT2mqtt import mix_color, move_sensor_back, protocol + +# Main workflow +protocol.home() + +for count in range(3): + payload = { + "command": { + "R": 100, + "Y": 50, + "B": 75, + "well": 'A1' + }, + "session_id": 'session_001', + "experiment_id": 'exp_001' + } + mix_color(payload) + + payload = { + "command": { + "sensor_status": 'complete' + }, + "session_id": 'session_001', + "experiment_id": 'exp_001' + } + move_sensor_back(payload) +``` + +--- + +## Workflow Summary + +This workflow demonstrates: + +1. **Starting Simple**: Begin with a Home command +2. **Adding Control Flow**: Use loops to repeat actions +3. **Custom Functions**: Integrate OT-2 specific operations +4. **Parameter Configuration**: Set values for each operation +5. **Sequential Operations**: Chain multiple actions together +6. **Automatic Code Generation**: Python code is generated in real-time + +## Key Features + +✨ **Drag and Drop**: Build workflows visually without writing code +🔄 **Real-time Updates**: Code updates as you modify blocks +🎯 **One-to-One Mapping**: Each block directly corresponds to Python code +🎓 **Educational**: Learn Python by seeing how blocks translate to code +🔧 **Customizable**: Easy to modify parameters and extend with new blocks + +## Try It Yourself + +```bash +cd scripts/blockly_app +npm install +npm start +``` + +Then open http://localhost:8080 and start building your own workflow! diff --git a/scripts/blockly_app/dist/build_workflow_steps.html b/scripts/blockly_app/dist/build_workflow_steps.html new file mode 100644 index 00000000..aeefea3f --- /dev/null +++ b/scripts/blockly_app/dist/build_workflow_steps.html @@ -0,0 +1,258 @@ + + + + + Blockly OT-2 - Step by Step Demo + + + +

Blockly OT-2 Custom Functions - Building Workflow Step by Step

+
Loading...
+
+
+
+

Generated Python Code

+
+ Watch as we build the workflow block by block +
+
# Waiting for blocks...
+
+
+ + + + From 3618d1f9f8dce5aef947e8ec4a4aceab6db6d9a6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 4 Nov 2025 03:41:59 +0000 Subject: [PATCH 6/9] Remove concept demos and step-by-step guide, keep only real installation Co-authored-by: sgbaird <45469701+sgbaird@users.noreply.github.com> --- CHANGELOG.md | 5 - scripts/BLOCKLY_README.md | 161 -------- scripts/BLOCKLY_SUMMARY.md | 123 ------ scripts/blockly_app/STEP_BY_STEP_GUIDE.md | 212 ---------- .../dist/build_workflow_steps.html | 258 ------------- scripts/blockly_concept_demo.html | 363 ------------------ scripts/blockly_concept_demo.png | Bin 378857 -> 0 bytes scripts/blockly_example.py | 186 --------- scripts/blockly_ot2_demo.html | 343 ----------------- 9 files changed, 1651 deletions(-) delete mode 100644 scripts/BLOCKLY_README.md delete mode 100644 scripts/BLOCKLY_SUMMARY.md delete mode 100644 scripts/blockly_app/STEP_BY_STEP_GUIDE.md delete mode 100644 scripts/blockly_app/dist/build_workflow_steps.html delete mode 100644 scripts/blockly_concept_demo.html delete mode 100644 scripts/blockly_concept_demo.png delete mode 100644 scripts/blockly_example.py delete mode 100644 scripts/blockly_ot2_demo.html diff --git a/CHANGELOG.md b/CHANGELOG.md index 16018368..6c3fc039 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,11 +9,6 @@ - Real-time Python code generation from visual blocks - Fully functional drag-and-drop interface - Documentation: `scripts/blockly_app/README.md` -- Concept demonstrations for documentation: - - `scripts/blockly_concept_demo.html`: Visual demonstration of block-to-code mapping - - `scripts/blockly_ot2_demo.html`: Interactive demo (CDN-based) - - `scripts/blockly_example.py`: Python example showing generated code patterns - - `scripts/BLOCKLY_README.md` and `scripts/BLOCKLY_SUMMARY.md`: Documentation ### Fixed - Ctrl+C interrupt handling in `src/ac_training_lab/picam/device.py` now properly exits the streaming loop instead of restarting. diff --git a/scripts/BLOCKLY_README.md b/scripts/BLOCKLY_README.md deleted file mode 100644 index 82866dc1..00000000 --- a/scripts/BLOCKLY_README.md +++ /dev/null @@ -1,161 +0,0 @@ -# Blockly OT-2 Integration Demo - -This directory contains a demonstration of how [Blockly](https://developers.google.com/blockly) can be integrated with custom functions from the AC Training Lab, specifically the OT-2 liquid handler functions from `OT2mqtt.py`. - -## Overview - -Blockly is a visual programming library that allows users to create workflows by dragging and dropping blocks. This demo shows how to: - -1. Create custom Blockly blocks that represent OT-2 functions -2. Generate Python code from visual blocks that can call functions from `OT2mqtt.py` -3. Provide a one-to-one correspondence between visual programming and Python code - -## What's Included - -### `blockly_ot2_demo.html` - -An interactive HTML page that demonstrates: - -- **Custom OT-2 Blocks**: Blocks for key functions from `OT2mqtt.py`: - - `mix_color`: Mix RGB colors using the OT-2 pipette - - `move_sensor_back`: Return sensor to charging position - - `ot2_home`: Home the OT-2 robot - -- **Standard Blockly Blocks**: Logic, loops, math, text, and variables for building complex workflows - -- **Real-time Code Generation**: As you modify the blocks, the corresponding Python code is generated instantly - -## How to Use - -### Option 1: Direct Browser Access - -1. Simply open `blockly_ot2_demo.html` in a web browser: - ```bash - # From the scripts directory - firefox blockly_ot2_demo.html - # or - google-chrome blockly_ot2_demo.html - # or - open blockly_ot2_demo.html # macOS - ``` - -2. The page loads Blockly from a CDN, so no installation is required - -### Option 2: Using Python HTTP Server - -If you need to serve the file over HTTP: - -```bash -# From the repository root -cd scripts -python -m http.server 8000 -``` - -Then navigate to `http://localhost:8000/blockly_ot2_demo.html` in your browser. - -## Example Workflow - -The demo includes a pre-loaded example that demonstrates: - -1. Homing the OT-2 robot -2. Repeating 3 times: - - Mixing colors (100µL red, 50µL yellow, 75µL blue) in well A1 - - Moving the sensor back to charging position - -This generates Python code like: - -```python -# Generated from Blockly visual programming -# This code uses functions from OT2mqtt.py - -from OT2mqtt import mix_color, move_sensor_back, protocol - -# Main workflow -protocol.home() -for count in range(3): - payload = { - "command": { - "R": 100, - "Y": 50, - "B": 75, - "well": "A1" - }, - "session_id": "session_001", - "experiment_id": "exp_001" - } - mix_color(payload) - payload = { - "command": { - "sensor_status": "complete" - }, - "session_id": "session_001", - "experiment_id": "exp_001" - } - move_sensor_back(payload) -``` - -## Extending with More Functions - -To add more custom functions from `OT2mqtt.py` or other modules: - -1. **Define the Block**: Add a new block definition in the JavaScript: - ```javascript - Blockly.Blocks['your_block_name'] = { - init: function() { - this.appendDummyInput() - .appendField("Your Block Label"); - this.appendValueInput("PARAM1") - .setCheck("Number") - .appendField("Parameter 1"); - // Add more inputs as needed - this.setPreviousStatement(true, null); - this.setNextStatement(true, null); - this.setColour(230); - this.setTooltip("Description"); - } - }; - ``` - -2. **Define Code Generation**: Add Python code generator: - ```javascript - Blockly.Python['your_block_name'] = function(block) { - var value_param1 = Blockly.Python.valueToCode(block, 'PARAM1', Blockly.Python.ORDER_ATOMIC); - var code = `your_function(${value_param1})\n`; - return code; - }; - ``` - -3. **Add to Toolbox**: Include the block in the toolbox XML - -## Key Features Demonstrated - -1. **Visual to Code**: One-to-one correspondence between blocks and Python code -2. **Custom Functions**: Integration with existing Python functions -3. **Composability**: Combine custom blocks with standard control flow blocks -4. **Real-time Feedback**: See generated code update as you modify blocks -5. **No Installation**: Runs directly in the browser using CDN-hosted Blockly - -## Comparison with Other Tools - -Like n8n, NODE-RED, and IvoryOS, Blockly provides a visual drag-and-drop interface. However, Blockly's key advantage is the direct Python code generation, making it ideal for: - -- Educational purposes (learn programming visually, then see the code) -- Rapid prototyping of lab workflows -- Making automation accessible to non-programmers -- Generating reproducible Python scripts from visual designs - -## Next Steps - -To use this in a production environment: - -1. Create a backend service that receives the generated Python code -2. Validate and sanitize the code before execution -3. Execute in a controlled environment with appropriate error handling -4. Add authentication and authorization -5. Integrate with existing MQTT broker for OT-2 communication - -## References - -- [Blockly Official Documentation](https://developers.google.com/blockly) -- [Blockly Getting Started Guide](https://blocklycodelabs.dev/codelabs/getting-started/index.html) -- [OT-2 Python API](https://docs.opentrons.com/v2/) diff --git a/scripts/BLOCKLY_SUMMARY.md b/scripts/BLOCKLY_SUMMARY.md deleted file mode 100644 index 22e31aef..00000000 --- a/scripts/BLOCKLY_SUMMARY.md +++ /dev/null @@ -1,123 +0,0 @@ -# Blockly Integration with OT2mqtt.py - Summary - -## Question -"How can Blockly be used with custom functions from OT2mqtt.py?" - -## Answer - -Blockly can be integrated with OT2mqtt.py functions by creating **custom Blockly blocks** that generate Python code to call these functions. This demonstration shows a complete working example. - -### Implementation Overview - -1. **Custom Block Definitions**: Each OT-2 function gets a corresponding Blockly block - - `mix_color(payload)` → "OT-2: Mix Color" block - - `move_sensor_back(payload)` → "OT-2: Move Sensor Back" block - - `protocol.home()` → "OT-2: Home Robot" block - -2. **Code Generation**: Each block knows how to generate its corresponding Python code - - Block parameters map to function arguments - - Maintains one-to-one correspondence between visual and code representation - -3. **Workflow Composition**: Standard Blockly blocks (loops, conditionals) can be combined with custom OT-2 blocks - -### Example Workflow - -**Visual Blocks:** -``` -[🏠 Home Robot] -[🔁 Repeat 3 times] - └─ [🎨 Mix Color: R=100, Y=50, B=75, well=A1] - └─ [↩️ Move Sensor Back: status=complete] -``` - -**Generated Python Code:** -```python -from OT2mqtt import mix_color, move_sensor_back, protocol - -protocol.home() -for count in range(3): - payload = { - "command": {"R": 100, "Y": 50, "B": 75, "well": "A1"}, - "session_id": "session_001", - "experiment_id": "exp_001" - } - mix_color(payload) - - payload = { - "command": {"sensor_status": "complete"}, - "session_id": "session_001", - "experiment_id": "exp_001" - } - move_sensor_back(payload) -``` - -### Key Benefits - -1. **Accessibility**: Non-programmers can create OT-2 workflows visually -2. **Educational**: Users learn Python by seeing how blocks translate to code -3. **Reproducibility**: Visual workflows are easy to share and replicate -4. **Extensibility**: Any function in OT2mqtt.py can be wrapped as a block -5. **Production Ready**: Generated code can be saved and executed - -### Files in This Demo - -- **`blockly_concept_demo.html`** - Visual demonstration (open directly in browser) -- **`blockly_ot2_demo.html`** - Interactive Blockly editor with custom blocks -- **`blockly_example.py`** - Runnable Python example showing the pattern -- **`BLOCKLY_README.md`** - Complete documentation - -### How to Extend - -To add more OT2mqtt.py functions as Blockly blocks: - -1. Define the block's appearance and inputs (JavaScript): -```javascript -Blockly.Blocks['your_function'] = { - init: function() { - this.appendValueInput("PARAM1").appendField("Parameter 1"); - // ... configure block appearance - } -}; -``` - -2. Define the Python code generator (JavaScript): -```javascript -Blockly.Python['your_function'] = function(block) { - var param1 = Blockly.Python.valueToCode(block, 'PARAM1', ...); - return `your_function(${param1})\n`; -}; -``` - -3. Add the block to the toolbox in the HTML - -### Comparison with Similar Tools - -Like **n8n**, **NODE-RED**, and **IvoryOS**, Blockly provides visual drag-and-drop workflow creation. However, Blockly's key differentiator is: - -- **Direct Python code generation**: You get executable Python code, not a proprietary workflow format -- **One-to-one mapping**: Each visual block corresponds exactly to specific Python code -- **Educational value**: See the Python code as you build visually - -### References - -- [Blockly Official Docs](https://developers.google.com/blockly) -- [Getting Started Tutorial](https://blocklycodelabs.dev/codelabs/getting-started/index.html) -- OT-2 Functions: `src/ac_training_lab/ot-2/_scripts/OT2mqtt.py` - -### Try It Out - -```bash -# View the concept demo -open scripts/blockly_concept_demo.html - -# Run the Python example -python scripts/blockly_example.py - -# Try the interactive editor -python -m http.server 8000 --directory scripts -# Then open http://localhost:8000/blockly_ot2_demo.html -``` - ---- - -**Conclusion**: Blockly provides an excellent way to make OT-2 automation accessible to non-programmers while maintaining the benefits of Python code generation. The one-to-one correspondence between visual blocks and Python code makes it both educational and production-ready. diff --git a/scripts/blockly_app/STEP_BY_STEP_GUIDE.md b/scripts/blockly_app/STEP_BY_STEP_GUIDE.md deleted file mode 100644 index f79e8e6c..00000000 --- a/scripts/blockly_app/STEP_BY_STEP_GUIDE.md +++ /dev/null @@ -1,212 +0,0 @@ -# Building a Blockly Workflow: Step-by-Step Guide - -This guide demonstrates how to build an OT-2 automation workflow using Blockly's visual programming interface, from an empty workspace to a complete workflow with generated Python code. - -## Step-by-Step Process - -### Step 1: Start with Empty Workspace - -![Empty Workspace](https://github.com/user-attachments/assets/PLACEHOLDER-step1) - -- Open the Blockly application -- The workspace is empty and ready for blocks -- Toolbox on the left shows available block categories: - - OT-2 Commands - - Logic - - Loops - - Math - - Text - - Variables - -**Generated Code:** -```python -# No blocks yet... -``` - ---- - -### Step 2: Add "OT-2: Home Robot" Block - -![Adding Home Block](https://github.com/user-attachments/assets/PLACEHOLDER-step2) - -1. Click on **"OT-2 Commands"** category in toolbox -2. Drag the **"🏠 OT-2: Home Robot"** block to workspace -3. Place it at the top of your workflow - -**Generated Code:** -```python -from OT2mqtt import protocol - -protocol.home() -``` - ---- - -### Step 3: Add "Repeat 3 Times" Loop - -![Adding Loop Block](https://github.com/user-attachments/assets/PLACEHOLDER-step3) - -1. Click on **"Loops"** category in toolbox -2. Drag the **"repeat _ times"** block to workspace -3. Change the number to `3` -4. Place it below the Home Robot block - -**Generated Code:** -```python -from OT2mqtt import protocol - -protocol.home() - -for count in range(3): - pass # Loop body empty for now -``` - ---- - -### Step 4: Add "OT-2: Mix Color" Block Inside Loop - -![Adding Mix Color Block](https://github.com/user-attachments/assets/PLACEHOLDER-step4) - -1. From **"OT-2 Commands"**, drag **"🎨 OT-2: Mix Color"** block -2. Drop it inside the loop's "do" section -3. Fill in the parameters: - - **Red (µL):** 100 - - **Yellow (µL):** 50 - - **Blue (µL):** 75 - - **Well:** A1 - - **Session ID:** session_001 - - **Experiment ID:** exp_001 - -**Generated Code:** -```python -from OT2mqtt import mix_color, protocol - -protocol.home() - -for count in range(3): - payload = { - "command": { - "R": 100, - "Y": 50, - "B": 75, - "well": "A1" - }, - "session_id": "session_001", - "experiment_id": "exp_001" - } - mix_color(payload) -``` - ---- - -### Step 5: Add "OT-2: Move Sensor Back" Block - -![Adding Sensor Block](https://github.com/user-attachments/assets/PLACEHOLDER-step5) - -1. From **"OT-2 Commands"**, drag **"↩️ OT-2: Move Sensor Back"** block -2. Attach it below the Mix Color block (still inside the loop) -3. Fill in the parameters: - - **Sensor Status:** complete - - **Session ID:** session_001 - - **Experiment ID:** exp_001 - -**Generated Code:** -```python -from OT2mqtt import mix_color, move_sensor_back, protocol - -protocol.home() - -for count in range(3): - payload = { - "command": { - "R": 100, - "Y": 50, - "B": 75, - "well": "A1" - }, - "session_id": "session_001", - "experiment_id": "exp_001" - } - mix_color(payload) - - payload = { - "command": { - "sensor_status": "complete" - }, - "session_id": "session_001", - "experiment_id": "exp_001" - } - move_sensor_back(payload) -``` - ---- - -### Step 6: Complete Workflow - -![Complete Workflow](https://github.com/user-attachments/assets/e03bf195-edc8-4926-9980-170590c5fc24) - -The workflow is now complete! The visual blocks on the left automatically generate the Python code on the right. - -**Final Generated Code:** -```python -# Generated from Blockly visual programming -# This code uses functions from OT2mqtt.py - -from OT2mqtt import mix_color, move_sensor_back, protocol - -# Main workflow -protocol.home() - -for count in range(3): - payload = { - "command": { - "R": 100, - "Y": 50, - "B": 75, - "well": 'A1' - }, - "session_id": 'session_001', - "experiment_id": 'exp_001' - } - mix_color(payload) - - payload = { - "command": { - "sensor_status": 'complete' - }, - "session_id": 'session_001', - "experiment_id": 'exp_001' - } - move_sensor_back(payload) -``` - ---- - -## Workflow Summary - -This workflow demonstrates: - -1. **Starting Simple**: Begin with a Home command -2. **Adding Control Flow**: Use loops to repeat actions -3. **Custom Functions**: Integrate OT-2 specific operations -4. **Parameter Configuration**: Set values for each operation -5. **Sequential Operations**: Chain multiple actions together -6. **Automatic Code Generation**: Python code is generated in real-time - -## Key Features - -✨ **Drag and Drop**: Build workflows visually without writing code -🔄 **Real-time Updates**: Code updates as you modify blocks -🎯 **One-to-One Mapping**: Each block directly corresponds to Python code -🎓 **Educational**: Learn Python by seeing how blocks translate to code -🔧 **Customizable**: Easy to modify parameters and extend with new blocks - -## Try It Yourself - -```bash -cd scripts/blockly_app -npm install -npm start -``` - -Then open http://localhost:8080 and start building your own workflow! diff --git a/scripts/blockly_app/dist/build_workflow_steps.html b/scripts/blockly_app/dist/build_workflow_steps.html deleted file mode 100644 index aeefea3f..00000000 --- a/scripts/blockly_app/dist/build_workflow_steps.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - Blockly OT-2 - Step by Step Demo - - - -

Blockly OT-2 Custom Functions - Building Workflow Step by Step

-
Loading...
-
-
-
-

Generated Python Code

-
- Watch as we build the workflow block by block -
-
# Waiting for blocks...
-
-
- - - - diff --git a/scripts/blockly_concept_demo.html b/scripts/blockly_concept_demo.html deleted file mode 100644 index 3fbb35df..00000000 --- a/scripts/blockly_concept_demo.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - - Blockly OT-2 Integration - Concept Demo - - - -
-
-

🧪 Blockly + OT-2 Integration

-

Visual Programming for Laboratory Automation

-
- -
- Concept: This demonstrates how Blockly's visual programming blocks can be mapped one-to-one with Python functions from OT2mqtt.py. Users can drag and drop blocks to create workflows, and Blockly automatically generates the corresponding Python code. -
- -
-
-

📦 Visual Blocks (Blockly)

- -
-
🏠 OT-2: Home Robot
-
Reset robot to home position
-
- -
-
🔁 Repeat 3 times
-
-
-
🎨 OT-2: Mix Color
-
- Red (µL): - 100 -
-
- Yellow (µL): - 50 -
-
- Blue (µL): - 75 -
-
- Well: - "A1" -
-
- Session ID: - "session_001" -
-
- Experiment ID: - "exp_001" -
-
- -
-
↩️ OT-2: Move Sensor Back
-
- Sensor Status: - "complete" -
-
- Session ID: - "session_001" -
-
- Experiment ID: - "exp_001" -
-
-
-
-
- -
-

🐍 Generated Python Code

-
- One-to-one mapping: Each block directly corresponds to Python code that calls functions from OT2mqtt.py -
- # Generated from Blockly visual programming -# This code uses functions from OT2mqtt.py - -from OT2mqtt import mix_color, move_sensor_back, protocol - -# Main workflow -protocol.home() - -for count in range(3): - payload = { - "command": { - "R": 100, - "Y": 50, - "B": 75, - "well": "A1" - }, - "session_id": "session_001", - "experiment_id": "exp_001" - } - mix_color(payload) - - payload = { - "command": { - "sensor_status": "complete" - }, - "session_id": "session_001", - "experiment_id": "exp_001" - } - move_sensor_back(payload) -
-
- -
-
-

✨ Visual Programming

-

Drag-and-drop interface makes it easy for non-programmers to create complex lab workflows

-
-
-

🔗 Direct Mapping

-

One-to-one correspondence between visual blocks and Python code ensures predictability

-
-
-

🎓 Educational

-

Users can learn Python by seeing how their visual programs translate to code

-
-
-

🔧 Customizable

-

Easy to create custom blocks for any function in OT2mqtt.py or other modules

-
-
-

🚀 Production Ready

-

Generated code can be saved, version controlled, and executed in production environments

-
-
-

🔄 Reproducible

-

Visual workflows ensure consistent execution and make it easy to share protocols

-
-
- -
-

🛠️ Custom Blocks from OT2mqtt.py

-
-

Available Functions

-
    -
  • mix_color(payload) - Mix RGB colors in specified well (lines 87-142 in OT2mqtt.py)
  • -
  • move_sensor_back(payload) - Return sensor to charging position (lines 144-162)
  • -
  • protocol.home() - Home the OT-2 robot to initial position
  • -
-
- Extensibility: Additional functions from OT2mqtt.py or other modules can be easily wrapped as custom Blockly blocks following the same pattern. -
-
-
- -
-
- - diff --git a/scripts/blockly_concept_demo.png b/scripts/blockly_concept_demo.png deleted file mode 100644 index 87630e13d8329fc67446c2819b2270ee31b2a893..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 378857 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�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

*H;L8N{3}Dn5#zS;^?M6++gVPUG%el?K+ri$ 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

@=wW$+7nJ3lUncj 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%0DyhBAk~3T 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 Hx8wdFDH;fX diff --git a/scripts/blockly_example.py b/scripts/blockly_example.py deleted file mode 100644 index b3b850ed..00000000 --- a/scripts/blockly_example.py +++ /dev/null @@ -1,186 +0,0 @@ -""" -Example: Blockly-Generated Code Pattern for OT-2 - -This script demonstrates the Python code that would be generated by the Blockly -visual programming interface. The code mirrors the example shown in the -blockly_concept_demo.html visualization. - -This example shows how custom Blockly blocks can generate Python code that -directly calls functions from OT2mqtt.py, maintaining a one-to-one correspondence -between visual blocks and executable code. - -Note: This is a demonstration of the code generation pattern. To actually execute -this code, you would need: -1. An OT-2 robot connected and configured -2. The MQTT broker connection details -3. The required labware and pipettes loaded -""" - -# The imports below would be generated by Blockly based on which blocks are used -# In a real implementation, these would come from the actual OT2mqtt.py module -# from OT2mqtt import mix_color, move_sensor_back, protocol - - -def example_blockly_generated_workflow(): - """ - This function demonstrates the workflow that would be generated by - the Blockly blocks shown in blockly_concept_demo.html - - The visual workflow consists of: - 1. Home Robot block - 2. Repeat 3 times: - a. Mix Color block (R=100, Y=50, B=75, well=A1) - b. Move Sensor Back block (status=complete) - """ - - # Block: OT-2: Home Robot - # This corresponds to the "🏠 OT-2: Home Robot" block in Blockly - print("Step 1: Homing the OT-2 robot...") - # protocol.home() - - # Block: Repeat 3 times - # This corresponds to the "🔁 Repeat 3 times" control block in Blockly - for count in range(3): - print(f"\n=== Iteration {count + 1} ===") - - # Block: OT-2: Mix Color - # This corresponds to the "🎨 OT-2: Mix Color" block in Blockly - # Each parameter field in the block becomes a key in the payload - payload = { - "command": { - "R": 100, # Red (µL) input field - "Y": 50, # Yellow (µL) input field - "B": 75, # Blue (µL) input field - "well": "A1" # Well input field - }, - "session_id": "session_001", # Session ID input field - "experiment_id": "exp_001" # Experiment ID input field - } - print(f" Mixing colors: R={payload['command']['R']}µL, " - f"Y={payload['command']['Y']}µL, B={payload['command']['B']}µL " - f"in well {payload['command']['well']}") - # mix_color(payload) - - # Block: OT-2: Move Sensor Back - # This corresponds to the "↩️ OT-2: Move Sensor Back" block in Blockly - payload = { - "command": { - "sensor_status": "complete" # Sensor Status input field - }, - "session_id": "session_001", # Session ID input field - "experiment_id": "exp_001" # Experiment ID input field - } - print(f" Moving sensor back to charging position...") - # move_sensor_back(payload) - - print("\n✓ Workflow completed successfully!") - - -def demonstrate_block_to_code_mapping(): - """ - Demonstrates how each Blockly block type maps to Python code - """ - print("=" * 70) - print("BLOCKLY BLOCK-TO-CODE MAPPING DEMONSTRATION") - print("=" * 70) - - print("\n1. OT-2: Home Robot Block") - print(" Visual: [🏠 OT-2: Home Robot]") - print(" Python: protocol.home()") - - print("\n2. OT-2: Mix Color Block") - print(" Visual: [🎨 OT-2: Mix Color]") - print(" Red (µL): 100") - print(" Yellow (µL): 50") - print(" Blue (µL): 75") - print(" Well: A1") - print(" Session ID: session_001") - print(" Experiment ID: exp_001") - print(""" Python: payload = { - "command": { - "R": 100, - "Y": 50, - "B": 75, - "well": "A1" - }, - "session_id": "session_001", - "experiment_id": "exp_001" - } - mix_color(payload)""") - - print("\n3. OT-2: Move Sensor Back Block") - print(" Visual: [↩️ OT-2: Move Sensor Back]") - print(" Sensor Status: complete") - print(" Session ID: session_001") - print(" Experiment ID: exp_001") - print(""" Python: payload = { - "command": { - "sensor_status": "complete" - }, - "session_id": "session_001", - "experiment_id": "exp_001" - } - move_sensor_back(payload)""") - - print("\n4. Repeat N times Block (Standard Blockly)") - print(" Visual: [🔁 Repeat 3 times]") - print(" [nested blocks...]") - print(" Python: for count in range(3):") - print(" # nested code...") - - print("\n" + "=" * 70) - - -def show_extensibility_example(): - """ - Demonstrates how additional OT2mqtt.py functions could be wrapped - as custom Blockly blocks - """ - print("\n" + "=" * 70) - print("EXTENSIBILITY: Adding More Custom Blocks") - print("=" * 70) - - print("\nThe OT2mqtt.py module contains other functions that could be") - print("wrapped as Blockly blocks following the same pattern:\n") - - print("Existing Functions in OT2mqtt.py:") - print(" • mix_color(payload) - Lines 87-142") - print(" ✓ Already implemented as Blockly block") - print(" • move_sensor_back(payload) - Lines 144-162") - print(" ✓ Already implemented as Blockly block") - print(" • handle_command(payload) - Lines 164-173") - print(" → Could be wrapped as a dispatcher block") - print(" • protocol.home() - Used throughout") - print(" ✓ Already implemented as Blockly block") - - print("\nTo add a new custom block for any Python function:") - print("1. Define the Blockly block (JavaScript)") - print("2. Define the Python code generator (JavaScript)") - print("3. Add to the toolbox XML") - print("\nThe one-to-one mapping ensures predictable code generation!") - print("=" * 70) - - -if __name__ == "__main__": - print("\n" + "🧪 " * 20) - print("BLOCKLY + OT-2 INTEGRATION DEMONSTRATION") - print("Visual Programming → Python Code Generation") - print("🧪 " * 20 + "\n") - - # Show the mapping between blocks and code - demonstrate_block_to_code_mapping() - - # Run the example workflow - print("\n" + "=" * 70) - print("EXECUTING BLOCKLY-GENERATED WORKFLOW") - print("=" * 70) - example_blockly_generated_workflow() - - # Show how to extend with more blocks - show_extensibility_example() - - print("\n📚 For more information:") - print(" • Open scripts/blockly_concept_demo.html in a browser") - print(" • Read scripts/BLOCKLY_README.md") - print(" • Try the interactive demo in scripts/blockly_ot2_demo.html") - print() diff --git a/scripts/blockly_ot2_demo.html b/scripts/blockly_ot2_demo.html deleted file mode 100644 index 958ee673..00000000 --- a/scripts/blockly_ot2_demo.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - Blockly OT-2 Demo - Concept Visualization - - - - -

Blockly OT-2 Custom Functions Demo

-
-
-
-

Generated Python Code

-
- This demonstrates how Blockly blocks can generate Python code that calls custom functions from OT2mqtt.py -
- -
# Python code will appear here...
-
-
- - - - - - From afb594042585614e1c814c3686a0098b4d1ab5f3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 4 Nov 2025 03:49:52 +0000 Subject: [PATCH 7/9] Restore step-by-step guide with placeholder images for steps 1-5 Co-authored-by: sgbaird <45469701+sgbaird@users.noreply.github.com> --- scripts/blockly_app/STEP_BY_STEP_GUIDE.md | 216 ++++++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 scripts/blockly_app/STEP_BY_STEP_GUIDE.md diff --git a/scripts/blockly_app/STEP_BY_STEP_GUIDE.md b/scripts/blockly_app/STEP_BY_STEP_GUIDE.md new file mode 100644 index 00000000..9e76f777 --- /dev/null +++ b/scripts/blockly_app/STEP_BY_STEP_GUIDE.md @@ -0,0 +1,216 @@ +# Building a Blockly Workflow: Step-by-Step Guide + +This guide demonstrates how to build an OT-2 automation workflow using Blockly's visual programming interface, from an empty workspace to a complete workflow with generated Python code. + +## Step-by-Step Process + +### Step 1: Start with Empty Workspace + +![Empty Workspace - Coming Soon](https://via.placeholder.com/800x600/f0f0f0/666666?text=Step+1:+Empty+Workspace) + +- Open the Blockly application +- The workspace is empty and ready for blocks +- Toolbox on the left shows available block categories: + - OT-2 Commands + - Logic + - Loops + - Math + - Text + - Variables + +**Generated Code:** +```python +# No blocks yet... +``` + +--- + +### Step 2: Add "OT-2: Home Robot" Block + +![Adding Home Block - Coming Soon](https://via.placeholder.com/800x600/f0f0f0/666666?text=Step+2:+Home+Robot+Block) + +1. Click on **"OT-2 Commands"** category in toolbox +2. Drag the **"🏠 OT-2: Home Robot"** block to workspace +3. Place it at the top of your workflow + +**Generated Code:** +```python +from OT2mqtt import protocol + +protocol.home() +``` + +--- + +### Step 3: Add "Repeat 3 Times" Loop + +![Adding Loop Block - Coming Soon](https://via.placeholder.com/800x600/f0f0f0/666666?text=Step+3:+Repeat+Loop) + +1. Click on **"Loops"** category in toolbox +2. Drag the **"repeat _ times"** block to workspace +3. Change the number to `3` +4. Place it below the Home Robot block + +**Generated Code:** +```python +from OT2mqtt import protocol + +protocol.home() + +for count in range(3): + pass # Loop body empty for now +``` + +--- + +### Step 4: Add "OT-2: Mix Color" Block Inside Loop + +![Adding Mix Color Block - Coming Soon](https://via.placeholder.com/800x600/f0f0f0/666666?text=Step+4:+Mix+Color+Block) + +1. From **"OT-2 Commands"**, drag **"🎨 OT-2: Mix Color"** block +2. Drop it inside the loop's "do" section +3. Fill in the parameters: + - **Red (µL):** 100 + - **Yellow (µL):** 50 + - **Blue (µL):** 75 + - **Well:** A1 + - **Session ID:** session_001 + - **Experiment ID:** exp_001 + +**Generated Code:** +```python +from OT2mqtt import mix_color, protocol + +protocol.home() + +for count in range(3): + payload = { + "command": { + "R": 100, + "Y": 50, + "B": 75, + "well": "A1" + }, + "session_id": "session_001", + "experiment_id": "exp_001" + } + mix_color(payload) +``` + +--- + +### Step 5: Add "OT-2: Move Sensor Back" Block + +![Adding Sensor Block - Coming Soon](https://via.placeholder.com/800x600/f0f0f0/666666?text=Step+5:+Move+Sensor+Back) + +1. From **"OT-2 Commands"**, drag **"↩️ OT-2: Move Sensor Back"** block +2. Attach it below the Mix Color block (still inside the loop) +3. Fill in the parameters: + - **Sensor Status:** complete + - **Session ID:** session_001 + - **Experiment ID:** exp_001 + +**Generated Code:** +```python +from OT2mqtt import mix_color, move_sensor_back, protocol + +protocol.home() + +for count in range(3): + payload = { + "command": { + "R": 100, + "Y": 50, + "B": 75, + "well": "A1" + }, + "session_id": "session_001", + "experiment_id": "exp_001" + } + mix_color(payload) + + payload = { + "command": { + "sensor_status": "complete" + }, + "session_id": "session_001", + "experiment_id": "exp_001" + } + move_sensor_back(payload) +``` + +--- + +### Step 6: Complete Workflow + +![Complete Workflow](https://github.com/user-attachments/assets/e03bf195-edc8-4926-9980-170590c5fc24) + +The workflow is now complete! The visual blocks on the left automatically generate the Python code on the right. + +**Final Generated Code:** +```python +# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + +from OT2mqtt import mix_color, move_sensor_back, protocol + +# Main workflow +protocol.home() + +for count in range(3): + payload = { + "command": { + "R": 100, + "Y": 50, + "B": 75, + "well": 'A1' + }, + "session_id": 'session_001', + "experiment_id": 'exp_001' + } + mix_color(payload) + + payload = { + "command": { + "sensor_status": 'complete' + }, + "session_id": 'session_001', + "experiment_id": 'exp_001' + } + move_sensor_back(payload) +``` + +--- + +## Workflow Summary + +This workflow demonstrates: + +1. **Starting Simple**: Begin with a Home command +2. **Adding Control Flow**: Use loops to repeat actions +3. **Custom Functions**: Integrate OT-2 specific operations +4. **Parameter Configuration**: Set values for each operation +5. **Sequential Operations**: Chain multiple actions together +6. **Automatic Code Generation**: Python code is generated in real-time + +## Key Features + +✨ **Drag and Drop**: Build workflows visually without writing code +🔄 **Real-time Updates**: Code updates as you modify blocks +🎯 **One-to-One Mapping**: Each block directly corresponds to Python code +🎓 **Educational**: Learn Python by seeing how blocks translate to code +🔧 **Customizable**: Easy to modify parameters and extend with new blocks + +## Try It Yourself + +```bash +cd scripts/blockly_app +npm install +npm start +``` + +Then open http://localhost:8080 and start building your own workflow! + +--- + +**Note:** Screenshots for steps 1-5 show placeholders. Real screenshots will be captured from the actual Blockly application showing the progressive building of the workflow. From 7d061e33166b94ae107522841efd5a223dee6f98 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 4 Nov 2025 04:01:27 +0000 Subject: [PATCH 8/9] Update step-by-step guide with proper screenshot paths Co-authored-by: sgbaird <45469701+sgbaird@users.noreply.github.com> --- scripts/blockly_app/STEP_BY_STEP_GUIDE.md | 12 +- scripts/blockly_app/dist/step_builder.html | 311 +++++++++++++++++++++ 2 files changed, 317 insertions(+), 6 deletions(-) create mode 100644 scripts/blockly_app/dist/step_builder.html diff --git a/scripts/blockly_app/STEP_BY_STEP_GUIDE.md b/scripts/blockly_app/STEP_BY_STEP_GUIDE.md index 9e76f777..373b0e32 100644 --- a/scripts/blockly_app/STEP_BY_STEP_GUIDE.md +++ b/scripts/blockly_app/STEP_BY_STEP_GUIDE.md @@ -6,7 +6,7 @@ This guide demonstrates how to build an OT-2 automation workflow using Blockly's ### Step 1: Start with Empty Workspace -![Empty Workspace - Coming Soon](https://via.placeholder.com/800x600/f0f0f0/666666?text=Step+1:+Empty+Workspace) +![Empty Workspace](screenshots/step1_empty.png) - Open the Blockly application - The workspace is empty and ready for blocks @@ -27,7 +27,7 @@ This guide demonstrates how to build an OT-2 automation workflow using Blockly's ### Step 2: Add "OT-2: Home Robot" Block -![Adding Home Block - Coming Soon](https://via.placeholder.com/800x600/f0f0f0/666666?text=Step+2:+Home+Robot+Block) +![Adding Home Block](screenshots/step2_home.png) 1. Click on **"OT-2 Commands"** category in toolbox 2. Drag the **"🏠 OT-2: Home Robot"** block to workspace @@ -44,7 +44,7 @@ protocol.home() ### Step 3: Add "Repeat 3 Times" Loop -![Adding Loop Block - Coming Soon](https://via.placeholder.com/800x600/f0f0f0/666666?text=Step+3:+Repeat+Loop) +![Adding Loop Block](screenshots/step3_loop.png) 1. Click on **"Loops"** category in toolbox 2. Drag the **"repeat _ times"** block to workspace @@ -65,7 +65,7 @@ for count in range(3): ### Step 4: Add "OT-2: Mix Color" Block Inside Loop -![Adding Mix Color Block - Coming Soon](https://via.placeholder.com/800x600/f0f0f0/666666?text=Step+4:+Mix+Color+Block) +![Adding Mix Color Block](screenshots/step4_mix.png) 1. From **"OT-2 Commands"**, drag **"🎨 OT-2: Mix Color"** block 2. Drop it inside the loop's "do" section @@ -101,7 +101,7 @@ for count in range(3): ### Step 5: Add "OT-2: Move Sensor Back" Block -![Adding Sensor Block - Coming Soon](https://via.placeholder.com/800x600/f0f0f0/666666?text=Step+5:+Move+Sensor+Back) +![Adding Sensor Block](screenshots/step5_sensor.png) 1. From **"OT-2 Commands"**, drag **"↩️ OT-2: Move Sensor Back"** block 2. Attach it below the Mix Color block (still inside the loop) @@ -213,4 +213,4 @@ Then open http://localhost:8080 and start building your own workflow! --- -**Note:** Screenshots for steps 1-5 show placeholders. Real screenshots will be captured from the actual Blockly application showing the progressive building of the workflow. +**Note:** Screenshots for steps 1-5 show placeholder paths. To generate actual screenshots, the Blockly application needs to be run interactively and screenshots captured after each block is added. Step 6 shows the actual complete workflow. diff --git a/scripts/blockly_app/dist/step_builder.html b/scripts/blockly_app/dist/step_builder.html new file mode 100644 index 00000000..cd15f265 --- /dev/null +++ b/scripts/blockly_app/dist/step_builder.html @@ -0,0 +1,311 @@ + + + + + Blockly OT-2 - Step Builder + + + +

Blockly OT-2 Custom Functions - Building Workflow Step by Step

+
Loading...
+
+
+
+

Generated Python Code

+
+ Watch as we build the workflow block by block +
+
# Waiting for blocks...
+
+
+ + + + From fe07e7de6802438eded17b1d7cc6ffe5e6dc1ff0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 4 Nov 2025 13:37:21 +0000 Subject: [PATCH 9/9] Add real screenshots for all workflow building steps with hardcoded states Co-authored-by: sgbaird <45469701+sgbaird@users.noreply.github.com> --- scripts/blockly_app/STEP_BY_STEP_GUIDE.md | 37 +- scripts/blockly_app/dist/step1.html | 84 ++++ scripts/blockly_app/dist/step1.js | 170 +++++++ scripts/blockly_app/dist/step2.html | 84 ++++ scripts/blockly_app/dist/step2.js | 170 +++++++ scripts/blockly_app/dist/step3.html | 84 ++++ scripts/blockly_app/dist/step3.js | 170 +++++++ scripts/blockly_app/dist/step4.html | 84 ++++ scripts/blockly_app/dist/step4.js | 170 +++++++ scripts/blockly_app/dist/step5.html | 84 ++++ scripts/blockly_app/dist/step5.js | 170 +++++++ .../blockly_app/screenshots/step1_empty.png | Bin 0 -> 58403 bytes .../blockly_app/screenshots/step2_home.png | Bin 0 -> 63849 bytes .../blockly_app/screenshots/step3_loop.png | Bin 0 -> 70641 bytes scripts/blockly_app/screenshots/step4_mix.png | Bin 0 -> 102396 bytes .../blockly_app/screenshots/step5_sensor.png | Bin 0 -> 102396 bytes scripts/blockly_app/src/steps/step1.js | 353 +++++++++++++ scripts/blockly_app/src/steps/step2.js | 360 ++++++++++++++ scripts/blockly_app/src/steps/step3.js | 377 ++++++++++++++ scripts/blockly_app/src/steps/step4.js | 433 ++++++++++++++++ scripts/blockly_app/src/steps/step5.js | 465 ++++++++++++++++++ scripts/blockly_app/webpack.config.js | 11 +- 22 files changed, 3296 insertions(+), 10 deletions(-) create mode 100644 scripts/blockly_app/dist/step1.html create mode 100644 scripts/blockly_app/dist/step1.js create mode 100644 scripts/blockly_app/dist/step2.html create mode 100644 scripts/blockly_app/dist/step2.js create mode 100644 scripts/blockly_app/dist/step3.html create mode 100644 scripts/blockly_app/dist/step3.js create mode 100644 scripts/blockly_app/dist/step4.html create mode 100644 scripts/blockly_app/dist/step4.js create mode 100644 scripts/blockly_app/dist/step5.html create mode 100644 scripts/blockly_app/dist/step5.js create mode 100644 scripts/blockly_app/screenshots/step1_empty.png create mode 100644 scripts/blockly_app/screenshots/step2_home.png create mode 100644 scripts/blockly_app/screenshots/step3_loop.png create mode 100644 scripts/blockly_app/screenshots/step4_mix.png create mode 100644 scripts/blockly_app/screenshots/step5_sensor.png create mode 100644 scripts/blockly_app/src/steps/step1.js create mode 100644 scripts/blockly_app/src/steps/step2.js create mode 100644 scripts/blockly_app/src/steps/step3.js create mode 100644 scripts/blockly_app/src/steps/step4.js create mode 100644 scripts/blockly_app/src/steps/step5.js diff --git a/scripts/blockly_app/STEP_BY_STEP_GUIDE.md b/scripts/blockly_app/STEP_BY_STEP_GUIDE.md index 373b0e32..95e87a97 100644 --- a/scripts/blockly_app/STEP_BY_STEP_GUIDE.md +++ b/scripts/blockly_app/STEP_BY_STEP_GUIDE.md @@ -6,7 +6,7 @@ This guide demonstrates how to build an OT-2 automation workflow using Blockly's ### Step 1: Start with Empty Workspace -![Empty Workspace](screenshots/step1_empty.png) +![Empty Workspace](https://github.com/user-attachments/assets/8f41f369-a6e7-453d-9120-9618fb91bc55) - Open the Blockly application - The workspace is empty and ready for blocks @@ -20,14 +20,19 @@ This guide demonstrates how to build an OT-2 automation workflow using Blockly's **Generated Code:** ```python -# No blocks yet... +# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + +from OT2mqtt import mix_color, move_sensor_back, protocol + +# Main workflow ``` --- ### Step 2: Add "OT-2: Home Robot" Block -![Adding Home Block](screenshots/step2_home.png) +![Adding Home Block](https://github.com/user-attachments/assets/768853fa-5929-4b64-9ec6-b0afaf4af7fe) 1. Click on **"OT-2 Commands"** category in toolbox 2. Drag the **"🏠 OT-2: Home Robot"** block to workspace @@ -35,8 +40,12 @@ This guide demonstrates how to build an OT-2 automation workflow using Blockly's **Generated Code:** ```python -from OT2mqtt import protocol +# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + +from OT2mqtt import mix_color, move_sensor_back, protocol +# Main workflow protocol.home() ``` @@ -53,12 +62,16 @@ protocol.home() **Generated Code:** ```python -from OT2mqtt import protocol +# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py +from OT2mqtt import mix_color, move_sensor_back, protocol + +# Main workflow protocol.home() for count in range(3): - pass # Loop body empty for now + pass ``` --- @@ -79,8 +92,12 @@ for count in range(3): **Generated Code:** ```python -from OT2mqtt import mix_color, protocol +# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + +from OT2mqtt import mix_color, move_sensor_back, protocol +# Main workflow protocol.home() for count in range(3): @@ -112,8 +129,12 @@ for count in range(3): **Generated Code:** ```python +# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + from OT2mqtt import mix_color, move_sensor_back, protocol +# Main workflow protocol.home() for count in range(3): @@ -213,4 +234,4 @@ Then open http://localhost:8080 and start building your own workflow! --- -**Note:** Screenshots for steps 1-5 show placeholder paths. To generate actual screenshots, the Blockly application needs to be run interactively and screenshots captured after each block is added. Step 6 shows the actual complete workflow. +**Note:** All screenshots were captured from the real Blockly installation by hardcoding different workflow states. diff --git a/scripts/blockly_app/dist/step1.html b/scripts/blockly_app/dist/step1.html new file mode 100644 index 00000000..2c708ddc --- /dev/null +++ b/scripts/blockly_app/dist/step1.html @@ -0,0 +1,84 @@ + + + + + Blockly OT-2 - Step 1 + + + +

Blockly OT-2 Custom Functions - Building Workflow Step by Step

+
Step 1
+
+
+
+

Generated Python Code

+
+ Watch as we build the workflow block by block +
+
# Waiting for blocks...
+
+
+ + + diff --git a/scripts/blockly_app/dist/step1.js b/scripts/blockly_app/dist/step1.js new file mode 100644 index 00000000..eed8fa18 --- /dev/null +++ b/scripts/blockly_app/dist/step1.js @@ -0,0 +1,170 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/blockly/blockly_compressed.js": +/*!****************************************************!*\ + !*** ./node_modules/blockly/blockly_compressed.js ***! + \****************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Do not edit this file; automatically generated.\n\n/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function() {\nvar $={};\nvar register$$module$build$src$core$registry,validate$$module$build$src$core$registry,unregister$$module$build$src$core$registry,getItem$$module$build$src$core$registry,hasItem$$module$build$src$core$registry,getClass$$module$build$src$core$registry,getObject$$module$build$src$core$registry,getAllItems$$module$build$src$core$registry,getClassFromOptions$$module$build$src$core$registry,longStart$$module$build$src$core$touch,longStop$$module$build$src$core$touch,clearTouchIdentifier$$module$build$src$core$touch,\nshouldHandleEvent$$module$build$src$core$touch,getTouchIdentifierFromEvent$$module$build$src$core$touch,checkTouchIdentifier$$module$build$src$core$touch,conditionalBind$$module$build$src$core$browser_events,bind$$module$build$src$core$browser_events,unbind$$module$build$src$core$browser_events,isTargetInput$$module$build$src$core$browser_events,isRightButton$$module$build$src$core$browser_events,mouseToSvg$$module$build$src$core$browser_events,getScrollDeltaPixels$$module$build$src$core$browser_events,\ngetNextUniqueId$$module$build$src$core$utils$idgenerator,genUid$$module$build$src$core$utils$idgenerator,isBlockCreate$$module$build$src$core$events$predicates,isBlockDelete$$module$build$src$core$events$predicates,isBlockChange$$module$build$src$core$events$predicates,isBlockFieldIntermediateChange$$module$build$src$core$events$predicates,isBlockMove$$module$build$src$core$events$predicates,isVarCreate$$module$build$src$core$events$predicates,isVarDelete$$module$build$src$core$events$predicates,\nisVarRename$$module$build$src$core$events$predicates,isBlockDrag$$module$build$src$core$events$predicates,isSelected$$module$build$src$core$events$predicates,isClick$$module$build$src$core$events$predicates,isBubbleOpen$$module$build$src$core$events$predicates,isTrashcanOpen$$module$build$src$core$events$predicates,isToolboxItemSelect$$module$build$src$core$events$predicates,isThemeChange$$module$build$src$core$events$predicates,isViewportChange$$module$build$src$core$events$predicates,isCommentCreate$$module$build$src$core$events$predicates,\nisCommentDelete$$module$build$src$core$events$predicates,isCommentChange$$module$build$src$core$events$predicates,isCommentMove$$module$build$src$core$events$predicates,isCommentResize$$module$build$src$core$events$predicates,isCommentDrag$$module$build$src$core$events$predicates,isCommentCollapse$$module$build$src$core$events$predicates,isFinishedLoading$$module$build$src$core$events$predicates,getRecordUndo$$module$build$src$core$events$utils,fire$$module$build$src$core$events$utils,fireInternal$$module$build$src$core$events$utils,\nfireNow$$module$build$src$core$events$utils,enqueueEvent$$module$build$src$core$events$utils,filter$$module$build$src$core$events$utils,clearPendingUndo$$module$build$src$core$events$utils,isEnabled$$module$build$src$core$events$utils,setGroupInternal$$module$build$src$core$events$utils,getDescendantIds$$module$build$src$core$events$utils,fromJson$$module$build$src$core$events$utils,get$$module$build$src$core$events$utils,disableOrphans$$module$build$src$core$events$utils,createSvgElement$$module$build$src$core$utils$dom,\naddClass$$module$build$src$core$utils$dom,removeClasses$$module$build$src$core$utils$dom,removeClass$$module$build$src$core$utils$dom,hasClass$$module$build$src$core$utils$dom,removeNode$$module$build$src$core$utils$dom,insertAfter$$module$build$src$core$utils$dom,setCssTransform$$module$build$src$core$utils$dom,startTextWidthCache$$module$build$src$core$utils$dom,stopTextWidthCache$$module$build$src$core$utils$dom,getTextWidth$$module$build$src$core$utils$dom,getFastTextWidth$$module$build$src$core$utils$dom,\ngetFastTextWidthWithSizeString$$module$build$src$core$utils$dom,measureFontMetrics$$module$build$src$core$utils$dom,isFocusableNode$$module$build$src$core$interfaces$i_focusable_node,isSelectable$$module$build$src$core$interfaces$i_selectable,deepMerge$$module$build$src$core$utils$object,getWorkspaceById$$module$build$src$core$common,getAllWorkspaces$$module$build$src$core$common,registerWorkspace$$module$build$src$core$common,unregisterWorkpace$$module$build$src$core$common,getMainWorkspace$$module$build$src$core$common,\nsetMainWorkspace$$module$build$src$core$common,getSelected$$module$build$src$core$common,setSelected$$module$build$src$core$common,fireSelectedEvent$$module$build$src$core$common,getParentContainer$$module$build$src$core$common,setParentContainer$$module$build$src$core$common,svgResize$$module$build$src$core$common,getBlockTypeCounts$$module$build$src$core$common,jsonInitFactory$$module$build$src$core$common,defineBlocksWithJsonArray$$module$build$src$core$common,defineBlocksWithJsonArrayInternal$$module$build$src$core$common,\nglobalShortcutHandler$$module$build$src$core$common,removeElem$$module$build$src$core$utils$array,register$$module$build$src$core$css,inject$$module$build$src$core$css,getSize$$module$build$src$core$utils$style,getSizeInternal$$module$build$src$core$utils$style,getSizeWithDisplay$$module$build$src$core$utils$style,getComputedStyle$$module$build$src$core$utils$style,getPageOffset$$module$build$src$core$utils$style,getViewportPageOffset$$module$build$src$core$utils$style,getBorderBox$$module$build$src$core$utils$style,\nscrollIntoContainerView$$module$build$src$core$utils$style,getContainerOffsetToScrollInto$$module$build$src$core$utils$style,getRelativeXY$$module$build$src$core$utils$svg_math,getInjectionDivXY$$module$build$src$core$utils$svg_math,getViewportBBox$$module$build$src$core$utils$svg_math,getDocumentScroll$$module$build$src$core$utils$svg_math,screenToWsCoordinates$$module$build$src$core$utils$svg_math,wsToScreenCoordinates$$module$build$src$core$utils$svg_math,injectDependencies$$module$build$src$core$utils$xml,\ndomToText$$module$build$src$core$utils$xml,sanitizeText$$module$build$src$core$utils$xml,convertToolboxDefToJson$$module$build$src$core$utils$toolbox,validateToolbox$$module$build$src$core$utils$toolbox,convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox,hasCategories$$module$build$src$core$utils$toolbox,hasCategoriesInternal$$module$build$src$core$utils$toolbox,isCategoryCollapsible$$module$build$src$core$utils$toolbox,convertToToolboxJson$$module$build$src$core$utils$toolbox,xmlToJsonArray$$module$build$src$core$utils$toolbox,\naddAttributes$$module$build$src$core$utils$toolbox,parseToolboxTree$$module$build$src$core$utils$toolbox,getStartPositionRect$$module$build$src$core$positionable_helpers,getCornerOppositeToolbox$$module$build$src$core$positionable_helpers,bumpPositionRect$$module$build$src$core$positionable_helpers,register$$module$build$src$core$serialization$registry,unregister$$module$build$src$core$serialization$registry,save$$module$build$src$core$serialization$workspace_comments,append$$module$build$src$core$serialization$workspace_comments,\nregister$$module$build$src$core$clipboard$registry,unregister$$module$build$src$core$clipboard$registry,moveCommentToNotConflict$$module$build$src$core$clipboard$workspace_comment_paster,commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster,setRole$$module$build$src$core$utils$aria,setState$$module$build$src$core$utils$aria,isSerializable$$module$build$src$core$interfaces$i_serializable,queueRender$$module$build$src$core$render_management,finishQueuedRenders$$module$build$src$core$render_management,\ntriggerQueuedRenders$$module$build$src$core$render_management,alwaysImmediatelyRender$$module$build$src$core$render_management,queueBlock$$module$build$src$core$render_management,doRenders$$module$build$src$core$render_management,dequeueBlock$$module$build$src$core$render_management,shouldRenderRootBlock$$module$build$src$core$render_management,renderBlock$$module$build$src$core$render_management,alert$$module$build$src$core$dialog,setAlert$$module$build$src$core$dialog,confirm$$module$build$src$core$dialog,\nsetConfirm$$module$build$src$core$dialog,prompt$$module$build$src$core$dialog,setPrompt$$module$build$src$core$dialog,toast$$module$build$src$core$dialog,setToast$$module$build$src$core$dialog,isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks,isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks,isVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model,warn$$module$build$src$core$utils$deprecation,\ninternalFlyoutCategory$$module$build$src$core$variables,flyoutCategory$$module$build$src$core$variables,generateVariableFieldJson$$module$build$src$core$variables,jsonFlyoutCategoryBlocks$$module$build$src$core$variables,xmlFlyoutCategory$$module$build$src$core$variables,flyoutCategoryBlocks$$module$build$src$core$variables,generateUniqueName$$module$build$src$core$variables,generateUniqueNameInternal$$module$build$src$core$variables,generateUniqueNameFromOptions$$module$build$src$core$variables,\ncreateVariableButtonHandler$$module$build$src$core$variables,promptName$$module$build$src$core$variables,nameUsedWithOtherType$$module$build$src$core$variables,nameUsedWithAnyType$$module$build$src$core$variables,nameUsedWithConflictingParam$$module$build$src$core$variables,checkForConflictingParamWithProcedureModels$$module$build$src$core$variables,checkForConflictingParamWithLegacyProcedures$$module$build$src$core$variables,generateVariableFieldDom$$module$build$src$core$variables,createVariable$$module$build$src$core$variables,\ngetAddedVariables$$module$build$src$core$variables,compareByName$$module$build$src$core$variables,getVariableUsesById$$module$build$src$core$variables,save$$module$build$src$core$serialization$blocks,saveAttributes$$module$build$src$core$serialization$blocks,saveCoords$$module$build$src$core$serialization$blocks,saveExtraState$$module$build$src$core$serialization$blocks,saveIcons$$module$build$src$core$serialization$blocks,saveFields$$module$build$src$core$serialization$blocks,saveInputBlocks$$module$build$src$core$serialization$blocks,\nsaveNextBlocks$$module$build$src$core$serialization$blocks,saveConnection$$module$build$src$core$serialization$blocks,append$$module$build$src$core$serialization$blocks,appendInternal$$module$build$src$core$serialization$blocks,appendPrivate$$module$build$src$core$serialization$blocks,checkNewVariables$$module$build$src$core$serialization$blocks,loadCoords$$module$build$src$core$serialization$blocks,loadAttributes$$module$build$src$core$serialization$blocks,loadExtraState$$module$build$src$core$serialization$blocks,\ntryToConnectParent$$module$build$src$core$serialization$blocks,loadIcons$$module$build$src$core$serialization$blocks,loadFields$$module$build$src$core$serialization$blocks,loadInputBlocks$$module$build$src$core$serialization$blocks,loadNextBlocks$$module$build$src$core$serialization$blocks,loadConnection$$module$build$src$core$serialization$blocks,initBlock$$module$build$src$core$serialization$blocks,hasBubble$$module$build$src$core$interfaces$i_has_bubble,toRadians$$module$build$src$core$utils$math,\ntoDegrees$$module$build$src$core$utils$math,clamp$$module$build$src$core$utils$math,createDom$$module$build$src$core$dropdowndiv,setBoundsElement$$module$build$src$core$dropdowndiv,getOwner$$module$build$src$core$dropdowndiv,getContentDiv$$module$build$src$core$dropdowndiv,clearContent$$module$build$src$core$dropdowndiv,setColour$$module$build$src$core$dropdowndiv,showPositionedByBlock$$module$build$src$core$dropdowndiv,showPositionedByField$$module$build$src$core$dropdowndiv,getScaledBboxOfBlock$$module$build$src$core$dropdowndiv,\ngetScaledBboxOfField$$module$build$src$core$dropdowndiv,showPositionedByRect$$module$build$src$core$dropdowndiv,show$$module$build$src$core$dropdowndiv,getPositionBelowMetrics$$module$build$src$core$dropdowndiv,getPositionAboveMetrics$$module$build$src$core$dropdowndiv,getPositionTopOfPageMetrics$$module$build$src$core$dropdowndiv,getPositionX$$module$build$src$core$dropdowndiv,isVisible$$module$build$src$core$dropdowndiv,hideIfOwner$$module$build$src$core$dropdowndiv,hide$$module$build$src$core$dropdowndiv,\nhideWithoutAnimation$$module$build$src$core$dropdowndiv,positionInternal$$module$build$src$core$dropdowndiv,repositionForWindowResize$$module$build$src$core$dropdowndiv,shortestStringLength$$module$build$src$core$utils$string,commonWordPrefix$$module$build$src$core$utils$string,commonWordSuffix$$module$build$src$core$utils$string,wrapLine$$module$build$src$core$utils$string,wrapScore$$module$build$src$core$utils$string,wrapMutate$$module$build$src$core$utils$string,wrapToText$$module$build$src$core$utils$string,\nsetCustomTooltip$$module$build$src$core$tooltip,getCustomTooltip$$module$build$src$core$tooltip,isVisible$$module$build$src$core$tooltip,getDiv$$module$build$src$core$tooltip,getTooltipOfObject$$module$build$src$core$tooltip,getTargetObject$$module$build$src$core$tooltip,createDom$$module$build$src$core$tooltip,bindMouseEvents$$module$build$src$core$tooltip,unbindMouseEvents$$module$build$src$core$tooltip,onMouseOver$$module$build$src$core$tooltip,onMouseOut$$module$build$src$core$tooltip,onMouseMove$$module$build$src$core$tooltip,\ndispose$$module$build$src$core$tooltip,hide$$module$build$src$core$tooltip,block$$module$build$src$core$tooltip,unblock$$module$build$src$core$tooltip,renderContent$$module$build$src$core$tooltip,renderDefaultContent$$module$build$src$core$tooltip,getPosition$$module$build$src$core$tooltip,show$$module$build$src$core$tooltip,getHsvSaturation$$module$build$src$core$utils$colour,setHsvSaturation$$module$build$src$core$utils$colour,getHsvValue$$module$build$src$core$utils$colour,setHsvValue$$module$build$src$core$utils$colour,\nparse$$module$build$src$core$utils$colour,rgbToHex$$module$build$src$core$utils$colour,hexToRgb$$module$build$src$core$utils$colour,hsvToHex$$module$build$src$core$utils$colour,blend$$module$build$src$core$utils$colour,hueToHex$$module$build$src$core$utils$colour,tokenizeInterpolationInternal$$module$build$src$core$utils$parsing,tokenizeInterpolation$$module$build$src$core$utils$parsing,replaceMessageReferences$$module$build$src$core$utils$parsing,checkMessageReferences$$module$build$src$core$utils$parsing,\nparseBlockColour$$module$build$src$core$utils$parsing,getDiv$$module$build$src$core$widgetdiv,testOnly_setDiv$$module$build$src$core$widgetdiv,createDom$$module$build$src$core$widgetdiv,show$$module$build$src$core$widgetdiv,hide$$module$build$src$core$widgetdiv,isVisible$$module$build$src$core$widgetdiv,hideIfOwner$$module$build$src$core$widgetdiv,hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv,positionInternal$$module$build$src$core$widgetdiv,positionWithAnchor$$module$build$src$core$widgetdiv,\ncalculateX$$module$build$src$core$widgetdiv,calculateY$$module$build$src$core$widgetdiv,isRepositionable$$module$build$src$core$widgetdiv,repositionForWindowResize$$module$build$src$core$widgetdiv,getCurrentBlock$$module$build$src$core$contextmenu,setCurrentBlock$$module$build$src$core$contextmenu,show$$module$build$src$core$contextmenu,populate_$$module$build$src$core$contextmenu,position_$$module$build$src$core$contextmenu,createWidget_$$module$build$src$core$contextmenu,haltPropagation$$module$build$src$core$contextmenu,\nhide$$module$build$src$core$contextmenu,dispose$$module$build$src$core$contextmenu,mouseToWorkspacePoint$$module$build$src$core$utils$drag,start$$module$build$src$core$utils$drag,move$$module$build$src$core$utils$drag,workspaceToDom$$module$build$src$core$xml,saveWorkspaceComment$$module$build$src$core$xml,variablesToDom$$module$build$src$core$xml,blockToDomWithXY$$module$build$src$core$xml,fieldToDom$$module$build$src$core$xml,allFieldsToDom$$module$build$src$core$xml,blockToDom$$module$build$src$core$xml,\ncloneShadow$$module$build$src$core$xml,domToText$$module$build$src$core$xml,domToPrettyText$$module$build$src$core$xml,clearWorkspaceAndLoadFromXml$$module$build$src$core$xml,loadWorkspaceComment$$module$build$src$core$xml,appendDomToWorkspace$$module$build$src$core$xml,domToBlockInternal$$module$build$src$core$xml,domToVariables$$module$build$src$core$xml,mapSupportedXmlTags$$module$build$src$core$xml,applyMutationTagNodes$$module$build$src$core$xml,applyCommentTagNodes$$module$build$src$core$xml,\napplyDataTagNodes$$module$build$src$core$xml,applyFieldTagNodes$$module$build$src$core$xml,findChildBlocks$$module$build$src$core$xml,applyInputTagNodes$$module$build$src$core$xml,applyNextTagNodes$$module$build$src$core$xml,domToBlockHeadless$$module$build$src$core$xml,domToField$$module$build$src$core$xml,deleteNext$$module$build$src$core$xml,isElement$$module$build$src$core$xml,register$$module$build$src$core$field_registry,unregister$$module$build$src$core$field_registry,fromJsonInternal$$module$build$src$core$field_registry,\nisImageProperties$$module$build$src$core$field_dropdown,unregister$$module$build$src$core$extensions,isRegistered$$module$build$src$core$extensions,apply$$module$build$src$core$extensions,checkNoMutatorProperties$$module$build$src$core$extensions,checkXmlHooks$$module$build$src$core$extensions,checkJsonHooks$$module$build$src$core$extensions,checkMutatorDialog$$module$build$src$core$extensions,checkHasFunctionPair$$module$build$src$core$extensions,checkHasMutatorProperties$$module$build$src$core$extensions,\ngetMutatorProperties$$module$build$src$core$extensions,mutatorPropertiesMatch$$module$build$src$core$extensions,runAfterPageLoad$$module$build$src$core$extensions,checkDropdownOptionsInTable$$module$build$src$core$extensions,extensionParentTooltip$$module$build$src$core$extensions,point$$module$build$src$core$utils$svg_paths,curve$$module$build$src$core$utils$svg_paths,moveTo$$module$build$src$core$utils$svg_paths,moveBy$$module$build$src$core$utils$svg_paths,lineTo$$module$build$src$core$utils$svg_paths,\nline$$module$build$src$core$utils$svg_paths,lineOnAxis$$module$build$src$core$utils$svg_paths,arc$$module$build$src$core$utils$svg_paths,connectReciprocally$$module$build$src$core$connection,getSingleConnection$$module$build$src$core$connection,getConnectionForOrphanedOutput$$module$build$src$core$connection,isIcon$$module$build$src$core$interfaces$i_icon,isCommentIcon$$module$build$src$core$interfaces$i_comment_icon,disposeUiEffect$$module$build$src$core$block_animations,disposeUiStep$$module$build$src$core$block_animations,\nconnectionUiEffect$$module$build$src$core$block_animations,disconnectUiEffect$$module$build$src$core$block_animations,disconnectUiStep$$module$build$src$core$block_animations,disconnectUiStop$$module$build$src$core$block_animations,moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster,blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster,blockIsInSnapRadius$$module$build$src$core$clipboard$block_paster,bumpObjectIntoBounds$$module$build$src$core$bump_objects,bumpIntoBoundsHandler$$module$build$src$core$bump_objects,\nextractObjectFromEvent$$module$build$src$core$bump_objects,bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects,isDeletable$$module$build$src$core$interfaces$i_deletable,getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy,navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy,navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy,register$$module$build$src$core$icons$registry,unregister$$module$build$src$core$icons$registry,\nisDraggable$$module$build$src$core$interfaces$i_draggable,isAutoHideable$$module$build$src$core$interfaces$i_autohideable,isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block,isObservable$$module$build$src$core$interfaces$i_observable,allProcedures$$module$build$src$core$procedures,procTupleComparator$$module$build$src$core$procedures,isLegalName$$module$build$src$core$procedures,isNameUsed$$module$build$src$core$procedures,xmlFlyoutCategory$$module$build$src$core$procedures,internalFlyoutCategory$$module$build$src$core$procedures,\nflyoutCategory$$module$build$src$core$procedures,updateMutatorFlyout$$module$build$src$core$procedures,mutatorOpenListener$$module$build$src$core$procedures,mutatorChangeListener$$module$build$src$core$procedures,getCallers$$module$build$src$core$procedures,blockIsModernCallerFor$$module$build$src$core$procedures,isDynamicShape$$module$build$src$core$renderers$common$constants,isPuzzleTab$$module$build$src$core$renderers$common$constants,isNotch$$module$build$src$core$renderers$common$constants,register$$module$build$src$core$renderers$common$block_rendering,\nunregister$$module$build$src$core$renderers$common$block_rendering,init$$module$build$src$core$renderers$common$block_rendering,stringButtonClickHandler$$module$build$src$core$variables_dynamic,numberButtonClickHandler$$module$build$src$core$variables_dynamic,colourButtonClickHandler$$module$build$src$core$variables_dynamic,internalFlyoutCategory$$module$build$src$core$variables_dynamic,flyoutCategory$$module$build$src$core$variables_dynamic,xmlFlyoutCategory$$module$build$src$core$variables_dynamic,\nflyoutCategoryBlocks$$module$build$src$core$variables_dynamic,resizeSvgContents$$module$build$src$core$workspace_svg,copy$$module$build$src$core$clipboard,getLastCopiedData$$module$build$src$core$clipboard,setLastCopiedData$$module$build$src$core$clipboard,getLastCopiedWorkspace$$module$build$src$core$clipboard,setLastCopiedWorkspace$$module$build$src$core$clipboard,getLastCopiedLocation$$module$build$src$core$clipboard,setLastCopiedLocation$$module$build$src$core$clipboard,paste$$module$build$src$core$clipboard,\npasteFromData$$module$build$src$core$clipboard,isCopyable$$module$build$src$core$interfaces$i_copyable,registerEscape$$module$build$src$core$shortcut_items,registerDelete$$module$build$src$core$shortcut_items,isCopyable$$module$build$src$core$shortcut_items,isCuttable$$module$build$src$core$shortcut_items,registerCopy$$module$build$src$core$shortcut_items,registerCut$$module$build$src$core$shortcut_items,registerPaste$$module$build$src$core$shortcut_items,registerUndo$$module$build$src$core$shortcut_items,\nregisterRedo$$module$build$src$core$shortcut_items,registerDefaultShortcuts$$module$build$src$core$shortcut_items,saveProcedure$$module$build$src$core$serialization$procedures,loadProcedure$$module$build$src$core$serialization$procedures,save$$module$build$src$core$serialization$workspaces,load$$module$build$src$core$serialization$workspaces,inject$$module$build$src$core$inject,createDom$$module$build$src$core$inject,createMainWorkspace$$module$build$src$core$inject,init$$module$build$src$core$inject,\nbindDocumentEvents$$module$build$src$core$inject,loadSounds$$module$build$src$core$inject,isFullBlockField$$module$build$src$core$contextmenu_items,registerUndo$$module$build$src$core$contextmenu_items,registerRedo$$module$build$src$core$contextmenu_items,registerCleanup$$module$build$src$core$contextmenu_items,toggleOption_$$module$build$src$core$contextmenu_items,registerCollapse$$module$build$src$core$contextmenu_items,registerExpand$$module$build$src$core$contextmenu_items,addDeletableBlocks_$$module$build$src$core$contextmenu_items,\ngetDeletableBlocks_$$module$build$src$core$contextmenu_items,deleteNext_$$module$build$src$core$contextmenu_items,registerDeleteAll$$module$build$src$core$contextmenu_items,registerWorkspaceOptions_$$module$build$src$core$contextmenu_items,registerDuplicate$$module$build$src$core$contextmenu_items,registerComment$$module$build$src$core$contextmenu_items,registerInline$$module$build$src$core$contextmenu_items,registerCollapseExpandBlock$$module$build$src$core$contextmenu_items,registerDisable$$module$build$src$core$contextmenu_items,\nregisterDelete$$module$build$src$core$contextmenu_items,registerHelp$$module$build$src$core$contextmenu_items,registerCommentDelete$$module$build$src$core$contextmenu_items,registerCommentDuplicate$$module$build$src$core$contextmenu_items,registerCommentCreate$$module$build$src$core$contextmenu_items,registerBlockOptions_$$module$build$src$core$contextmenu_items,registerCommentOptions$$module$build$src$core$contextmenu_items,registerDefaultOptions$$module$build$src$core$contextmenu_items,isPaster$$module$build$src$core$interfaces$i_paster,\nisRenderedElement$$module$build$src$core$interfaces$i_rendered_element,isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item,hideChaff$$module$build$src$core$blockly,isFocusableTree$$module$build$src$core$interfaces$i_focusable_tree,$jscomp;\nregister$$module$build$src$core$registry=function(a,b,c,d){if(!(a instanceof Type$$module$build$src$core$registry)&&typeof a!==\"string\"||`${a}`.trim()===\"\")throw Error('Invalid type \"'+a+'\". The type must be a non-empty string or a Blockly.registry.Type.');a=`${a}`.toLowerCase();if(typeof b!==\"string\"||b.trim()===\"\")throw Error('Invalid name \"'+b+'\". The name must be a non-empty string.');const e=b.toLowerCase();if(!c)throw Error(\"Can not register a null value\");let f=typeMap$$module$build$src$core$registry[a],\ng=nameMap$$module$build$src$core$registry[a];f||(f=typeMap$$module$build$src$core$registry[a]=Object.create(null),g=nameMap$$module$build$src$core$registry[a]=Object.create(null));validate$$module$build$src$core$registry(a,c);if(!d&&f[e]&&f[e]!==c)throw Error('Name \"'+e+'\" with type \"'+a+'\" already registered.');f[e]=c;g[e]=b};\nvalidate$$module$build$src$core$registry=function(a,b){switch(a){case String(Type$$module$build$src$core$registry.FIELD):if(typeof b.fromJson!==\"function\")throw Error('Type \"'+a+'\" must have a fromJson function');}};\nunregister$$module$build$src$core$registry=function(a,b){a=`${a}`.toLowerCase();b=b.toLowerCase();const c=typeMap$$module$build$src$core$registry[a];c&&c[b]?(delete typeMap$$module$build$src$core$registry[a][b],delete nameMap$$module$build$src$core$registry[a][b]):console.warn(\"Unable to unregister [\"+b+\"][\"+a+\"] from the registry.\")};\ngetItem$$module$build$src$core$registry=function(a,b,c){a=`${a}`.toLowerCase();b=b.toLowerCase();const d=typeMap$$module$build$src$core$registry[a];if(!d||!d[b]){b=\"Unable to find [\"+b+\"][\"+a+\"] in the registry.\";if(c)throw Error(b+\" You must require or register a \"+a+\" plugin.\");console.warn(b);return null}return d[b]};hasItem$$module$build$src$core$registry=function(a,b){a=`${a}`.toLowerCase();b=b.toLowerCase();return(a=typeMap$$module$build$src$core$registry[a])?!!a[b]:!1};\ngetClass$$module$build$src$core$registry=function(a,b,c){return getItem$$module$build$src$core$registry(a,b,c)};getObject$$module$build$src$core$registry=function(a,b,c){return getItem$$module$build$src$core$registry(a,b,c)};\ngetAllItems$$module$build$src$core$registry=function(a,b,c){a=`${a}`.toLowerCase();var d=typeMap$$module$build$src$core$registry[a];if(!d){d=`Unable to find [${a}] in the registry.`;if(c)throw Error(`${d} You must require or register a ${a} plugin.`);console.warn(d);return null}if(!b)return d;a=nameMap$$module$build$src$core$registry[a];c=Object.create(null);for(const e of Object.keys(d))c[a[e]]=d[e];return c};\ngetClassFromOptions$$module$build$src$core$registry=function(a,b,c){b=b.plugins[String(a)]||DEFAULT$$module$build$src$core$registry;return typeof b===\"function\"?b:getClass$$module$build$src$core$registry(a,b,c)};longStart$$module$build$src$core$touch=function(a,b){longStop$$module$build$src$core$touch();longPid_$$module$build$src$core$touch=setTimeout(function(){b&&b.handleRightClick(a)},LONGPRESS$$module$build$src$core$touch)};\nlongStop$$module$build$src$core$touch=function(){longPid_$$module$build$src$core$touch&&(clearTimeout(longPid_$$module$build$src$core$touch),longPid_$$module$build$src$core$touch=0)};clearTouchIdentifier$$module$build$src$core$touch=function(){touchIdentifier_$$module$build$src$core$touch=null};shouldHandleEvent$$module$build$src$core$touch=function(a){return!a.type.startsWith(\"pointer\")||a instanceof PointerEvent&&checkTouchIdentifier$$module$build$src$core$touch(a)};\ngetTouchIdentifierFromEvent$$module$build$src$core$touch=function(a){return`${a.pointerId}`};checkTouchIdentifier$$module$build$src$core$touch=function(a){const b=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);return touchIdentifier_$$module$build$src$core$touch?touchIdentifier_$$module$build$src$core$touch===b:a.type===\"pointerdown\"?(touchIdentifier_$$module$build$src$core$touch=b,!0):!1};\nconditionalBind$$module$build$src$core$browser_events=function(a,b,c,d,e){function f(h){if(e||shouldHandleEvent$$module$build$src$core$touch(h))c?d.call(c,h):d(h)}const g=[];if(b in TOUCH_MAP$$module$build$src$core$touch)for(let h=0;h{setTimeout(fireNow$$module$build$src$core$events$utils,0)})}catch(b){setTimeout(fireNow$$module$build$src$core$events$utils,0)}enqueueEvent$$module$build$src$core$events$utils(a)}};\nfireNow$$module$build$src$core$events$utils=function(){const a=filter$$module$build$src$core$events$utils(FIRE_QUEUE$$module$build$src$core$events$utils);FIRE_QUEUE$$module$build$src$core$events$utils.length=0;for(const b of a){if(!b.workspaceId)continue;let c;(c=getWorkspaceById$$module$build$src$core$common(b.workspaceId))==null||c.fireChangeListener(b)}};\nenqueueEvent$$module$build$src$core$events$utils=function(a){if(isBlockChange$$module$build$src$core$events$predicates(a)&&a.element===\"mutation\"){let b;for(b=FIRE_QUEUE$$module$build$src$core$events$utils.length;b>0;b--){const c=FIRE_QUEUE$$module$build$src$core$events$utils[b-1];if(c.group!==a.group||c.workspaceId!==a.workspaceId||!isBlockMove$$module$build$src$core$events$predicates(c)||c.newParentId!==a.blockId)break}FIRE_QUEUE$$module$build$src$core$events$utils.splice(b,0,a)}else FIRE_QUEUE$$module$build$src$core$events$utils.push(a)};\nfilter$$module$build$src$core$events$utils=function(a){const b=[];for(const c of a)if(a=b[b.length-1],!c.isNull())if(a&&a.workspaceId===c.workspaceId&&a.group===c.group)if(isBlockMove$$module$build$src$core$events$predicates(c)&&isBlockMove$$module$build$src$core$events$predicates(a)&&c.blockId===a.blockId){if(a.newParentId=c.newParentId,a.newInputName=c.newInputName,a.newCoordinate=c.newCoordinate,a.reason||c.reason){let d,e;a.reason=Array.from(new Set(((d=a.reason)!=null?d:[]).concat((e=c.reason)!=\nnull?e:[])))}}else isBlockChange$$module$build$src$core$events$predicates(c)&&isBlockChange$$module$build$src$core$events$predicates(a)&&c.blockId===a.blockId&&c.element===a.element&&c.name===a.name?a.newValue=c.newValue:isViewportChange$$module$build$src$core$events$predicates(c)&&isViewportChange$$module$build$src$core$events$predicates(a)?(a.viewTop=c.viewTop,a.viewLeft=c.viewLeft,a.scale=c.scale,a.oldScale=c.oldScale):isClick$$module$build$src$core$events$predicates(c)&&isBubbleOpen$$module$build$src$core$events$predicates(a)||\nb.push(c);else b.push(c);return a=b.filter(c=>!c.isNull())};clearPendingUndo$$module$build$src$core$events$utils=function(){for(let a=0,b;b=FIRE_QUEUE$$module$build$src$core$events$utils[a];a++)b.recordUndo=!1};$.disable$$module$build$src$core$events$utils=function(){disabled$$module$build$src$core$events$utils++};$.enable$$module$build$src$core$events$utils=function(){disabled$$module$build$src$core$events$utils--};\nisEnabled$$module$build$src$core$events$utils=function(){return disabled$$module$build$src$core$events$utils===0};$.getGroup$$module$build$src$core$events$utils=function(){return group$$module$build$src$core$events$utils};$.setGroup$$module$build$src$core$events$utils=function(a){TEST_ONLY$$module$build$src$core$events$utils.setGroupInternal(a)};\nsetGroupInternal$$module$build$src$core$events$utils=function(a){group$$module$build$src$core$events$utils=typeof a===\"boolean\"?a?genUid$$module$build$src$core$utils$idgenerator():\"\":a};getDescendantIds$$module$build$src$core$events$utils=function(a){const b=[];a=a.getDescendants(!1);for(let c=0,d;d=a[c];c++)b[c]=d.id;return b};\nfromJson$$module$build$src$core$events$utils=function(a,b){const c=get$$module$build$src$core$events$utils(a.type);if(!c)throw Error(\"Unknown event type.\");return c.fromJson(a,b)};get$$module$build$src$core$events$utils=function(a){const b=getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,a);if(!b)throw Error(`Event type ${a} not found in registry.`);return b};\ndisableOrphans$$module$build$src$core$events$utils=function(a){if((isBlockMove$$module$build$src$core$events$predicates(a)||isBlockCreate$$module$build$src$core$events$predicates(a))&&a.workspaceId){var b=getWorkspaceById$$module$build$src$core$common(a.workspaceId);if(!a.blockId)throw Error(\"Encountered a blockEvent without a proper blockId\");if(a=b.getBlockById(a.blockId)){const c=recordUndo$$module$build$src$core$events$utils;try{recordUndo$$module$build$src$core$events$utils=!1;const d=a.getParent();\nif(d&&!d.hasDisabledReason(ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils)){const e=a.getDescendants(!1);for(let f=0,g;g=e[f];f++)g.setDisabledReason(!1,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils)}else if((a.outputConnection||a.previousConnection)&&!b.isDragging()){do a.setDisabledReason(!0,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils),a=a.getNextBlock();while(a)}}finally{recordUndo$$module$build$src$core$events$utils=c}}}};\ncreateSvgElement$$module$build$src$core$utils$dom=function(a,b,c){a=document.createElementNS(SVG_NS$$module$build$src$core$utils$dom,`${a}`);for(const d in b)a.setAttribute(d,`${b[d]}`);c&&c.appendChild(a);return a};addClass$$module$build$src$core$utils$dom=function(a,b){b=b.split(\" \");if(b.every(c=>a.classList.contains(c)))return!1;a.classList.add(...b);return!0};removeClasses$$module$build$src$core$utils$dom=function(a,b){a.classList.remove(...b.split(\" \"))};\nremoveClass$$module$build$src$core$utils$dom=function(a,b){b=b.split(\" \");if(b.every(c=>!a.classList.contains(c)))return!1;a.classList.remove(...b);return!0};hasClass$$module$build$src$core$utils$dom=function(a,b){return a.classList.contains(b)};removeNode$$module$build$src$core$utils$dom=function(a){return a&&a.parentNode?a.parentNode.removeChild(a):null};\ninsertAfter$$module$build$src$core$utils$dom=function(a,b){const c=b.nextSibling;b=b.parentNode;if(!b)throw Error(\"Reference node has no parent.\");c?b.insertBefore(a,c):b.appendChild(a)};setCssTransform$$module$build$src$core$utils$dom=function(a,b){a.style.transform=b;a.style[\"-webkit-transform\"]=b};\nstartTextWidthCache$$module$build$src$core$utils$dom=function(){cacheReference$$module$build$src$core$utils$dom++;cacheWidths$$module$build$src$core$utils$dom||(cacheWidths$$module$build$src$core$utils$dom=Object.create(null))};stopTextWidthCache$$module$build$src$core$utils$dom=function(){cacheReference$$module$build$src$core$utils$dom--;cacheReference$$module$build$src$core$utils$dom||(cacheWidths$$module$build$src$core$utils$dom=null)};\ngetTextWidth$$module$build$src$core$utils$dom=function(a){const b=a.textContent+\"\\n\"+a.className.baseVal;var c;if(cacheWidths$$module$build$src$core$utils$dom&&(c=cacheWidths$$module$build$src$core$utils$dom[b]))return c;c=window.getComputedStyle(a);c=getFastTextWidthWithSizeString$$module$build$src$core$utils$dom(a,c.fontSize,c.fontWeight,c.fontFamily);cacheWidths$$module$build$src$core$utils$dom&&(cacheWidths$$module$build$src$core$utils$dom[b]=c);return c};\ngetFastTextWidth$$module$build$src$core$utils$dom=function(a,b,c,d){return getFastTextWidthWithSizeString$$module$build$src$core$utils$dom(a,b+\"pt\",c,d)};\ngetFastTextWidthWithSizeString$$module$build$src$core$utils$dom=function(a,b,c,d){const e=a.textContent;a=e+\"\\n\"+a.className.baseVal;var f;if(cacheWidths$$module$build$src$core$utils$dom&&(f=cacheWidths$$module$build$src$core$utils$dom[a]))return f;canvasContext$$module$build$src$core$utils$dom||(f=document.createElement(\"canvas\"),f.className=\"blocklyComputeCanvas\",document.body.appendChild(f),canvasContext$$module$build$src$core$utils$dom=f.getContext(\"2d\"));e&&canvasContext$$module$build$src$core$utils$dom?\n(canvasContext$$module$build$src$core$utils$dom.font=c+\" \"+b+\" \"+d,f=canvasContext$$module$build$src$core$utils$dom.measureText(e).width):f=0;cacheWidths$$module$build$src$core$utils$dom&&(cacheWidths$$module$build$src$core$utils$dom[a]=f);return f};\nmeasureFontMetrics$$module$build$src$core$utils$dom=function(a,b,c,d){const e=document.createElement(\"span\");e.style.font=c+\" \"+b+\" \"+d;e.textContent=a;a=document.createElement(\"div\");a.style.width=\"1px\";a.style.height=\"0\";b=document.createElement(\"div\");b.style.display=\"flex\";b.style.position=\"fixed\";b.style.top=\"0\";b.style.left=\"0\";b.appendChild(e);b.appendChild(a);document.body.appendChild(b);c={height:0,baseline:0};try{b.style.alignItems=\"baseline\",c.baseline=a.offsetTop-e.offsetTop,b.style.alignItems=\n\"flex-end\",c.height=a.offsetTop-e.offsetTop}finally{document.body.removeChild(b)}return c};$.getFocusManager$$module$build$src$core$focus_manager=function(){return FocusManager$$module$build$src$core$focus_manager.getFocusManager()};isFocusableNode$$module$build$src$core$interfaces$i_focusable_node=function(a){return a&&typeof a.getFocusableElement===\"function\"&&typeof a.getFocusableTree===\"function\"&&typeof a.onNodeFocus===\"function\"&&typeof a.onNodeBlur===\"function\"&&typeof a.canBeFocused===\"function\"};\nisSelectable$$module$build$src$core$interfaces$i_selectable=function(a){return isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(a)&&typeof a.id===\"string\"&&typeof a.workspace===\"object\"&&typeof a.select===\"function\"&&typeof a.unselect===\"function\"};\ndeepMerge$$module$build$src$core$utils$object=function(a,b){for(const c in b)b[c]!==null&&Array.isArray(b[c])?a[c]=deepMerge$$module$build$src$core$utils$object(a[c]||[],b[c]):a[c]=b[c]!==null&&typeof b[c]===\"object\"?deepMerge$$module$build$src$core$utils$object(a[c]||Object.create(null),b[c]):b[c];return a};getWorkspaceById$$module$build$src$core$common=function(a){return WorkspaceDB_$$module$build$src$core$common[a]||null};\ngetAllWorkspaces$$module$build$src$core$common=function(){const a=[];for(const b in WorkspaceDB_$$module$build$src$core$common)a.push(WorkspaceDB_$$module$build$src$core$common[b]);return a};registerWorkspace$$module$build$src$core$common=function(a){WorkspaceDB_$$module$build$src$core$common[a.id]=a};unregisterWorkpace$$module$build$src$core$common=function(a){delete WorkspaceDB_$$module$build$src$core$common[a.id]};getMainWorkspace$$module$build$src$core$common=function(){return mainWorkspace$$module$build$src$core$common};\nsetMainWorkspace$$module$build$src$core$common=function(a){mainWorkspace$$module$build$src$core$common=a};getSelected$$module$build$src$core$common=function(){const a=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode();return a&&isSelectable$$module$build$src$core$interfaces$i_selectable(a)?a:null};setSelected$$module$build$src$core$common=function(a){$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)};\nfireSelectedEvent$$module$build$src$core$common=function(a){const b=getSelected$$module$build$src$core$common();let c,d,e,f;const g=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.SELECTED))((c=b==null?void 0:b.id)!=null?c:null,(d=a==null?void 0:a.id)!=null?d:null,(f=(e=a==null?void 0:a.workspace.id)!=null?e:b==null?void 0:b.workspace.id)!=null?f:\"\");fire$$module$build$src$core$events$utils(g)};getParentContainer$$module$build$src$core$common=function(){return parentContainer$$module$build$src$core$common};\nsetParentContainer$$module$build$src$core$common=function(a){parentContainer$$module$build$src$core$common=a};\nsvgResize$$module$build$src$core$common=function(a){for(;a.options.parentWorkspace;)a=a.options.parentWorkspace;const b=a.getParentSvg(),c=a.getCachedParentSvgSize();var d=b.parentElement;if(d instanceof HTMLElement){var e=d.offsetWidth;d=d.offsetHeight;c.width!==e&&(b.setAttribute(\"width\",e+\"px\"),a.setCachedParentSvgSize(e,null));c.height!==d&&(b.setAttribute(\"height\",d+\"px\"),a.setCachedParentSvgSize(null,d));a.resize()}};\ngetBlockTypeCounts$$module$build$src$core$common=function(a,b){const c=Object.create(null),d=a.getDescendants(!0);b&&(a=a.getNextBlock())&&(a=d.indexOf(a),d.splice(a,d.length-a));for(let e=0,f;f=d[e];e++)c[f.type]?c[f.type]++:c[f.type]=1;return c};jsonInitFactory$$module$build$src$core$common=function(a){return function(){this.jsonInit(a)}};defineBlocksWithJsonArray$$module$build$src$core$common=function(a){TEST_ONLY$$module$build$src$core$common.defineBlocksWithJsonArrayInternal(a)};\ndefineBlocksWithJsonArrayInternal$$module$build$src$core$common=function(a){$.defineBlocks$$module$build$src$core$common($.createBlockDefinitionsFromJsonArray$$module$build$src$core$common(a))};\n$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common=function(a){const b={};for(let c=0;c>>/g,a),content$$module$build$src$core$css=\"\",a=document.createElement(\"style\"),a.id=\"blockly-common-style\",b=document.createTextNode(b),a.appendChild(b),document.head.insertBefore(a,document.head.firstChild)))};getSize$$module$build$src$core$utils$style=function(a){return TEST_ONLY$$module$build$src$core$utils$style.getSizeInternal(a)};\ngetSizeInternal$$module$build$src$core$utils$style=function(a){if(getComputedStyle$$module$build$src$core$utils$style(a,\"display\")!==\"none\")return getSizeWithDisplay$$module$build$src$core$utils$style(a);const b=a.style,c=b.display,d=b.visibility,e=b.position;b.visibility=\"hidden\";b.position=\"absolute\";b.display=\"inline\";const f=a.offsetWidth;a=a.offsetHeight;b.display=c;b.position=e;b.visibility=d;return new Size$$module$build$src$core$utils$size(f,a)};\ngetSizeWithDisplay$$module$build$src$core$utils$style=function(a){return new Size$$module$build$src$core$utils$size(a.offsetWidth,a.offsetHeight)};getComputedStyle$$module$build$src$core$utils$style=function(a,b){a=window.getComputedStyle(a);return a[b]||a.getPropertyValue(b)};\ngetPageOffset$$module$build$src$core$utils$style=function(a){const b=new Coordinate$$module$build$src$core$utils$coordinate(0,0);a=a.getBoundingClientRect();var c=document.documentElement;c=new Coordinate$$module$build$src$core$utils$coordinate(window.pageXOffset||c.scrollLeft,window.pageYOffset||c.scrollTop);b.x=a.left+c.x;b.y=a.top+c.y;return b};\ngetViewportPageOffset$$module$build$src$core$utils$style=function(){const a=document.body,b=document.documentElement;return new Coordinate$$module$build$src$core$utils$coordinate(a.scrollLeft||b.scrollLeft,a.scrollTop||b.scrollTop)};\ngetBorderBox$$module$build$src$core$utils$style=function(a){const b=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderLeftWidth\")),c=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderRightWidth\")),d=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderTopWidth\"));a=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderBottomWidth\"));return new Rect$$module$build$src$core$utils$rect(d,a,b,c)};\nscrollIntoContainerView$$module$build$src$core$utils$style=function(a,b,c){a=getContainerOffsetToScrollInto$$module$build$src$core$utils$style(a,b,c);b.scrollLeft=a.x;b.scrollTop=a.y};\ngetContainerOffsetToScrollInto$$module$build$src$core$utils$style=function(a,b,c){var d=getPageOffset$$module$build$src$core$utils$style(a),e=getPageOffset$$module$build$src$core$utils$style(b),f=getBorderBox$$module$build$src$core$utils$style(b);const g=d.x-e.x-f.left;d=d.y-e.y-f.top;e=getSizeWithDisplay$$module$build$src$core$utils$style(a);a=b.clientWidth-e.width;e=b.clientHeight-e.height;f=b.scrollLeft;b=b.scrollTop;c?(f+=g-a/2,b+=d-e/2):(f+=Math.min(g,Math.max(g-a,0)),b+=Math.min(d,Math.max(d-\ne,0)));return new Coordinate$$module$build$src$core$utils$coordinate(f,b)};\ngetRelativeXY$$module$build$src$core$utils$svg_math=function(a){const b=new Coordinate$$module$build$src$core$utils$coordinate(0,0);var c=a.x&&a.getAttribute(\"x\");const d=a.y&&a.getAttribute(\"y\");c&&(b.x=parseInt(c));d&&(b.y=parseInt(d));if(c=(c=a.getAttribute(\"transform\"))&&c.match(XY_REGEX$$module$build$src$core$utils$svg_math))b.x+=Number(c[1]),c[3]&&(b.y+=Number(c[3]));(a=a.getAttribute(\"style\"))&&a.includes(\"translate\")&&(a=a.match(XY_STYLE_REGEX$$module$build$src$core$utils$svg_math))&&(b.x+=\nNumber(a[1]),a[3]&&(b.y+=Number(a[3])));return b};getInjectionDivXY$$module$build$src$core$utils$svg_math=function(a){let b=0,c=0;for(;a;){const d=getRelativeXY$$module$build$src$core$utils$svg_math(a);b+=d.x;c+=d.y;if((\" \"+(a.getAttribute(\"class\")||\"\")+\" \").includes(\" injectionDiv \"))break;a=a.parentNode}return new Coordinate$$module$build$src$core$utils$coordinate(b,c)};\ngetViewportBBox$$module$build$src$core$utils$svg_math=function(){const a=getViewportPageOffset$$module$build$src$core$utils$style();return new Rect$$module$build$src$core$utils$rect(a.y,document.documentElement.clientHeight+a.y,a.x,document.documentElement.clientWidth+a.x)};getDocumentScroll$$module$build$src$core$utils$svg_math=function(){const a=document.documentElement,b=window;return new Coordinate$$module$build$src$core$utils$coordinate(b.pageXOffset||a.scrollLeft,b.pageYOffset||a.scrollTop)};\nscreenToWsCoordinates$$module$build$src$core$utils$svg_math=function(a,b){var c=b.x;b=b.y;const d=a.getInjectionDiv().getBoundingClientRect();c=new Coordinate$$module$build$src$core$utils$coordinate(c-d.left,b-d.top);b=a.getOriginOffsetInPixels();return Coordinate$$module$build$src$core$utils$coordinate.difference(c,b).scale(1/a.scale)};\nwsToScreenCoordinates$$module$build$src$core$utils$svg_math=function(a,b){var c=b.scale(a.scale);b=c.x;c=c.y;const d=a.getInjectionDiv().getBoundingClientRect();a=a.getOriginOffsetInPixels();return new Coordinate$$module$build$src$core$utils$coordinate(b+d.left+a.x,c+d.top+a.y)};\ninjectDependencies$$module$build$src$core$utils$xml=function(a){({document:document$$module$build$src$core$utils$xml=document$$module$build$src$core$utils$xml,DOMParser:DOMParser$$module$build$src$core$utils$xml=DOMParser$$module$build$src$core$utils$xml,XMLSerializer:XMLSerializer$$module$build$src$core$utils$xml=XMLSerializer$$module$build$src$core$utils$xml}=a);domParser$$module$build$src$core$utils$xml=new DOMParser$$module$build$src$core$utils$xml;xmlSerializer$$module$build$src$core$utils$xml=\nnew XMLSerializer$$module$build$src$core$utils$xml};$.createElement$$module$build$src$core$utils$xml=function(a){return document$$module$build$src$core$utils$xml.createElementNS(NAME_SPACE$$module$build$src$core$utils$xml,a)};$.createTextNode$$module$build$src$core$utils$xml=function(a){return document$$module$build$src$core$utils$xml.createTextNode(a)};\n$.textToDom$$module$build$src$core$utils$xml=function(a){let b=domParser$$module$build$src$core$utils$xml.parseFromString(a,\"text/xml\");if(b&&b.documentElement&&!b.getElementsByTagName(\"parsererror\").length)return b.documentElement;if((b=domParser$$module$build$src$core$utils$xml.parseFromString(a,\"text/html\"))&&b.body.firstChild&&b.body.firstChild.nodeName.toLowerCase()===\"xml\")return b.body.firstChild;throw Error(`DOMParser was unable to parse: ${a}`);};\ndomToText$$module$build$src$core$utils$xml=function(a){return sanitizeText$$module$build$src$core$utils$xml(xmlSerializer$$module$build$src$core$utils$xml.serializeToString(a))};sanitizeText$$module$build$src$core$utils$xml=function(a){return a.replace(INVALID_CONTROL_CHARS$$module$build$src$core$utils$xml,b=>`&#${b.charCodeAt(0)};`)};\nconvertToolboxDefToJson$$module$build$src$core$utils$toolbox=function(a){if(!a)return null;if(a instanceof Element||typeof a===\"string\")a=parseToolboxTree$$module$build$src$core$utils$toolbox(a),a=convertToToolboxJson$$module$build$src$core$utils$toolbox(a);validateToolbox$$module$build$src$core$utils$toolbox(a);return a};\nvalidateToolbox$$module$build$src$core$utils$toolbox=function(a){const b=a.kind;a=a.contents;if(b&&b!==FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox&&b!==CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox)throw Error(\"Invalid toolbox kind \"+b+\". Please supply either \"+FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox+\" or \"+CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox);if(!a)throw Error(\"Toolbox must have a contents attribute.\");};\nconvertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox=function(a){return a?a.contents?a.contents:Array.isArray(a)&&a.length>0&&!a[0].nodeType?a:xmlToJsonArray$$module$build$src$core$utils$toolbox(a):[]};hasCategories$$module$build$src$core$utils$toolbox=function(a){return TEST_ONLY$$module$build$src$core$utils$toolbox.hasCategoriesInternal(a)};\nhasCategoriesInternal$$module$build$src$core$utils$toolbox=function(a){if(!a)return!1;const b=a.kind;return b?b===CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox:!!a.contents.filter(c=>c.kind.toUpperCase()===\"CATEGORY\").length};isCategoryCollapsible$$module$build$src$core$utils$toolbox=function(a){return a&&a.contents?!!a.contents.filter(function(b){return b.kind.toUpperCase()===\"CATEGORY\"}).length:!1};\nconvertToToolboxJson$$module$build$src$core$utils$toolbox=function(a){const b={contents:xmlToJsonArray$$module$build$src$core$utils$toolbox(a)};a instanceof Node&&addAttributes$$module$build$src$core$utils$toolbox(a,b);return b};\nxmlToJsonArray$$module$build$src$core$utils$toolbox=function(a){const b=[];let c=a.childNodes;c||(c=a);for(let d=0,e;e=c[d];d++){if(!e.tagName)continue;a={};const f=e.tagName.toUpperCase();a.kind=f;f===\"BLOCK\"?a.blockxml=e:e.childNodes&&e.childNodes.length>0&&(a.contents=xmlToJsonArray$$module$build$src$core$utils$toolbox(e));addAttributes$$module$build$src$core$utils$toolbox(e,a);b.push(a)}return b};\naddAttributes$$module$build$src$core$utils$toolbox=function(a,b){for(let c=0;c document.\");}else a instanceof Element&&(b=a);return b};\ngetStartPositionRect$$module$build$src$core$positionable_helpers=function(a,b,c,d,e,f){const g=f.scrollbar&&f.scrollbar.canScrollVertically();a.horizontal===horizontalPosition$$module$build$src$core$positionable_helpers.LEFT?(c=e.absoluteMetrics.left+c,g&&f.RTL&&(c+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness)):(c=e.absoluteMetrics.left+e.viewMetrics.width-b.width-c,g&&!f.RTL&&(c-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness));a.vertical===verticalPosition$$module$build$src$core$positionable_helpers.TOP?\na=e.absoluteMetrics.top+d:(a=e.absoluteMetrics.top+e.viewMetrics.height-b.height-d,f.scrollbar&&f.scrollbar.canScrollHorizontally()&&(a-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness));return new Rect$$module$build$src$core$utils$rect(a,a+b.height,c,c+b.width)};\ngetCornerOppositeToolbox$$module$build$src$core$positionable_helpers=function(a,b){return{horizontal:b.toolboxMetrics.position===Position$$module$build$src$core$utils$toolbox.LEFT||a.horizontalLayout&&!a.RTL?horizontalPosition$$module$build$src$core$positionable_helpers.RIGHT:horizontalPosition$$module$build$src$core$positionable_helpers.LEFT,vertical:b.toolboxMetrics.position===Position$$module$build$src$core$utils$toolbox.BOTTOM?verticalPosition$$module$build$src$core$positionable_helpers.TOP:verticalPosition$$module$build$src$core$positionable_helpers.BOTTOM}};\nbumpPositionRect$$module$build$src$core$positionable_helpers=function(a,b,c,d){const e=a.left,f=a.right-a.left,g=a.bottom-a.top;for(let h=0;hf.id!==a.id).map(f=>f.getRelativeToSurfaceXY());for(;commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster(Coordinate$$module$build$src$core$utils$coordinate.sum(c,d),e);)d.translate(b.RTL?-30:30,30);a.moveTo(Coordinate$$module$build$src$core$utils$coordinate.sum(c,\nd))};commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster=function(a,b){return b.some(c=>Math.abs(c.x-a.x)<=1&&Math.abs(c.y-a.y)<=1)};setRole$$module$build$src$core$utils$aria=function(a,b){a.setAttribute(ROLE_ATTRIBUTE$$module$build$src$core$utils$aria,b)};setState$$module$build$src$core$utils$aria=function(a,b,c){Array.isArray(c)&&(c=c.join(\" \"));a.setAttribute(ARIA_PREFIX$$module$build$src$core$utils$aria+b,`${c}`)};\nisSerializable$$module$build$src$core$interfaces$i_serializable=function(a){return a&&typeof a.saveState===\"function\"&&typeof a.loadState===\"function\"};\nqueueRender$$module$build$src$core$render_management=function(a){queueBlock$$module$build$src$core$render_management(a);if(alwaysImmediatelyRender$$module$build$src$core$render_management())return doRenders$$module$build$src$core$render_management(),Promise.resolve();afterRendersPromise$$module$build$src$core$render_management||(afterRendersPromise$$module$build$src$core$render_management=new Promise(b=>{afterRendersResolver$$module$build$src$core$render_management=b;animationRequestId$$module$build$src$core$render_management=\nwindow.requestAnimationFrame(()=>{doRenders$$module$build$src$core$render_management();b()})}));return afterRendersPromise$$module$build$src$core$render_management};finishQueuedRenders$$module$build$src$core$render_management=function(){return afterRendersPromise$$module$build$src$core$render_management?afterRendersPromise$$module$build$src$core$render_management:Promise.resolve()};\ntriggerQueuedRenders$$module$build$src$core$render_management=function(a){a||window.cancelAnimationFrame(animationRequestId$$module$build$src$core$render_management);doRenders$$module$build$src$core$render_management(a);!a&&afterRendersResolver$$module$build$src$core$render_management&&afterRendersResolver$$module$build$src$core$render_management()};alwaysImmediatelyRender$$module$build$src$core$render_management=function(){return JavaFx$$module$build$src$core$utils$useragent};\nqueueBlock$$module$build$src$core$render_management=function(a){dirtyBlocks$$module$build$src$core$render_management.add(a);eventGroups$$module$build$src$core$render_management.set(a,$.getGroup$$module$build$src$core$events$utils());const b=a.getParent();b?queueBlock$$module$build$src$core$render_management(b):rootBlocks$$module$build$src$core$render_management.add(a)};\ndoRenders$$module$build$src$core$render_management=function(a){const b=a?new Set([a]):new Set([...rootBlocks$$module$build$src$core$render_management].map(f=>f.workspace)),c=[...rootBlocks$$module$build$src$core$render_management].filter(shouldRenderRootBlock$$module$build$src$core$render_management).filter(f=>b.has(f.workspace));for(var d of c)renderBlock$$module$build$src$core$render_management(d);for(const f of b)f.resizeContents();for(var e of c)d=e.getRelativeToSurfaceXY(),e.updateComponentLocations(d);\nfor(const f of c)e=$.getGroup$$module$build$src$core$events$utils(),(d=eventGroups$$module$build$src$core$render_management.get(f))&&$.setGroup$$module$build$src$core$events$utils(d),f.bumpNeighbours(),$.setGroup$$module$build$src$core$events$utils(e);for(const f of c)dequeueBlock$$module$build$src$core$render_management(f);a||(afterRendersPromise$$module$build$src$core$render_management=null)};\ndequeueBlock$$module$build$src$core$render_management=function(a){rootBlocks$$module$build$src$core$render_management.delete(a);dirtyBlocks$$module$build$src$core$render_management.delete(a);eventGroups$$module$build$src$core$render_management.delete(a);for(const b of a.getChildren(!1))dequeueBlock$$module$build$src$core$render_management(b)};shouldRenderRootBlock$$module$build$src$core$render_management=function(a){return!a.isDisposed()&&!a.getParent()};\nrenderBlock$$module$build$src$core$render_management=function(a){if(dirtyBlocks$$module$build$src$core$render_management.has(a)&&a.initialized){for(const b of a.getChildren(!1))renderBlock$$module$build$src$core$render_management(b);a.renderEfficiently()}};alert$$module$build$src$core$dialog=function(a,b){alertImplementation$$module$build$src$core$dialog(a,b)};\nsetAlert$$module$build$src$core$dialog=function(a=defaultAlert$$module$build$src$core$dialog){alertImplementation$$module$build$src$core$dialog=a};confirm$$module$build$src$core$dialog=function(a,b){confirmImplementation$$module$build$src$core$dialog(a,b)};setConfirm$$module$build$src$core$dialog=function(a=defaultConfirm$$module$build$src$core$dialog){confirmImplementation$$module$build$src$core$dialog=a};\nprompt$$module$build$src$core$dialog=function(a,b,c){promptImplementation$$module$build$src$core$dialog(a,b,c)};setPrompt$$module$build$src$core$dialog=function(a=defaultPrompt$$module$build$src$core$dialog){promptImplementation$$module$build$src$core$dialog=a};toast$$module$build$src$core$dialog=function(a,b){toastImplementation$$module$build$src$core$dialog(a,b)};\nsetToast$$module$build$src$core$dialog=function(a=defaultToast$$module$build$src$core$dialog){toastImplementation$$module$build$src$core$dialog=a};isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks=function(a){return a&&typeof a.getProcedureDef===\"function\"};isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks=function(a){return a&&typeof a.getProcedureCall===\"function\"&&typeof a.renameProcedure===\"function\"};\nisVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model=function(a){return a.getVariableModel!==void 0};warn$$module$build$src$core$utils$deprecation=function(a,b,c,d){a=a+\" was deprecated in \"+b+\" and will be deleted in \"+c+\".\";d&&(a+=\"\\nUse \"+d+\" instead.\");previousWarnings$$module$build$src$core$utils$deprecation.has(a)||(previousWarnings$$module$build$src$core$utils$deprecation.add(a),console.warn(a))};\n$.allUsedVarModels$$module$build$src$core$variables=function(a){a=a.getAllBlocks(!1);const b=new Set;for(let c=0;c({kind:\"block\",type:d,gap:8,fields:generateVariableFieldJson$$module$build$src$core$variables(g)})));return a};\nxmlFlyoutCategory$$module$build$src$core$variables=function(a){let b=[];const c=document.createElement(\"button\");c.setAttribute(\"text\",\"%{BKY_NEW_VARIABLE}\");c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE\");a.registerButtonCallback(\"CREATE_VARIABLE\",function(d){createVariableButtonHandler$$module$build$src$core$variables(d.getTargetWorkspace())});b.push(c);a=flyoutCategoryBlocks$$module$build$src$core$variables(a);return b=b.concat(a)};\nflyoutCategoryBlocks$$module$build$src$core$variables=function(a){a=a.getVariableMap().getVariablesOfType(\"\");const b=[];if(a.length>0){var c=a[a.length-1];if(Blocks$$module$build$src$core$blocks.variables_set){var d=$.createElement$$module$build$src$core$utils$xml(\"block\");d.setAttribute(\"type\",\"variables_set\");d.setAttribute(\"gap\",Blocks$$module$build$src$core$blocks.math_change?\"8\":\"24\");d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c));b.push(d)}Blocks$$module$build$src$core$blocks.math_change&&\n(d=$.createElement$$module$build$src$core$utils$xml(\"block\"),d.setAttribute(\"type\",\"math_change\"),d.setAttribute(\"gap\",Blocks$$module$build$src$core$blocks.variables_get?\"20\":\"8\"),d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c)),c=$.textToDom$$module$build$src$core$utils$xml('1'),d.appendChild(c),b.push(d));if(Blocks$$module$build$src$core$blocks.variables_get){a.sort(compareByName$$module$build$src$core$variables);\nfor(let e=0,f;f=a[e];e++)c=$.createElement$$module$build$src$core$utils$xml(\"block\"),c.setAttribute(\"type\",\"variables_get\"),c.setAttribute(\"gap\",\"8\"),c.appendChild(generateVariableFieldDom$$module$build$src$core$variables(f)),b.push(c)}}return b};generateUniqueName$$module$build$src$core$variables=function(a){return TEST_ONLY$$module$build$src$core$variables.generateUniqueNameInternal(a)};\ngenerateUniqueNameInternal$$module$build$src$core$variables=function(a){return generateUniqueNameFromOptions$$module$build$src$core$variables(VAR_LETTER_OPTIONS$$module$build$src$core$variables.charAt(0),a.getVariableMap().getAllVariables().map(b=>b.getName()))};\ngenerateUniqueNameFromOptions$$module$build$src$core$variables=function(a,b){if(!b.length)return a;const c=VAR_LETTER_OPTIONS$$module$build$src$core$variables;let d=\"\",e=c.indexOf(a);for(;;){let f=!1;for(let g=0;gf.getVariableModel().getName());if(d&&(c=d.some(f=>f.toLowerCase()===a),d=d.some(f=>f.toLowerCase()===b),c&&d))return e.getName()}return null};\ncheckForConflictingParamWithLegacyProcedures$$module$build$src$core$variables=function(a,b,c){a=a.toLowerCase();b=b.toLowerCase();c=c.getAllBlocks(!1);for(const e of c){if(!isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(e))continue;c=e.getProcedureDef();var d=c[1];const f=d.some(g=>g.toLowerCase()===a);d=d.some(g=>g.toLowerCase()===b);if(f&&d)return c[0]}return null};\ngenerateVariableFieldDom$$module$build$src$core$variables=function(a){const b=$.createElement$$module$build$src$core$utils$xml(\"field\");b.setAttribute(\"name\",\"VAR\");b.setAttribute(\"id\",a.getId());b.setAttribute(\"variabletype\",a.getType());a=$.createTextNode$$module$build$src$core$utils$xml(a.getName());b.appendChild(a);return b};\n$.getOrCreateVariablePackage$$module$build$src$core$variables=function(a,b,c,d){let e=$.getVariable$$module$build$src$core$variables(a,b,c,d);e||(e=createVariable$$module$build$src$core$variables(a,b,c,d));return e};\n$.getVariable$$module$build$src$core$variables=function(a,b,c,d){const e=a.getPotentialVariableMap();let f=null;if(b&&(f=a.getVariableById(b),!f&&e&&(f=e.getVariableById(b)),f))return f;if(c){if(d===void 0)throw Error(\"Tried to look up a variable by name without a type\");f=a.getVariable(c,d);!f&&e&&(f=e.getVariable(c,d))}return f};\ncreateVariable$$module$build$src$core$variables=function(a,b,c,d){const e=a.getVariableMap(),f=a.getPotentialVariableMap();c||(c=generateUniqueName$$module$build$src$core$variables(a.isFlyout?a.targetWorkspace:a));return f?f.createVariable(c,d,b!=null?b:void 0):e.createVariable(c,d,b)};getAddedVariables$$module$build$src$core$variables=function(a,b){a=a.getAllVariables();const c=[];if(b.length!==a.length)for(let d=0;d=0;f--){const g=e[f];if(g.type===\"procedures_defnoreturn\"||g.type===\"procedures_defreturn\"){c=String(g.getFieldValue(\"NAME\"));d=$.Msg$$module$build$src$core$msg.CANNOT_DELETE_VARIABLE_PROCEDURE.replace(\"%1\",d).replace(\"%2\",c);alert$$module$build$src$core$dialog(d);return}g===c&&e.splice(f,1)}c&&e.length||e.length>1?(d=\n$.Msg$$module$build$src$core$msg.DELETE_VARIABLE_CONFIRMATION.replace(\"%1\",String(e.length+(c&&!c.workspace.isFlyout?1:0))).replace(\"%2\",d),confirm$$module$build$src$core$dialog(d,f=>{f&&b&&a.getVariableMap().deleteVariable(b)})):a.getVariableMap().deleteVariable(b)};\nsave$$module$build$src$core$serialization$blocks=function(a,{addCoordinates:b=!1,addInputBlocks:c=!0,addNextBlocks:d=!0,doFullSerialization:e=!0,saveIds:f=!0}={}){if(a.isInsertionMarker())return null;const g={type:a.type,id:f?a.id:void 0};b&&saveCoords$$module$build$src$core$serialization$blocks(a,g);saveAttributes$$module$build$src$core$serialization$blocks(a,g);saveExtraState$$module$build$src$core$serialization$blocks(a,g,e);saveIcons$$module$build$src$core$serialization$blocks(a,g,e);saveFields$$module$build$src$core$serialization$blocks(a,\ng,e);c&&saveInputBlocks$$module$build$src$core$serialization$blocks(a,g,e,f);d&&saveNextBlocks$$module$build$src$core$serialization$blocks(a,g,e,f);return g};\nsaveAttributes$$module$build$src$core$serialization$blocks=function(a,b){a.isCollapsed()&&(b.collapsed=!0);a.isEnabled()||(b.disabledReasons=Array.from(a.getDisabledReasons()));a.isOwnDeletable()||(b.deletable=!1);a.isOwnMovable()||(b.movable=!1);a.isOwnEditable()||(b.editable=!1);a.inputsInline!==void 0&&a.inputsInline!==a.inputsInlineDefault&&(b.inline=a.inputsInline);a.data&&(b.data=a.data)};\nsaveCoords$$module$build$src$core$serialization$blocks=function(a,b){const c=a.workspace;a=a.getRelativeToSurfaceXY();b.x=Math.round(c.RTL?c.getWidth()-a.x:a.x);b.y=Math.round(a.y)};saveExtraState$$module$build$src$core$serialization$blocks=function(a,b,c){a.saveExtraState?(a=a.saveExtraState(c),a!==null&&(b.extraState=a)):a.mutationToDom&&(a=a.mutationToDom(),a!==null&&(b.extraState=domToText$$module$build$src$core$xml(a).replace(' xmlns=\"https://developers.google.com/blockly/xml\"',\"\")))};\nsaveIcons$$module$build$src$core$serialization$blocks=function(a,b,c){const d=Object.create(null);for(const e of a.getIcons())isSerializable$$module$build$src$core$interfaces$i_serializable(e)&&(a=e.saveState(c))&&(d[e.getType().toString()]=a);Object.keys(d).length&&(b.icons=d)};saveFields$$module$build$src$core$serialization$blocks=function(a,b,c){const d=Object.create(null);for(const e of a.getFields())e.isSerializable()&&(d[e.name]=e.saveState(c));Object.keys(d).length&&(b.fields=d)};\nsaveInputBlocks$$module$build$src$core$serialization$blocks=function(a,b,c,d){const e=Object.create(null);for(let f=0;f{k.disposed||k.setConnectionTracking(!0)},\n1)}return h};\nappendPrivate$$module$build$src$core$serialization$blocks=function(a,b,{parentConnection:c,isShadow:d=!1}={}){if(!a.type)throw new MissingBlockType$$module$build$src$core$serialization$exceptions(a);const e=b.newBlock(a.type,a.id);e.setShadow(d);loadCoords$$module$build$src$core$serialization$blocks(e,a);loadAttributes$$module$build$src$core$serialization$blocks(e,a);loadExtraState$$module$build$src$core$serialization$blocks(e,a);tryToConnectParent$$module$build$src$core$serialization$blocks(c,e,\na);loadIcons$$module$build$src$core$serialization$blocks(e,a);loadFields$$module$build$src$core$serialization$blocks(e,a);loadInputBlocks$$module$build$src$core$serialization$blocks(e,a);loadNextBlocks$$module$build$src$core$serialization$blocks(e,a);initBlock$$module$build$src$core$serialization$blocks(e,b.rendered);return e};\ncheckNewVariables$$module$build$src$core$serialization$blocks=function(a,b){if(isEnabled$$module$build$src$core$events$utils())for(a=getAddedVariables$$module$build$src$core$variables(a,b),b=0;bb&&(b=c[d].length);var e=-Infinity;let f,g=1;do{d=e;f=a;a=[];e=c.length/g;let h=1;for(let k=0;kd);return f};\nwrapScore$$module$build$src$core$utils$string=function(a,b,c){const d=[0],e=[];for(var f=0;f1&&d[d.length-1]<=d[d.length-2]&&(b+=.5);return b};\nwrapMutate$$module$build$src$core$utils$string=function(a,b,c){let d=wrapScore$$module$build$src$core$utils$string(a,b,c),e;for(let f=0;fd&&(d=h,e=g)}return e?wrapMutate$$module$build$src$core$utils$string(a,e,c):b};\nwrapToText$$module$build$src$core$utils$string=function(a,b){const c=[];for(let d=0;dRADIUS_OK$$module$build$src$core$tooltip&&hide$$module$build$src$core$tooltip()}else poisonedElement$$module$build$src$core$tooltip!==element$$module$build$src$core$tooltip&&\n(clearTimeout(showPid$$module$build$src$core$tooltip),lastX$$module$build$src$core$tooltip=a.pageX,lastY$$module$build$src$core$tooltip=a.pageY,showPid$$module$build$src$core$tooltip=setTimeout(show$$module$build$src$core$tooltip,HOVER_MS$$module$build$src$core$tooltip))};dispose$$module$build$src$core$tooltip=function(){poisonedElement$$module$build$src$core$tooltip=element$$module$build$src$core$tooltip=null;hide$$module$build$src$core$tooltip()};\nhide$$module$build$src$core$tooltip=function(){visible$$module$build$src$core$tooltip&&(visible$$module$build$src$core$tooltip=!1,containerDiv$$module$build$src$core$tooltip&&(containerDiv$$module$build$src$core$tooltip.style.display=\"none\"));showPid$$module$build$src$core$tooltip&&(clearTimeout(showPid$$module$build$src$core$tooltip),showPid$$module$build$src$core$tooltip=0)};\nblock$$module$build$src$core$tooltip=function(){hide$$module$build$src$core$tooltip();blocked$$module$build$src$core$tooltip=!0};unblock$$module$build$src$core$tooltip=function(){blocked$$module$build$src$core$tooltip=!1};\nrenderContent$$module$build$src$core$tooltip=function(){containerDiv$$module$build$src$core$tooltip&&element$$module$build$src$core$tooltip&&(typeof customTooltip$$module$build$src$core$tooltip===\"function\"?customTooltip$$module$build$src$core$tooltip(containerDiv$$module$build$src$core$tooltip,element$$module$build$src$core$tooltip):renderDefaultContent$$module$build$src$core$tooltip())};\nrenderDefaultContent$$module$build$src$core$tooltip=function(){var a=getTooltipOfObject$$module$build$src$core$tooltip(element$$module$build$src$core$tooltip);a=$.wrap$$module$build$src$core$utils$string(a,LIMIT$$module$build$src$core$tooltip);a=a.split(\"\\n\");for(let b=0;bc+window.scrollY&&(e-=containerDiv$$module$build$src$core$tooltip.offsetHeight+\n2*OFFSET_Y$$module$build$src$core$tooltip);a?d=Math.max(MARGINS$$module$build$src$core$tooltip-window.scrollX,d):d+containerDiv$$module$build$src$core$tooltip.offsetWidth>b+window.scrollX-2*MARGINS$$module$build$src$core$tooltip&&(d=b-containerDiv$$module$build$src$core$tooltip.offsetWidth-2*MARGINS$$module$build$src$core$tooltip);return{x:d,y:e}};\nshow$$module$build$src$core$tooltip=function(){if(!blocked$$module$build$src$core$tooltip&&(poisonedElement$$module$build$src$core$tooltip=element$$module$build$src$core$tooltip,containerDiv$$module$build$src$core$tooltip)){containerDiv$$module$build$src$core$tooltip.textContent=\"\";renderContent$$module$build$src$core$tooltip();var a=element$$module$build$src$core$tooltip.RTL;containerDiv$$module$build$src$core$tooltip.style.direction=a?\"rtl\":\"ltr\";containerDiv$$module$build$src$core$tooltip.style.display=\n\"block\";visible$$module$build$src$core$tooltip=!0;var {x:b,y:c}=getPosition$$module$build$src$core$tooltip(a);containerDiv$$module$build$src$core$tooltip.style.left=b+\"px\";containerDiv$$module$build$src$core$tooltip.style.top=c+\"px\"}};getHsvSaturation$$module$build$src$core$utils$colour=function(){return hsvSaturation$$module$build$src$core$utils$colour};setHsvSaturation$$module$build$src$core$utils$colour=function(a){hsvSaturation$$module$build$src$core$utils$colour=a};\ngetHsvValue$$module$build$src$core$utils$colour=function(){return hsvValue$$module$build$src$core$utils$colour};setHsvValue$$module$build$src$core$utils$colour=function(a){hsvValue$$module$build$src$core$utils$colour=a};\nparse$$module$build$src$core$utils$colour=function(a){a=`${a}`.toLowerCase().trim();var b=names$$module$build$src$core$utils$colour[a];if(b)return b;b=a.substring(0,2)===\"0x\"?\"#\"+a.substring(2):a;b=b[0]===\"#\"?b:\"#\"+b;if(/^#[0-9a-f]{6}$/.test(b))return b;if(/^#[0-9a-f]{3}$/.test(b))return[\"#\",b[1],b[1],b[2],b[2],b[3],b[3]].join(\"\");var c=a.match(/^(?:rgb)?\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/);return c&&(a=Number(c[1]),b=Number(c[2]),c=Number(c[3]),a>=0&&a<256&&b>=0&&b<256&&c>=0&&c<256)?rgbToHex$$module$build$src$core$utils$colour(a,\nb,c):null};rgbToHex$$module$build$src$core$utils$colour=function(a,b,c){b=a<<16|b<<8|c;return a<16?\"#\"+(16777216|b).toString(16).substr(1):\"#\"+b.toString(16)};hexToRgb$$module$build$src$core$utils$colour=function(a){a=parse$$module$build$src$core$utils$colour(a);if(!a)return[0,0,0];a=parseInt(a.substr(1),16);return[a>>16,a>>8&255,a&255]};\nhsvToHex$$module$build$src$core$utils$colour=function(a,b,c){let d=0,e=0,f=0;if(b===0)f=e=d=c;else{const g=Math.floor(a/60),h=a/60-g;a=c*(1-b);const k=c*(1-b*h);b=c*(1-b*(1-h));switch(g){case 1:d=k;e=c;f=a;break;case 2:d=a;e=c;f=b;break;case 3:d=a;e=k;f=c;break;case 4:d=b;e=a;f=c;break;case 5:d=c;e=a;f=k;break;case 6:case 0:d=c,e=b,f=a}}return rgbToHex$$module$build$src$core$utils$colour(Math.floor(d),Math.floor(e),Math.floor(f))};\nblend$$module$build$src$core$utils$colour=function(a,b,c){a=parse$$module$build$src$core$utils$colour(a);if(!a)return null;b=parse$$module$build$src$core$utils$colour(b);if(!b)return null;a=hexToRgb$$module$build$src$core$utils$colour(a);b=hexToRgb$$module$build$src$core$utils$colour(b);return rgbToHex$$module$build$src$core$utils$colour(Math.round(b[0]+c*(a[0]-b[0])),Math.round(b[1]+c*(a[1]-b[1])),Math.round(b[2]+c*(a[2]-b[2])))};\nhueToHex$$module$build$src$core$utils$colour=function(a){return hsvToHex$$module$build$src$core$utils$colour(a,hsvSaturation$$module$build$src$core$utils$colour,hsvValue$$module$build$src$core$utils$colour*255)};\ntokenizeInterpolationInternal$$module$build$src$core$utils$parsing=function(a,b,c){const d=[];var e=a.split(\"\");e.push(\"\");var f=0;a=[];let g=null;for(let l=0;l=a.bottom?b.top-c.height:b.bottom};isRepositionable$$module$build$src$core$widgetdiv=function(a){return!(a==null||!a.repositionForWindowResize)};repositionForWindowResize$$module$build$src$core$widgetdiv=function(){isRepositionable$$module$build$src$core$widgetdiv(owner$$module$build$src$core$widgetdiv)&&owner$$module$build$src$core$widgetdiv.repositionForWindowResize()||hide$$module$build$src$core$widgetdiv()};\ngetCurrentBlock$$module$build$src$core$contextmenu=function(){return currentBlock$$module$build$src$core$contextmenu};setCurrentBlock$$module$build$src$core$contextmenu=function(a){currentBlock$$module$build$src$core$contextmenu=a};\nshow$$module$build$src$core$contextmenu=function(a,b,c,d,e){show$$module$build$src$core$widgetdiv(dummyOwner$$module$build$src$core$contextmenu,c,dispose$$module$build$src$core$contextmenu,d);if(b.length){e||(a instanceof PointerEvent?e=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):(console.warn(\"Context menu opened with keyboard but no location given\"),e=new Coordinate$$module$build$src$core$utils$coordinate(0,0)));var f=populate_$$module$build$src$core$contextmenu(b,\nc,a,e);menu_$$module$build$src$core$contextmenu=f;position_$$module$build$src$core$contextmenu(f,c,e);setTimeout(function(){f.focus()},1);currentBlock$$module$build$src$core$contextmenu=null}else hide$$module$build$src$core$contextmenu()};\npopulate_$$module$build$src$core$contextmenu=function(a,b,c,d){const e=new Menu$$module$build$src$core$menu;e.setRole(Role$$module$build$src$core$utils$aria.MENU);for(let f=0;f{setTimeout(()=>{g.callback(g.scope,c,l,d)},0)})},{})}return e};\nposition_$$module$build$src$core$contextmenu=function(a,b,c){const d=getViewportBBox$$module$build$src$core$utils$svg_math();c=new Rect$$module$build$src$core$utils$rect(c.y+d.top,c.y+d.top,c.x+d.left,c.x+d.left);createWidget_$$module$build$src$core$contextmenu(a);const e=a.getSize();b&&(c.left+=e.width,c.right+=e.width,d.left+=e.width,d.right+=e.width);positionWithAnchor$$module$build$src$core$widgetdiv(d,c,e,b);a.focus()};\ncreateWidget_$$module$build$src$core$contextmenu=function(a){var b=getDiv$$module$build$src$core$widgetdiv();if(!b)throw Error(\"Attempting to create a context menu when widget div is null\");b=a.render(b);addClass$$module$build$src$core$utils$dom(b,\"blocklyContextMenu\");conditionalBind$$module$build$src$core$browser_events(b,\"contextmenu\",null,haltPropagation$$module$build$src$core$contextmenu);a.focus()};haltPropagation$$module$build$src$core$contextmenu=function(a){a.preventDefault();a.stopPropagation()};\nhide$$module$build$src$core$contextmenu=function(){hideIfOwner$$module$build$src$core$widgetdiv(dummyOwner$$module$build$src$core$contextmenu);currentBlock$$module$build$src$core$contextmenu=null};dispose$$module$build$src$core$contextmenu=function(){menu_$$module$build$src$core$contextmenu&&(menu_$$module$build$src$core$contextmenu.dispose(),menu_$$module$build$src$core$contextmenu=null)};\n$.callbackFactory$$module$build$src$core$contextmenu=function(a,b){return()=>{$.disable$$module$build$src$core$events$utils();let c;try{c=b instanceof Element?domToBlockInternal$$module$build$src$core$xml(b,a.workspace):appendInternal$$module$build$src$core$serialization$blocks(b,a.workspace);const d=a.getRelativeToSurfaceXY();d.x=a.RTL?d.x-$.config$$module$build$src$core$config.snapRadius:d.x+$.config$$module$build$src$core$config.snapRadius;d.y+=$.config$$module$build$src$core$config.snapRadius*\n2;c.moveBy(d.x,d.y)}finally{$.enable$$module$build$src$core$events$utils()}isEnabled$$module$build$src$core$events$utils()&&!c.isShadow()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(c));$.getFocusManager$$module$build$src$core$focus_manager().focusNode(c);return c}};\nmouseToWorkspacePoint$$module$build$src$core$utils$drag=function(a,b){b=mouseToSvg$$module$build$src$core$browser_events(b,a.getParentSvg(),a.getInverseScreenCTM());b.x/=a.scale;b.y/=a.scale;return b};start$$module$build$src$core$utils$drag=function(a,b,c){b=mouseToWorkspacePoint$$module$build$src$core$utils$drag(a,b);workspaceToDragDelta$$module$build$src$core$utils$drag.set(a,Coordinate$$module$build$src$core$utils$coordinate.difference(c,b))};\nmove$$module$build$src$core$utils$drag=function(a,b){b=mouseToWorkspacePoint$$module$build$src$core$utils$drag(a,b);a=workspaceToDragDelta$$module$build$src$core$utils$drag.get(a);if(!a)throw Error(\"Drag not initialized\");return Coordinate$$module$build$src$core$utils$coordinate.sum(a,b)};\nworkspaceToDom$$module$build$src$core$xml=function(a,b=!1){const c=$.createElement$$module$build$src$core$utils$xml(\"xml\");var d=variablesToDom$$module$build$src$core$xml($.allUsedVarModels$$module$build$src$core$variables(a));d.hasChildNodes()&&c.appendChild(d);for(const e of a.getTopComments())c.appendChild(saveWorkspaceComment$$module$build$src$core$xml(e,b));a=a.getTopBlocks(!0);for(d=0;d/g,\"<$1$2>\")};\ndomToPrettyText$$module$build$src$core$xml=function(a){a=domToText$$module$build$src$core$xml(a).split(\"<\");let b=\"\";for(let c=1;c\"&&(b+=\" \")}a=a.join(\"\\n\");a=a.replace(/(<(\\w+)\\b[^>]*>[^\\n]*)\\n *<\\/\\2>/g,\"$1\");return a.replace(/^\\n/,\"\")};\nclearWorkspaceAndLoadFromXml$$module$build$src$core$xml=function(a,b){b.setResizesEnabled(!1);b.clear();a=$.domToWorkspace$$module$build$src$core$xml(a,b);b.setResizesEnabled(!0);return a};\n$.domToWorkspace$$module$build$src$core$xml=function(a,b){let c=0;b.RTL&&(c=b.getWidth());const d=[];startTextWidthCache$$module$build$src$core$utils$dom();const e=$.getGroup$$module$build$src$core$events$utils();e||$.setGroup$$module$build$src$core$events$utils(!0);b.setResizesEnabled&&b.setResizesEnabled(!1);let f=!0;try{for(let g=0,h;h=a.childNodes[g];g++){const k=h.nodeName.toLowerCase(),l=h;if(k===\"block\"||k===\"shadow\"&&!getRecordUndo$$module$build$src$core$events$utils()){const m=domToBlockInternal$$module$build$src$core$xml(l,\nb);d.push(m.id);let n;const p=parseInt((n=l.getAttribute(\"x\"))!=null?n:\"10\",10);let r;const q=parseInt((r=l.getAttribute(\"y\"))!=null?r:\"10\",10);isNaN(p)||isNaN(q)||m.moveBy(b.RTL?c-p:p,q,[\"create\"]);f=!1}else{if(k===\"shadow\")throw TypeError(\"Shadow block cannot be a top-level block.\");if(k===\"comment\")loadWorkspaceComment$$module$build$src$core$xml(l,b);else if(k===\"variables\"){if(f)domToVariables$$module$build$src$core$xml(l,b);else throw Error(\"'variables' tag must exist once before block and shadow tag elements in the workspace XML, but it was found in another location.\");\nf=!1}}}}finally{$.setGroup$$module$build$src$core$events$utils(e),b.setResizesEnabled&&b.setResizesEnabled(!0),b.rendered&&triggerQueuedRenders$$module$build$src$core$render_management(),stopTextWidthCache$$module$build$src$core$utils$dom()}fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.FINISHED_LOADING))(b));return d};\nloadWorkspaceComment$$module$build$src$core$xml=function(a,b){var c;const d=(c=a.getAttribute(\"id\"))!=null?c:void 0;c=b.rendered?new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(b,d):new WorkspaceComment$$module$build$src$core$comments$workspace_comment(b,d);var e;c.setText((e=a.textContent)!=null?e:\"\");var f;e=parseInt((f=a.getAttribute(\"x\"))!=null?f:\"\",10);let g;f=parseInt((g=a.getAttribute(\"y\"))!=null?g:\"\",10);isNaN(e)||isNaN(f)||(e=b.RTL?b.getWidth()-e:e,\nc.moveTo(new Coordinate$$module$build$src$core$utils$coordinate(e,f)));var h;b=parseInt((h=a.getAttribute(\"w\"))!=null?h:\"\",10);let k;h=parseInt((k=a.getAttribute(\"h\"))!=null?k:\"\",10);isNaN(b)||isNaN(h)||c.setSize(new Size$$module$build$src$core$utils$size(b,h));a.getAttribute(\"collapsed\")===\"true\"&&c.setCollapsed(!0);a.getAttribute(\"editable\")===\"false\"&&c.setEditable(!1);a.getAttribute(\"movable\")===\"false\"&&c.setMovable(!1);a.getAttribute(\"deletable\")===\"false\"&&c.setDeletable(!1);return c};\nappendDomToWorkspace$$module$build$src$core$xml=function(a,b){if(!b.getBlocksBoundingBox)return $.domToWorkspace$$module$build$src$core$xml(a,b);var c=b.getBlocksBoundingBox();a=$.domToWorkspace$$module$build$src$core$xml(a,b);if(c&&c.top!==c.bottom){var d=c.bottom;c=b.RTL?c.right:c.left;var e=Infinity;let f=-Infinity,g=Infinity;for(let h=0;hf&&(f=k.x)}d=d-g+10;c=b.RTL?c-f:c-e;for(e=0;e=0;g--)f[g].initSvg();for(let g=f.length-1;g>=0;g--)f[g].queueRender();setTimeout(function(){e.disposed||e.setConnectionTracking(!0)},1);b.resizeContents()}else{const e=d.getDescendants(!1);for(let f=e.length-\n1;f>=0;f--)e[f].initModel()}}finally{$.enable$$module$build$src$core$events$utils()}if(isEnabled$$module$build$src$core$events$utils()){a=getAddedVariables$$module$build$src$core$variables(b,c);for(b=0;b{isNaN(n)||isNaN(r)||(n=b.workspace.RTL?b.workspace.getWidth()-(n+h):n,q.setBubbleLocation(new Coordinate$$module$build$src$core$utils$coordinate(n,r)));q.setBubbleVisible(f)},1)}};applyDataTagNodes$$module$build$src$core$xml=function(a,b){for(let c=0;c100)){var b=a.workspace,c=a.getSvgRoot();b.getAudioManager().play(\"delete\");var d=a.getRelativeToSurfaceXY(),e=c.cloneNode(!0);e.setAttribute(\"transform\",\"translate(\"+d.x+\",\"+d.y+\")\");var f;(f=b.getLayerManager())==null||f.appendToAnimationLayer({getSvgRoot:()=>e});disposeUiStep$$module$build$src$core$block_animations(e,{x:d.x,y:d.y,width:a.width,height:a.height},b.RTL,new Date)}};\ndisposeUiStep$$module$build$src$core$block_animations=function(a,b,c,d){const e=((new Date).getTime()-d.getTime())/150;e>1?removeNode$$module$build$src$core$utils$dom(a):(a.setAttribute(\"transform\",\"translate(\"+(b.x+(c?-1:1)*b.width/2*e)+\",\"+(b.y+b.height/2*e)+\") scale(\"+(1-e)+\")\"),setTimeout(disposeUiStep$$module$build$src$core$block_animations,10,a,b,c,d))};\nconnectionUiEffect$$module$build$src$core$block_animations=function(a){var b=a.workspace;const c=b.scale;b.getAudioManager().play(\"click\");if(!(c<1)){var d=b.getSvgXY(a.getSvgRoot());a.outputConnection?(d.x+=(a.RTL?3:-3)*c,d.y+=13*c):a.previousConnection&&(d.x+=(a.RTL?-23:23)*c,d.y+=3*c);var e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CIRCLE,{cx:d.x,cy:d.y,r:0,fill:\"none\",stroke:\"#888\",\"stroke-width\":10},b.getParentSvg());a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.ANIMATE,\n{id:\"animationCircle\",begin:\"indefinite\",attributeName:\"r\",dur:\"150ms\",from:0,to:25*c},e);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.ANIMATE,{id:\"animationOpacity\",begin:\"indefinite\",attributeName:\"opacity\",dur:\"150ms\",from:1,to:0},e);a.beginElement();b.beginElement();setTimeout(()=>void removeNode$$module$build$src$core$utils$dom(e),150)}};\ndisconnectUiEffect$$module$build$src$core$block_animations=function(a){disconnectUiStop$$module$build$src$core$block_animations();a.workspace.getAudioManager().play(\"disconnect\");if(!(a.workspace.scale<1)){var b=a.getHeightWidth().height;b=Math.atan(10/b)/Math.PI*180;a.RTL||(b*=-1);wobblingBlock$$module$build$src$core$block_animations=a;disconnectUiStep$$module$build$src$core$block_animations(a,b,new Date,0)}};\ndisconnectUiStep$$module$build$src$core$block_animations=function(a,b,c,d){const e=[.66,1,.66,0,-.66,-1,-.66,0];let f=\"\";c.getTime()+200>(new Date).getTime()&&(f=`skewX(${Math.round(e[d%e.length]*b)})`,disconnectPid$$module$build$src$core$block_animations=setTimeout(disconnectUiStep$$module$build$src$core$block_animations,15,a,b,c,d+1));a.getSvgRoot().setAttribute(\"transform\",`${a.getTranslation()} ${f}`)};\ndisconnectUiStop$$module$build$src$core$block_animations=function(){wobblingBlock$$module$build$src$core$block_animations&&(disconnectPid$$module$build$src$core$block_animations&&(clearTimeout(disconnectPid$$module$build$src$core$block_animations),disconnectPid$$module$build$src$core$block_animations=null),wobblingBlock$$module$build$src$core$block_animations.getSvgRoot().setAttribute(\"transform\",wobblingBlock$$module$build$src$core$block_animations.getTranslation()),wobblingBlock$$module$build$src$core$block_animations=\nnull)};\nmoveBlockToNotConflict$$module$build$src$core$clipboard$block_paster=function(a,b){a.workspace.RTL&&(b.x=a.workspace.getWidth()-b.x);const c=a.workspace,d=$.config$$module$build$src$core$config.snapRadius,e=Coordinate$$module$build$src$core$utils$coordinate.difference(b,a.getRelativeToSurfaceXY()),f=new Coordinate$$module$build$src$core$utils$coordinate(0,0),g=c.getAllBlocks(!1).filter(h=>h.id!=a.id).map(h=>h.getRelativeToSurfaceXY());for(;blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster(Coordinate$$module$build$src$core$utils$coordinate.sum(b,f),\ng)||blockIsInSnapRadius$$module$build$src$core$clipboard$block_paster(a,Coordinate$$module$build$src$core$utils$coordinate.sum(e,f),d);)c.RTL?f.translate(-d,d*2):f.translate(d,d*2);a.moveTo(Coordinate$$module$build$src$core$utils$coordinate.sum(b,f))};blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster=function(a,b){return b.some(c=>Math.abs(c.x-a.x)<=1&&Math.abs(c.y-a.y)<=1)};\nblockIsInSnapRadius$$module$build$src$core$clipboard$block_paster=function(a,b,c){return a.getConnections_(!1).some(d=>!!d.closest(c,b).connection)};\nbumpObjectIntoBounds$$module$build$src$core$bump_objects=function(a,b,c){const d=c.getBoundingRectangle(),e=d.right-d.left,f=clamp$$module$build$src$core$utils$math(b.top,d.top,b.top+b.height-(d.bottom-d.top))-d.top;let g=b.left;b=b.left+b.width-e;a.RTL?g=Math.min(b,g):b=Math.max(g,b);return(a=clamp$$module$build$src$core$utils$math(g,d.left,b)-d.left)||f?(c.moveBy(a,f,[\"inbounds\"]),!0):!1};\nbumpIntoBoundsHandler$$module$build$src$core$bump_objects=function(a){return b=>{var c=a.getMetricsManager();if(c.hasFixedEdges()&&!a.isDragging()){var d;if(BUMP_EVENTS$$module$build$src$core$events$type.includes((d=b.type)!=null?d:\"\")){d=c.getScrollMetrics(!0);const e=extractObjectFromEvent$$module$build$src$core$bump_objects(a,b);e&&(c=$.getGroup$$module$build$src$core$events$utils()||!1,$.setGroup$$module$build$src$core$events$utils(b.group),bumpObjectIntoBounds$$module$build$src$core$bump_objects(a,\nd,e)&&!b.group&&console.warn(\"Moved object in bounds but there was no event group. This may break undo.\"),$.setGroup$$module$build$src$core$events$utils(c))}else isViewportChange$$module$build$src$core$events$predicates(b)&&b.scale&&b.oldScale&&b.scale>b.oldScale&&bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects(a)}}};\nextractObjectFromEvent$$module$build$src$core$bump_objects=function(a,b){let c=null;switch(b.type){case EventType$$module$build$src$core$events$type.BLOCK_CREATE:case EventType$$module$build$src$core$events$type.BLOCK_MOVE:(c=a.getBlockById(b.blockId))&&(c=c.getRootBlock());break;case EventType$$module$build$src$core$events$type.COMMENT_CREATE:case EventType$$module$build$src$core$events$type.COMMENT_MOVE:case EventType$$module$build$src$core$events$type.COMMENT_RESIZE:c=a.getCommentById(b.commentId)}return c};\nbumpTopObjectsIntoBounds$$module$build$src$core$bump_objects=function(a){var b=a.getMetricsManager();if(b.hasFixedEdges()&&!a.isDragging()){b=b.getScrollMetrics(!0);var c=a.getTopBoundedElements();for(let d=0,e;e=c[d];d++)bumpObjectIntoBounds$$module$build$src$core$bump_objects(a,b,e)}};isDeletable$$module$build$src$core$interfaces$i_deletable=function(a){return a&&typeof a.isDeletable===\"function\"&&typeof a.dispose===\"function\"&&typeof a.setDeleteStyle===\"function\"};\ngetBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){const c=a.getIcons();for(const d of a.inputList){if(!d.isVisible())continue;c.push(...d.fieldRow);let e;if((e=d.connection)==null?0:e.targetBlock())if(a=d.connection.targetBlock(),d.connection.type!==ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||b)c.push(a);else{let f;(a=(f=a.lastConnectionInStack(!1))==null?void 0:f.getSourceBlock())&&c.push(a)}else{let f;((f=d.connection)==\nnull?void 0:f.type)===ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE&&c.push(d.connection)}}return c};\nnavigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){const c=a.workspace.getTopBoundedElements(!0).filter(e=>isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(e));a=c.indexOf(a instanceof BlockSvg$$module$build$src$core$block_svg?a.getRootBlock():a)+b;let d=null;a>=0&&a=c.length&&(d=c[0]);if(b<0&&d instanceof BlockSvg$$module$build$src$core$block_svg){let e,f;return(f=(e=d.lastConnectionInStack(!1))==null?\nvoid 0:e.getSourceBlock())!=null?f:d}return d};\nnavigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){var c;let d;const e=a instanceof BlockSvg$$module$build$src$core$block_svg?(d=(c=a.outputConnection)==null?void 0:c.targetBlock())!=null?d:a.getSurroundParent():a.getSourceBlock();if(!(e instanceof BlockSvg$$module$build$src$core$block_svg))return null;c=getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy(e,b>0);a=c.indexOf(a);if(a===-1)return null;b=a+b;return b>=0&&b!d.getReturnTypes()).map(d=>[d.getName(),d.getParameters().map(e=>e.getName()),!1]);a.getBlocksByType(\"procedures_defnoreturn\",!1).forEach(d=>{!isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(d)&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&b.push(d.getProcedureDef())});const c=a.getProcedureMap().getProcedures().filter(d=>\n!!d.getReturnTypes()).map(d=>[d.getName(),d.getParameters().map(e=>e.getName()),!0]);a.getBlocksByType(\"procedures_defreturn\",!1).forEach(d=>{!isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(d)&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&c.push(d.getProcedureDef())});b.sort(procTupleComparator$$module$build$src$core$procedures);c.sort(procTupleComparator$$module$build$src$core$procedures);return[b,c]};\nprocTupleComparator$$module$build$src$core$procedures=function(a,b){return a[0].localeCompare(b[0],void 0,{sensitivity:\"base\"})};$.findLegalName$$module$build$src$core$procedures=function(a,b){if(b.isInFlyout)return a;for(a=a||$.Msg$$module$build$src$core$msg.UNNAMED_KEY||\"unnamed\";!isLegalName$$module$build$src$core$procedures(a,b.workspace,b);){const c=a.match(/^(.*?)(\\d+)$/);a=c?c[1]+(parseInt(c[2])+1):a+\"2\"}return a};\nisLegalName$$module$build$src$core$procedures=function(a,b,c){return!isNameUsed$$module$build$src$core$procedures(a,b,c)};\nisNameUsed$$module$build$src$core$procedures=function(a,b,c){for(const d of b.getAllBlocks(!1))if(d!==c&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&$.Names$$module$build$src$core$names.equals(d.getProcedureDef()[0],a))return!0;c=c&&isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(c)?c==null?void 0:c.getProcedureModel():void 0;for(const d of b.getProcedureMap().getProcedures())if(d!==c&&$.Names$$module$build$src$core$names.equals(d.getName(),\na))return!0;return!1};\n$.rename$$module$build$src$core$procedures=function(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;a=a.trim();const c=$.findLegalName$$module$build$src$core$procedures(a,b);isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(b)&&!b.isInsertionMarker()&&b.getProcedureModel().setName(c);const d=this.getValue();if(d!==a&&d!==c)for(a=b.workspace.getAllBlocks(!1),b=0;bblockIsModernCallerFor$$module$build$src$core$procedures(c,a)||isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(c)&&$.Names$$module$build$src$core$names.equals(c.getProcedureCall(),a))};\nblockIsModernCallerFor$$module$build$src$core$procedures=function(a,b){return isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(a)&&!a.isProcedureDef()&&a.getProcedureModel()&&$.Names$$module$build$src$core$names.equals(a.getProcedureModel().getName(),b)};\n$.mutateCallers$$module$build$src$core$procedures=function(a){const b=getRecordUndo$$module$build$src$core$events$utils();var c=a.getProcedureDef()[0];const d=a.mutationToDom(!0);a=getCallers$$module$build$src$core$procedures(c,a.workspace);for(let f=0,g;g=a[f];f++){c=(c=g.mutationToDom())&&domToText$$module$build$src$core$utils$xml(c);g.domToMutation&&g.domToMutation(d);var e=g.mutationToDom();e=e&&domToText$$module$build$src$core$utils$xml(e);c!==e&&($.setRecordUndo$$module$build$src$core$events$utils(!1),\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(g,\"mutation\",null,c,e)),$.setRecordUndo$$module$build$src$core$events$utils(b))}};\n$.getDefinition$$module$build$src$core$procedures=function(a,b){for(const c of b.getAllBlocks(!1))if(isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(c)&&c.isProcedureDef()&&$.Names$$module$build$src$core$names.equals(c.getProcedureModel().getName(),a)||isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(c)&&$.Names$$module$build$src$core$names.equals(c.getProcedureDef()[0],a))return c;return null};\nisDynamicShape$$module$build$src$core$renderers$common$constants=function(a){return a.isDynamic};isPuzzleTab$$module$build$src$core$renderers$common$constants=function(a){return a.pathDown!==void 0&&a.pathUp!==void 0};isNotch$$module$build$src$core$renderers$common$constants=function(a){return a.pathLeft!==void 0&&a.pathRight!==void 0};\nregister$$module$build$src$core$renderers$common$block_rendering=function(a,b){register$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a,b)};unregister$$module$build$src$core$renderers$common$block_rendering=function(a){unregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a)};\ninit$$module$build$src$core$renderers$common$block_rendering=function(a,b,c){a=new (getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a))(a);a.init(b,c);return a};stringButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"String\")};\nnumberButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"Number\")};colourButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"Colour\")};\ninternalFlyoutCategory$$module$build$src$core$variables_dynamic=function(a){return flyoutCategory$$module$build$src$core$variables_dynamic(a,!1)};\nflyoutCategory$$module$build$src$core$variables_dynamic=function(a,b=!0){Blocks$$module$build$src$core$blocks.variables_set_dynamic||Blocks$$module$build$src$core$blocks.variables_get_dynamic||console.warn(\"There are no dynamic variable blocks, but there is a dynamic variable category.\");if(b)return warn$$module$build$src$core$utils$deprecation(\"The XML return value of Blockly.VariablesDynamic.flyoutCategory()\",\"v12\",\"v13\",\"the same method, but handle a return type of FlyoutItemInfo[] (JSON) instead.\"),\nxmlFlyoutCategory$$module$build$src$core$variables_dynamic(a);a.registerButtonCallback(\"CREATE_VARIABLE_STRING\",stringButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_NUMBER\",numberButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_COLOUR\",colourButtonClickHandler$$module$build$src$core$variables_dynamic);return[{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_STRING_VARIABLE,callbackkey:\"CREATE_VARIABLE_STRING\"},\n{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_NUMBER_VARIABLE,callbackkey:\"CREATE_VARIABLE_NUMBER\"},{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_COLOUR_VARIABLE,callbackkey:\"CREATE_VARIABLE_COLOUR\"},...jsonFlyoutCategoryBlocks$$module$build$src$core$variables(a,a.getVariableMap().getAllVariables(),!1,\"variables_get_dynamic\",\"variables_set_dynamic\")]};\nxmlFlyoutCategory$$module$build$src$core$variables_dynamic=function(a){let b=[],c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_STRING_VARIABLE);c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_STRING\");b.push(c);c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_NUMBER_VARIABLE);c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_NUMBER\");b.push(c);c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_COLOUR_VARIABLE);\nc.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_COLOUR\");b.push(c);a.registerButtonCallback(\"CREATE_VARIABLE_STRING\",stringButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_NUMBER\",numberButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_COLOUR\",colourButtonClickHandler$$module$build$src$core$variables_dynamic);a=flyoutCategoryBlocks$$module$build$src$core$variables_dynamic(a);return b=b.concat(a)};\nflyoutCategoryBlocks$$module$build$src$core$variables_dynamic=function(a){a=a.getVariableMap().getAllVariables();const b=[];if(a.length>0){if(Blocks$$module$build$src$core$blocks.variables_set_dynamic){var c=a[a.length-1];const d=$.createElement$$module$build$src$core$utils$xml(\"block\");d.setAttribute(\"type\",\"variables_set_dynamic\");d.setAttribute(\"gap\",\"24\");d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c));b.push(d)}if(Blocks$$module$build$src$core$blocks.variables_get_dynamic){a.sort(compareByName$$module$build$src$core$variables);\nfor(let d=0,e;e=a[d];d++)c=$.createElement$$module$build$src$core$utils$xml(\"block\"),c.setAttribute(\"type\",\"variables_get_dynamic\"),c.setAttribute(\"gap\",\"8\"),c.appendChild(generateVariableFieldDom$$module$build$src$core$variables(e)),b.push(c)}}return b};resizeSvgContents$$module$build$src$core$workspace_svg=function(a){a.resizeContents()};\ncopy$$module$build$src$core$clipboard=function(a,b){const c=a.toCopyData();stashedCopyData$$module$build$src$core$clipboard=c;stashedWorkspace$$module$build$src$core$clipboard=isSelectable$$module$build$src$core$interfaces$i_selectable(a)&&a.workspace instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?a.workspace:null;stashedCoordinates$$module$build$src$core$clipboard=b;return c};getLastCopiedData$$module$build$src$core$clipboard=function(){return stashedCopyData$$module$build$src$core$clipboard};\nsetLastCopiedData$$module$build$src$core$clipboard=function(a){stashedCopyData$$module$build$src$core$clipboard=a};getLastCopiedWorkspace$$module$build$src$core$clipboard=function(){return stashedWorkspace$$module$build$src$core$clipboard};setLastCopiedWorkspace$$module$build$src$core$clipboard=function(a){stashedWorkspace$$module$build$src$core$clipboard=a};getLastCopiedLocation$$module$build$src$core$clipboard=function(){return stashedCoordinates$$module$build$src$core$clipboard};\nsetLastCopiedLocation$$module$build$src$core$clipboard=function(a){stashedCoordinates$$module$build$src$core$clipboard=a};\npaste$$module$build$src$core$clipboard=function(a,b,c){return a&&b?pasteFromData$$module$build$src$core$clipboard(a,b,c):stashedCopyData$$module$build$src$core$clipboard&&stashedWorkspace$$module$build$src$core$clipboard?pasteFromData$$module$build$src$core$clipboard(stashedCopyData$$module$build$src$core$clipboard,stashedWorkspace$$module$build$src$core$clipboard,stashedCoordinates$$module$build$src$core$clipboard):null};\npasteFromData$$module$build$src$core$clipboard=function(a,b,c){let d;b=b.isMutator?b:(d=b.options.parentWorkspace)!=null?d:b;let e,f;return(f=(e=getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.PASTER,a.paster,!1))==null?void 0:e.paste(a,b,c))!=null?f:null};isCopyable$$module$build$src$core$interfaces$i_copyable=function(a){return a&&typeof a.toCopyData===\"function\"};\nregisterEscape$$module$build$src$core$shortcut_items=function(){ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.ESCAPE,preconditionFn(a){return!a.isReadOnly()},callback(a){a.hideChaff();return!0},keyCodes:[KeyCodes$$module$build$src$core$utils$keycodes.ESC]})};\nregisterDelete$$module$build$src$core$shortcut_items=function(){ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.DELETE,preconditionFn(a,b){b=b.focusedNode;return!a.isReadOnly()&&b!=null&&isDeletable$$module$build$src$core$interfaces$i_deletable(b)&&b.isDeletable()&&!a.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(a,b,c,d){b.preventDefault();a=d.focusedNode;a instanceof\nBlockSvg$$module$build$src$core$block_svg?a.checkAndDelete():isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&a.isDeletable()&&($.setGroup$$module$build$src$core$events$utils(!0),a.dispose(),$.setGroup$$module$build$src$core$events$utils(!1));return!0},keyCodes:[KeyCodes$$module$build$src$core$utils$keycodes.DELETE,KeyCodes$$module$build$src$core$utils$keycodes.BACKSPACE]})};\nisCopyable$$module$build$src$core$shortcut_items=function(a){return isCopyable$$module$build$src$core$interfaces$i_copyable(a)&&isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&isDraggable$$module$build$src$core$interfaces$i_draggable(a)?a.isCopyable?a.isCopyable():a instanceof BlockSvg$$module$build$src$core$block_svg||a instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment?a.isOwnDeletable()&&a.isOwnMovable():a.isDeletable()&&a.isMovable():!1};\nisCuttable$$module$build$src$core$shortcut_items=function(a){return isCopyable$$module$build$src$core$shortcut_items(a)&&isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&a.isDeletable()};\nregisterCopy$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.C,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.C,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.COPY,\npreconditionFn(c,d){d=d.focusedNode;c=c.isFlyout?c.targetWorkspace:c;return!!d&&!!c&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()&&isCopyable$$module$build$src$core$shortcut_items(d)},callback(c,d,e,f){d.preventDefault();d=f.focusedNode;if(!d||!isCopyable$$module$build$src$core$interfaces$i_copyable(d)||!isCopyable$$module$build$src$core$shortcut_items(d))return!1;c=c.isFlyout?c.targetWorkspace:c;if(!c)return!1;d.workspace.isFlyout||c.hideChaff();\nc=isDraggable$$module$build$src$core$interfaces$i_draggable(d)&&d.workspace==c?d.getRelativeToSurfaceXY():void 0;return!!copy$$module$build$src$core$clipboard(d,c)},keyCodes:[a,b]})};\nregisterCut$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.X,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.X,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.CUT,\npreconditionFn(c,d){d=d.focusedNode;return!!d&&!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()&&isCuttable$$module$build$src$core$shortcut_items(d)},callback(c,d,e,f){c=f.focusedNode;if(!c||!isCuttable$$module$build$src$core$shortcut_items(c)||!isCopyable$$module$build$src$core$interfaces$i_copyable(c))return!1;d=isDraggable$$module$build$src$core$interfaces$i_draggable(c)?c.getRelativeToSurfaceXY():void 0;d=copy$$module$build$src$core$clipboard(c,\nd);c instanceof BlockSvg$$module$build$src$core$block_svg?c.checkAndDelete():isDeletable$$module$build$src$core$interfaces$i_deletable(c)&&c.dispose();return!!d},keyCodes:[a,b]})};\nregisterPaste$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.V,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.V,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.PASTE,\npreconditionFn(){var c=getLastCopiedWorkspace$$module$build$src$core$clipboard();if(!c||!c.rendered)return!1;c=c.isFlyout?c.targetWorkspace:c;return!!getLastCopiedData$$module$build$src$core$clipboard()&&!!c&&!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(c,d){c=getLastCopiedData$$module$build$src$core$clipboard();if(!c)return!1;var e=getLastCopiedWorkspace$$module$build$src$core$clipboard();if(!e)return!1;e=e.isFlyout?e.targetWorkspace:\ne;if(!e||e.isReadOnly())return!1;if(d instanceof PointerEvent)return d=screenToWsCoordinates$$module$build$src$core$utils$svg_math(e,new Coordinate$$module$build$src$core$utils$coordinate(d.clientX,d.clientY)),!!paste$$module$build$src$core$clipboard(c,e,d);d=getLastCopiedLocation$$module$build$src$core$clipboard();if(!d)return!!paste$$module$build$src$core$clipboard(c,e);const {left:f,top:g,width:h,height:k}=e.getMetricsManager().getViewMetrics(!0);if((new Rect$$module$build$src$core$utils$rect(g,\ng+k,f,f+h)).contains(d.x,d.y))return!!paste$$module$build$src$core$clipboard(c,e);d=new Coordinate$$module$build$src$core$utils$coordinate(f+h/2,g+k/2);return!!paste$$module$build$src$core$clipboard(c,e,d)},keyCodes:[a,b]})};\nregisterUndo$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.UNDO,\npreconditionFn(c){return!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(c,d){c.hideChaff();c.undo(!1);d.preventDefault();return!0},keyCodes:[a,b]})};\nregisterRedo$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL,KeyCodes$$module$build$src$core$utils$keycodes.SHIFT]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.META,\nKeyCodes$$module$build$src$core$utils$keycodes.SHIFT]),c=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Y,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.REDO,preconditionFn(d){return!d.isDragging()&&!d.isReadOnly()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},\ncallback(d,e){d.hideChaff();d.undo(!0);e.preventDefault();return!0},keyCodes:[a,b,c]})};registerDefaultShortcuts$$module$build$src$core$shortcut_items=function(){registerEscape$$module$build$src$core$shortcut_items();registerDelete$$module$build$src$core$shortcut_items();registerCopy$$module$build$src$core$shortcut_items();registerCut$$module$build$src$core$shortcut_items();registerPaste$$module$build$src$core$shortcut_items();registerUndo$$module$build$src$core$shortcut_items();registerRedo$$module$build$src$core$shortcut_items()};\nsaveProcedure$$module$build$src$core$serialization$procedures=function(a){const b=a.saveState();if(!a.getParameters().length)return b;b.parameters=a.getParameters().map(c=>c.saveState());return b};loadProcedure$$module$build$src$core$serialization$procedures=function(a,b,c,d){a=a.loadState(c,d);if(!c.parameters)return a;for(const [e,f]of c.parameters.entries())a.insertParameter(b.loadState(f,d),e);return a};\nsave$$module$build$src$core$serialization$workspaces=function(a){const b=Object.create(null),c=getAllItems$$module$build$src$core$registry(Type$$module$build$src$core$registry.SERIALIZER,!0);for(const d in c){let e;const f=(e=c[d])==null?void 0:e.save(a);f&&(b[d]=f)}return b};\nload$$module$build$src$core$serialization$workspaces=function(a,b,{recordUndo:c=!1}={}){var d=getAllItems$$module$build$src$core$registry(Type$$module$build$src$core$registry.SERIALIZER,!0);if(d){d=Object.entries(d).sort((f,g)=>g[1].priority-f[1].priority);var e=getRecordUndo$$module$build$src$core$events$utils();$.setRecordUndo$$module$build$src$core$events$utils(c);(c=$.getGroup$$module$build$src$core$events$utils())||$.setGroup$$module$build$src$core$events$utils(!0);startTextWidthCache$$module$build$src$core$utils$dom();\nb instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&b.setResizesEnabled(!1);for(const [,f]of d.reverse()){let g;(g=f)==null||g.clear(b)}for(const [f,g]of d.reverse())if(a[f]){let h;(h=g)==null||h.load(a[f],b)}b instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&b.setResizesEnabled(!0);stopTextWidthCache$$module$build$src$core$utils$dom();fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.FINISHED_LOADING))(b));\n$.setGroup$$module$build$src$core$events$utils(c);$.setRecordUndo$$module$build$src$core$events$utils(e)}};\ninject$$module$build$src$core$inject=function(a,b){let c=null;c=typeof a===\"string\"?document.getElementById(a)||document.querySelector(a):a;var d;if(!document.contains(c)&&document!==((d=c)==null?void 0:d.ownerDocument))throw Error(\"Error: container is not in current document\");a=new Options$$module$build$src$core$options(b||{});d=document.createElement(\"div\");addClass$$module$build$src$core$utils$dom(d,\"injectionDiv\");(b==null?0:b.rtl)&&addClass$$module$build$src$core$utils$dom(d,\"blocklyRTL\");c.appendChild(d);\nb=createDom$$module$build$src$core$inject(d,a);const e=createMainWorkspace$$module$build$src$core$inject(d,b,a);init$$module$build$src$core$inject(e);setMainWorkspace$$module$build$src$core$common(e);svgResize$$module$build$src$core$common(e);d.addEventListener(\"focusin\",function(){setMainWorkspace$$module$build$src$core$common(e)});conditionalBind$$module$build$src$core$browser_events(d,\"keydown\",null,globalShortcutHandler$$module$build$src$core$common);return e};\ncreateDom$$module$build$src$core$inject=function(a,b){a.setAttribute(\"dir\",\"LTR\");inject$$module$build$src$core$css(b.hasCss,b.pathToMedia);const c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{xmlns:SVG_NS$$module$build$src$core$utils$dom,\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\",\"class\":\"blocklySvg\"},a),d=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.DEFS,\n{},c),e=String(Math.random()).substring(2);b.gridPattern=Grid$$module$build$src$core$grid.createDom(e,b.gridOptions,d,a);return c};\ncreateMainWorkspace$$module$build$src$core$inject=function(a,b,c){c.parentWorkspace=null;c=new WorkspaceSvg$$module$build$src$core$workspace_svg(c);const d=c.options;c.scale=d.zoomOptions.startScale;b.appendChild(c.createDom(\"blocklyMainBackground\",a));var e=c.getRenderer().getClassName();e&&addClass$$module$build$src$core$utils$dom(a,e);(e=c.getTheme().getClassName())&&addClass$$module$build$src$core$utils$dom(a,e);!d.hasCategories&&d.languageTree&&(a=c.addFlyout(Svg$$module$build$src$core$utils$svg.SVG),\ninsertAfter$$module$build$src$core$utils$dom(a,b));d.hasTrashcan&&c.addTrashcan();d.zoomOptions&&d.zoomOptions.controls&&c.addZoomControls();c.getThemeManager().subscribe(b,\"workspaceBackgroundColour\",\"background-color\");c.translate(0,0);c.addChangeListener(bumpIntoBoundsHandler$$module$build$src$core$bump_objects(c));svgResize$$module$build$src$core$common(c);createDom$$module$build$src$core$widgetdiv();createDom$$module$build$src$core$dropdowndiv();createDom$$module$build$src$core$tooltip();return c};\ninit$$module$build$src$core$inject=function(a){const b=a.options;var c=a.getParentSvg();conditionalBind$$module$build$src$core$browser_events(c.parentNode,\"contextmenu\",null,function(d){isTargetInput$$module$build$src$core$browser_events(d)||d.preventDefault()});c=conditionalBind$$module$build$src$core$browser_events(window,\"resize\",null,function(){hide$$module$build$src$core$tooltip();a.hideComponents(!0);repositionForWindowResize$$module$build$src$core$dropdowndiv();repositionForWindowResize$$module$build$src$core$widgetdiv();\nsvgResize$$module$build$src$core$common(a);bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects(a)});a.setResizeHandlerWrapper(c);bindDocumentEvents$$module$build$src$core$inject();if(b.languageTree){c=a.getToolbox();const d=a.getFlyout(!0);c?c.init():d&&(d.init(a),d.show(b.languageTree),typeof d.scrollToStart===\"function\"&&d.scrollToStart())}b.hasTrashcan&&a.trashcan.init();b.zoomOptions&&b.zoomOptions.controls&&a.zoomControls_.init();b.moveOptions&&b.moveOptions.scrollbars?(a.scrollbar=\nnew ScrollbarPair$$module$build$src$core$scrollbar_pair(a,b.moveOptions.scrollbars===!0||!!b.moveOptions.scrollbars.horizontal,b.moveOptions.scrollbars===!0||!!b.moveOptions.scrollbars.vertical,\"blocklyMainWorkspaceScrollbar\"),a.scrollbar.resize()):a.setMetrics({x:.5,y:.5});b.hasSounds&&loadSounds$$module$build$src$core$inject(b.pathToMedia,a)};\nbindDocumentEvents$$module$build$src$core$inject=function(){documentEventsBound$$module$build$src$core$inject||(conditionalBind$$module$build$src$core$browser_events(document,\"scroll\",null,function(){const a=getAllWorkspaces$$module$build$src$core$common();for(let b=0,c;c=a[b];b++)c instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&c.updateInverseScreenCTM()}),bind$$module$build$src$core$browser_events(document,\"touchend\",null,longStop$$module$build$src$core$touch),bind$$module$build$src$core$browser_events(document,\n\"touchcancel\",null,longStop$$module$build$src$core$touch));documentEventsBound$$module$build$src$core$inject=!0};\nloadSounds$$module$build$src$core$inject=function(a,b){function c(){for(;e.length;){const f=e.pop();f&&unbind$$module$build$src$core$browser_events(f)}d.preload()}const d=b.getAudioManager();d.load([a+\"click.mp3\",a+\"click.wav\",a+\"click.ogg\"],\"click\");d.load([a+\"disconnect.wav\",a+\"disconnect.mp3\",a+\"disconnect.ogg\"],\"disconnect\");d.load([a+\"delete.mp3\",a+\"delete.ogg\",a+\"delete.wav\"],\"delete\");const e=[];e.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",null,c,!0));\ne.push(conditionalBind$$module$build$src$core$browser_events(document,\"touchstart\",null,c,!0))};isFullBlockField$$module$build$src$core$contextmenu_items=function(a){if(!a||!a.isSimpleReporter())return!1;let b;return(b=a.getFields().next().value)==null?void 0:b.isFullBlockField()};\nregisterUndo$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.UNDO},preconditionFn(a){return a.workspace.getUndoStack().length>0?\"enabled\":\"disabled\"},callback(a){a.workspace.undo(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"undoWorkspace\",weight:1})};\nregisterRedo$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.REDO},preconditionFn(a){return a.workspace.getRedoStack().length>0?\"enabled\":\"disabled\"},callback(a){a.workspace.undo(!0)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"redoWorkspace\",weight:2})};\nregisterCleanup$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.CLEAN_UP},preconditionFn(a){return a.workspace.isMovable()?a.workspace.getTopBlocks(!1).length>1?\"enabled\":\"disabled\":\"hidden\"},callback(a){a.workspace.cleanUp()},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"cleanWorkspace\",weight:3})};\ntoggleOption_$$module$build$src$core$contextmenu_items=function(a,b){function c(f){e--;f.setCollapsed(a);e===0&&$.setGroup$$module$build$src$core$events$utils(!1)}let d=0,e=0;$.setGroup$$module$build$src$core$events$utils(!0);for(let f=0;f\n0?\"enabled\":\"disabled\":\"disabled\"},callback(a){if(a.workspace){a.workspace.cancelCurrentGesture();var b=getDeletableBlocks_$$module$build$src$core$contextmenu_items(a.workspace);b.length<2?deleteNext_$$module$build$src$core$contextmenu_items(b):confirm$$module$build$src$core$dialog($.Msg$$module$build$src$core$msg.DELETE_ALL_BLOCKS.replace(\"%1\",String(b.length)),function(c){c&&deleteNext_$$module$build$src$core$contextmenu_items(b)})}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,\nid:\"workspaceDelete\",weight:6})};registerWorkspaceOptions_$$module$build$src$core$contextmenu_items=function(){registerUndo$$module$build$src$core$contextmenu_items();registerRedo$$module$build$src$core$contextmenu_items();registerCleanup$$module$build$src$core$contextmenu_items();registerCollapse$$module$build$src$core$contextmenu_items();registerExpand$$module$build$src$core$contextmenu_items();registerDeleteAll$$module$build$src$core$contextmenu_items()};\nregisterDuplicate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.DUPLICATE_BLOCK},preconditionFn(a){a=a.block;return!a.isInFlyout&&a.isDeletable()&&a.isMovable()?a.isDuplicatable()?\"enabled\":\"disabled\":\"hidden\"},callback(a){if(a.block){var b=a.block.toCopyData();b&&paste$$module$build$src$core$clipboard(b,a.block.workspace)}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,\nid:\"blockDuplicate\",weight:1})};\nregisterComment$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){return a.block.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)?$.Msg$$module$build$src$core$msg.REMOVE_COMMENT:$.Msg$$module$build$src$core$msg.ADD_COMMENT},preconditionFn(a){a=a.block;return!a||a.isInFlyout||!a.workspace.options.comments||a.isCollapsed()||!a.isEditable()||!a.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)&&isFullBlockField$$module$build$src$core$contextmenu_items(a)?\n\"hidden\":\"enabled\"},callback(a){(a=a.block)&&a.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)?a.setCommentText(null):a.setCommentText(\"\")},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockComment\",weight:2})};\nregisterInline$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){return a.block.getInputsInline()?$.Msg$$module$build$src$core$msg.EXTERNAL_INPUTS:$.Msg$$module$build$src$core$msg.INLINE_INPUTS},preconditionFn(a){a=a.block;if(!a.isInFlyout&&a.isMovable()&&!a.isCollapsed())for(let b=1;b(b.has(MANUALLY_DISABLED$$module$build$src$core$constants)?\n1:0);return a.getInheritedDisabled()||b?\"disabled\":\"enabled\"}return\"hidden\"},callback(a){a=a.block;const b=$.getGroup$$module$build$src$core$events$utils();b||$.setGroup$$module$build$src$core$events$utils(!0);a.setDisabledReason(!a.hasDisabledReason(MANUALLY_DISABLED$$module$build$src$core$constants),MANUALLY_DISABLED$$module$build$src$core$constants);$.setGroup$$module$build$src$core$events$utils(b)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockDisable\",\nweight:5})};\nregisterDelete$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){var b=a.block;a=b.getDescendants(!1).length;(b=b.getNextBlock())&&(a-=b.getDescendants(!1).length);return a===1?$.Msg$$module$build$src$core$msg.DELETE_BLOCK:$.Msg$$module$build$src$core$msg.DELETE_X_BLOCKS.replace(\"%1\",`${a}`)},preconditionFn(a){return!a.block.isInFlyout&&a.block.isDeletable()?\"enabled\":\"hidden\"},callback(a){a.block&&a.block.checkAndDelete()},\nscopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockDelete\",weight:6})};\nregisterHelp$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.HELP},preconditionFn(a){a=a.block;return(typeof a.helpUrl===\"function\"?a.helpUrl():a.helpUrl)?\"enabled\":\"hidden\"},callback(a){a.block.showHelp()},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockHelp\",weight:7})};\nregisterCommentDelete$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.REMOVE_COMMENT,preconditionFn(a){let b;return((b=a.comment)==null?0:b.isDeletable())?\"enabled\":\"hidden\"},callback(a){$.setGroup$$module$build$src$core$events$utils(!0);let b;(b=a.comment)==null||b.dispose();$.setGroup$$module$build$src$core$events$utils(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.COMMENT,\nid:\"commentDelete\",weight:6})};\nregisterCommentDuplicate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.DUPLICATE_COMMENT,preconditionFn(a){let b;return((b=a.comment)==null?0:b.isMovable())?\"enabled\":\"hidden\"},callback(a){if(a.comment){var b=a.comment.toCopyData();b&&paste$$module$build$src$core$clipboard(b,a.comment.workspace)}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.COMMENT,id:\"commentDuplicate\",\nweight:1})};\nregisterCommentCreate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.ADD_COMMENT,preconditionFn:a=>{let b;return((b=a.workspace)==null?0:b.isMutator)?\"hidden\":\"enabled\"},callback:(a,b,c,d)=>{if(a=a.workspace)$.setGroup$$module$build$src$core$events$utils(!0),b=new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(a),b.setPlaceholderText($.Msg$$module$build$src$core$msg.WORKSPACE_COMMENT_DEFAULT_TEXT),\nb.moveTo(screenToWsCoordinates$$module$build$src$core$utils$svg_math(a,new Coordinate$$module$build$src$core$utils$coordinate(d.x,d.y))),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b),$.setGroup$$module$build$src$core$events$utils(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"commentCreate\",weight:8})};\nregisterBlockOptions_$$module$build$src$core$contextmenu_items=function(){registerDuplicate$$module$build$src$core$contextmenu_items();registerComment$$module$build$src$core$contextmenu_items();registerInline$$module$build$src$core$contextmenu_items();registerCollapseExpandBlock$$module$build$src$core$contextmenu_items();registerDisable$$module$build$src$core$contextmenu_items();registerDelete$$module$build$src$core$contextmenu_items();registerHelp$$module$build$src$core$contextmenu_items()};\nregisterCommentOptions$$module$build$src$core$contextmenu_items=function(){registerCommentDuplicate$$module$build$src$core$contextmenu_items();registerCommentDelete$$module$build$src$core$contextmenu_items();registerCommentCreate$$module$build$src$core$contextmenu_items()};registerDefaultOptions$$module$build$src$core$contextmenu_items=function(){registerWorkspaceOptions_$$module$build$src$core$contextmenu_items();registerBlockOptions_$$module$build$src$core$contextmenu_items()};\nisPaster$$module$build$src$core$interfaces$i_paster=function(a){return a&&typeof a.paste===\"function\"};isRenderedElement$$module$build$src$core$interfaces$i_rendered_element=function(a){return a&&typeof a.getSvgRoot===\"function\"};isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item=function(a){return a.isSelectable()};hideChaff$$module$build$src$core$blockly=function(a){getMainWorkspace$$module$build$src$core$common().hideChaff(a)};\nisFocusableTree$$module$build$src$core$interfaces$i_focusable_tree=function(a){return a&&typeof a.getRootFocusableNode===\"function\"&&typeof a.getRestoredFocusableNode===\"function\"&&typeof a.getNestedTrees===\"function\"&&typeof a.lookUpFocusableNode===\"function\"&&typeof a.onTreeFocus===\"function\"&&typeof a.onTreeBlur===\"function\"};$jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_ES6=!1;$jscomp.ASSUME_ES2020=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;\n$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.INSTRUMENT_ASYNC_CONTEXT=!0;$jscomp.objectCreate=$jscomp.ASSUME_ES5||typeof Object.create==\"function\"?Object.create:function(a){var b=function(){};b.prototype=a;return new b};$jscomp.defineProperty=$jscomp.ASSUME_ES5||typeof Object.defineProperties==\"function\"?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};\n$jscomp.getGlobal=function(a){a=[\"object\"==typeof globalThis&&globalThis,a,\"object\"==typeof window&&window,\"object\"==typeof self&&self,\"object\"==typeof __webpack_require__.g&&__webpack_require__.g];for(var b=0;b>>0,$jscomp.propertyToPolyfillSymbol[e]=$jscomp.IS_SYMBOL_NATIVE?\n$jscomp.global.Symbol(e):$jscomp.POLYFILL_PREFIX+c+\"$\"+e),$jscomp.defineProperty(d,$jscomp.propertyToPolyfillSymbol[e],{configurable:!0,writable:!0,value:b})))};\n$jscomp.getConstructImplementation=function(){function a(){function c(){}new c;Reflect.construct(c,[],function(){});return new c instanceof c}if($jscomp.TRUST_ES6_POLYFILLS&&typeof Reflect!=\"undefined\"&&Reflect.construct){if(a())return Reflect.construct;var b=Reflect.construct;return function(c,d,e){c=b(c,d);e&&Reflect.setPrototypeOf(c,e.prototype);return c}}return function(c,d,e){e===void 0&&(e=c);e=$jscomp.objectCreate(e.prototype||Object.prototype);return Function.prototype.apply.call(c,e,d)||\ne}};$jscomp.construct={valueOf:$jscomp.getConstructImplementation}.valueOf();$jscomp.underscoreProtoCanBeSet=function(){var a={a:!0},b={};try{return b.__proto__=a,b.a}catch(c){}return!1};$jscomp.setPrototypeOf=$jscomp.ASSUME_ES6||$jscomp.TRUST_ES6_POLYFILLS&&typeof Object.setPrototypeOf==\"function\"?Object.setPrototypeOf:$jscomp.underscoreProtoCanBeSet()?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+\" is not extensible\");return a}:null;\n$jscomp.inherits=function(a,b){a.prototype=$jscomp.objectCreate(b.prototype);a.prototype.constructor=a;if($jscomp.ASSUME_ES6||$jscomp.setPrototypeOf){var c=$jscomp.setPrototypeOf;c(a,b)}else for(c in b)if(c!=\"prototype\")if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.superClass_=b.prototype};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b0;){var a=this.properties_.pop();if(a in this.object_)return a}return null};$jscomp.generator.Engine_=function(a){this.context_=new $jscomp.generator.Context;this.program_=a};\n$jscomp.generator.Engine_.prototype.next_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,a,this.context_.next_);this.context_.next_(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.return_=function(a){this.context_.start_();var b=this.context_.yieldAllIterator_;if(b)return this.yieldAllStep_(\"return\"in b?b[\"return\"]:function(c){return{value:c,done:!0}},a,this.context_.return);this.context_.return(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.throw_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_[\"throw\"],a,this.context_.next_);this.context_.throw_(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.yieldAllStep_=function(a,b,c){try{var d=a.call(this.context_.yieldAllIterator_,b);$jscomp.generator.ensureIteratorResultIsObject_(d);if(!d.done)return this.context_.stop_(),d;var e=d.value}catch(f){return this.context_.yieldAllIterator_=null,this.context_.throw_(f),this.nextStep_()}this.context_.yieldAllIterator_=null;c.call(this.context_,e);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var a=this.program_(this.context_);if(a)return this.context_.stop_(),{value:a.value,done:!1}}catch(b){this.context_.yieldResult=void 0,this.context_.throw_(b)}this.context_.stop_();if(this.context_.abruptCompletion_){a=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(a.isException)throw a.exception;return{value:a.return,done:!0}}return{value:void 0,done:!0}};\n$jscomp.generator.Generator_=function(a){this.next=function(b){return a.next_(b)};this.throw=function(b){return a.throw_(b)};this.return=function(b){return a.return_(b)};this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(a,b){b=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(b));$jscomp.setPrototypeOf&&a.prototype&&$jscomp.setPrototypeOf(b,a.prototype);return b};\n$jscomp.asyncExecutePromiseGenerator=function(a){function b(d){return a.next(d)}function c(d){return a.throw(d)}return new Promise(function(d,e){function f(g){g.done?d(g.value):Promise.resolve(g.value).then(b,c).then(f,e)}f(a.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(a){return $jscomp.asyncExecutePromiseGenerator(a())};$jscomp.asyncExecutePromiseGeneratorProgram=function(a){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(a)))};\n$jscomp.polyfill(\"globalThis\",function(a){return a||$jscomp.global},\"es_2020\",\"es3\");$jscomp.polyfill(\"Array.prototype.includes\",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var e=d.length;c=c||0;for(c<0&&(c=Math.max(c+e,0));c0?(d=Array.prototype.flat.call(d,b-1),c.push.apply(c,d)):c.push(d)});return c}},\"es9\",\"es5\");\n$jscomp.polyfill(\"Object.entries\",function(a){return a?a:function(b){var c=[],d;for(d in b)$jscomp.owns(b,d)&&c.push([d,b[d]]);return c}},\"es8\",\"es3\");$jscomp.polyfill(\"Object.values\",function(a){return a?a:function(b){var c=[],d;for(d in b)$jscomp.owns(b,d)&&c.push(b[d]);return c}},\"es8\",\"es3\");\nvar typeMap$$module$build$src$core$registry=Object.create(null),TEST_ONLY$$module$build$src$core$registry={typeMap:typeMap$$module$build$src$core$registry},nameMap$$module$build$src$core$registry=Object.create(null),DEFAULT$$module$build$src$core$registry=\"default\",Type$$module$build$src$core$registry=class{constructor(a){this.name=a}toString(){return this.name}};Type$$module$build$src$core$registry.CONNECTION_CHECKER=new Type$$module$build$src$core$registry(\"connectionChecker\");\nType$$module$build$src$core$registry.CONNECTION_PREVIEWER=new Type$$module$build$src$core$registry(\"connectionPreviewer\");Type$$module$build$src$core$registry.CURSOR=new Type$$module$build$src$core$registry(\"cursor\");Type$$module$build$src$core$registry.EVENT=new Type$$module$build$src$core$registry(\"event\");Type$$module$build$src$core$registry.FIELD=new Type$$module$build$src$core$registry(\"field\");Type$$module$build$src$core$registry.INPUT=new Type$$module$build$src$core$registry(\"input\");\nType$$module$build$src$core$registry.RENDERER=new Type$$module$build$src$core$registry(\"renderer\");Type$$module$build$src$core$registry.TOOLBOX=new Type$$module$build$src$core$registry(\"toolbox\");Type$$module$build$src$core$registry.THEME=new Type$$module$build$src$core$registry(\"theme\");Type$$module$build$src$core$registry.TOOLBOX_ITEM=new Type$$module$build$src$core$registry(\"toolboxItem\");Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX=new Type$$module$build$src$core$registry(\"flyoutsVerticalToolbox\");\nType$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX=new Type$$module$build$src$core$registry(\"flyoutsHorizontalToolbox\");Type$$module$build$src$core$registry.FLYOUT_INFLATER=new Type$$module$build$src$core$registry(\"flyoutInflater\");Type$$module$build$src$core$registry.METRICS_MANAGER=new Type$$module$build$src$core$registry(\"metricsManager\");Type$$module$build$src$core$registry.BLOCK_DRAGGER=new Type$$module$build$src$core$registry(\"blockDragger\");\nType$$module$build$src$core$registry.SERIALIZER=new Type$$module$build$src$core$registry(\"serializer\");Type$$module$build$src$core$registry.ICON=new Type$$module$build$src$core$registry(\"icon\");Type$$module$build$src$core$registry.PASTER=new Type$$module$build$src$core$registry(\"paster\");Type$$module$build$src$core$registry.VARIABLE_MODEL=new Type$$module$build$src$core$registry(\"variableModel\");Type$$module$build$src$core$registry.VARIABLE_MAP=new Type$$module$build$src$core$registry(\"variableMap\");\nvar module$build$src$core$registry={DEFAULT:DEFAULT$$module$build$src$core$registry,TEST_ONLY:TEST_ONLY$$module$build$src$core$registry};module$build$src$core$registry.Type=Type$$module$build$src$core$registry;module$build$src$core$registry.getAllItems=getAllItems$$module$build$src$core$registry;module$build$src$core$registry.getClass=getClass$$module$build$src$core$registry;module$build$src$core$registry.getClassFromOptions=getClassFromOptions$$module$build$src$core$registry;\nmodule$build$src$core$registry.getObject=getObject$$module$build$src$core$registry;module$build$src$core$registry.hasItem=hasItem$$module$build$src$core$registry;module$build$src$core$registry.register=register$$module$build$src$core$registry;module$build$src$core$registry.unregister=unregister$$module$build$src$core$registry;var Blocks$$module$build$src$core$blocks=Object.create(null),module$build$src$core$blocks={Blocks:Blocks$$module$build$src$core$blocks};var LONGPRESS$$module$build$src$core$touch=750,TOUCH_ENABLED$$module$build$src$core$touch=\"ontouchstart\"in globalThis||!!(globalThis.document&&document.documentElement&&\"ontouchstart\"in document.documentElement)||!(!globalThis.navigator||!globalThis.navigator.maxTouchPoints&&!globalThis.navigator.msMaxTouchPoints),touchIdentifier_$$module$build$src$core$touch=null,TOUCH_MAP$$module$build$src$core$touch={mousedown:[\"pointerdown\"],mouseenter:[\"pointerenter\"],mouseleave:[\"pointerleave\"],mousemove:[\"pointermove\"],\nmouseout:[\"pointerout\"],mouseover:[\"pointerover\"],mouseup:[\"pointerup\",\"pointercancel\"],touchend:[\"pointerup\"],touchcancel:[\"pointercancel\"]},longPid_$$module$build$src$core$touch=0,module$build$src$core$touch={TOUCH_ENABLED:TOUCH_ENABLED$$module$build$src$core$touch,TOUCH_MAP:TOUCH_MAP$$module$build$src$core$touch};module$build$src$core$touch.checkTouchIdentifier=checkTouchIdentifier$$module$build$src$core$touch;module$build$src$core$touch.clearTouchIdentifier=clearTouchIdentifier$$module$build$src$core$touch;\nmodule$build$src$core$touch.getTouchIdentifierFromEvent=getTouchIdentifierFromEvent$$module$build$src$core$touch;module$build$src$core$touch.longStart=longStart$$module$build$src$core$touch;module$build$src$core$touch.longStop=longStop$$module$build$src$core$touch;module$build$src$core$touch.shouldHandleEvent=shouldHandleEvent$$module$build$src$core$touch;var rawUserAgent$$module$build$src$core$utils$useragent,isJavaFx$$module$build$src$core$utils$useragent,isWebKit$$module$build$src$core$utils$useragent,isGecko$$module$build$src$core$utils$useragent,isAndroid$$module$build$src$core$utils$useragent,isIPad$$module$build$src$core$utils$useragent,isIPhone$$module$build$src$core$utils$useragent,isMac$$module$build$src$core$utils$useragent,isTablet$$module$build$src$core$utils$useragent,isMobile$$module$build$src$core$utils$useragent;\n(function(a){function b(d){return c.includes(d.toUpperCase())}rawUserAgent$$module$build$src$core$utils$useragent=a;const c=rawUserAgent$$module$build$src$core$utils$useragent.toUpperCase();isJavaFx$$module$build$src$core$utils$useragent=b(\"JavaFX\");isWebKit$$module$build$src$core$utils$useragent=b(\"WebKit\");isGecko$$module$build$src$core$utils$useragent=b(\"Gecko\")&&!isWebKit$$module$build$src$core$utils$useragent;isAndroid$$module$build$src$core$utils$useragent=b(\"Android\");a=globalThis.navigator&&\nglobalThis.navigator.maxTouchPoints;isIPad$$module$build$src$core$utils$useragent=b(\"iPad\")||b(\"Macintosh\")&&a>0;isIPhone$$module$build$src$core$utils$useragent=b(\"iPhone\")&&!isIPad$$module$build$src$core$utils$useragent;isMac$$module$build$src$core$utils$useragent=b(\"Macintosh\");isTablet$$module$build$src$core$utils$useragent=isIPad$$module$build$src$core$utils$useragent||isAndroid$$module$build$src$core$utils$useragent&&!b(\"Mobile\")||b(\"Silk\");isMobile$$module$build$src$core$utils$useragent=!isTablet$$module$build$src$core$utils$useragent&&\n(isIPhone$$module$build$src$core$utils$useragent||isAndroid$$module$build$src$core$utils$useragent)})(globalThis.navigator&&globalThis.navigator.userAgent||\"\");\nvar raw$$module$build$src$core$utils$useragent=rawUserAgent$$module$build$src$core$utils$useragent,JavaFx$$module$build$src$core$utils$useragent=isJavaFx$$module$build$src$core$utils$useragent,GECKO$$module$build$src$core$utils$useragent=isGecko$$module$build$src$core$utils$useragent,ANDROID$$module$build$src$core$utils$useragent=isAndroid$$module$build$src$core$utils$useragent,IPAD$$module$build$src$core$utils$useragent=isIPad$$module$build$src$core$utils$useragent,IPHONE$$module$build$src$core$utils$useragent=\nisIPhone$$module$build$src$core$utils$useragent,MAC$$module$build$src$core$utils$useragent=isMac$$module$build$src$core$utils$useragent,MOBILE$$module$build$src$core$utils$useragent=isMobile$$module$build$src$core$utils$useragent,module$build$src$core$utils$useragent={ANDROID:ANDROID$$module$build$src$core$utils$useragent,GECKO:GECKO$$module$build$src$core$utils$useragent,IPAD:IPAD$$module$build$src$core$utils$useragent,IPHONE:IPHONE$$module$build$src$core$utils$useragent,JavaFx:JavaFx$$module$build$src$core$utils$useragent,\nMAC:MAC$$module$build$src$core$utils$useragent,MOBILE:MOBILE$$module$build$src$core$utils$useragent,raw:raw$$module$build$src$core$utils$useragent};var LINE_MODE_MULTIPLIER$$module$build$src$core$browser_events=40,PAGE_MODE_MULTIPLIER$$module$build$src$core$browser_events=125,module$build$src$core$browser_events={};module$build$src$core$browser_events.bind=bind$$module$build$src$core$browser_events;module$build$src$core$browser_events.conditionalBind=conditionalBind$$module$build$src$core$browser_events;module$build$src$core$browser_events.getScrollDeltaPixels=getScrollDeltaPixels$$module$build$src$core$browser_events;\nmodule$build$src$core$browser_events.isRightButton=isRightButton$$module$build$src$core$browser_events;module$build$src$core$browser_events.isTargetInput=isTargetInput$$module$build$src$core$browser_events;module$build$src$core$browser_events.mouseToSvg=mouseToSvg$$module$build$src$core$browser_events;module$build$src$core$browser_events.unbind=unbind$$module$build$src$core$browser_events;var EventType$$module$build$src$core$events$type;\n(function(a){a.BLOCK_CREATE=\"create\";a.BLOCK_DELETE=\"delete\";a.BLOCK_CHANGE=\"change\";a.BLOCK_FIELD_INTERMEDIATE_CHANGE=\"block_field_intermediate_change\";a.BLOCK_MOVE=\"move\";a.VAR_CREATE=\"var_create\";a.VAR_DELETE=\"var_delete\";a.VAR_RENAME=\"var_rename\";a.VAR_TYPE_CHANGE=\"var_type_change\";a.UI=\"ui\";a.BLOCK_DRAG=\"drag\";a.SELECTED=\"selected\";a.CLICK=\"click\";a.MARKER_MOVE=\"marker_move\";a.BUBBLE_OPEN=\"bubble_open\";a.TRASHCAN_OPEN=\"trashcan_open\";a.TOOLBOX_ITEM_SELECT=\"toolbox_item_select\";a.THEME_CHANGE=\n\"theme_change\";a.VIEWPORT_CHANGE=\"viewport_change\";a.COMMENT_CREATE=\"comment_create\";a.COMMENT_DELETE=\"comment_delete\";a.COMMENT_CHANGE=\"comment_change\";a.COMMENT_MOVE=\"comment_move\";a.COMMENT_RESIZE=\"comment_resize\";a.COMMENT_DRAG=\"comment_drag\";a.COMMENT_COLLAPSE=\"comment_collapse\";a.FINISHED_LOADING=\"finished_loading\"})(EventType$$module$build$src$core$events$type||(EventType$$module$build$src$core$events$type={}));\nvar BUMP_EVENTS$$module$build$src$core$events$type=[EventType$$module$build$src$core$events$type.BLOCK_CREATE,EventType$$module$build$src$core$events$type.BLOCK_MOVE,EventType$$module$build$src$core$events$type.COMMENT_CREATE,EventType$$module$build$src$core$events$type.COMMENT_MOVE],module$build$src$core$events$type={BUMP_EVENTS:BUMP_EVENTS$$module$build$src$core$events$type};module$build$src$core$events$type.EventType=EventType$$module$build$src$core$events$type;var soup$$module$build$src$core$utils$idgenerator=\"!#$%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",internal$$module$build$src$core$utils$idgenerator={genUid:()=>{const a=soup$$module$build$src$core$utils$idgenerator.length,b=[];for(let c=0;c<20;c++)b[c]=soup$$module$build$src$core$utils$idgenerator.charAt(Math.random()*a);return b.join(\"\")}},TEST_ONLY$$module$build$src$core$utils$idgenerator=internal$$module$build$src$core$utils$idgenerator,nextId$$module$build$src$core$utils$idgenerator=\n0,module$build$src$core$utils$idgenerator={TEST_ONLY:internal$$module$build$src$core$utils$idgenerator};module$build$src$core$utils$idgenerator.genUid=genUid$$module$build$src$core$utils$idgenerator;module$build$src$core$utils$idgenerator.getNextUniqueId=getNextUniqueId$$module$build$src$core$utils$idgenerator;var module$build$src$core$events$predicates={};module$build$src$core$events$predicates.isBlockChange=isBlockChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockCreate=isBlockCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockDelete=isBlockDelete$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockDrag=isBlockDrag$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isBlockFieldIntermediateChange=isBlockFieldIntermediateChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockMove=isBlockMove$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBubbleOpen=isBubbleOpen$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isClick=isClick$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isCommentChange=isCommentChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentCollapse=isCommentCollapse$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentCreate=isCommentCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentDelete=isCommentDelete$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isCommentDrag=isCommentDrag$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentMove=isCommentMove$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentResize=isCommentResize$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isFinishedLoading=isFinishedLoading$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isSelected=isSelected$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isThemeChange=isThemeChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isToolboxItemSelect=isToolboxItemSelect$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isTrashcanOpen=isTrashcanOpen$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isVarCreate=isVarCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isVarDelete=isVarDelete$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isVarRename=isVarRename$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isViewportChange=isViewportChange$$module$build$src$core$events$predicates;var group$$module$build$src$core$events$utils=\"\",recordUndo$$module$build$src$core$events$utils=!0,disabled$$module$build$src$core$events$utils=0,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils=\"ORPHANED_BLOCK\",FIRE_QUEUE$$module$build$src$core$events$utils=[],TEST_ONLY$$module$build$src$core$events$utils={FIRE_QUEUE:FIRE_QUEUE$$module$build$src$core$events$utils,enqueueEvent:enqueueEvent$$module$build$src$core$events$utils,fireNow:fireNow$$module$build$src$core$events$utils,fireInternal:fireInternal$$module$build$src$core$events$utils,\nsetGroupInternal:setGroupInternal$$module$build$src$core$events$utils},module$build$src$core$events$utils={TEST_ONLY:TEST_ONLY$$module$build$src$core$events$utils};module$build$src$core$events$utils.clearPendingUndo=clearPendingUndo$$module$build$src$core$events$utils;module$build$src$core$events$utils.disable=$.disable$$module$build$src$core$events$utils;module$build$src$core$events$utils.disableOrphans=disableOrphans$$module$build$src$core$events$utils;\nmodule$build$src$core$events$utils.enable=$.enable$$module$build$src$core$events$utils;module$build$src$core$events$utils.filter=filter$$module$build$src$core$events$utils;module$build$src$core$events$utils.fire=fire$$module$build$src$core$events$utils;module$build$src$core$events$utils.fromJson=fromJson$$module$build$src$core$events$utils;module$build$src$core$events$utils.get=get$$module$build$src$core$events$utils;module$build$src$core$events$utils.getDescendantIds=getDescendantIds$$module$build$src$core$events$utils;\nmodule$build$src$core$events$utils.getGroup=$.getGroup$$module$build$src$core$events$utils;module$build$src$core$events$utils.getRecordUndo=getRecordUndo$$module$build$src$core$events$utils;module$build$src$core$events$utils.isEnabled=isEnabled$$module$build$src$core$events$utils;module$build$src$core$events$utils.setGroup=$.setGroup$$module$build$src$core$events$utils;module$build$src$core$events$utils.setRecordUndo=$.setRecordUndo$$module$build$src$core$events$utils;var SVG_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/2000/svg\",HTML_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/1999/xhtml\",XLINK_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/1999/xlink\",NodeType$$module$build$src$core$utils$dom;(function(a){a[a.ELEMENT_NODE=1]=\"ELEMENT_NODE\";a[a.TEXT_NODE=3]=\"TEXT_NODE\";a[a.COMMENT_NODE=8]=\"COMMENT_NODE\"})(NodeType$$module$build$src$core$utils$dom||(NodeType$$module$build$src$core$utils$dom={}));\nvar cacheWidths$$module$build$src$core$utils$dom=null,cacheReference$$module$build$src$core$utils$dom=0,canvasContext$$module$build$src$core$utils$dom=null,module$build$src$core$utils$dom={HTML_NS:HTML_NS$$module$build$src$core$utils$dom};module$build$src$core$utils$dom.NodeType=NodeType$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.SVG_NS=SVG_NS$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.XLINK_NS=XLINK_NS$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.addClass=addClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.createSvgElement=createSvgElement$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getFastTextWidth=getFastTextWidth$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getFastTextWidthWithSizeString=getFastTextWidthWithSizeString$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getTextWidth=getTextWidth$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.hasClass=hasClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.insertAfter=insertAfter$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.measureFontMetrics=measureFontMetrics$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeClass=removeClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeClasses=removeClasses$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeNode=removeNode$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.setCssTransform=setCssTransform$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.startTextWidthCache=startTextWidthCache$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.stopTextWidthCache=stopTextWidthCache$$module$build$src$core$utils$dom;var FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser=class{static findFocusedNode(a){var b=a.getRootFocusableNode();if(!b.canBeFocused())return null;var c=b.getFocusableElement();if(hasClass$$module$build$src$core$utils$dom(c,FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME)||hasClass$$module$build$src$core$utils$dom(c,FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME))return b;\nb=c.querySelector(this.ACTIVE_FOCUS_NODE_CSS_SELECTOR);if(b instanceof HTMLElement||b instanceof SVGElement)if(b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(b,a))return b;c=c.querySelector(this.PASSIVE_FOCUS_NODE_CSS_SELECTOR);if(c instanceof HTMLElement||c instanceof SVGElement)if(a=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(c,a))return a;return null}static findFocusableNodeFor(a,b){if(!a.id||\na.id===\"null\"||b.getNestedTrees().map(e=>FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(a,e)).findIndex(e=>!!e)!==-1)return null;var c=b.getRootFocusableNode();if(c.canBeFocused()&&a===c.getFocusableElement())return c;var d;if(c=(d=b.lookUpFocusableNode(a.id))!=null?d:null)return c;d=a.parentElement;return!c&&d?FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(d,b):null}};\nFocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME=\"blocklyActiveFocus\";FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME=\"blocklyPassiveFocus\";FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_FOCUS_NODE_CSS_SELECTOR=`.${FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME}`;\nFocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_FOCUS_NODE_CSS_SELECTOR=`.${FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME}`;var module$build$src$core$utils$focusable_tree_traverser={};module$build$src$core$utils$focusable_tree_traverser.FocusableTreeTraverser=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser;var TreeRegistration$$module$build$src$core$focus_manager=class{constructor(a,b){this.tree=a;this.rootShouldBeAutoTabbable=b}},FocusManager$$module$build$src$core$focus_manager=class{constructor(a){this.previouslyFocusedNode=this.focusedNode=null;this.registeredTrees=[];this.isUpdatingFocusedNode=this.recentlyLostAllFocus=this.lockFocusStateChanges=this.currentlyHoldsEphemeralFocus=!1;const b=c=>{if(!this.isUpdatingFocusedNode){this.recentlyLostAllFocus=!c;var d=null;if(c instanceof HTMLElement||\nc instanceof SVGElement)for(var e of this.registeredTrees)if(d=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(c,e.tree))break;if(d&&d.canBeFocused()){c=d.getFocusableTree();let f;e=(f=this.focusedNode)==null?void 0:f.getFocusableTree();d===c.getRootFocusableNode()&&c!==e?this.focusTree(c):this.focusNode(d)}else this.defocusCurrentFocusedNode()}};a(\"focusin\",c=>{c instanceof FocusEvent&&b(document.activeElement)});a(\"focusout\",c=>{c instanceof FocusEvent&&\nb(c.relatedTarget)})}registerTree(a,b=!1){this.ensureManagerIsUnlocked();if(this.isRegistered(a))throw Error(`Attempted to re-register already registered tree: ${a}.`);this.registeredTrees.push(new TreeRegistration$$module$build$src$core$focus_manager(a,b));const c=a.getRootFocusableNode().getFocusableElement();if(!c.id||c.id===\"null\")throw Error(\"Attempting to register a tree with a root element that has an \"+`invalid ID: ${a}.`);b&&(c.tabIndex=0)}isRegistered(a){return!!this.lookUpRegistration(a)}lookUpRegistration(a){let b;\nreturn(b=this.registeredTrees.find(c=>c.tree===a))!=null?b:null}unregisterTree(a){this.ensureManagerIsUnlocked();if(!this.isRegistered(a))throw Error(`Attempted to unregister not registered tree: ${a}.`);var b=this.registeredTrees.findIndex(e=>e.tree===a);const c=this.registeredTrees[b];this.registeredTrees.splice(b,1);b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(a);const d=a.getRootFocusableNode();b&&this.removeHighlight(b);this.focusedNode!==b&&\nthis.focusedNode!==d||this.updateFocusedNode(null);this.removeHighlight(d);c.rootShouldBeAutoTabbable&&a.getRootFocusableNode().getFocusableElement().removeAttribute(\"tabindex\")}getFocusedTree(){let a,b;return(b=(a=this.focusedNode)==null?void 0:a.getFocusableTree())!=null?b:null}getFocusedNode(){return this.focusedNode}focusTree(a){this.ensureManagerIsUnlocked();if(!this.isRegistered(a))throw Error(`Attempted to focus unregistered tree: ${a}.`);const b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(a),\nc=a.getRestoredFocusableNode(b);a=a.getRootFocusableNode();let d;this.focusNode((d=c!=null?c:b)!=null?d:a)}focusNode(a){this.ensureManagerIsUnlocked();const b=!this.currentlyHoldsEphemeralFocus;b&&(this.isUpdatingFocusedNode=!0);var c,d=((c=this.focusedNode)==null?void 0:c.getFocusableElement())!==document.activeElement;if(this.focusedNode!==a||d)if(a.canBeFocused()){c=a.getFocusableTree();if(!this.isRegistered(c))throw Error(`Attempted to focus unregistered node: ${a}.`);d=a.getFocusableElement();\nd.id&&d.id!==\"null\"||console.warn(\"Trying to focus a node that has an invalid ID.\");var e=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(d,c);d=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(c);var f=a;if(e!==a){f=c.getRestoredFocusableNode(d);a=c.getRootFocusableNode();var g;f=(g=f!=null?f:d)!=null?g:a}a=this.focusedNode;g=a==null?void 0:a.getFocusableTree();a&&this.passivelyFocusNode(a,c);c=c.getRootFocusableNode();\nd&&this.removeHighlight(d);c!==f&&this.removeHighlight(c);this.currentlyHoldsEphemeralFocus||this.activelyFocusNode(f,g!=null?g:null);this.updateFocusedNode(f)}else console.warn(\"Trying to focus a node that can't be focused.\");b&&(this.isUpdatingFocusedNode=!1)}takeEphemeralFocus(a){this.ensureManagerIsUnlocked();if(this.currentlyHoldsEphemeralFocus)throw Error(\"Attempted to take ephemeral focus when it's already held, \"+`with new element: ${a}.`);this.currentlyHoldsEphemeralFocus=!0;this.focusedNode&&\nthis.passivelyFocusNode(this.focusedNode,null);a.focus({preventScroll:!0});let b=!1;return()=>{if(b)throw Error(\"Attempted to finish ephemeral focus twice for element: \"+`${a}.`);b=!0;this.currentlyHoldsEphemeralFocus=!1;if(this.focusedNode){this.activelyFocusNode(this.focusedNode,null);const c=this.focusedNode;setTimeout(()=>{!this.focusedNode&&this.previouslyFocusedNode===c&&this.recentlyLostAllFocus&&this.focusNode(c)},0)}}}ephemeralFocusTaken(){return this.currentlyHoldsEphemeralFocus}ensureManagerIsUnlocked(){if(this.lockFocusStateChanges)throw Error(\"FocusManager state changes cannot happen in a tree/node focus/blur callback.\");\n}updateFocusedNode(a){this.previouslyFocusedNode=this.focusedNode;this.focusedNode=a}defocusCurrentFocusedNode(){this.focusedNode&&!this.currentlyHoldsEphemeralFocus&&(this.passivelyFocusNode(this.focusedNode,null),this.updateFocusedNode(null))}activelyFocusNode(a,b){this.lockFocusStateChanges=!0;const c=a.getFocusableTree(),d=a.getFocusableElement();let e;const f=(e=this.lookUpRegistration(c))==null?void 0:e.rootShouldBeAutoTabbable;c!==b&&(c.onTreeFocus(a,b),f&&(c.getRootFocusableNode().getFocusableElement().tabIndex=\n-1));a.onNodeFocus();this.lockFocusStateChanges=!1;f&&a===c.getRootFocusableNode()||d.hasAttribute(\"tabindex\")||(d.tabIndex=-1);this.setNodeToVisualActiveFocus(a);d.focus({preventScroll:!0})}passivelyFocusNode(a,b){this.lockFocusStateChanges=!0;const c=a.getFocusableTree();if(c!==b){c.onTreeBlur(b);let d;if((d=this.lookUpRegistration(c))==null?0:d.rootShouldBeAutoTabbable)c.getRootFocusableNode().getFocusableElement().tabIndex=0}a.onNodeBlur();this.lockFocusStateChanges=!1;c!==b&&this.setNodeToVisualPassiveFocus(a)}setNodeToVisualActiveFocus(a){a=\na.getFocusableElement();addClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}setNodeToVisualPassiveFocus(a){a=a.getFocusableElement();removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);addClass$$module$build$src$core$utils$dom(a,\nFocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}removeHighlight(a){a=a.getFocusableElement();removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}static getFocusManager(){FocusManager$$module$build$src$core$focus_manager.focusManager||(FocusManager$$module$build$src$core$focus_manager.focusManager=\nnew FocusManager$$module$build$src$core$focus_manager(document.addEventListener));return FocusManager$$module$build$src$core$focus_manager.focusManager}};FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME=\"blocklyActiveFocus\";FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME=\"blocklyPassiveFocus\";FocusManager$$module$build$src$core$focus_manager.focusManager=null;var module$build$src$core$focus_manager={};\nmodule$build$src$core$focus_manager.FocusManager=FocusManager$$module$build$src$core$focus_manager;module$build$src$core$focus_manager.getFocusManager=$.getFocusManager$$module$build$src$core$focus_manager;var module$build$src$core$interfaces$i_focusable_node={};module$build$src$core$interfaces$i_focusable_node.isFocusableNode=isFocusableNode$$module$build$src$core$interfaces$i_focusable_node;var module$build$src$core$interfaces$i_selectable={};module$build$src$core$interfaces$i_selectable.isSelectable=isSelectable$$module$build$src$core$interfaces$i_selectable;var module$build$src$core$utils$object={};module$build$src$core$utils$object.deepMerge=deepMerge$$module$build$src$core$utils$object;var ShortcutRegistry$$module$build$src$core$shortcut_registry=class{constructor(){this.shortcuts=new Map;this.keyMap=new Map;this.reset()}reset(){this.shortcuts.clear();this.keyMap.clear()}register(a,b){if(this.shortcuts.get(a.name)&&!b)throw Error(`Shortcut named \"${a.name}\" already exists.`);this.shortcuts.set(a.name,a);b=a.keyCodes;if(b==null?0:b.length)for(const c of b)this.addKeyMapping(c,a.name,!!a.allowCollision)}unregister(a){if(!this.shortcuts.get(a))return console.warn(`Keyboard shortcut named \"${a}\" not found.`),\n!1;this.removeAllKeyMappings(a);this.shortcuts.delete(a);return!0}addKeyMapping(a,b,c){a=`${a}`;const d=this.keyMap.get(a);if(d&&!c)throw Error(`Shortcut named \"${b}\" collides with shortcuts \"${d}\"`);d&&c?d.unshift(b):this.keyMap.set(a,[b])}removeKeyMapping(a,b,c){const d=this.keyMap.get(a);if(!d)return c||console.warn(`No keyboard shortcut named \"${b}\" registered with key code \"${a}\"`),!1;const e=d.indexOf(b);if(e>-1)return d.splice(e,1),d.length===0&&this.keyMap.delete(a),!0;c||console.warn(`No keyboard shortcut named \"${b}\" registered with key code \"${a}\"`);\nreturn!1}removeAllKeyMappings(a){for(const b of this.keyMap.keys())this.removeKeyMapping(b,a,!0)}setKeyMap(a){this.keyMap.clear();for(const b in a)this.keyMap.set(b,a[b])}getKeyMap(){const a=Object.create(null);for(const [b,c]of this.keyMap)a[b]=c;return a}getRegistry(){const a=Object.create(null);for(const [b,c]of this.shortcuts)a[b]=c;return deepMerge$$module$build$src$core$utils$object(Object.create(null),a)}onKeyDown(a,b){var c=this.serializeKeyEvent(b);c=this.getShortcutNamesByKeyCode(c);if(!c)return!1;\nfor(const d of c){c=this.shortcuts.get(d);let e;if(!c||c.preconditionFn&&!c.preconditionFn(a,{focusedNode:(e=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode())!=null?e:void 0}))continue;let f,g,h;if((g=(f=c).callback)==null?0:g.call(f,a,b,c,{focusedNode:(h=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode())!=null?h:void 0}))return!0}return!1}getShortcutNamesByKeyCode(a){let b;return((b=this.keyMap.get(a))==null?void 0:b.slice())||[]}getKeyCodesByShortcutName(a){const b=\n[];for(const [c,d]of this.keyMap)d.indexOf(a)>-1&&b.push(c);return b}serializeKeyEvent(a){let b=\"\";for(const c in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys)a.getModifierState(c)&&(b!==\"\"&&(b+=\"+\"),b+=c);b!==\"\"&&a.keyCode?b+=\"+\"+a.keyCode:a.keyCode&&(b=String(a.keyCode));return b}checkModifiers(a){for(const b of a)if(!(b in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys))throw Error(b+\" is not a valid modifier key.\");}createSerializedKey(a,b){let c=\n\"\";if(b){this.checkModifiers(b);for(const d in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys)b.includes(ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys[d])&&(c!==\"\"&&(c+=\"+\"),c+=d)}c!==\"\"&&a?c+=\"+\"+a:a&&(c=`${a}`);return c}};ShortcutRegistry$$module$build$src$core$shortcut_registry.registry=new ShortcutRegistry$$module$build$src$core$shortcut_registry;\n(function(a){a=a.modifierKeys||(a.modifierKeys={});a[a.Shift=16]=\"Shift\";a[a.Control=17]=\"Control\";a[a.Alt=18]=\"Alt\";a[a.Meta=91]=\"Meta\"})(ShortcutRegistry$$module$build$src$core$shortcut_registry||(ShortcutRegistry$$module$build$src$core$shortcut_registry={}));var module$build$src$core$shortcut_registry={};module$build$src$core$shortcut_registry.ShortcutRegistry=ShortcutRegistry$$module$build$src$core$shortcut_registry;var WorkspaceDB_$$module$build$src$core$common=Object.create(null),mainWorkspace$$module$build$src$core$common,parentContainer$$module$build$src$core$common,draggingConnections$$module$build$src$core$common=[],TEST_ONLY$$module$build$src$core$common={defineBlocksWithJsonArrayInternal:defineBlocksWithJsonArrayInternal$$module$build$src$core$common},module$build$src$core$common={TEST_ONLY:TEST_ONLY$$module$build$src$core$common};module$build$src$core$common.createBlockDefinitionsFromJsonArray=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common;\nmodule$build$src$core$common.defineBlocks=$.defineBlocks$$module$build$src$core$common;module$build$src$core$common.defineBlocksWithJsonArray=defineBlocksWithJsonArray$$module$build$src$core$common;module$build$src$core$common.draggingConnections=draggingConnections$$module$build$src$core$common;module$build$src$core$common.fireSelectedEvent=fireSelectedEvent$$module$build$src$core$common;module$build$src$core$common.getAllWorkspaces=getAllWorkspaces$$module$build$src$core$common;\nmodule$build$src$core$common.getBlockTypeCounts=getBlockTypeCounts$$module$build$src$core$common;module$build$src$core$common.getMainWorkspace=getMainWorkspace$$module$build$src$core$common;module$build$src$core$common.getParentContainer=getParentContainer$$module$build$src$core$common;module$build$src$core$common.getSelected=getSelected$$module$build$src$core$common;module$build$src$core$common.getWorkspaceById=getWorkspaceById$$module$build$src$core$common;\nmodule$build$src$core$common.globalShortcutHandler=globalShortcutHandler$$module$build$src$core$common;module$build$src$core$common.registerWorkspace=registerWorkspace$$module$build$src$core$common;module$build$src$core$common.setMainWorkspace=setMainWorkspace$$module$build$src$core$common;module$build$src$core$common.setParentContainer=setParentContainer$$module$build$src$core$common;module$build$src$core$common.setSelected=setSelected$$module$build$src$core$common;\nmodule$build$src$core$common.svgResize=svgResize$$module$build$src$core$common;module$build$src$core$common.unregisterWorkpace=unregisterWorkpace$$module$build$src$core$common;var Abstract$$module$build$src$core$events$events_abstract=class{constructor(){this.workspaceId=void 0;this.isUiEvent=!1;this.type=\"\";this.group=$.getGroup$$module$build$src$core$events$utils();this.recordUndo=getRecordUndo$$module$build$src$core$events$utils()}toJson(){return{type:this.type,group:this.group}}static fromJson(a,b,c){c.isBlank=!1;c.group=a.group||\"\";c.workspaceId=b.id;return c}isNull(){return!1}run(a){}getEventWorkspace_(){let a;this.workspaceId&&(a=getWorkspaceById$$module$build$src$core$common(this.workspaceId));\nif(!a)throw Error(\"Workspace is null. Event must have been generated from real Blockly events.\");return a}},module$build$src$core$events$events_abstract={};module$build$src$core$events$events_abstract.Abstract=Abstract$$module$build$src$core$events$events_abstract;var UiBase$$module$build$src$core$events$events_ui_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.recordUndo=!1;this.isUiEvent=!0;this.isBlank=typeof a===\"undefined\";this.workspaceId=a?a:\"\"}},module$build$src$core$events$events_ui_base={};module$build$src$core$events$events_ui_base.UiBase=UiBase$$module$build$src$core$events$events_ui_base;var Click$$module$build$src$core$events$events_click=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b,c){b=a?a.workspace.id:b;b===null&&(b=void 0);super(b);this.type=EventType$$module$build$src$core$events$type.CLICK;this.blockId=a?a.id:void 0;this.targetType=c}toJson(){const a=super.toJson();if(!this.targetType)throw Error(\"The click target type is undefined. Either pass a block to the constructor, or call fromJson\");a.targetType=this.targetType;a.blockId=this.blockId;\nreturn a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new Click$$module$build$src$core$events$events_click);b.targetType=a.targetType;b.blockId=a.blockId;return b}},ClickTarget$$module$build$src$core$events$events_click;(function(a){a.BLOCK=\"block\";a.WORKSPACE=\"workspace\";a.ZOOM_CONTROLS=\"zoom_controls\"})(ClickTarget$$module$build$src$core$events$events_click||(ClickTarget$$module$build$src$core$events$events_click={}));\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.CLICK,Click$$module$build$src$core$events$events_click);var module$build$src$core$events$events_click={};module$build$src$core$events$events_click.Click=Click$$module$build$src$core$events$events_click;module$build$src$core$events$events_click.ClickTarget=ClickTarget$$module$build$src$core$events$events_click;var module$build$src$core$utils$array={};module$build$src$core$utils$array.removeElem=removeElem$$module$build$src$core$utils$array;var Capability$$module$build$src$core$component_manager=class{constructor(a){this.name=a}toString(){return this.name}};Capability$$module$build$src$core$component_manager.POSITIONABLE=new Capability$$module$build$src$core$component_manager(\"positionable\");Capability$$module$build$src$core$component_manager.DRAG_TARGET=new Capability$$module$build$src$core$component_manager(\"drag_target\");Capability$$module$build$src$core$component_manager.DELETE_AREA=new Capability$$module$build$src$core$component_manager(\"delete_area\");\nCapability$$module$build$src$core$component_manager.AUTOHIDEABLE=new Capability$$module$build$src$core$component_manager(\"autohideable\");\nvar ComponentManager$$module$build$src$core$component_manager=class{constructor(){this.componentData=new Map;this.capabilityToComponentIds=new Map}addComponent(a,b){const c=a.component.id;if(!b&&this.componentData.has(c)){var d;throw Error('Plugin \"'+c+'\" with capabilities \"'+((d=this.componentData.get(c))==null?void 0:d.capabilities)+'\" already added.');}this.componentData.set(c,a);b=[];for(d=0;d\n{d.push(this.componentData.get(e))});d.sort(function(e,f){return e.weight-f.weight});d.forEach(function(e){c.push(e.component)})}else a.forEach(d=>{c.push(this.componentData.get(d).component)});return c}};ComponentManager$$module$build$src$core$component_manager.Capability=Capability$$module$build$src$core$component_manager;\n(function(a){a=a.ComponentWeight||(a.ComponentWeight={});a[a.TOOLBOX_WEIGHT=0]=\"TOOLBOX_WEIGHT\";a[a.FLYOUT_WEIGHT=1]=\"FLYOUT_WEIGHT\";a[a.TRASHCAN_WEIGHT=2]=\"TRASHCAN_WEIGHT\";a[a.ZOOM_CONTROLS_WEIGHT=3]=\"ZOOM_CONTROLS_WEIGHT\"})(ComponentManager$$module$build$src$core$component_manager||(ComponentManager$$module$build$src$core$component_manager={}));\nvar ComponentWeight$$module$build$src$core$component_manager=ComponentManager$$module$build$src$core$component_manager.ComponentWeight,module$build$src$core$component_manager={};module$build$src$core$component_manager.ComponentManager=ComponentManager$$module$build$src$core$component_manager;module$build$src$core$component_manager.ComponentWeight=ComponentWeight$$module$build$src$core$component_manager;var injected$$module$build$src$core$css=!1,content$$module$build$src$core$css='\\n.blocklySvg {\\n background-color: #fff;\\n outline: none;\\n overflow: hidden; /* IE overflows by default. */\\n position: absolute;\\n display: block;\\n}\\n\\n.blocklyWidgetDiv {\\n display: none;\\n position: absolute;\\n z-index: 99999; /* big value for bootstrap3 compatibility */\\n}\\n\\n.injectionDiv {\\n height: 100%;\\n position: relative;\\n overflow: hidden; /* So blocks in drag surface disappear at edges */\\n touch-action: none;\\n user-select: none;\\n -webkit-user-select: none;\\n}\\n\\n.blocklyBlockCanvas.blocklyCanvasTransitioning,\\n.blocklyBubbleCanvas.blocklyCanvasTransitioning {\\n transition: transform .5s;\\n}\\n\\n.blocklyEmboss {\\n filter: var(--blocklyEmbossFilter);\\n}\\n\\n.blocklyTooltipDiv {\\n background-color: #ffffc7;\\n border: 1px solid #ddc;\\n box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15);\\n color: #000;\\n display: none;\\n font: 9pt sans-serif;\\n opacity: .9;\\n padding: 2px;\\n position: absolute;\\n z-index: 100000; /* big value for bootstrap3 compatibility */\\n}\\n\\n.blocklyDropDownDiv {\\n position: absolute;\\n left: 0;\\n top: 0;\\n z-index: 1000;\\n display: none;\\n border: 1px solid;\\n border-color: #dadce0;\\n background-color: #fff;\\n border-radius: 2px;\\n padding: 4px;\\n box-shadow: 0 0 3px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownDiv:focus {\\n box-shadow: 0 0 6px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownContent {\\n max-height: 300px; /* @todo: spec for maximum height. */\\n}\\n\\n.blocklyDropDownArrow {\\n position: absolute;\\n left: 0;\\n top: 0;\\n width: 16px;\\n height: 16px;\\n z-index: -1;\\n background-color: inherit;\\n border-color: inherit;\\n border-top: 1px solid;\\n border-left: 1px solid;\\n border-top-left-radius: 4px;\\n border-color: inherit;\\n}\\n\\n.blocklyHighlighted>.blocklyPath {\\n filter: var(--blocklyEmbossFilter);\\n}\\n\\n.blocklyHighlightedConnectionPath {\\n fill: none;\\n stroke: #fc3;\\n stroke-width: 4px;\\n}\\n\\n.blocklyPathLight {\\n fill: none;\\n stroke-linecap: round;\\n stroke-width: 1;\\n}\\n\\n.blocklySelected>.blocklyPathLight {\\n display: none;\\n}\\n\\n.blocklyDraggable {\\n cursor: grab;\\n cursor: -webkit-grab;\\n}\\n\\n.blocklyDragging {\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n /* Drag surface disables events to not block the toolbox, so we have to\\n * reenable them here for the cursor values to work. */\\n pointer-events: auto;\\n}\\n\\n /* Changes cursor on mouse down. Not effective in Firefox because of\\n https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */\\n.blocklyDraggable:active {\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n}\\n\\n.blocklyDragging.blocklyDraggingDelete,\\n.blocklyDragging.blocklyDraggingDelete .blocklyField {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyDragging>.blocklyPath,\\n.blocklyDragging>.blocklyPathLight {\\n fill-opacity: .8;\\n stroke-opacity: .8;\\n}\\n\\n.blocklyDragging>.blocklyPathDark {\\n display: none;\\n}\\n\\n.blocklyDisabledPattern>.blocklyPath {\\n fill: var(--blocklyDisabledPattern);\\n fill-opacity: .5;\\n stroke-opacity: .5;\\n}\\n\\n.blocklyDisabled>.blocklyPathLight,\\n.blocklyDisabled>.blocklyPathDark {\\n display: none;\\n}\\n\\n.blocklyInsertionMarker>.blocklyPath,\\n.blocklyInsertionMarker>.blocklyPathLight,\\n.blocklyInsertionMarker>.blocklyPathDark {\\n fill-opacity: .2;\\n stroke: none;\\n}\\n\\n.blocklyNonEditableField>text {\\n pointer-events: none;\\n}\\n\\n.blocklyFlyout {\\n position: absolute;\\n z-index: 20;\\n}\\n\\n.blocklyText text {\\n cursor: default;\\n}\\n\\n/*\\n Don\\'t allow users to select text. It gets annoying when trying to\\n drag a block and selected text moves instead.\\n*/\\n.blocklySvg text {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n cursor: inherit;\\n}\\n\\n.blocklyIconGroup {\\n cursor: default;\\n}\\n\\n.blocklyIconGroup:not(:hover):not(:focus),\\n.blocklyIconGroupReadonly {\\n opacity: .6;\\n}\\n\\n.blocklyIconShape {\\n fill: #00f;\\n stroke: #fff;\\n stroke-width: 1px;\\n}\\n\\n.blocklyIconSymbol {\\n fill: #fff;\\n}\\n\\n.blocklyMinimalBody {\\n margin: 0;\\n padding: 0;\\n height: 100%;\\n}\\n\\n.blocklyHtmlInput {\\n border: none;\\n border-radius: 4px;\\n height: 100%;\\n margin: 0;\\n outline: none;\\n padding: 0;\\n width: 100%;\\n text-align: center;\\n display: block;\\n box-sizing: border-box;\\n}\\n\\n/* Remove the increase and decrease arrows on the field number editor */\\ninput.blocklyHtmlInput[type=number]::-webkit-inner-spin-button,\\ninput.blocklyHtmlInput[type=number]::-webkit-outer-spin-button {\\n -webkit-appearance: none;\\n margin: 0;\\n}\\n\\ninput[type=number] {\\n -moz-appearance: textfield;\\n}\\n\\n.blocklyMainBackground {\\n stroke-width: 1;\\n stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */\\n}\\n\\n.blocklyMutatorBackground {\\n fill: #fff;\\n stroke: #ddd;\\n stroke-width: 1;\\n}\\n\\n.blocklyFlyoutBackground {\\n fill: #ddd;\\n fill-opacity: .8;\\n}\\n\\n.blocklyMainWorkspaceScrollbar {\\n z-index: 20;\\n}\\n\\n.blocklyFlyoutScrollbar {\\n z-index: 30;\\n}\\n\\n.blocklyScrollbarHorizontal,\\n.blocklyScrollbarVertical {\\n position: absolute;\\n outline: none;\\n}\\n\\n.blocklyScrollbarBackground {\\n opacity: 0;\\n pointer-events: none;\\n}\\n\\n.blocklyScrollbarHandle {\\n fill: #ccc;\\n}\\n\\n.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,\\n.blocklyScrollbarHandle:hover {\\n fill: #bbb;\\n}\\n\\n/* Darken flyout scrollbars due to being on a grey background. */\\n/* By contrast, workspace scrollbars are on a white background. */\\n.blocklyFlyout .blocklyScrollbarHandle {\\n fill: #bbb;\\n}\\n\\n.blocklyFlyout .blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,\\n.blocklyFlyout .blocklyScrollbarHandle:hover {\\n fill: #aaa;\\n}\\n\\n.blocklyInvalidInput {\\n background: #faa;\\n}\\n\\n.blocklyVerticalMarker {\\n stroke-width: 3px;\\n fill: rgba(255,255,255,.5);\\n pointer-events: none;\\n}\\n\\n.blocklyComputeCanvas {\\n position: absolute;\\n width: 0;\\n height: 0;\\n}\\n\\n.blocklyNoPointerEvents {\\n pointer-events: none;\\n}\\n\\n.blocklyContextMenu {\\n border-radius: 4px;\\n max-height: 100%;\\n}\\n\\n.blocklyDropdownMenu {\\n border-radius: 2px;\\n padding: 0 !important;\\n}\\n\\n.blocklyDropdownMenu .blocklyMenuItem {\\n /* 28px on the left for icon or checkbox. */\\n padding-left: 28px;\\n}\\n\\n/* BiDi override for the resting state. */\\n.blocklyDropdownMenu .blocklyMenuItemRtl {\\n /* Flip left/right padding for BiDi. */\\n padding-left: 5px;\\n padding-right: 28px;\\n}\\n\\n.blocklyWidgetDiv .blocklyMenu {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background: #fff;\\n border: 1px solid transparent;\\n box-shadow: 0 0 3px 1px rgba(0,0,0,.3);\\n font: normal 13px Arial, sans-serif;\\n margin: 0;\\n outline: none;\\n padding: 4px 0;\\n position: absolute;\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 100%;\\n z-index: 20000; /* Arbitrary, but some apps depend on it... */\\n}\\n\\n.blocklyWidgetDiv .blocklyMenu:focus {\\n box-shadow: 0 0 6px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownDiv .blocklyMenu {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background: inherit; /* Compatibility with gapi, reset from goog-menu */\\n border: inherit; /* Compatibility with gapi, reset from goog-menu */\\n font: normal 13px \"Helvetica Neue\", Helvetica, sans-serif;\\n outline: none;\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 100%;\\n z-index: 20000; /* Arbitrary, but some apps depend on it... */\\n}\\n\\n/* State: resting. */\\n.blocklyMenuItem {\\n border: none;\\n color: #000;\\n cursor: pointer;\\n list-style: none;\\n margin: 0;\\n /* 7em on the right for shortcut. */\\n min-width: 7em;\\n padding: 6px 15px;\\n white-space: nowrap;\\n}\\n\\n/* State: disabled. */\\n.blocklyMenuItemDisabled {\\n color: #ccc;\\n cursor: inherit;\\n}\\n\\n/* State: hover. */\\n.blocklyMenuItemHighlight {\\n background-color: rgba(0,0,0,.1);\\n}\\n\\n/* State: selected/checked. */\\n.blocklyMenuItemCheckbox {\\n height: 16px;\\n position: absolute;\\n width: 16px;\\n}\\n\\n.blocklyMenuItemSelected .blocklyMenuItemCheckbox {\\n background: url(<<>>/sprites.png) no-repeat -48px -16px;\\n float: left;\\n margin-left: -24px;\\n position: static; /* Scroll with the menu. */\\n}\\n\\n.blocklyMenuItemRtl .blocklyMenuItemCheckbox {\\n float: right;\\n margin-right: -24px;\\n}\\n\\n.blocklyMenuSeparator {\\n background-color: #ccc;\\n height: 1px;\\n border: 0;\\n margin-left: 4px;\\n margin-right: 4px;\\n}\\n\\n.blocklyBlockDragSurface, .blocklyAnimationLayer {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n overflow: visible !important;\\n z-index: 80;\\n pointer-events: none;\\n}\\n\\n.blocklyField {\\n cursor: default;\\n}\\n\\n.blocklyInputField {\\n cursor: text;\\n}\\n\\n.blocklyDragging .blocklyField,\\n.blocklyDragging .blocklyIconGroup {\\n cursor: grabbing;\\n}\\n\\n.blocklyActiveFocus:is(\\n .blocklyFlyout,\\n .blocklyWorkspace,\\n .blocklyField,\\n .blocklyPath,\\n .blocklyHighlightedConnectionPath,\\n .blocklyComment,\\n .blocklyBubble,\\n .blocklyIconGroup,\\n .blocklyTextarea\\n) {\\n outline: none;\\n}\\n',\nmodule$build$src$core$css={};module$build$src$core$css.inject=inject$$module$build$src$core$css;module$build$src$core$css.register=register$$module$build$src$core$css;var Coordinate$$module$build$src$core$utils$coordinate=class{constructor(a,b){this.x=a;this.y=b}clone(){return new Coordinate$$module$build$src$core$utils$coordinate(this.x,this.y)}scale(a){this.x*=a;this.y*=a;return this}translate(a,b){this.x+=a;this.y+=b;return this}static equals(a,b){return a===b?!0:a&&b?a.x===b.x&&a.y===b.y:!1}static distance(a,b){const c=a.x-b.x;a=a.y-b.y;return Math.sqrt(c*c+a*a)}static magnitude(a){return Math.sqrt(a.x*a.x+a.y*a.y)}static difference(a,b){return new Coordinate$$module$build$src$core$utils$coordinate(a.x-\nb.x,a.y-b.y)}static sum(a,b){return new Coordinate$$module$build$src$core$utils$coordinate(a.x+b.x,a.y+b.y)}},module$build$src$core$utils$coordinate={};module$build$src$core$utils$coordinate.Coordinate=Coordinate$$module$build$src$core$utils$coordinate;var Svg$$module$build$src$core$utils$svg=class{constructor(a){this.tagName=a}toString(){return this.tagName}};Svg$$module$build$src$core$utils$svg.ANIMATE=new Svg$$module$build$src$core$utils$svg(\"animate\");Svg$$module$build$src$core$utils$svg.CIRCLE=new Svg$$module$build$src$core$utils$svg(\"circle\");Svg$$module$build$src$core$utils$svg.CLIPPATH=new Svg$$module$build$src$core$utils$svg(\"clipPath\");Svg$$module$build$src$core$utils$svg.DEFS=new Svg$$module$build$src$core$utils$svg(\"defs\");\nSvg$$module$build$src$core$utils$svg.FECOMPOSITE=new Svg$$module$build$src$core$utils$svg(\"feComposite\");Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER=new Svg$$module$build$src$core$utils$svg(\"feComponentTransfer\");Svg$$module$build$src$core$utils$svg.FEFLOOD=new Svg$$module$build$src$core$utils$svg(\"feFlood\");Svg$$module$build$src$core$utils$svg.FEFUNCA=new Svg$$module$build$src$core$utils$svg(\"feFuncA\");Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR=new Svg$$module$build$src$core$utils$svg(\"feGaussianBlur\");\nSvg$$module$build$src$core$utils$svg.FEPOINTLIGHT=new Svg$$module$build$src$core$utils$svg(\"fePointLight\");Svg$$module$build$src$core$utils$svg.FESPECULARLIGHTING=new Svg$$module$build$src$core$utils$svg(\"feSpecularLighting\");Svg$$module$build$src$core$utils$svg.FILTER=new Svg$$module$build$src$core$utils$svg(\"filter\");Svg$$module$build$src$core$utils$svg.FOREIGNOBJECT=new Svg$$module$build$src$core$utils$svg(\"foreignObject\");Svg$$module$build$src$core$utils$svg.G=new Svg$$module$build$src$core$utils$svg(\"g\");\nSvg$$module$build$src$core$utils$svg.IMAGE=new Svg$$module$build$src$core$utils$svg(\"image\");Svg$$module$build$src$core$utils$svg.LINE=new Svg$$module$build$src$core$utils$svg(\"line\");Svg$$module$build$src$core$utils$svg.PATH=new Svg$$module$build$src$core$utils$svg(\"path\");Svg$$module$build$src$core$utils$svg.PATTERN=new Svg$$module$build$src$core$utils$svg(\"pattern\");Svg$$module$build$src$core$utils$svg.POLYGON=new Svg$$module$build$src$core$utils$svg(\"polygon\");\nSvg$$module$build$src$core$utils$svg.RECT=new Svg$$module$build$src$core$utils$svg(\"rect\");Svg$$module$build$src$core$utils$svg.SVG=new Svg$$module$build$src$core$utils$svg(\"svg\");Svg$$module$build$src$core$utils$svg.TEXT=new Svg$$module$build$src$core$utils$svg(\"text\");Svg$$module$build$src$core$utils$svg.TSPAN=new Svg$$module$build$src$core$utils$svg(\"tspan\");var module$build$src$core$utils$svg={};module$build$src$core$utils$svg.Svg=Svg$$module$build$src$core$utils$svg;var Rect$$module$build$src$core$utils$rect=class{constructor(a,b,c,d){this.top=a;this.bottom=b;this.left=c;this.right=d}static from(a){return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}clone(){return new Rect$$module$build$src$core$utils$rect(this.top,this.bottom,this.left,this.right)}getHeight(){return this.bottom-this.top}getWidth(){return this.right-this.left}getOrigin(){return new Coordinate$$module$build$src$core$utils$coordinate(this.left,this.top)}contains(a,\nb){return a>=this.left&&a<=this.right&&b>=this.top&&b<=this.bottom}intersects(a){return this.left<=a.right&&this.right>=a.left&&this.bottom>=a.top&&this.top<=a.bottom}static equals(a,b){return a===b?!0:a&&b?a.top===b.top&&a.bottom===b.bottom&&a.left===b.left&&a.right===b.right:!1}static createFromPoint(a,b,c){const d=a.x;a=a.y;return new Rect$$module$build$src$core$utils$rect(a,a+c,d,d+b)}},module$build$src$core$utils$rect={};module$build$src$core$utils$rect.Rect=Rect$$module$build$src$core$utils$rect;var Size$$module$build$src$core$utils$size=class{constructor(a,b){this.width=a;this.height=b}static equals(a,b){return a===b?!0:a&&b?a.width===b.width&&a.height===b.height:!1}static max(a,b){return new Size$$module$build$src$core$utils$size(Math.max(a.width,b.width),Math.max(a.height,b.height))}static min(a,b){return new Size$$module$build$src$core$utils$size(Math.min(a.width,b.width),Math.min(a.height,b.height))}},module$build$src$core$utils$size={};module$build$src$core$utils$size.Size=Size$$module$build$src$core$utils$size;var TEST_ONLY$$module$build$src$core$utils$style={getSizeInternal:getSizeInternal$$module$build$src$core$utils$style},module$build$src$core$utils$style={TEST_ONLY:TEST_ONLY$$module$build$src$core$utils$style};module$build$src$core$utils$style.getBorderBox=getBorderBox$$module$build$src$core$utils$style;module$build$src$core$utils$style.getComputedStyle=getComputedStyle$$module$build$src$core$utils$style;module$build$src$core$utils$style.getContainerOffsetToScrollInto=getContainerOffsetToScrollInto$$module$build$src$core$utils$style;\nmodule$build$src$core$utils$style.getPageOffset=getPageOffset$$module$build$src$core$utils$style;module$build$src$core$utils$style.getSize=getSize$$module$build$src$core$utils$style;module$build$src$core$utils$style.getViewportPageOffset=getViewportPageOffset$$module$build$src$core$utils$style;module$build$src$core$utils$style.scrollIntoContainerView=scrollIntoContainerView$$module$build$src$core$utils$style;var XY_REGEX$$module$build$src$core$utils$svg_math=/translate\\(\\s*([-+\\d.e]+)([ ,]\\s*([-+\\d.e]+)\\s*)?/,XY_STYLE_REGEX$$module$build$src$core$utils$svg_math=/transform:\\s*translate(?:3d)?\\(\\s*([-+\\d.e]+)\\s*px([ ,]\\s*([-+\\d.e]+)\\s*px)?/,TEST_ONLY$$module$build$src$core$utils$svg_math={XY_REGEX:XY_REGEX$$module$build$src$core$utils$svg_math,XY_STYLE_REGEX:XY_STYLE_REGEX$$module$build$src$core$utils$svg_math},module$build$src$core$utils$svg_math={TEST_ONLY:TEST_ONLY$$module$build$src$core$utils$svg_math};\nmodule$build$src$core$utils$svg_math.getDocumentScroll=getDocumentScroll$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getInjectionDivXY=getInjectionDivXY$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getRelativeXY=getRelativeXY$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getViewportBBox=getViewportBBox$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.screenToWsCoordinates=screenToWsCoordinates$$module$build$src$core$utils$svg_math;\nmodule$build$src$core$utils$svg_math.wsToScreenCoordinates=wsToScreenCoordinates$$module$build$src$core$utils$svg_math;var Scrollbar$$module$build$src$core$scrollbar=class{constructor(a,b,c,d,e){this.workspace=a;this.horizontal=b;this.oldHostMetrics=null;this.ratio=1;this.origin=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.startDragHandle=this.handlePosition=this.handleLength=this.scrollbarLength=this.startDragMouse=0;this.containerVisible=this.isHandleVisible=!0;this.position=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.onMouseMoveWrapper_=this.onMouseUpWrapper_=null;this.pair=\nc||!1;this.margin=e!==void 0?e:Scrollbar$$module$build$src$core$scrollbar.DEFAULT_SCROLLBAR_MARGIN;a=\"blocklyScrollbar\"+(this.horizontal?\"Horizontal\":\"Vertical\");d&&(a+=\" \"+d);this.outerSvg=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{\"class\":a});d=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},this.outerSvg);this.svgBackground=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{\"class\":\"blocklyScrollbarBackground\"},d);a=Math.floor((Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-5)/2);this.svgHandle=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyScrollbarHandle\",rx:a,ry:a},d);this.workspace.getThemeManager().subscribe(this.svgHandle,\"scrollbarColour\",\"fill\");this.workspace.getThemeManager().subscribe(this.svgHandle,\"scrollbarOpacity\",\"fill-opacity\");insertAfter$$module$build$src$core$utils$dom(this.outerSvg,\nthis.workspace.getParentSvg());this.setInitialThickness();b?(this.lengthAttribute_=\"width\",this.positionAttribute_=\"x\"):(this.lengthAttribute_=\"height\",this.positionAttribute_=\"y\");this.onMouseDownBarWrapper_=conditionalBind$$module$build$src$core$browser_events(this.svgBackground,\"pointerdown\",this,this.onMouseDownBar);this.onMouseDownHandleWrapper_=conditionalBind$$module$build$src$core$browser_events(this.svgHandle,\"pointerdown\",this,this.onMouseDownHandle)}setInitialThickness(){const a=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;\nthis.horizontal?(this.svgBackground.setAttribute(\"height\",String(a)),this.outerSvg.setAttribute(\"height\",String(a)),this.svgHandle.setAttribute(\"height\",String(a-5)),this.svgHandle.setAttribute(\"y\",\"2.5\")):(this.svgBackground.setAttribute(\"width\",String(a)),this.outerSvg.setAttribute(\"width\",String(a)),this.svgHandle.setAttribute(\"width\",String(a-5)),this.svgHandle.setAttribute(\"x\",\"2.5\"))}dispose(){this.cleanUp();unbind$$module$build$src$core$browser_events(this.onMouseDownBarWrapper_);unbind$$module$build$src$core$browser_events(this.onMouseDownHandleWrapper_);\nremoveNode$$module$build$src$core$utils$dom(this.outerSvg);this.workspace.getThemeManager().unsubscribe(this.svgHandle)}constrainHandleLength(a){return a=a<=0||isNaN(a)?0:Math.min(a,this.scrollbarLength)}setHandleLength(a){this.handleLength=a;this.svgHandle.setAttribute(this.lengthAttribute_,String(this.handleLength))}constrainHandlePosition(a){return a=a<=0||isNaN(a)?0:Math.min(a,this.scrollbarLength-this.handleLength)}setHandlePosition(a){this.handlePosition=a;this.svgHandle.setAttribute(this.positionAttribute_,\nString(this.handlePosition))}setScrollbarLength(a){this.scrollbarLength=a;this.outerSvg.setAttribute(this.lengthAttribute_,String(this.scrollbarLength));this.svgBackground.setAttribute(this.lengthAttribute_,String(this.scrollbarLength))}setPosition(a,b){this.position.x=a;this.position.y=b;setCssTransform$$module$build$src$core$utils$dom(this.outerSvg,\"translate(\"+(this.position.x+this.origin.x)+\"px,\"+(this.position.y+this.origin.y)+\"px)\")}resize(a){if(!a&&(a=this.workspace.getMetrics(),!a))return;\nthis.oldHostMetrics&&Scrollbar$$module$build$src$core$scrollbar.metricsAreEquivalent(a,this.oldHostMetrics)||(this.horizontal?this.resizeHorizontal(a):this.resizeVertical(a),this.oldHostMetrics=a,this.updateMetrics())}requiresViewResize(a){return this.oldHostMetrics?this.oldHostMetrics.viewWidth!==a.viewWidth||this.oldHostMetrics.viewHeight!==a.viewHeight||this.oldHostMetrics.absoluteLeft!==a.absoluteLeft||this.oldHostMetrics.absoluteTop!==a.absoluteTop:!0}resizeHorizontal(a){this.requiresViewResize(a)?\nthis.resizeViewHorizontal(a):this.resizeContentHorizontal(a)}resizeViewHorizontal(a){var b=a.viewWidth-this.margin*2;this.pair&&(b-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setScrollbarLength(Math.max(0,b));b=a.absoluteLeft+this.margin;this.pair&&this.workspace.RTL&&(b+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setPosition(b,a.absoluteTop+a.viewHeight-Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-this.margin);this.resizeContentHorizontal(a)}resizeContentHorizontal(a){if(a.viewWidth>=\na.scrollWidth)this.setHandleLength(this.scrollbarLength),this.setHandlePosition(0),this.pair||this.setVisible(!1);else{this.pair||this.setVisible(!0);var b=this.scrollbarLength*a.viewWidth/a.scrollWidth;b=this.constrainHandleLength(b);this.setHandleLength(b);b=a.scrollWidth-a.viewWidth;var c=this.scrollbarLength-this.handleLength;a=(a.viewLeft-a.scrollLeft)/b*c;a=this.constrainHandlePosition(a);this.setHandlePosition(a);this.ratio=c/b}}resizeVertical(a){this.requiresViewResize(a)?this.resizeViewVertical(a):\nthis.resizeContentVertical(a)}resizeViewVertical(a){let b=a.viewHeight-this.margin*2;this.pair&&(b-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setScrollbarLength(Math.max(0,b));this.setPosition(this.workspace.RTL?a.absoluteLeft+this.margin:a.absoluteLeft+a.viewWidth-Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-this.margin,a.absoluteTop+this.margin);this.resizeContentVertical(a)}resizeContentVertical(a){if(a.viewHeight>=a.scrollHeight)this.setHandleLength(this.scrollbarLength),\nthis.setHandlePosition(0),this.pair||this.setVisible(!1);else{this.pair||this.setVisible(!0);var b=this.scrollbarLength*a.viewHeight/a.scrollHeight;b=this.constrainHandleLength(b);this.setHandleLength(b);b=a.scrollHeight-a.viewHeight;var c=this.scrollbarLength-this.handleLength;a=(a.viewTop-a.scrollTop)/b*c;a=this.constrainHandlePosition(a);this.setHandlePosition(a);this.ratio=c/b}}isVisible(){return this.isHandleVisible}setContainerVisible(a){const b=a!==this.containerVisible;this.containerVisible=\na;b&&this.updateDisplay_()}setVisible(a){if(this.pair)throw Error(\"Unable to toggle visibility of paired scrollbars.\");this.setVisibleInternal(a)}setVisibleInternal(a){const b=a!==this.isVisible();this.isHandleVisible=a;b&&this.updateDisplay_()}updateDisplay_(){this.containerVisible&&this.isVisible()?this.outerSvg.setAttribute(\"display\",\"block\"):this.outerSvg.setAttribute(\"display\",\"none\")}onMouseDownBar(a){this.workspace.markFocused();clearTouchIdentifier$$module$build$src$core$touch();this.cleanUp();\nif(isRightButton$$module$build$src$core$browser_events(a))a.stopPropagation();else{var b=mouseToSvg$$module$build$src$core$browser_events(a,this.workspace.getParentSvg(),this.workspace.getInverseScreenCTM());b=this.horizontal?b.x:b.y;var c=getInjectionDivXY$$module$build$src$core$utils$svg_math(this.svgHandle);c=this.horizontal?c.x:c.y;var d=this.handlePosition,e=this.handleLength*.95;b<=c?d-=e:b>=c+this.handleLength&&(d+=e);this.setHandlePosition(this.constrainHandlePosition(d));this.updateMetrics();\na.stopPropagation();a.preventDefault()}}onMouseDownHandle(a){this.workspace.markFocused();this.cleanUp();isRightButton$$module$build$src$core$browser_events(a)?a.stopPropagation():(this.startDragHandle=this.handlePosition,this.startDragMouse=this.horizontal?a.clientX:a.clientY,this.onMouseUpWrapper_=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onMouseUpHandle),this.onMouseMoveWrapper_=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",\nthis,this.onMouseMoveHandle),a.stopPropagation(),a.preventDefault())}onMouseMoveHandle(a){this.setHandlePosition(this.constrainHandlePosition(this.startDragHandle+((this.horizontal?a.clientX:a.clientY)-this.startDragMouse)));this.updateMetrics()}onMouseUpHandle(){clearTouchIdentifier$$module$build$src$core$touch();this.cleanUp()}cleanUp(){this.workspace.hideChaff(!0);this.onMouseUpWrapper_&&(unbind$$module$build$src$core$browser_events(this.onMouseUpWrapper_),this.onMouseUpWrapper_=null);this.onMouseMoveWrapper_&&\n(unbind$$module$build$src$core$browser_events(this.onMouseMoveWrapper_),this.onMouseMoveWrapper_=null)}getRatio_(){let a=this.handlePosition/(this.scrollbarLength-this.handleLength);isNaN(a)&&(a=0);return a}updateMetrics(){const a=this.getRatio_();this.horizontal?this.workspace.setMetrics({x:a}):this.workspace.setMetrics({y:a})}set(a,b){this.setHandlePosition(this.constrainHandlePosition(a*this.ratio));(b||b===void 0)&&this.updateMetrics()}setOrigin(a,b){this.origin=new Coordinate$$module$build$src$core$utils$coordinate(a,\nb)}static metricsAreEquivalent(a,b){return a.viewWidth===b.viewWidth&&a.viewHeight===b.viewHeight&&a.viewLeft===b.viewLeft&&a.viewTop===b.viewTop&&a.absoluteTop===b.absoluteTop&&a.absoluteLeft===b.absoluteLeft&&a.scrollWidth===b.scrollWidth&&a.scrollHeight===b.scrollHeight&&a.scrollLeft===b.scrollLeft&&a.scrollTop===b.scrollTop}};Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness=TOUCH_ENABLED$$module$build$src$core$touch?25:15;\nScrollbar$$module$build$src$core$scrollbar.DEFAULT_SCROLLBAR_MARGIN=.5;var module$build$src$core$scrollbar={};module$build$src$core$scrollbar.Scrollbar=Scrollbar$$module$build$src$core$scrollbar;var domParser$$module$build$src$core$utils$xml={parseFromString:function(){throw Error(\"DOMParser was not found in the global scope and was not properly injected using injectDependencies\");}},xmlSerializer$$module$build$src$core$utils$xml={serializeToString:function(){throw Error(\"XMLSerializer was not foundin the global scope and was not properly injected using injectDependencies\");}},{document:document$$module$build$src$core$utils$xml,DOMParser:DOMParser$$module$build$src$core$utils$xml,XMLSerializer:XMLSerializer$$module$build$src$core$utils$xml}=\nglobalThis;DOMParser$$module$build$src$core$utils$xml&&(domParser$$module$build$src$core$utils$xml=new DOMParser$$module$build$src$core$utils$xml);XMLSerializer$$module$build$src$core$utils$xml&&(xmlSerializer$$module$build$src$core$utils$xml=new XMLSerializer$$module$build$src$core$utils$xml);\nvar NAME_SPACE$$module$build$src$core$utils$xml=\"https://developers.google.com/blockly/xml\",INVALID_CONTROL_CHARS$$module$build$src$core$utils$xml=/[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F]/g,module$build$src$core$utils$xml={NAME_SPACE:NAME_SPACE$$module$build$src$core$utils$xml};module$build$src$core$utils$xml.createElement=$.createElement$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.createTextNode=$.createTextNode$$module$build$src$core$utils$xml;\nmodule$build$src$core$utils$xml.domToText=domToText$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.injectDependencies=injectDependencies$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.textToDom=$.textToDom$$module$build$src$core$utils$xml;var CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox=\"categoryToolbox\",FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox=\"flyoutToolbox\",Position$$module$build$src$core$utils$toolbox;(function(a){a[a.TOP=0]=\"TOP\";a[a.BOTTOM=1]=\"BOTTOM\";a[a.LEFT=2]=\"LEFT\";a[a.RIGHT=3]=\"RIGHT\"})(Position$$module$build$src$core$utils$toolbox||(Position$$module$build$src$core$utils$toolbox={}));\nvar TEST_ONLY$$module$build$src$core$utils$toolbox={hasCategoriesInternal:hasCategoriesInternal$$module$build$src$core$utils$toolbox},module$build$src$core$utils$toolbox={};module$build$src$core$utils$toolbox.Position=Position$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.TEST_ONLY=TEST_ONLY$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.convertFlyoutDefToJsonArray=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox;\nmodule$build$src$core$utils$toolbox.convertToolboxDefToJson=convertToolboxDefToJson$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.hasCategories=hasCategories$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.isCategoryCollapsible=isCategoryCollapsible$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.parseToolboxTree=parseToolboxTree$$module$build$src$core$utils$toolbox;var verticalPosition$$module$build$src$core$positionable_helpers;(function(a){a[a.TOP=0]=\"TOP\";a[a.BOTTOM=1]=\"BOTTOM\"})(verticalPosition$$module$build$src$core$positionable_helpers||(verticalPosition$$module$build$src$core$positionable_helpers={}));var horizontalPosition$$module$build$src$core$positionable_helpers;(function(a){a[a.LEFT=0]=\"LEFT\";a[a.RIGHT=1]=\"RIGHT\"})(horizontalPosition$$module$build$src$core$positionable_helpers||(horizontalPosition$$module$build$src$core$positionable_helpers={}));\nvar bumpDirection$$module$build$src$core$positionable_helpers;(function(a){a[a.UP=0]=\"UP\";a[a.DOWN=1]=\"DOWN\"})(bumpDirection$$module$build$src$core$positionable_helpers||(bumpDirection$$module$build$src$core$positionable_helpers={}));var module$build$src$core$positionable_helpers={};module$build$src$core$positionable_helpers.bumpDirection=bumpDirection$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.bumpPositionRect=bumpPositionRect$$module$build$src$core$positionable_helpers;\nmodule$build$src$core$positionable_helpers.getCornerOppositeToolbox=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.getStartPositionRect=getStartPositionRect$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.horizontalPosition=horizontalPosition$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.verticalPosition=verticalPosition$$module$build$src$core$positionable_helpers;var SPRITE$$module$build$src$core$sprites={width:96,height:124,url:\"sprites.png\"},module$build$src$core$sprites={SPRITE:SPRITE$$module$build$src$core$sprites};var ZoomControls$$module$build$src$core$zoom_controls=class{constructor(a){this.workspace=a;this.id=\"zoomControls\";this.boundEvents=[];this.zoomResetGroup=this.zoomOutGroup=this.zoomInGroup=null;this.HEIGHT=this.WIDTH=32;this.SMALL_SPACING=2;this.LARGE_SPACING=11;this.MARGIN_HORIZONTAL=this.MARGIN_VERTICAL=20;this.svgGroup=null;this.top=this.left=0;this.initialized=!1}createDom(){this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});const a=String(Math.random()).substring(2);\nthis.createZoomOutSvg(a);this.createZoomInSvg(a);this.workspace.isMovable()&&this.createZoomResetSvg(a);return this.svgGroup}init(){this.workspace.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.ZOOM_CONTROLS_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE]});this.initialized=!0}dispose(){this.workspace.getComponentManager().removeComponent(\"zoomControls\");this.svgGroup&&\nremoveNode$$module$build$src$core$utils$dom(this.svgGroup);for(const a of this.boundEvents)unbind$$module$build$src$core$browser_events(a);this.boundEvents.length=0}getBoundingRectangle(){let a=this.SMALL_SPACING+2*this.HEIGHT;this.zoomResetGroup&&(a+=this.LARGE_SPACING+this.HEIGHT);return new Rect$$module$build$src$core$utils$rect(this.top,this.top+a,this.left,this.left+this.WIDTH)}position(a,b){if(this.initialized){var c=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers(this.workspace,\na),d=this.SMALL_SPACING+2*this.HEIGHT;this.zoomResetGroup&&(d+=this.LARGE_SPACING+this.HEIGHT);a=getStartPositionRect$$module$build$src$core$positionable_helpers(c,new Size$$module$build$src$core$utils$size(this.WIDTH,d),this.MARGIN_HORIZONTAL,this.MARGIN_VERTICAL,a,this.workspace);c=c.vertical;b=bumpPositionRect$$module$build$src$core$positionable_helpers(a,this.MARGIN_VERTICAL,c===verticalPosition$$module$build$src$core$positionable_helpers.TOP?bumpDirection$$module$build$src$core$positionable_helpers.DOWN:\nbumpDirection$$module$build$src$core$positionable_helpers.UP,b);if(c===verticalPosition$$module$build$src$core$positionable_helpers.TOP){var e=this.SMALL_SPACING+this.HEIGHT,f;(f=this.zoomInGroup)==null||f.setAttribute(\"transform\",\"translate(0, \"+e+\")\");this.zoomResetGroup&&this.zoomResetGroup.setAttribute(\"transform\",\"translate(0, \"+(e+this.LARGE_SPACING+this.HEIGHT)+\")\")}else{f=this.zoomResetGroup?this.LARGE_SPACING+this.HEIGHT:0;let h;(h=this.zoomInGroup)==null||h.setAttribute(\"transform\",\"translate(0, \"+\nf+\")\");f=f+this.SMALL_SPACING+this.HEIGHT;(e=this.zoomOutGroup)==null||e.setAttribute(\"transform\",\"translate(0, \"+f+\")\")}this.top=b.top;this.left=b.left;var g;(g=this.svgGroup)==null||g.setAttribute(\"transform\",\"translate(\"+this.left+\",\"+this.top+\")\")}}createZoomOutSvg(a){this.zoomOutGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomOut\"},this.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,\n{id:\"blocklyZoomoutClipPath\"+a},this.zoomOutGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,x:-64,y:-92,\"clip-path\":\"url(#blocklyZoomoutClipPath\"+a+\")\"},this.zoomOutGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomOutGroup,\"pointerdown\",null,this.zoom.bind(this,-1)))}createZoomInSvg(a){this.zoomInGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomIn\"},this.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyZoominClipPath\"+\na},this.zoomInGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,x:-32,y:-92,\"clip-path\":\"url(#blocklyZoominClipPath\"+a+\")\"},this.zoomInGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+\nSPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomInGroup,\"pointerdown\",null,this.zoom.bind(this,1)))}zoom(a,b){this.workspace.markFocused();this.workspace.zoomCenter(a);this.fireZoomEvent();clearTouchIdentifier$$module$build$src$core$touch();b.stopPropagation();b.preventDefault()}createZoomResetSvg(a){this.zoomResetGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomReset\"},\nthis.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyZoomresetClipPath\"+a},this.zoomResetGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,y:-92,\"clip-path\":\"url(#blocklyZoomresetClipPath\"+\na+\")\"},this.zoomResetGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomResetGroup,\"pointerdown\",null,this.resetZoom.bind(this)))}resetZoom(a){this.workspace.markFocused();const b=Math.log(this.workspace.options.zoomOptions.startScale/this.workspace.scale)/Math.log(this.workspace.options.zoomOptions.scaleSpeed);\nthis.workspace.beginCanvasTransition();this.workspace.zoomCenter(b);this.workspace.scrollCenter();setTimeout(this.workspace.endCanvasTransition.bind(this.workspace),500);this.fireZoomEvent();clearTouchIdentifier$$module$build$src$core$touch();a.stopPropagation();a.preventDefault()}fireZoomEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(null,this.workspace.id,\"zoom_controls\");fire$$module$build$src$core$events$utils(a)}};register$$module$build$src$core$css(\"\\n.blocklyZoom>image, .blocklyZoom>svg>image {\\n opacity: .4;\\n}\\n\\n.blocklyZoom>image:hover, .blocklyZoom>svg>image:hover {\\n opacity: .6;\\n}\\n\\n.blocklyZoom>image:active, .blocklyZoom>svg>image:active {\\n opacity: .8;\\n}\\n\");\nvar module$build$src$core$zoom_controls={};module$build$src$core$zoom_controls.ZoomControls=ZoomControls$$module$build$src$core$zoom_controls;var VARIABLES$$module$build$src$core$serialization$priorities=100,PROCEDURES$$module$build$src$core$serialization$priorities=75,BLOCKS$$module$build$src$core$serialization$priorities=50,WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities=25,module$build$src$core$serialization$priorities={BLOCKS:BLOCKS$$module$build$src$core$serialization$priorities,PROCEDURES:PROCEDURES$$module$build$src$core$serialization$priorities,VARIABLES:VARIABLES$$module$build$src$core$serialization$priorities,\nWORKSPACE_COMMENTS:WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities};var module$build$src$core$serialization$registry={};module$build$src$core$serialization$registry.register=register$$module$build$src$core$serialization$registry;module$build$src$core$serialization$registry.unregister=unregister$$module$build$src$core$serialization$registry;var saveComment$$module$build$src$core$serialization$workspace_comments=save$$module$build$src$core$serialization$workspace_comments,WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments=class{constructor(){this.priority=WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities}save(a){const b=[];for(const c of a.getTopComments())(a=save$$module$build$src$core$serialization$workspace_comments(c,{addCoordinates:!0,saveIds:!0}))&&b.push(a);return b.length?b:null}load(a,\nb){for(const c of a)append$$module$build$src$core$serialization$workspace_comments(c,b,{recordUndo:getRecordUndo$$module$build$src$core$events$utils()})}clear(a){for(const b of a.getTopComments())b.dispose()}};register$$module$build$src$core$serialization$registry(\"workspaceComments\",new WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments);var module$build$src$core$serialization$workspace_comments={};\nmodule$build$src$core$serialization$workspace_comments.WorkspaceCommentSerializer=WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments;module$build$src$core$serialization$workspace_comments.append=append$$module$build$src$core$serialization$workspace_comments;module$build$src$core$serialization$workspace_comments.save=save$$module$build$src$core$serialization$workspace_comments;var module$build$src$core$clipboard$registry={};module$build$src$core$clipboard$registry.register=register$$module$build$src$core$clipboard$registry;module$build$src$core$clipboard$registry.unregister=unregister$$module$build$src$core$clipboard$registry;var WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster=class{paste(a,b,c){a=a.commentState;c&&(a.x=c.x,a.y=c.y);$.disable$$module$build$src$core$events$utils();let d;try{d=append$$module$build$src$core$serialization$workspace_comments(a,b),moveCommentToNotConflict$$module$build$src$core$clipboard$workspace_comment_paster(d)}finally{$.enable$$module$build$src$core$events$utils()}if(!d)return null;isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CREATE))(d));\n$.getFocusManager$$module$build$src$core$focus_manager().focusNode(d);return d}};WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE=\"workspace-comment\";register$$module$build$src$core$clipboard$registry(WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE,new WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster);var module$build$src$core$clipboard$workspace_comment_paster={};\nmodule$build$src$core$clipboard$workspace_comment_paster.WorkspaceCommentPaster=WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster;var DEFAULT_SNAP_RADIUS$$module$build$src$core$config,module$build$src$core$config;DEFAULT_SNAP_RADIUS$$module$build$src$core$config=28;$.config$$module$build$src$core$config={dragRadius:5,flyoutDragRadius:10,snapRadius:DEFAULT_SNAP_RADIUS$$module$build$src$core$config,connectingSnapRadius:DEFAULT_SNAP_RADIUS$$module$build$src$core$config,currentConnectionPreference:8,bumpDelay:250};module$build$src$core$config={config:$.config$$module$build$src$core$config};var ARIA_PREFIX$$module$build$src$core$utils$aria=\"aria-\",ROLE_ATTRIBUTE$$module$build$src$core$utils$aria=\"role\",Role$$module$build$src$core$utils$aria;\n(function(a){a.GRID=\"grid\";a.GRIDCELL=\"gridcell\";a.GROUP=\"group\";a.LISTBOX=\"listbox\";a.MENU=\"menu\";a.MENUITEM=\"menuitem\";a.MENUITEMCHECKBOX=\"menuitemcheckbox\";a.OPTION=\"option\";a.PRESENTATION=\"presentation\";a.ROW=\"row\";a.TREE=\"tree\";a.TREEITEM=\"treeitem\";a.SEPARATOR=\"separator\";a.STATUS=\"status\"})(Role$$module$build$src$core$utils$aria||(Role$$module$build$src$core$utils$aria={}));var State$$module$build$src$core$utils$aria;\n(function(a){a.ACTIVEDESCENDANT=\"activedescendant\";a.COLCOUNT=\"colcount\";a.DISABLED=\"disabled\";a.EXPANDED=\"expanded\";a.INVALID=\"invalid\";a.LABEL=\"label\";a.LABELLEDBY=\"labelledby\";a.LEVEL=\"level\";a.ORIENTATION=\"orientation\";a.POSINSET=\"posinset\";a.ROWCOUNT=\"rowcount\";a.SELECTED=\"selected\";a.SETSIZE=\"setsize\";a.VALUEMAX=\"valuemax\";a.VALUEMIN=\"valuemin\";a.LIVE=\"live\";a.HIDDEN=\"hidden\"})(State$$module$build$src$core$utils$aria||(State$$module$build$src$core$utils$aria={}));\nvar module$build$src$core$utils$aria={};module$build$src$core$utils$aria.Role=Role$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.State=State$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.setRole=setRole$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.setState=setState$$module$build$src$core$utils$aria;var MenuItem$$module$build$src$core$menuitem=class{constructor(a,b){this.content=a;this.opt_value=b;this.enabled=!0;this.element=null;this.rightToLeft=!1;this.roleName=null;this.highlight=this.checked=this.checkable=!1;this.actionHandler=null}createDom(){const a=document.createElement(\"div\");a.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();this.element=a;a.className=\"blocklyMenuItem \"+(this.enabled?\"\":\"blocklyMenuItemDisabled \")+(this.checked?\"blocklyMenuItemSelected \":\"\")+(this.highlight?\n\"blocklyMenuItemHighlight \":\"\")+(this.rightToLeft?\"blocklyMenuItemRtl \":\"\");const b=document.createElement(\"div\");b.className=\"blocklyMenuItemContent\";if(this.checkable){var c=document.createElement(\"div\");c.className=\"blocklyMenuItemCheckbox \";b.appendChild(c)}c=this.content;typeof this.content===\"string\"&&(c=document.createTextNode(this.content));b.appendChild(c);a.appendChild(b);this.roleName&&setRole$$module$build$src$core$utils$aria(a,this.roleName);setState$$module$build$src$core$utils$aria(a,\nState$$module$build$src$core$utils$aria.SELECTED,this.checkable&&this.checked||!1);setState$$module$build$src$core$utils$aria(a,State$$module$build$src$core$utils$aria.DISABLED,!this.enabled);return a}dispose(){this.element=null}getElement(){return this.element}getId(){return this.element.id}getValue(){let a;return(a=this.opt_value)!=null?a:null}setRightToLeft(a){this.rightToLeft=a}setRole(a){this.roleName=a}setCheckable(a){this.checkable=a}setChecked(a){this.checked=a}setHighlighted(a){this.highlight=\na;const b=this.getElement();b&&this.isEnabled()&&(a?addClass$$module$build$src$core$utils$dom(b,\"blocklyMenuItemHighlight\"):removeClass$$module$build$src$core$utils$dom(b,\"blocklyMenuItemHighlight\"))}isEnabled(){return this.enabled}setEnabled(a){this.enabled=a}performAction(a){this.isEnabled()&&this.actionHandler&&this.actionHandler(this,a)}onAction(a,b){this.actionHandler=a.bind(b)}},module$build$src$core$menuitem={};module$build$src$core$menuitem.MenuItem=MenuItem$$module$build$src$core$menuitem;var Menu$$module$build$src$core$menu=class{constructor(){this.menuItems=[];this.roleName=this.element=this.onKeyDownHandler=this.pointerLeaveHandler=this.pointerEnterHandler=this.clickHandler=this.pointerMoveHandler=this.highlightedItem=this.openingCoords=null}addChild(a){this.menuItems.push(a)}render(a){const b=document.createElement(\"div\");b.className=\"blocklyMenu\";b.tabIndex=0;this.roleName&&setRole$$module$build$src$core$utils$aria(b,this.roleName);this.element=b;for(let c=0,d;d=this.menuItems[c];c++)b.appendChild(d.createDom());\nthis.pointerMoveHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointermove\",this,this.handlePointerMove,!0);this.clickHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerup\",this,this.handleClick,!0);this.pointerEnterHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerenter\",this,this.handlePointerEnter,!0);this.pointerLeaveHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerleave\",this,this.handlePointerLeave,!0);this.onKeyDownHandler=\nconditionalBind$$module$build$src$core$browser_events(b,\"keydown\",this,this.handleKeyEvent);a.appendChild(b);return b}getElement(){return this.element}focus(){const a=this.getElement();a&&a.focus({preventScroll:!0})}blur(){const a=this.getElement();a&&a.blur()}setRole(a){this.roleName=a}dispose(){this.pointerMoveHandler&&(unbind$$module$build$src$core$browser_events(this.pointerMoveHandler),this.pointerMoveHandler=null);this.clickHandler&&(unbind$$module$build$src$core$browser_events(this.clickHandler),\nthis.clickHandler=null);this.pointerEnterHandler&&(unbind$$module$build$src$core$browser_events(this.pointerEnterHandler),this.pointerEnterHandler=null);this.pointerLeaveHandler&&(unbind$$module$build$src$core$browser_events(this.pointerLeaveHandler),this.pointerLeaveHandler=null);this.onKeyDownHandler&&(unbind$$module$build$src$core$browser_events(this.onKeyDownHandler),this.onKeyDownHandler=null);for(let a=0,b;b=this.menuItems[a];a++)b.dispose();this.element=null}getMenuItem(a){const b=this.getElement();\nfor(;a&&a!==b;){if(a.classList.contains(\"blocklyMenuItem\")){const c=this.getMenuItems();for(let d=0,e;e=c[d];d++)if(e.getElement()===a)return e}a=a.parentElement}return null}setHighlighted(a){var b=this.highlightedItem;b&&(b.setHighlighted(!1),this.highlightedItem=null);if(a){a.setHighlighted(!0);this.highlightedItem=a;b=this.getElement();const c=a.getElement();b&&c&&(scrollIntoContainerView$$module$build$src$core$utils$style(c,b),setState$$module$build$src$core$utils$aria(b,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,\na.getId()))}}highlightNext(){const a=this.highlightedItem?this.menuItems.indexOf(this.highlightedItem):-1;this.highlightHelper(a,1)}highlightPrevious(){const a=this.highlightedItem?this.menuItems.indexOf(this.highlightedItem):-1;this.highlightHelper(a<0?this.menuItems.length:a,-1)}highlightFirst(){this.highlightHelper(-1,1)}highlightLast(){this.highlightHelper(this.menuItems.length,-1)}highlightHelper(a,b){a+=b;let c;const d=this.getMenuItems();for(;c=d[a];){if(c.isEnabled()){this.setHighlighted(c);\nbreak}a+=b}}handlePointerMove(a){Math.max(Math.abs(a.movementX),Math.abs(a.movementY))!==0&&(a=this.getMenuItem(a.target))&&(a.isEnabled()?this.highlightedItem!==a&&this.setHighlighted(a):this.setHighlighted(null))}handleClick(a){var b=this.openingCoords;this.openingCoords=null;if(b&&typeof a.clientX===\"number\"){const c=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY);if(Coordinate$$module$build$src$core$utils$coordinate.distance(b,c)<1)return}(b=this.getMenuItem(a.target))&&\nb.performAction(a)}handlePointerEnter(a){this.focus()}handlePointerLeave(a){this.getElement()&&this.setHighlighted(null)}handleKeyEvent(a){if(this.menuItems.length&&!(a.shiftKey||a.ctrlKey||a.metaKey||a.altKey)){var b=this.highlightedItem;switch(a.key){case \"Enter\":case \" \":b&&b.performAction(a);break;case \"ArrowUp\":this.highlightPrevious();break;case \"ArrowDown\":this.highlightNext();break;case \"PageUp\":case \"Home\":this.highlightFirst();break;case \"PageDown\":case \"End\":this.highlightLast();break;\ndefault:return}a.preventDefault();a.stopPropagation()}}getSize(){const a=this.getElement(),b=getSize$$module$build$src$core$utils$style(a);b.height=a.scrollHeight;return b}getMenuItems(){return this.menuItems.filter(a=>a instanceof MenuItem$$module$build$src$core$menuitem)}},module$build$src$core$menu={};module$build$src$core$menu.Menu=Menu$$module$build$src$core$menu;var MenuSeparator$$module$build$src$core$menu_separator=class{constructor(){this.element=null}createDom(){this.element=document.createElement(\"hr\");this.element.className=\"blocklyMenuSeparator\";setRole$$module$build$src$core$utils$aria(this.element,Role$$module$build$src$core$utils$aria.SEPARATOR);return this.element}dispose(){let a;(a=this.element)==null||a.remove();this.element=null}},module$build$src$core$menu_separator={};module$build$src$core$menu_separator.MenuSeparator=MenuSeparator$$module$build$src$core$menu_separator;var COLLAPSED_INPUT_NAME$$module$build$src$core$constants=\"_TEMP_COLLAPSED_INPUT\",COLLAPSED_FIELD_NAME$$module$build$src$core$constants=\"_TEMP_COLLAPSED_FIELD\",MANUALLY_DISABLED$$module$build$src$core$constants=\"MANUALLY_DISABLED\",module$build$src$core$constants={COLLAPSED_FIELD_NAME:COLLAPSED_FIELD_NAME$$module$build$src$core$constants,COLLAPSED_INPUT_NAME:COLLAPSED_INPUT_NAME$$module$build$src$core$constants,MANUALLY_DISABLED:MANUALLY_DISABLED$$module$build$src$core$constants};(function(a){a[a.VALUE=1]=\"VALUE\";a[a.STATEMENT=3]=\"STATEMENT\";a[a.DUMMY=5]=\"DUMMY\";a[a.CUSTOM=6]=\"CUSTOM\";a[a.END_ROW=7]=\"END_ROW\"})($.inputTypes$$module$build$src$core$inputs$input_types||($.inputTypes$$module$build$src$core$inputs$input_types={}));var module$build$src$core$inputs$input_types={};module$build$src$core$inputs$input_types.inputTypes=$.inputTypes$$module$build$src$core$inputs$input_types;var module$build$src$core$interfaces$i_serializable={};module$build$src$core$interfaces$i_serializable.isSerializable=isSerializable$$module$build$src$core$interfaces$i_serializable;var rootBlocks$$module$build$src$core$render_management=new Set,dirtyBlocks$$module$build$src$core$render_management=new WeakSet,eventGroups$$module$build$src$core$render_management=new WeakMap,afterRendersPromise$$module$build$src$core$render_management=null,afterRendersResolver$$module$build$src$core$render_management=null,animationRequestId$$module$build$src$core$render_management=0,module$build$src$core$render_management={};module$build$src$core$render_management.finishQueuedRenders=finishQueuedRenders$$module$build$src$core$render_management;\nmodule$build$src$core$render_management.queueRender=queueRender$$module$build$src$core$render_management;module$build$src$core$render_management.triggerQueuedRenders=triggerQueuedRenders$$module$build$src$core$render_management;var setLocale$$module$build$src$core$msg,module$build$src$core$msg;$.Msg$$module$build$src$core$msg=Object.create(null);setLocale$$module$build$src$core$msg=function(a){Object.keys(a).forEach(function(b){$.Msg$$module$build$src$core$msg[b]=a[b]})};module$build$src$core$msg={Msg:$.Msg$$module$build$src$core$msg,setLocale:setLocale$$module$build$src$core$msg};var CLASS_NAME$$module$build$src$core$toast=\"blocklyToast\",MESSAGE_CLASS_NAME$$module$build$src$core$toast=\"blocklyToastMessage\",CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast=\"blocklyToastCloseButton\",Toast$$module$build$src$core$toast=class{static show(a,b){if(b.oncePerSession&&b.id){if(this.shownIds.has(b.id))return;this.shownIds.add(b.id)}this.hide(a);const c=this.createDom(a,b);requestAnimationFrame(()=>{c.style.bottom=\"2rem\"})}static createDom(a,b){const {message:c,duration:d=5,assertiveness:e=\nToast$$module$build$src$core$toast.Assertiveness.POLITE}=b,f=document.createElement(\"div\");a.getInjectionDiv().appendChild(f);f.dataset.toastId=b.id;f.className=CLASS_NAME$$module$build$src$core$toast;setRole$$module$build$src$core$utils$aria(f,Role$$module$build$src$core$utils$aria.STATUS);setState$$module$build$src$core$utils$aria(f,State$$module$build$src$core$utils$aria.LIVE,e);b=f.appendChild(document.createElement(\"div\"));b.className=MESSAGE_CLASS_NAME$$module$build$src$core$toast;b.innerText=\nc;b=f.appendChild(document.createElement(\"button\"));b.className=CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast;setState$$module$build$src$core$utils$aria(b,State$$module$build$src$core$utils$aria.LABEL,$.Msg$$module$build$src$core$msg.CLOSE);var g=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{width:24,height:24,viewBox:\"0 0 24 24\",fill:\"none\"},b);setState$$module$build$src$core$utils$aria(g,State$$module$build$src$core$utils$aria.HIDDEN,!0);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{x:19.7782,y:2.80762,width:2,height:24,transform:\"rotate(45, 19.7782, 2.80762)\",fill:\"black\"},g);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{x:2.80762,y:4.22183,width:2,height:24,transform:\"rotate(-45, 2.80762, 4.22183)\",fill:\"black\"},g);b.addEventListener(\"click\",()=>{f.remove();a.markFocused()});let h;b=()=>{h=setTimeout(()=>f.remove(),d*1E3)};g=()=>clearTimeout(h);f.addEventListener(\"focusin\",g);f.addEventListener(\"focusout\",b);f.addEventListener(\"mouseenter\",\ng);f.addEventListener(\"mousemove\",g);f.addEventListener(\"mouseleave\",b);b();return f}static hide(a,b){a=a.getInjectionDiv().querySelector(`.${CLASS_NAME$$module$build$src$core$toast}`);a instanceof HTMLElement&&(!b||b===a.dataset.toastId)&&a.remove()}};Toast$$module$build$src$core$toast.shownIds=new Set;(function(a){a=a.Assertiveness||(a.Assertiveness={});a.ASSERTIVE=\"assertive\";a.POLITE=\"polite\"})(Toast$$module$build$src$core$toast||(Toast$$module$build$src$core$toast={}));register$$module$build$src$core$css(`\n.${CLASS_NAME$$module$build$src$core$toast} {\n font-size: 1.2rem;\n position: absolute;\n bottom: -10rem;\n right: 2rem;\n padding: 1rem;\n color: black;\n background-color: white;\n border: 2px solid black;\n border-radius: 0.4rem;\n z-index: 999;\n display: flex;\n align-items: center;\n gap: 0.8rem;\n line-height: 1.5;\n transition: bottom 0.3s ease-out;\n}\n\n.${CLASS_NAME$$module$build$src$core$toast} .${MESSAGE_CLASS_NAME$$module$build$src$core$toast} {\n maxWidth: 18rem;\n}\n\n.${CLASS_NAME$$module$build$src$core$toast} .${CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast} {\n margin: 0;\n padding: 0.2rem;\n background-color: transparent;\n color: black;\n border: none;\n cursor: pointer;\n}\n`);var module$build$src$core$toast={};module$build$src$core$toast.Toast=Toast$$module$build$src$core$toast;var defaultAlert$$module$build$src$core$dialog=function(a,b){window.alert(a);b&&b()},alertImplementation$$module$build$src$core$dialog=defaultAlert$$module$build$src$core$dialog,defaultConfirm$$module$build$src$core$dialog=function(a,b){b(window.confirm(a))},confirmImplementation$$module$build$src$core$dialog=defaultConfirm$$module$build$src$core$dialog,defaultPrompt$$module$build$src$core$dialog=function(a,b,c){c(window.prompt(a,b))},promptImplementation$$module$build$src$core$dialog=defaultPrompt$$module$build$src$core$dialog,\ndefaultToast$$module$build$src$core$dialog=Toast$$module$build$src$core$toast.show.bind(Toast$$module$build$src$core$toast),toastImplementation$$module$build$src$core$dialog=defaultToast$$module$build$src$core$dialog,module$build$src$core$dialog={};module$build$src$core$dialog.alert=alert$$module$build$src$core$dialog;module$build$src$core$dialog.confirm=confirm$$module$build$src$core$dialog;module$build$src$core$dialog.prompt=prompt$$module$build$src$core$dialog;\nmodule$build$src$core$dialog.setAlert=setAlert$$module$build$src$core$dialog;module$build$src$core$dialog.setConfirm=setConfirm$$module$build$src$core$dialog;module$build$src$core$dialog.setPrompt=setPrompt$$module$build$src$core$dialog;module$build$src$core$dialog.setToast=setToast$$module$build$src$core$dialog;module$build$src$core$dialog.toast=toast$$module$build$src$core$dialog;var module$build$src$core$interfaces$i_legacy_procedure_blocks={};module$build$src$core$interfaces$i_legacy_procedure_blocks.isLegacyProcedureCallBlock=isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks;module$build$src$core$interfaces$i_legacy_procedure_blocks.isLegacyProcedureDefBlock=isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks;var module$build$src$core$interfaces$i_variable_backed_parameter_model={};module$build$src$core$interfaces$i_variable_backed_parameter_model.isVariableBackedParameterModel=isVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model;var previousWarnings$$module$build$src$core$utils$deprecation=new Set,module$build$src$core$utils$deprecation={};module$build$src$core$utils$deprecation.warn=warn$$module$build$src$core$utils$deprecation;var CATEGORY_NAME$$module$build$src$core$variables=\"VARIABLE\",VAR_LETTER_OPTIONS$$module$build$src$core$variables=\"ijkmnopqrstuvwxyzabcdefgh\",TEST_ONLY$$module$build$src$core$variables={generateUniqueNameInternal:generateUniqueNameInternal$$module$build$src$core$variables},module$build$src$core$variables={CATEGORY_NAME:CATEGORY_NAME$$module$build$src$core$variables,TEST_ONLY:TEST_ONLY$$module$build$src$core$variables,VAR_LETTER_OPTIONS:VAR_LETTER_OPTIONS$$module$build$src$core$variables};\nmodule$build$src$core$variables.allDeveloperVariables=$.allDeveloperVariables$$module$build$src$core$variables;module$build$src$core$variables.allUsedVarModels=$.allUsedVarModels$$module$build$src$core$variables;module$build$src$core$variables.compareByName=compareByName$$module$build$src$core$variables;module$build$src$core$variables.createVariableButtonHandler=createVariableButtonHandler$$module$build$src$core$variables;module$build$src$core$variables.deleteVariable=$.deleteVariable$$module$build$src$core$variables;\nmodule$build$src$core$variables.flyoutCategory=flyoutCategory$$module$build$src$core$variables;module$build$src$core$variables.flyoutCategoryBlocks=flyoutCategoryBlocks$$module$build$src$core$variables;module$build$src$core$variables.generateUniqueName=generateUniqueName$$module$build$src$core$variables;module$build$src$core$variables.generateUniqueNameFromOptions=generateUniqueNameFromOptions$$module$build$src$core$variables;module$build$src$core$variables.generateVariableFieldDom=generateVariableFieldDom$$module$build$src$core$variables;\nmodule$build$src$core$variables.getAddedVariables=getAddedVariables$$module$build$src$core$variables;module$build$src$core$variables.getOrCreateVariablePackage=$.getOrCreateVariablePackage$$module$build$src$core$variables;module$build$src$core$variables.getVariable=$.getVariable$$module$build$src$core$variables;module$build$src$core$variables.getVariableUsesById=getVariableUsesById$$module$build$src$core$variables;module$build$src$core$variables.internalFlyoutCategory=internalFlyoutCategory$$module$build$src$core$variables;\nmodule$build$src$core$variables.jsonFlyoutCategoryBlocks=jsonFlyoutCategoryBlocks$$module$build$src$core$variables;module$build$src$core$variables.nameUsedWithAnyType=nameUsedWithAnyType$$module$build$src$core$variables;module$build$src$core$variables.nameUsedWithConflictingParam=nameUsedWithConflictingParam$$module$build$src$core$variables;module$build$src$core$variables.promptName=promptName$$module$build$src$core$variables;module$build$src$core$variables.renameVariable=$.renameVariable$$module$build$src$core$variables;var DeserializationError$$module$build$src$core$serialization$exceptions=class extends Error{},MissingBlockType$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a){super(\"Expected to find a 'type' property, defining the block type\");this.state=a}},MissingConnection$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,\nb,c){super(`The block ${b.toDevString()} is missing a(n) ${a}\nconnection`);this.block=b;this.state=c}},BadConnectionCheck$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,b,c,d){super(`The block ${c.toDevString()} could not connect its\n${b} to its parent, because: ${a}`);this.childBlock=c;this.childState=d}},RealChildOfShadow$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a){super(\"Encountered a real block which is defined as a child of a shadow\\nblock. It is an invariant of Blockly that shadow blocks only have shadow\\nchildren\");this.state=a}},UnregisteredIcon$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,\nb,c){super(`Cannot add an icon of type '${a}' to the block `+`${b.toDevString()}, because there is no icon registered with `+`type '${a}'. Make sure that all of your icons have been `+\"registered.\");this.block=b;this.state=c}},module$build$src$core$serialization$exceptions={};module$build$src$core$serialization$exceptions.BadConnectionCheck=BadConnectionCheck$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.DeserializationError=DeserializationError$$module$build$src$core$serialization$exceptions;\nmodule$build$src$core$serialization$exceptions.MissingBlockType=MissingBlockType$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.MissingConnection=MissingConnection$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.RealChildOfShadow=RealChildOfShadow$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.UnregisteredIcon=UnregisteredIcon$$module$build$src$core$serialization$exceptions;var saveBlock$$module$build$src$core$serialization$blocks=save$$module$build$src$core$serialization$blocks,BlockSerializer$$module$build$src$core$serialization$blocks=class{constructor(){this.priority=BLOCKS$$module$build$src$core$serialization$priorities}save(a){const b=[];for(const c of a.getTopBlocks(!1))(a=save$$module$build$src$core$serialization$blocks(c,{addCoordinates:!0,doFullSerialization:!1}))&&b.push(a);return b.length?{languageVersion:0,blocks:b}:null}load(a,b){a=a.blocks;for(const c of a)append$$module$build$src$core$serialization$blocks(c,\nb,{recordUndo:getRecordUndo$$module$build$src$core$events$utils()})}clear(a){for(const b of a.getTopBlocks(!1))b.dispose(!1)}};register$$module$build$src$core$serialization$registry(\"blocks\",new BlockSerializer$$module$build$src$core$serialization$blocks);var module$build$src$core$serialization$blocks={};module$build$src$core$serialization$blocks.BlockSerializer=BlockSerializer$$module$build$src$core$serialization$blocks;module$build$src$core$serialization$blocks.append=append$$module$build$src$core$serialization$blocks;\nmodule$build$src$core$serialization$blocks.appendInternal=appendInternal$$module$build$src$core$serialization$blocks;module$build$src$core$serialization$blocks.save=save$$module$build$src$core$serialization$blocks;var IconType$$module$build$src$core$icons$icon_types=class{constructor(a){this.name=a}toString(){return this.name}equals(a){return this.name===a.toString()}};IconType$$module$build$src$core$icons$icon_types.MUTATOR=new IconType$$module$build$src$core$icons$icon_types(\"mutator\");IconType$$module$build$src$core$icons$icon_types.WARNING=new IconType$$module$build$src$core$icons$icon_types(\"warning\");IconType$$module$build$src$core$icons$icon_types.COMMENT=new IconType$$module$build$src$core$icons$icon_types(\"comment\");\nvar module$build$src$core$icons$icon_types={};module$build$src$core$icons$icon_types.IconType=IconType$$module$build$src$core$icons$icon_types;var module$build$src$core$interfaces$i_has_bubble={};module$build$src$core$interfaces$i_has_bubble.hasBubble=hasBubble$$module$build$src$core$interfaces$i_has_bubble;var BlockBase$$module$build$src$core$events$events_block_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.isBlank=!a;a&&(this.blockId=a.id,this.workspaceId=a.workspace.id)}toJson(){const a=super.toJson();if(!this.blockId)throw Error(\"The block ID is undefined. Either pass a block to the constructor, or call fromJson\");a.blockId=this.blockId;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new BlockBase$$module$build$src$core$events$events_block_base);\nb.blockId=a.blockId;return b}},module$build$src$core$events$events_block_base={};module$build$src$core$events$events_block_base.BlockBase=BlockBase$$module$build$src$core$events$events_block_base;var BlockChange$$module$build$src$core$events$events_block_change=class extends BlockBase$$module$build$src$core$events$events_block_base{constructor(a,b,c,d,e){super(a);this.type=EventType$$module$build$src$core$events$type.BLOCK_CHANGE;a&&(this.element=b,this.name=c||void 0,this.oldValue=d,this.newValue=e)}toJson(){const a=super.toJson();if(!this.element)throw Error(\"The changed element is undefined. Either pass an element to the constructor, or call fromJson\");a.element=this.element;a.name=this.name;\na.oldValue=this.oldValue;a.newValue=this.newValue;this.disabledReason&&(a.disabledReason=this.disabledReason);return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new BlockChange$$module$build$src$core$events$events_block_change);b.element=a.element;b.name=a.name;b.oldValue=a.oldValue;b.newValue=a.newValue;a.disabledReason!==void 0&&(b.disabledReason=a.disabledReason);return b}setDisabledReason(a){if(this.element!==\"disabled\")throw Error('Cannot set the disabled reason for a BlockChange event if the element is not \"disabled\".');\nthis.disabledReason=a}isNull(){return this.oldValue===this.newValue}run(a){var b=this.getEventWorkspace_();if(!this.blockId)throw Error(\"The block ID is undefined. Either pass a block to the constructor, or call fromJson\");b=b.getBlockById(this.blockId);if(!b)throw Error(\"The associated block is undefined. Either pass a block to the constructor, or call fromJson\");const c=b.getIcon(IconType$$module$build$src$core$icons$icon_types.MUTATOR);c&&hasBubble$$module$build$src$core$interfaces$i_has_bubble(c)&&\nc.bubbleIsVisible()&&c.setBubbleVisible(!1);a=a?this.newValue:this.oldValue;switch(this.element){case \"field\":(b=b.getField(this.name))?b.setValue(a):console.warn(\"Can't set non-existent field: \"+this.name);break;case \"comment\":b.setCommentText(a||null);break;case \"collapsed\":b.setCollapsed(!!a);break;case \"disabled\":var d;b.setDisabledReason(!!a,(d=this.disabledReason)!=null?d:MANUALLY_DISABLED$$module$build$src$core$constants);break;case \"inline\":b.setInputsInline(!!a);break;case \"mutation\":d=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(b);\nb.loadExtraState?b.loadExtraState(JSON.parse(a||\"{}\")):b.domToMutation&&b.domToMutation($.textToDom$$module$build$src$core$utils$xml(a||\"\"));fire$$module$build$src$core$events$utils(new BlockChange$$module$build$src$core$events$events_block_change(b,\"mutation\",null,d,a));break;default:console.warn(\"Unknown change type: \"+this.element)}}static getExtraBlockState_(a){return a.saveExtraState?(a=a.saveExtraState(!0))?JSON.stringify(a):\"\":a.mutationToDom?(a=a.mutationToDom())?domToText$$module$build$src$core$xml(a):\n\"\":\"\"}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.BLOCK_CHANGE,BlockChange$$module$build$src$core$events$events_block_change);var module$build$src$core$events$events_block_change={};module$build$src$core$events$events_block_change.BlockChange=BlockChange$$module$build$src$core$events$events_block_change;var module$build$src$core$utils$math={};module$build$src$core$utils$math.clamp=clamp$$module$build$src$core$utils$math;module$build$src$core$utils$math.toDegrees=toDegrees$$module$build$src$core$utils$math;module$build$src$core$utils$math.toRadians=toRadians$$module$build$src$core$utils$math;var ARROW_SIZE$$module$build$src$core$dropdowndiv=16,BORDER_SIZE$$module$build$src$core$dropdowndiv=1,ARROW_HORIZONTAL_PADDING$$module$build$src$core$dropdowndiv=12,PADDING_Y$$module$build$src$core$dropdowndiv=16,ANIMATION_TIME$$module$build$src$core$dropdowndiv=.25,animateOutTimer$$module$build$src$core$dropdowndiv=null,onHide$$module$build$src$core$dropdowndiv=null,renderedClassName$$module$build$src$core$dropdowndiv=\"\",themeClassName$$module$build$src$core$dropdowndiv=\"\",div$$module$build$src$core$dropdowndiv,\ncontent$$module$build$src$core$dropdowndiv,arrow$$module$build$src$core$dropdowndiv,boundsElement$$module$build$src$core$dropdowndiv=null,owner$$module$build$src$core$dropdowndiv=null,positionToField$$module$build$src$core$dropdowndiv=null,returnEphemeralFocus$$module$build$src$core$dropdowndiv=null,keydownListener$$module$build$src$core$dropdowndiv=null,internal$$module$build$src$core$dropdowndiv={getBoundsInfo:function(){const a=getPageOffset$$module$build$src$core$utils$style(boundsElement$$module$build$src$core$dropdowndiv),\nb=getSize$$module$build$src$core$utils$style(boundsElement$$module$build$src$core$dropdowndiv);return{left:a.x,right:a.x+b.width,top:a.y,bottom:a.y+b.height,width:b.width,height:b.height}},getPositionMetrics:function(a,b,c,d){const e=internal$$module$build$src$core$dropdowndiv.getBoundsInfo(),f=getSize$$module$build$src$core$utils$style(div$$module$build$src$core$dropdowndiv);return b+f.heighte.top?getPositionAboveMetrics$$module$build$src$core$dropdowndiv(c,\nd,e,f):b+f.heightdocument.documentElement.clientTop?getPositionAboveMetrics$$module$build$src$core$dropdowndiv(c,d,e,f):getPositionTopOfPageMetrics$$module$build$src$core$dropdowndiv(a,e,f)}},TEST_ONLY$$module$build$src$core$dropdowndiv=internal$$module$build$src$core$dropdowndiv,module$build$src$core$dropdowndiv={ANIMATION_TIME:ANIMATION_TIME$$module$build$src$core$dropdowndiv,ARROW_HORIZONTAL_PADDING:ARROW_HORIZONTAL_PADDING$$module$build$src$core$dropdowndiv,\nARROW_SIZE:ARROW_SIZE$$module$build$src$core$dropdowndiv,BORDER_SIZE:BORDER_SIZE$$module$build$src$core$dropdowndiv,PADDING_Y:PADDING_Y$$module$build$src$core$dropdowndiv,TEST_ONLY:internal$$module$build$src$core$dropdowndiv};module$build$src$core$dropdowndiv.clearContent=clearContent$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.createDom=createDom$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.getContentDiv=getContentDiv$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.getOwner=getOwner$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.getPositionX=getPositionX$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hide=hide$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hideIfOwner=hideIfOwner$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hideWithoutAnimation=hideWithoutAnimation$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.isVisible=isVisible$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.repositionForWindowResize=repositionForWindowResize$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.setBoundsElement=setBoundsElement$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.setColour=setColour$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.show=show$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.showPositionedByBlock=showPositionedByBlock$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.showPositionedByField=showPositionedByField$$module$build$src$core$dropdowndiv;var module$build$src$core$utils$string={};module$build$src$core$utils$string.commonWordPrefix=commonWordPrefix$$module$build$src$core$utils$string;module$build$src$core$utils$string.commonWordSuffix=commonWordSuffix$$module$build$src$core$utils$string;module$build$src$core$utils$string.isNumber=$.isNumber$$module$build$src$core$utils$string;module$build$src$core$utils$string.shortestStringLength=shortestStringLength$$module$build$src$core$utils$string;module$build$src$core$utils$string.wrap=$.wrap$$module$build$src$core$utils$string;var customTooltip$$module$build$src$core$tooltip=void 0,visible$$module$build$src$core$tooltip=!1,blocked$$module$build$src$core$tooltip=!1,LIMIT$$module$build$src$core$tooltip=50,mouseOutPid$$module$build$src$core$tooltip=0,showPid$$module$build$src$core$tooltip=0,lastX$$module$build$src$core$tooltip=0,lastY$$module$build$src$core$tooltip=0,element$$module$build$src$core$tooltip=null,poisonedElement$$module$build$src$core$tooltip=null,OFFSET_X$$module$build$src$core$tooltip=0,OFFSET_Y$$module$build$src$core$tooltip=\n10,RADIUS_OK$$module$build$src$core$tooltip=10,HOVER_MS$$module$build$src$core$tooltip=750,MARGINS$$module$build$src$core$tooltip=5,containerDiv$$module$build$src$core$tooltip=null,module$build$src$core$tooltip={HOVER_MS:HOVER_MS$$module$build$src$core$tooltip,LIMIT:LIMIT$$module$build$src$core$tooltip,MARGINS:MARGINS$$module$build$src$core$tooltip,OFFSET_X:OFFSET_X$$module$build$src$core$tooltip,OFFSET_Y:OFFSET_Y$$module$build$src$core$tooltip,RADIUS_OK:RADIUS_OK$$module$build$src$core$tooltip};\nmodule$build$src$core$tooltip.bindMouseEvents=bindMouseEvents$$module$build$src$core$tooltip;module$build$src$core$tooltip.block=block$$module$build$src$core$tooltip;module$build$src$core$tooltip.createDom=createDom$$module$build$src$core$tooltip;module$build$src$core$tooltip.dispose=dispose$$module$build$src$core$tooltip;module$build$src$core$tooltip.getCustomTooltip=getCustomTooltip$$module$build$src$core$tooltip;module$build$src$core$tooltip.getDiv=getDiv$$module$build$src$core$tooltip;\nmodule$build$src$core$tooltip.getTooltipOfObject=getTooltipOfObject$$module$build$src$core$tooltip;module$build$src$core$tooltip.hide=hide$$module$build$src$core$tooltip;module$build$src$core$tooltip.isVisible=isVisible$$module$build$src$core$tooltip;module$build$src$core$tooltip.setCustomTooltip=setCustomTooltip$$module$build$src$core$tooltip;module$build$src$core$tooltip.unbindMouseEvents=unbindMouseEvents$$module$build$src$core$tooltip;module$build$src$core$tooltip.unblock=unblock$$module$build$src$core$tooltip;var hsvSaturation$$module$build$src$core$utils$colour=.45,hsvValue$$module$build$src$core$utils$colour=.65,names$$module$build$src$core$utils$colour={aqua:\"#00ffff\",black:\"#000000\",blue:\"#0000ff\",fuchsia:\"#ff00ff\",gray:\"#808080\",green:\"#008000\",lime:\"#00ff00\",maroon:\"#800000\",navy:\"#000080\",olive:\"#808000\",purple:\"#800080\",red:\"#ff0000\",silver:\"#c0c0c0\",teal:\"#008080\",white:\"#ffffff\",yellow:\"#ffff00\"},module$build$src$core$utils$colour={};module$build$src$core$utils$colour.blend=blend$$module$build$src$core$utils$colour;\nmodule$build$src$core$utils$colour.getHsvSaturation=getHsvSaturation$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.getHsvValue=getHsvValue$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hexToRgb=hexToRgb$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hsvToHex=hsvToHex$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hueToHex=hueToHex$$module$build$src$core$utils$colour;\nmodule$build$src$core$utils$colour.names=names$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.parse=parse$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.rgbToHex=rgbToHex$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.setHsvSaturation=setHsvSaturation$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.setHsvValue=setHsvValue$$module$build$src$core$utils$colour;var module$build$src$core$utils$parsing={};module$build$src$core$utils$parsing.checkMessageReferences=checkMessageReferences$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.parseBlockColour=parseBlockColour$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.replaceMessageReferences=replaceMessageReferences$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.tokenizeInterpolation=tokenizeInterpolation$$module$build$src$core$utils$parsing;var Field$$module$build$src$core$field=class{get size_(){return this.size}set size_(a){this.size=a}constructor(a,b,c){this.DEFAULT_VALUE=null;this.name=void 0;this.tooltip=this.validator_=null;this.size=new Size$$module$build$src$core$utils$size(0,0);this.constants_=this.mouseDownWrapper=this.textContent_=this.textElement_=this.borderRect_=this.fieldGroup_=null;this.disposed=!1;this.maxDisplayLength=50;this.sourceBlock_=null;this.enabled_=this.visible_=this.isDirty_=!0;this.suffixField=this.prefixField=\nthis.clickTarget_=null;this.EDITABLE=!0;this.SERIALIZABLE=!1;this.id_=null;this.value_=\"DEFAULT_VALUE\"in new.target.prototype?new.target.prototype.DEFAULT_VALUE:this.DEFAULT_VALUE;this.size_=new Size$$module$build$src$core$utils$size(0,0);a!==Field$$module$build$src$core$field.SKIP_SETUP&&(c&&this.configure_(c),this.setValue(a),b&&this.setValidator(b))}configure_(a){a.tooltip&&this.setTooltip(replaceMessageReferences$$module$build$src$core$utils$parsing(a.tooltip))}setSourceBlock(a){if(this.sourceBlock_)throw Error(\"Field already bound to a block\");\nthis.sourceBlock_=a;if(a.id.includes(\"_field\"))throw Error(\"Field ID indicator is contained in block ID. This may cause \"+`problems with focus: ${a.id}.`);this.id_=`${a.id}_field_${getNextUniqueId$$module$build$src$core$utils$idgenerator()}`}getConstants(){!this.constants_&&this.sourceBlock_&&!this.sourceBlock_.isDeadOrDying()&&this.sourceBlock_.workspace.rendered&&(this.constants_=this.sourceBlock_.workspace.getRenderer().getConstants());return this.constants_}getSourceBlock(){return this.sourceBlock_}init(){if(!this.fieldGroup_){var a=\nthis.id_;if(!a)throw Error(\"Expected ID to be defined prior to init.\");this.fieldGroup_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{id:a});this.isVisible()||(this.fieldGroup_.style.display=\"none\");this.sourceBlock_.getSvgRoot().appendChild(this.fieldGroup_);this.initView();this.updateEditable();this.setTooltip(this.tooltip);this.bindEvents_();this.initModel();this.applyColour()}}initView(){this.createBorderRect_();this.createTextElement_();this.fieldGroup_&&\naddClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyField\")}initModel(){}isFullBlockField(){return!this.borderRect_}createBorderRect_(){this.borderRect_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{rx:this.getConstants().FIELD_BORDER_RECT_RADIUS,ry:this.getConstants().FIELD_BORDER_RECT_RADIUS,x:0,y:0,height:this.size_.height,width:this.size_.width,\"class\":\"blocklyFieldRect\"},this.fieldGroup_)}createTextElement_(){this.textElement_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,\n{\"class\":\"blocklyText blocklyFieldText\"},this.fieldGroup_);this.getConstants().FIELD_TEXT_BASELINE_CENTER&&this.textElement_.setAttribute(\"dominant-baseline\",\"central\");this.textContent_=document.createTextNode(\"\");this.textElement_.appendChild(this.textContent_)}bindEvents_(){const a=this.getClickTarget_();if(!a)throw Error(\"A click target has not been set.\");bindMouseEvents$$module$build$src$core$tooltip(a);this.mouseDownWrapper=conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",\nthis,this.onMouseDown_)}fromXml(a){this.setValue(a.textContent)}toXml(a){a.textContent=this.getValue();return a}saveState(a){a=this.saveLegacyState(Field$$module$build$src$core$field);return a!==null?a:this.getValue()}loadState(a){this.loadLegacyState(Field$$module$build$src$core$field,a)||this.setValue(a)}saveLegacyState(a){return a.prototype.saveState===this.saveState&&a.prototype.toXml!==this.toXml?(a=$.createElement$$module$build$src$core$utils$xml(\"field\"),a.setAttribute(\"name\",this.name||\"\"),\ndomToText$$module$build$src$core$utils$xml(this.toXml(a)).replace(' xmlns=\"https://developers.google.com/blockly/xml\"',\"\")):null}loadLegacyState(a,b){return a.prototype.loadState===this.loadState&&a.prototype.fromXml!==this.fromXml?(this.fromXml($.textToDom$$module$build$src$core$utils$xml(b)),!0):!1}dispose(){hideIfOwner$$module$build$src$core$dropdowndiv(this);hideIfOwner$$module$build$src$core$widgetdiv(this);let a;((a=this.getSourceBlock())==null?0:a.isDeadOrDying())||removeNode$$module$build$src$core$utils$dom(this.fieldGroup_);\nthis.disposed=!0}updateEditable(){const a=this.fieldGroup_,b=this.getSourceBlock();this.EDITABLE&&a&&b&&(this.enabled_&&b.isEditable()?(addClass$$module$build$src$core$utils$dom(a,\"blocklyEditableField\"),removeClass$$module$build$src$core$utils$dom(a,\"blocklyNonEditableField\")):(addClass$$module$build$src$core$utils$dom(a,\"blocklyNonEditableField\"),removeClass$$module$build$src$core$utils$dom(a,\"blocklyEditableField\")))}setEnabled(a){this.enabled_=a;this.updateEditable()}isEnabled(){return this.enabled_}isClickable(){return this.enabled_&&\n!!this.sourceBlock_&&this.sourceBlock_.isEditable()&&this.showEditor_!==Field$$module$build$src$core$field.prototype.showEditor_}isClickableInFlyout(a){return!a}isCurrentlyEditable(){return this.enabled_&&this.EDITABLE&&!!this.sourceBlock_&&this.sourceBlock_.isEditable()}isSerializable(){let a=!1;this.name&&(this.SERIALIZABLE?a=!0:this.EDITABLE&&(console.warn(\"Detected an editable field that was not serializable. Please define SERIALIZABLE property as true on all editable custom fields. Proceeding with serialization.\"),\na=!0));return a}isVisible(){return this.visible_}setVisible(a){if(this.visible_!==a){this.visible_=a;var b=this.fieldGroup_;b&&(b.style.display=a?\"block\":\"none\")}}setValidator(a){this.validator_=a}getValidator(){return this.validator_}getSvgRoot(){return this.fieldGroup_}getBorderRect(){if(!this.borderRect_)throw Error(`The border rectangle is ${this.borderRect_}.`);return this.borderRect_}getTextElement(){if(!this.textElement_)throw Error(`The text element is ${this.textElement_}.`);return this.textElement_}getTextContent(){if(!this.textContent_)throw Error(`The text content is ${this.textContent_}.`);\nreturn this.textContent_}applyColour(){}render_(){this.textContent_&&(this.textContent_.nodeValue=this.getDisplayText_());this.updateSize_()}showEditor(a){this.isClickable()&&this.showEditor_(a)}showEditor_(a){}repositionForWindowResize(){return!1}updateSize_(a){const b=this.getConstants();a=a!==void 0?a:this.isFullBlockField()?0:this.getConstants().FIELD_BORDER_RECT_X_PADDING;let c=a*2,d=b.FIELD_TEXT_HEIGHT,e=0;this.textElement_&&(e=getTextWidth$$module$build$src$core$utils$dom(this.textElement_),\nc+=e);this.isFullBlockField()||(d=Math.max(d,b.FIELD_BORDER_RECT_HEIGHT));this.size_=new Size$$module$build$src$core$utils$size(c,d);this.positionTextElement_(a,e);this.positionBorderRect_()}positionTextElement_(a,b){if(this.textElement_){var c=this.getConstants(),d=this.size_.height/2,e;this.textElement_.setAttribute(\"x\",String(((e=this.getSourceBlock())==null?0:e.RTL)?this.size_.width-b-a:a));this.textElement_.setAttribute(\"y\",String(c.FIELD_TEXT_BASELINE_CENTER?d:d-c.FIELD_TEXT_HEIGHT/2+c.FIELD_TEXT_BASELINE))}}positionBorderRect_(){this.borderRect_&&\n(this.borderRect_.setAttribute(\"width\",String(this.size_.width)),this.borderRect_.setAttribute(\"height\",String(this.size_.height)),this.borderRect_.setAttribute(\"rx\",String(this.getConstants().FIELD_BORDER_RECT_RADIUS)),this.borderRect_.setAttribute(\"ry\",String(this.getConstants().FIELD_BORDER_RECT_RADIUS)))}getSize(){if(!this.isVisible())return new Size$$module$build$src$core$utils$size(0,0);this.isDirty_&&(this.render_(),this.isDirty_=!1);return this.size_}getScaledBBox(){let a;var b=this.getSourceBlock();\nif(!b)throw new UnattachedFieldError$$module$build$src$core$field;if(this.isFullBlockField()){var c=this.sourceBlock_.getHeightWidth();const d=b.workspace.scale;a=this.getAbsoluteXY_();b=(c.width+1)*d;c=(c.height+1)*d;GECKO$$module$build$src$core$utils$useragent?(a.x+=1.5*d,a.y+=1.5*d):(a.x-=.5*d,a.y-=.5*d)}else c=this.borderRect_.getBoundingClientRect(),a=getPageOffset$$module$build$src$core$utils$style(this.borderRect_),b=c.width,c=c.height;return new Rect$$module$build$src$core$utils$rect(a.y,\na.y+c,a.x,a.x+b)}onLocationChange(a){}getDisplayText_(){let a=this.getText();a.length>this.maxDisplayLength&&(a=a.substring(0,this.maxDisplayLength-2)+\"\\u2026\");a=a.replace(/\\s/g,Field$$module$build$src$core$field.NBSP);this.sourceBlock_&&this.sourceBlock_.RTL&&(a+=\"\\u200f\");return a}getText(){const a=this.getText_();return a!==null?String(a):String(this.getValue())}getText_(){return null}markDirty(){this.isDirty_=!0;this.constants_=null}forceRerender(){this.isDirty_=!0;this.sourceBlock_&&this.sourceBlock_.rendered&&\nthis.sourceBlock_.queueRender()}setValue(a,b=!0){if(a!==null){var c=$.getGroup$$module$build$src$core$events$utils();c||$.setGroup$$module$build$src$core$events$utils(!0);try{const k=this.doClassValidation_(a),l=this.processValidation(a,k,b);if(!(l instanceof Error)){var d,e=(d=this.getValidator())==null?void 0:d.call(this,l),f=this.processValidation(l,e,b);if(!(f instanceof Error)){var g=this.sourceBlock_;if(!g||!g.disposed){var h=this.getValue();h===f?this.doValueUpdate_(f):(this.doValueUpdate_(f),\nb&&g&&isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(g,\"field\",this.name||null,h,f)),this.isDirty_&&this.forceRerender())}}}}finally{$.setGroup$$module$build$src$core$events$utils(c)}}}processValidation(a,b,c){return b===null?(this.doValueInvalid_(a,c),this.isDirty_&&this.forceRerender(),Error()):b===void 0?a:b}getValue(){return this.value_}doClassValidation_(a){return a===\nnull||a===void 0?null:a}doValueUpdate_(a){this.value_=a;this.isDirty_=!0}doValueInvalid_(a,b){}onMouseDown_(a){this.sourceBlock_&&!this.sourceBlock_.isDeadOrDying()&&(a=this.sourceBlock_.workspace.getGesture(a))&&a.setStartField(this)}setTooltip(a){a||a===\"\"||(a=this.sourceBlock_);const b=this.getClickTarget_();b?b.tooltip=a:this.tooltip=a}getTooltip(){const a=this.getClickTarget_();return a?getTooltipOfObject$$module$build$src$core$tooltip(a):getTooltipOfObject$$module$build$src$core$tooltip({tooltip:this.tooltip})}getClickTarget_(){return this.clickTarget_||\nthis.getSvgRoot()}getAbsoluteXY_(){return getPageOffset$$module$build$src$core$utils$style(this.getClickTarget_())}referencesVariables(){return!1}refreshVariableName(){}getParentInput(){let a=null;const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;const c=b.inputList;for(let d=0;d{d.stopPropagation();$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this);clearTouchIdentifier$$module$build$src$core$touch()});\nconditionalBind$$module$build$src$core$browser_events(this.textArea,\"wheel\",this,d=>{d.stopPropagation()});conditionalBind$$module$build$src$core$browser_events(this.textArea,\"keydown\",this,this.handleKeyDown)}getDom(){return this.foreignObject}getText(){return this.text}setText(a){this.textArea.value=a;this.onTextChange()}onTextChange(){const a=this.text;this.text=this.textArea.value;for(let b=this.textChangeListeners.length-1;b>=0;b--)this.textChangeListeners[b](a,this.text)}handleKeyDown(a){if(a.key===\n\"Escape\"||a.key===\"Enter\"&&(a.ctrlKey||a.metaKey)){if(this.onFinishEditing)this.onFinishEditing();a.stopPropagation()}}addTextChangeListener(a){this.textChangeListeners.push(a)}removeTextChangeListener(a){this.textChangeListeners.splice(this.textChangeListeners.indexOf(a),1)}setPlaceholderText(a){this.textArea.placeholder=a}setEditable(a){a?this.textArea.removeAttribute(\"readonly\"):this.textArea.setAttribute(\"readonly\",\"true\")}updateSize(a,b){this.foreignObject.setAttribute(\"height\",`${a.height-b.height}`);\nthis.foreignObject.setAttribute(\"width\",`${a.width}`);this.foreignObject.setAttribute(\"y\",`${b.height}`);this.workspace.RTL&&this.foreignObject.setAttribute(\"x\",`${-a.width}`)}getFocusableElement(){return this.textArea}getFocusableTree(){return this.workspace}onNodeFocus(){const a=Rect$$module$build$src$core$utils$rect.from(this.foreignObject.getBoundingClientRect());this.workspace.scrollBoundsIntoView(Rect$$module$build$src$core$utils$rect.createFromPoint(screenToWsCoordinates$$module$build$src$core$utils$svg_math(this.workspace,\na.getOrigin()),a.getWidth(),a.getHeight()))}onNodeBlur(){}canBeFocused(){return this.id?!0:!1}},module$build$src$core$comments$comment_editor={COMMENT_EDITOR_FOCUS_IDENTIFIER:COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor};module$build$src$core$comments$comment_editor.CommentEditor=CommentEditor$$module$build$src$core$comments$comment_editor;var COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button=\"_delete_bar_button\",DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button=class extends CommentBarButton$$module$build$src$core$comments$comment_bar_button{constructor(a,b,c,d){super(a,b,c,d);this.id=a;this.workspace=b;this.container=c;this.commentView=d;this.icon=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{\"class\":\"blocklyDeleteIcon\",\nhref:`${this.workspace.options.pathToMedia}delete-icon.svg`,id:`${this.id}${COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button}`},c);this.bindId=conditionalBind$$module$build$src$core$browser_events(this.icon,\"pointerdown\",this,this.performAction.bind(this))}dispose(){unbind$$module$build$src$core$browser_events(this.bindId)}reposition(){const a=this.getMargin();this.icon.setAttribute(\"x\",\"0\");const b=this.container.getBBox();this.icon.setAttribute(\"y\",\n`${a}`);this.icon.setAttribute(\"x\",`${b.width-this.getSize(!0).getWidth()}`)}performAction(a){clearTouchIdentifier$$module$build$src$core$touch();a&&a instanceof PointerEvent&&isRightButton$$module$build$src$core$browser_events(a)?a.stopPropagation():(this.getCommentView().dispose(),a==null||a.stopPropagation(),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.workspace))}},module$build$src$core$comments$delete_comment_bar_button={COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER:COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button};\nmodule$build$src$core$comments$delete_comment_bar_button.DeleteCommentBarButton=DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button;var CommentView$$module$build$src$core$comments$comment_view=class{constructor(a,b){this.workspace=a;this.commentId=b;this.collapsed=!1;this.editable=!0;this.location=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.sizeChangeListeners=[];this.disposeListeners=[];this.collapseChangeListeners=[];this.resizePointerMoveListener=this.resizePointerUpListener=null;this.disposed=this.disposing=!1;this.svgRoot=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,\n{\"class\":\"blocklyComment blocklyEditable blocklyDraggable\"});this.highlightRect=this.createHighlightRect(this.svgRoot);({topBarGroup:this.topBarGroup,topBarBackground:this.topBarBackground,deleteButton:this.deleteButton,foldoutButton:this.foldoutButton,textPreview:this.textPreview,textPreviewNode:this.textPreviewNode}=this.createTopBar(this.svgRoot));this.commentEditor=this.createTextArea();this.resizeHandle=this.createResizeHandle(this.svgRoot,a);let c;(c=a.getLayerManager())==null||c.append(this,\nBLOCK$$module$build$src$core$layers);this.size=CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize;this.setSizeWithoutFiringEvents(this.size);this.moveTo(new Coordinate$$module$build$src$core$utils$coordinate(0,0))}createHighlightRect(a){return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyCommentHighlight\"},a)}createTopBar(a){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,\n{\"class\":\"blocklyCommentTopbar\"},a);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyCommentTopbarBackground\"},a),c=new DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button(this.commentId,this.workspace,a,this),d=new CollapseCommentBarButton$$module$build$src$core$comments$collapse_comment_bar_button(this.commentId,this.workspace,a,this);this.addDisposeListener(()=>{c.dispose();d.dispose()});const e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,\n{\"class\":\"blocklyCommentPreview blocklyCommentText blocklyText\"},a),f=document.createTextNode(\"\");e.appendChild(f);return{topBarGroup:a,topBarBackground:b,deleteButton:c,foldoutButton:d,textPreview:e,textPreviewNode:f}}createTextArea(){const a=new CommentEditor$$module$build$src$core$comments$comment_editor(this.workspace,this.commentId,()=>this.svgRoot.focus());this.svgRoot.appendChild(a.getDom());a.addTextChangeListener((b,c)=>{this.updateTextPreview(c);this.setSize(this.size)});return a}getEditorFocusableNode(){return this.commentEditor}createResizeHandle(a,\nb){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{\"class\":\"blocklyResizeHandle\",href:`${b.options.pathToMedia}resize-handle.svg`},a);conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onResizePointerDown);return a}getSvgRoot(){return this.svgRoot}getSize(){return this.collapsed?this.topBarBackground.getBBox():this.size}setSizeWithoutFiringEvents(a){const b=this.topBarBackground.getBBox(),c=this.textPreview.getBBox(),d=this.resizeHandle.getBBox();\nthis.size=a=Size$$module$build$src$core$utils$size.max(a,this.calcMinSize(b));this.svgRoot.setAttribute(\"height\",`${a.height}`);this.svgRoot.setAttribute(\"width\",`${a.width}`);this.updateHighlightRect(a);this.updateTopBarSize(a);this.commentEditor.updateSize(a,b);this.deleteButton.reposition();this.foldoutButton.reposition();this.updateTextPreviewSize(a,b,c);this.updateResizeHandlePosition(a,d)}setSize(a){const b=this.preResizeSize||this.size;this.setSizeWithoutFiringEvents(a);this.onSizeChange(b,\nthis.size)}calcMinSize(a){var b;this.updateTextPreview((b=this.commentEditor.getText())!=null?b:\"\");let c=b=getTextWidth$$module$build$src$core$utils$dom(this.textPreview);this.foldoutButton.isVisible()?c+=this.foldoutButton.getSize(!0).getWidth():b&&(c+=4);this.deleteButton.isVisible()?c+=this.deleteButton.getSize(!0).getWidth():b&&(c+=4);return new Size$$module$build$src$core$utils$size(c,a.height+20)}updateHighlightRect(a){this.highlightRect.setAttribute(\"height\",`${a.height}`);this.highlightRect.setAttribute(\"width\",\n`${a.width}`);this.workspace.RTL&&this.highlightRect.setAttribute(\"x\",`${-a.width}`)}updateTopBarSize(a){this.topBarBackground.setAttribute(\"width\",`${a.width}`)}updateTextPreviewSize(a,b,c){b=(b.height-c.height)/2;const d=this.foldoutButton.getSize(!0),e=this.deleteButton.getSize(!0);a=a.width-d.getWidth()-e.getWidth();this.textPreview.setAttribute(\"x\",`${(this.workspace.RTL?-1:1)*d.getWidth()}`);this.textPreview.setAttribute(\"y\",`${b+c.height/2}`);this.textPreview.setAttribute(\"width\",`${a}`)}updateResizeHandlePosition(a,\nb){this.resizeHandle.setAttribute(\"y\",`${a.height-b.height}`);this.resizeHandle.setAttribute(\"x\",`${a.width-b.width}`)}onSizeChange(a,b){for(let c=this.sizeChangeListeners.length-1;c>=0;c--)this.sizeChangeListeners[c](a,b)}addSizeChangeListener(a){this.sizeChangeListeners.push(a)}removeSizeChangeListener(a){this.sizeChangeListeners.splice(this.sizeChangeListeners.indexOf(a),1)}onResizePointerDown(a){this.isEditable()&&(this.bringToFront(),isRightButton$$module$build$src$core$browser_events(a)||(this.preResizeSize=\nthis.getSize(),start$$module$build$src$core$utils$drag(this.workspace,a,new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.getSize().width:this.getSize().width,this.getSize().height)),this.resizePointerUpListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onResizePointerUp),this.resizePointerMoveListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",this,this.onResizePointerMove),this.workspace.hideChaff()),\na.stopPropagation())}onResizePointerUp(a){clearTouchIdentifier$$module$build$src$core$touch();this.resizePointerUpListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerUpListener),this.resizePointerUpListener=null);this.resizePointerMoveListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerMoveListener),this.resizePointerMoveListener=null);this.setSize(this.size);this.preResizeSize=void 0}onResizePointerMove(a){a=move$$module$build$src$core$utils$drag(this.workspace,\na);this.setSizeWithoutFiringEvents(new Size$$module$build$src$core$utils$size(this.workspace.RTL?-a.x:a.x,a.y))}isCollapsed(){return this.collapsed}setCollapsed(a){(this.collapsed=a)?addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCollapsed\"):removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCollapsed\");this.setSizeWithoutFiringEvents(this.size);this.onCollapse()}onCollapse(){for(let a=this.collapseChangeListeners.length-1;a>=0;a--)this.collapseChangeListeners[a](this.collapsed)}addOnCollapseListener(a){this.collapseChangeListeners.push(a)}removeOnCollapseListener(a){this.collapseChangeListeners.splice(this.collapseChangeListeners.indexOf(a),\n1)}isEditable(){return this.editable}setEditable(a){(this.editable=a)?(addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyEditable\"),removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyReadonly\")):(removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyEditable\"),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyReadonly\"));this.commentEditor.setEditable(a)}getRelativeToSurfaceXY(){return this.location}moveTo(a){this.location=a;this.svgRoot.setAttribute(\"transform\",\n`translate(${a.x}, ${a.y})`)}getText(){return this.commentEditor.getText()}setText(a){this.commentEditor.setText(a)}setPlaceholderText(a){this.commentEditor.setPlaceholderText(a)}addTextChangeListener(a){this.commentEditor.addTextChangeListener(a)}removeTextChangeListener(a){this.commentEditor.removeTextChangeListener(a)}updateTextPreview(a){this.textPreviewNode.textContent=this.truncateText(a)}truncateText(a){return a.length>=12?`${a.substring(0,9)}...`:a}bringToFront(){const a=this.svgRoot.parentNode,\nb=a.childNodes;b[b.length-1]!==this.svgRoot&&a.appendChild(this.svgRoot)}onDeleteDown(a){clearTouchIdentifier$$module$build$src$core$touch();isRightButton$$module$build$src$core$browser_events(a)||this.dispose();a.stopPropagation()}dispose(){this.disposing=!0;removeNode$$module$build$src$core$utils$dom(this.svgRoot);for(let a=this.disposeListeners.length-1;a>=0;a--)this.disposeListeners[a]();this.disposeListeners.length=0;this.disposed=!0}isDisposed(){return this.disposed}isDeadOrDying(){return this.disposing||\nthis.disposed}addDisposeListener(a){this.disposeListeners.push(a)}removeDisposeListener(a){this.disposeListeners.splice(this.disposeListeners.indexOf(a),1)}getCommentBarButtons(){return[this.foldoutButton,this.deleteButton]}};CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize=new Size$$module$build$src$core$utils$size(120,100);register$$module$build$src$core$css(\"\\n.injectionDiv {\\n --commentFillColour: #FFFCC7;\\n --commentBorderColour: #F2E49B;\\n}\\n\\n.blocklyComment .blocklyTextarea {\\n background-color: var(--commentFillColour);\\n border: 1px solid var(--commentBorderColour);\\n box-sizing: border-box;\\n display: block;\\n outline: 0;\\n padding: 5px;\\n resize: none;\\n width: 100%;\\n height: 100%;\\n}\\n\\n.blocklyReadonly.blocklyComment .blocklyTextarea {\\n cursor: inherit;\\n}\\n\\n.blocklyDeleteIcon {\\n width: 20px;\\n height: 20px;\\n display: none;\\n cursor: pointer;\\n}\\n\\n.blocklyFoldoutIcon {\\n width: 20px;\\n height: 20px;\\n transform-origin: 12px 12px;\\n cursor: pointer;\\n}\\n.blocklyResizeHandle {\\n width: 12px;\\n height: 12px;\\n cursor: se-resize;\\n}\\n.blocklyReadonly.blocklyComment .blocklyResizeHandle {\\n cursor: inherit;\\n}\\n\\n.blocklyCommentTopbarBackground {\\n fill: var(--commentBorderColour);\\n height: 24px;\\n}\\n\\n.blocklyComment .blocklyCommentPreview.blocklyText {\\n fill: #000;\\n dominant-baseline: middle;\\n visibility: hidden;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyCommentPreview {\\n visibility: visible;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyCommentForeignObject,\\n.blocklyCollapsed.blocklyComment .blocklyResizeHandle {\\n display: none;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyFoldoutIcon {\\n transform: rotate(-90deg);\\n}\\n\\n.blocklyRTL .blocklyCommentTopbar {\\n transform: scale(-1, 1);\\n}\\n\\n.blocklyRTL .blocklyCommentForeignObject {\\n direction: rtl;\\n}\\n\\n.blocklyRTL .blocklyCommentPreview {\\n /* Revert the scale and control RTL using direction instead. */\\n transform: scale(-1, 1);\\n direction: rtl;\\n}\\n\\n.blocklyRTL .blocklyResizeHandle {\\n transform: scale(-1, 1);\\n cursor: sw-resize;\\n}\\n\\n.blocklyCommentHighlight {\\n fill: none;\\n}\\n\\n.blocklyCommentText.blocklyActiveFocus {\\n border-color: #fc3;\\n border-width: 2px;\\n}\\n\\n.blocklySelected .blocklyCommentHighlight {\\n stroke: #fc3;\\n stroke-width: 3px;\\n}\\n\\n.blocklyCollapsed.blocklySelected .blocklyCommentHighlight {\\n stroke: none;\\n}\\n\\n.blocklyCollapsed.blocklySelected .blocklyCommentTopbarBackground {\\n stroke: #fc3;\\n stroke-width: 3px;\\n}\\n\");\nvar module$build$src$core$comments$comment_view={};module$build$src$core$comments$comment_view.CommentView=CommentView$$module$build$src$core$comments$comment_view;var WorkspaceComment$$module$build$src$core$comments$workspace_comment=class{constructor(a,b){this.workspace=a;this.text=\"\";this.collapsed=!1;this.deletable=this.movable=this.editable=!0;this.location=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.disposing=this.disposed=!1;this.id=b&&!a.getCommentById(b)?b:genUid$$module$build$src$core$utils$idgenerator();this.size=CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize;a.addTopComment(this);this.fireCreateEvent()}fireCreateEvent(){isEnabled$$module$build$src$core$events$utils()&&\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CREATE))(this))}fireDeleteEvent(){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_DELETE))(this))}fireChangeEvent(a,b){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CHANGE))(this,\na,b))}fireCollapseEvent(a){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_COLLAPSE))(this,a))}setText(a){const b=this.text;this.text=a;this.fireChangeEvent(b,a)}getText(){return this.text}setSize(a){const b=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_RESIZE))(this);this.size=a;b.recordCurrentSizeAsNewSize();\nfire$$module$build$src$core$events$utils(b)}getSize(){return this.size}setCollapsed(a){this.collapsed=a;this.fireCollapseEvent(a)}isCollapsed(){return this.collapsed}setEditable(a){this.editable=a}isEditable(){return this.isOwnEditable()&&!this.workspace.isReadOnly()}isOwnEditable(){return this.editable}setMovable(a){this.movable=a}isMovable(){return this.isOwnMovable()&&!this.workspace.isReadOnly()&&!this.workspace.isFlyout}isOwnMovable(){return this.movable}setDeletable(a){this.deletable=a}isDeletable(){return this.isOwnDeletable()&&\n!this.isDeadOrDying()&&!this.workspace.isReadOnly()&&!this.workspace.isFlyout}isOwnDeletable(){return this.deletable}moveTo(a,b){const c=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_MOVE))(this);b&&c.setReason(b);this.location=a;c.recordNew();fire$$module$build$src$core$events$utils(c)}getRelativeToSurfaceXY(){return this.location}dispose(){this.disposing=!0;this.fireDeleteEvent();this.workspace.removeTopComment(this);this.disposed=!0}isDisposed(){return this.disposed}isDeadOrDying(){return this.disposing||\nthis.disposed}},module$build$src$core$comments$workspace_comment={};module$build$src$core$comments$workspace_comment.WorkspaceComment=WorkspaceComment$$module$build$src$core$comments$workspace_comment;var RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment=class extends WorkspaceComment$$module$build$src$core$comments$workspace_comment{constructor(a,b){super(a,b);this.dragStrategy=new CommentDragStrategy$$module$build$src$core$dragging$comment_drag_strategy(this);this.workspace=a;this.view=new CommentView$$module$build$src$core$comments$comment_view(a,this.id);this.view.setSize(this.getSize());this.view.setEditable(this.isEditable());this.view.getSvgRoot().setAttribute(\"data-id\",\nthis.id);this.view.getSvgRoot().setAttribute(\"id\",this.id);this.addModelUpdateBindings();conditionalBind$$module$build$src$core$browser_events(this.view.getSvgRoot(),\"pointerdown\",this,this.startGesture)}addModelUpdateBindings(){this.view.addTextChangeListener((a,b)=>void super.setText(b));this.view.addSizeChangeListener((a,b)=>void super.setSize(b));this.view.addOnCollapseListener(()=>void super.setCollapsed(this.view.isCollapsed()));this.view.addDisposeListener(()=>{this.isDeadOrDying()||this.dispose()})}setText(a){this.view.setText(a)}setPlaceholderText(a){this.view.setPlaceholderText(a)}setSize(a){this.view.setSize(a)}setCollapsed(a){this.view.setCollapsed(a)}setEditable(a){super.setEditable(a);\nthis.view.setEditable(this.isEditable())}getSvgRoot(){return this.view.getSvgRoot()}getSize(){return super.getSize()}getBoundingRectangle(){const a=this.getRelativeToSurfaceXY();var b,c;const d=(c=(b=this.view)==null?void 0:b.getSize())!=null?c:this.getSize();this.workspace.RTL?(b=a.x-d.width,c=a.x):(b=a.x,c=a.x+d.width);return new Rect$$module$build$src$core$utils$rect(a.y,a.y+d.height,b,c)}moveBy(a,b,c){const d=this.getRelativeToSurfaceXY();a=new Coordinate$$module$build$src$core$utils$coordinate(d.x+\na,d.y+b);this.moveTo(a,c)}moveTo(a,b){super.moveTo(a,b);this.view.moveTo(a)}moveDuringDrag(a){this.location=a;this.view.moveTo(a)}setDragging(a){a?addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDragging\"):removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDragging\")}dispose(){this.disposing=!0;const a=$.getFocusManager$$module$build$src$core$focus_manager();a.getFocusedNode()===this&&setTimeout(()=>a.focusTree(this.workspace),0);this.view.isDeadOrDying()||\nthis.view.dispose();super.dispose()}startGesture(a){const b=this.workspace.getGesture(a);b&&(b.handleCommentStart(a,this),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this))}setDeleteStyle(a){a?addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDraggingDelete\"):removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDraggingDelete\")}isCopyable(){return this.isOwnMovable()&&this.isOwnDeletable()}isMovable(){return this.dragStrategy.isMovable()}startDrag(){this.dragStrategy.startDrag()}drag(a){this.dragStrategy.drag(a)}endDrag(){this.dragStrategy.endDrag()}revertDrag(){this.dragStrategy.revertDrag()}select(){addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\n\"blocklySelected\");fireSelectedEvent$$module$build$src$core$common(this)}unselect(){removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklySelected\");fireSelectedEvent$$module$build$src$core$common(null)}toCopyData(){return{paster:WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE,commentState:save$$module$build$src$core$serialization$workspace_comments(this,{addCoordinates:!0,saveIds:!1})}}showContextMenu(a){const b=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({comment:this,\nfocusedNode:this},a);let c;c=a instanceof PointerEvent?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this.workspace,this.getRelativeToSurfaceXY()).translate(10,10);show$$module$build$src$core$contextmenu(a,b,this.workspace.RTL,this.workspace,c)}snapToGrid(){if(!this.isDeadOrDying()){var a=this.workspace.getGrid();if(a!=null&&a.shouldSnap()){var b=this.getRelativeToSurfaceXY();a=a.alignXY(b);a!==b&&this.moveTo(a,\n[\"snap\"])}}}getEditorFocusableNode(){return this.view.getEditorFocusableNode()}getFocusableElement(){return this.getSvgRoot()}getFocusableTree(){return this.workspace}onNodeFocus(){this.select();let a;(a=this.workspace.getLayerManager())==null||a.append(this,BLOCK$$module$build$src$core$layers);this.workspace.scrollBoundsIntoView(this.getBoundingRectangle())}onNodeBlur(){this.unselect()}canBeFocused(){return!0}},module$build$src$core$comments$rendered_workspace_comment={};\nmodule$build$src$core$comments$rendered_workspace_comment.RenderedWorkspaceComment=RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment;var module$build$src$core$xml={};module$build$src$core$xml.appendDomToWorkspace=appendDomToWorkspace$$module$build$src$core$xml;module$build$src$core$xml.blockToDom=blockToDom$$module$build$src$core$xml;module$build$src$core$xml.blockToDomWithXY=blockToDomWithXY$$module$build$src$core$xml;module$build$src$core$xml.clearWorkspaceAndLoadFromXml=clearWorkspaceAndLoadFromXml$$module$build$src$core$xml;module$build$src$core$xml.deleteNext=deleteNext$$module$build$src$core$xml;\nmodule$build$src$core$xml.domToBlock=$.domToBlock$$module$build$src$core$xml;module$build$src$core$xml.domToBlockInternal=domToBlockInternal$$module$build$src$core$xml;module$build$src$core$xml.domToPrettyText=domToPrettyText$$module$build$src$core$xml;module$build$src$core$xml.domToText=domToText$$module$build$src$core$xml;module$build$src$core$xml.domToVariables=domToVariables$$module$build$src$core$xml;module$build$src$core$xml.domToWorkspace=$.domToWorkspace$$module$build$src$core$xml;\nmodule$build$src$core$xml.loadWorkspaceComment=loadWorkspaceComment$$module$build$src$core$xml;module$build$src$core$xml.saveWorkspaceComment=saveWorkspaceComment$$module$build$src$core$xml;module$build$src$core$xml.variablesToDom=variablesToDom$$module$build$src$core$xml;module$build$src$core$xml.workspaceToDom=workspaceToDom$$module$build$src$core$xml;var BlockCreate$$module$build$src$core$events$events_block_create=class extends BlockBase$$module$build$src$core$events$events_block_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.BLOCK_CREATE;a&&(a.isShadow()&&(this.recordUndo=!1),this.xml=blockToDomWithXY$$module$build$src$core$xml(a),this.ids=getDescendantIds$$module$build$src$core$events$utils(a),this.json=save$$module$build$src$core$serialization$blocks(a,{addCoordinates:!0}))}toJson(){const a=super.toJson();\nif(!this.xml)throw Error(\"The block XML is undefined. Either pass a block to the constructor, or call fromJson\");if(!this.ids)throw Error(\"The block IDs are undefined. Either pass a block to the constructor, or call fromJson\");if(!this.json)throw Error(\"The block JSON is undefined. Either pass a block to the constructor, or call fromJson\");a.xml=domToText$$module$build$src$core$xml(this.xml);a.ids=this.ids;a.json=this.json;this.recordUndo||(a.recordUndo=this.recordUndo);return a}static fromJson(a,\nb,c){b=super.fromJson(a,b,c!=null?c:new BlockCreate$$module$build$src$core$events$events_block_create);b.xml=$.textToDom$$module$build$src$core$utils$xml(a.xml);b.ids=a.ids;b.json=a.json;a.recordUndo!==void 0&&(b.recordUndo=a.recordUndo);return b}run(a){const b=this.getEventWorkspace_();if(!this.json)throw Error(\"The block JSON is undefined. Either pass a block to the constructor, or call fromJson\");if(!this.ids)throw Error(\"The block IDs are undefined. Either pass a block to the constructor, or call fromJson\");\nif(!allShadowBlocks$$module$build$src$core$events$events_block_create(b,this.ids))if(a)append$$module$build$src$core$serialization$blocks(this.json,b);else for(a=0;aa.getBlockById(c)).filter(c=>c&&c.isShadow()).length===b.length};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.BLOCK_CREATE,BlockCreate$$module$build$src$core$events$events_block_create);var module$build$src$core$events$events_block_create={};module$build$src$core$events$events_block_create.BlockCreate=BlockCreate$$module$build$src$core$events$events_block_create;var ThemeChange$$module$build$src$core$events$events_theme_change=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b){super(b);this.type=EventType$$module$build$src$core$events$type.THEME_CHANGE;this.themeName=a}toJson(){const a=super.toJson();if(!this.themeName)throw Error(\"The theme name is undefined. Either pass a theme name to the constructor, or call fromJson\");a.themeName=this.themeName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new ThemeChange$$module$build$src$core$events$events_theme_change);\nb.themeName=a.themeName;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.THEME_CHANGE,ThemeChange$$module$build$src$core$events$events_theme_change);var module$build$src$core$events$events_theme_change={};module$build$src$core$events$events_theme_change.ThemeChange=ThemeChange$$module$build$src$core$events$events_theme_change;var ViewportChange$$module$build$src$core$events$events_viewport=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b,c,d,e){super(d);this.type=EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE;this.viewTop=a;this.viewLeft=b;this.scale=c;this.oldScale=e}toJson(){const a=super.toJson();if(this.viewTop===void 0)throw Error(\"The view top is undefined. Either pass a value to the constructor, or call fromJson\");if(this.viewLeft===void 0)throw Error(\"The view left is undefined. Either pass a value to the constructor, or call fromJson\");\nif(this.scale===void 0)throw Error(\"The scale is undefined. Either pass a value to the constructor, or call fromJson\");if(this.oldScale===void 0)throw Error(\"The old scale is undefined. Either pass a value to the constructor, or call fromJson\");a.viewTop=this.viewTop;a.viewLeft=this.viewLeft;a.scale=this.scale;a.oldScale=this.oldScale;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new ViewportChange$$module$build$src$core$events$events_viewport);b.viewTop=a.viewTop;b.viewLeft=a.viewLeft;\nb.scale=a.scale;b.oldScale=a.oldScale;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE,ViewportChange$$module$build$src$core$events$events_viewport);var module$build$src$core$events$events_viewport={};module$build$src$core$events$events_viewport.ViewportChange=ViewportChange$$module$build$src$core$events$events_viewport;var TEST_ONLY$$module$build$src$core$field_registry={fromJsonInternal:fromJsonInternal$$module$build$src$core$field_registry},module$build$src$core$field_registry={TEST_ONLY:TEST_ONLY$$module$build$src$core$field_registry};module$build$src$core$field_registry.fromJson=$.fromJson$$module$build$src$core$field_registry;module$build$src$core$field_registry.register=register$$module$build$src$core$field_registry;module$build$src$core$field_registry.unregister=unregister$$module$build$src$core$field_registry;var FieldDropdown$$module$build$src$core$field_dropdown=class extends Field$$module$build$src$core$field{constructor(a,b,c){super(Field$$module$build$src$core$field.SKIP_SETUP);this.svgArrow=this.arrow=this.imageElement=this.menu_=this.selectedMenuItem=null;this.SERIALIZABLE=!0;this.clickTarget_=this.suffixField=this.prefixField=this.generatedOptions=null;a!==Field$$module$build$src$core$field.SKIP_SETUP&&(this.setOptions(a),c&&this.configure_(c),b&&this.setValidator(b))}fromXml(a){this.isOptionListDynamic()&&\nthis.getOptions(!1);this.setValue(a.textContent)}loadState(a){this.loadLegacyState(FieldDropdown$$module$build$src$core$field_dropdown,a)||(this.isOptionListDynamic()&&this.getOptions(!1),this.setValue(a))}initView(){this.shouldAddBorderRect_()?this.createBorderRect_():this.clickTarget_=this.sourceBlock_.getSvgRoot();this.createTextElement_();this.imageElement=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{},this.fieldGroup_);this.getConstants().FIELD_DROPDOWN_SVG_ARROW?\nthis.createSVGArrow_():this.createTextArrow_();this.borderRect_&&addClass$$module$build$src$core$utils$dom(this.borderRect_,\"blocklyDropdownRect\");this.fieldGroup_&&(addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyField\"),addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyDropdownField\"))}shouldAddBorderRect_(){let a;return!this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW||this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW&&!((a=this.getSourceBlock())==\nnull?0:a.isShadow())}createTextArrow_(){this.arrow=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TSPAN,{},this.textElement_);let a;this.arrow.appendChild(document.createTextNode(((a=this.getSourceBlock())==null?0:a.RTL)?FieldDropdown$$module$build$src$core$field_dropdown.ARROW_CHAR+\" \":\" \"+FieldDropdown$$module$build$src$core$field_dropdown.ARROW_CHAR));this.getConstants().FIELD_TEXT_BASELINE_CENTER&&this.arrow.setAttribute(\"dominant-baseline\",\"central\");let b;\n((b=this.getSourceBlock())==null?0:b.RTL)?this.getTextElement().insertBefore(this.arrow,this.textContent_):this.getTextElement().appendChild(this.arrow)}createSVGArrow_(){this.svgArrow=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{height:this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE+\"px\",width:this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE+\"px\"},this.fieldGroup_);this.svgArrow.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.getConstants().FIELD_DROPDOWN_SVG_ARROW_DATAURI)}showEditor_(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.dropdownCreate();this.menu_&&(this.menu_.openingCoords=a&&typeof a.clientX===\"number\"?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):null,clearContent$$module$build$src$core$dropdowndiv(),a=this.menu_.render(getContentDiv$$module$build$src$core$dropdowndiv()),addClass$$module$build$src$core$utils$dom(a,\n\"blocklyDropdownMenu\"),this.getConstants().FIELD_DROPDOWN_COLOURED_DIV&&(b=b.getColour(),a=this.sourceBlock_.getColourTertiary(),setColour$$module$build$src$core$dropdowndiv(b,a)),showPositionedByField$$module$build$src$core$dropdowndiv(this,this.dropdownDispose_.bind(this)),getContentDiv$$module$build$src$core$dropdowndiv().style.height=`${this.menu_.getSize().height}px`,this.menu_.focus(),this.selectedMenuItem&&this.menu_.setHighlighted(this.selectedMenuItem),this.applyColour())}dropdownCreate(){const a=\nthis.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;const b=new Menu$$module$build$src$core$menu;b.setRole(Role$$module$build$src$core$utils$aria.LISTBOX);this.menu_=b;const c=this.getOptions(!1);this.selectedMenuItem=null;for(let e=0;eb[1]===a)?a:(this.sourceBlock_&&console.warn(\"Cannot set the dropdown's value to an unavailable option. Block type: \"+this.sourceBlock_.type+\", Field name: \"+this.name+\", Value: \"+a),null)}doValueUpdate_(a){super.doValueUpdate_(a);\na=this.getOptions(!0);for(let b=0,c;c=a[b];b++)c[1]===this.value_&&(this.selectedOption=c)}applyColour(){const a=this.sourceBlock_;this.borderRect_&&(this.borderRect_.setAttribute(\"stroke\",a.getColourTertiary()),this.menu_?this.borderRect_.setAttribute(\"fill\",a.getColourTertiary()):this.borderRect_.setAttribute(\"fill\",\"transparent\"));a&&this.arrow&&(a.isShadow()?this.arrow.style.fill=a.getColourSecondary():this.arrow.style.fill=a.getColour())}render_(){this.getTextContent().nodeValue=\"\";this.imageElement.style.display=\n\"none\";const a=this.selectedOption&&this.selectedOption[0];isImageProperties$$module$build$src$core$field_dropdown(a)?this.renderSelectedImage(a):this.renderSelectedText();this.positionBorderRect_()}renderSelectedImage(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.imageElement.style.display=\"\";this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",a.src);this.imageElement.setAttribute(\"height\",String(a.height));\nthis.imageElement.setAttribute(\"width\",String(a.width));const c=Number(a.height);a=Number(a.width);var d=!!this.borderRect_;const e=Math.max(d?this.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT:0,c+FieldDropdown$$module$build$src$core$field_dropdown.IMAGE_Y_PADDING);d=d?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0;let f;f=this.svgArrow?this.positionSVGArrow(a+d,e/2-this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE/2):getTextWidth$$module$build$src$core$utils$dom(this.arrow);this.size_=new Size$$module$build$src$core$utils$size(a+\nf+d*2,e);let g=0;b.RTL?this.imageElement.setAttribute(\"x\",`${d+f}`):(g=a+f,this.getTextElement().setAttribute(\"text-anchor\",\"end\"),this.imageElement.setAttribute(\"x\",`${d}`));this.imageElement.setAttribute(\"y\",String(e/2-c/2));this.positionTextElement_(g+d,a+f)}renderSelectedText(){this.getTextContent().nodeValue=this.getDisplayText_();var a=this.getTextElement();addClass$$module$build$src$core$utils$dom(a,\"blocklyDropdownText\");a.setAttribute(\"text-anchor\",\"start\");var b=!!this.borderRect_;a=Math.max(b?\nthis.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT:0,this.getConstants().FIELD_TEXT_HEIGHT);const c=getTextWidth$$module$build$src$core$utils$dom(this.getTextElement());b=b?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0;let d=0;this.svgArrow&&(d=this.positionSVGArrow(c+b,a/2-this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE/2));this.size_=new Size$$module$build$src$core$utils$size(c+d+b*2,a);this.positionTextElement_(b,c)}positionSVGArrow(a,b){if(!this.svgArrow)return 0;const c=this.getSourceBlock();\nif(!c)throw new UnattachedFieldError$$module$build$src$core$field;const d=this.borderRect_?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0,e=this.getConstants().FIELD_DROPDOWN_SVG_ARROW_PADDING,f=this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE;this.svgArrow.setAttribute(\"transform\",\"translate(\"+(c.RTL?d:a+e)+\",\"+b+\")\");return f+e}getText_(){if(!this.selectedOption)return null;const a=this.selectedOption[0];if(isImageProperties$$module$build$src$core$field_dropdown(a))return a.alt;if(typeof HTMLElement!==\n\"undefined\"&&a instanceof HTMLElement){let b,c;return(c=(b=a.title)!=null?b:a.ariaLabel)!=null?c:a.innerText}if(typeof a===\"string\")return a;console.warn(\"Can't get text for existing dropdown option. If you're using HTMLElement dropdown options in node, ensure you're using jsdom-global or similar.\");return null}static fromJson(a){if(!a.options)throw Error(\"options are required for the dropdown field. The options property must be assigned an array of [humanReadableValue, languageNeutralValue] tuples.\");\nreturn new this(a.options,void 0,a)}trimOptions(a){let b=!1;const c=a.map(g=>{if(g===FieldDropdown$$module$build$src$core$field_dropdown.SEPARATOR)return b=!0,g;const [h,k]=g;if(typeof h===\"string\")return[replaceMessageReferences$$module$build$src$core$utils$parsing(h),k];b=!0;return[isImageProperties$$module$build$src$core$field_dropdown(h)?Object.assign({},h,{alt:replaceMessageReferences$$module$build$src$core$utils$parsing(h.alt)}):h,k]});if(b||a.length<2)return{options:c};var d=c.map(([g])=>g),\ne=shortestStringLength$$module$build$src$core$utils$string(d);a=commonWordPrefix$$module$build$src$core$utils$string(d,e);const f=commonWordSuffix$$module$build$src$core$utils$string(d,e);if(!a&&!f||e<=a+f)return{options:c};e=a?d[0].substring(0,a-1):void 0;d=f?d[0].substr(1-f):void 0;return{options:this.applyTrim(c,a,f),prefix:e,suffix:d}}applyTrim(a,b,c){return a.map(([d,e])=>[d.substring(b,d.length-c),e])}validateOptions(a){if(!Array.isArray(a))throw TypeError(\"FieldDropdown options must be an array.\");\nif(!a.length)throw TypeError(\"FieldDropdown options must not be an empty array.\");let b=!1;for(let c=0;c0&&!!a.snap;return b}static parseThemeOptions(a){a=a.theme||Classic$$module$build$src$core$theme$classic;return typeof a===\"string\"?getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.THEME,a):a instanceof Theme$$module$build$src$core$theme?a:Theme$$module$build$src$core$theme.defineTheme(a.name||\"builtin\"+getNextUniqueId$$module$build$src$core$utils$idgenerator(),a)}},module$build$src$core$options=\n{};module$build$src$core$options.Options=Options$$module$build$src$core$options;var BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy=class{constructor(a,b){this.bubble=a;this.workspace=b;this.startLoc=null}isMovable(){return!0}startDrag(){this.startLoc=this.bubble.getRelativeToSurfaceXY();this.workspace.setResizesEnabled(!1);let a;(a=this.workspace.getLayerManager())==null||a.moveToDragLayer(this.bubble);this.bubble.setDragging&&this.bubble.setDragging(!0)}drag(a){this.bubble.moveDuringDrag(a)}endDrag(){this.workspace.setResizesEnabled(!0);let a;(a=this.workspace.getLayerManager())==\nnull||a.moveOffDragLayer(this.bubble,BUBBLE$$module$build$src$core$layers);this.bubble.setDragging(!1)}revertDrag(){this.startLoc&&this.bubble.moveDuringDrag(this.startLoc)}},module$build$src$core$dragging$bubble_drag_strategy={};module$build$src$core$dragging$bubble_drag_strategy.BubbleDragStrategy=BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy;var _a$$module$build$src$core$bubbles$bubble,Bubble$$module$build$src$core$bubbles$bubble=class{constructor(a,b,c,d,e){this.workspace=a;this.anchor=b;this.ownerRect=c;this.owner=e;this.size=new Size$$module$build$src$core$utils$size(0,0);this.colour=\"#ffffff\";this.disposed=!1;this.relativeLeft=this.relativeTop=0;this.dragStrategy=new BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy(this,this.workspace);this.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();this.svgRoot=\ncreateSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyBubble\"},a.getBubbleCanvas());a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyEmboss\"},this.svgRoot);this.tail=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyBubbleTail\"},a);this.background=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{\"class\":\"blocklyDraggable\",x:0,y:0,rx:_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH,ry:_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},a);this.contentContainer=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},this.svgRoot);this.focusableElement=d!=null?d:this.svgRoot;this.focusableElement.setAttribute(\"id\",this.id);conditionalBind$$module$build$src$core$browser_events(this.background,\"pointerdown\",this,this.onMouseDown);conditionalBind$$module$build$src$core$browser_events(this.focusableElement,\n\"keydown\",this,this.onKeyDown)}dispose(){removeNode$$module$build$src$core$utils$dom(this.svgRoot);this.disposed=!0}setAnchorLocation(a,b=!1){this.anchor=a;b?this.positionByRect(this.ownerRect):this.positionRelativeToAnchor();this.renderTail()}setPositionRelativeToAnchor(a,b){this.relativeLeft=a;this.relativeTop=b;this.positionRelativeToAnchor();this.renderTail()}getSize(){return this.size}setSize(a,b=!1){a.width=Math.max(a.width,_a$$module$build$src$core$bubbles$bubble.MIN_SIZE);a.height=Math.max(a.height,\n_a$$module$build$src$core$bubbles$bubble.MIN_SIZE);this.size=a;this.background.setAttribute(\"width\",`${a.width}`);this.background.setAttribute(\"height\",`${a.height}`);b?this.positionByRect(this.ownerRect):this.positionRelativeToAnchor();this.renderTail()}getColour(){return this.colour}setColour(a){this.colour=a;this.tail.setAttribute(\"fill\",a);this.background.setAttribute(\"fill\",a)}onMouseDown(a){let b;(b=this.workspace.getGesture(a))==null||b.handleBubbleStart(a,this);$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this)}onKeyDown(a){a.key===\n\"Escape\"&&this.owner&&(this.owner.setBubbleVisible(!1),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.owner))}positionRelativeToAnchor(){let a=this.anchor.x;a=this.workspace.RTL?a-(this.relativeLeft+this.size.width):a+this.relativeLeft;this.moveTo(a,this.relativeTop+this.anchor.y)}moveTo(a,b){this.svgRoot.setAttribute(\"transform\",`translate(${a}, ${b})`)}positionByRect(a=new Rect$$module$build$src$core$utils$rect(0,0,0,0)){var b=this.workspace.getMetricsManager().getViewMetrics(!0),\nc=this.getOptimalRelativeLeft(b),d=this.getOptimalRelativeTop(b);const e={x:c,y:-this.size.height-this.workspace.getRenderer().getConstants().MIN_BLOCK_HEIGHT},f={x:-this.size.width-30,y:d};d={x:a.getWidth(),y:d};var g={x:c,y:a.getHeight()};c=a.getWidth()a.width)return b;a=this.getWorkspaceViewRect(a);if(this.workspace.RTL){var c=this.anchor.x-b;c-this.size.widtha.right&&(b=-(a.right-this.anchor.x))}else{c=b+this.anchor.x;const d=c+this.size.width;ca.right&&(b=a.right-this.anchor.x-this.size.width)}return b}getOptimalRelativeTop(a){let b=-this.size.height/4;if(this.size.height>a.height)return b;const c=this.anchor.y+b,d=c+this.size.height;a=this.getWorkspaceViewRect(a);\nca.bottom&&(b=a.bottom-this.anchor.y-this.size.height);return b}getWorkspaceViewRect(a){const b=a.top;let c=a.top+a.height,d=a.left;a=a.left+a.width;c-=this.getScrollbarThickness();this.workspace.RTL?d-=this.getScrollbarThickness():a-=this.getScrollbarThickness();return new Rect$$module$build$src$core$utils$rect(b,c,d,a)}getScrollbarThickness(){return Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness/this.workspace.scale}renderTail(){const a=[];var b=this.size.width/\n2,c=this.size.height/2,d=-this.relativeLeft,e=-this.relativeTop;if(b===d&&c===e)a.push(\"M \"+b+\",\"+c);else{e-=c;d-=b;this.workspace.RTL&&(d*=-1);var f=Math.sqrt(e*e+d*d),g=Math.acos(d/f);e<0&&(g=2*Math.PI-g);var h=g+Math.PI/2;h>Math.PI*2&&(h-=Math.PI*2);var k=Math.sin(h);const m=Math.cos(h);let n=(this.size.width+this.size.height)/_a$$module$build$src$core$bubbles$bubble.TAIL_THICKNESS;n=Math.min(n,this.size.width,this.size.height)/4;h=1-_a$$module$build$src$core$bubbles$bubble.ANCHOR_RADIUS/f;d=b+\nh*d;e=c+h*e;h=b+n*m;const p=c+n*k;b-=n*m;c-=n*k;k=toRadians$$module$build$src$core$utils$math(this.workspace.RTL?-_a$$module$build$src$core$bubbles$bubble.TAIL_ANGLE:_a$$module$build$src$core$bubbles$bubble.TAIL_ANGLE);k=g+k;k>Math.PI*2&&(k-=Math.PI*2);g=Math.sin(k)*f/_a$$module$build$src$core$bubbles$bubble.TAIL_BEND;f=Math.cos(k)*f/_a$$module$build$src$core$bubbles$bubble.TAIL_BEND;a.push(\"M\"+h+\",\"+p);a.push(\"C\"+(h+f)+\",\"+(p+g)+\" \"+d+\",\"+e+\" \"+d+\",\"+e);a.push(\"C\"+d+\",\"+e+\" \"+(b+f)+\",\"+(c+g)+\" \"+\nb+\",\"+c)}a.push(\"z\");let l;(l=this.tail)==null||l.setAttribute(\"d\",a.join(\" \"))}bringToFront(){let a;const b=(a=this.svgRoot)==null?void 0:a.parentNode;return this.svgRoot&&(b==null?void 0:b.lastChild)!==this.svgRoot?(b==null||b.appendChild(this.svgRoot),!0):!1}getRelativeToSurfaceXY(){return new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.relativeLeft+this.anchor.x-this.size.width:this.anchor.x+this.relativeLeft,this.anchor.y+this.relativeTop)}getSvgRoot(){return this.svgRoot}moveDuringDrag(a){this.moveTo(a.x,\na.y);this.relativeLeft=this.workspace.RTL?this.anchor.x-a.x-this.size.width:a.x-this.anchor.x;this.relativeTop=a.y-this.anchor.y;this.renderTail()}setDragging(a){}setDeleteStyle(a){}isDeletable(){return!1}showContextMenu(a){}isMovable(){return!0}startDrag(){this.dragStrategy.startDrag()}drag(a){this.dragStrategy.drag(a)}endDrag(){this.dragStrategy.endDrag()}revertDrag(){this.dragStrategy.revertDrag()}select(){fireSelectedEvent$$module$build$src$core$common(this)}unselect(){fireSelectedEvent$$module$build$src$core$common(null)}getFocusableElement(){return this.focusableElement}getFocusableTree(){return this.workspace}onNodeFocus(){this.select();\nthis.bringToFront();var a=this.getRelativeToSurfaceXY();const b=this.getSize();a=new Rect$$module$build$src$core$utils$rect(a.y,a.y+b.height,a.x,a.x+b.width);this.workspace.scrollBoundsIntoView(a)}onNodeBlur(){this.unselect()}canBeFocused(){return!0}getOwner(){return this.owner}};_a$$module$build$src$core$bubbles$bubble=Bubble$$module$build$src$core$bubbles$bubble;Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH=6;\nBubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER=_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2;Bubble$$module$build$src$core$bubbles$bubble.MIN_SIZE=_a$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER;Bubble$$module$build$src$core$bubbles$bubble.TAIL_THICKNESS=1;Bubble$$module$build$src$core$bubbles$bubble.TAIL_ANGLE=20;Bubble$$module$build$src$core$bubbles$bubble.TAIL_BEND=4;Bubble$$module$build$src$core$bubbles$bubble.ANCHOR_RADIUS=8;\nvar module$build$src$core$bubbles$bubble={};module$build$src$core$bubbles$bubble.Bubble=Bubble$$module$build$src$core$bubbles$bubble;var MiniWorkspaceBubble$$module$build$src$core$bubbles$mini_workspace_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(b,c,d);this.workspace=b;this.anchor=c;this.ownerRect=d;this.autoLayout=!0;b=new Options$$module$build$src$core$options(a);this.validateWorkspaceOptions(b);this.svgDialog=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{x:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH,y:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},\nthis.contentContainer);a.parentWorkspace=this.workspace;this.miniWorkspace=this.newWorkspaceSvg(new Options$$module$build$src$core$options(a));this.miniWorkspace.internalIsMutator=!0;a=this.miniWorkspace.createDom(\"blocklyMutatorBackground\");this.svgDialog.appendChild(a);b.languageTree&&(a.insertBefore(this.miniWorkspace.addFlyout(Svg$$module$build$src$core$utils$svg.G),this.miniWorkspace.getCanvas()),a=this.miniWorkspace.getFlyout(),a==null||a.init(this.miniWorkspace),a==null||a.show(b.languageTree));\naddClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyMiniWorkspaceBubble\");this.miniWorkspace.addChangeListener(this.onWorkspaceChange.bind(this));let e,f;(e=this.miniWorkspace.getFlyout())==null||(f=e.getWorkspace())==null||f.addChangeListener(this.onWorkspaceChange.bind(this));this.updateBubbleSize()}dispose(){this.miniWorkspace.dispose();super.dispose()}getWorkspace(){return this.miniWorkspace}addWorkspaceChangeListener(a){this.miniWorkspace.addChangeListener(a)}validateWorkspaceOptions(a){if(a.hasCategories)throw Error(\"The miniworkspace bubble does not support toolboxes with categories\");\nif(a.hasTrashcan)throw Error(\"The miniworkspace bubble does not support trashcans\");if(a.zoomOptions.controls||a.zoomOptions.wheel||a.zoomOptions.pinch)throw Error(\"The miniworkspace bubble does not support zooming\");if(a.moveOptions.scrollbars||a.moveOptions.wheel||a.moveOptions.drag)throw Error(\"The miniworkspace bubble does not scrolling/moving the workspace\");if(a.horizontalLayout)throw Error(\"The miniworkspace bubble does not support horizontal layouts\");}onWorkspaceChange(){this.bumpBlocksIntoBounds();\nthis.updateBubbleSize()}bumpBlocksIntoBounds(){if(!this.miniWorkspace.isDragging()||this.miniWorkspace.keyboardMoveInProgress)for(const a of this.miniWorkspace.getTopBlocks(!1)){const b=a.getRelativeToSurfaceXY();b.y<20&&a.moveBy(0,20-b.y);if(a.RTL){let c=-20;const d=this.miniWorkspace.getFlyout();d&&(c-=d.getWidth());b.x>c&&a.moveBy(c-b.x,0)}else b.x<20&&a.moveBy(20-b.x,0)}}updateBubbleSize(){if(!this.miniWorkspace.isDragging()||this.miniWorkspace.keyboardMoveInProgress){this.autoLayout&&(this.autoLayout=\n!this.miniWorkspace.keyboardMoveInProgress);var a=this.getSize(),b=this.calculateWorkspaceSize();Math.abs(a.width-b.width)({kind:\"block\",type:c}))});return b}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$mutator_icon/\n2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,new Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){const a=this.sourceBlock.getSvgRoot().getBBox();return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}createRootBlock(){if(!this.sourceBlock.decompose)throw Error(\"Blocks with mutator icons must include a decompose method\");this.rootBlock=this.sourceBlock.decompose(this.miniWorkspaceBubble.getWorkspace());\nfor(var a of this.rootBlock.getDescendants(!1))a.queueRender();this.rootBlock.setMovable(!1);this.rootBlock.setDeletable(!1);let b,c,d,e;a=(e=(b=this.miniWorkspaceBubble)==null?void 0:(c=b.getWorkspace())==null?void 0:(d=c.getFlyout())==null?void 0:d.getWidth())!=null?e:0;this.rootBlock.moveBy(this.rootBlock.RTL?-(a+WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon):WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon,WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon)}addSaveConnectionsListener(){this.sourceBlock.saveConnections&&\nthis.rootBlock&&(this.saveConnectionsListener=()=>{this.sourceBlock.saveConnections&&this.rootBlock&&this.sourceBlock.saveConnections(this.rootBlock)},this.saveConnectionsListener(),this.sourceBlock.workspace.addChangeListener(this.saveConnectionsListener))}createMiniWorkspaceChangeListener(){return a=>{$.MutatorIcon$$module$build$src$core$icons$mutator_icon.isIgnorableMutatorEvent(a)||this.updateWorkspacePid||(this.updateWorkspacePid=setTimeout(()=>{this.updateWorkspacePid=null;this.recomposeSourceBlock()},\n0))}}static isIgnorableMutatorEvent(a){return a.isUiEvent||isBlockCreate$$module$build$src$core$events$predicates(a)||isBlockChange$$module$build$src$core$events$predicates(a)&&a.element===\"disabled\"}recomposeSourceBlock(){if(this.rootBlock){if(!this.sourceBlock.compose)throw Error(\"Blocks with mutator icons must include a compose method\");var a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);var b=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(this.sourceBlock);\nthis.sourceBlock.compose(this.rootBlock);var c=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(this.sourceBlock);b!==c&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\"mutation\",null,b,c));$.setGroup$$module$build$src$core$events$utils(a)}}getWorkspace(){let a;return(a=this.miniWorkspaceBubble)==null?void 0:a.getWorkspace()}};\n$.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.MUTATOR;$.MutatorIcon$$module$build$src$core$icons$mutator_icon.WEIGHT=1;var module$build$src$core$icons$mutator_icon={};module$build$src$core$icons$mutator_icon.MutatorIcon=$.MutatorIcon$$module$build$src$core$icons$mutator_icon;var allExtensions$$module$build$src$core$extensions=Object.create(null),TEST_ONLY$$module$build$src$core$extensions={allExtensions:allExtensions$$module$build$src$core$extensions};$.register$$module$build$src$core$extensions(\"parent_tooltip_when_inline\",extensionParentTooltip$$module$build$src$core$extensions);var module$build$src$core$extensions={TEST_ONLY:TEST_ONLY$$module$build$src$core$extensions};module$build$src$core$extensions.apply=apply$$module$build$src$core$extensions;\nmodule$build$src$core$extensions.buildTooltipForDropdown=$.buildTooltipForDropdown$$module$build$src$core$extensions;module$build$src$core$extensions.buildTooltipWithFieldText=$.buildTooltipWithFieldText$$module$build$src$core$extensions;module$build$src$core$extensions.isRegistered=isRegistered$$module$build$src$core$extensions;module$build$src$core$extensions.register=$.register$$module$build$src$core$extensions;module$build$src$core$extensions.registerMixin=$.registerMixin$$module$build$src$core$extensions;\nmodule$build$src$core$extensions.registerMutator=$.registerMutator$$module$build$src$core$extensions;module$build$src$core$extensions.runAfterPageLoad=runAfterPageLoad$$module$build$src$core$extensions;module$build$src$core$extensions.unregister=unregister$$module$build$src$core$extensions;var KeyCodes$$module$build$src$core$utils$keycodes;\n(function(a){a[a.WIN_KEY_FF_LINUX=0]=\"WIN_KEY_FF_LINUX\";a[a.MAC_ENTER=3]=\"MAC_ENTER\";a[a.BACKSPACE=8]=\"BACKSPACE\";a[a.TAB=9]=\"TAB\";a[a.NUM_CENTER=12]=\"NUM_CENTER\";a[a.ENTER=13]=\"ENTER\";a[a.SHIFT=16]=\"SHIFT\";a[a.CTRL=17]=\"CTRL\";a[a.ALT=18]=\"ALT\";a[a.PAUSE=19]=\"PAUSE\";a[a.CAPS_LOCK=20]=\"CAPS_LOCK\";a[a.ESC=27]=\"ESC\";a[a.SPACE=32]=\"SPACE\";a[a.PAGE_UP=33]=\"PAGE_UP\";a[a.PAGE_DOWN=34]=\"PAGE_DOWN\";a[a.END=35]=\"END\";a[a.HOME=36]=\"HOME\";a[a.LEFT=37]=\"LEFT\";a[a.UP=38]=\"UP\";a[a.RIGHT=39]=\"RIGHT\";a[a.DOWN=40]=\n\"DOWN\";a[a.PLUS_SIGN=43]=\"PLUS_SIGN\";a[a.PRINT_SCREEN=44]=\"PRINT_SCREEN\";a[a.INSERT=45]=\"INSERT\";a[a.DELETE=46]=\"DELETE\";a[a.ZERO=48]=\"ZERO\";a[a.ONE=49]=\"ONE\";a[a.TWO=50]=\"TWO\";a[a.THREE=51]=\"THREE\";a[a.FOUR=52]=\"FOUR\";a[a.FIVE=53]=\"FIVE\";a[a.SIX=54]=\"SIX\";a[a.SEVEN=55]=\"SEVEN\";a[a.EIGHT=56]=\"EIGHT\";a[a.NINE=57]=\"NINE\";a[a.FF_SEMICOLON=59]=\"FF_SEMICOLON\";a[a.FF_EQUALS=61]=\"FF_EQUALS\";a[a.FF_DASH=173]=\"FF_DASH\";a[a.FF_HASH=163]=\"FF_HASH\";a[a.QUESTION_MARK=63]=\"QUESTION_MARK\";a[a.AT_SIGN=64]=\"AT_SIGN\";\na[a.A=65]=\"A\";a[a.B=66]=\"B\";a[a.C=67]=\"C\";a[a.D=68]=\"D\";a[a.E=69]=\"E\";a[a.F=70]=\"F\";a[a.G=71]=\"G\";a[a.H=72]=\"H\";a[a.I=73]=\"I\";a[a.J=74]=\"J\";a[a.K=75]=\"K\";a[a.L=76]=\"L\";a[a.M=77]=\"M\";a[a.N=78]=\"N\";a[a.O=79]=\"O\";a[a.P=80]=\"P\";a[a.Q=81]=\"Q\";a[a.R=82]=\"R\";a[a.S=83]=\"S\";a[a.T=84]=\"T\";a[a.U=85]=\"U\";a[a.V=86]=\"V\";a[a.W=87]=\"W\";a[a.X=88]=\"X\";a[a.Y=89]=\"Y\";a[a.Z=90]=\"Z\";a[a.META=91]=\"META\";a[a.WIN_KEY_RIGHT=92]=\"WIN_KEY_RIGHT\";a[a.CONTEXT_MENU=93]=\"CONTEXT_MENU\";a[a.NUM_ZERO=96]=\"NUM_ZERO\";a[a.NUM_ONE=97]=\n\"NUM_ONE\";a[a.NUM_TWO=98]=\"NUM_TWO\";a[a.NUM_THREE=99]=\"NUM_THREE\";a[a.NUM_FOUR=100]=\"NUM_FOUR\";a[a.NUM_FIVE=101]=\"NUM_FIVE\";a[a.NUM_SIX=102]=\"NUM_SIX\";a[a.NUM_SEVEN=103]=\"NUM_SEVEN\";a[a.NUM_EIGHT=104]=\"NUM_EIGHT\";a[a.NUM_NINE=105]=\"NUM_NINE\";a[a.NUM_MULTIPLY=106]=\"NUM_MULTIPLY\";a[a.NUM_PLUS=107]=\"NUM_PLUS\";a[a.NUM_MINUS=109]=\"NUM_MINUS\";a[a.NUM_PERIOD=110]=\"NUM_PERIOD\";a[a.NUM_DIVISION=111]=\"NUM_DIVISION\";a[a.F1=112]=\"F1\";a[a.F2=113]=\"F2\";a[a.F3=114]=\"F3\";a[a.F4=115]=\"F4\";a[a.F5=116]=\"F5\";a[a.F6=\n117]=\"F6\";a[a.F7=118]=\"F7\";a[a.F8=119]=\"F8\";a[a.F9=120]=\"F9\";a[a.F10=121]=\"F10\";a[a.F11=122]=\"F11\";a[a.F12=123]=\"F12\";a[a.NUMLOCK=144]=\"NUMLOCK\";a[a.SCROLL_LOCK=145]=\"SCROLL_LOCK\";a[a.FIRST_MEDIA_KEY=166]=\"FIRST_MEDIA_KEY\";a[a.LAST_MEDIA_KEY=183]=\"LAST_MEDIA_KEY\";a[a.SEMICOLON=186]=\"SEMICOLON\";a[a.DASH=189]=\"DASH\";a[a.EQUALS=187]=\"EQUALS\";a[a.COMMA=188]=\"COMMA\";a[a.PERIOD=190]=\"PERIOD\";a[a.SLASH=191]=\"SLASH\";a[a.APOSTROPHE=192]=\"APOSTROPHE\";a[a.TILDE=192]=\"TILDE\";a[a.SINGLE_QUOTE=222]=\"SINGLE_QUOTE\";\na[a.OPEN_SQUARE_BRACKET=219]=\"OPEN_SQUARE_BRACKET\";a[a.BACKSLASH=220]=\"BACKSLASH\";a[a.CLOSE_SQUARE_BRACKET=221]=\"CLOSE_SQUARE_BRACKET\";a[a.WIN_KEY=224]=\"WIN_KEY\";a[a.MAC_FF_META=224]=\"MAC_FF_META\";a[a.MAC_WK_CMD_LEFT=91]=\"MAC_WK_CMD_LEFT\";a[a.MAC_WK_CMD_RIGHT=93]=\"MAC_WK_CMD_RIGHT\";a[a.WIN_IME=229]=\"WIN_IME\";a[a.VK_NONAME=252]=\"VK_NONAME\";a[a.PHANTOM=255]=\"PHANTOM\"})(KeyCodes$$module$build$src$core$utils$keycodes||(KeyCodes$$module$build$src$core$utils$keycodes={}));\nvar module$build$src$core$utils$keycodes={};module$build$src$core$utils$keycodes.KeyCodes=KeyCodes$$module$build$src$core$utils$keycodes;var module$build$src$core$utils$svg_paths={};module$build$src$core$utils$svg_paths.arc=arc$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.curve=curve$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.line=line$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.lineOnAxis=lineOnAxis$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.lineTo=lineTo$$module$build$src$core$utils$svg_paths;\nmodule$build$src$core$utils$svg_paths.moveBy=moveBy$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.moveTo=moveTo$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.point=point$$module$build$src$core$utils$svg_paths;var module$build$src$core$utils={};module$build$src$core$utils.Coordinate=Coordinate$$module$build$src$core$utils$coordinate;module$build$src$core$utils.KeyCodes=KeyCodes$$module$build$src$core$utils$keycodes;module$build$src$core$utils.Rect=Rect$$module$build$src$core$utils$rect;module$build$src$core$utils.Size=Size$$module$build$src$core$utils$size;module$build$src$core$utils.Svg=Svg$$module$build$src$core$utils$svg;module$build$src$core$utils.aria=module$build$src$core$utils$aria;\nmodule$build$src$core$utils.array=module$build$src$core$utils$array;module$build$src$core$utils.browserEvents=module$build$src$core$browser_events;module$build$src$core$utils.colour=module$build$src$core$utils$colour;module$build$src$core$utils.deprecation=module$build$src$core$utils$deprecation;module$build$src$core$utils.dom=module$build$src$core$utils$dom;module$build$src$core$utils.extensions=module$build$src$core$extensions;module$build$src$core$utils.idGenerator=module$build$src$core$utils$idgenerator;\nmodule$build$src$core$utils.math=module$build$src$core$utils$math;module$build$src$core$utils.object=module$build$src$core$utils$object;module$build$src$core$utils.parsing=module$build$src$core$utils$parsing;module$build$src$core$utils.string=module$build$src$core$utils$string;module$build$src$core$utils.style=module$build$src$core$utils$style;module$build$src$core$utils.svgMath=module$build$src$core$utils$svg_math;module$build$src$core$utils.svgPaths=module$build$src$core$utils$svg_paths;\nmodule$build$src$core$utils.toolbox=module$build$src$core$utils$toolbox;module$build$src$core$utils.userAgent=module$build$src$core$utils$useragent;module$build$src$core$utils.xml=module$build$src$core$utils$xml;var TextInputBubble$$module$build$src$core$bubbles$textinput_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(a,b,c,void 0,d);this.workspace=a;this.anchor=b;this.ownerRect=c;this.owner=d;this.resizePointerMoveListener=this.resizePointerUpListener=null;this.sizeChangeListeners=[];this.locationChangeListeners=[];this.DEFAULT_SIZE=new Size$$module$build$src$core$utils$size(160+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,80+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER);\nthis.MIN_SIZE=new Size$$module$build$src$core$utils$size(45+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,20+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER);this.editable=!0;addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyTextInputBubble\");this.editor=new CommentEditor$$module$build$src$core$comments$comment_editor(a,this.id,()=>{$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this)});this.contentContainer.appendChild(this.editor.getDom());\nthis.resizeGroup=this.createResizeHandle(this.svgRoot,a);this.setSize(this.DEFAULT_SIZE,!0)}getText(){return this.editor.getText()}setText(a){this.editor.setText(a)}setEditable(a){this.editable=a;this.editor.setEditable(a)}isEditable(){return this.editable}addTextChangeListener(a){this.editor.addTextChangeListener(a)}addSizeChangeListener(a){this.sizeChangeListeners.push(a)}addLocationChangeListener(a){this.locationChangeListeners.push(a)}createResizeHandle(a,b){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,\n{\"class\":\"blocklyResizeHandle\",href:`${b.options.pathToMedia}resize-handle.svg`},a);conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onResizePointerDown);return a}setSize(a,b=!1){a.width=Math.max(a.width,this.MIN_SIZE.width);a.height=Math.max(a.height,this.MIN_SIZE.height);const c=a.width-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,d=a.height-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER;this.editor.updateSize(new Size$$module$build$src$core$utils$size(c,\nd),new Size$$module$build$src$core$utils$size(0,0));this.editor.getDom().setAttribute(\"x\",`${Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER/2}`);this.editor.getDom().setAttribute(\"y\",`${Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER/2}`);this.resizeGroup.setAttribute(\"y\",`${d}`);this.workspace.RTL?this.resizeGroup.setAttribute(\"x\",`${-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER}`):this.resizeGroup.setAttribute(\"x\",`${c}`);super.setSize(a,b);this.onSizeChange()}getSize(){return super.getSize()}moveDuringDrag(a){super.moveDuringDrag(a);\nthis.onLocationChange()}setPositionRelativeToAnchor(a,b){super.setPositionRelativeToAnchor(a,b);this.onLocationChange()}positionByRect(a=new Rect$$module$build$src$core$utils$rect(0,0,0,0)){super.positionByRect(a);this.onLocationChange()}onResizePointerDown(a){this.bringToFront();isRightButton$$module$build$src$core$browser_events(a)||(start$$module$build$src$core$utils$drag(this.workspace,a,new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.getSize().width:this.getSize().width,\nthis.getSize().height)),this.resizePointerUpListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onResizePointerUp),this.resizePointerMoveListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",this,this.onResizePointerMove),this.workspace.hideChaff());a.stopPropagation()}onResizePointerUp(a){clearTouchIdentifier$$module$build$src$core$touch();this.resizePointerUpListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerUpListener),\nthis.resizePointerUpListener=null);this.resizePointerMoveListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerMoveListener),this.resizePointerMoveListener=null)}onResizePointerMove(a){a=move$$module$build$src$core$utils$drag(this.workspace,a);this.setSize(new Size$$module$build$src$core$utils$size(this.workspace.RTL?-a.x:a.x,a.y),!1);this.onSizeChange()}onSizeChange(){for(const a of this.sizeChangeListeners)a()}onLocationChange(){for(const a of this.locationChangeListeners)a()}getEditor(){return this.editor}};\nregister$$module$build$src$core$css(\"\\n.blocklyTextInputBubble .blocklyTextarea {\\n background-color: var(--commentFillColour);\\n border: 0;\\n box-sizing: border-box;\\n display: block;\\n outline: 0;\\n padding: 5px;\\n resize: none;\\n width: 100%;\\n height: 100%;\\n}\\n\");var module$build$src$core$bubbles$textinput_bubble={};module$build$src$core$bubbles$textinput_bubble.TextInputBubble=TextInputBubble$$module$build$src$core$bubbles$textinput_bubble;var ConnectionType$$module$build$src$core$connection_type;(function(a){a[a.INPUT_VALUE=1]=\"INPUT_VALUE\";a[a.OUTPUT_VALUE=2]=\"OUTPUT_VALUE\";a[a.NEXT_STATEMENT=3]=\"NEXT_STATEMENT\";a[a.PREVIOUS_STATEMENT=4]=\"PREVIOUS_STATEMENT\"})(ConnectionType$$module$build$src$core$connection_type||(ConnectionType$$module$build$src$core$connection_type={}));var module$build$src$core$connection_type={};module$build$src$core$connection_type.ConnectionType=ConnectionType$$module$build$src$core$connection_type;var ConnectionDB$$module$build$src$core$connection_db=class{constructor(a){this.connectionChecker=a;this.connections=[]}addConnection(a,b){b=this.calculateIndexForYPos(b);this.connections.splice(b,0,a)}findIndexOfConnection(a,b){if(!this.connections.length)return-1;const c=this.calculateIndexForYPos(b);if(c>=this.connections.length)return-1;b=a.y;let d=c;for(;d>=0&&this.connections[d].y===b;){if(this.connections[d]===a)return d;d--}for(d=c;da)c=d;else{b=d;break}}return b}removeConnection(a,b){a=this.findIndexOfConnection(a,b);if(a===-1)throw Error(\"Unable to find connection in connectionDB.\");this.connections.splice(a,1)}getNeighbours(a,b){function c(l){const m=e-d[l].x,n=f-d[l].y;Math.sqrt(m*m+n*n)<=b&&k.push(d[l]);\nreturn n=0&&c(a);)a--;do g++;while(g=0&&this.isInYRange(k,a.y,b);)h=this.connections[k],\nthis.connectionChecker.canConnect(a,h,!0,g)&&(c=h,g=h.distanceFrom(a)),k--;for(;fthis.fieldRow.length)throw Error(\"index \"+a+\" out of bounds.\");if(!(b||\nb===\"\"&&c))return a;typeof b===\"string\"&&(b=$.fromJson$$module$build$src$core$field_registry({type:\"field_label\",text:b}));b.setSourceBlock(this.sourceBlock);this.sourceBlock.initialized&&this.initField(b);b.name=c;b.setVisible(this.isVisible());b.prefixField&&(a=this.insertFieldAt(a,b.prefixField));this.fieldRow.splice(a,0,b);a++;b.suffixField&&(a=this.insertFieldAt(a,b.suffixField));this.sourceBlock.rendered&&this.sourceBlock.queueRender();return a}removeField(a,b){for(let c=0,d;d=this.fieldRow[c];c++)if(d.name===\na)return d.dispose(),this.fieldRow.splice(c,1),this.sourceBlock.rendered&&this.sourceBlock.queueRender(),!0;if(b)return!1;throw Error('Field \"'+a+'\" not found.');}isVisible(){return this.visible}setVisible(a){let b=[];if(this.visible===a)return b;this.visible=a;for(let c=0,d;d=this.fieldRow[c];c++)d.setVisible(a);if(this.connection&&this.connection instanceof RenderedConnection$$module$build$src$core$rendered_connection){a?b=this.connection.startTrackingAll():this.connection.stopTrackingAll();const c=\nthis.connection.targetBlock();c&&(c.getSvgRoot().style.display=a?\"block\":\"none\")}return b}markDirty(){for(let a=0,b;b=this.fieldRow[a];a++)b.markDirty()}setCheck(a){if(!this.connection)throw Error(\"This input does not have a connection.\");this.connection.setCheck(a);return this}setAlign(a){this.align=a;this.sourceBlock.rendered&&this.sourceBlock.queueRender();return this}setShadowDom(a){if(!this.connection)throw Error(\"This input does not have a connection.\");this.connection.setShadowDom(a);return this}getShadowDom(){if(!this.connection)throw Error(\"This input does not have a connection.\");\nreturn this.connection.getShadowDom()}init(){for(const a of this.fieldRow)a.init()}initModel(){for(const a of this.fieldRow)a.initModel()}initField(a){this.sourceBlock.rendered?a.init():a.initModel()}dispose(){for(let a=0,b;b=this.fieldRow[a];a++)b.dispose();this.connection&&this.connection.dispose()}makeConnection(a){return this.sourceBlock.makeConnection_(a)}},module$build$src$core$inputs$input={};module$build$src$core$inputs$input.Input=Input$$module$build$src$core$inputs$input;var DummyInput$$module$build$src$core$inputs$dummy_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.DUMMY}},module$build$src$core$inputs$dummy_input={};module$build$src$core$inputs$dummy_input.DummyInput=DummyInput$$module$build$src$core$inputs$dummy_input;var EndRowInput$$module$build$src$core$inputs$end_row_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.END_ROW}},module$build$src$core$inputs$end_row_input={};module$build$src$core$inputs$end_row_input.EndRowInput=EndRowInput$$module$build$src$core$inputs$end_row_input;var StatementInput$$module$build$src$core$inputs$statement_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){if(!a)throw Error(\"Statement inputs must have a non-empty name\");super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.STATEMENT;this.connection=this.makeConnection(ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT)}},module$build$src$core$inputs$statement_input={};\nmodule$build$src$core$inputs$statement_input.StatementInput=StatementInput$$module$build$src$core$inputs$statement_input;var module$build$src$core$inputs$value_input;$.ValueInput$$module$build$src$core$inputs$value_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){if(!a)throw Error(\"Value inputs must have a non-empty name\");super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.VALUE;this.connection=this.makeConnection(ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE)}};module$build$src$core$inputs$value_input={};\nmodule$build$src$core$inputs$value_input.ValueInput=$.ValueInput$$module$build$src$core$inputs$value_input;var module$build$src$core$interfaces$i_icon={};module$build$src$core$interfaces$i_icon.isIcon=isIcon$$module$build$src$core$interfaces$i_icon;var module$build$src$core$interfaces$i_comment_icon={};module$build$src$core$interfaces$i_comment_icon.isCommentIcon=isCommentIcon$$module$build$src$core$interfaces$i_comment_icon;var Block$$module$build$src$core$block=class{constructor(a,b,c){this.data=null;this.disposed=!1;this.hue=null;this.colour_=\"#000000\";this.styleName_=\"\";this.suppressPrefixSuffix=!1;this.previousConnection=this.nextConnection=this.outputConnection=null;this.inputList=[];this.icons=[];this.disabledReasons=new Set;this.tooltip=\"\";this.contextMenu=!0;this.parentBlock_=null;this.childBlocks_=[];this.editable=this.movable=this.deletable=!0;this.collapsed_=this.shadow=!1;this.outputShape_=null;this.rendered=\nthis.isInsertionMarker_=this.initialized=this.disposing=!1;this.onchangeWrapper=this.helpUrl=null;this.statementInputCount=0;this.workspace=a;this.id=c&&!a.getBlockById(c)?c:genUid$$module$build$src$core$utils$idgenerator();a.setBlockById(this.id,this);this.xy=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.isInFlyout=a.isFlyout;this.isInMutator=a.isMutator;this.RTL=a.RTL;if(b){this.type=b;c=Blocks$$module$build$src$core$blocks[b];if(!c||typeof c!==\"object\")throw TypeError(\"Invalid block definition for type: \"+\nb);Object.assign(this,c)}a.addTopBlock(this);a.addTypedBlock(this);new.target===Block$$module$build$src$core$block&&this.doInit_()}doInit_(){const a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);const b=getRecordUndo$$module$build$src$core$events$utils();try{typeof this.init===\"function\"&&($.setRecordUndo$$module$build$src$core$events$utils(!1),this.init(),$.setRecordUndo$$module$build$src$core$events$utils(b)),isEnabled$$module$build$src$core$events$utils()&&\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(this))}finally{$.setGroup$$module$build$src$core$events$utils(a),$.setRecordUndo$$module$build$src$core$events$utils(b)}this.inputsInlineDefault=this.inputsInline;typeof this.onchange===\"function\"&&this.setOnChange(this.onchange)}dispose(a=!1){this.disposing=!0;this.onchangeWrapper&&this.workspace.removeChangeListener(this.onchangeWrapper);this.unplug(a);\nisEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DELETE))(this));this.workspace.removeTopBlock(this);this.disposeInternal()}disposeInternal(){this.disposing=!0;this.onchangeWrapper&&this.workspace.removeChangeListener(this.onchangeWrapper);this.workspace.removeTypedBlock(this);this.workspace.removeBlockById(this.id);typeof this.destroy===\"function\"&&this.destroy();\nthis.childBlocks_.forEach(a=>a.disposeInternal());this.inputList.forEach(a=>a.dispose());this.inputList.length=0;this.getConnections_(!0).forEach(a=>a.dispose());this.disposed=!0}isDeadOrDying(){return this.disposing||this.disposed}initModel(){if(!this.initialized){for(const a of this.inputList)a.initModel();this.initialized=!0}}unplug(a){this.outputConnection&&this.unplugFromRow(a);this.previousConnection&&this.unplugFromStack(a)}unplugFromRow(a){let b=null,c;if((c=this.outputConnection)==null?0:\nc.isConnected())b=this.outputConnection.targetConnection,this.outputConnection.disconnect();b&&a&&(a=this.getOnlyValueConnection())&&a.isConnected()&&!a.targetBlock().isShadow()&&(a=a.targetConnection,a==null||a.disconnect(),this.workspace.connectionChecker.canConnect(a,b,!1)?b.connect(a):a==null||a.onFailedConnect(b))}getOnlyValueConnection(){let a=null;for(let b=0;b1)return!1;return!0}getMatchingConnection(a,\nb){const c=this.getConnections_(!0);a=a.getConnections_(!0);if(c.length!==a.length)throw Error(\"Connection lists did not match in length.\");for(let d=0;d{d=d+(c===\"(\"||e===\")\"?\"\":\" \")+e;c=e[e.length-1];return d},\"\");b=b.trim()||\"???\";a&&b.length>a&&(b=b.substring(0,a-3)+\"...\");return b}toTokens(a=\"?\"){const b=[];for(const d of this.inputList)if(d.name!=COLLAPSED_INPUT_NAME$$module$build$src$core$constants){for(const e of d.fieldRow)b.push(e.getText());if(d.connection){const e=d.connection.targetBlock();if(e){var c=d.connection;let f=c.getCheck();\n!f&&c.targetConnection&&(f=c.targetConnection.getCheck());(c=!!f&&(f.includes(\"Boolean\")||f.includes(\"Number\")))&&b.push(\"(\");b.push(...e.toTokens(a));c&&b.push(\")\")}else b.push(a)}}return b}appendValueInput(a){return this.appendInput(new $.ValueInput$$module$build$src$core$inputs$value_input(a,this))}appendStatementInput(a){this.statementInputCount++;return this.appendInput(new StatementInput$$module$build$src$core$inputs$statement_input(a,this))}appendDummyInput(a=\"\"){return this.appendInput(new DummyInput$$module$build$src$core$inputs$dummy_input(a,\nthis))}appendEndRowInput(a=\"\"){return this.appendInput(new EndRowInput$$module$build$src$core$inputs$end_row_input(a,this))}appendInput(a){this.inputList.push(a);return a}appendInputFromRegistry(a,b){return(a=getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.INPUT,a,!1))?this.appendInput(new a(b,this)):null}jsonInit(a){var b=a.type?'Block \"'+a.type+'\": ':\"\";if(a.output&&a.previousStatement)throw Error(b+\"Must not have both an output and a previousStatement.\");for(var c=\n0;a[\"args\"+c];){if(a[\"message\"+c]===void 0)throw Error(b+`args${c} must have a corresponding message (message${c}).`);c++}a.style&&a.style.hat&&(this.hat=a.style.hat,a.style=null);if(a.style&&a.colour)throw Error(b+\"Must not have both a colour and a style.\");a.style?this.jsonInitStyle(a,b):this.jsonInitColour(a,b);for(c=0;a[\"message\"+c]!==void 0;)this.interpolate(a[\"message\"+c],a[\"args\"+c]||[],a[\"implicitAlign\"+c]||a[\"lastDummyAlign\"+c],b),c++;a.inputsInline!==void 0&&($.disable$$module$build$src$core$events$utils(),\nthis.setInputsInline(a.inputsInline),$.enable$$module$build$src$core$events$utils());a.output!==void 0&&this.setOutput(!0,a.output);a.outputShape!==void 0&&this.setOutputShape(a.outputShape);a.previousStatement!==void 0&&this.setPreviousStatement(!0,a.previousStatement);a.nextStatement!==void 0&&this.setNextStatement(!0,a.nextStatement);a.tooltip!==void 0&&(c=replaceMessageReferences$$module$build$src$core$utils$parsing(a.tooltip),this.setTooltip(c));a.enableContextMenu!==void 0&&(this.contextMenu=\n!!a.enableContextMenu);a.suppressPrefixSuffix!==void 0&&(this.suppressPrefixSuffix=!!a.suppressPrefixSuffix);a.helpUrl!==void 0&&(c=replaceMessageReferences$$module$build$src$core$utils$parsing(a.helpUrl),this.setHelpUrl(c));typeof a.extensions===\"string\"&&(console.warn(b+\"JSON attribute 'extensions' should be an array of strings. Found raw string in JSON for '\"+a.type+\"' block.\"),a.extensions=[a.extensions]);a.mutator!==void 0&&apply$$module$build$src$core$extensions(a.mutator,this,!0);a=a.extensions;\nif(Array.isArray(a))for(b=0;bb)throw Error('Block \"'+this.type+'\": Message index %'+f+\" out of range.\");if(c[f])throw Error('Block \"'+this.type+'\": Message index %'+f+\" duplicated.\");c[f]=!0;d++}}if(d!==b)throw Error('Block \"'+this.type+'\": Message does not reference all '+b+\" arg(s).\");}interpolateArguments(a,b,c){const d=[];for(let f=0;f=this.inputList.length)throw RangeError(\"Input index \"+a+\" out of bounds.\");if(b>this.inputList.length)throw RangeError(\"Reference input \"+b+\" out of bounds.\");const c=this.inputList[a];this.inputList.splice(a,1);ab.getWeight()-c.getWeight());return a}removeIcon(a){if(!this.hasIcon(a))return!1;let b;(b=this.getIcon(a))==null||b.dispose();this.icons=this.icons.filter(c=>!c.getType().equals(a));return!0}hasIcon(a){return this.icons.some(b=>b.getType().equals(a))}getIcon(a){return a instanceof IconType$$module$build$src$core$icons$icon_types?\nthis.icons.find(b=>b.getType().equals(a)):this.icons.find(b=>b.getType().toString()===a)}getIcons(){return[...this.icons]}getRelativeToSurfaceXY(){return this.xy}moveBy(a,b,c){if(this.parentBlock_)throw Error(\"Block has parent\");const d=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this);c&&d.setReason(c);this.xy.translate(a,b);d.recordNew();fire$$module$build$src$core$events$utils(d)}makeConnection_(a){return new Connection$$module$build$src$core$connection(this,\na)}allInputsFilled(a){a===void 0&&(a=!0);if(!a&&this.isShadow())return!1;for(let c=0,d;d=this.inputList[c];c++)if(d.connection){var b=d.connection.targetBlock();if(!b||!b.allInputsFilled(a))return!1}return(b=this.getNextBlock())?b.allInputsFilled(a):!0}toDevString(){let a=this.type?'\"'+this.type+'\" block':\"Block\";this.id&&(a+=' (id=\"'+this.id+'\")');return a}};Block$$module$build$src$core$block.COLLAPSED_INPUT_NAME=COLLAPSED_INPUT_NAME$$module$build$src$core$constants;\nBlock$$module$build$src$core$block.COLLAPSED_FIELD_NAME=COLLAPSED_FIELD_NAME$$module$build$src$core$constants;var module$build$src$core$block={};module$build$src$core$block.Block=Block$$module$build$src$core$block;var disconnectPid$$module$build$src$core$block_animations=null,wobblingBlock$$module$build$src$core$block_animations=null,module$build$src$core$block_animations={};module$build$src$core$block_animations.connectionUiEffect=connectionUiEffect$$module$build$src$core$block_animations;module$build$src$core$block_animations.disconnectUiEffect=disconnectUiEffect$$module$build$src$core$block_animations;module$build$src$core$block_animations.disconnectUiStop=disconnectUiStop$$module$build$src$core$block_animations;\nmodule$build$src$core$block_animations.disposeUiEffect=disposeUiEffect$$module$build$src$core$block_animations;var BlockPaster$$module$build$src$core$clipboard$block_paster=class{paste(a,b,c){if(!b.isCapacityAvailable(a.typeCounts))return null;c&&(a.blockState.x=c.x,a.blockState.y=c.y);c=c||new Coordinate$$module$build$src$core$utils$coordinate(a.blockState.x||0,a.blockState.y||0);$.disable$$module$build$src$core$events$utils();let d;try{d=append$$module$build$src$core$serialization$blocks(a.blockState,b),moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster(d,c)}finally{$.enable$$module$build$src$core$events$utils()}if(!d)return d;\nisEnabled$$module$build$src$core$events$utils()&&!d.isShadow()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(d));const e=d;finishQueuedRenders$$module$build$src$core$render_management().then(()=>$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e));return d}};BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE=\"block\";\nregister$$module$build$src$core$clipboard$registry(BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE,new BlockPaster$$module$build$src$core$clipboard$block_paster);var module$build$src$core$clipboard$block_paster={};module$build$src$core$clipboard$block_paster.BlockPaster=BlockPaster$$module$build$src$core$clipboard$block_paster;module$build$src$core$clipboard$block_paster.moveBlockToNotConflict=moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster;var bumpIntoBounds$$module$build$src$core$bump_objects=bumpObjectIntoBounds$$module$build$src$core$bump_objects,module$build$src$core$bump_objects={};module$build$src$core$bump_objects.bumpIntoBounds=bumpObjectIntoBounds$$module$build$src$core$bump_objects;module$build$src$core$bump_objects.bumpIntoBoundsHandler=bumpIntoBoundsHandler$$module$build$src$core$bump_objects;module$build$src$core$bump_objects.bumpTopObjectsIntoBounds=bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects;var BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy=class{constructor(a){this.block=a;this.connectionPreviewer=this.connectionCandidate=this.startLoc=this.startChildConn=this.startParentConn=null;this.dragging=!1;this.dragOffset=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.originalEventGroup=\"\";this.workspace=a.workspace}isMovable(){if(this.block.isShadow()){let a,b;return(b=(a=this.block.getParent())==null?void 0:a.isMovable())!=null?b:!1}return this.block.isOwnMovable()&&\n!this.block.isDeadOrDying()&&!this.workspace.isReadOnly()&&!this.block.isInFlyout}startDrag(a){if(this.block.isShadow())this.startDraggingShadow(a);else{this.dragging=!0;this.fireDragStartEvent();this.startLoc=this.block.getRelativeToSurfaceXY();this.connectionCandidate=null;this.connectionPreviewer=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_PREVIEWER,this.workspace.options))(this.block);startTextWidthCache$$module$build$src$core$utils$dom();\nthis.workspace.setResizesEnabled(!1);disconnectUiStop$$module$build$src$core$block_animations();a=this.shouldHealStack(a);this.shouldDisconnect(a)&&this.disconnectBlock(a);this.block.setDragging(!0);var b;(b=this.workspace.getLayerManager())==null||b.moveToDragLayer(this.block)}}shouldHealStack(a){return!!a&&(a.altKey||a.ctrlKey||a.metaKey)}startDraggingShadow(a){const b=this.block.getParent();if(!b)throw Error(\"Tried to drag a shadow block with no parent. Shadow blocks should always have parents.\");\nthis.dragOffset=Coordinate$$module$build$src$core$utils$coordinate.difference(b.getRelativeToSurfaceXY(),this.block.getRelativeToSurfaceXY());b.startDrag(a)}shouldDisconnect(a){return!!(this.block.getParent()||a&&this.block.nextConnection&&this.block.nextConnection.targetBlock())}disconnectBlock(a){let b,c,d;this.startParentConn=(d=(b=this.block.outputConnection)==null?void 0:b.targetConnection)!=null?d:(c=this.block.previousConnection)==null?void 0:c.targetConnection;if(a){let e;this.startChildConn=\n(e=this.block.nextConnection)==null?void 0:e.targetConnection}this.block.unplug(a);disconnectUiEffect$$module$build$src$core$block_animations(this.block)}fireDragStartEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DRAG))(this.block,!0,this.block.getDescendants(!1));fire$$module$build$src$core$events$utils(a)}fireDragEndEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DRAG))(this.block,\n!1,this.block.getDescendants(!1));fire$$module$build$src$core$events$utils(a)}fireMoveEvent(){if(!this.block.isDeadOrDying()){var a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this.block);a.setReason([\"drag\"]);a.oldCoordinate=this.startLoc;a.recordNew();fire$$module$build$src$core$events$utils(a)}}drag(a){if(this.block.isShadow()){let b;(b=this.block.getParent())==null||b.drag(Coordinate$$module$build$src$core$utils$coordinate.sum(a,this.dragOffset))}else this.block.moveDuringDrag(a),\nthis.updateConnectionPreview(this.block,Coordinate$$module$build$src$core$utils$coordinate.difference(a,this.startLoc))}updateConnectionPreview(a,b){var c=this.connectionCandidate;const d=this.getConnectionCandidate(a,b);if(d){this.connectionCandidate=b=c&&this.currCandidateIsBetter(c,b,d)?c:d;var {local:e,neighbour:f}=b;b=e.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE||e.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT;var g;c=f.isConnected()&&\n!((g=f.targetBlock())==null?0:g.isInsertionMarker());if(b&&c&&!this.orphanCanConnectAtEnd(a,f.targetBlock(),e.type)){let k;(k=this.connectionPreviewer)==null||k.previewReplacement(e,f,f.targetBlock())}else{var h;(h=this.connectionPreviewer)==null||h.previewConnection(e,f)}}else{let k;(k=this.connectionPreviewer)==null||k.hidePreview();this.connectionCandidate=null}}orphanCanConnectAtEnd(a,b,c){return!!Connection$$module$build$src$core$connection.getConnectionForOrphanedConnection(a,c===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE?\nb.outputConnection:b.previousConnection)}currCandidateIsBetter(a,b,c){const {local:d,neighbour:e}=a;a=new Coordinate$$module$build$src$core$utils$coordinate(d.x,d.y);const f=new Coordinate$$module$build$src$core$utils$coordinate(e.x,e.y);b=Coordinate$$module$build$src$core$utils$coordinate.distance(Coordinate$$module$build$src$core$utils$coordinate.sum(a,b),f);return c.distance>b-$.config$$module$build$src$core$config.currentConnectionPreference}getConnectionCandidate(a,b){a=this.getLocalConnections(a);\nlet c=this.getSearchRadius(),d=null;for(const e of a){const {connection:f,radius:g}=e.closest(c,b);f&&(d={local:e,neighbour:f,distance:g},c=g)}return d}getSearchRadius(){return this.connectionCandidate?$.config$$module$build$src$core$config.connectingSnapRadius:$.config$$module$build$src$core$config.snapRadius}getLocalConnections(a){const b=a.getConnections_(!1),c=a.lastConnectionInStack(!0);c&&c!==a.nextConnection&&b.push(c);return b}endDrag(a){if(this.block.isShadow()){let c;(c=this.block.getParent())==\nnull||c.endDrag(a)}else{this.originalEventGroup=$.getGroup$$module$build$src$core$events$utils();this.fireDragEndEvent();this.fireMoveEvent();stopTextWidthCache$$module$build$src$core$utils$dom();disconnectUiStop$$module$build$src$core$block_animations();var b;(b=this.connectionPreviewer)==null||b.hidePreview();if(!this.block.isDeadOrDying()&&this.dragging){let c;(c=this.workspace.getLayerManager())==null||c.moveOffDragLayer(this.block,BLOCK$$module$build$src$core$layers);this.block.setDragging(!1)}this.connectionCandidate?\n(this.applyConnections(this.connectionCandidate),this.disposeStep()):this.block.queueRender().then(()=>this.disposeStep())}}disposeStep(){const a=$.getGroup$$module$build$src$core$events$utils();$.setGroup$$module$build$src$core$events$utils(this.originalEventGroup);this.block.snapToGrid();let b;(b=this.connectionPreviewer)==null||b.dispose();this.workspace.setResizesEnabled(!0);$.setGroup$$module$build$src$core$events$utils(a)}applyConnections(a){const {local:b,neighbour:c}=a;b.connect(c);const d=\nb.isSuperior()?c:b,e=this.block.getRootBlock();finishQueuedRenders$$module$build$src$core$render_management().then(()=>{connectionUiEffect$$module$build$src$core$block_animations(d.getSourceBlock());setTimeout(()=>{e.bringToFront()},0)})}revertDrag(){if(this.block.isShadow()){let c;(c=this.block.getParent())==null||c.revertDrag()}else{var a;(a=this.connectionPreviewer)==null||a.hidePreview();this.connectionCandidate=null;var b;(b=this.startChildConn)==null||b.connect(this.block.nextConnection);if(this.startParentConn)switch(this.startParentConn.type){case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:this.startParentConn.connect(this.block.outputConnection);\nbreak;case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:this.startParentConn.connect(this.block.previousConnection)}else{this.block.moveTo(this.startLoc,[\"drag\"]);let c;(c=this.workspace.getLayerManager())==null||c.moveOffDragLayer(this.block,BLOCK$$module$build$src$core$layers);bumpObjectIntoBounds$$module$build$src$core$bump_objects(this.workspace,this.workspace.getMetricsManager().getScrollMetrics(!0),this.block)}this.startParentConn=this.startChildConn=null;this.block.setDragging(!1);\nthis.dragging=!1}}},module$build$src$core$dragging$block_drag_strategy={};module$build$src$core$dragging$block_drag_strategy.BlockDragStrategy=BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy;var TextBubble$$module$build$src$core$bubbles$text_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(b,c,d);this.text=a;this.workspace=b;this.anchor=c;this.ownerRect=d;this.paragraph=this.stringToSvg(a,this.contentContainer);this.updateBubbleSize();addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyTextBubble\")}getText(){return this.text}setText(a){this.text=a;removeNode$$module$build$src$core$utils$dom(this.paragraph);this.paragraph=this.stringToSvg(a,\nthis.contentContainer);this.updateBubbleSize()}stringToSvg(a,b){b=this.createParagraph(b);a=this.createTextFragments(b,a);this.workspace.RTL&&this.rightAlignTextFragments(b.getBBox().width,a);return b}createParagraph(a){return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyText blocklyBubbleText blocklyNoPointerEvents\",transform:`translate(0,${Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH})`,style:`direction: ${this.workspace.RTL?\n\"rtl\":\"ltr\"}`},a)}createTextFragments(a,b){let c=1;return b.split(\"\\n\").map(d=>{const e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,{y:`${c}em`,x:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},a);d=document.createTextNode(d);e.appendChild(d);c+=1;return e})}rightAlignTextFragments(a,b){for(const c of b)c.setAttribute(\"text-anchor\",\"start\"),c.setAttribute(\"x\",`${a+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH}`)}updateBubbleSize(){const a=\nthis.paragraph.getBBox();this.setSize(new Size$$module$build$src$core$utils$size(a.width+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2,a.height+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2),!0)}},module$build$src$core$bubbles$text_bubble={};module$build$src$core$bubbles$text_bubble.TextBubble=TextBubble$$module$build$src$core$bubbles$text_bubble;var SIZE$$module$build$src$core$icons$warning_icon=17,WarningIcon$$module$build$src$core$icons$warning_icon=class extends Icon$$module$build$src$core$icons$icon{constructor(a){super(a);this.sourceBlock=a;this.textMap=new Map;this.textBubble=null}getType(){return WarningIcon$$module$build$src$core$icons$warning_icon.TYPE}initView(a){this.svgRoot||(super.initView(a),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconShape\",d:\"M2,15Q-1,15 0.5,12L6.5,1.7Q8,-1 9.5,1.7L15.5,12Q17,15 14,15z\"},\nthis.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconSymbol\",d:\"m7,4.8v3.16l0.27,2.27h1.46l0.27,-2.27v-3.16z\"},this.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyIconSymbol\",x:\"7\",y:\"11\",height:\"2\",width:\"2\"},this.svgRoot),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyWarningIcon\"))}dispose(){super.dispose();let a;(a=this.textBubble)==null||\na.dispose()}getWeight(){return WarningIcon$$module$build$src$core$icons$warning_icon.WEIGHT}getSize(){return new Size$$module$build$src$core$utils$size(SIZE$$module$build$src$core$icons$warning_icon,SIZE$$module$build$src$core$icons$warning_icon)}applyColour(){super.applyColour();let a;(a=this.textBubble)==null||a.setColour(this.sourceBlock.getColour())}updateCollapsed(){}isShownWhenCollapsed(){return!0}onLocationChange(a){super.onLocationChange(a);let b;(b=this.textBubble)==null||b.setAnchorLocation(this.getAnchorLocation())}addMessage(a,\nb){if(this.textMap.get(b)===a)return this;a?this.textMap.set(b,a):this.textMap.delete(b);let c;(c=this.textBubble)==null||c.setText(this.getText());return this}getText(){return[...this.textMap.values()].join(\"\\n\")}onClick(){super.onClick();this.setBubbleVisible(!this.bubbleIsVisible())}isClickableInFlyout(){return!1}bubbleIsVisible(){return!!this.textBubble}setBubbleVisible(a){const b=this;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){if(b.bubbleIsVisible()!==a){yield finishQueuedRenders$$module$build$src$core$render_management();\nif(a)b.textBubble=new TextBubble$$module$build$src$core$bubbles$text_bubble(b.getText(),b.sourceBlock.workspace,b.getAnchorLocation(),b.getBubbleOwnerRect()),b.applyColour();else{let c;(c=b.textBubble)==null||c.dispose();b.textBubble=null}fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BUBBLE_OPEN))(b.sourceBlock,a,\"warning\"))}})}getBubble(){return this.textBubble}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$warning_icon/\n2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,new Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){const a=this.sourceBlock.getSvgRoot().getBBox();return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}};WarningIcon$$module$build$src$core$icons$warning_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.WARNING;WarningIcon$$module$build$src$core$icons$warning_icon.WEIGHT=2;\nvar module$build$src$core$icons$warning_icon={};module$build$src$core$icons$warning_icon.WarningIcon=WarningIcon$$module$build$src$core$icons$warning_icon;var BlockSvg$$module$build$src$core$block_svg=class extends Block$$module$build$src$core$block{constructor(a,b,c){super(a,b,c);this.childlessWidth=this.width=this.height=0;this.warningTextDb=new Map;this.mutator=null;this.rendered=!0;this.visuallyDisabled=!1;this.translation=\"\";this.dragging=!1;this.relativeCoords=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.dragStrategy=new BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy(this);if(!a.rendered)throw TypeError(\"Cannot create a rendered block in a headless workspace\");\nthis.workspace=a;this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});b&&addClass$$module$build$src$core$utils$dom(this.svgGroup,b);this.style=a.getRenderer().getConstants().getBlockStyle(null);this.pathObject=a.getRenderer().makePathObject(this.svgGroup,this.style);a=this.pathObject.svgPath;a.tooltip=this;bindMouseEvents$$module$build$src$core$tooltip(a);this.svgGroup.setAttribute(\"data-id\",this.id);a.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();\nthis.doInit_()}initSvg(){if(!this.initialized){for(var a of this.inputList)a.init();for(const b of this.getIcons())b.initView(this.createIconPointerDownListener(b)),b.updateEditable();this.applyColour();this.pathObject.updateMovable(this.isMovable()||this.isInFlyout);(a=this.getSvgRoot())&&conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onMouseDown);a.parentNode||this.workspace.getCanvas().appendChild(a);this.initialized=!0}}getColourSecondary(){return this.style.colourSecondary}getColourTertiary(){return this.style.colourTertiary}select(){this.addSelect();\nfireSelectedEvent$$module$build$src$core$common(this)}unselect(){this.removeSelect();fireSelectedEvent$$module$build$src$core$common(null)}setParent(a){var b=this.parentBlock_;if(a!==b){startTextWidthCache$$module$build$src$core$utils$dom();super.setParent(a);stopTextWidthCache$$module$build$src$core$utils$dom();var c=this.getSvgRoot();if(!this.workspace.isClearing&&c){var d=this.getRelativeToSurfaceXY(),e=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode(),f,g=this.getSvgRoot().contains((f=\ne==null?void 0:e.getFocusableElement())!=null?f:null);a?(a.getSvgRoot().appendChild(c),g&&e&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e)):b&&(a=this.workspace.getCanvas().querySelector(\".blocklyDragging\"),b=a==null?void 0:a.parentElement,f=this.workspace.getCanvas(),b===f?f.insertBefore(c,a):(f.appendChild(c),g&&e&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e)),this.translate(d.x,d.y));this.applyColour()}}}getRelativeToSurfaceXY(){const a=this.workspace.getLayerManager();\nif(!a)throw Error(\"Cannot calculate position because the workspace has not been appended\");let b=0,c=0,d=this.getSvgRoot();if(d){do{const e=getRelativeXY$$module$build$src$core$utils$svg_math(d);b+=e.x;c+=e.y;d=d.parentNode}while(d&&!a.hasLayer(d))}return new Coordinate$$module$build$src$core$utils$coordinate(b,c)}moveBy(a,b,c){if(this.parentBlock_)throw Error(\"Block has parent\");const d=isEnabled$$module$build$src$core$events$utils();let e=null;d&&(e=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this),\nc&&e.setReason(c));a=new Coordinate$$module$build$src$core$utils$coordinate(a,b);b=this.getRelativeToSurfaceXY();a=Coordinate$$module$build$src$core$utils$coordinate.sum(b,a);this.translate(a.x,a.y);this.updateComponentLocations(a);d&&e&&(e.recordNew(),fire$$module$build$src$core$events$utils(e));this.workspace.resizeContents()}translate(a,b){this.translation=`translate(${a}, ${b})`;this.relativeCoords=new Coordinate$$module$build$src$core$utils$coordinate(a,b);this.getSvgRoot().setAttribute(\"transform\",\nthis.getTranslation())}getTranslation(){return this.translation}moveTo(a,b){const c=this.getRelativeToSurfaceXY();this.moveBy(a.x-c.x,a.y-c.y,b)}moveDuringDrag(a){this.translate(a.x,a.y);this.getSvgRoot().setAttribute(\"transform\",this.getTranslation());this.updateComponentLocations(a)}snapToGrid(){if(!this.isDeadOrDying()&&!this.getParent()&&!this.isInFlyout){var a=this.workspace.getGrid();if(a!=null&&a.shouldSnap()){var b=this.getRelativeToSurfaceXY();a=a.alignXY(b);a!==b&&this.moveTo(a,[\"snap\"])}}}getBoundingRectangle(){return this.getBoundingRectangleWithDimensions(this.getHeightWidth())}getBoundingRectangleWithoutChildren(){return this.getBoundingRectangleWithDimensions({height:this.height,\nwidth:this.childlessWidth})}getBoundingRectangleWithDimensions(a){const b=this.getRelativeToSurfaceXY();let c,d;this.RTL?(c=b.x-a.width,d=b.x):(c=b.x,d=b.x+a.width);return new Rect$$module$build$src$core$utils$rect(b.y,b.y+a.height,c,d)}markDirty(){this.pathObject.constants=this.workspace.getRenderer().getConstants();for(let a=0,b;b=this.inputList[a];a++)b.markDirty()}setCollapsed(a){this.collapsed_!==a&&(super.setCollapsed(a),this.updateCollapsed())}childHasWarning(){const a=this.getChildren(!1);\nfor(const b of a)if(b.getIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE)||b.childHasWarning())return!0;return!1}updateCollapsed(){var a=this.isCollapsed();const b=COLLAPSED_INPUT_NAME$$module$build$src$core$constants,c=COLLAPSED_FIELD_NAME$$module$build$src$core$constants;for(let e=0,f;f=this.inputList[e];e++)f.name!==b&&f.setVisible(!a);for(var d of this.getIcons())d.updateCollapsed();a?(addClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyCollapsed\"),this.childHasWarning()&&\nthis.setWarningText($.Msg$$module$build$src$core$msg.COLLAPSED_WARNINGS_WARNING,BlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID),a=this.toString(COLLAPSE_CHARS$$module$build$src$core$internal_constants),(d=this.getField(c))?d.setValue(a):(this.getInput(b)||this.appendDummyInput(b)).appendField(new FieldLabel$$module$build$src$core$field_label(a),c)):(this.updateDisabled(),this.removeInput(b),removeClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyCollapsed\"),this.setWarningText(null,\nBlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID))}onMouseDown(a){if(!this.workspace.isReadOnly()){var b=this.workspace.getGesture(a);b&&b.handleBlockStart(a,this)}}showHelp(){const a=typeof this.helpUrl===\"function\"?this.helpUrl():this.helpUrl;a&&window.open(a)}generateContextMenu(a){if(this.workspace.isReadOnly()||!this.contextMenu)return null;a=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({block:this,focusedNode:this},a);this.customContextMenu&&\nthis.customContextMenu(a);return a}calculateContextMenuLocation(a){if(a instanceof PointerEvent)return new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY);a=wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this.workspace,this.getRelativeToSurfaceXY());let b,c;const d=(b=this.inputList.filter(e=>e.isVisible()).flatMap(e=>e.fieldRow).find(e=>e.isVisible()))==null?void 0:(c=b.getSvgRoot())==null?void 0:c.getBoundingClientRect();return new Coordinate$$module$build$src$core$utils$coordinate(this.RTL?\na.x-5:a.x+5,(d&&d.height?d.y+d.height:a.y+this.height)+5)}showContextMenu(a){const b=this.generateContextMenu(a),c=this.calculateContextMenuLocation(a);b&&b.length&&(show$$module$build$src$core$contextmenu(a,b,this.RTL,this.workspace,c),setCurrentBlock$$module$build$src$core$contextmenu(this))}updateComponentLocations(a){this.dragging||this.updateConnectionLocations(a);this.updateIconLocations(a);this.updateFieldLocations(a);for(const b of this.getChildren(!1))b.updateComponentLocations(Coordinate$$module$build$src$core$utils$coordinate.sum(a,\nb.relativeCoords))}updateConnectionLocations(a){for(const b of this.getConnections_(!1))b.moveToOffset(a)}updateIconLocations(a){for(const b of this.getIcons())b.onLocationChange(a)}updateFieldLocations(a){for(const b of this.inputList)for(const c of b.fieldRow)c.onLocationChange(a)}addClass(a){addClass$$module$build$src$core$utils$dom(this.svgGroup,a)}removeClass(a){removeClass$$module$build$src$core$utils$dom(this.svgGroup,a)}setDragging(a){(this.dragging=a)?(this.translation=\"\",draggingConnections$$module$build$src$core$common.push(...this.getConnections_(!0)),\nthis.addClass(\"blocklyDragging\")):(draggingConnections$$module$build$src$core$common.length=0,this.removeClass(\"blocklyDragging\"));for(let b=0;bc.focusTree(this.workspace),0)}b&&(this.unplug(a),disposeUiEffect$$module$build$src$core$block_animations(this));super.dispose(!!a);\nremoveNode$$module$build$src$core$utils$dom(this.svgGroup)}disposeInternal(){this.disposing=!0;super.disposeInternal();$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===this&&this.workspace.cancelCurrentGesture();[...this.warningTextDb.values()].forEach(a=>clearTimeout(a));this.warningTextDb.clear();this.getIcons().forEach(a=>a.dispose())}checkAndDelete(){this.workspace.isFlyout||($.setGroup$$module$build$src$core$events$utils(!0),this.workspace.hideChaff(),this.outputConnection?\nthis.dispose(!1,!0):this.dispose(!0,!0),$.setGroup$$module$build$src$core$events$utils(!1))}toCopyData(a=!1){return this.isInsertionMarker_?null:{paster:BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE,blockState:save$$module$build$src$core$serialization$blocks(this,{addCoordinates:!0,addNextBlocks:a,saveIds:!1}),typeCounts:getBlockTypeCounts$$module$build$src$core$common(this,!0)}}applyColour(){var a,b;(b=(a=this.pathObject).applyColour)==null||b.call(a,this);a=this.getIcons();for(b=\n0;b{this.isDeadOrDying()||(this.warningTextDb.delete(b),this.setWarningText(a,b))},100));else if(this.isInFlyout&&(a=null),c=this.getIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE),a){let d=this.getSurroundParent(),e=null;for(;d;)d.isCollapsed()&&(e=d),d=d.getSurroundParent();e&&e.setWarningText($.Msg$$module$build$src$core$msg.COLLAPSED_WARNINGS_WARNING,BlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID);\nc?c.addMessage(a,b):this.addIcon((new WarningIcon$$module$build$src$core$icons$warning_icon(this)).addMessage(a,b))}else c&&(b?(c.addMessage(\"\",b),c.getText()||this.removeIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE)):this.removeIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE))}setMutator(a){this.removeIcon($.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE);a&&this.addIcon(a)}addIcon(a){super.addIcon(a);a instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&\n(this.mutator=a);a.initView(this.createIconPointerDownListener(a));a.applyColour();a.updateEditable();this.queueRender();return a}createIconPointerDownListener(a){return b=>{this.isDeadOrDying()||(b=this.workspace.getGesture(b))&&b.setStartIcon(a)}}removeIcon(a){const b=super.removeIcon(a);a.equals($.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE)&&(this.mutator=null);this.queueRender();return b}setDisabledReason(a,b){const c=this.isEnabled();super.setDisabledReason(a,b);this.isEnabled()===\nc||this.getInheritedDisabled()||this.updateDisabled()}setDeletable(a){super.setDeletable(a);a?removeClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyNotDeletable\"):addClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyNotDeletable\")}setHighlighted(a){this.pathObject.updateHighlighted(a)}addSelect(){this.pathObject.updateSelected(!0)}removeSelect(){this.pathObject.updateSelected(!1)}setDeleteStyle(a){this.pathObject.updateDraggingDelete(a)}getColour(){return this.style.colourPrimary}setColour(a){super.setColour(a);\na=this.workspace.getRenderer().getConstants().getBlockStyleForColour(this.colour_);let b,c;(c=(b=this.pathObject).setStyle)==null||c.call(b,a.style);this.style=a.style;this.styleName_=a.name;this.applyColour()}setStyle(a){const b=this.workspace.getRenderer().getConstants().getBlockStyle(a);this.styleName_&&removeClass$$module$build$src$core$utils$dom(this.svgGroup,this.styleName_);if(b){this.hat=b.hat;let c,d;(d=(c=this.pathObject).setStyle)==null||d.call(c,b);this.colour_=b.colourPrimary;this.style=\nb;this.applyColour();addClass$$module$build$src$core$utils$dom(this.svgGroup,a);this.styleName_=a}else throw Error(\"Invalid style name: \"+a);}getStyle(){return this.style}bringToFront(a=!1){const b=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode();let c=this;if(!c.isDeadOrDying()){do{const d=c.getSvgRoot(),e=d.parentNode,f=e.childNodes;f[f.length-1]!==d&&e.appendChild(d);if(a)break;c=c.getParent()}while(c);b&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b)}}setPreviousStatement(a,\nb){super.setPreviousStatement(a,b);this.queueRender()}setNextStatement(a,b){super.setNextStatement(a,b);this.queueRender()}setOutput(a,b){super.setOutput(a,b);this.queueRender()}setInputsInline(a){super.setInputsInline(a);this.queueRender()}removeInput(a,b){a=super.removeInput(a,b);this.queueRender();return a}moveNumberedInputBefore(a,b){super.moveNumberedInputBefore(a,b);this.queueRender()}appendInput(a){super.appendInput(a);this.queueRender();return a}setConnectionTracking(a){this.previousConnection&&\nthis.previousConnection.setTracking(a);this.outputConnection&&this.outputConnection.setTracking(a);if(this.nextConnection){this.nextConnection.setTracking(a);var b=this.nextConnection.targetBlock();b&&b.setConnectionTracking(a)}if(!this.collapsed_)for(b=0;bd.getElement()===a);if(c===-1)return null;c++;c>=b.length&&(c=0);return b[c].getElement()}getPreviousSibling(a){const b=this.flyout.getContents();if(!b)return null;let c=b.findIndex(d=>d.getElement()===\na);if(c===-1)return null;c--;c<0&&(c=b.length-1);return b[c].getElement()}isNavigable(a){return this.policy.isNavigable(a)}isApplicable(a){return this.policy.isApplicable(a)}},module$build$src$core$keyboard_nav$flyout_navigation_policy={};module$build$src$core$keyboard_nav$flyout_navigation_policy.FlyoutNavigationPolicy=FlyoutNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_navigation_policy;var FlyoutSeparator$$module$build$src$core$flyout_separator=class{constructor(a,b){this.gap=a;this.axis=b;this.y=this.x=0}getBoundingRectangle(){switch(this.axis){case \"x\":return new Rect$$module$build$src$core$utils$rect(this.y,this.y,this.x,this.x+this.gap);case \"y\":return new Rect$$module$build$src$core$utils$rect(this.y,this.y+this.gap,this.x,this.x)}}moveBy(a,b,c){this.x+=a;this.y+=b}isNavigable(){return!1}getFocusableElement(){throw Error(\"Cannot be focused\");}getFocusableTree(){throw Error(\"Cannot be focused\");\n}onNodeFocus(){}onNodeBlur(){}canBeFocused(){return!1}},module$build$src$core$flyout_separator={};module$build$src$core$flyout_separator.FlyoutSeparator=FlyoutSeparator$$module$build$src$core$flyout_separator;var FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy=class{getFirstChild(a){return null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return!1}isApplicable(a){return a instanceof FlyoutSeparator$$module$build$src$core$flyout_separator}},module$build$src$core$keyboard_nav$flyout_separator_navigation_policy={};\nmodule$build$src$core$keyboard_nav$flyout_separator_navigation_policy.FlyoutSeparatorNavigationPolicy=FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy;var BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy=class{getFirstChild(a){return a.getEditor()}getParent(a){let b;return(b=a.getOwner())!=null?b:null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof TextInputBubble$$module$build$src$core$bubbles$textinput_bubble}},module$build$src$core$keyboard_nav$block_comment_navigation_policy={};\nmodule$build$src$core$keyboard_nav$block_comment_navigation_policy.BlockCommentNavigationPolicy=BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy;var BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy=class{getFirstChild(a){return getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy(a,!0)[0]}getParent(a){var b;if((b=a.previousConnection)==null?0:b.targetBlock()){if(b=a.getSurroundParent())return b}else{let c;if((c=a.outputConnection)==null?0:c.targetBlock())return a.outputConnection.targetBlock()}return a.workspace}getNextSibling(a){let b;if((b=a.nextConnection)==null?0:b.targetBlock()){let d;\nreturn(d=a.nextConnection)==null?void 0:d.targetBlock()}let c;return((c=a.outputConnection)==null?0:c.targetBlock())?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1):a.getSurroundParent()?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a.getTopStackBlock(),1):this.getParent(a)instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1):null}getPreviousSibling(a){let b;\nif((b=a.previousConnection)==null?0:b.targetBlock()){let d;return(d=a.previousConnection)==null?void 0:d.targetBlock()}let c;return((c=a.outputConnection)==null?0:c.targetBlock())?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1):this.getParent(a)instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1):null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof BlockSvg$$module$build$src$core$block_svg}},\nmodule$build$src$core$keyboard_nav$block_navigation_policy={};module$build$src$core$keyboard_nav$block_navigation_policy.BlockNavigationPolicy=BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy;module$build$src$core$keyboard_nav$block_navigation_policy.navigateBlock=navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy;module$build$src$core$keyboard_nav$block_navigation_policy.navigateStacks=navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy;var CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy=class{getFirstChild(a){return null}getParent(a){return a.getCommentView().workspace.getCommentById(a.getCommentView().commentId)}getNextSibling(a){const b=a.getCommentView().getCommentBarButtons();a=b.indexOf(a);return a>=0&&a+10?b[a-1]:null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof\nCommentBarButton$$module$build$src$core$comments$comment_bar_button}},module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy={};module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy.CommentBarButtonNavigationPolicy=CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy;var CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy=class{getFirstChild(a){return null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof CommentEditor$$module$build$src$core$comments$comment_editor}},module$build$src$core$keyboard_nav$comment_editor_navigation_policy={};\nmodule$build$src$core$keyboard_nav$comment_editor_navigation_policy.CommentEditorNavigationPolicy=CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy;var ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy=class{getFirstChild(a){return a.getParentInput()?a.targetConnection:null}getParent(a){return a.getSourceBlock()}getNextSibling(a){if(a.getParentInput())return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1);if(a.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT){const c=a.targetConnection;var b=a.getSourceBlock();if(!c&&b.getRootBlock().lastConnectionInStack(!1)===\na){a=b.workspace.getTopBlocks(!0);b=a.indexOf(b.getRootBlock())+1;b>=a.length&&(b=0);b=a[b];let d;return(d=this.getParentConnection(b))!=null?d:b}return c}return a.getSourceBlock()}getPreviousSibling(a){if(a.getParentInput())return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1);if(a.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||a.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE){const c=a.targetConnection&&\n!a.targetConnection.getParentInput()?a.targetConnection:null;var b=a.getSourceBlock();if(!c&&this.getParentConnection(b.getRootBlock())===a){a=b.workspace.getTopBlocks(!0);b=a.indexOf(b.getRootBlock())-1;b<0&&(b=a.length-1);b=a[b];let d;return(d=b.lastConnectionInStack(!1))!=null?d:b}return c}return a.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT?a.getSourceBlock():null}getParentConnection(a){let b;return!a.outputConnection||((b=a.previousConnection)==null?0:b.isConnected())?\na.previousConnection:a.outputConnection}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof RenderedConnection$$module$build$src$core$rendered_connection}},module$build$src$core$keyboard_nav$connection_navigation_policy={};module$build$src$core$keyboard_nav$connection_navigation_policy.ConnectionNavigationPolicy=ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy;var FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy=class{getFirstChild(a){return null}getParent(a){return a.getSourceBlock()}getNextSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){let b;return a.canBeFocused()&&a.isVisible()&&(a.isClickable()||a.isCurrentlyEditable())&&!(((b=a.getSourceBlock())==\nnull?0:b.isSimpleReporter())&&a.isFullBlockField())&&a.getParentInput().isVisible()}isApplicable(a){return a instanceof Field$$module$build$src$core$field}},module$build$src$core$keyboard_nav$field_navigation_policy={};module$build$src$core$keyboard_nav$field_navigation_policy.FieldNavigationPolicy=FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy;var module$build$src$core$icons$registry={};module$build$src$core$icons$registry.register=register$$module$build$src$core$icons$registry;module$build$src$core$icons$registry.unregister=unregister$$module$build$src$core$icons$registry;var SIZE$$module$build$src$core$icons$comment_icon=17,DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon=160,DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon=80,CommentIcon$$module$build$src$core$icons$comment_icon=class extends Icon$$module$build$src$core$icons$icon{constructor(a){super(a);this.sourceBlock=a;this.textInputBubble=null;this.text=\"\";this.bubbleSize=new Size$$module$build$src$core$utils$size(DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon,DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon);\nthis.bubbleVisiblity=!1}getType(){return CommentIcon$$module$build$src$core$icons$comment_icon.TYPE}initView(a){this.svgRoot||(super.initView(a),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CIRCLE,{\"class\":\"blocklyIconShape\",r:\"8\",cx:\"8\",cy:\"8\"},this.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconSymbol\",d:\"m6.8,10h2c0.003,-0.617 0.271,-0.962 0.633,-1.266 2.875,-2.4050.607,-5.534 -3.765,-3.874v1.7c3.12,-1.657 3.698,0.118 2.336,1.25-1.201,0.998 -1.201,1.528 -1.204,2.19z\"},\nthis.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyIconSymbol\",x:\"6.8\",y:\"10.78\",height:\"2\",width:\"2\"},this.svgRoot),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCommentIcon\"))}dispose(){super.dispose();let a;(a=this.textInputBubble)==null||a.dispose()}getWeight(){return CommentIcon$$module$build$src$core$icons$comment_icon.WEIGHT}getSize(){return new Size$$module$build$src$core$utils$size(SIZE$$module$build$src$core$icons$comment_icon,\nSIZE$$module$build$src$core$icons$comment_icon)}applyColour(){super.applyColour();const a=this.sourceBlock.getColour();let b;(b=this.textInputBubble)==null||b.setColour(a)}updateEditable(){const a=this,b=()=>super.updateEditable;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){b().call(a);a.bubbleIsVisible()&&(yield a.setBubbleVisible(!1),yield a.setBubbleVisible(!0))})}onLocationChange(a){const b=this.workspaceLocation;super.onLocationChange(a);this.bubbleLocation&&(a=Coordinate$$module$build$src$core$utils$coordinate.difference(this.workspaceLocation,\nb),this.bubbleLocation=Coordinate$$module$build$src$core$utils$coordinate.sum(this.bubbleLocation,a));a=this.getAnchorLocation();let c;(c=this.textInputBubble)==null||c.setAnchorLocation(a)}setText(a){const b=this.text;fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\"comment\",null,b,a));this.text=a;let c;(c=this.textInputBubble)==null||c.setText(this.text)}getText(){return this.text}setBubbleSize(a){this.bubbleSize=\na;let b;(b=this.textInputBubble)==null||b.setSize(this.bubbleSize,!0)}getBubbleSize(){return this.bubbleSize}setBubbleLocation(a){this.bubbleLocation=a;let b;(b=this.textInputBubble)==null||b.moveDuringDrag(a)}getBubbleLocation(){return this.bubbleLocation}saveState(){if(this.text){const a={text:this.text,pinned:this.bubbleIsVisible(),height:this.bubbleSize.height,width:this.bubbleSize.width},b=this.getBubbleLocation();b&&(a.x=this.sourceBlock.workspace.RTL?this.sourceBlock.workspace.getWidth()-(b.x+\nthis.bubbleSize.width):b.x,a.y=b.y);return a}return null}loadState(a){let b;this.text=(b=a.text)!=null?b:\"\";let c,d;this.bubbleSize=new Size$$module$build$src$core$utils$size((c=a.width)!=null?c:DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon,(d=a.height)!=null?d:DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon);let e;this.bubbleVisiblity=(e=a.pinned)!=null?e:!1;this.setBubbleVisible(this.bubbleVisiblity);let f=a.x;const g=a.y;finishQueuedRenders$$module$build$src$core$render_management().then(()=>\n{f&&g&&(f=this.sourceBlock.workspace.RTL?this.sourceBlock.workspace.getWidth()-(f+this.bubbleSize.width):f,this.setBubbleLocation(new Coordinate$$module$build$src$core$utils$coordinate(f,g)))})}onClick(){super.onClick();this.setBubbleVisible(!this.bubbleIsVisible())}isClickableInFlyout(){return!1}onTextChange(){if(this.textInputBubble){var a=this.textInputBubble.getText();this.text!==a&&(fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\n\"comment\",null,this.text,a)),this.text=a)}}onSizeChange(){this.textInputBubble&&(this.bubbleSize=this.textInputBubble.getSize())}onBubbleLocationChange(){this.textInputBubble&&(this.bubbleLocation=this.textInputBubble.getRelativeToSurfaceXY())}bubbleIsVisible(){return this.bubbleVisiblity}setBubbleVisible(a){const b=this;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){b.bubbleVisiblity!==a&&(b.bubbleVisiblity=a,yield finishQueuedRenders$$module$build$src$core$render_management(),\n!b.sourceBlock.rendered||b.sourceBlock.isInFlyout||b.sourceBlock.isInsertionMarker()||(a?(b.sourceBlock.isEditable()?b.showEditableBubble():b.showNonEditableBubble(),b.applyColour()):b.hideBubble(),fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BUBBLE_OPEN))(b.sourceBlock,a,\"comment\"))))})}getBubble(){return this.textInputBubble}showEditableBubble(){this.createBubble();let a;(a=this.textInputBubble)==null||a.addTextChangeListener(()=>\nthis.onTextChange());let b;(b=this.textInputBubble)==null||b.addSizeChangeListener(()=>this.onSizeChange())}showNonEditableBubble(){this.createBubble();let a;(a=this.textInputBubble)==null||a.setEditable(!1)}createBubble(){this.textInputBubble=new TextInputBubble$$module$build$src$core$bubbles$textinput_bubble(this.sourceBlock.workspace,this.getAnchorLocation(),this.getBubbleOwnerRect(),this);this.textInputBubble.setText(this.getText());this.textInputBubble.setSize(this.bubbleSize,!0);this.bubbleLocation&&\nthis.textInputBubble.moveDuringDrag(this.bubbleLocation);this.textInputBubble.addTextChangeListener(()=>this.onTextChange());this.textInputBubble.addSizeChangeListener(()=>this.onSizeChange());this.textInputBubble.addLocationChangeListener(()=>this.onBubbleLocationChange())}hideBubble(){let a;(a=this.textInputBubble)==null||a.dispose();this.textInputBubble=null}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$comment_icon/2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,\nnew Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){return this.sourceBlock.getBoundingRectangleWithoutChildren()}};CommentIcon$$module$build$src$core$icons$comment_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.COMMENT;CommentIcon$$module$build$src$core$icons$comment_icon.WEIGHT=3;register$$module$build$src$core$icons$registry(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE,CommentIcon$$module$build$src$core$icons$comment_icon);\nvar module$build$src$core$icons$comment_icon={};module$build$src$core$icons$comment_icon.CommentIcon=CommentIcon$$module$build$src$core$icons$comment_icon;var IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy=class{getFirstChild(a){if(a instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&a.bubbleIsVisible()&&$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===a){let b,c;return(c=(b=a.getBubble())==null?void 0:b.getWorkspace())!=null?c:null}if(a instanceof CommentIcon$$module$build$src$core$icons$comment_icon&&a.bubbleIsVisible()&&$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===\na){let b,c;return(c=(b=a.getBubble())==null?void 0:b.getEditor())!=null?c:null}return null}getParent(a){return a.getSourceBlock()}getNextSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof Icon$$module$build$src$core$icons$icon}},module$build$src$core$keyboard_nav$icon_navigation_policy=\n{};module$build$src$core$keyboard_nav$icon_navigation_policy.IconNavigationPolicy=IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy;var WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy=class{getFirstChild(a){return a.view.getCommentBarButtons()[0]}getParent(a){return a.workspace}getNextSibling(a){return navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment}},\nmodule$build$src$core$keyboard_nav$workspace_comment_navigation_policy={};module$build$src$core$keyboard_nav$workspace_comment_navigation_policy.WorkspaceCommentNavigationPolicy=WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy;var WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy=class{getFirstChild(a){a=a.getTopBlocks(!0);return a.length?a[0]:null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()&&!a.isMutator}isApplicable(a){return a instanceof WorkspaceSvg$$module$build$src$core$workspace_svg}},module$build$src$core$keyboard_nav$workspace_navigation_policy={};\nmodule$build$src$core$keyboard_nav$workspace_navigation_policy.WorkspaceNavigationPolicy=WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy;var Navigator$$module$build$src$core$navigator=class{constructor(){this.rules=[new BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy,new FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy,new ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy,new WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy,new IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy,\nnew WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy,new CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy,new BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy,new CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy]}addNavigationPolicy(a){this.rules.push(a)}get(a){return this.rules.find(b=>b.isApplicable(a))}getFirstChild(a){let b;\nconst c=(b=this.get(a))==null?void 0:b.getFirstChild(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getFirstChild(c)||this.getNextSibling(c)}getParent(a){let b;const c=(b=this.get(a))==null?void 0:b.getParent(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getParent(c)}getNextSibling(a){let b;const c=(b=this.get(a))==null?void 0:b.getNextSibling(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getNextSibling(c)}getPreviousSibling(a){let b;\nconst c=(b=this.get(a))==null?void 0:b.getPreviousSibling(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getPreviousSibling(c)}},module$build$src$core$navigator={};module$build$src$core$navigator.Navigator=Navigator$$module$build$src$core$navigator;var FlyoutNavigator$$module$build$src$core$flyout_navigator=class extends Navigator$$module$build$src$core$navigator{constructor(a){super();this.rules.push(new FlyoutButtonNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_button_navigation_policy,new FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy);this.rules=this.rules.map(b=>new FlyoutNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_navigation_policy(b,a))}},module$build$src$core$flyout_navigator=\n{};module$build$src$core$flyout_navigator.FlyoutNavigator=FlyoutNavigator$$module$build$src$core$flyout_navigator;var ScrollbarPair$$module$build$src$core$scrollbar_pair=class{constructor(a,b,c,d,e){this.workspace=a;this.oldHostMetrics=this.corner_=this.vScroll=this.hScroll=null;b=b===void 0?!0:b;c=c===void 0?!0:c;const f=b&&c;b&&(this.hScroll=new Scrollbar$$module$build$src$core$scrollbar(a,!0,f,d,e));c&&(this.vScroll=new Scrollbar$$module$build$src$core$scrollbar(a,!1,f,d,e));f&&(this.corner_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{height:Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness,\nwidth:Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness,\"class\":\"blocklyScrollbarBackground\"}),insertAfter$$module$build$src$core$utils$dom(this.corner_,a.getBubbleCanvas()))}dispose(){removeNode$$module$build$src$core$utils$dom(this.corner_);this.oldHostMetrics=this.corner_=null;this.hScroll&&(this.hScroll.dispose(),this.hScroll=null);this.vScroll&&(this.vScroll.dispose(),this.vScroll=null)}resize(){const a=this.workspace.getMetrics();if(a){var b=!1,c=!1;this.oldHostMetrics&&this.oldHostMetrics.viewWidth===\na.viewWidth&&this.oldHostMetrics.viewHeight===a.viewHeight&&this.oldHostMetrics.absoluteTop===a.absoluteTop&&this.oldHostMetrics.absoluteLeft===a.absoluteLeft?(this.oldHostMetrics&&this.oldHostMetrics.scrollWidth===a.scrollWidth&&this.oldHostMetrics.viewLeft===a.viewLeft&&this.oldHostMetrics.scrollLeft===a.scrollLeft||(b=!0),this.oldHostMetrics&&this.oldHostMetrics.scrollHeight===a.scrollHeight&&this.oldHostMetrics.viewTop===a.viewTop&&this.oldHostMetrics.scrollTop===a.scrollTop||(c=!0)):c=b=!0;if(b||\nc){try{$.disable$$module$build$src$core$events$utils(),this.hScroll&&b&&this.hScroll.resize(a),this.vScroll&&c&&this.vScroll.resize(a)}finally{$.enable$$module$build$src$core$events$utils()}this.workspace.maybeFireViewportChangeEvent()}if(this.hScroll&&this.vScroll){if(!this.oldHostMetrics||this.oldHostMetrics.viewWidth!==a.viewWidth||this.oldHostMetrics.absoluteLeft!==a.absoluteLeft){let d;(d=this.corner_)==null||d.setAttribute(\"x\",String(this.vScroll.position.x))}if(!this.oldHostMetrics||this.oldHostMetrics.viewHeight!==\na.viewHeight||this.oldHostMetrics.absoluteTop!==a.absoluteTop){let d;(d=this.corner_)==null||d.setAttribute(\"y\",String(this.hScroll.position.y))}}this.oldHostMetrics=a}}canScrollHorizontally(){return!!this.hScroll}canScrollVertically(){return!!this.vScroll}setOrigin(a,b){this.hScroll&&this.hScroll.setOrigin(a,b);this.vScroll&&this.vScroll.setOrigin(a,b)}set(a,b,c){this.hScroll&&this.hScroll.set(a,!1);this.vScroll&&this.vScroll.set(b,!1);if(c||c===void 0)a={},this.hScroll&&(a.x=this.hScroll.getRatio_()),\nthis.vScroll&&(a.y=this.vScroll.getRatio_()),this.workspace.setMetrics(a)}setX(a){this.hScroll&&this.hScroll.set(a,!0)}setY(a){this.vScroll&&this.vScroll.set(a,!0)}setContainerVisible(a){this.hScroll&&this.hScroll.setContainerVisible(a);this.vScroll&&this.vScroll.setContainerVisible(a)}isVisible(){let a=!1;this.hScroll&&(a=this.hScroll.isVisible());this.vScroll&&(a=a||this.vScroll.isVisible());return a}setVisible(a){this.hScroll&&this.hScroll.setVisibleInternal(a);this.vScroll&&this.vScroll.setVisibleInternal(a)}resizeContent(a){this.hScroll&&\nthis.hScroll.resizeContentHorizontal(a);this.vScroll&&this.vScroll.resizeContentVertical(a)}resizeView(a){this.hScroll&&this.hScroll.resizeViewHorizontal(a);this.vScroll&&this.vScroll.resizeViewVertical(a)}},module$build$src$core$scrollbar_pair={};module$build$src$core$scrollbar_pair.ScrollbarPair=ScrollbarPair$$module$build$src$core$scrollbar_pair;var SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater=\"sep\",SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater=class{load(a,b){a=new FlyoutSeparator$$module$build$src$core$flyout_separator(0,b.horizontalLayout?\"x\":\"y\");return new FlyoutItem$$module$build$src$core$flyout_item(a,SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater)}gapForItem(a,b){let c;return(c=parseInt(String(a.gap)))!=null?c:b}disposeItem(a){}getType(){return SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater}};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater,SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater);var module$build$src$core$separator_flyout_inflater={SEPARATOR_TYPE:SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater};module$build$src$core$separator_flyout_inflater.SeparatorFlyoutInflater=SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater;var Flyout$$module$build$src$core$flyout_base=class extends DeleteArea$$module$build$src$core$delete_area{constructor(a){super();this.horizontalLayout=!1;this.boundEvents=[];this.reflowWrapper=null;this.contents=[];this.autoClose=!0;this.visible=!1;this.containerVisible=!0;this.CORNER_RADIUS=8;this.SCROLLBAR_MARGIN=2.5;this.height_=this.width_=0;this.dragAngleRange_=70;this.svgGroup_=this.svgBackground_=null;this.inflaters=new Map;a.setMetrics=this.setMetrics_.bind(this);this.workspace_=new WorkspaceSvg$$module$build$src$core$workspace_svg(a);\nthis.workspace_.setMetricsManager(new FlyoutMetricsManager$$module$build$src$core$flyout_metrics_manager(this.workspace_,this));this.workspace_.internalIsFlyout=!0;this.workspace_.setVisible(this.visible);this.workspace_.setNavigator(new FlyoutNavigator$$module$build$src$core$flyout_navigator(this));this.id=genUid$$module$build$src$core$utils$idgenerator();this.RTL=!!a.RTL;this.toolboxPosition_=a.toolboxPosition;this.tabWidth_=this.workspace_.getRenderer().getConstants().TAB_WIDTH;this.MARGIN=this.CORNER_RADIUS;\nthis.GAP_X=this.MARGIN*3;this.GAP_Y=this.MARGIN*3}createDom(a){this.svgGroup_=createSvgElement$$module$build$src$core$utils$dom(a,{\"class\":\"blocklyFlyout\"});this.svgGroup_.style.display=\"none\";this.svgBackground_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyFlyoutBackground\"},this.svgGroup_);this.svgGroup_.appendChild(this.workspace_.createDom());this.workspace_.getThemeManager().subscribe(this.svgBackground_,\"flyoutBackgroundColour\",\n\"fill\");this.workspace_.getThemeManager().subscribe(this.svgBackground_,\"flyoutOpacity\",\"fill-opacity\");return this.svgGroup_}init(a){this.targetWorkspace=a;this.workspace_.targetWorkspace=a;this.workspace_.scrollbar=new ScrollbarPair$$module$build$src$core$scrollbar_pair(this.workspace_,this.horizontalLayout,!this.horizontalLayout,\"blocklyFlyoutScrollbar\",this.SCROLLBAR_MARGIN);this.hide();this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"wheel\",this,this.wheel_));\nthis.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.svgBackground_,\"pointerdown\",this,this.onMouseDown));this.workspace_.getGesture=this.targetWorkspace.getGesture.bind(this.targetWorkspace);this.workspace_.setVariableMap(this.targetWorkspace.getVariableMap());this.workspace_.createPotentialVariableMap();a.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.FLYOUT_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,\nComponentManager$$module$build$src$core$component_manager.Capability.DELETE_AREA,ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET]})}dispose(){this.hide();this.targetWorkspace.getComponentManager().removeComponent(this.id);for(const a of this.boundEvents)unbind$$module$build$src$core$browser_events(a);this.boundEvents.length=0;this.workspace_&&(this.workspace_.getThemeManager().unsubscribe(this.svgBackground_),this.workspace_.dispose());this.svgGroup_&&removeNode$$module$build$src$core$utils$dom(this.svgGroup_)}getWidth(){return this.width_}getHeight(){return this.height_}getFlyoutScale(){return this.targetWorkspace.scale}getWorkspace(){return this.workspace_}setAutoClose(a){this.autoClose=\na;this.targetWorkspace.recordDragTargets();this.targetWorkspace.resizeContents()}autoHide(a){!a&&this.targetWorkspace.getFlyout(!0)===this&&this.autoClose&&this.hide()}getTargetWorkspace(){return this.targetWorkspace}isVisible(){return this.visible}setVisible(a){const b=a!==this.isVisible();this.visible=a;b&&(this.autoClose||this.targetWorkspace.recordDragTargets(),this.updateDisplay())}setContainerVisible(a){const b=a!==this.containerVisible;this.containerVisible=a;b&&this.updateDisplay()}getContents(){return this.contents}setContents(a){this.contents=\na}updateDisplay(){let a;a=this.containerVisible?this.isVisible():!1;this.svgGroup_&&(this.svgGroup_.style.display=a?\"block\":\"none\");let b;(b=this.workspace_.scrollbar)==null||b.setContainerVisible(a)}positionAt_(a,b,c,d){let e;(e=this.svgGroup_)==null||e.setAttribute(\"width\",`${a}`);let f;(f=this.svgGroup_)==null||f.setAttribute(\"height\",`${b}`);this.workspace_.setCachedParentSvgSize(a,b);this.svgGroup_&&setCssTransform$$module$build$src$core$utils$dom(this.svgGroup_,\"translate(\"+c+\"px,\"+d+\"px)\");\nif(a=this.workspace_.scrollbar)a.setOrigin(c,d),a.resize(),a.hScroll&&a.hScroll.setPosition(a.hScroll.position.x,a.hScroll.position.y),a.vScroll&&a.vScroll.setPosition(a.vScroll.position.x,a.vScroll.position.y)}hide(){this.isVisible()&&(this.setVisible(!1),this.reflowWrapper&&(this.workspace_.removeChangeListener(this.reflowWrapper),this.reflowWrapper=null))}show(a){this.workspace_.setResizesEnabled(!1);this.hide();this.clearOldBlocks();typeof a===\"string\"&&(a=this.getDynamicCategoryContents(a));\nthis.setVisible(!0);a=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox(a);a=this.createFlyoutInfo(a);triggerQueuedRenders$$module$build$src$core$render_management(this.workspace_);this.setContents(a);this.layout_(a);this.horizontalLayout?this.height_=0:this.width_=0;this.reflow();this.workspace_.setResizesEnabled(!0);this.reflowWrapper=b=>{b.type!==EventType$$module$build$src$core$events$type.BLOCK_CHANGE&&b.type!==EventType$$module$build$src$core$events$type.BLOCK_FIELD_INTERMEDIATE_CHANGE||\nthis.reflow()};this.workspace_.addChangeListener(this.reflowWrapper)}createFlyoutInfo(a){const b=[],c=this.horizontalLayout?this.GAP_X:this.GAP_Y;for(const d of a)if(\"custom\"in d&&(a=this.getDynamicCategoryContents(d.custom),a=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox(a),b.push(...this.createFlyoutInfo(a))),a=d.kind.toLowerCase(),a=this.getInflaterForType(a))b.push(a.load(d,this)),(a=a.gapForItem(d,c))&&b.push(new FlyoutItem$$module$build$src$core$flyout_item(new FlyoutSeparator$$module$build$src$core$flyout_separator(a,\nthis.horizontalLayout?\"x\":\"y\"),SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater));return this.normalizeSeparators(b)}normalizeSeparators(a){for(let b=a.length-1;b>0;b--){const c=a[b].getType().toLowerCase(),d=a[b-1].getType().toLowerCase();c===SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater&&d===SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater&&a.splice(b-1,1)}return a}getDynamicCategoryContents(a){a=this.workspace_.targetWorkspace.getToolboxCategoryCallback(a);\nif(typeof a!==\"function\")throw TypeError(\"Couldn't find a callback function when opening a toolbox category.\");return a(this.workspace_.targetWorkspace)}clearOldBlocks(){this.getContents().forEach(b=>{let c;(c=this.getInflaterForType(b.getType()))==null||c.disposeItem(b)});let a;(a=this.workspace_.getPotentialVariableMap())==null||a.clear()}onMouseDown(a){const b=this.targetWorkspace.getGesture(a);b&&b.handleFlyoutStart(a,this)}isBlockCreatable(a){return a.isEnabled()&&!this.getTargetWorkspace().isReadOnly()}createBlock(a){let b=\nnull;$.disable$$module$build$src$core$events$utils();var c=this.targetWorkspace.getAllVariables();this.targetWorkspace.setResizesEnabled(!1);try{b=this.placeNewBlock(a)}finally{$.enable$$module$build$src$core$events$utils()}this.targetWorkspace.hideChaff();a=getAddedVariables$$module$build$src$core$variables(this.targetWorkspace,c);if(isEnabled$$module$build$src$core$events$utils()){$.setGroup$$module$build$src$core$events$utils(!0);for(c=0;c\n(this.flyout?$.config$$module$build$src$core$config.flyoutDragRadius:$.config$$module$build$src$core$config.dragRadius)}updateIsDraggingFromFlyout(){let a;if(!this.targetBlock||(a=this.flyout)==null||!a.isBlockCreatable(this.targetBlock))return!1;if(!this.flyout.targetWorkspace)throw Error(\"Cannot update dragging from the flyout because the ' +\\n 'flyout's target workspace is undefined\");return!this.flyout.isScrollable()||this.flyout.isDragTowardWorkspace(this.currentDragDeltaXY)?(this.startWorkspace_=\nthis.flyout.targetWorkspace,this.startWorkspace_.updateScreenCalculationsIfScrolled(),$.getGroup$$module$build$src$core$events$utils()||$.setGroup$$module$build$src$core$events$utils(!0),this.startBlock=null,this.targetBlock=this.flyout.createBlock(this.targetBlock),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.targetBlock),!0):!1}updateIsDraggingWorkspace(){if(!this.startWorkspace_)throw Error(\"Cannot update dragging the workspace because the start workspace is undefined\");\nif(this.flyout?this.flyout.isScrollable():this.startWorkspace_&&this.startWorkspace_.isDraggable())this.dragging=!0,this.workspaceDragger=new WorkspaceDragger$$module$build$src$core$workspace_dragger(this.startWorkspace_),this.workspaceDragger.startDrag()}updateIsDragging(a){if(!this.startWorkspace_)throw Error(\"Cannot update dragging because the start workspace is undefined\");if(this.calledUpdateIsDragging)throw Error(\"updateIsDragging_ should only be called once per gesture.\");this.calledUpdateIsDragging=\n!0;this.flyout&&this.updateIsDraggingFromFlyout();const b=getSelected$$module$build$src$core$common();b&&isDraggable$$module$build$src$core$interfaces$i_draggable(b)&&b.isMovable()?(this.dragging=!0,this.dragger=this.createDragger(b,this.startWorkspace_),this.dragger.onDragStart(a),this.dragger.onDrag(a,this.currentDragDeltaXY)):this.updateIsDraggingWorkspace()}createDragger(a,b){return new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.BLOCK_DRAGGER,this.creatorWorkspace.options,\n!0))(a,b)}doStart(a){if(!this.startWorkspace_)throw Error(\"Cannot start the touch gesture becauase the start workspace is undefined\");this.isPinchZoomEnabled=this.startWorkspace_.options.zoomOptions&&this.startWorkspace_.options.zoomOptions.pinch;isTargetInput$$module$build$src$core$browser_events(a)?this.cancel():(this.gestureHasStarted=!0,disconnectUiStop$$module$build$src$core$block_animations(),this.startWorkspace_.updateScreenCalculationsIfScrolled(),this.startWorkspace_.isMutator&&this.startWorkspace_.resize(),\nthis.currentDropdownOwner=getOwner$$module$build$src$core$dropdowndiv(),this.startWorkspace_.hideChaff(!!this.flyout),this.startWorkspace_.markFocused(),this.mostRecentEvent=a,block$$module$build$src$core$tooltip(),isRightButton$$module$build$src$core$browser_events(a)?this.handleRightClick(a):(a.type.toLowerCase()===\"pointerdown\"&&a.pointerType!==\"mouse\"&&longStart$$module$build$src$core$touch(a,this),this.mouseDownXY=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY),this.bindMouseEvents(a),\nthis.isEnding_||this.handleTouchStart(a)))}bindMouseEvents(a){this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointerdown\",null,this.handleStart.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",null,this.handleMove.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",null,this.handleUp.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\n\"pointercancel\",null,this.handleUp.bind(this),!0));a.preventDefault();a.stopPropagation()}handleStart(a){this.isDragging()||(this.handleTouchStart(a),this.isMultiTouch()&&longStop$$module$build$src$core$touch())}handleMove(a){if(this.isDragging()&&shouldHandleEvent$$module$build$src$core$touch(a)||!this.isMultiTouch()){this.updateFromEvent(a);if(this.workspaceDragger)this.workspaceDragger.drag(this.currentDragDeltaXY);else if(this.dragger)this.dragger.onDrag(this.mostRecentEvent,this.currentDragDeltaXY);\na.preventDefault();a.stopPropagation()}else this.isMultiTouch()&&(this.handleTouchMove(a),longStop$$module$build$src$core$touch())}handleUp(a){this.isDragging()||this.handleTouchEnd(a);if(!this.isMultiTouch()||this.isDragging()){if(!shouldHandleEvent$$module$build$src$core$touch(a))return;this.updateFromEvent(a);longStop$$module$build$src$core$touch();if(this.isEnding_){console.log(\"Trying to end a gesture recursively.\");return}this.isEnding_=!0;this.dragger?(keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1),\nthis.dragger.onDragEnd(a,this.currentDragDeltaXY)):this.workspaceDragger?(keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1),this.workspaceDragger.endDrag(this.currentDragDeltaXY)):this.isBubbleClick()||this.isCommentClick()||(this.isFieldClick()?this.doFieldClick():this.isIconClick()?this.doIconClick():this.isBlockClick()?this.doBlockClick():this.isWorkspaceClick()&&this.doWorkspaceClick(a))}a.preventDefault();a.stopPropagation();this.dispose()}handleTouchStart(a){var b=\ngetTouchIdentifierFromEvent$$module$build$src$core$touch(a);this.cachedPoints.set(b,this.getTouchPoint(a));var c=Array.from(this.cachedPoints.keys());c.length===2&&(b=this.cachedPoints.get(c[0]),c=this.cachedPoints.get(c[1]),this.startDistance=Coordinate$$module$build$src$core$utils$coordinate.distance(b,c),this.multiTouch=!0,a.preventDefault())}handleTouchMove(a){const b=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);this.cachedPoints.set(b,this.getTouchPoint(a));if(this.isPinchZoomEnabled&&\nthis.cachedPoints.size===2)this.handlePinch(a);else{this.updateFromEvent(a);if(this.workspaceDragger)this.workspaceDragger.drag(this.currentDragDeltaXY);else if(this.dragger)this.dragger.onDrag(this.mostRecentEvent,this.currentDragDeltaXY);a.preventDefault();a.stopPropagation()}}handlePinch(a){var b=Array.from(this.cachedPoints.keys()),c=this.cachedPoints.get(b[0]);b=this.cachedPoints.get(b[1]);c=Coordinate$$module$build$src$core$utils$coordinate.distance(c,b)/this.startDistance;if(this.previousScale>\n0&&this.previousScale0?b*ZOOM_IN_MULTIPLIER$$module$build$src$core$gesture:b*ZOOM_OUT_MULTIPLIER$$module$build$src$core$gesture;if(!this.startWorkspace_)throw Error(\"Cannot handle a pinch because the start workspace is undefined\");const d=this.startWorkspace_,e=mouseToSvg$$module$build$src$core$browser_events(a,d.getParentSvg(),d.getInverseScreenCTM());d.zoom(e.x,e.y,b)}this.previousScale=c;a.preventDefault()}handleTouchEnd(a){a=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);\nthis.cachedPoints.has(a)&&this.cachedPoints.delete(a);this.cachedPoints.size<2&&(this.cachedPoints.clear(),this.previousScale=0)}getTouchPoint(a){return this.startWorkspace_?new Coordinate$$module$build$src$core$utils$coordinate(a.pageX,a.pageY):null}isMultiTouch(){return this.multiTouch}cancel(){if(!this.isEnding_){longStop$$module$build$src$core$touch();if(this.dragger)this.dragger.onDragEnd(this.mostRecentEvent,this.currentDragDeltaXY);else this.workspaceDragger&&this.workspaceDragger.endDrag(this.currentDragDeltaXY);\nthis.dispose()}}handleRightClick(a){this.targetBlock?(this.bringBlockToFront(),this.targetBlock.workspace.hideChaff(!!this.flyout),this.targetBlock.showContextMenu(a)):this.startBubble?this.startBubble.showContextMenu(a):this.startComment?(this.startComment.workspace.hideChaff(),this.startComment.showContextMenu(a)):this.startWorkspace_&&!this.flyout&&(this.startWorkspace_.hideChaff(),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.startWorkspace_),this.startWorkspace_.showContextMenu(a));\na.preventDefault();a.stopPropagation();keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1);this.dispose()}handleWsStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleWsStart, but the gesture had already been started.\");this.setStartWorkspace(b);this.mostRecentEvent=a;this.startBlock||this.startBubble||this.startComment?this.startBlock&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.startBlock):$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b);\nthis.doStart(a)}fireWorkspaceClick(a){fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(null,a.id,\"workspace\"))}handleFlyoutStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleFlyoutStart, but the gesture had already been started.\");this.setStartFlyout(b);this.handleWsStart(a,b.getWorkspace())}handleBlockStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleBlockStart, but the gesture had already been started.\");\nthis.setStartBlock(b);this.mostRecentEvent=a}handleBubbleStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleBubbleStart, but the gesture had already been started.\");this.setStartBubble(b);this.mostRecentEvent=a}handleCommentStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleCommentStart, but the gesture had already been started.\");this.setStartComment(b);this.mostRecentEvent=a}doFieldClick(){if(!this.startField)throw Error(\"Cannot do a field click because the start field is undefined\");\nthis.bringBlockToFront();this.currentDropdownOwner!==this.startField&&this.startField.showEditor(this.mostRecentEvent)}doIconClick(){if(!this.startIcon)throw Error(\"Cannot do an icon click because the start icon is undefined\");this.bringBlockToFront();this.startIcon.onClick()}doBlockClick(){if(this.flyout&&this.flyout.autoClose){if(!this.targetBlock)throw Error(\"Cannot do a block click because the target block is undefined\");if(this.flyout.isBlockCreatable(this.targetBlock)){$.getGroup$$module$build$src$core$events$utils()||\n$.setGroup$$module$build$src$core$events$utils(!0);var a=this.flyout.createBlock(this.targetBlock);a.snapToGrid();a.bumpNeighbours();$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}}else{if(!this.startWorkspace_)throw Error(\"Cannot do a block click because the start workspace is undefined\");a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(this.startBlock,this.startWorkspace_.id,\"block\");fire$$module$build$src$core$events$utils(a)}this.bringBlockToFront();\n$.setGroup$$module$build$src$core$events$utils(!1)}doWorkspaceClick(a){this.fireWorkspaceClick(this.startWorkspace_||this.creatorWorkspace)}bringBlockToFront(){this.targetBlock&&!this.flyout&&($.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.targetBlock),this.targetBlock.bringToFront())}setStartField(a){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.setStartField, but the gesture had already been started.\");this.startField||(this.startField=a)}setStartIcon(a){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.setStartIcon, but the gesture had already been started.\");\nthis.startIcon||(this.startIcon=a)}setStartBubble(a){this.startBubble||(this.startBubble=a)}setStartComment(a){this.startComment||(this.startComment=a)}setStartBlock(a){this.startBlock||this.startBubble||(this.startBlock=a,a.isInFlyout&&a!==a.getRootBlock()?this.setTargetBlock(a.getRootBlock()):this.setTargetBlock(a))}setTargetBlock(a){a.isShadow()?this.setTargetBlock(a.getParent()):(this.targetBlock=a,$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a))}setStartWorkspace(a){this.startWorkspace_||\n(this.startWorkspace_=a)}setStartFlyout(a){this.flyout||(this.flyout=a)}isBubbleClick(){return!!this.startBubble&&!this.hasExceededDragRadius}isCommentClick(){return!!this.startComment&&!this.hasExceededDragRadius}isBlockClick(){return!!this.startBlock&&!this.hasExceededDragRadius&&!this.isFieldClick()&&!this.isIconClick()}isFieldClick(){return this.startField?this.startField.isClickable()&&!this.hasExceededDragRadius&&(!this.flyout||this.startField.isClickableInFlyout(this.flyout.autoClose)):!1}isIconClick(){if(!this.startIcon)return!1;\nconst a=!this.flyout||!this.startIcon.isClickableInFlyout||this.startIcon.isClickableInFlyout(this.flyout.autoClose);return!this.hasExceededDragRadius&&a}isWorkspaceClick(){return!this.startBlock&&!this.startBubble&&!this.startField&&!this.hasExceededDragRadius}getCurrentDragger(){let a,b;return(b=(a=this.workspaceDragger)!=null?a:this.dragger)!=null?b:null}isDragging(){return this.dragging}hasStarted(){return this.gestureHasStarted}static inProgress(){const a=getAllWorkspaces$$module$build$src$core$common();\nfor(let b=0,c;c=a[b];b++)if(c.currentGesture_)return!0;return!1}},module$build$src$core$gesture={};module$build$src$core$gesture.Gesture=Gesture$$module$build$src$core$gesture;var Grid$$module$build$src$core$grid=class{constructor(a,b){this.pattern=a;this.scale=1;let c;this.spacing=(c=b.spacing)!=null?c:0;let d;this.length=(d=b.length)!=null?d:1;this.line2=(this.line1=a.firstChild)&&this.line1.nextSibling;let e;this.snapToGrid=(e=b.snap)!=null?e:!1}setSpacing(a){this.spacing=a;this.update(this.scale)}getSpacing(){return this.spacing}setLength(a){this.length=a;this.update(this.scale)}getLength(){return this.length}setSnapToGrid(a){this.snapToGrid=a}shouldSnap(){return this.snapToGrid}getPatternId(){return this.pattern.id}update(a){this.scale=\na;var b=this.spacing*a;this.pattern.setAttribute(\"width\",`${b}`);this.pattern.setAttribute(\"height\",`${b}`);b=Math.floor(this.spacing/2)+.5;let c=b-this.length/2,d=b+this.length/2;b*=a;c*=a;d*=a;this.setLineAttributes(this.line1,a,c,d,b,b);this.setLineAttributes(this.line2,a,b,b,c,d)}setLineAttributes(a,b,c,d,e,f){a&&(a.setAttribute(\"stroke-width\",`${b}`),a.setAttribute(\"x1\",`${c}`),a.setAttribute(\"y1\",`${e}`),a.setAttribute(\"x2\",`${d}`),a.setAttribute(\"y2\",`${f}`))}moveTo(a,b){this.pattern.setAttribute(\"x\",\n`${a}`);this.pattern.setAttribute(\"y\",`${b}`)}alignXY(a){var b=this.getSpacing();const c=b/2,d=Math.round(Math.round((a.x-c)/b)*b+c);b=Math.round(Math.round((a.y-c)/b)*b+c);return d===a.x&&b===a.y?a:new Coordinate$$module$build$src$core$utils$coordinate(d,b)}static createDom(a,b,c,d){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATTERN,{id:\"blocklyGridPattern\"+a,patternUnits:\"userSpaceOnUse\"},c);let e,f;if(((e=b.length)!=null?e:1)>0&&((f=b.spacing)!=null?\nf:0)>0){createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{stroke:b.colour},a);let g;(g=b.length)!=null&&g&&createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{stroke:b.colour},a)}else createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{},a);d&&d.style.setProperty(\"--blocklyGridPattern\",`url(#${a.id})`);return a}},module$build$src$core$grid={};\nmodule$build$src$core$grid.Grid=Grid$$module$build$src$core$grid;var module$build$src$core$interfaces$i_autohideable={};module$build$src$core$interfaces$i_autohideable.isAutoHideable=isAutoHideable$$module$build$src$core$interfaces$i_autohideable;var LayerManager$$module$build$src$core$layer_manager=class{constructor(a){this.workspace=a;this.layers=new Map;if(a=a.getInjectionDiv())this.dragLayer=this.createDragLayer(a),this.animationLayer=this.createAnimationLayer(a);a=this.createLayer(BLOCK$$module$build$src$core$layers);addClass$$module$build$src$core$utils$dom(a,\"blocklyBlockCanvas\");a=this.createLayer(BUBBLE$$module$build$src$core$layers);addClass$$module$build$src$core$utils$dom(a,\"blocklyBubbleCanvas\")}createDragLayer(a){const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,\n{\"class\":\"blocklyBlockDragSurface\",xmlns:SVG_NS$$module$build$src$core$utils$dom,\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\"});a.append(b);return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},b)}createAnimationLayer(a){const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{\"class\":\"blocklyAnimationLayer\",xmlns:SVG_NS$$module$build$src$core$utils$dom,\n\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\"});a.append(b);return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},b)}appendToAnimationLayer(a){let b;const c=(b=this.dragLayer)==null?void 0:b.getAttribute(\"transform\");if(c){let e;(e=this.animationLayer)==null||e.setAttribute(\"transform\",c)}let d;(d=this.animationLayer)==null||d.appendChild(a.getSvgRoot())}translateLayers(a,b){a=\n`translate(${a.x}, ${a.y}) scale(${b})`;let c;(c=this.dragLayer)==null||c.setAttribute(\"transform\",a);for(const [,d]of this.layers)d.setAttribute(\"transform\",a)}moveToDragLayer(a){let b;(b=this.dragLayer)==null||b.appendChild(a.getSvgRoot());a.canBeFocused()&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}moveOffDragLayer(a,b){this.append(a,b);a.canBeFocused()&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}append(a,b){this.layers.has(b)||this.createLayer(b);\na=a.getSvgRoot();let c;if(((c=this.layers.get(b))==null?void 0:c.lastChild)!==a){let d;(d=this.layers.get(b))==null||d.appendChild(a)}}createLayer(a){const b=this.workspace.getSvgGroup(),c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});let d=!1;const e=[...this.layers].sort((f,g)=>f[0]-g[0]);for(const [f,g]of e)if(a{let c;return b instanceof BlockSvg$$module$build$src$core$block_svg&&!((c=b.outputConnection)==null?0:c.targetBlock())||b instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment},\n!0))&&this.setCurNode(a);return a}in(){var a=this.getCurNode();if(!a)return null;(a=this.getNextNode(a,()=>!0,!0))&&this.setCurNode(a);return a}prev(){var a=this.getCurNode();if(!a)return null;(a=this.getPreviousNode(a,b=>{let c;return b instanceof BlockSvg$$module$build$src$core$block_svg&&!((c=b.outputConnection)==null?0:c.targetBlock())||b instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment},!0))&&this.setCurNode(a);return a}out(){var a=this.getCurNode();\nif(!a)return null;(a=this.getPreviousNode(a,()=>!0,!0))&&this.setCurNode(a);return a}atEndOfLine(){var a=this.getCurNode();if(!a)return!1;const b=this.getNextNode(a,()=>!0,!0);a=this.getNextNode(a,c=>{let d;return c instanceof BlockSvg$$module$build$src$core$block_svg&&!((d=c.outputConnection)==null?0:d.targetBlock())},!0);return b===a}getNextNodeImpl(a,b,c=new Set){if(!a||c.has(a))return null;let d=this.workspace.getNavigator().getFirstChild(a)||this.workspace.getNavigator().getNextSibling(a);for(var e=\na;e&&!d;){e=this.workspace.getNavigator().getParent(e);if(!e)break;d=this.workspace.getNavigator().getNextSibling(e)}return b(d)?d:d?(c.add(a),this.getNextNodeImpl(d,b,c)):null}getNextNode(a,b,c){return!a||!c&&this.getLastNode()===a?null:this.getNextNodeImpl(a,b)}getPreviousNodeImpl(a,b,c=new Set){if(!a||c.has(a))return null;const d=this.getRightMostChild(this.workspace.getNavigator().getPreviousSibling(a),a)||this.workspace.getNavigator().getParent(a);return b(d)?d:d?(c.add(a),this.getPreviousNodeImpl(d,\nb,c)):null}getPreviousNode(a,b,c){return!a||!c&&this.getFirstNode()===a?null:this.getPreviousNodeImpl(a,b)}getRightMostChild(a,b){if(!a)return a;let c=this.workspace.getNavigator().getFirstChild(a);if(!c||c===b)return a;for(a=c;a&&a!==b;a=this.workspace.getNavigator().getNextSibling(c))c=a;return this.getRightMostChild(c,b)}preDelete(a){var b=this.getCurNode();b=b?[b]:[];var c;let d,e;const f=(e=(c=a.previousConnection)==null?void 0:c.targetConnection)!=null?e:(d=a.outputConnection)==null?void 0:\nd.targetConnection;f&&b.push(f);(c=a.getNextBlock())&&b.push(c);(a=a.getParent())&&b.push(a);b.push(this.workspace);this.potentialNodes=b}postDelete(){const a=this.potentialNodes;this.potentialNodes=null;if(!a)throw Error(\"must call preDelete first\");for(const b of a){let c;if((c=this.getSourceBlockFromNode(b))==null||!c.disposed){this.setCurNode(b);return}}throw Error(\"no valid nodes in this.potentialNodes\");}getCurNode(){return $.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()}setCurNode(a){$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}getFirstNode(){return this.workspace.getNavigator().getFirstChild(this.workspace)}getLastNode(){const a=\nthis.getFirstNode();return this.getPreviousNode(a,()=>!0,!0)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.CURSOR,DEFAULT$$module$build$src$core$registry,LineCursor$$module$build$src$core$keyboard_nav$line_cursor);var module$build$src$core$keyboard_nav$line_cursor={};module$build$src$core$keyboard_nav$line_cursor.LineCursor=LineCursor$$module$build$src$core$keyboard_nav$line_cursor;var MarkerManager$$module$build$src$core$marker_manager=class{constructor(a){this.workspace=a;this.markers=new Map;this.cursor=new LineCursor$$module$build$src$core$keyboard_nav$line_cursor(this.workspace)}registerMarker(a,b){this.markers.has(a)&&this.unregisterMarker(a);this.markers.set(a,b)}unregisterMarker(a){const b=this.markers.get(a);if(b)b.dispose(),this.markers.delete(a);else throw Error(\"Marker with ID \"+a+\" does not exist. Can only unregister markers that exist.\");}getCursor(){return this.cursor}getMarker(a){return this.markers.get(a)||\nnull}setCursor(a){this.cursor=a}dispose(){const a=Object.keys(this.markers);for(let b=0,c;c=a[b];b++)this.unregisterMarker(c);this.markers.clear();this.cursor.dispose()}};MarkerManager$$module$build$src$core$marker_manager.LOCAL_MARKER=\"local_marker_1\";var module$build$src$core$marker_manager={};module$build$src$core$marker_manager.MarkerManager=MarkerManager$$module$build$src$core$marker_manager;var module$build$src$core$icons={};module$build$src$core$icons.CommentIcon=CommentIcon$$module$build$src$core$icons$comment_icon;module$build$src$core$icons.Icon=Icon$$module$build$src$core$icons$icon;module$build$src$core$icons.IconType=IconType$$module$build$src$core$icons$icon_types;module$build$src$core$icons.MutatorIcon=$.MutatorIcon$$module$build$src$core$icons$mutator_icon;module$build$src$core$icons.WarningIcon=WarningIcon$$module$build$src$core$icons$warning_icon;\nmodule$build$src$core$icons.exceptions=module$build$src$core$icons$exceptions;module$build$src$core$icons.registry=module$build$src$core$icons$registry;var module$build$src$core$interfaces$i_procedure_block={};module$build$src$core$interfaces$i_procedure_block.isProcedureBlock=isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block;$.Names$$module$build$src$core$names=class{constructor(a,b){this.db=new Map;this.dbReverse=new Set;this.variableMap=null;this.variablePrefix=b||\"\";this.reservedWords=new Set(a?a.split(\",\"):[])}reset(){this.db.clear();this.dbReverse.clear();this.variableMap=null}setVariableMap(a){this.variableMap=a}getNameForUserVariable(a){return this.variableMap?(a=this.variableMap.getVariableById(a))?a.getName():null:(console.warn(\"Deprecated call to Names.prototype.getName without defining a variable map. To fix, add the following code in your generator's init() function:\\nBlockly.YourGeneratorName.nameDB_.setVariableMap(workspace.getVariableMap());\"),\nnull)}populateVariables(a){a=$.allUsedVarModels$$module$build$src$core$variables(a);for(let b=0;b=1}isHat(a){return(a.type&this.HAT)>=1}isIcon(a){return(a.type&\nthis.ICON)>=1}isSpacer(a){return(a.type&this.SPACER)>=1}isInRowSpacer(a){return(a.type&this.IN_ROW_SPACER)>=1}isSpacerRow(a){return(a.type&this.BETWEEN_ROW_SPACER)>=1}isInput(a){return(a.type&this.INPUT)>=1}isExternalInput(a){return(a.type&this.EXTERNAL_VALUE_INPUT)>=1}isInlineInput(a){return(a.type&this.INLINE_INPUT)>=1}isStatementInput(a){return(a.type&this.STATEMENT_INPUT)>=1}isPreviousConnection(a){return(a.type&this.PREVIOUS_CONNECTION)>=1}isNextConnection(a){return(a.type&this.NEXT_CONNECTION)>=\n1}isPreviousOrNextConnection(a){return this.isPreviousConnection(a)||this.isNextConnection(a)}isRoundCorner(a){return(a.type&this.LEFT_ROUND_CORNER)>=1||(a.type&this.RIGHT_ROUND_CORNER)>=1}isLeftRoundedCorner(a){return this.isRoundCorner(a)&&(a.type&this.LEFT_ROUND_CORNER)>=1}isRightRoundedCorner(a){return this.isRoundCorner(a)&&(a.type&this.RIGHT_ROUND_CORNER)>=1}isLeftSquareCorner(a){return(a.type&this.LEFT_SQUARE_CORNER)>=1}isRightSquareCorner(a){return(a.type&this.RIGHT_SQUARE_CORNER)>=1}isCorner(a){return(a.type&\nthis.CORNER)>=1}isJaggedEdge(a){return(a.type&this.JAGGED_EDGE)>=1}isRow(a){return(a.type&this.ROW)>=1}isBetweenRowSpacer(a){return(a.type&this.BETWEEN_ROW_SPACER)>=1}isTopRow(a){return(a.type&this.TOP_ROW)>=1}isBottomRow(a){return(a.type&this.BOTTOM_ROW)>=1}isTopOrBottomRow(a){return this.isTopRow(a)||this.isBottomRow(a)}isInputRow(a){return(a.type&this.INPUT_ROW)>=1}},Types$$module$build$src$core$renderers$measurables$types=new TypesContainer$$module$build$src$core$renderers$measurables$types,module$build$src$core$renderers$measurables$types=\n{Types:Types$$module$build$src$core$renderers$measurables$types};var Measurable$$module$build$src$core$renderers$measurables$base=class{constructor(a){this.centerline=this.xPos=this.height=this.width=0;this.constants_=a;this.type=Types$$module$build$src$core$renderers$measurables$types.NONE;this.notchOffset=this.constants_.NOTCH_OFFSET_LEFT}},module$build$src$core$renderers$measurables$base={};module$build$src$core$renderers$measurables$base.Measurable=Measurable$$module$build$src$core$renderers$measurables$base;var Row$$module$build$src$core$renderers$measurables$row=class{constructor(a){this.elements=[];this.xPos=this.yPos=this.widthWithConnectedBlocks=this.minWidth=this.minHeight=this.width=this.height=0;this.hasStatement=this.hasExternalInput=!1;this.statementEdge=0;this.hasJaggedEdge=this.hasDummyInput=this.hasInlineInput=!1;this.align=null;this.constants_=a;this.type=Types$$module$build$src$core$renderers$measurables$types.ROW;this.notchOffset=this.constants_.NOTCH_OFFSET_LEFT}getLastInput(){for(let a=\nthis.elements.length-1;a>=0;a--){const b=this.elements[a];if(Types$$module$build$src$core$renderers$measurables$types.isInput(b))return b}return null}measure(){throw Error(\"Unexpected attempt to measure a base Row.\");}startsWithElemSpacer(){return!0}endsWithElemSpacer(){return!0}getFirstSpacer(){for(let a=0;a=0;a--){const b=this.elements[a];if(Types$$module$build$src$core$renderers$measurables$types.isInRowSpacer(b))return b}return null}},module$build$src$core$renderers$measurables$row={};module$build$src$core$renderers$measurables$row.Row=Row$$module$build$src$core$renderers$measurables$row;var BottomRow$$module$build$src$core$renderers$measurables$bottom_row=class extends Row$$module$build$src$core$renderers$measurables$row{constructor(a){super(a);this.hasNextConnection=!1;this.connection=null;this.baseline=this.descenderHeight=0;this.type|=Types$$module$build$src$core$renderers$measurables$types.BOTTOM_ROW}hasLeftSquareCorner(a){return!!a.outputConnection||!!a.getNextBlock()}hasRightSquareCorner(a){return!0}measure(){let a=0,b=0,c=0;for(let d=0;drect,`,`${a} .blocklyEditableField>rect {`,`fill: ${this.FIELD_BORDER_RECT_COLOUR};`,\"fill-opacity: .6;\",\"stroke: none;\",\"}\",`${a} .blocklyNonEditableField>text,`,`${a} .blocklyEditableField>text {`,\n\"fill: #000;\",\"}\",`${a} .blocklyFlyoutLabelText {`,\"fill: #000;\",\"}\",`${a} .blocklyText.blocklyBubbleText {`,\"fill: #000;\",\"}\",`${a} .blocklyEditableField:not(.blocklyEditing):hover>rect {`,\"stroke: #fff;\",\"stroke-width: 2;\",\"}\",`${a} .blocklyHtmlInput {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,`font-weight: ${this.FIELD_TEXT_FONTWEIGHT};`,\"}\",`${a} .blocklySelected>.blocklyPath {`,\"stroke: #fc3;\",\"stroke-width: 3px;\",\"}\",`${a} .blocklyHighlightedConnectionPath {`,\"stroke: #fc3;\",\"}\",`${a} .blocklyReplaceable .blocklyPath {`,\n\"fill-opacity: .5;\",\"}\",`${a} .blocklyReplaceable .blocklyPathLight,`,`${a} .blocklyReplaceable .blocklyPathDark {`,\"display: none;\",\"}\",`${a} .blocklyInsertionMarker>.blocklyPath {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\"stroke: none;\",\"}\"]}},module$build$src$core$renderers$common$constants={};module$build$src$core$renderers$common$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$common$constants;\nmodule$build$src$core$renderers$common$constants.isDynamicShape=isDynamicShape$$module$build$src$core$renderers$common$constants;module$build$src$core$renderers$common$constants.isNotch=isNotch$$module$build$src$core$renderers$common$constants;module$build$src$core$renderers$common$constants.isPuzzleTab=isPuzzleTab$$module$build$src$core$renderers$common$constants;var Drawer$$module$build$src$core$renderers$common$drawer=class{constructor(a,b){this.inlinePath_=this.outlinePath_=\"\";this.block_=a;this.info_=b;this.topLeft_=a.getRelativeToSurfaceXY();this.constants_=b.getRenderer().getConstants()}draw(){this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();this.block_.pathObject.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);this.info_.RTL&&this.block_.pathObject.flipRTL();this.recordSizeOnBlock_()}recordSizeOnBlock_(){this.block_.height=\nthis.info_.height;this.block_.width=this.info_.widthWithChildren;this.block_.childlessWidth=this.info_.width}drawOutline_(){this.drawTop_();for(let a=1;a0&&this.addAlignmentPadding_(c,a);Types$$module$build$src$core$renderers$measurables$types.isTopOrBottomRow(c)&&(c.widthWithConnectedBlocks=c.width)}}getDesiredRowWidth_(a){return this.width-this.startX}addAlignmentPadding_(a,\nb){const c=a.getFirstSpacer(),d=a.getLastSpacer();if(a.hasExternalInput||a.hasStatement)a.widthWithConnectedBlocks+=b;if(a.align===$.Align$$module$build$src$core$inputs$align.LEFT&&d)d.width+=b;else if(a.align===$.Align$$module$build$src$core$inputs$align.CENTRE&&c&&d)c.width+=b/2,d.width+=b/2;else if(a.align===$.Align$$module$build$src$core$inputs$align.RIGHT&&c)c.width+=b;else if(d)d.width+=b;else return;a.width+=b}alignStatementRow_(a){const b=a.getLastInput();if(b){var c=a.width-b.width,d=this.statementEdge;\nc=d-c;c>0&&this.addAlignmentPadding_(a,c);c=a.width;d=this.getDesiredRowWidth_(a);b.width+=d-c;b.height=Math.max(b.height,a.height);a.width+=d-c;a.widthWithConnectedBlocks=Math.max(a.width,this.statementEdge+a.connectedBlockWidths)}}addRowSpacing_(){const a=this.rows;this.rows=[];for(let b=0;b=0;d--)c[d].element===a&&c.splice(d,1);c.length||this.componentDB.delete(b)}}dispose(){this.subscribedWorkspaces.length=0;this.componentDB.clear()}},module$build$src$core$theme_manager={};module$build$src$core$theme_manager.ThemeManager=ThemeManager$$module$build$src$core$theme_manager;var CATEGORY_NAME$$module$build$src$core$variables_dynamic=\"VARIABLE_DYNAMIC\",onCreateVariableButtonClick_String$$module$build$src$core$variables_dynamic=stringButtonClickHandler$$module$build$src$core$variables_dynamic,onCreateVariableButtonClick_Number$$module$build$src$core$variables_dynamic=numberButtonClickHandler$$module$build$src$core$variables_dynamic,onCreateVariableButtonClick_Colour$$module$build$src$core$variables_dynamic=colourButtonClickHandler$$module$build$src$core$variables_dynamic,\nmodule$build$src$core$variables_dynamic={CATEGORY_NAME:CATEGORY_NAME$$module$build$src$core$variables_dynamic};module$build$src$core$variables_dynamic.flyoutCategory=flyoutCategory$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.flyoutCategoryBlocks=flyoutCategoryBlocks$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.internalFlyoutCategory=internalFlyoutCategory$$module$build$src$core$variables_dynamic;\nmodule$build$src$core$variables_dynamic.onCreateVariableButtonClick_Colour=colourButtonClickHandler$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.onCreateVariableButtonClick_Number=numberButtonClickHandler$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.onCreateVariableButtonClick_String=stringButtonClickHandler$$module$build$src$core$variables_dynamic;var ConnectionChecker$$module$build$src$core$connection_checker=class{canConnect(a,b,c,d){return this.canConnectWithReason(a,b,c,d)===Connection$$module$build$src$core$connection.CAN_CONNECT}canConnectWithReason(a,b,c,d){const e=this.doSafetyChecks(a,b);return e!==Connection$$module$build$src$core$connection.CAN_CONNECT?e:this.doTypeChecks(a,b)?c&&!this.doDragChecks(a,b,d||0)?Connection$$module$build$src$core$connection.REASON_DRAG_CHECKS_FAILED:Connection$$module$build$src$core$connection.CAN_CONNECT:\nConnection$$module$build$src$core$connection.REASON_CHECKS_FAILED}getErrorMessage(a,b,c){switch(a){case Connection$$module$build$src$core$connection.REASON_SELF_CONNECTION:return\"Attempted to connect a block to itself.\";case Connection$$module$build$src$core$connection.REASON_DIFFERENT_WORKSPACES:return\"Blocks not on same workspace.\";case Connection$$module$build$src$core$connection.REASON_WRONG_TYPE:return\"Attempt to connect incompatible types.\";case Connection$$module$build$src$core$connection.REASON_TARGET_NULL:return\"Target connection is null.\";\ncase Connection$$module$build$src$core$connection.REASON_CHECKS_FAILED:return\"Connection checks failed. \"+(b+\" expected \"+b.getCheck()+\", found \"+c.getCheck());case Connection$$module$build$src$core$connection.REASON_SHADOW_PARENT:return\"Connecting non-shadow to shadow block.\";case Connection$$module$build$src$core$connection.REASON_DRAG_CHECKS_FAILED:return\"Drag checks failed.\";case Connection$$module$build$src$core$connection.REASON_PREVIOUS_AND_OUTPUT:return\"Block would have an output and a previous connection.\";\ndefault:return\"Unknown connection failure: this should never happen!\"}}doSafetyChecks(a,b){if(!a||!b)return Connection$$module$build$src$core$connection.REASON_TARGET_NULL;let c,d,e;a.isSuperior()?(c=a.getSourceBlock(),d=b.getSourceBlock(),e=b):(d=a.getSourceBlock(),c=b.getSourceBlock(),e=a,a=b);return c===d?Connection$$module$build$src$core$connection.REASON_SELF_CONNECTION:e.type!==OPPOSITE_TYPE$$module$build$src$core$internal_constants[a.type]?Connection$$module$build$src$core$connection.REASON_WRONG_TYPE:\nc.workspace!==d.workspace?Connection$$module$build$src$core$connection.REASON_DIFFERENT_WORKSPACES:c.isShadow()&&!d.isShadow()?Connection$$module$build$src$core$connection.REASON_SHADOW_PARENT:e.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE&&d.previousConnection&&d.previousConnection.isConnected()||e.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT&&d.outputConnection&&d.outputConnection.isConnected()?Connection$$module$build$src$core$connection.REASON_PREVIOUS_AND_OUTPUT:\nConnection$$module$build$src$core$connection.CAN_CONNECT}doTypeChecks(a,b){a=a.getCheck();b=b.getCheck();if(!a||!b)return!0;for(let c=0;cc||b.getSourceBlock().isInsertionMarker())return!1;switch(b.type){case ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT:return this.canConnectToPrevious_(a,b);case ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE:if(b.isConnected()&&\n!b.targetBlock().isInsertionMarker()||a.isConnected())return!1;break;case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:if(b.isConnected()&&!b.targetBlock().isMovable()&&!b.targetBlock().isShadow())return!1;break;case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:if(b.isConnected()&&!a.getSourceBlock().nextConnection&&!b.targetBlock().isShadow()&&b.targetBlock().nextConnection||b.targetBlock()&&!b.targetBlock().isMovable()&&!b.targetBlock().isShadow())return!1;\nbreak;default:return!1}return draggingConnections$$module$build$src$core$common.includes(b)?!1:!0}canConnectToPrevious_(a,b){if(a.targetConnection||draggingConnections$$module$build$src$core$common.includes(b))return!1;if(!b.targetConnection)return!0;a=b.targetBlock();return a.isInsertionMarker()?!a.getPreviousBlock():!1}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_CHECKER,DEFAULT$$module$build$src$core$registry,ConnectionChecker$$module$build$src$core$connection_checker);\nvar module$build$src$core$connection_checker={};module$build$src$core$connection_checker.ConnectionChecker=ConnectionChecker$$module$build$src$core$connection_checker;var Workspace$$module$build$src$core$workspace=class{get isFlyout(){return this.internalIsFlyout}get isMutator(){return this.internalIsMutator}constructor(a){this.isClearing=this.internalIsMutator=this.internalIsFlyout=this.rendered=!1;this.MAX_UNDO=1024;this.connectionDBList=[];this.topBlocks=[];this.topComments=[];this.commentDB=new Map;this.listeners=[];this.undoStack_=[];this.redoStack_=[];this.blockDB=new Map;this.typedBlocksDB=new Map;this.procedureMap=new ObservableProcedureMap$$module$build$src$core$observable_procedure_map;\nthis.readOnly=!1;this.potentialVariableMap=null;this.id=genUid$$module$build$src$core$utils$idgenerator();registerWorkspace$$module$build$src$core$common(this);this.options=a||new Options$$module$build$src$core$options({});this.RTL=!!this.options.RTL;this.horizontalLayout=!!this.options.horizontalLayout;this.toolboxPosition=this.options.toolboxPosition;this.connectionChecker=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_CHECKER,this.options,\n!0))(this);this.variableMap=new (this.getVariableMapClass())(this);this.setIsReadOnly(this.options.readOnly)}dispose(){this.listeners.length=0;this.clear();unregisterWorkpace$$module$build$src$core$common(this)}sortObjects(a,b){const c=d=>({getBoundingRectangle:()=>{const e=d.getRelativeToSurfaceXY();return new Rect$$module$build$src$core$utils$rect(e.y,e.y,e.x,e.x)},moveBy:()=>{}});return this.sortByOrigin(c(a),c(b))}sortByOrigin(a,b){const c=Math.sin(toRadians$$module$build$src$core$utils$math(Workspace$$module$build$src$core$workspace.SCAN_ANGLE))*\n(this.RTL?-1:1);a=a.getBoundingRectangle().getOrigin();b=b.getBoundingRectangle().getOrigin();return a.y+c*a.x-(b.y+c*b.x)}addTopBlock(a){this.topBlocks.push(a)}removeTopBlock(a){if(!removeElem$$module$build$src$core$utils$array(this.topBlocks,a))throw Error(\"Block not present in workspace's list of top-most blocks.\");}getTopBlocks(a=!1){const b=[].concat(this.topBlocks);a&&b.length>1&&b.sort(this.sortObjects.bind(this));return b}addTypedBlock(a){this.typedBlocksDB.has(a.type)||this.typedBlocksDB.set(a.type,\n[]);this.typedBlocksDB.get(a.type).push(a)}removeTypedBlock(a){removeElem$$module$build$src$core$utils$array(this.typedBlocksDB.get(a.type),a);this.typedBlocksDB.get(a.type).length||this.typedBlocksDB.delete(a.type)}getBlocksByType(a,b=!1){if(!this.typedBlocksDB.has(a))return[];a=this.typedBlocksDB.get(a).slice(0);b&&a&&a.length>1&&a.sort(this.sortObjects.bind(this));return a.filter(c=>!c.isInsertionMarker())}addTopComment(a){this.topComments.push(a);this.commentDB.has(a.id)&&console.warn('Overriding an existing comment on this workspace, with id \"'+\na.id+'\"');this.commentDB.set(a.id,a)}removeTopComment(a){if(!removeElem$$module$build$src$core$utils$array(this.topComments,a))throw Error(\"Comment not present in workspace's list of top-most comments.\");this.commentDB.delete(a.id)}getTopComments(a=!1){const b=[].concat(this.topComments);a&&b.length>1&&b.sort(this.sortObjects.bind(this));return b}getAllBlocks(a=!1){if(a){var b=this.getTopBlocks(!0);a=[];for(let c=0;c!c.isInsertionMarker())}clear(){this.isClearing=!0;try{const a=$.getGroup$$module$build$src$core$events$utils();for(a||$.setGroup$$module$build$src$core$events$utils(!0);this.topBlocks.length;)this.topBlocks[0].dispose(!1);for(;this.topComments.length;)this.topComments[this.topComments.length-1].dispose();$.setGroup$$module$build$src$core$events$utils(a);this.isFlyout||this.variableMap.clear();this.potentialVariableMap&&this.potentialVariableMap.clear()}finally{this.isClearing=\n!1}}renameVariableById(a,b){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.renameVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().renameVariable\");(a=this.variableMap.getVariableById(a))&&this.variableMap.renameVariable(a,b)}createVariable(a,b,c){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.createVariable\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().createVariable\");return this.variableMap.createVariable(a,b!=null?b:void 0,c!=null?c:void 0)}getVariableUsesById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariableUsesById\",\n\"v12\",\"v13\",\"Blockly.Variables.getVariableUsesById\");return getVariableUsesById$$module$build$src$core$variables(this,a)}deleteVariableById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.deleteVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().deleteVariable\");const b=this.variableMap.getVariableById(a);b?$.deleteVariable$$module$build$src$core$variables(this,b):console.warn(`Can't delete non-existent variable: ${a}`)}getVariable(a,b){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariable\",\n\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariable\");return this.variableMap.getVariable(a,b)}getVariableById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariableById\");return this.variableMap.getVariableById(a)}getVariablesOfType(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariablesOfType\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariablesOfType\");return this.variableMap.getVariablesOfType(a!=\nnull?a:\"\")}getAllVariables(){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getAllVariables\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getAllVariables\");return this.variableMap.getAllVariables()}getAllVariableNames(){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getAllVariableNames\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getAllVariables\");return this.variableMap.getAllVariables().map(a=>a.getName())}getWidth(){return 0}newBlock(a,b){throw Error(\"The implementation of newBlock should be monkey-patched in by blockly.ts\");\n}newComment(a){throw Error(\"The implementation of newComment should be monkey-patched in by blockly.ts\");}remainingCapacity(){return isNaN(this.options.maxBlocks)?Infinity:this.options.maxBlocks-this.getAllBlocks(!1).length}remainingCapacityOfType(a){return this.options.maxInstances?(this.options.maxInstances[a]!==void 0?this.options.maxInstances[a]:Infinity)-this.getBlocksByType(a,!1).length:Infinity}isCapacityAvailable(a){if(!this.hasBlockLimits())return!0;let b=0;for(const c in a){if(a[c]>this.remainingCapacityOfType(c))return!1;\nb+=a[c]}return b>this.remainingCapacity()?!1:!0}hasBlockLimits(){return this.options.maxBlocks!==Infinity||!!this.options.maxInstances}getUndoStack(){return this.undoStack_}getRedoStack(){return this.redoStack_}undo(a){var b=a?this.redoStack_:this.undoStack_,c=a?this.undoStack_:this.redoStack_;const d=b.pop();if(d){for(var e=[d];b.length&&d.group&&d.group===b[b.length-1].group;){const f=b.pop();f&&e.push(f)}for(b=0;bthis.MAX_UNDO&&this.MAX_UNDO>=\n0;)this.undoStack_.shift();for(let b=0;b!!b.getStyleName()));this.refreshToolboxSelection();this.toolbox&&this.toolbox.refreshTheme();this.isVisible()&&this.setVisible(!0);a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.THEME_CHANGE))(this.getTheme().name,this.id);fire$$module$build$src$core$events$utils(a)}updateBlockStyles(a){for(let b=0,c;c=a[b];b++){const d=\nc.getStyleName();d&&c.setStyle(d)}}getInverseScreenCTM(){if(this.inverseScreenCTMDirty){const a=this.getParentSvg().getScreenCTM();a&&(this.inverseScreenCTM=a.inverse(),this.inverseScreenCTMDirty=!1)}return this.inverseScreenCTM}updateInverseScreenCTM(){this.inverseScreenCTMDirty=!0}isVisible(){return this.visible}getSvgXY(a){let b=0,c=0,d=1;if(this.getCanvas().contains(a)||this.getBubbleCanvas().contains(a))d=this.scale;do{const e=getRelativeXY$$module$build$src$core$utils$svg_math(a);if(a===this.getCanvas()||\na===this.getBubbleCanvas())d=1;b+=e.x*d;c+=e.y*d;a=a.parentNode}while(a&&a!==this.getParentSvg()&&a!==this.getInjectionDiv());return new Coordinate$$module$build$src$core$utils$coordinate(b,c)}getCachedParentSvgSize(){const a=this.cachedParentSvgSize;return new Size$$module$build$src$core$utils$size(a.width,a.height)}getOriginOffsetInPixels(){return getInjectionDivXY$$module$build$src$core$utils$svg_math(this.getCanvas())}getInjectionDiv(){if(!this.injectionDiv){let a=this.svgGroup_;for(;a;){if((\" \"+\n(a.getAttribute(\"class\")||\"\")+\" \").includes(\" injectionDiv \")){this.injectionDiv=a;break}a=a.parentNode}}return this.injectionDiv}getSvgGroup(){return this.svgGroup_}getBlockCanvas(){return this.getCanvas()}setResizeHandlerWrapper(a){this.resizeHandlerWrapper=a}createDom(a,b){this.injectionDiv||(this.injectionDiv=b!=null?b:null);this.svgGroup_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyWorkspace\",id:this.id});b&&setState$$module$build$src$core$utils$aria(this.svgGroup_,\nState$$module$build$src$core$utils$aria.LABEL,$.Msg$$module$build$src$core$msg.WORKSPACE_ARIA_LABEL);a&&(this.svgBackground_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{height:\"100%\",width:\"100%\",\"class\":a},this.svgGroup_),a===\"blocklyMainBackground\"&&this.grid?this.svgBackground_.style.fill=\"var(--blocklyGridPattern)\":this.themeManager_.subscribe(this.svgBackground_,\"workspaceBackgroundColour\",\"fill\"));this.layerManager=new LayerManager$$module$build$src$core$layer_manager(this);\nthis.svgBlockCanvas_=this.layerManager.getBlockLayer();this.svgBubbleCanvas_=this.layerManager.getBubbleLayer();this.isFlyout||(conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"pointerdown\",this,this.onMouseDown,!1),this.dummyWheelListener=()=>{},document.body.addEventListener(\"wheel\",this.dummyWheelListener),conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"wheel\",this,this.onMouseWheel));this.options.hasCategories&&(this.toolbox=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX,\nthis.options,!0))(this));this.grid&&this.grid.update(this.scale);this.recordDragTargets();(a=getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CURSOR,this.options))&&this.markerManager.setCursor(new a(this));a=this.options.parentWorkspace===null;this.renderer.createDom(this.svgGroup_,this.getTheme(),a?this.getInjectionDiv():void 0);$.getFocusManager$$module$build$src$core$focus_manager().registerTree(this,!!this.injectionDiv||this.isFlyout);return this.svgGroup_}dispose(){this.rendered=\n!1;this.currentGesture_&&this.currentGesture_.cancel();this.svgGroup_&&removeNode$$module$build$src$core$utils$dom(this.svgGroup_);this.toolbox&&(this.toolbox.dispose(),this.toolbox=null);this.flyout&&(this.flyout.dispose(),this.flyout=null);this.trashcan&&(this.trashcan.dispose(),this.trashcan=null);this.scrollbar&&(this.scrollbar.dispose(),this.scrollbar=null);this.zoomControls_&&this.zoomControls_.dispose();this.audioManager&&this.audioManager.dispose();this.grid&&(this.grid=null);this.renderer.dispose();\nthis.markerManager.dispose();super.dispose();this.themeManager_&&(this.themeManager_.unsubscribeWorkspace(this),this.themeManager_.unsubscribe(this.svgBackground_),this.options.parentWorkspace||this.themeManager_.dispose());this.connectionDBList.length=0;this.toolboxCategoryCallbacks.clear();this.flyoutButtonCallbacks.clear();if(!this.options.parentWorkspace){const a=this.getParentSvg();a&&a.parentNode&&removeNode$$module$build$src$core$utils$dom(a.parentNode)}this.resizeHandlerWrapper&&(unbind$$module$build$src$core$browser_events(this.resizeHandlerWrapper),\nthis.resizeHandlerWrapper=null);this.dummyWheelListener&&(document.body.removeEventListener(\"wheel\",this.dummyWheelListener),this.dummyWheelListener=null);$.getFocusManager$$module$build$src$core$focus_manager().isRegistered(this)&&$.getFocusManager$$module$build$src$core$focus_manager().unregisterTree(this)}addTrashcan(){this.trashcan=WorkspaceSvg$$module$build$src$core$workspace_svg.newTrashcan(this);const a=this.trashcan.createDom();this.svgGroup_.insertBefore(a,this.getCanvas())}static newTrashcan(a){throw Error(\"The implementation of newTrashcan should be monkey-patched in by blockly.ts\");\n}addZoomControls(){this.zoomControls_=new ZoomControls$$module$build$src$core$zoom_controls(this);const a=this.zoomControls_.createDom();this.svgGroup_.appendChild(a)}copyOptionsForFlyout(){return new Options$$module$build$src$core$options({parentWorkspace:this,rtl:this.RTL,oneBasedIndex:this.options.oneBasedIndex,horizontalLayout:this.horizontalLayout,renderer:this.options.renderer,rendererOverrides:this.options.rendererOverrides,plugins:this.options.plugins,modalInputs:this.options.modalInputs,\nmove:{scrollbars:!0}})}addFlyout(a){const b=this.copyOptionsForFlyout();b.toolboxPosition=this.options.toolboxPosition;this.flyout=this.horizontalLayout?new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,this.options,!0))(b):new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,this.options,!0))(b);this.flyout.autoClose=!1;this.flyout.getWorkspace().setVisible(!0);\nreturn this.flyout.createDom(a)}getFlyout(a){return this.flyout||a?this.flyout:this.toolbox?this.toolbox.getFlyout():null}getToolbox(){return this.toolbox}updateScreenCalculations(){this.updateInverseScreenCTM();this.recordDragTargets()}resizeContents(){this.resizesEnabled&&this.rendered&&(this.scrollbar&&this.scrollbar.resize(),this.updateInverseScreenCTM())}resize(){this.toolbox?this.toolbox.position():this.flyout&&this.flyout.position();const a=this.componentManager.getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE,\n!0),b=this.getMetricsManager().getUiMetrics(),c=[];for(let d=0,e;e=a[d];d++){e.position(b,c);const f=e.getBoundingRectangle();f&&c.push(f)}this.scrollbar&&this.scrollbar.resize();this.updateScreenCalculations()}updateScreenCalculationsIfScrolled(){const a=getDocumentScroll$$module$build$src$core$utils$svg_math();Coordinate$$module$build$src$core$utils$coordinate.equals(this.lastRecordedPageScroll,a)||(this.lastRecordedPageScroll=a,this.updateScreenCalculations())}getLayerManager(){return this.layerManager}getCanvas(){return this.layerManager.getBlockLayer()}setCachedParentSvgSize(a,\nb){const c=this.getParentSvg();a!=null&&(this.cachedParentSvgSize.width=a,c.setAttribute(\"data-cached-width\",`${a}`));b!=null&&(this.cachedParentSvgSize.height=b,c.setAttribute(\"data-cached-height\",`${b}`))}getBubbleCanvas(){return this.layerManager.getBubbleLayer()}getParentSvg(){if(!this.cachedParentSvg){let a=this.svgGroup_;for(;a;){if(a.tagName===\"svg\"){this.cachedParentSvg=a;break}a=a.parentNode}}return this.cachedParentSvg}maybeFireViewportChangeEvent(){if(isEnabled$$module$build$src$core$events$utils()){var a=\nthis.scale,b=-this.scrollY,c=-this.scrollX;if(!(a===this.oldScale&&Math.abs(b-this.oldTop)<1&&Math.abs(c-this.oldLeft)<1)){var d=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE))(b,c,a,this.id,this.oldScale);this.oldScale=a;this.oldTop=b;this.oldLeft=c;fire$$module$build$src$core$events$utils(d)}}}translate(a,b){let c;(c=this.layerManager)==null||c.translateLayers(new Coordinate$$module$build$src$core$utils$coordinate(a,b),this.scale);let d;\n(d=this.grid)==null||d.moveTo(a,b);this.maybeFireViewportChangeEvent()}getWidth(){const a=this.getMetrics();return a?a.viewWidth/this.scale:0}setVisible(a){this.visible=a;this.svgGroup_&&(this.scrollbar&&this.scrollbar.setContainerVisible(a),this.getFlyout()&&this.getFlyout().setContainerVisible(a),this.getParentSvg().style.display=a?\"block\":\"none\",this.toolbox&&this.toolbox.setVisible(a),a||this.hideChaff(!0))}render(){const a=this.getAllBlocks(!1);for(let b=a.length-1;b>=0;b--)a[b].queueRender();\nthis.getTopBlocks().flatMap(b=>b.getDescendants(!1)).filter(b=>b.isInsertionMarker()).forEach(b=>b.queueRender())}highlightBlock(a,b){if(b===void 0){for(let c=0,d;d=this.highlightedBlocks[c];c++)d.setHighlighted(!1);this.highlightedBlocks.length=0}if(a=a?this.getBlockById(a):null)(b=b===void 0||b)?this.highlightedBlocks.includes(a)||this.highlightedBlocks.push(a):removeElem$$module$build$src$core$utils$array(this.highlightedBlocks,a),a.setHighlighted(b)}variableChangeCallback(a){switch(a.type){case EventType$$module$build$src$core$events$type.VAR_CREATE:case EventType$$module$build$src$core$events$type.VAR_DELETE:case EventType$$module$build$src$core$events$type.VAR_RENAME:case EventType$$module$build$src$core$events$type.VAR_TYPE_CHANGE:this.refreshToolboxSelection()}}refreshToolboxSelection(){const a=\nthis.isFlyout?this.targetWorkspace:this;a&&!a.currentGesture_&&a.toolbox&&a.toolbox.getFlyout()&&a.toolbox.refreshSelection()}recordDragTargets(){const a=this.componentManager.getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET,!0);this.dragTargetAreas=[];for(let b=0,c;c=a[b];b++){const d=c.getClientRect();d&&this.dragTargetAreas.push({component:c,clientRect:d})}}newBlock(a,b){throw Error(\"The implementation of newBlock should be monkey-patched in by blockly.ts\");\n}newComment(a){throw Error(\"The implementation of newComment should be monkey-patched in by blockly.ts\");}getDragTarget(a){for(let b=0,c;c=this.dragTargetAreas[b];b++)if(c.clientRect.contains(a.clientX,a.clientY))return c.component;return null}onMouseDown(a){const b=this.getGesture(a);b&&b.handleWsStart(a,this)}startDrag(a,b){start$$module$build$src$core$utils$drag(this,a,b)}moveDrag(a){return move$$module$build$src$core$utils$drag(this,a)}setKeyboardMoveInProgress(a){this.keyboardMoveInProgress=\na}isDragging(){return this.keyboardMoveInProgress||this.currentGesture_!==null&&this.currentGesture_.isDragging()}isDraggable(){return this.options.moveOptions&&this.options.moveOptions.drag}isMovable(){return this.options.moveOptions&&!!this.options.moveOptions.scrollbars||this.options.moveOptions&&this.options.moveOptions.wheel||this.options.moveOptions&&this.options.moveOptions.drag||this.options.zoomOptions&&this.options.zoomOptions.wheel||this.options.zoomOptions&&this.options.zoomOptions.pinch}isMovableHorizontally(){const a=\n!!this.scrollbar;return this.isMovable()&&(!a||a&&this.scrollbar.canScrollHorizontally())}isMovableVertically(){const a=!!this.scrollbar;return this.isMovable()&&(!a||a&&this.scrollbar.canScrollVertically())}onMouseWheel(a){if(Gesture$$module$build$src$core$gesture.inProgress())a.preventDefault(),a.stopPropagation();else{var b=this.options.zoomOptions&&this.options.zoomOptions.wheel,c=this.options.moveOptions&&this.options.moveOptions.wheel;if(b||c){var d=getScrollDeltaPixels$$module$build$src$core$browser_events(a);\nif(MAC$$module$build$src$core$utils$useragent)var e=a.metaKey;b&&(a.ctrlKey||e||!c)?(d=-d.y/50,b=mouseToSvg$$module$build$src$core$browser_events(a,this.getParentSvg(),this.getInverseScreenCTM()),this.zoom(b.x,b.y,d)):(b=this.scrollX-d.x,c=this.scrollY-d.y,a.shiftKey&&!d.x&&(b=this.scrollX-d.y,c=this.scrollY),this.scroll(b,c));a.preventDefault()}}}getBlocksBoundingBox(){const a=this.getTopBoundedElements();if(!a.length)return new Rect$$module$build$src$core$utils$rect(0,0,0,0);const b=a[0].getBoundingRectangle();\nfor(let d=1;db.bottom&&(b.bottom=c.bottom),c.leftb.right&&(b.right=c.right))}return b}cleanUp(){this.setResizesEnabled(!1);const a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);var b=this.getTopBlocks(!0),c=b.filter(g=>g.isMovable());const d=b.filter(g=>!g.isMovable()).map(g=>\ng.getBoundingRectangle());b=function(g){for(const h of d)if(g.intersects(h))return h;return null};var e=0;const f=this.renderer.getConstants().MIN_BLOCK_HEIGHT;for(const g of c){c=g.getBoundingRectangle();g.moveBy(-c.left,e-c.top,[\"cleanup\"]);g.snapToGrid();c=g.getBoundingRectangle();for(e=b(c);e!=null;)e=e.top+e.getHeight()+f,g.moveBy(0,e-c.top,[\"cleanup\"]),g.snapToGrid(),c=g.getBoundingRectangle(),e=b(c);e=g.getRelativeToSurfaceXY().y+g.getHeightWidth().height+f}$.setGroup$$module$build$src$core$events$utils(a);\nthis.setResizesEnabled(!0)}showContextMenu(a){if(!this.isReadOnly()&&!this.isFlyout){var b=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({workspace:this,focusedNode:this},a);this.configureContextMenu&&this.configureContextMenu(b,a);var c=a instanceof PointerEvent?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this,new Coordinate$$module$build$src$core$utils$coordinate(5,\n5));show$$module$build$src$core$contextmenu(a,b,this.RTL,this,c)}}updateToolbox(a){if(a=convertToolboxDefToJson$$module$build$src$core$utils$toolbox(a)){if(!this.options.languageTree)throw Error(\"Existing toolbox is null. Can't create new toolbox.\");if(hasCategories$$module$build$src$core$utils$toolbox(a)){if(!this.toolbox)throw Error(\"Existing toolbox has no categories. Can't change mode.\");this.options.languageTree=a;this.toolbox.render(a)}else{if(!this.flyout)throw Error(\"Existing toolbox has categories. Can't change mode.\");\nthis.options.languageTree=a;this.flyout.show(a)}}else if(this.options.languageTree)throw Error(\"Can't nullify an existing toolbox.\");}markFocused(){this.options.parentWorkspace?this.options.parentWorkspace.markFocused():(setMainWorkspace$$module$build$src$core$common(this),this.getParentSvg().focus({preventScroll:!0}))}zoom(a,b,c){c=Math.pow(this.options.zoomOptions.scaleSpeed,c);const d=this.scale*c;if(this.scale!==d){d>this.options.zoomOptions.maxScale?c=this.options.zoomOptions.maxScale/this.scale:\ndthis.options.zoomOptions.maxScale?a=this.options.zoomOptions.maxScale:this.options.zoomOptions.minScale&&a{if(c.isFlyout){let d;const e=(d=c.targetWorkspace)==null?void 0:d.getFlyout();if(e instanceof Flyout$$module$build$src$core$flyout_base)return e.getFlyoutScale()}return c.getScale()},b=(c,d)=>c.options.parentWorkspace&&c.options.parentWorkspace.getSvgGroup().contains(c.getSvgGroup())?b(c.options.parentWorkspace,d*a(c)):d*a(c);return b(this,1)}scroll(a,b){this.hideChaff(!0);\nconst c=this.getMetrics();a=Math.min(a,-c.scrollLeft);b=Math.min(b,-c.scrollTop);const d=c.scrollTop+Math.max(0,c.scrollHeight-c.viewHeight);a=Math.max(a,-(c.scrollLeft+Math.max(0,c.scrollWidth-c.viewWidth)));b=Math.max(b,-d);this.scrollX=a;this.scrollY=b;this.scrollbar&&this.scrollbar.set(-(a+c.scrollLeft),-(b+c.scrollTop),!1);a+=c.absoluteLeft;b+=c.absoluteTop;this.translate(a,b)}getBlockById(a){return super.getBlockById(a)}getAllBlocks(a=!1){return super.getAllBlocks(a)}getTopBlocks(a=!1){return super.getTopBlocks(a)}addTopBlock(a){this.addTopBoundedElement(a);\nsuper.addTopBlock(a)}removeTopBlock(a){this.removeTopBoundedElement(a);super.removeTopBlock(a)}addTopComment(a){this.addTopBoundedElement(a);super.addTopComment(a)}removeTopComment(a){this.removeTopBoundedElement(a);super.removeTopComment(a)}getTopComments(a=!1){return super.getTopComments(a)}getCommentById(a){return super.getCommentById(a)}getRootWorkspace(){return super.getRootWorkspace()}addTopBoundedElement(a){this.topBoundedElements.push(a)}removeTopBoundedElement(a){removeElem$$module$build$src$core$utils$array(this.topBoundedElements,\na)}getTopBoundedElements(a=!1){const b=[].concat(this.topBoundedElements);a&&b.sort(this.sortByOrigin.bind(this));return b}setResizesEnabled(a){const b=!this.resizesEnabled&&a;this.resizesEnabled=a;b&&this.resizeContents()}clear(){this.setResizesEnabled(!1);super.clear();this.topBoundedElements=[];this.setResizesEnabled(!0)}registerButtonCallback(a,b){if(typeof b!==\"function\")throw TypeError(\"Button callbacks must be functions.\");this.flyoutButtonCallbacks.set(a,b)}getButtonCallback(a){let b;return(b=\nthis.flyoutButtonCallbacks.get(a))!=null?b:null}removeButtonCallback(a){this.flyoutButtonCallbacks.delete(a)}registerToolboxCategoryCallback(a,b){if(typeof b!==\"function\")throw TypeError(\"Toolbox category callbacks must be functions.\");this.toolboxCategoryCallbacks.set(a,b)}getToolboxCategoryCallback(a){return this.toolboxCategoryCallbacks.get(a)||null}removeToolboxCategoryCallback(a){this.toolboxCategoryCallbacks.delete(a)}getGesture(a){if(this.keyboardMoveInProgress)return a.preventDefault(),a.stopPropagation(),\nnull;const b=a.type===\"pointerdown\";let c;b&&((c=this.currentGesture_)==null?0:c.hasStarted())&&(console.warn(\"Tried to start the same gesture twice.\"),this.currentGesture_.cancel());!this.currentGesture_&&b&&(this.currentGesture_=new Gesture$$module$build$src$core$gesture(a,this));return this.currentGesture_}clearGesture(){this.currentGesture_=null}cancelCurrentGesture(){this.currentGesture_&&this.currentGesture_.cancel()}getAudioManager(){return this.audioManager}getGrid(){return this.grid}hideChaff(a=\n!1){hide$$module$build$src$core$tooltip();hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv(this);hideWithoutAnimation$$module$build$src$core$dropdowndiv();this.hideComponents(a)}hideComponents(a=!1){this.getComponentManager().getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,!0).forEach(b=>b.autoHide(a))}static setTopLevelWorkspaceMetrics(a){const b=this.getMetrics();typeof a.x===\"number\"&&(this.scrollX=-(b.scrollLeft+(b.scrollWidth-b.viewWidth)*\na.x));typeof a.y===\"number\"&&(this.scrollY=-(b.scrollTop+(b.scrollHeight-b.viewHeight)*a.y));this.translate(this.scrollX+b.absoluteLeft,this.scrollY+b.absoluteTop)}addClass(a){this.injectionDiv&&addClass$$module$build$src$core$utils$dom(this.injectionDiv,a)}removeClass(a){this.injectionDiv&&removeClass$$module$build$src$core$utils$dom(this.injectionDiv,a)}setIsReadOnly(a){super.setIsReadOnly(a);a?this.addClass(\"blocklyReadOnly\"):this.removeClass(\"blocklyReadOnly\")}scrollBoundsIntoView(a,b=10){if(!Gesture$$module$build$src$core$gesture.inProgress()){var c=\nthis.getScale(),d=this.getMetricsManager().getViewMetrics(!0);d=new Rect$$module$build$src$core$utils$rect(d.top,d.top+d.height,d.left,d.left+d.width);if(!(a.left>=d.left&&a.top>=d.top&&a.right<=d.right&&a.bottom<=d.bottom)){a=a.clone();a.top-=b;a.bottom+=b;a.left-=b;a.right+=b;var e=b=0;a.leftd.right&&(b=this.RTL?d.right-a.right:Math.max(d.right-a.right,d.left-a.left));a.topd.bottom&&(e=\nMath.max(d.bottom-a.bottom,d.top-a.top));this.scroll(this.scrollX+b*c,this.scrollY+e*c)}}}getFocusableElement(){return this.svgGroup_}getFocusableTree(){return this.isMutator&&this.options.parentWorkspace||this}onNodeFocus(){}onNodeBlur(){}canBeFocused(){return!0}getRootFocusableNode(){return this}getRestoredFocusableNode(a){if(a)return null;let b;a=(b=this.targetWorkspace)==null?void 0:b.getFlyout();if(this.isFlyout&&a){let d,e;return(e=(d=a.getContents().find(f=>{f=f.getElement();return isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(f)&&\nf.canBeFocused()}))==null?void 0:d.getElement())!=null?e:null}let c;return(c=this.getTopBlocks(!0)[0])!=null?c:null}getNestedTrees(){const a=this.getAllBlocks().map(c=>c.getIcons()).flat().filter(c=>c instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&c.bubbleIsVisible()).map(c=>{let d;return(d=c.getBubble())==null?void 0:d.getWorkspace()}).filter(c=>!!c),b=this.getFlyout(!0);b&&a.push(b.getWorkspace());return a}searchForWorkspaceComment(a){for(const b of this.getTopComments())if(b instanceof\nRenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment&&b.canBeFocused()&&b.getFocusableElement().id===a)return b}lookUpFocusableNode(a){var b;const c=(b=this.targetWorkspace)==null?void 0:b.getFlyout();if(this.isFlyout&&c)for(var d of c.getContents())if(b=d.getElement(),isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(b)&&b.canBeFocused()&&b.getFocusableElement().id===a)return b;d=a.indexOf(\"_field_\");b=a.indexOf(\"_connection_\");if(d!==-1){var e=a.substring(0,\nd);if(e=this.getBlockById(e))for(var f of e.getFields())if(f.canBeFocused()&&f.getFocusableElement().id===a)return f;return null}if(b!==-1){e=a.substring(0,b);if(e=this.getBlockById(e))for(const h of e.getConnections_(!0))if(h.id===a)return h;return null}f=Math.max(a.indexOf(COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor),a.indexOf(COMMENT_COLLAPSE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$collapse_comment_bar_button),a.indexOf(COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button));\nif(f!==-1&&(f=a.substring(0,f),f=this.searchForWorkspaceComment(f))){if(a.indexOf(COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor)>-1)return f.getEditorFocusableNode();var g;return(g=f.view.getCommentBarButtons().find(h=>h.getFocusableElement().id.includes(a)))!=null?g:null}if((g=this.getAllBlocks(!1).find(h=>h.getFocusableElement().id===a))||(g=this.searchForWorkspaceComment(a)))return g;g=this.getAllBlocks().map(h=>h.getIcons()).flat();for(e of g){if(e.canBeFocused()&&\ne.getFocusableElement().id===a)return e;if(hasBubble$$module$build$src$core$interfaces$i_has_bubble(e)){if((g=e.getBubble())&&g.canBeFocused()&&g.getFocusableElement().id===a)return g;if(g instanceof TextInputBubble$$module$build$src$core$bubbles$textinput_bubble&&g.getEditor().getFocusableElement().id===a)return g.getEditor()}}return null}onTreeFocus(a,b){}onTreeBlur(a){if(this.isFlyout&&this.targetWorkspace&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()){var b=\nthis.targetWorkspace.getToolbox();b&&a===b||isAutoHideable$$module$build$src$core$interfaces$i_autohideable(b)&&b.autoHide(!1)}}getNavigator(){return this.navigator}setNavigator(a){this.navigator=a}},module$build$src$core$workspace_svg={};module$build$src$core$workspace_svg.WorkspaceSvg=WorkspaceSvg$$module$build$src$core$workspace_svg;module$build$src$core$workspace_svg.resizeSvgContents=resizeSvgContents$$module$build$src$core$workspace_svg;var VarBase$$module$build$src$core$events$events_var_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.isBlank=typeof a===\"undefined\";a&&(this.varId=a.getId(),this.workspaceId=a.getWorkspace().id)}toJson(){const a=super.toJson();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");a.varId=this.varId;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarBase$$module$build$src$core$events$events_var_base);\nb.varId=a.varId;return b}},module$build$src$core$events$events_var_base={};module$build$src$core$events$events_var_base.VarBase=VarBase$$module$build$src$core$events$events_var_base;var VarCreate$$module$build$src$core$events$events_var_create=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_CREATE;a&&(this.varType=a.getType(),this.varName=a.getName())}toJson(){const a=super.toJson();if(this.varType===void 0)throw Error(\"The var type is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");\na.varType=this.varType;a.varName=this.varName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarCreate$$module$build$src$core$events$events_var_create);b.varType=a.varType;b.varName=a.varName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");b=b.getVariableMap();\na?b.createVariable(this.varName,this.varType,this.varId):(a=b.getVariableById(this.varId))&&b.deleteVariable(a)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_CREATE,VarCreate$$module$build$src$core$events$events_var_create);var module$build$src$core$events$events_var_create={};module$build$src$core$events$events_var_create.VarCreate=VarCreate$$module$build$src$core$events$events_var_create;var VariableModel$$module$build$src$core$variable_model=class{constructor(a,b,c,d){this.workspace=a;this.name=b;this.type=c||\"\";this.id=d||genUid$$module$build$src$core$utils$idgenerator()}getId(){return this.id}getName(){return this.name}setName(a){this.name=a;return this}getType(){return this.type}setType(a){this.type=a;return this}getWorkspace(){return this.workspace}save(){const a={name:this.getName(),id:this.getId()},b=this.getType();b&&(a.type=b);return a}static load(a,b){a=new this(b,a.name,\na.type,a.id);b.getVariableMap().addVariable(a);fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_CREATE))(a))}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MODEL,DEFAULT$$module$build$src$core$registry,VariableModel$$module$build$src$core$variable_model);var module$build$src$core$variable_model={};module$build$src$core$variable_model.VariableModel=VariableModel$$module$build$src$core$variable_model;var VarDelete$$module$build$src$core$events$events_var_delete=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_DELETE;a&&(this.varType=a.getType(),this.varName=a.getName())}toJson(){const a=super.toJson();if(this.varType===void 0)throw Error(\"The var type is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");\na.varType=this.varType;a.varName=this.varName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarDelete$$module$build$src$core$events$events_var_delete);b.varType=a.varType;b.varName=a.varName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");b=b.getVariableMap();\na?(a=b.getVariableById(this.varId))&&b.deleteVariable(a):b.createVariable(this.varName,this.varType,this.varId)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_DELETE,VarDelete$$module$build$src$core$events$events_var_delete);var module$build$src$core$events$events_var_delete={};module$build$src$core$events$events_var_delete.VarDelete=VarDelete$$module$build$src$core$events$events_var_delete;var VarRename$$module$build$src$core$events$events_var_rename=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a,b){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_RENAME;a&&(this.oldName=a.getName(),this.newName=typeof b===\"undefined\"?\"\":b)}toJson(){const a=super.toJson();if(!this.oldName)throw Error(\"The old var name is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.newName)throw Error(\"The new var name is undefined. Either pass a value to the constructor, or call fromJson\");\na.oldName=this.oldName;a.newName=this.newName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarRename$$module$build$src$core$events$events_var_rename);b.oldName=a.oldName;b.newName=a.newName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.oldName)throw Error(\"The old var name is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.newName)throw Error(\"The new var name is undefined. Either pass a value to the constructor, or call fromJson\");\nb=b.getVariableMap();const c=b.getVariableById(this.varId);a?c&&b.renameVariable(c,this.newName):c&&b.renameVariable(c,this.oldName)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_RENAME,VarRename$$module$build$src$core$events$events_var_rename);var module$build$src$core$events$events_var_rename={};module$build$src$core$events$events_var_rename.VarRename=VarRename$$module$build$src$core$events$events_var_rename;var VariableMap$$module$build$src$core$variable_map=class{constructor(a,b=!1){this.workspace=a;this.potentialMap=b;this.variableMap=new Map}clear(){for(const a of this.variableMap.values())for(const b of a.values())this.deleteVariable(b);if(this.variableMap.size!==0)throw Error(\"Non-empty variable map\");}renameVariable(a,b){if(a.getName()===b)return a;var c=a.getType();c=this.getVariable(b,c);const d=this.workspace.getAllBlocks(!1);let e=\"\";this.potentialMap||(e=$.getGroup$$module$build$src$core$events$utils())||\n$.setGroup$$module$build$src$core$events$utils(!0);try{c&&c.getId()!==a.getId()?this.renameVariableWithConflict(a,b,c,d):this.renameVariableAndUses(a,b,d)}finally{this.potentialMap||$.setGroup$$module$build$src$core$events$utils(e)}return a}changeVariableType(a,b){const c=a.getType();if(c===b)return a;var d=this.variableMap.get(c);d==null||d.delete(a.getId());(d==null?void 0:d.size)===0&&this.variableMap.delete(c);a.setType(b);let e;d=(e=this.variableMap.get(b))!=null?e:new Map;d.set(a.getId(),a);\nthis.variableMap.has(b)||this.variableMap.set(b,d);fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_TYPE_CHANGE))(a,c,b));return a}renameVariableById(a,b){warn$$module$build$src$core$utils$deprecation(\"VariableMap.renameVariableById\",\"v12\",\"v13\",\"VariableMap.renameVariable\");const c=this.getVariableById(a);if(!c)throw Error(\"Tried to rename a variable that didn't exist. ID: \"+a);this.renameVariable(c,b)}renameVariableAndUses(a,\nb,c){this.potentialMap||fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_RENAME))(a,b));a.setName(b);for(b=0;b$.Names$$module$build$src$core$names.equals(d.getName(),\na)))!=null?c:null}getVariableById(a){for(const b of this.variableMap.values())if(b.has(a)){let c;return(c=b.get(a))!=null?c:null}return null}getVariablesOfType(a){return(a=this.variableMap.get(a||\"\"))?[...a.values()]:[]}getTypes(){return[...this.variableMap.keys()]}getAllVariables(){let a=[];for(const b of this.variableMap.values())a=a.concat(...b.values());return a}getAllVariableNames(){warn$$module$build$src$core$utils$deprecation(\"VariableMap.getAllVariableNames\",\"v12\",\"v13\",\"Blockly.Variables.getAllVariables\");\nconst a=[];for(const b of this.variableMap.values())for(const c of b.values())a.push(c.getName());return a}getVariableUsesById(a){warn$$module$build$src$core$utils$deprecation(\"VariableMap.getVariableUsesById\",\"v12\",\"v13\",\"Blockly.Variables.getVariableUsesById\");return getVariableUsesById$$module$build$src$core$variables(this.workspace,a)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MAP,DEFAULT$$module$build$src$core$registry,VariableMap$$module$build$src$core$variable_map);\nvar module$build$src$core$variable_map={};module$build$src$core$variable_map.VariableMap=VariableMap$$module$build$src$core$variable_map;var TrashcanOpen$$module$build$src$core$events$events_trashcan_open=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b){super(b);this.type=EventType$$module$build$src$core$events$type.TRASHCAN_OPEN;this.isOpen=a}toJson(){const a=super.toJson();if(this.isOpen===void 0)throw Error(\"Whether this is already open or not is undefined. Either pass a value to the constructor, or call fromJson\");a.isOpen=this.isOpen;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?\nc:new TrashcanOpen$$module$build$src$core$events$events_trashcan_open);b.isOpen=a.isOpen;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.TRASHCAN_OPEN,TrashcanOpen$$module$build$src$core$events$events_trashcan_open);var module$build$src$core$events$events_trashcan_open={};module$build$src$core$events$events_trashcan_open.TrashcanOpen=TrashcanOpen$$module$build$src$core$events$events_trashcan_open;var Trashcan$$module$build$src$core$trashcan=class extends DeleteArea$$module$build$src$core$delete_area{constructor(a){super();this.workspace=a;this.id=\"trashcan\";this.contents=[];this.flyout=null;this.isLidOpen=!1;this.minOpenness=0;this.lidTask=this.svgLid=this.svgGroup=null;this.top=this.left=this.lidOpen=0;this.initialized=!1;this.workspace.options.maxTrashcanContents<=0||(a=this.workspace.copyOptionsForFlyout(),this.workspace.horizontalLayout?(a.toolboxPosition=this.workspace.toolboxPosition===\nPosition$$module$build$src$core$utils$toolbox.TOP?Position$$module$build$src$core$utils$toolbox.BOTTOM:Position$$module$build$src$core$utils$toolbox.TOP,this.flyout=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,this.workspace.options,!0))(a)):(a.toolboxPosition=this.workspace.toolboxPosition===Position$$module$build$src$core$utils$toolbox.RIGHT?Position$$module$build$src$core$utils$toolbox.LEFT:Position$$module$build$src$core$utils$toolbox.RIGHT,\nthis.flyout=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,this.workspace.options,!0))(a)),this.workspace.addChangeListener(this.onDelete.bind(this)))}createDom(){this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyTrash\"});let a;const b=String(Math.random()).substring(2);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,\n{id:\"blocklyTrashBodyClipPath\"+b},this.svgGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:WIDTH$$module$build$src$core$trashcan,height:BODY_HEIGHT$$module$build$src$core$trashcan,y:LID_HEIGHT$$module$build$src$core$trashcan},a);const c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,x:-SPRITE_LEFT$$module$build$src$core$trashcan,height:SPRITE$$module$build$src$core$sprites.height,\ny:-SPRITE_TOP$$module$build$src$core$trashcan,\"clip-path\":\"url(#blocklyTrashBodyClipPath\"+b+\")\"},this.svgGroup);c.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyTrashLidClipPath\"+b},this.svgGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:WIDTH$$module$build$src$core$trashcan,\nheight:LID_HEIGHT$$module$build$src$core$trashcan},a);this.svgLid=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,x:-SPRITE_LEFT$$module$build$src$core$trashcan,height:SPRITE$$module$build$src$core$sprites.height,y:-SPRITE_TOP$$module$build$src$core$trashcan,\"clip-path\":\"url(#blocklyTrashLidClipPath\"+b+\")\"},this.svgGroup);this.svgLid.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);bind$$module$build$src$core$browser_events(this.svgGroup,\"pointerdown\",this,this.blockMouseDownWhenOpenable);bind$$module$build$src$core$browser_events(this.svgGroup,\"pointerup\",this,this.click);bind$$module$build$src$core$browser_events(c,\"pointerover\",this,this.mouseOver);bind$$module$build$src$core$browser_events(c,\"pointerout\",this,this.mouseOut);this.animateLid();return this.svgGroup}init(){if(this.workspace.options.maxTrashcanContents>\n0){const a=this.flyout.createDom(Svg$$module$build$src$core$utils$svg.SVG);addClass$$module$build$src$core$utils$dom(a,\"blocklyTrashcanFlyout\");insertAfter$$module$build$src$core$utils$dom(a,this.workspace.getParentSvg());this.flyout.init(this.workspace)}this.workspace.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.TRASHCAN_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,\nComponentManager$$module$build$src$core$component_manager.Capability.DELETE_AREA,ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET,ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE]});this.initialized=!0;this.setLidOpen(!1)}dispose(){this.workspace.getComponentManager().removeComponent(\"trashcan\");this.svgGroup&&removeNode$$module$build$src$core$utils$dom(this.svgGroup);this.lidTask&&clearTimeout(this.lidTask)}hasContents(){return!!this.contents.length}contentsIsOpen(){return!!this.flyout&&\nthis.flyout.isVisible()}openFlyout(){if(!this.contentsIsOpen()){var a=this.contents.map(function(c){return JSON.parse(c)}),b=this.workspace.getParentSvg().style;b.cursor=\"wait\";setTimeout(()=>{let c;(c=this.flyout)==null||c.show(a);b.cursor=\"\";let d;(d=this.workspace.scrollbar)==null||d.setVisible(!1)},10);this.fireUiEvent(!0)}}closeFlyout(){if(this.contentsIsOpen()){var a;(a=this.flyout)==null||a.hide();var b;(b=this.workspace.scrollbar)==null||b.setVisible(!0);this.fireUiEvent(!1);this.workspace.recordDragTargets()}}autoHide(a){!a&&\nthis.flyout&&this.closeFlyout()}emptyContents(){this.hasContents()&&(this.contents.length=0,this.setMinOpenness(0),this.closeFlyout())}position(a,b){if(this.initialized){var c=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers(this.workspace,a);a=getStartPositionRect$$module$build$src$core$positionable_helpers(c,new Size$$module$build$src$core$utils$size(WIDTH$$module$build$src$core$trashcan,BODY_HEIGHT$$module$build$src$core$trashcan+LID_HEIGHT$$module$build$src$core$trashcan),\nMARGIN_HORIZONTAL$$module$build$src$core$trashcan,MARGIN_VERTICAL$$module$build$src$core$trashcan,a,this.workspace);b=bumpPositionRect$$module$build$src$core$positionable_helpers(a,MARGIN_VERTICAL$$module$build$src$core$trashcan,c.vertical===verticalPosition$$module$build$src$core$positionable_helpers.TOP?bumpDirection$$module$build$src$core$positionable_helpers.DOWN:bumpDirection$$module$build$src$core$positionable_helpers.UP,b);this.top=b.top;this.left=b.left;var d;(d=this.svgGroup)==null||d.setAttribute(\"transform\",\n\"translate(\"+this.left+\",\"+this.top+\")\");var e;(e=this.flyout)==null||e.position()}}getBoundingRectangle(){return new Rect$$module$build$src$core$utils$rect(this.top,this.top+BODY_HEIGHT$$module$build$src$core$trashcan+LID_HEIGHT$$module$build$src$core$trashcan,this.left,this.left+WIDTH$$module$build$src$core$trashcan)}getClientRect(){if(!this.svgGroup)return null;var a=this.svgGroup.getBoundingClientRect();const b=a.top+SPRITE_TOP$$module$build$src$core$trashcan-MARGIN_HOTSPOT$$module$build$src$core$trashcan;\na=a.left+SPRITE_LEFT$$module$build$src$core$trashcan-MARGIN_HOTSPOT$$module$build$src$core$trashcan;return new Rect$$module$build$src$core$utils$rect(b,b+LID_HEIGHT$$module$build$src$core$trashcan+BODY_HEIGHT$$module$build$src$core$trashcan+2*MARGIN_HOTSPOT$$module$build$src$core$trashcan,a,a+WIDTH$$module$build$src$core$trashcan+2*MARGIN_HOTSPOT$$module$build$src$core$trashcan)}onDragOver(a){this.setLidOpen(this.wouldDelete_)}onDragExit(a){this.setLidOpen(!1)}onDrop(a){setTimeout(this.setLidOpen.bind(this,\n!1),100)}setLidOpen(a){this.isLidOpen!==a&&(this.lidTask&&clearTimeout(this.lidTask),this.isLidOpen=a,this.animateLid())}animateLid(){const a=ANIMATION_FRAMES$$module$build$src$core$trashcan;var b=1/(a+1);this.lidOpen+=this.isLidOpen?b:-b;this.lidOpen=Math.min(Math.max(this.lidOpen,this.minOpenness),1);this.setLidAngle(this.lidOpen*MAX_LID_ANGLE$$module$build$src$core$trashcan);b=OPACITY_MIN$$module$build$src$core$trashcan+this.lidOpen*(OPACITY_MAX$$module$build$src$core$trashcan-OPACITY_MIN$$module$build$src$core$trashcan);\nthis.svgGroup&&(this.svgGroup.style.opacity=`${b}`);this.lidOpen>this.minOpenness&&this.lidOpen<1&&(this.lidTask=setTimeout(this.animateLid.bind(this),ANIMATION_LENGTH$$module$build$src$core$trashcan/a))}setLidAngle(a){const b=this.workspace.toolboxPosition===Position$$module$build$src$core$utils$toolbox.RIGHT||this.workspace.horizontalLayout&&this.workspace.RTL;let c;(c=this.svgLid)==null||c.setAttribute(\"transform\",\"rotate(\"+(b?-a:a)+\",\"+(b?4:WIDTH$$module$build$src$core$trashcan-4)+\",\"+(LID_HEIGHT$$module$build$src$core$trashcan-\n2)+\")\")}setMinOpenness(a){this.minOpenness=a;this.isLidOpen||this.setLidAngle(a*MAX_LID_ANGLE$$module$build$src$core$trashcan)}closeLid(){this.setLidOpen(!1)}click(){this.hasContents()&&!this.workspace.isDragging()&&this.openFlyout()}fireUiEvent(a){a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.TRASHCAN_OPEN))(a,this.workspace.id);fire$$module$build$src$core$events$utils(a)}blockMouseDownWhenOpenable(a){!this.contentsIsOpen()&&this.hasContents()&&a.stopPropagation()}mouseOver(){this.hasContents()&&\nthis.setLidOpen(!0)}mouseOut(){this.setLidOpen(!1)}onDelete(a){if(!(this.workspace.options.maxTrashcanContents<=0||!isBlockDelete$$module$build$src$core$events$predicates(a)||a.wasShadow)){if(!a.oldJson)throw Error(\"Encountered a delete event without proper oldJson\");a=JSON.stringify(this.cleanBlockJson(a.oldJson));if(!this.contents.includes(a)){for(this.contents.unshift(a);this.contents.length>this.workspace.options.maxTrashcanContents;)this.contents.pop();this.setMinOpenness(HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan)}}}cleanBlockJson(a){function b(c){if(c){delete c.id;\ndelete c.x;delete c.y;delete c.enabled;delete c.disabledReasons;if(c.icons&&c.icons.comment){var d=c.icons.comment;delete d.height;delete d.width;delete d.pinned}d=c.inputs;for(var e in d){var f=d[e];const g=f.block;f=f.shadow;g&&b(g);f&&b(f)}c.next&&(e=c.next,c=e.block,e=e.shadow,c&&b(c),e&&b(e))}}a=JSON.parse(JSON.stringify(a));b(a);return Object.assign({},{kind:\"BLOCK\"},a)}},WIDTH$$module$build$src$core$trashcan=47,BODY_HEIGHT$$module$build$src$core$trashcan=44,LID_HEIGHT$$module$build$src$core$trashcan=\n16,MARGIN_VERTICAL$$module$build$src$core$trashcan=20,MARGIN_HORIZONTAL$$module$build$src$core$trashcan=20,MARGIN_HOTSPOT$$module$build$src$core$trashcan=10,SPRITE_LEFT$$module$build$src$core$trashcan=0,SPRITE_TOP$$module$build$src$core$trashcan=32,HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan=.1,ANIMATION_LENGTH$$module$build$src$core$trashcan=80,ANIMATION_FRAMES$$module$build$src$core$trashcan=4,OPACITY_MIN$$module$build$src$core$trashcan=.4,OPACITY_MAX$$module$build$src$core$trashcan=.8,\nMAX_LID_ANGLE$$module$build$src$core$trashcan=45,module$build$src$core$trashcan={};module$build$src$core$trashcan.Trashcan=Trashcan$$module$build$src$core$trashcan;var stashedCopyData$$module$build$src$core$clipboard=null,stashedWorkspace$$module$build$src$core$clipboard=null,stashedCoordinates$$module$build$src$core$clipboard=void 0,module$build$src$core$clipboard={};module$build$src$core$clipboard.BlockPaster=BlockPaster$$module$build$src$core$clipboard$block_paster;module$build$src$core$clipboard.copy=copy$$module$build$src$core$clipboard;module$build$src$core$clipboard.getLastCopiedData=getLastCopiedData$$module$build$src$core$clipboard;\nmodule$build$src$core$clipboard.getLastCopiedLocation=getLastCopiedLocation$$module$build$src$core$clipboard;module$build$src$core$clipboard.getLastCopiedWorkspace=getLastCopiedWorkspace$$module$build$src$core$clipboard;module$build$src$core$clipboard.paste=paste$$module$build$src$core$clipboard;module$build$src$core$clipboard.registry=module$build$src$core$clipboard$registry;module$build$src$core$clipboard.setLastCopiedData=setLastCopiedData$$module$build$src$core$clipboard;\nmodule$build$src$core$clipboard.setLastCopiedLocation=setLastCopiedLocation$$module$build$src$core$clipboard;module$build$src$core$clipboard.setLastCopiedWorkspace=setLastCopiedWorkspace$$module$build$src$core$clipboard;var module$build$src$core$comments={};module$build$src$core$comments.CollapseCommentBarButton=CollapseCommentBarButton$$module$build$src$core$comments$collapse_comment_bar_button;module$build$src$core$comments.CommentBarButton=CommentBarButton$$module$build$src$core$comments$comment_bar_button;module$build$src$core$comments.CommentEditor=CommentEditor$$module$build$src$core$comments$comment_editor;module$build$src$core$comments.CommentView=CommentView$$module$build$src$core$comments$comment_view;\nmodule$build$src$core$comments.DeleteCommentBarButton=DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button;module$build$src$core$comments.RenderedWorkspaceComment=RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment;module$build$src$core$comments.WorkspaceComment=WorkspaceComment$$module$build$src$core$comments$workspace_comment;var module$build$src$core$interfaces$i_copyable={};module$build$src$core$interfaces$i_copyable.isCopyable=isCopyable$$module$build$src$core$interfaces$i_copyable;var names$$module$build$src$core$shortcut_items;(function(a){a.ESCAPE=\"escape\";a.DELETE=\"delete\";a.COPY=\"copy\";a.CUT=\"cut\";a.PASTE=\"paste\";a.UNDO=\"undo\";a.REDO=\"redo\"})(names$$module$build$src$core$shortcut_items||(names$$module$build$src$core$shortcut_items={}));registerDefaultShortcuts$$module$build$src$core$shortcut_items();var module$build$src$core$shortcut_items={};module$build$src$core$shortcut_items.names=names$$module$build$src$core$shortcut_items;\nmodule$build$src$core$shortcut_items.registerCopy=registerCopy$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerCut=registerCut$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerDefaultShortcuts=registerDefaultShortcuts$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerDelete=registerDelete$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerEscape=registerEscape$$module$build$src$core$shortcut_items;\nmodule$build$src$core$shortcut_items.registerPaste=registerPaste$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerRedo=registerRedo$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerUndo=registerUndo$$module$build$src$core$shortcut_items;var ProcedureSerializer$$module$build$src$core$serialization$procedures=class{constructor(a,b){this.procedureModelClass=a;this.parameterModelClass=b;this.priority=PROCEDURES$$module$build$src$core$serialization$priorities}save(a){a=a.getProcedureMap().getProcedures().map(b=>saveProcedure$$module$build$src$core$serialization$procedures(b));return a.length?a:null}load(a,b){const c=b.getProcedureMap();for(const d of a)c.add(loadProcedure$$module$build$src$core$serialization$procedures(this.procedureModelClass,\nthis.parameterModelClass,d,b))}clear(a){a.getProcedureMap().clear()}},module$build$src$core$serialization$procedures={};module$build$src$core$serialization$procedures.ProcedureSerializer=ProcedureSerializer$$module$build$src$core$serialization$procedures;module$build$src$core$serialization$procedures.loadProcedure=loadProcedure$$module$build$src$core$serialization$procedures;module$build$src$core$serialization$procedures.saveProcedure=saveProcedure$$module$build$src$core$serialization$procedures;var VariableSerializer$$module$build$src$core$serialization$variables=class{constructor(){this.priority=VARIABLES$$module$build$src$core$serialization$priorities}save(a){a=a.getAllVariables().map(b=>b.save());return a.length?a:null}load(a,b){const c=getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MODEL,DEFAULT$$module$build$src$core$registry);a.forEach(d=>{c==null||c.load(d,b)})}clear(a){a.getVariableMap().clear()}};\nregister$$module$build$src$core$serialization$registry(\"variables\",new VariableSerializer$$module$build$src$core$serialization$variables);var module$build$src$core$serialization$variables={};module$build$src$core$serialization$variables.VariableSerializer=VariableSerializer$$module$build$src$core$serialization$variables;var module$build$src$core$serialization$workspaces={};module$build$src$core$serialization$workspaces.load=load$$module$build$src$core$serialization$workspaces;module$build$src$core$serialization$workspaces.save=save$$module$build$src$core$serialization$workspaces;var module$build$src$core$serialization={blocks:module$build$src$core$serialization$blocks,exceptions:module$build$src$core$serialization$exceptions,priorities:module$build$src$core$serialization$priorities,procedures:module$build$src$core$serialization$procedures,registry:module$build$src$core$serialization$registry,variables:module$build$src$core$serialization$variables,workspaceComments:module$build$src$core$serialization$workspace_comments,workspaces:module$build$src$core$serialization$workspaces};\"Blockly\"in globalThis||(globalThis.Blockly={Msg:module$build$src$core$msg});var module$build$src$core$main={};var LABEL_TYPE$$module$build$src$core$label_flyout_inflater=\"label\",LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater=class{load(a,b){a=new FlyoutButton$$module$build$src$core$flyout_button(b.getWorkspace(),b.targetWorkspace,a,!0);a.show();return new FlyoutItem$$module$build$src$core$flyout_item(a,LABEL_TYPE$$module$build$src$core$label_flyout_inflater)}gapForItem(a,b){return b}disposeItem(a){a=a.getElement();a instanceof FlyoutButton$$module$build$src$core$flyout_button&&a.dispose()}getType(){return LABEL_TYPE$$module$build$src$core$label_flyout_inflater}};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,LABEL_TYPE$$module$build$src$core$label_flyout_inflater,LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater);var module$build$src$core$label_flyout_inflater={};module$build$src$core$label_flyout_inflater.LabelFlyoutInflater=LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater;var ConstantProvider$$module$build$src$core$renderers$zelos$constants=class extends ConstantProvider$$module$build$src$core$renderers$common$constants{constructor(a){super();this.GRID_UNIT=4;this.CURSOR_COLOUR=\"#ffa200\";this.CURSOR_RADIUS=5;this.JAGGED_TEETH_WIDTH=this.JAGGED_TEETH_HEIGHT=0;this.START_HAT_HEIGHT=22;this.START_HAT_WIDTH=96;this.SHAPES={HEXAGONAL:1,ROUND:2,SQUARE:3,PUZZLE:4,NOTCH:5};this.SHAPE_IN_SHAPE_PADDING={1:{0:5*this.GRID_UNIT,1:2*this.GRID_UNIT,2:5*this.GRID_UNIT,3:5*this.GRID_UNIT},\n2:{0:3*this.GRID_UNIT,1:3*this.GRID_UNIT,2:1*this.GRID_UNIT,3:2*this.GRID_UNIT},3:{0:2*this.GRID_UNIT,1:2*this.GRID_UNIT,2:2*this.GRID_UNIT,3:2*this.GRID_UNIT}};this.FULL_BLOCK_FIELDS=!0;this.FIELD_TEXT_FONTWEIGHT=\"bold\";this.FIELD_TEXT_FONTFAMILY='\"Helvetica Neue\", \"Segoe UI\", Helvetica, sans-serif';this.FIELD_COLOUR_FULL_BLOCK=this.FIELD_TEXTINPUT_BOX_SHADOW=this.FIELD_DROPDOWN_SVG_ARROW=this.FIELD_DROPDOWN_COLOURED_DIV=this.FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW=!0;this.SELECTED_GLOW_COLOUR=\"#fff200\";\nthis.SELECTED_GLOW_SIZE=.5;this.REPLACEMENT_GLOW_COLOUR=\"#fff200\";this.REPLACEMENT_GLOW_SIZE=2;this.selectedGlowFilterId=\"\";this.selectedGlowFilter=null;this.replacementGlowFilterId=\"\";this.SQUARED=this.ROUNDED=this.HEXAGONAL=this.replacementGlowFilter=null;a&&(this.GRID_UNIT=a);this.SMALL_PADDING=this.GRID_UNIT;this.MEDIUM_PADDING=2*this.GRID_UNIT;this.MEDIUM_LARGE_PADDING=3*this.GRID_UNIT;this.LARGE_PADDING=4*this.GRID_UNIT;this.CORNER_RADIUS=1*this.GRID_UNIT;this.NOTCH_WIDTH=9*this.GRID_UNIT;this.NOTCH_HEIGHT=\n2*this.GRID_UNIT;this.STATEMENT_INPUT_NOTCH_OFFSET=this.NOTCH_OFFSET_LEFT=3*this.GRID_UNIT;this.MIN_BLOCK_WIDTH=2*this.GRID_UNIT;this.MIN_BLOCK_HEIGHT=12*this.GRID_UNIT;this.EMPTY_STATEMENT_INPUT_HEIGHT=6*this.GRID_UNIT;this.TOP_ROW_MIN_HEIGHT=this.CORNER_RADIUS;this.TOP_ROW_PRECEDES_STATEMENT_MIN_HEIGHT=this.LARGE_PADDING;this.BOTTOM_ROW_MIN_HEIGHT=this.CORNER_RADIUS;this.BOTTOM_ROW_AFTER_STATEMENT_MIN_HEIGHT=6*this.GRID_UNIT;this.STATEMENT_BOTTOM_SPACER=-this.NOTCH_HEIGHT;this.STATEMENT_INPUT_SPACER_MIN_WIDTH=\n40*this.GRID_UNIT;this.STATEMENT_INPUT_PADDING_LEFT=4*this.GRID_UNIT;this.EMPTY_INLINE_INPUT_PADDING=4*this.GRID_UNIT;this.EMPTY_INLINE_INPUT_HEIGHT=8*this.GRID_UNIT;this.DUMMY_INPUT_MIN_HEIGHT=8*this.GRID_UNIT;this.DUMMY_INPUT_SHADOW_MIN_HEIGHT=6*this.GRID_UNIT;this.CURSOR_WS_WIDTH=20*this.GRID_UNIT;this.FIELD_TEXT_FONTSIZE=3*this.GRID_UNIT;this.FIELD_BORDER_RECT_RADIUS=this.CORNER_RADIUS;this.FIELD_BORDER_RECT_X_PADDING=2*this.GRID_UNIT;this.FIELD_BORDER_RECT_Y_PADDING=1.625*this.GRID_UNIT;this.FIELD_BORDER_RECT_HEIGHT=\n8*this.GRID_UNIT;this.FIELD_DROPDOWN_BORDER_RECT_HEIGHT=8*this.GRID_UNIT;this.FIELD_DROPDOWN_SVG_ARROW_PADDING=this.FIELD_BORDER_RECT_X_PADDING;this.FIELD_COLOUR_DEFAULT_WIDTH=6*this.GRID_UNIT;this.FIELD_COLOUR_DEFAULT_HEIGHT=8*this.GRID_UNIT;this.FIELD_CHECKBOX_X_OFFSET=1*this.GRID_UNIT;this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH=12*this.GRID_UNIT}setFontConstants_(a){super.setFontConstants_(a);this.FIELD_DROPDOWN_BORDER_RECT_HEIGHT=this.FIELD_BORDER_RECT_HEIGHT=this.FIELD_TEXT_HEIGHT+this.FIELD_BORDER_RECT_Y_PADDING*\n2}init(){super.init();this.HEXAGONAL=this.makeHexagonal();this.ROUNDED=this.makeRounded();this.SQUARED=this.makeSquared();this.STATEMENT_INPUT_NOTCH_OFFSET=this.NOTCH_OFFSET_LEFT+this.INSIDE_CORNERS.rightWidth}setDynamicProperties_(a){super.setDynamicProperties_(a);this.SELECTED_GLOW_COLOUR=a.getComponentStyle(\"selectedGlowColour\")||this.SELECTED_GLOW_COLOUR;const b=Number(a.getComponentStyle(\"selectedGlowSize\"));this.SELECTED_GLOW_SIZE=b&&!isNaN(b)?b:this.SELECTED_GLOW_SIZE;this.REPLACEMENT_GLOW_COLOUR=\na.getComponentStyle(\"replacementGlowColour\")||this.REPLACEMENT_GLOW_COLOUR;this.REPLACEMENT_GLOW_SIZE=(a=Number(a.getComponentStyle(\"replacementGlowSize\")))&&!isNaN(a)?a:this.REPLACEMENT_GLOW_SIZE}dispose(){super.dispose();this.selectedGlowFilter&&removeNode$$module$build$src$core$utils$dom(this.selectedGlowFilter);this.replacementGlowFilter&&removeNode$$module$build$src$core$utils$dom(this.replacementGlowFilter)}makeStartHat(){const a=this.START_HAT_HEIGHT,b=this.START_HAT_WIDTH,c=curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(25,-a),point$$module$build$src$core$utils$svg_paths(71,-a),point$$module$build$src$core$utils$svg_paths(b,0)]);return{height:a*.75,width:b,path:c}}makeHexagonal(){function a(c,d,e){var f=c/2;f=f>b?b:f;e=e?-1:1;c=(d?-1:1)*c/2;return lineTo$$module$build$src$core$utils$svg_paths(-e*f,c)+lineTo$$module$build$src$core$utils$svg_paths(e*f,c)}const b=this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH;return{type:this.SHAPES.HEXAGONAL,isDynamic:!0,width(c){c/=2;return c>\nb?b:c},height(c){return c},connectionOffsetY(c){return c/2},connectionOffsetX(c){return-c},pathDown(c){return a(c,!1,!1)},pathUp(c){return a(c,!0,!1)},pathRightDown(c){return a(c,!1,!0)},pathRightUp(c){return a(c,!1,!0)}}}makeRounded(){function a(d,e,f){const g=d>c?d-c:0;d=(d>c?c:d)/2;const h=f===e?\"0\":\"1\";return arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+h,d,point$$module$build$src$core$utils$svg_paths((f?1:-1)*d,(e?-1:1)*d))+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",(e?-1:\n1)*g)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+h,d,point$$module$build$src$core$utils$svg_paths((f?-1:1)*d,(e?-1:1)*d))}const b=this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH,c=b*2;return{type:this.SHAPES.ROUND,isDynamic:!0,width(d){d/=2;return d>b?b:d},height(d){return d},connectionOffsetY(d){return d/2},connectionOffsetX(d){return-d},pathDown(d){return a(d,!1,!1)},pathUp(d){return a(d,!0,!1)},pathRightDown(d){return a(d,!1,!0)},pathRightUp(d){return a(d,!1,!0)}}}makeSquared(){function a(c,\nd,e){c-=b*2;const f=e===d?\"0\":\"1\";return arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+f,b,point$$module$build$src$core$utils$svg_paths((e?1:-1)*b,(d?-1:1)*b))+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",(d?-1:1)*c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+f,b,point$$module$build$src$core$utils$svg_paths((e?-1:1)*b,(d?-1:1)*b))}const b=this.CORNER_RADIUS;return{type:this.SHAPES.SQUARE,isDynamic:!0,width(c){return b},height(c){return c},connectionOffsetY(c){return c/\n2},connectionOffsetX(c){return-c},pathDown(c){return a(c,!1,!1)},pathUp(c){return a(c,!0,!1)},pathRightDown(c){return a(c,!1,!0)},pathRightUp(c){return a(c,!1,!0)}}}shapeFor(a){let b=a.getCheck();!b&&a.targetConnection&&(b=a.targetConnection.getCheck());switch(a.type){case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:case ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE:a=a.getSourceBlock().getOutputShape();if(a!==null)switch(a){case this.SHAPES.HEXAGONAL:return this.HEXAGONAL;\ncase this.SHAPES.ROUND:return this.ROUNDED;case this.SHAPES.SQUARE:return this.SQUARED}if(b&&b.includes(\"Boolean\"))return this.HEXAGONAL;if(b&&b.includes(\"Number\"))return this.ROUNDED;b&&b.includes(\"String\");return this.ROUNDED;case ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT:case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:return this.NOTCH;default:throw Error(\"Unknown type\");}}makeNotch(){function a(l){return curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(l*e/2,0),point$$module$build$src$core$utils$svg_paths(l*e*3/4,g/2),point$$module$build$src$core$utils$svg_paths(l*e,g)])+line$$module$build$src$core$utils$svg_paths([point$$module$build$src$core$utils$svg_paths(l*e,f)])+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/4,g/2),point$$module$build$src$core$utils$svg_paths(l*e/2,g),point$$module$build$src$core$utils$svg_paths(l*e,g)])+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",\nl*d)+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/2,0),point$$module$build$src$core$utils$svg_paths(l*e*3/4,-(g/2)),point$$module$build$src$core$utils$svg_paths(l*e,-g)])+line$$module$build$src$core$utils$svg_paths([point$$module$build$src$core$utils$svg_paths(l*e,-f)])+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/4,-(g/2)),point$$module$build$src$core$utils$svg_paths(l*e/2,-g),point$$module$build$src$core$utils$svg_paths(l*\ne,-g)])}const b=this.NOTCH_WIDTH,c=this.NOTCH_HEIGHT,d=b/3,e=d/3,f=c/2,g=f/2,h=a(1),k=a(-1);return{type:this.SHAPES.NOTCH,width:b,height:c,pathLeft:h,pathRight:k}}makeInsideCorners(){const a=this.CORNER_RADIUS,b=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(-a,a)),c=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a,point$$module$build$src$core$utils$svg_paths(-a,a)),d=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(a,\na)),e=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a,point$$module$build$src$core$utils$svg_paths(a,a));return{width:a,height:a,pathTop:b,pathBottom:d,rightWidth:a,rightHeight:a,pathTopRight:c,pathBottomRight:e}}generateSecondaryColour_(a){return blend$$module$build$src$core$utils$colour(\"#000\",a,.15)||a}generateTertiaryColour_(a){return blend$$module$build$src$core$utils$colour(\"#000\",a,.25)||a}createDom(a,b,c,d){super.createDom(a,b,c,d);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.DEFS,\n{},a);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FILTER,{id:\"blocklySelectedGlowFilter\"+this.randomIdentifier,height:\"160%\",width:\"180%\",y:\"-30%\",x:\"-40%\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR,{\"in\":\"SourceGraphic\",stdDeviation:this.SELECTED_GLOW_SIZE},b);c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER,{result:\"outBlur\"},b);\ncreateSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFUNCA,{type:\"table\",tableValues:\"0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\"},c);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFLOOD,{\"flood-color\":this.SELECTED_GLOW_COLOUR,\"flood-opacity\":1,result:\"outColor\"},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"outColor\",in2:\"outBlur\",operator:\"in\",result:\"outGlow\"},b);\nthis.selectedGlowFilterId=b.id;this.selectedGlowFilter=b;a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FILTER,{id:\"blocklyReplacementGlowFilter\"+this.randomIdentifier,height:\"160%\",width:\"180%\",y:\"-30%\",x:\"-40%\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR,{\"in\":\"SourceGraphic\",stdDeviation:this.REPLACEMENT_GLOW_SIZE},a);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER,\n{result:\"outBlur\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFUNCA,{type:\"table\",tableValues:\"0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\"},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFLOOD,{\"flood-color\":this.REPLACEMENT_GLOW_COLOUR,\"flood-opacity\":1,result:\"outColor\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"outColor\",in2:\"outBlur\",operator:\"in\",\nresult:\"outGlow\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"SourceGraphic\",in2:\"outGlow\",operator:\"over\"},a);this.replacementGlowFilterId=a.id;this.replacementGlowFilter=a;d&&(d.style.setProperty(\"--blocklySelectedGlowFilter\",`url(#${this.selectedGlowFilterId})`),d.style.setProperty(\"--blocklyReplacementGlowFilter\",`url(#${this.replacementGlowFilterId})`))}getCSS_(a){return[`${a} .blocklyText,`,`${a} .blocklyFlyoutLabelText {`,`font: ${this.FIELD_TEXT_FONTWEIGHT} ${this.FIELD_TEXT_FONTSIZE}`+\n`pt ${this.FIELD_TEXT_FONTFAMILY};`,\"}\",`${a} .blocklyTextInputBubble textarea {`,\"font-weight: normal;\",\"}\",`${a} .blocklyText {`,\"fill: #fff;\",\"}\",`${a} .blocklyNonEditableField>rect:not(.blocklyDropdownRect),`,`${a} .blocklyEditableField>rect:not(.blocklyDropdownRect) {`,`fill: ${this.FIELD_BORDER_RECT_COLOUR};`,\"}\",`${a} .blocklyNonEditableField>text,`,`${a} .blocklyEditableField>text,`,`${a} .blocklyNonEditableField>g>text,`,`${a} .blocklyEditableField>g>text {`,\"fill: #575E75;\",\"}\",`${a} .blocklyFlyoutLabelText {`,\n\"fill: #575E75;\",\"}\",`${a} .blocklyText.blocklyBubbleText {`,\"fill: #575E75;\",\"}\",`${a} .blocklyDraggable:not(.blocklyDisabled)`,\" .blocklyEditableField:not(.blocklyEditing):hover>rect,\",`${a} .blocklyDraggable:not(.blocklyDisabled)`,\" .blocklyEditableField:not(.blocklyEditing):hover>.blocklyPath {\",\"stroke: #fff;\",\"stroke-width: 2;\",\"}\",`${a} .blocklyHtmlInput {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,`font-weight: ${this.FIELD_TEXT_FONTWEIGHT};`,\"color: #575E75;\",\"}\",`${a} .blocklyDropdownText {`,\n\"fill: #fff !important;\",\"}\",`${a}.blocklyWidgetDiv .blocklyMenuItem,`,`${a}.blocklyDropDownDiv .blocklyMenuItem {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,\"}\",`${a}.blocklyDropDownDiv .blocklyMenuItemContent {`,\"color: #fff;\",\"}\",`${a} .blocklyHighlightedConnectionPath {`,`stroke: ${this.SELECTED_GLOW_COLOUR};`,\"}\",`${a} .blocklyDisabledPattern > .blocklyOutlinePath {`,\"fill: var(--blocklyDisabledPattern)\",\"}\",`${a} .blocklyInsertionMarker>.blocklyPath {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\n\"stroke: none;\",\"}\",`${a} .blocklySelected>.blocklyPath.blocklyPathSelected {`,\"fill: none;\",\"filter: var(--blocklySelectedGlowFilter);\",\"}\",`${a} .blocklyReplaceable>.blocklyPath {`,\"filter: var(--blocklyReplacementGlowFilter);\",\"}\"]}},module$build$src$core$renderers$zelos$constants={};module$build$src$core$renderers$zelos$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$zelos$constants;var Drawer$$module$build$src$core$renderers$zelos$drawer=class extends Drawer$$module$build$src$core$renderers$common$drawer{constructor(a,b){super(a,b)}draw(){const a=this.block_.pathObject;a.beginDrawing();this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();a.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);this.info_.RTL&&a.flipRTL();this.recordSizeOnBlock_();this.info_.outputConnection&&(a.outputShapeType=this.info_.outputConnection.shape.type);a.endDrawing()}drawOutline_(){this.info_.outputConnection&&\nthis.info_.outputConnection.isDynamicShape&&!this.info_.hasStatementInput&&!this.info_.bottomRow.hasNextConnection?(this.drawFlatTop_(),this.drawRightDynamicConnection_(),this.drawFlatBottom_(),this.drawLeftDynamicConnection_()):super.drawOutline_()}drawLeft_(){this.info_.outputConnection&&this.info_.outputConnection.isDynamicShape?this.drawLeftDynamicConnection_():super.drawLeft_()}drawRightSideRow_(a){if(!(a.height<=0)){if(Types$$module$build$src$core$renderers$measurables$types.isSpacer(a)){const d=\na.precedesStatement;var b=a.followsStatement;if(d||b){const e=this.constants_.INSIDE_CORNERS;var c=e.rightHeight;c=a.height-(d?c:0);b=b?e.pathBottomRight:\"\";a=c>0?lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+c):\"\";this.outlinePath_+=b+a+(d?e.pathTopRight:\"\");return}}this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+a.height)}}drawRightDynamicConnection_(){if(!this.info_.outputConnection)throw Error(\"Cannot draw the output connection of a block that doesn't have one\");\nthis.outlinePath_+=this.info_.outputConnection.shape.pathRightDown(this.info_.outputConnection.height)}drawLeftDynamicConnection_(){if(!this.info_.outputConnection)throw Error(\"Cannot draw the output connection of a block that doesn't have one\");this.positionOutputConnection_();this.outlinePath_+=this.info_.outputConnection.shape.pathUp(this.info_.outputConnection.height);this.outlinePath_+=\"z\"}drawFlatTop_(){const a=this.info_.topRow;this.positionPreviousConnection_();this.outlinePath_+=moveBy$$module$build$src$core$utils$svg_paths(a.xPos,\nthis.info_.startY);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",a.width)}drawFlatBottom_(){const a=this.info_.bottomRow;this.positionNextConnection_();this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.baseline);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-a.width)}drawInlineInput_(a){this.positionInlineInputConnection_(a);const b=a.input.name;a.connectedBlock||this.info_.isInsertionMarker||(a=moveTo$$module$build$src$core$utils$svg_paths(a.xPos+\na.connectionWidth,a.centerline-a.height/2)+this.getInlineInputPath(a),this.block_.pathObject.setOutlinePath(b,a))}getInlineInputPath(a){const b=a.width-a.connectionWidth*2,c=a.height;return lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",b)+a.shape.pathRightDown(c)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-b)+a.shape.pathUp(c)+\"z\"}drawStatementInput_(a){var b=a.getLastInput();const c=b.xPos+b.notchOffset+b.shape.width,d=this.constants_.INSIDE_CORNERS,e=b.shape.pathRight+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",\n-(b.notchOffset-d.width))+d.pathTop,f=a.height-2*d.height;b=d.pathBottom+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",b.notchOffset-d.width)+(b.connectedBottomNextConnection?\"\":b.shape.pathLeft);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",c)+e+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",f)+b+lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",a.xPos+a.width);this.positionStatementInputConnection_(a)}drawConnectionHighlightPath(a){const b=a.connectionModel;\nif(b.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE&&!a.isDynamicShape)return super.drawConnectionHighlightPath(a);a=b.type===ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE?moveTo$$module$build$src$core$utils$svg_paths(a.connectionWidth,-a.height/2)+this.getInlineInputPath(a):moveTo$$module$build$src$core$utils$svg_paths(a.width,\n-a.height/2)+a.shape.pathDown(a.height);const c=b.getSourceBlock();let d,e;return(e=(d=c.pathObject).addConnectionHighlight)==null?void 0:e.call(d,b,a,b.getOffsetInBlock(),c.RTL)}},module$build$src$core$renderers$zelos$drawer={};module$build$src$core$renderers$zelos$drawer.Drawer=Drawer$$module$build$src$core$renderers$zelos$drawer;var FieldImage$$module$build$src$core$field_image=class extends Field$$module$build$src$core$field{constructor(a,b,c,d,e,f,g){super(Field$$module$build$src$core$field.SKIP_SETUP);this.imageElement=this.clickHandler=null;this.flipRtl=this.isDirty_=this.EDITABLE=!1;this.altText=\"\";c=Number(replaceMessageReferences$$module$build$src$core$utils$parsing(c));b=Number(replaceMessageReferences$$module$build$src$core$utils$parsing(b));if(isNaN(c)||isNaN(b))throw Error(\"Height and width values of an image field must cast to numbers.\");\nif(c<=0||b<=0)throw Error(\"Height and width values of an image field must be greater than 0.\");this.size_=new Size$$module$build$src$core$utils$size(b,c+FieldImage$$module$build$src$core$field_image.Y_PADDING);this.imageHeight=c;typeof e===\"function\"&&(this.clickHandler=e);a!==Field$$module$build$src$core$field.SKIP_SETUP&&(g?this.configure_(g):(this.flipRtl=!!f,this.altText=replaceMessageReferences$$module$build$src$core$utils$parsing(d)||\"\"),this.setValue(replaceMessageReferences$$module$build$src$core$utils$parsing(a)))}configure_(a){super.configure_(a);\na.flipRtl&&(this.flipRtl=a.flipRtl);a.alt&&(this.altText=replaceMessageReferences$$module$build$src$core$utils$parsing(a.alt))}initView(){this.imageElement=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{height:this.imageHeight+\"px\",width:this.size_.width+\"px\",alt:this.altText},this.fieldGroup_);this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.value_);this.fieldGroup_&&addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\n\"blocklyImageField\");this.clickHandler&&(this.imageElement.style.cursor=\"pointer\")}updateSize_(){}doClassValidation_(a){return typeof a!==\"string\"?null:a}doValueUpdate_(a){this.value_=a;this.imageElement&&this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.value_)}getFlipRtl(){return this.flipRtl}setAlt(a){a!==this.altText&&(this.altText=a||\"\",this.imageElement&&this.imageElement.setAttribute(\"alt\",this.altText))}isClickable(){return super.isClickable()&&!!this.clickHandler}showEditor_(){this.clickHandler&&\nthis.clickHandler(this)}setOnClickHandler(a){this.clickHandler=a}getText_(){return this.altText}static fromJson(a){if(!a.src||!a.width||!a.height)throw Error(\"src, width, and height values for an image field arerequired. The width and height must be non-zero.\");return new this(a.src,a.width,a.height,void 0,void 0,void 0,a)}};FieldImage$$module$build$src$core$field_image.Y_PADDING=1;register$$module$build$src$core$field_registry(\"field_image\",FieldImage$$module$build$src$core$field_image);\nFieldImage$$module$build$src$core$field_image.prototype.DEFAULT_VALUE=\"\";var module$build$src$core$field_image={};module$build$src$core$field_image.FieldImage=FieldImage$$module$build$src$core$field_image;var MINIMUM_WIDTH$$module$build$src$core$field_input=14,FieldInput$$module$build$src$core$field_input=class extends Field$$module$build$src$core$field{set size_(a){super.size_=a}get size_(){const a=super.size_;a.width{a!==null&&this.setValue(this.getValueFromEditorText_(a));this.onFinishEditing_(this.value_)})}showInlineEditor(a,b){const c=this.getSourceBlock();if(!c)throw new UnattachedFieldError$$module$build$src$core$field;show$$module$build$src$core$widgetdiv(this,c.RTL,this.widgetDispose_.bind(this),this.workspace_,b);this.htmlInput_=this.widgetCreate_();this.isBeingEdited_=!0;this.valueWhenEditorWasOpened_=this.value_;a||(this.htmlInput_.focus({preventScroll:!0}),this.htmlInput_.select())}widgetCreate_(){var a=\nthis.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;$.setGroup$$module$build$src$core$events$utils(!0);const b=getDiv$$module$build$src$core$widgetdiv();var c=this.getClickTarget_();if(!c)throw Error(\"A click target has not been set.\");addClass$$module$build$src$core$utils$dom(c,\"blocklyEditing\");c=document.createElement(\"input\");c.className=\"blocklyHtmlInput\";c.setAttribute(\"spellcheck\",this.spellcheck_);const d=this.workspace_.getAbsoluteScale();var e=this.getConstants().FIELD_TEXT_FONTSIZE*\nd+\"pt\";b.style.fontSize=e;c.style.fontSize=e;e=FieldInput$$module$build$src$core$field_input.BORDERRADIUS*d+\"px\";this.isFullBlockField()&&(e=this.getScaledBBox(),e=(e.bottom-e.top)/2+\"px\",a=a.getParent()?a.getParent().getColourTertiary():this.sourceBlock_.getColourTertiary(),c.style.border=1*d+\"px solid \"+a,b.style.borderRadius=e,b.style.transition=\"box-shadow 0.25s ease 0s\",this.getConstants().FIELD_TEXTINPUT_BOX_SHADOW&&(b.style.boxShadow=\"rgba(255, 255, 255, 0.3) 0 0 0 \"+4*d+\"px\"));c.style.borderRadius=\ne;b.appendChild(c);c.value=c.defaultValue=this.getEditorText_(this.value_);c.setAttribute(\"data-untyped-default-value\",String(this.value_));this.resizeEditor_();this.bindInputEvents_(c);return c}widgetDispose_(){this.isBeingEdited_=!1;this.isTextValid_=!0;this.forceRerender();this.onFinishEditing_(this.value_);this.sourceBlock_&&isEnabled$$module$build$src$core$events$utils()&&this.valueWhenEditorWasOpened_!==null&&this.valueWhenEditorWasOpened_!==this.value_&&(fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock_,\n\"field\",this.name||null,this.valueWhenEditorWasOpened_,this.value_)),this.valueWhenEditorWasOpened_=null);$.setGroup$$module$build$src$core$events$utils(!1);this.unbindInputEvents_();var a=getDiv$$module$build$src$core$widgetdiv().style;a.width=\"auto\";a.height=\"auto\";a.fontSize=\"\";a.transition=\"\";a.boxShadow=\"\";this.htmlInput_=null;a=this.getClickTarget_();if(!a)throw Error(\"A click target has not been set.\");removeClass$$module$build$src$core$utils$dom(a,\"blocklyEditing\")}onFinishEditing_(a){}bindInputEvents_(a){this.onKeyDownWrapper=\nconditionalBind$$module$build$src$core$browser_events(a,\"keydown\",this,this.onHtmlInputKeyDown_);this.onInputWrapper=conditionalBind$$module$build$src$core$browser_events(a,\"input\",this,this.onHtmlInputChange)}unbindInputEvents_(){this.onKeyDownWrapper&&(unbind$$module$build$src$core$browser_events(this.onKeyDownWrapper),this.onKeyDownWrapper=null);this.onInputWrapper&&(unbind$$module$build$src$core$browser_events(this.onInputWrapper),this.onInputWrapper=null)}onHtmlInputKeyDown_(a){if(a.key===\"Enter\")hideIfOwner$$module$build$src$core$widgetdiv(this),\nhideWithoutAnimation$$module$build$src$core$dropdowndiv();else if(a.key===\"Escape\")this.setValue(this.htmlInput_.getAttribute(\"data-untyped-default-value\"),!1),hideIfOwner$$module$build$src$core$widgetdiv(this),hideWithoutAnimation$$module$build$src$core$dropdowndiv();else if(a.key===\"Tab\"){a.preventDefault();var b,c=(b=this.workspace_)==null?void 0:b.getCursor();b=d=>(d instanceof FieldInput$$module$build$src$core$field_input||d instanceof BlockSvg$$module$build$src$core$block_svg&&d.isSimpleReporter())&&\nd!==this.getSourceBlock();a=a.shiftKey?c==null?void 0:c.getPreviousNode(this,b,!1):c==null?void 0:c.getNextNode(this,b,!1);a=a instanceof BlockSvg$$module$build$src$core$block_svg&&a.isSimpleReporter()?a.getFields().next().value:a;a instanceof FieldInput$$module$build$src$core$field_input&&(hideIfOwner$$module$build$src$core$widgetdiv(this),hideWithoutAnimation$$module$build$src$core$dropdowndiv(),c=a.getSourceBlock(),a.isFullBlockField()&&c&&c instanceof BlockSvg$$module$build$src$core$block_svg?\n$.getFocusManager$$module$build$src$core$focus_manager().focusNode(c):$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a),a.showEditor())}}onHtmlInputChange(a){a=this.value_;this.setValue(this.getValueFromEditorText_(this.htmlInput_.value),!1);this.sourceBlock_&&isEnabled$$module$build$src$core$events$utils()&&this.value_!==a&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_FIELD_INTERMEDIATE_CHANGE))(this.sourceBlock_,\nthis.name||null,a,this.value_))}setEditorValue_(a,b=!0){this.isDirty_=!0;this.isBeingEdited_&&(this.htmlInput_.value=this.getEditorText_(a));this.setValue(a,b)}resizeEditor_(){finishQueuedRenders$$module$build$src$core$render_management().then(()=>{const a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;const b=getDiv$$module$build$src$core$widgetdiv(),c=this.getScaledBBox();b.style.width=c.right-c.left+\"px\";b.style.height=c.bottom-c.top+\"px\";const d=c.top;\nb.style.left=`${a.RTL?c.right-b.offsetWidth:c.left}px`;b.style.top=`${d}px`})}repositionForWindowResize(){let a;const b=(a=this.getSourceBlock())==null?void 0:a.getRootBlock();if(!(b instanceof BlockSvg$$module$build$src$core$block_svg))return!1;bumpObjectIntoBounds$$module$build$src$core$bump_objects(this.workspace_,this.workspace_.getMetricsManager().getViewMetrics(!0),b)||this.resizeEditor_();return!0}positionTextElement_(a,b){const c=a*2+b;super.positionTextElement_(a+(c0;this.rightSide=this.outputConnection?new RightConnectionShape$$module$build$src$core$renderers$zelos$measurables$row_elements(this.constants_):null;this.rightAlignedDummyInputs=new WeakMap}getRenderer(){return this.renderer_}measure(){this.createRows_();this.addElemSpacing_();this.addRowSpacing_();this.adjustXPosition_();this.computeBounds_();this.alignRowElements_();this.finalize_()}shouldStartNewRow_(a,b){return b?b instanceof EndRowInput$$module$build$src$core$inputs$end_row_input||\na instanceof StatementInput$$module$build$src$core$inputs$statement_input||b instanceof StatementInput$$module$build$src$core$inputs$statement_input?!0:a instanceof $.ValueInput$$module$build$src$core$inputs$value_input||a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input?!this.isInline||this.isMultiRow:!1:!1}getDesiredRowWidth_(a){return a.hasStatement?this.width-this.startX-(this.constants_.INSIDE_CORNERS.rightWidth||\n0):super.getDesiredRowWidth_(a)}getInRowSpacing_(a,b){return a&&b||!this.outputConnection||!this.outputConnection.isDynamicShape||this.hasStatementInput||this.bottomRow.hasNextConnection?!a&&b&&Types$$module$build$src$core$renderers$measurables$types.isStatementInput(b)?this.constants_.STATEMENT_INPUT_PADDING_LEFT:a&&Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(a)&&b&&(Types$$module$build$src$core$renderers$measurables$types.isPreviousConnection(b)||Types$$module$build$src$core$renderers$measurables$types.isNextConnection(b))?\nb.notchOffset-this.constants_.CORNER_RADIUS:a&&Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(a)&&b&&Types$$module$build$src$core$renderers$measurables$types.isHat(b)||a&&Types$$module$build$src$core$renderers$measurables$types.isField(a)&&a.width===0?this.constants_.NO_PADDING:this.constants_.MEDIUM_PADDING:this.constants_.NO_PADDING}getSpacerRowHeight_(a,b){if(Types$$module$build$src$core$renderers$measurables$types.isTopRow(a)&&Types$$module$build$src$core$renderers$measurables$types.isBottomRow(b))return this.constants_.EMPTY_BLOCK_SPACER_HEIGHT;\nconst c=Types$$module$build$src$core$renderers$measurables$types.isInputRow(a)&&a.hasStatement,d=Types$$module$build$src$core$renderers$measurables$types.isInputRow(b)&&b.hasStatement;return d||c?(a=Math.max(this.constants_.NOTCH_HEIGHT,this.constants_.INSIDE_CORNERS.rightHeight||0),d&&c?Math.max(a,this.constants_.DUMMY_INPUT_MIN_HEIGHT):a):Types$$module$build$src$core$renderers$measurables$types.isTopRow(a)?a.hasPreviousConnection||this.outputConnection&&!this.hasStatementInput?this.constants_.NO_PADDING:\nMath.abs(this.constants_.NOTCH_HEIGHT-this.constants_.CORNER_RADIUS):Types$$module$build$src$core$renderers$measurables$types.isBottomRow(b)?this.outputConnection?!b.hasNextConnection&&this.hasStatementInput?Math.abs(this.constants_.NOTCH_HEIGHT-this.constants_.CORNER_RADIUS):this.constants_.NO_PADDING:Math.max(this.topRow.minHeight,Math.max(this.constants_.NOTCH_HEIGHT,this.constants_.CORNER_RADIUS))-this.constants_.CORNER_RADIUS:this.constants_.MEDIUM_PADDING}getSpacerRowWidth_(a,b){const c=this.width-\nthis.startX;return Types$$module$build$src$core$renderers$measurables$types.isInputRow(a)&&a.hasStatement||Types$$module$build$src$core$renderers$measurables$types.isInputRow(b)&&b.hasStatement?Math.max(c,this.constants_.STATEMENT_INPUT_SPACER_MIN_WIDTH):c}getElemCenterline_(a,b){if(a.hasStatement&&!Types$$module$build$src$core$renderers$measurables$types.isSpacer(b)&&!Types$$module$build$src$core$renderers$measurables$types.isStatementInput(b))return a.yPos+this.constants_.EMPTY_STATEMENT_INPUT_HEIGHT/\n2;if(Types$$module$build$src$core$renderers$measurables$types.isInlineInput(b)){const c=b.connectedBlock;if(c&&c.outputConnection&&c.nextConnection)return a.yPos+c.height/2}return super.getElemCenterline_(a,b)}addInput_(a,b){if((a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input)&&b.hasDummyInput&&b.align===$.Align$$module$build$src$core$inputs$align.LEFT&&a.align===$.Align$$module$build$src$core$inputs$align.RIGHT)this.rightAlignedDummyInputs.set(b,\na);else if(a instanceof StatementInput$$module$build$src$core$inputs$statement_input){b.elements.push(new StatementInput$$module$build$src$core$renderers$zelos$measurables$inputs(this.constants_,a));b.hasStatement=!0;b.align===null&&(b.align=a.align);return}super.addInput_(a,b)}addAlignmentPadding_(a,b){if(this.rightAlignedDummyInputs.get(a)){let c;for(let d=0;d=this.rows.length-1?!!this.bottomRow.hasNextConnection:!!d.precedesStatement;if(Types$$module$build$src$core$renderers$measurables$types.isInputRow(f)&&\nf.hasStatement){f.measure();let g,h;b=f.width-((h=(g=f.getLastInput())==null?void 0:g.width)!=null?h:0)+a}else if(c&&(e===2||d)&&Types$$module$build$src$core$renderers$measurables$types.isInputRow(f)&&!f.hasStatement){d=f.xPos;c=null;for(let g=0;g1)switch(c){case d.SHAPES.ROUND:return c=this.constants_.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH,c=this.height/2>c?c:this.height/2,b-c*(1-Math.sin(Math.acos((c-this.constants_.SMALL_PADDING)/c)));default:return 0}if(Types$$module$build$src$core$renderers$measurables$types.isInlineInput(a)){const e=a.connectedBlock;a=\ne?e.pathObject.outputShapeType:a.shape.type;return a==null||e&&e.outputConnection&&(e.statementInputCount||e.nextConnection)||c===d.SHAPES.HEXAGONAL&&c!==a?0:b-this.constants_.SHAPE_IN_SHAPE_PADDING[c][a]}return Types$$module$build$src$core$renderers$measurables$types.isField(a)?c===d.SHAPES.ROUND&&a.field instanceof $.FieldTextInput$$module$build$src$core$field_textinput?b-2.75*d.GRID_UNIT:b-this.constants_.SHAPE_IN_SHAPE_PADDING[c][0]:Types$$module$build$src$core$renderers$measurables$types.isIcon(a)?\nthis.constants_.SMALL_PADDING:0}finalizeVerticalAlignment_(){if(!this.outputConnection)for(let d=2;d=this.rows.length-1?!!this.bottomRow.hasNextConnection:!!g.precedesStatement;if(a?this.topRow.hasPreviousConnection:e.followsStatement){var c=f.elements[1];c=f.elements.length===3&&c instanceof Field$$module$build$src$core$renderers$measurables$field&&(c.field instanceof FieldLabel$$module$build$src$core$field_label||\nc.field instanceof FieldImage$$module$build$src$core$field_image);if(!a&&c)e.height-=this.constants_.SMALL_PADDING,g.height-=this.constants_.SMALL_PADDING,f.height-=this.constants_.MEDIUM_PADDING;else if(!a&&!b)e.height+=this.constants_.SMALL_PADDING;else if(b){a=!1;for(b=0;b=40){a=!0;break}a&&\n(e.height-=this.constants_.SMALL_PADDING,g.height-=this.constants_.SMALL_PADDING)}}}}finalize_(){this.finalizeOutputConnection_();this.finalizeHorizontalAlignment_();this.finalizeVerticalAlignment_();super.finalize_();this.rightSide&&(this.widthWithChildren+=this.rightSide.width)}},module$build$src$core$renderers$zelos$info={};module$build$src$core$renderers$zelos$info.RenderInfo=RenderInfo$$module$build$src$core$renderers$zelos$info;var PathObject$$module$build$src$core$renderers$zelos$path_object=class extends PathObject$$module$build$src$core$renderers$common$path_object{constructor(a,b,c){super(a,b,c);this.svgPathSelected=null;this.outlines=new Map;this.remainingOutlines=new Set;this.outputShapeType=null;this.constants=c}setPath(a){super.setPath(a);this.svgPathSelected&&this.svgPathSelected.setAttribute(\"d\",a)}applyColour(a){super.applyColour(a);const b=a.getParent();a.isShadow()&&b&&this.svgPath.setAttribute(\"stroke\",b.getColourTertiary());\nfor(const c of this.outlines.values())c.setAttribute(\"fill\",this.style.colourTertiary)}flipRTL(){super.flipRTL();for(const a of this.outlines.values())a.setAttribute(\"transform\",\"scale(-1 1)\")}updateSelected(a){this.setClass_(\"blocklySelected\",a);a?this.svgPathSelected||(this.svgPathSelected=this.svgPath.cloneNode(!0),this.svgPathSelected.classList.add(\"blocklyPathSelected\"),removeClass$$module$build$src$core$utils$dom(this.svgPathSelected,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME),\nremoveClass$$module$build$src$core$utils$dom(this.svgPathSelected,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME),this.svgPathSelected.removeAttribute(\"tabindex\"),this.svgPathSelected.removeAttribute(\"id\"),this.svgRoot.appendChild(this.svgPathSelected)):this.svgPathSelected&&(this.svgRoot.removeChild(this.svgPathSelected),this.svgPathSelected=null)}updateReplacementFade(a){this.setClass_(\"blocklyReplaceable\",a)}updateShapeForInputHighlight(a,b){a=a.getParentInput().name;\n(a=this.getOutlinePath(a))&&(b?a.setAttribute(\"filter\",\"url(#\"+this.constants.replacementGlowFilterId+\")\"):a.removeAttribute(\"filter\"))}beginDrawing(){this.remainingOutlines.clear();for(const a of this.outlines.keys())this.remainingOutlines.add(a)}endDrawing(){if(this.remainingOutlines.size)for(const a of this.remainingOutlines)this.removeOutlinePath(a);this.remainingOutlines.clear()}setOutlinePath(a,b){a=this.getOutlinePath(a);a.setAttribute(\"d\",b);a.setAttribute(\"fill\",this.style.colourTertiary)}getOutlinePath(a){this.outlines.has(a)||\nthis.outlines.set(a,createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyOutlinePath\",d:\"\"},this.svgRoot));this.remainingOutlines.delete(a);return this.outlines.get(a)}removeOutlinePath(a){let b,c;(b=this.outlines.get(a))==null||(c=b.parentNode)==null||c.removeChild(this.outlines.get(a));this.outlines.delete(a)}},module$build$src$core$renderers$zelos$path_object={};module$build$src$core$renderers$zelos$path_object.PathObject=PathObject$$module$build$src$core$renderers$zelos$path_object;var Renderer$$module$build$src$core$renderers$zelos$renderer=class extends Renderer$$module$build$src$core$renderers$common$renderer{constructor(a){super(a)}makeConstants_(){return new ConstantProvider$$module$build$src$core$renderers$zelos$constants}makeRenderInfo_(a){return new RenderInfo$$module$build$src$core$renderers$zelos$info(this,a)}makeDrawer_(a,b){return new Drawer$$module$build$src$core$renderers$zelos$drawer(a,b)}makePathObject(a,b){return new PathObject$$module$build$src$core$renderers$zelos$path_object(a,\nb,this.getConstants())}getConstants(){return this.constants_}};register$$module$build$src$core$renderers$common$block_rendering(\"zelos\",Renderer$$module$build$src$core$renderers$zelos$renderer);var module$build$src$core$renderers$zelos$renderer={};module$build$src$core$renderers$zelos$renderer.Renderer=Renderer$$module$build$src$core$renderers$zelos$renderer;var InsertionMarkerPreviewer$$module$build$src$core$insertion_marker_previewer=class{constructor(a){this.staticConn=this.draggedConn=this.markerConn=this.fadedBlock=null;this.workspace=a.workspace}previewReplacement(a,b,c){$.disable$$module$build$src$core$events$utils();try{this.hidePreview(),this.fadedBlock=c,c.fadeForReplacement(!0),this.workspace.getRenderer().shouldHighlightConnection(b)&&(b.highlight(),this.staticConn=b)}finally{$.enable$$module$build$src$core$events$utils()}}previewConnection(a,\nb){if(a!==this.draggedConn||b!==this.staticConn){$.disable$$module$build$src$core$events$utils();try{this.hidePreview(),this.shouldUseMarkerPreview(a,b)&&(this.markerConn=this.previewMarker(a,b)),this.workspace.getRenderer().shouldHighlightConnection(b)&&b.highlight(),this.draggedConn=a,this.staticConn=b}finally{$.enable$$module$build$src$core$events$utils()}}}shouldUseMarkerPreview(a,b){return b.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||\n!(this.workspace.getRenderer()instanceof Renderer$$module$build$src$core$renderers$zelos$renderer)}previewMarker(a,b){const c=a.getSourceBlock(),d=this.createInsertionMarker(c),e=this.getMatchingConnection(c,d,a);if(!e)return null;d.queueRender();triggerQueuedRenders$$module$build$src$core$render_management();e.connect(b);const f={x:b.x-e.x,y:b.y-e.y},g=e.getOffsetInBlock().clone();finishQueuedRenders$$module$build$src$core$render_management().then(()=>{if(!d.isDeadOrDying()){$.disable$$module$build$src$core$events$utils();\ntry{d==null||d.positionNearConnection(e,f,g),d==null||d.getSvgRoot().setAttribute(\"visibility\",\"visible\")}finally{$.enable$$module$build$src$core$events$utils()}}});return e}serializeBlockToInsertionMarker(a){const b=save$$module$build$src$core$serialization$blocks(a,{addCoordinates:!1,addInputBlocks:!1,addNextBlocks:!1,doFullSerialization:!1});if(!b)throw Error(`Failed to serialize source block. ${a.toDevString()}`);return b}createInsertionMarker(a){a=this.serializeBlockToInsertionMarker(a);a=append$$module$build$src$core$serialization$blocks(a,\nthis.workspace);for(const b of a.getDescendants(!1))b.setInsertionMarker(!0);a.initSvg();a.getSvgRoot().setAttribute(\"visibility\",\"hidden\");return a}getMatchingConnection(a,b,c){a=a.getConnections_(!0);b=b.getConnections_(!0);if(a.length!==b.length)return null;for(let d=0;d-b||a<-180+b||a>180-b?!0:!1}getClientRect(){if(!this.svgGroup_||this.autoClose||!this.isVisible())return null;const a=this.svgGroup_.getBoundingClientRect(),b=a.left;return this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.LEFT?new Rect$$module$build$src$core$utils$rect(-1E9,1E9,-1E9,b+a.width):new Rect$$module$build$src$core$utils$rect(-1E9,1E9,b,1E9)}reflowInternal_(){this.workspace_.scale=this.getFlyoutScale();\nlet a=this.getContents().reduce((b,c)=>Math.max(b,c.getElement().getBoundingRectangle().getWidth()),0);a+=this.MARGIN*1.5+this.tabWidth_;a*=this.workspace_.scale;a+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;if(this.getWidth()!==a){if(this.RTL)for(const b of this.getContents()){const c=b.getElement().getBoundingRectangle().left,d=a/this.workspace_.scale-b.getElement().getBoundingRectangle().getWidth()-this.MARGIN-this.tabWidth_;b.getElement().moveBy(d-c,0)}this.targetWorkspace.scrollbar||\nthis.autoClose||this.targetWorkspace.getFlyout()!==this||this.toolboxPosition_!==Position$$module$build$src$core$utils$toolbox.LEFT||this.targetWorkspace.translate(this.targetWorkspace.scrollX+a,this.targetWorkspace.scrollY);this.width_=a;this.position();this.targetWorkspace.resizeContents();this.targetWorkspace.recordDragTargets()}}};VerticalFlyout$$module$build$src$core$flyout_vertical.registryName=\"verticalFlyout\";\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,DEFAULT$$module$build$src$core$registry,VerticalFlyout$$module$build$src$core$flyout_vertical);var module$build$src$core$flyout_vertical={};module$build$src$core$flyout_vertical.VerticalFlyout=VerticalFlyout$$module$build$src$core$flyout_vertical;var HorizontalFlyout$$module$build$src$core$flyout_horizontal=class extends Flyout$$module$build$src$core$flyout_base{constructor(a){super(a);this.horizontalLayout=!0}setMetrics_(a){if(this.isVisible()){var b=this.workspace_.getMetricsManager(),c=b.getScrollMetrics(),d=b.getViewMetrics();b=b.getAbsoluteMetrics();typeof a.x===\"number\"&&(this.workspace_.scrollX=-(c.left+(c.width-d.width)*a.x));this.workspace_.translate(this.workspace_.scrollX+b.left,this.workspace_.scrollY+b.top)}}getX(){return 0}getY(){if(!this.isVisible())return 0;\nvar a=this.targetWorkspace.getMetricsManager();const b=a.getAbsoluteMetrics(),c=a.getViewMetrics();a=a.getToolboxMetrics();const d=this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.TOP;return this.targetWorkspace.toolboxPosition===this.toolboxPosition_?this.targetWorkspace.getToolbox()?d?a.height:c.height-this.getHeight():d?0:c.height:d?0:c.height+b.top-this.getHeight()}position(){if(this.isVisible()&&this.targetWorkspace.isVisible()){var a=this.targetWorkspace.getMetricsManager().getViewMetrics();\nthis.width_=a.width;a=a.width-2*this.CORNER_RADIUS;var b=this.getHeight()-this.CORNER_RADIUS;this.setBackgroundPath(a,b);a=this.getX();b=this.getY();this.positionAt_(this.getWidth(),this.getHeight(),a,b)}}setBackgroundPath(a,b){const c=this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.TOP,d=[\"M 0,\"+(c?0:this.CORNER_RADIUS)];c?(d.push(\"h\",a+2*this.CORNER_RADIUS),d.push(\"v\",b),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,-this.CORNER_RADIUS,this.CORNER_RADIUS),d.push(\"h\",\n-a),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,-this.CORNER_RADIUS,-this.CORNER_RADIUS)):(d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,this.CORNER_RADIUS,-this.CORNER_RADIUS),d.push(\"h\",a),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,this.CORNER_RADIUS,this.CORNER_RADIUS),d.push(\"v\",b),d.push(\"h\",-a-2*this.CORNER_RADIUS));d.push(\"z\");this.svgBackground_.setAttribute(\"d\",d.join(\" \"))}scrollToStart(){let a;(a=this.workspace_.scrollbar)==null||a.setX(this.RTL?Infinity:\n0)}wheel_(a){var b=getScrollDeltaPixels$$module$build$src$core$browser_events(a);if(b=b.x||b.y){const c=this.workspace_.getMetricsManager(),d=c.getScrollMetrics();b=c.getViewMetrics().left-d.left+b;let e;(e=this.workspace_.scrollbar)==null||e.setX(b);hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv(this.workspace_);hideWithoutAnimation$$module$build$src$core$dropdowndiv()}a.preventDefault();a.stopPropagation()}layout_(a){this.workspace_.scale=this.targetWorkspace.scale;const b=this.MARGIN;\nlet c=b+this.tabWidth_;this.RTL&&(a=a.reverse());for(const d of a)a=d.getElement().getBoundingRectangle(),a=this.RTL?c+a.getWidth():c,d.getElement().moveBy(a,b),c+=d.getElement().getBoundingRectangle().getWidth()}isDragTowardWorkspace(a){a=Math.atan2(a.y,a.x)/Math.PI*180;const b=this.dragAngleRange_;return a<90+b&&a>90-b||a>-90-b&&a<-90+b?!0:!1}getClientRect(){if(!this.svgGroup_||this.autoClose||!this.isVisible())return null;const a=this.svgGroup_.getBoundingClientRect(),b=a.top;return this.toolboxPosition_===\nPosition$$module$build$src$core$utils$toolbox.TOP?new Rect$$module$build$src$core$utils$rect(-1E9,b+a.height,-1E9,1E9):new Rect$$module$build$src$core$utils$rect(b,1E9,-1E9,1E9)}reflowInternal_(){this.workspace_.scale=this.getFlyoutScale();let a=this.getContents().reduce((b,c)=>Math.max(b,c.getElement().getBoundingRectangle().getHeight()),0);a+=this.MARGIN*1.5;a*=this.workspace_.scale;a+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;this.getHeight()!==a&&(this.targetWorkspace.scrollbar||\nthis.autoClose||this.targetWorkspace.getFlyout()!==this||this.toolboxPosition_!==Position$$module$build$src$core$utils$toolbox.TOP||this.targetWorkspace.translate(this.targetWorkspace.scrollX,this.targetWorkspace.scrollY+a),this.height_=a,this.position(),this.targetWorkspace.resizeContents(),this.targetWorkspace.recordDragTargets())}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,DEFAULT$$module$build$src$core$registry,HorizontalFlyout$$module$build$src$core$flyout_horizontal);\nvar module$build$src$core$flyout_horizontal={};module$build$src$core$flyout_horizontal.HorizontalFlyout=HorizontalFlyout$$module$build$src$core$flyout_horizontal;var FieldVariable$$module$build$src$core$field_variable=class extends FieldDropdown$$module$build$src$core$field_dropdown{constructor(a,b,c,d,e){super(Field$$module$build$src$core$field.SKIP_SETUP);this.defaultType=\"\";this.variableTypes=[];this.variable=null;this.SERIALIZABLE=!0;this.menuGenerator_=FieldVariable$$module$build$src$core$field_variable.dropdownCreate;this.defaultVariableName=typeof a===\"string\"?a:\"\";this.size_=new Size$$module$build$src$core$utils$size(0,0);a!==Field$$module$build$src$core$field.SKIP_SETUP&&\n(e?this.configure_(e):this.setTypes(c,d),b&&this.setValidator(b))}configure_(a){super.configure_(a);this.setTypes(a.variableTypes,a.defaultType)}initModel(){var a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;this.variable||(a=$.getOrCreateVariablePackage$$module$build$src$core$variables(a.workspace,null,this.defaultVariableName,this.defaultType),this.doValueUpdate_(a.getId()))}initView(){super.initView();addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\n\"blocklyVariableField\")}shouldAddBorderRect_(){const a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;return super.shouldAddBorderRect_()&&(!this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW||a.type!==\"variables_get\")}fromXml(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;const c=a.getAttribute(\"id\"),d=a.textContent,e=a.getAttribute(\"variabletype\")||a.getAttribute(\"variableType\")||\"\";b=$.getOrCreateVariablePackage$$module$build$src$core$variables(b.workspace,\nc,d,e);if(e!==null&&e!==b.getType())throw Error(\"Serialized variable type with id '\"+b.getId()+\"' had type \"+b.getType()+\", and does not match variable field that references it: \"+domToText$$module$build$src$core$xml(a)+\".\");this.setValue(b.getId())}toXml(a){this.initModel();a.id=this.variable.getId();a.textContent=this.variable.getName();this.variable.getType()&&a.setAttribute(\"variabletype\",this.variable.getType());return a}saveState(a){var b=this.saveLegacyState(FieldVariable$$module$build$src$core$field_variable);\nif(b!==null)return b;this.initModel();b={id:this.variable.getId()};a&&(b.name=this.variable.getName(),b.type=this.variable.getType());return b}loadState(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.loadLegacyState(FieldVariable$$module$build$src$core$field_variable,a)||(a=$.getOrCreateVariablePackage$$module$build$src$core$variables(b.workspace,a.id||null,a.name,a.type||\"\"),this.setValue(a.getId()))}setSourceBlock(a){if(a.isShadow())throw Error(\"Variable fields are not allowed to exist on shadow blocks.\");\nsuper.setSourceBlock(a)}getValue(){return this.variable?this.variable.getId():null}getText(){return this.variable?this.variable.getName():\"\"}getVariable(){return this.variable}getDefaultType(){return this.defaultType}getValidator(){return this.variable?this.validator_:null}doClassValidation_(a){if(a===null)return null;var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;b=$.getVariable$$module$build$src$core$variables(b.workspace,a);if(!b)return console.warn(\"Variable id doesn't point to a real variable! ID was \"+\na),null;b=b.getType();return this.typeIsAllowed(b)?a:(console.warn(\"Variable type doesn't match this field! Type was \"+b),null)}doValueUpdate_(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.variable=$.getVariable$$module$build$src$core$variables(b.workspace,a);super.doValueUpdate_(a)}typeIsAllowed(a){const b=this.getVariableTypes();if(!b)return!0;for(let c=0;c-Infinity&&(a.min=`${this.min_}`,setState$$module$build$src$core$utils$aria(a,State$$module$build$src$core$utils$aria.VALUEMIN,this.min_));this.max_c.isInFlyout=!0);this.addBlockListeners(a);return new FlyoutItem$$module$build$src$core$flyout_item(a,BLOCK_TYPE$$module$build$src$core$block_flyout_inflater)}createBlock(a,b){a.blockxml?(a=typeof a.blockxml===\"string\"?$.textToDom$$module$build$src$core$utils$xml(a.blockxml):a.blockxml,b=domToBlockInternal$$module$build$src$core$xml(a,b)):(a.enabled===void 0&&(a.enabled=a.disabled!==\"true\"&&a.disabled!==!0),a.disabledReasons===\nvoid 0&&a.enabled===!1&&(a.disabledReasons=[MANUALLY_DISABLED$$module$build$src$core$constants]),\"x\"in a&&delete a.x,\"y\"in a&&delete a.y,b=appendInternal$$module$build$src$core$serialization$blocks(a,b));return b}gapForItem(a,b){let c;a.gap?c=parseInt(String(a.gap)):a.blockxml&&(a=typeof a.blockxml===\"string\"?$.textToDom$$module$build$src$core$utils$xml(a.blockxml):a.blockxml,c=parseInt(a.getAttribute(\"gap\")));return!c||isNaN(c)?b:c}disposeItem(a){a=a.getElement();a instanceof BlockSvg$$module$build$src$core$block_svg&&\n(this.removeListeners(a.id),a.dispose(!1,!1))}removeListeners(a){let b;((b=this.listeners.get(a))!=null?b:[]).forEach(c=>unbind$$module$build$src$core$browser_events(c));this.listeners.delete(a)}setFlyout(a){if(this.flyout!==a){if(this.flyout){let c;(c=this.flyout.targetWorkspace)==null||c.removeChangeListener(this.capacityWrapper)}this.flyout=a;var b;(b=this.flyout.targetWorkspace)==null||b.addChangeListener(this.capacityWrapper)}}updateStateBasedOnCapacity(a){let b,c;const d=(b=this.flyout)==null?\nvoid 0:(c=b.targetWorkspace)==null?void 0:c.isCapacityAvailable(getBlockTypeCounts$$module$build$src$core$common(a));for(;a;)a.setDisabledReason(!d,WORKSPACE_AT_BLOCK_CAPACITY_DISABLED_REASON$$module$build$src$core$block_flyout_inflater),a=a.getNextBlock()}addBlockListeners(a){const b=[];b.push(conditionalBind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointerdown\",a,c=>{let d,e;const f=(d=this.flyout)==null?void 0:(e=d.targetWorkspace)==null?void 0:e.getGesture(c);f&&this.flyout&&(f.setStartBlock(a),\nf.handleFlyoutStart(c,this.flyout))}));b.push(bind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointermove\",null,()=>{let c,d;((c=this.flyout)==null?0:(d=c.targetWorkspace)==null?0:d.isDragging())||a.addSelect()}));b.push(bind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointerleave\",null,()=>{let c,d;((c=this.flyout)==null?0:(d=c.targetWorkspace)==null?0:d.isDragging())||a.removeSelect()}));this.listeners.set(a.id,b)}filterFlyoutBasedOnCapacity(a){!this.flyout||a&&a.type!==EventType$$module$build$src$core$events$type.BLOCK_CREATE&&\na.type!==EventType$$module$build$src$core$events$type.BLOCK_DELETE||this.flyout.getWorkspace().getTopBlocks(!1).forEach(b=>{this.permanentlyDisabledBlocks.has(b)||this.updateStateBasedOnCapacity(b)})}getType(){return BLOCK_TYPE$$module$build$src$core$block_flyout_inflater}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,BLOCK_TYPE$$module$build$src$core$block_flyout_inflater,BlockFlyoutInflater$$module$build$src$core$block_flyout_inflater);\nvar module$build$src$core$block_flyout_inflater={};module$build$src$core$block_flyout_inflater.BlockFlyoutInflater=BlockFlyoutInflater$$module$build$src$core$block_flyout_inflater;var module$build$src$core$interfaces$i_paster={};module$build$src$core$interfaces$i_paster.isPaster=isPaster$$module$build$src$core$interfaces$i_paster;var module$build$src$core$interfaces$i_rendered_element={};module$build$src$core$interfaces$i_rendered_element.isRenderedElement=isRenderedElement$$module$build$src$core$interfaces$i_rendered_element;var ConstantProvider$$module$build$src$core$renderers$geras$constants=class extends ConstantProvider$$module$build$src$core$renderers$common$constants{constructor(){super();this.FIELD_TEXT_BASELINE_CENTER=!1;this.DARK_PATH_OFFSET=1;this.MAX_BOTTOM_WIDTH=30;this.STATEMENT_BOTTOM_SPACER=-this.NOTCH_HEIGHT/2}getCSS_(a){return super.getCSS_(a).concat([`${a} .blocklyInsertionMarker>.blocklyPathLight,`,`${a} .blocklyInsertionMarker>.blocklyPathDark {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\"stroke: none;\",\n\"}\"])}},module$build$src$core$renderers$geras$constants={};module$build$src$core$renderers$geras$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$geras$constants;var Highlighter$$module$build$src$core$renderers$geras$highlighter=class{constructor(a){this.inlineSteps_=this.steps_=\"\";this.info_=a;this.RTL_=this.info_.RTL;a=a.getRenderer();this.constants_=a.getConstants();this.highlightConstants_=a.getHighlightConstants();this.highlightOffset=this.highlightConstants_.OFFSET;this.outsideCornerPaths_=this.highlightConstants_.OUTSIDE_CORNER;this.insideCornerPaths_=this.highlightConstants_.INSIDE_CORNER;this.puzzleTabPaths_=this.highlightConstants_.PUZZLE_TAB;this.notchPaths_=\nthis.highlightConstants_.NOTCH;this.startPaths_=this.highlightConstants_.START_HAT;this.jaggedTeethPaths_=this.highlightConstants_.JAGGED_TEETH}getPath(){return this.steps_+\"\\n\"+this.inlineSteps_}drawTopCorner(a){this.steps_+=moveBy$$module$build$src$core$utils$svg_paths(a.xPos,this.info_.startY);for(let b=0,c;c=a.elements[b];b++)Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(c)?this.steps_+=this.highlightConstants_.START_POINT:Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(c)?\nthis.steps_+=this.outsideCornerPaths_.topLeft(this.RTL_):Types$$module$build$src$core$renderers$measurables$types.isPreviousConnection(c)?this.steps_+=this.notchPaths_.pathLeft:Types$$module$build$src$core$renderers$measurables$types.isHat(c)?this.steps_+=this.startPaths_.path(this.RTL_):Types$$module$build$src$core$renderers$measurables$types.isSpacer(c)&&c.width!==0&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",c.xPos+c.width-this.highlightOffset));this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",\na.xPos+a.width-this.highlightOffset)}drawJaggedEdge_(a){this.info_.RTL&&(this.steps_+=this.jaggedTeethPaths_.pathLeft+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a.height-this.jaggedTeethPaths_.height-this.highlightOffset))}drawValueInput(a){const b=a.getLastInput();if(this.RTL_){const c=a.height-b.connectionHeight;this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos+b.width-this.highlightOffset,a.yPos)+this.puzzleTabPaths_.pathDown(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",\nc)}else this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos+b.width,a.yPos)+this.puzzleTabPaths_.pathDown(this.RTL_)}drawStatementInput(a){const b=a.getLastInput();if(b)if(this.RTL_){const c=a.height-2*this.insideCornerPaths_.height;this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos,a.yPos)+this.insideCornerPaths_.pathTop(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",c)+this.insideCornerPaths_.pathBottom(this.RTL_)+lineTo$$module$build$src$core$utils$svg_paths(a.width-\nb.xPos-this.insideCornerPaths_.width,0)}else this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos,a.yPos+a.height)+this.insideCornerPaths_.pathBottom(this.RTL_)+lineTo$$module$build$src$core$utils$svg_paths(a.width-b.xPos-this.insideCornerPaths_.width,0)}drawRightSideRow(a){const b=a.xPos+a.width-this.highlightOffset;a instanceof SpacerRow$$module$build$src$core$renderers$measurables$spacer_row&&a.followsStatement&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",b));\nthis.RTL_&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",b),a.height>this.highlightOffset&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+a.height-this.highlightOffset)))}drawBottomRow(a){if(this.RTL_)this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.baseline-this.highlightOffset);else{const b=this.info_.bottomRow.elements[0];Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(b)?this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(a.xPos+\nthis.highlightOffset,a.baseline-this.highlightOffset):Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(b)&&(this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(a.xPos,a.baseline),this.steps_+=this.outsideCornerPaths_.bottomLeft())}}drawLeft(){var a=this.info_.outputConnection;a&&(a=a.connectionOffsetY+a.height,this.RTL_?this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(this.info_.startX,a):(this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(this.info_.startX+\nthis.highlightOffset,this.info_.bottomRow.baseline-this.highlightOffset),this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a)),this.steps_+=this.puzzleTabPaths_.pathUp(this.RTL_));this.RTL_||(a=this.info_.topRow,Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(a.elements[0])?this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",this.outsideCornerPaths_.height):this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.capline+this.highlightOffset))}drawInlineInput(a){const b=\nthis.highlightOffset,c=a.xPos+a.connectionWidth;var d=a.centerline-a.height/2;const e=a.width-a.connectionWidth,f=d+b;this.RTL_?(d=a.connectionOffsetY-b,a=a.height-(a.connectionOffsetY+a.connectionHeight)+b,this.inlineSteps_+=moveTo$$module$build$src$core$utils$svg_paths(c-b,f)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",d)+this.puzzleTabPaths_.pathDown(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",e)):this.inlineSteps_+=\nmoveTo$$module$build$src$core$utils$svg_paths(a.xPos+a.width+b,f)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a.height)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-e)+moveTo$$module$build$src$core$utils$svg_paths(c,d+a.connectionOffsetY)+this.puzzleTabPaths_.pathDown(this.RTL_)}},module$build$src$core$renderers$geras$highlighter={};module$build$src$core$renderers$geras$highlighter.Highlighter=Highlighter$$module$build$src$core$renderers$geras$highlighter;var Drawer$$module$build$src$core$renderers$geras$drawer=class extends Drawer$$module$build$src$core$renderers$common$drawer{constructor(a,b){super(a,b);this.highlighter_=new Highlighter$$module$build$src$core$renderers$geras$highlighter(b)}draw(){this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();const a=this.block_.pathObject;a.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);a.setHighlightPath(this.highlighter_.getPath());this.info_.RTL&&a.flipRTL();this.recordSizeOnBlock_()}drawTop_(){this.highlighter_.drawTopCorner(this.info_.topRow);\nthis.highlighter_.drawRightSideRow(this.info_.topRow);super.drawTop_()}drawJaggedEdge_(a){this.highlighter_.drawJaggedEdge_(a);super.drawJaggedEdge_(a)}drawValueInput_(a){this.highlighter_.drawValueInput(a);super.drawValueInput_(a)}drawStatementInput_(a){this.highlighter_.drawStatementInput(a);super.drawStatementInput_(a)}drawRightSideRow_(a){this.highlighter_.drawRightSideRow(a);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",a.xPos+a.width)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",\na.yPos+a.height)}drawBottom_(){this.highlighter_.drawBottomRow(this.info_.bottomRow);super.drawBottom_()}drawLeft_(){this.highlighter_.drawLeft();super.drawLeft_()}drawInlineInput_(a){this.highlighter_.drawInlineInput(a);super.drawInlineInput_(a)}positionInlineInputConnection_(a){const b=a.centerline-a.height/2;if(a.connectionModel){let c=a.xPos+a.connectionWidth+this.constants_.DARK_PATH_OFFSET;this.info_.RTL&&(c*=-1);a.connectionModel.setOffsetInBlock(c,b+a.connectionOffsetY+this.constants_.DARK_PATH_OFFSET)}}positionStatementInputConnection_(a){const b=\na.getLastInput();if(b==null?0:b.connectionModel){let c=a.xPos+a.statementEdge+b.notchOffset;c=this.info_.RTL?c*-1:c+this.constants_.DARK_PATH_OFFSET;b.connectionModel.setOffsetInBlock(c,a.yPos+this.constants_.DARK_PATH_OFFSET)}}positionExternalValueConnection_(a){const b=a.getLastInput();if(b&&b.connectionModel){let c=a.xPos+a.width+this.constants_.DARK_PATH_OFFSET;this.info_.RTL&&(c*=-1);b.connectionModel.setOffsetInBlock(c,a.yPos)}}positionNextConnection_(){const a=this.info_.bottomRow;if(a.connection){const b=\na.connection,c=b.xPos;b.connectionModel.setOffsetInBlock((this.info_.RTL?-c:c)+this.constants_.DARK_PATH_OFFSET/2,a.baseline+this.constants_.DARK_PATH_OFFSET)}}},module$build$src$core$renderers$geras$drawer={};module$build$src$core$renderers$geras$drawer.Drawer=Drawer$$module$build$src$core$renderers$geras$drawer;var HighlightConstantProvider$$module$build$src$core$renderers$geras$highlight_constants=class{constructor(a){this.OFFSET=.5;this.constantProvider=a;this.START_POINT=moveBy$$module$build$src$core$utils$svg_paths(this.OFFSET,this.OFFSET)}init(){this.INSIDE_CORNER=this.makeInsideCorner();this.OUTSIDE_CORNER=this.makeOutsideCorner();this.PUZZLE_TAB=this.makePuzzleTab();this.NOTCH=this.makeNotch();this.JAGGED_TEETH=this.makeJaggedTeeth();this.START_HAT=this.makeStartHat()}makeInsideCorner(){const a=this.constantProvider.CORNER_RADIUS,\nb=this.OFFSET,c=(1-Math.SQRT1_2)*(a+b)-b,d=moveBy$$module$build$src$core$utils$svg_paths(c,c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(-c-b,a-c)),e=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a+b,point$$module$build$src$core$utils$svg_paths(a+b,a+b)),f=moveBy$$module$build$src$core$utils$svg_paths(c,-c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a+b,point$$module$build$src$core$utils$svg_paths(a-c,c+b));return{width:a+\nb,height:a,pathTop(g){return g?d:\"\"},pathBottom(g){return g?e:f}}}makeOutsideCorner(){const a=this.constantProvider.CORNER_RADIUS,b=this.OFFSET,c=(1-Math.SQRT1_2)*(a-b)+b,d=moveBy$$module$build$src$core$utils$svg_paths(c,c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(a-c,-c+b)),e=moveBy$$module$build$src$core$utils$svg_paths(b,a)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(a,-a+\nb)),f=-c,g=moveBy$$module$build$src$core$utils$svg_paths(c,f)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(-c+b,-f-a));return{height:a,topLeft(h){return h?d:e},bottomLeft(){return g}}}makePuzzleTab(){const a=this.constantProvider.TAB_WIDTH,b=this.constantProvider.TAB_HEIGHT,c=moveBy$$module$build$src$core$utils$svg_paths(-2,-b+2.5+.9)+lineTo$$module$build$src$core$utils$svg_paths(a*-.45,-2.1),d=lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",\n2.5)+moveBy$$module$build$src$core$utils$svg_paths(-a*.97,2.5)+curve$$module$build$src$core$utils$svg_paths(\"q\",[point$$module$build$src$core$utils$svg_paths(-a*.05,10),point$$module$build$src$core$utils$svg_paths(a*.3,9.5)])+moveBy$$module$build$src$core$utils$svg_paths(a*.67,-1.9)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",2.5),e=lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",-1.5)+moveBy$$module$build$src$core$utils$svg_paths(a*-.92,-.5)+curve$$module$build$src$core$utils$svg_paths(\"q\",\n[point$$module$build$src$core$utils$svg_paths(a*-.19,-5.5),point$$module$build$src$core$utils$svg_paths(0,-11)])+moveBy$$module$build$src$core$utils$svg_paths(a*.92,1),f=moveBy$$module$build$src$core$utils$svg_paths(-5,b-.7)+lineTo$$module$build$src$core$utils$svg_paths(a*.46,-2.1);return{width:a,height:b,pathUp(g){return g?c:e},pathDown(g){return g?d:f}}}makeNotch(){return{pathLeft:lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",this.OFFSET)+this.constantProvider.NOTCH.pathLeft}}makeJaggedTeeth(){return{pathLeft:lineTo$$module$build$src$core$utils$svg_paths(5.1,\n2.6)+moveBy$$module$build$src$core$utils$svg_paths(-10.2,6.8)+lineTo$$module$build$src$core$utils$svg_paths(5.1,2.6),height:12,width:10.2}}makeStartHat(){const a=this.constantProvider.START_HAT.height,b=moveBy$$module$build$src$core$utils$svg_paths(25,-8.7)+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(29.7,-6.2),point$$module$build$src$core$utils$svg_paths(57.2,-.5),point$$module$build$src$core$utils$svg_paths(75,8.7)]),c=curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(17.8,-9.2),point$$module$build$src$core$utils$svg_paths(45.3,-14.9),point$$module$build$src$core$utils$svg_paths(75,-8.7)])+moveTo$$module$build$src$core$utils$svg_paths(100.5,a+.5);return{path(d){return d?b:c}}}},module$build$src$core$renderers$geras$highlight_constants={};module$build$src$core$renderers$geras$highlight_constants.HighlightConstantProvider=HighlightConstantProvider$$module$build$src$core$renderers$geras$highlight_constants;var InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input=class extends InlineInput$$module$build$src$core$renderers$measurables$inline_input{constructor(a,b){super(a,b);this.constants_=a;this.connectedBlock&&(this.width+=this.constants_.DARK_PATH_OFFSET,this.height+=this.constants_.DARK_PATH_OFFSET)}},module$build$src$core$renderers$geras$measurables$inline_input={};module$build$src$core$renderers$geras$measurables$inline_input.InlineInput=InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input;var StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input=class extends StatementInput$$module$build$src$core$renderers$measurables$statement_input{constructor(a,b){super(a,b);this.constants_=a;this.connectedBlock&&(this.height+=this.constants_.DARK_PATH_OFFSET)}},module$build$src$core$renderers$geras$measurables$statement_input={};module$build$src$core$renderers$geras$measurables$statement_input.StatementInput=StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input;var RenderInfo$$module$build$src$core$renderers$geras$info=class extends RenderInfo$$module$build$src$core$renderers$common$info{constructor(a,b){super(a,b);this.renderer_=a}getRenderer(){return this.renderer_}populateBottomRow_(){super.populateBottomRow_();this.block_.inputList.length&&this.block_.inputList[this.block_.inputList.length-1]instanceof StatementInput$$module$build$src$core$inputs$statement_input||(this.bottomRow.minHeight=this.constants_.MEDIUM_PADDING-this.constants_.DARK_PATH_OFFSET)}addInput_(a,\nb){if(this.isInline&&a instanceof $.ValueInput$$module$build$src$core$inputs$value_input)b.elements.push(new InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input(this.constants_,a)),b.hasInlineInput=!0;else if(a instanceof StatementInput$$module$build$src$core$inputs$statement_input)b.elements.push(new StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input(this.constants_,a)),b.hasStatement=!0;else if(a instanceof $.ValueInput$$module$build$src$core$inputs$value_input)b.elements.push(new ExternalValueInput$$module$build$src$core$renderers$measurables$external_value_input(this.constants_,\na)),b.hasExternalInput=!0;else if(a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input)b.minHeight=Math.max(b.minHeight,this.constants_.DUMMY_INPUT_MIN_HEIGHT),b.hasDummyInput=!0;this.isInline||b.align!==null||(b.align=a.align)}addElemSpacing_(){let a=!1;for(let c=0,d;d=this.rows[c];c++)d.hasExternalInput&&(a=!0);for(let c=0,d;d=this.rows[c];c++){var b=d.elements;d.elements=[];d.startsWithElemSpacer()&&d.elements.push(new InRowSpacer$$module$build$src$core$renderers$measurables$in_row_spacer(this.constants_,\nthis.getInRowSpacing_(null,b[0])));if(b.length){for(let e=0;e0&&this.addAlignmentPadding_(e,a),a=e.width)}else super.alignRowElements_()}getDesiredRowWidth_(a){return this.isInline&&a.hasStatement?this.statementEdge+\nthis.constants_.MAX_BOTTOM_WIDTH+this.startX:super.getDesiredRowWidth_(a)}finalize_(){let a=0,b=0;for(let d=0,e;e=this.rows[d];d++){e.yPos=b;e.xPos=this.startX;b+=e.height;a=Math.max(a,e.widthWithConnectedBlocks);var c=b-this.topRow.ascenderHeight;e===this.bottomRow&&c>>/sprites.png);\\n height: 16px;\\n vertical-align: middle;\\n visibility: hidden;\\n width: 16px;\\n}\\n\\n.blocklyToolboxCategoryIconClosed {\\n background-position: -32px -1px;\\n}\\n\\n.blocklyToolbox[dir=\"RTL\"] .blocklyToolboxCategoryIconClosed {\\n background-position: 0 -1px;\\n}\\n\\n.blocklyToolboxSelected>.blocklyToolboxCategoryIconClosed {\\n background-position: -32px -17px;\\n}\\n\\n.blocklyToolbox[dir=\"RTL\"] .blocklyToolboxSelected>.blocklyToolboxCategoryIconClosed {\\n background-position: 0 -17px;\\n}\\n\\n.blocklyToolboxCategoryIconOpen {\\n background-position: -16px -1px;\\n}\\n\\n.blocklyToolboxSelected>.blocklyToolboxCategoryIconOpen {\\n background-position: -16px -17px;\\n}\\n\\n.blocklyToolboxCategoryLabel {\\n cursor: default;\\n font: 16px sans-serif;\\n padding: 0 3px;\\n vertical-align: middle;\\n}\\n\\n.blocklyToolboxDelete .blocklyToolboxCategoryLabel {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyToolboxSelected .blocklyToolboxCategoryLabel {\\n color: #fff;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX_ITEM,ToolboxCategory$$module$build$src$core$toolbox$category.registrationName,ToolboxCategory$$module$build$src$core$toolbox$category);var module$build$src$core$toolbox$category={};module$build$src$core$toolbox$category.ToolboxCategory=ToolboxCategory$$module$build$src$core$toolbox$category;var ToolboxSeparator$$module$build$src$core$toolbox$separator=class extends ToolboxItem$$module$build$src$core$toolbox$toolbox_item{constructor(a,b){super(a,b);this.cssConfig_={container:\"blocklyTreeSeparator\"};this.htmlDiv=null;Object.assign(this.cssConfig_,a.cssconfig||a.cssConfig)}init(){this.createDom_()}createDom_(){const a=document.createElement(\"div\");a.tabIndex=-1;a.id=this.getId();const b=this.cssConfig_.container;b&&addClass$$module$build$src$core$utils$dom(a,b);return this.htmlDiv=a}getDiv(){return this.htmlDiv}dispose(){removeNode$$module$build$src$core$utils$dom(this.htmlDiv)}};\nToolboxSeparator$$module$build$src$core$toolbox$separator.registrationName=\"sep\";register$$module$build$src$core$css('\\n.blocklyTreeSeparator {\\n border-bottom: solid #e5e5e5 1px;\\n height: 0;\\n margin: 5px 0;\\n}\\n\\n.blocklyToolbox[layout=\"h\"] .blocklyTreeSeparator {\\n border-right: solid #e5e5e5 1px;\\n border-bottom: none;\\n height: auto;\\n margin: 0 5px 0 5px;\\n padding: 5px 0;\\n width: 0;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX_ITEM,ToolboxSeparator$$module$build$src$core$toolbox$separator.registrationName,ToolboxSeparator$$module$build$src$core$toolbox$separator);var module$build$src$core$toolbox$separator={};module$build$src$core$toolbox$separator.ToolboxSeparator=ToolboxSeparator$$module$build$src$core$toolbox$separator;var CollapsibleToolboxCategory$$module$build$src$core$toolbox$collapsible_category=class extends ToolboxCategory$$module$build$src$core$toolbox$category{constructor(a,b,c){super(a,b,c);this.subcategoriesDiv_=null;this.expanded_=!1;this.toolboxItems_=[]}makeDefaultCssConfig_(){const a=super.makeDefaultCssConfig_();a.contents=\"blocklyToolboxCategoryGroup\";return a}parseContents_(a){if(\"custom\"in a)this.flyoutItems_=a.custom;else{const b=a.contents;if(b){this.flyoutItems_=[];a=!0;for(let c=0;cb.dispose());this.contents.clear();this.renderContents_(a.contents);this.position();this.handleToolboxItemResize()}renderContents_(a){const b=document.createDocumentFragment();\nfor(let c=0;c\n{a.refreshTheme&&a.refreshTheme()})}refreshSelection(){this.selectedItem_&&this.selectedItem_.isSelectable()&&this.selectedItem_.getContents().length&&this.flyout.show(this.selectedItem_.getContents())}setVisible(a){this.isVisible_!==a&&(this.HtmlDiv.style.display=a?\"block\":\"none\",this.isVisible_=a,this.workspace_.recordDragTargets())}autoHide(a){!a&&this.flyout&&this.flyout.autoClose&&this.clearSelection()}setSelectedItem(a){const b=this.selectedItem_;!a&&!b||a&&!isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item(a)||\n(this.shouldDeselectItem_(b,a)&&b!==null&&this.deselectItem_(b),this.shouldSelectItem_(b,a)&&a!==null&&this.selectItem_(b,a),this.updateFlyout_(b,a),this.fireSelectEvent(b,a))}shouldDeselectItem_(a,b){return a!==null&&(!a.isCollapsible()||a!==b)}shouldSelectItem_(a,b){return b!==null&&b!==a}deselectItem_(a){this.selectedItem_=null;this.previouslySelectedItem_=a;a.setSelected(!1);setState$$module$build$src$core$utils$aria(this.contentsDiv_,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,\"\")}selectItem_(a,\nb){this.selectedItem_=b;this.previouslySelectedItem_=a;b.setSelected(!0);setState$$module$build$src$core$utils$aria(this.contentsDiv_,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,b.getId())}selectItemByPosition(a){(a=this.getToolboxItems()[a])&&this.setSelectedItem(a)}updateFlyout_(a,b){b&&(a!==b||b.isCollapsible())&&b.getContents().length?(this.flyout.show(b.getContents()),this.flyout.scrollToStart()):this.flyout.hide()}fireSelectEvent(a,b){const c=a&&a.getName();let d=b&&b.getName();\na===b&&(d=null);a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.TOOLBOX_ITEM_SELECT))(c,d,this.workspace_.id);fire$$module$build$src$core$events$utils(a)}selectParent(){return this.selectedItem_?this.selectedItem_.isCollapsible()&&this.selectedItem_.isExpanded()?(this.selectedItem_.toggleExpanded(),!0):this.selectedItem_.getParent()&&this.selectedItem_.getParent().isSelectable()?(this.setSelectedItem(this.selectedItem_.getParent()),!0):!1:!1}selectChild(){if(!this.selectedItem_||\n!this.selectedItem_.isCollapsible())return!1;const a=this.selectedItem_;a.isExpanded()?this.selectNext():a.toggleExpanded();return!0}selectNext(){if(!this.selectedItem_)return!1;const a=[...this.contents.values()];let b=a.indexOf(this.selectedItem_)+1;if(b>-1&&b-1&&ba.dispose());for(let a=0;ac.isSelectable()))!=null?b:null}return null}getNestedTrees(){return[]}lookUpFocusableNode(a){return this.getToolboxItemById(a)}onTreeFocus(a,\nb){a!==this?this.getSelectedItem()!==a&&this.setSelectedItem(a):this.clearSelection()}onTreeBlur(a){let b;a&&a===((b=this.flyout)==null?void 0:b.getWorkspace())||this.autoHide(!1)}};register$$module$build$src$core$css('\\n.blocklyToolboxDelete {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyToolboxGrab {\\n cursor: url(\"<<>>/handclosed.cur\"), auto;\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n}\\n\\n/* Category tree in Toolbox. */\\n.blocklyToolbox {\\n box-sizing: border-box;\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background-color: #ddd;\\n overflow-x: visible;\\n overflow-y: auto;\\n padding: 4px 0 4px 0;\\n position: absolute;\\n z-index: 70; /* so blocks go under toolbox when dragging */\\n -webkit-tap-highlight-color: transparent; /* issue #1345 */\\n}\\n\\n.blocklyToolboxCategoryGroup {\\n display: flex;\\n flex-wrap: wrap;\\n flex-direction: column;\\n}\\n\\n.blocklyToolboxCategoryGroup:focus {\\n outline: none;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX,DEFAULT$$module$build$src$core$registry,Toolbox$$module$build$src$core$toolbox$toolbox);var module$build$src$core$toolbox$toolbox={};module$build$src$core$toolbox$toolbox.Toolbox=Toolbox$$module$build$src$core$toolbox$toolbox;var module$build$src$core$interfaces$i_navigation_policy={};var VERSION$$module$build$src$core$blockly=\"12.3.1\",INPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE,OUTPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE,NEXT_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT,PREVIOUS_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT,\nTOOLBOX_AT_TOP$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.TOP,TOOLBOX_AT_BOTTOM$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.BOTTOM,TOOLBOX_AT_LEFT$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.LEFT,TOOLBOX_AT_RIGHT$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.RIGHT,svgResize$$module$build$src$core$blockly=svgResize$$module$build$src$core$common,getMainWorkspace$$module$build$src$core$blockly=\ngetMainWorkspace$$module$build$src$core$common,getSelected$$module$build$src$core$blockly=getSelected$$module$build$src$core$common,defineBlocksWithJsonArray$$module$build$src$core$blockly=defineBlocksWithJsonArray$$module$build$src$core$common,setParentContainer$$module$build$src$core$blockly=setParentContainer$$module$build$src$core$common,COLLAPSE_CHARS$$module$build$src$core$blockly=COLLAPSE_CHARS$$module$build$src$core$internal_constants,OPPOSITE_TYPE$$module$build$src$core$blockly=OPPOSITE_TYPE$$module$build$src$core$internal_constants,\nRENAME_VARIABLE_ID$$module$build$src$core$blockly=RENAME_VARIABLE_ID$$module$build$src$core$internal_constants,DELETE_VARIABLE_ID$$module$build$src$core$blockly=DELETE_VARIABLE_ID$$module$build$src$core$internal_constants,COLLAPSED_INPUT_NAME$$module$build$src$core$blockly=COLLAPSED_INPUT_NAME$$module$build$src$core$constants,COLLAPSED_FIELD_NAME$$module$build$src$core$blockly=COLLAPSED_FIELD_NAME$$module$build$src$core$constants,VARIABLE_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$variables,\nVARIABLE_DYNAMIC_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$variables_dynamic,PROCEDURE_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$procedures;Workspace$$module$build$src$core$workspace.prototype.newBlock=function(a,b){return new Block$$module$build$src$core$block(this,a,b)};WorkspaceSvg$$module$build$src$core$workspace_svg.prototype.newBlock=function(a,b){return new BlockSvg$$module$build$src$core$block_svg(this,a,b)};\nWorkspace$$module$build$src$core$workspace.prototype.newComment=function(a){return new WorkspaceComment$$module$build$src$core$comments$workspace_comment(this,a)};WorkspaceSvg$$module$build$src$core$workspace_svg.prototype.newComment=function(a){return new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(this,a)};WorkspaceSvg$$module$build$src$core$workspace_svg.newTrashcan=function(a){return new Trashcan$$module$build$src$core$trashcan(a)};\nMiniWorkspaceBubble$$module$build$src$core$bubbles$mini_workspace_bubble.prototype.newWorkspaceSvg=function(a){return new WorkspaceSvg$$module$build$src$core$workspace_svg(a)};$.Names$$module$build$src$core$names.prototype.populateProcedures=function(a){a=allProcedures$$module$build$src$core$procedures(a);a=a[0].concat(a[1]);for(let b=0;b0,text:c.replace(\"%1\",d.getText()),callback:$.callbackFactory$$module$build$src$core$contextmenu(this,b)})}else if(this.type===\"variables_get_dynamic\"||this.type===\"variables_get_reporter_dynamic\")c={text:$.Msg$$module$build$src$core$msg.RENAME_VARIABLE,\nenabled:!0,callback:renameOptionCallbackFactory$$module$build$src$blocks$variables_dynamic(this)},d=this.getField(\"VAR\").getText(),d={text:$.Msg$$module$build$src$core$msg.DELETE_VARIABLE.replace(\"%1\",d),enabled:!0,callback:deleteOptionCallbackFactory$$module$build$src$blocks$variables_dynamic(this)},a.unshift(c),a.unshift(d)},onchange:function(a){a=this.getFieldValue(\"VAR\");a=$.getVariable$$module$build$src$core$variables(this.workspace,a);this.type===\"variables_get_dynamic\"?this.outputConnection.setCheck(a.getType()):\nthis.getInput(\"VALUE\").connection.setCheck(a.getType())}},renameOptionCallbackFactory$$module$build$src$blocks$variables_dynamic=function(a){return function(){const b=a.workspace,c=a.getField(\"VAR\").getVariable();$.renameVariable$$module$build$src$core$variables(b,c)}},deleteOptionCallbackFactory$$module$build$src$blocks$variables_dynamic=function(a){return function(){const b=a.getField(\"VAR\").getVariable();b&&$.deleteVariable$$module$build$src$core$variables(b.getWorkspace(),b,a)}};\n$.registerMixin$$module$build$src$core$extensions(\"contextMenu_variableDynamicSetterGetter\",CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables_dynamic);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$variables_dynamic);var module$build$src$blocks$variables_dynamic={blocks:blocks$$module$build$src$blocks$variables_dynamic};var blocks$$module$build$src$blocks$variables=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"variables_get\",message0:\"%1\",args0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_VARIABLES_DEFAULT_NAME}\"}],output:null,style:\"variable_blocks\",helpUrl:\"%{BKY_VARIABLES_GET_HELPURL}\",tooltip:\"%{BKY_VARIABLES_GET_TOOLTIP}\",extensions:[\"contextMenu_variableSetterGetter\"]},{type:\"variables_set\",message0:\"%{BKY_VARIABLES_SET}\",args0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_VARIABLES_DEFAULT_NAME}\"},\n{type:\"input_value\",name:\"VALUE\"}],previousStatement:null,nextStatement:null,style:\"variable_blocks\",tooltip:\"%{BKY_VARIABLES_SET_TOOLTIP}\",helpUrl:\"%{BKY_VARIABLES_SET_HELPURL}\",extensions:[\"contextMenu_variableSetterGetter\"]}]),CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables={customContextMenu:function(a){if(!this.isInFlyout){if(this.type===\"variables_get\"){var b=\"variables_set\";var c=$.Msg$$module$build$src$core$msg.VARIABLES_GET_CREATE_SET}else b=\"variables_get\",\nc=$.Msg$$module$build$src$core$msg.VARIABLES_SET_CREATE_GET;var d=this.getField(\"VAR\");b={type:b,fields:{VAR:d.saveState(!0)}};a.push({enabled:this.workspace.remainingCapacity()>0,text:c.replace(\"%1\",d.getText()),callback:$.callbackFactory$$module$build$src$core$contextmenu(this,b)})}else if(this.type===\"variables_get\"||this.type===\"variables_get_reporter\")c={text:$.Msg$$module$build$src$core$msg.RENAME_VARIABLE,enabled:!0,callback:renameOptionCallbackFactory$$module$build$src$blocks$variables(this)},\nd=this.getField(\"VAR\").getText(),d={text:$.Msg$$module$build$src$core$msg.DELETE_VARIABLE.replace(\"%1\",d),enabled:!0,callback:deleteOptionCallbackFactory$$module$build$src$blocks$variables(this)},a.unshift(c),a.unshift(d)}},renameOptionCallbackFactory$$module$build$src$blocks$variables=function(a){return function(){const b=a.workspace,c=a.getField(\"VAR\").getVariable();$.renameVariable$$module$build$src$core$variables(b,c)}},deleteOptionCallbackFactory$$module$build$src$blocks$variables=function(a){return function(){const b=\na.getField(\"VAR\").getVariable();b&&$.deleteVariable$$module$build$src$core$variables(b.getWorkspace(),b,a)}};$.registerMixin$$module$build$src$core$extensions(\"contextMenu_variableSetterGetter\",CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$variables);var module$build$src$blocks$variables={blocks:blocks$$module$build$src$blocks$variables};var blocks$$module$build$src$blocks$text=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"text\",message0:\"%1\",args0:[{type:\"field_input\",name:\"TEXT\",text:\"\"}],output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_TEXT_HELPURL}\",tooltip:\"%{BKY_TEXT_TEXT_TOOLTIP}\",extensions:[\"text_quotes\",\"parent_tooltip_when_inline\"]},{type:\"text_join\",message0:\"\",output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_JOIN_HELPURL}\",tooltip:\"%{BKY_TEXT_JOIN_TOOLTIP}\",mutator:\"text_join_mutator\"},\n{type:\"text_create_join_container\",message0:\"%{BKY_TEXT_CREATE_JOIN_TITLE_JOIN} %1 %2\",args0:[{type:\"input_dummy\"},{type:\"input_statement\",name:\"STACK\"}],style:\"text_blocks\",tooltip:\"%{BKY_TEXT_CREATE_JOIN_TOOLTIP}\",enableContextMenu:!1},{type:\"text_create_join_item\",message0:\"%{BKY_TEXT_CREATE_JOIN_ITEM_TITLE_ITEM}\",previousStatement:null,nextStatement:null,style:\"text_blocks\",tooltip:\"%{BKY_TEXT_CREATE_JOIN_ITEM_TOOLTIP}\",enableContextMenu:!1},{type:\"text_append\",message0:\"%{BKY_TEXT_APPEND_TITLE}\",\nargs0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_TEXT_APPEND_VARIABLE}\"},{type:\"input_value\",name:\"TEXT\"}],previousStatement:null,nextStatement:null,style:\"text_blocks\",extensions:[\"text_append_tooltip\"]},{type:\"text_length\",message0:\"%{BKY_TEXT_LENGTH_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Number\",style:\"text_blocks\",tooltip:\"%{BKY_TEXT_LENGTH_TOOLTIP}\",helpUrl:\"%{BKY_TEXT_LENGTH_HELPURL}\"},{type:\"text_isEmpty\",message0:\"%{BKY_TEXT_ISEMPTY_TITLE}\",\nargs0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Boolean\",style:\"text_blocks\",tooltip:\"%{BKY_TEXT_ISEMPTY_TOOLTIP}\",helpUrl:\"%{BKY_TEXT_ISEMPTY_HELPURL}\"},{type:\"text_indexOf\",message0:\"%{BKY_TEXT_INDEXOF_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:\"String\"},{type:\"field_dropdown\",name:\"END\",options:[[\"%{BKY_TEXT_INDEXOF_OPERATOR_FIRST}\",\"FIRST\"],[\"%{BKY_TEXT_INDEXOF_OPERATOR_LAST}\",\"LAST\"]]},{type:\"input_value\",name:\"FIND\",check:\"String\"}],output:\"Number\",style:\"text_blocks\",\nhelpUrl:\"%{BKY_TEXT_INDEXOF_HELPURL}\",inputsInline:!0,extensions:[\"text_indexOf_tooltip\"]},{type:\"text_charAt\",message0:\"%{BKY_TEXT_CHARAT_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:\"String\"},{type:\"field_dropdown\",name:\"WHERE\",options:[[\"%{BKY_TEXT_CHARAT_FROM_START}\",\"FROM_START\"],[\"%{BKY_TEXT_CHARAT_FROM_END}\",\"FROM_END\"],[\"%{BKY_TEXT_CHARAT_FIRST}\",\"FIRST\"],[\"%{BKY_TEXT_CHARAT_LAST}\",\"LAST\"],[\"%{BKY_TEXT_CHARAT_RANDOM}\",\"RANDOM\"]]}],output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_CHARAT_HELPURL}\",\ninputsInline:!0,mutator:\"text_charAt_mutator\"}]),GET_SUBSTRING_BLOCK$$module$build$src$blocks$text={init:function(){this.WHERE_OPTIONS_1=[[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FIRST,\"FIRST\"]];this.WHERE_OPTIONS_2=[[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_FROM_END,\n\"FROM_END\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_LAST,\"LAST\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"STRING\").setCheck(\"String\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_INPUT_IN_TEXT);const a=b=>{const c=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this[\"WHERE_OPTIONS_\"+b]});c.setValidator(function(d){const e=this.getValue();d=d===\n\"FROM_START\"||d===\"FROM_END\";d!==(e===\"FROM_START\"||e===\"FROM_END\")&&this.getSourceBlock().updateAt_(b,d)});return c};this.appendDummyInput(\"WHERE1_INPUT\").appendField(a(1),\"WHERE1\");this.appendDummyInput(\"AT1\");this.appendDummyInput(\"WHERE2_INPUT\").appendField(a(2),\"WHERE2\");this.appendDummyInput(\"AT2\");$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL);this.setInputsInline(!0);this.setOutput(!0,\n\"String\");this.updateAt_(1,!0);this.updateAt_(2,!0);this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");var b=this.getInput(\"AT1\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at1\",`${b}`);b=this.getInput(\"AT2\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at2\",`${b}`);return a},domToMutation:function(a){const b=\na.getAttribute(\"at1\")===\"true\";a=a.getAttribute(\"at2\")===\"true\";this.updateAt_(1,b);this.updateAt_(2,a)},updateAt_:function(a,b){this.removeInput(\"AT\"+a);this.removeInput(\"ORDINAL\"+a,!0);b?(this.appendValueInput(\"AT\"+a).setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\"+a).appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\"+a);a===2&&$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL&&(this.removeInput(\"TAIL\",\n!0),this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL));a===1&&(this.moveInputBefore(\"AT1\",\"WHERE2_INPUT\"),this.getInput(\"ORDINAL1\")&&this.moveInputBefore(\"ORDINAL1\",\"WHERE2_INPUT\"))}};blocks$$module$build$src$blocks$text.text_getSubstring=GET_SUBSTRING_BLOCK$$module$build$src$blocks$text;\nblocks$$module$build$src$blocks$text.text_changeCase={init:function(){const a=[[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_UPPERCASE,\"UPPERCASE\"],[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_LOWERCASE,\"LOWERCASE\"],[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_TITLECASE,\"TITLECASE\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"TEXT\").setCheck(\"String\").appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",\noptions:a}),\"CASE\");this.setOutput(!0,\"String\");this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_TOOLTIP)}};\nblocks$$module$build$src$blocks$text.text_trim={init:function(){const a=[[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_BOTH,\"BOTH\"],[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_LEFT,\"LEFT\"],[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_RIGHT,\"RIGHT\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_TRIM_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"TEXT\").setCheck(\"String\").appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a}),\n\"MODE\");this.setOutput(!0,\"String\");this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_TRIM_TOOLTIP)}};blocks$$module$build$src$blocks$text.text_print={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_PRINT_TITLE,args0:[{type:\"input_value\",name:\"TEXT\"}],previousStatement:null,nextStatement:null,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_PRINT_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_PRINT_HELPURL})}};\nvar PROMPT_COMMON$$module$build$src$blocks$text={updateType_:function(a){this.outputConnection.setCheck(a===\"NUMBER\"?\"Number\":\"String\")},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"type\",this.getFieldValue(\"TYPE\"));return a},domToMutation:function(a){this.updateType_(a.getAttribute(\"type\"))}};\nblocks$$module$build$src$blocks$text.text_prompt_ext=Object.assign({},PROMPT_COMMON$$module$build$src$blocks$text,{init:function(){var a=[[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_TEXT,\"TEXT\"],[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_NUMBER,\"NUMBER\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_PROMPT_HELPURL);this.setStyle(\"text_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});a.setValidator(b=>{this.updateType_(b)});this.appendValueInput(\"TEXT\").appendField(a,\n\"TYPE\");this.setOutput(!0,\"String\");this.setTooltip(()=>this.getFieldValue(\"TYPE\")===\"TEXT\"?$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_TEXT:$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_NUMBER)}});\nblocks$$module$build$src$blocks$text.text_prompt=Object.assign({},PROMPT_COMMON$$module$build$src$blocks$text,{init:function(){this.mixin(QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);var a=[[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_TEXT,\"TEXT\"],[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_NUMBER,\"NUMBER\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_PROMPT_HELPURL);this.setStyle(\"text_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});\na.setValidator(b=>{this.updateType_(b)});this.appendDummyInput().appendField(a,\"TYPE\").appendField(this.newQuote_(!0)).appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_input\",text:\"\"}),\"TEXT\").appendField(this.newQuote_(!1));this.setOutput(!0,\"String\");this.setTooltip(()=>this.getFieldValue(\"TYPE\")===\"TEXT\"?$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_TEXT:$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_NUMBER)}});\nblocks$$module$build$src$blocks$text.text_count={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_COUNT_MESSAGE0,args0:[{type:\"input_value\",name:\"SUB\",check:\"String\"},{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"Number\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_COUNT_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_COUNT_HELPURL})}};\nblocks$$module$build$src$blocks$text.text_replace={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_MESSAGE0,args0:[{type:\"input_value\",name:\"FROM\",check:\"String\"},{type:\"input_value\",name:\"TO\",check:\"String\"},{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"String\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_HELPURL})}};\nblocks$$module$build$src$blocks$text.text_reverse={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_MESSAGE0,args0:[{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"String\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_HELPURL})}};\nvar QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text={QUOTE_IMAGE_LEFT_DATAURI:\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC\",QUOTE_IMAGE_RIGHT_DATAURI:\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==\",\nQUOTE_IMAGE_WIDTH:12,QUOTE_IMAGE_HEIGHT:12,quoteField_:function(a){for(let b=0,c;c=this.inputList[b];b++)for(let d=0,e;e=c.fieldRow[d];d++)if(a===e.name){c.insertFieldAt(d,this.newQuote_(!0));c.insertFieldAt(d+2,this.newQuote_(!1));return}console.warn('field named \"'+a+'\" not found in '+this.toDevString())},newQuote_:function(a){a=this.RTL?!a:a;return $.fromJson$$module$build$src$core$field_registry({type:\"field_image\",src:a?this.QUOTE_IMAGE_LEFT_DATAURI:this.QUOTE_IMAGE_RIGHT_DATAURI,width:this.QUOTE_IMAGE_WIDTH,\nheight:this.QUOTE_IMAGE_HEIGHT,alt:a?\"\\u201c\":\"\\u201d\"})}},QUOTES_EXTENSION$$module$build$src$blocks$text=function(){this.mixin(QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);this.quoteField_(\"TEXT\")},JOIN_MUTATOR_MIXIN$$module$build$src$blocks$text={itemCount_:0,mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"items\",`${this.itemCount_}`);return a},domToMutation:function(a){this.itemCount_=parseInt(a.getAttribute(\"items\"),10);this.updateShape_()},\nsaveExtraState:function(){return{itemCount:this.itemCount_}},loadExtraState:function(a){this.itemCount_=a.itemCount;this.updateShape_()},decompose:function(a){const b=a.newBlock(\"text_create_join_container\");b.initSvg();let c=b.getInput(\"STACK\").connection;for(let d=0;d$.Msg$$module$build$src$core$msg.TEXT_INDEXOF_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\"0\":\"-1\"))},CHARAT_MUTATOR_MIXIN$$module$build$src$blocks$text={isAt_:!1,mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"at\",`${this.isAt_}`);return a},domToMutation:function(a){a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},updateAt_:function(a){this.removeInput(\"AT\",\n!0);this.removeInput(\"ORDINAL\",!0);a&&(this.appendValueInput(\"AT\").setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX));$.Msg$$module$build$src$core$msg.TEXT_CHARAT_TAIL&&(this.removeInput(\"TAIL\",!0),this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_CHARAT_TAIL));this.isAt_=a}},CHARAT_EXTENSION$$module$build$src$blocks$text=function(){this.getField(\"WHERE\").setValidator(function(a){a=\na===\"FROM_START\"||a===\"FROM_END\";const b=this.getSourceBlock();a!==b.isAt_&&b.updateAt_(a)});this.updateAt_(!0);this.setTooltip(()=>{var a=this.getFieldValue(\"WHERE\");let b=$.Msg$$module$build$src$core$msg.TEXT_CHARAT_TOOLTIP;(a===\"FROM_START\"||a===\"FROM_END\")&&(a=a===\"FROM_START\"?$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP:$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_END_TOOLTIP)&&(b+=\" \"+a.replace(\"%1\",this.workspace.options.oneBasedIndex?\"#1\":\"#0\"));return b})};\n$.register$$module$build$src$core$extensions(\"text_indexOf_tooltip\",INDEXOF_TOOLTIP_EXTENSION$$module$build$src$blocks$text);$.register$$module$build$src$core$extensions(\"text_quotes\",QUOTES_EXTENSION$$module$build$src$blocks$text);$.registerMixin$$module$build$src$core$extensions(\"quote_image_mixin\",QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);$.registerMutator$$module$build$src$core$extensions(\"text_join_mutator\",JOIN_MUTATOR_MIXIN$$module$build$src$blocks$text,JOIN_EXTENSION$$module$build$src$blocks$text);\n$.registerMutator$$module$build$src$core$extensions(\"text_charAt_mutator\",CHARAT_MUTATOR_MIXIN$$module$build$src$blocks$text,CHARAT_EXTENSION$$module$build$src$blocks$text);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$text);var module$build$src$blocks$text={blocks:blocks$$module$build$src$blocks$text};var blocks$$module$build$src$blocks$procedures={},PROCEDURE_DEF_COMMON$$module$build$src$blocks$procedures={setStatements_:function(a){this.hasStatements_!==a&&(a?(this.appendStatementInput(\"STACK\").appendField($.Msg$$module$build$src$core$msg.PROCEDURES_DEFNORETURN_DO),this.getInput(\"RETURN\")&&this.moveInputBefore(\"STACK\",\"RETURN\")):this.removeInput(\"STACK\",!0),this.hasStatements_=a)},updateParams_:function(){let a=\"\";this.arguments_.length&&(a=$.Msg$$module$build$src$core$msg.PROCEDURES_BEFORE_PARAMS+\n\" \"+this.arguments_.join(\", \"));$.disable$$module$build$src$core$events$utils();try{this.setFieldValue(a,\"PARAMS\")}finally{$.enable$$module$build$src$core$events$utils()}},mutationToDom:function(a){const b=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a&&b.setAttribute(\"name\",this.getFieldValue(\"NAME\"));for(let c=0;c\",\"GT\"],[\"\\u200f\\u2265\",\"GTE\"]]},{type:\"input_value\",name:\"B\"}],\ninputsInline:!0,output:\"Boolean\",style:\"logic_blocks\",helpUrl:\"%{BKY_LOGIC_COMPARE_HELPURL}\",extensions:[\"logic_compare\",\"logic_op_tooltip\"]},{type:\"logic_operation\",message0:\"%1 %2 %3\",args0:[{type:\"input_value\",name:\"A\",check:\"Boolean\"},{type:\"field_dropdown\",name:\"OP\",options:[[\"%{BKY_LOGIC_OPERATION_AND}\",\"AND\"],[\"%{BKY_LOGIC_OPERATION_OR}\",\"OR\"]]},{type:\"input_value\",name:\"B\",check:\"Boolean\"}],inputsInline:!0,output:\"Boolean\",style:\"logic_blocks\",helpUrl:\"%{BKY_LOGIC_OPERATION_HELPURL}\",extensions:[\"logic_op_tooltip\"]},\n{type:\"logic_negate\",message0:\"%{BKY_LOGIC_NEGATE_TITLE}\",args0:[{type:\"input_value\",name:\"BOOL\",check:\"Boolean\"}],output:\"Boolean\",style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_NEGATE_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_NEGATE_HELPURL}\"},{type:\"logic_null\",message0:\"%{BKY_LOGIC_NULL}\",output:null,style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_NULL_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_NULL_HELPURL}\"},{type:\"logic_ternary\",message0:\"%{BKY_LOGIC_TERNARY_CONDITION} %1\",args0:[{type:\"input_value\",name:\"IF\",check:\"Boolean\"}],\nmessage1:\"%{BKY_LOGIC_TERNARY_IF_TRUE} %1\",args1:[{type:\"input_value\",name:\"THEN\"}],message2:\"%{BKY_LOGIC_TERNARY_IF_FALSE} %1\",args2:[{type:\"input_value\",name:\"ELSE\"}],output:null,style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_TERNARY_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_TERNARY_HELPURL}\",extensions:[\"logic_ternary\"]},{type:\"controls_if_if\",message0:\"%{BKY_CONTROLS_IF_IF_TITLE_IF}\",nextStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_IF_TOOLTIP}\"},{type:\"controls_if_elseif\",\nmessage0:\"%{BKY_CONTROLS_IF_ELSEIF_TITLE_ELSEIF}\",previousStatement:null,nextStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_ELSEIF_TOOLTIP}\"},{type:\"controls_if_else\",message0:\"%{BKY_CONTROLS_IF_ELSE_TITLE_ELSE}\",previousStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_ELSE_TOOLTIP}\"}]),TOOLTIPS_BY_OP$$module$build$src$blocks$logic={EQ:\"%{BKY_LOGIC_COMPARE_TOOLTIP_EQ}\",NEQ:\"%{BKY_LOGIC_COMPARE_TOOLTIP_NEQ}\",LT:\"%{BKY_LOGIC_COMPARE_TOOLTIP_LT}\",\nLTE:\"%{BKY_LOGIC_COMPARE_TOOLTIP_LTE}\",GT:\"%{BKY_LOGIC_COMPARE_TOOLTIP_GT}\",GTE:\"%{BKY_LOGIC_COMPARE_TOOLTIP_GTE}\",AND:\"%{BKY_LOGIC_OPERATION_TOOLTIP_AND}\",OR:\"%{BKY_LOGIC_OPERATION_TOOLTIP_OR}\"};$.register$$module$build$src$core$extensions(\"logic_op_tooltip\",$.buildTooltipForDropdown$$module$build$src$core$extensions(\"OP\",TOOLTIPS_BY_OP$$module$build$src$blocks$logic));\nvar CONTROLS_IF_MUTATOR_MIXIN$$module$build$src$blocks$logic={elseifCount_:0,elseCount_:0,mutationToDom:function(){if(!this.elseifCount_&&!this.elseCount_)return null;const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");this.elseifCount_&&a.setAttribute(\"elseif\",String(this.elseifCount_));this.elseCount_&&a.setAttribute(\"else\",\"1\");return a},domToMutation:function(a){this.elseifCount_=parseInt(a.getAttribute(\"elseif\"),10)||0;this.elseCount_=parseInt(a.getAttribute(\"else\"),10)||0;this.rebuildShape_()},\nsaveExtraState:function(){if(!this.elseifCount_&&!this.elseCount_)return null;const a=Object.create(null);this.elseifCount_&&(a.elseIfCount=this.elseifCount_);this.elseCount_&&(a.hasElse=!0);return a},loadExtraState:function(a){this.elseifCount_=a.elseIfCount||0;this.elseCount_=a.hasElse?1:0;this.updateShape_()},decompose:function(a){const b=a.newBlock(\"controls_if_if\");b.initSvg();let c=b.nextConnection;for(let d=1;d<=this.elseifCount_;d++){const e=a.newBlock(\"controls_if_elseif\");e.initSvg();c.connect(e.previousConnection);\nc=e.nextConnection}this.elseCount_&&(a=a.newBlock(\"controls_if_else\"),a.initSvg(),c.connect(a.previousConnection));return b},compose:function(a){a=a.nextConnection.targetBlock();this.elseCount_=this.elseifCount_=0;const b=[null],c=[null];let d=null;for(;a;){if(!a.isInsertionMarker())switch(a.type){case \"controls_if_elseif\":this.elseifCount_++;b.push(a.valueConnection_);c.push(a.statementConnection_);break;case \"controls_if_else\":this.elseCount_++;d=a.statementConnection_;break;default:throw TypeError(\"Unknown block type: \"+\na.type);}a=a.getNextBlock()}this.updateShape_();this.reconnectChildBlocks_(b,c,d)},saveConnections:function(a){a=a.nextConnection.targetBlock();let b=1;for(;a;){if(!a.isInsertionMarker())switch(a.type){case \"controls_if_elseif\":var c=this.getInput(\"IF\"+b);const d=this.getInput(\"DO\"+b);a.valueConnection_=c&&c.connection.targetConnection;a.statementConnection_=d&&d.connection.targetConnection;b++;break;case \"controls_if_else\":c=this.getInput(\"ELSE\");a.statementConnection_=c&&c.connection.targetConnection;\nbreak;default:throw TypeError(\"Unknown block type: \"+a.type);}a=a.getNextBlock()}},rebuildShape_:function(){const a=[null],b=[null];let c=null;this.getInput(\"ELSE\")&&(c=this.getInput(\"ELSE\").connection.targetConnection);for(let d=1;this.getInput(\"IF\"+d);d++){const e=this.getInput(\"IF\"+d),f=this.getInput(\"DO\"+d);a.push(e.connection.targetConnection);b.push(f.connection.targetConnection)}this.updateShape_();this.reconnectChildBlocks_(a,b,c)},updateShape_:function(){this.getInput(\"ELSE\")&&this.removeInput(\"ELSE\");\nfor(var a=1;this.getInput(\"IF\"+a);a++)this.removeInput(\"IF\"+a),this.removeInput(\"DO\"+a);for(a=1;a<=this.elseifCount_;a++)this.appendValueInput(\"IF\"+a).setCheck(\"Boolean\").appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_ELSEIF),this.appendStatementInput(\"DO\"+a).appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_THEN);this.elseCount_&&this.appendStatementInput(\"ELSE\").appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_ELSE)},reconnectChildBlocks_:function(a,b,c){for(let d=\n1;d<=this.elseifCount_;d++){let e;(e=a[d])==null||e.reconnect(this,\"IF\"+d);let f;(f=b[d])==null||f.reconnect(this,\"DO\"+d)}c==null||c.reconnect(this,\"ELSE\")}};$.registerMutator$$module$build$src$core$extensions(\"controls_if_mutator\",CONTROLS_IF_MUTATOR_MIXIN$$module$build$src$blocks$logic,null,[\"controls_if_elseif\",\"controls_if_else\"]);\nvar CONTROLS_IF_TOOLTIP_EXTENSION$$module$build$src$blocks$logic=function(){this.setTooltip(function(){if(this.elseifCount_||this.elseCount_){if(!this.elseifCount_&&this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_2;if(this.elseifCount_&&!this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_3;if(this.elseifCount_&&this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_4}else return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_1;\nreturn\"\"}.bind(this))};$.register$$module$build$src$core$extensions(\"controls_if_tooltip\",CONTROLS_IF_TOOLTIP_EXTENSION$$module$build$src$blocks$logic);\nvar LOGIC_COMPARE_ONCHANGE_MIXIN$$module$build$src$blocks$logic={onchange:function(a){this.prevBlocks_||(this.prevBlocks_=[null,null]);var b=this.getInputTargetBlock(\"A\");const c=this.getInputTargetBlock(\"B\");b&&c&&!this.workspace.connectionChecker.doTypeChecks(b.outputConnection,c.outputConnection)&&($.setGroup$$module$build$src$core$events$utils(a.group),a=this.prevBlocks_[0],a!==b&&(b.unplug(),!a||a.isDisposed()||a.isShadow()||this.getInput(\"A\").connection.connect(a.outputConnection)),b=this.prevBlocks_[1],\nb!==c&&(c.unplug(),!b||b.isDisposed()||b.isShadow()||this.getInput(\"B\").connection.connect(b.outputConnection)),this.bumpNeighbours(),$.setGroup$$module$build$src$core$events$utils(!1));this.prevBlocks_[0]=this.getInputTargetBlock(\"A\");this.prevBlocks_[1]=this.getInputTargetBlock(\"B\")}},LOGIC_COMPARE_EXTENSION$$module$build$src$blocks$logic=function(){this.mixin(LOGIC_COMPARE_ONCHANGE_MIXIN$$module$build$src$blocks$logic)};$.register$$module$build$src$core$extensions(\"logic_compare\",LOGIC_COMPARE_EXTENSION$$module$build$src$blocks$logic);\nvar LOGIC_TERNARY_ONCHANGE_MIXIN$$module$build$src$blocks$logic={prevParentConnection_:null,onchange:function(a){const b=this.getInputTargetBlock(\"THEN\"),c=this.getInputTargetBlock(\"ELSE\"),d=this.outputConnection.targetConnection;if((b||c)&&d)for(let e=0;e<2;e++){const f=e===1?b:c;f&&!f.workspace.connectionChecker.doTypeChecks(f.outputConnection,d)&&($.setGroup$$module$build$src$core$events$utils(a.group),d===this.prevParentConnection_?(this.unplug(),d.getSourceBlock().bumpNeighbours()):(f.unplug(),\nf.bumpNeighbours()),$.setGroup$$module$build$src$core$events$utils(!1))}this.prevParentConnection_=d}};$.registerMixin$$module$build$src$core$extensions(\"logic_ternary\",LOGIC_TERNARY_ONCHANGE_MIXIN$$module$build$src$blocks$logic);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$logic);var module$build$src$blocks$logic={blocks:blocks$$module$build$src$blocks$logic};var blocks$$module$build$src$blocks$lists=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"lists_create_empty\",message0:\"%{BKY_LISTS_CREATE_EMPTY_TITLE}\",output:\"Array\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_CREATE_EMPTY_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_CREATE_EMPTY_HELPURL}\"},{type:\"lists_repeat\",message0:\"%{BKY_LISTS_REPEAT_TITLE}\",args0:[{type:\"input_value\",name:\"ITEM\"},{type:\"input_value\",name:\"NUM\",check:\"Number\"}],output:\"Array\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_REPEAT_TOOLTIP}\",\nhelpUrl:\"%{BKY_LISTS_REPEAT_HELPURL}\"},{type:\"lists_reverse\",message0:\"%{BKY_LISTS_REVERSE_MESSAGE0}\",args0:[{type:\"input_value\",name:\"LIST\",check:\"Array\"}],output:\"Array\",inputsInline:!0,style:\"list_blocks\",tooltip:\"%{BKY_LISTS_REVERSE_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_REVERSE_HELPURL}\"},{type:\"lists_isEmpty\",message0:\"%{BKY_LISTS_ISEMPTY_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Boolean\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_ISEMPTY_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_ISEMPTY_HELPURL}\"},\n{type:\"lists_length\",message0:\"%{BKY_LISTS_LENGTH_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Number\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_LENGTH_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_LENGTH_HELPURL}\"}]),LISTS_CREATE_WITH$$module$build$src$blocks$lists={init:function(){this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_CREATE_WITH_HELPURL);this.setStyle(\"list_blocks\");this.itemCount_=3;this.updateShape_();this.setOutput(!0,\"Array\");this.setMutator(new $.MutatorIcon$$module$build$src$core$icons$mutator_icon([\"lists_create_with_item\"],\nthis));this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_CREATE_WITH_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"items\",String(this.itemCount_));return a},domToMutation:function(a){a=a.getAttribute(\"items\");if(!a)throw new TypeError(\"element did not have items\");this.itemCount_=parseInt(a,10);this.updateShape_()},saveExtraState:function(){return{itemCount:this.itemCount_}},loadExtraState:function(a){this.itemCount_=a.itemCount;\nthis.updateShape_()},decompose:function(a){const b=a.newBlock(\"lists_create_with_container\");b.initSvg();let c=b.getInput(\"STACK\").connection;for(let d=0;d$.Msg$$module$build$src$core$msg.LISTS_INDEX_OF_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\"0\":\"-1\"))}};blocks$$module$build$src$blocks$lists.lists_indexOf=LISTS_INDEXOF$$module$build$src$blocks$lists;\nvar LISTS_GETINDEX$$module$build$src$blocks$lists={init:function(){var a=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_GET,\"GET\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_GET_REMOVE,\"GET_REMOVE\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_REMOVE,\"REMOVE\"]];this.WHERE_OPTIONS=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FIRST,\"FIRST\"],\n[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_LAST,\"LAST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_RANDOM,\"RANDOM\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_HELPURL);this.setStyle(\"list_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});a.setValidator(function(b){b=b===\"REMOVE\";this.getSourceBlock().updateStatement_(b)});this.appendValueInput(\"VALUE\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_INPUT_IN_LIST);\nthis.appendDummyInput().appendField(a,\"MODE\").appendField(\"\",\"SPACE\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this.WHERE_OPTIONS});a.setValidator(function(b){const c=this.getValue();b=b===\"FROM_START\"||b===\"FROM_END\";b!==(c===\"FROM_START\"||c===\"FROM_END\")&&this.getSourceBlock().updateAt_(b)});this.appendDummyInput().appendField(a,\"WHERE\");this.appendDummyInput(\"AT\");$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL);\nthis.setInputsInline(!0);this.setOutput(!0);this.updateAt_(!0);this.setTooltip(()=>{const b=this.getFieldValue(\"MODE\"),c=this.getFieldValue(\"WHERE\");let d=\"\";switch(b+\" \"+c){case \"GET FROM_START\":case \"GET FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM;break;case \"GET FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_FIRST;break;case \"GET LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_LAST;break;case \"GET RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM;\nbreak;case \"GET_REMOVE FROM_START\":case \"GET_REMOVE FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM;break;case \"GET_REMOVE FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST;break;case \"GET_REMOVE LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST;break;case \"GET_REMOVE RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM;break;case \"REMOVE FROM_START\":case \"REMOVE FROM_END\":d=\n$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM;break;case \"REMOVE FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST;break;case \"REMOVE LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST;break;case \"REMOVE RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM}if(c===\"FROM_START\"||c===\"FROM_END\")d+=\" \"+(c===\"FROM_START\"?$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP:$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_END_TOOLTIP).replace(\"%1\",\nthis.workspace.options.oneBasedIndex?\"#1\":\"#0\");return d})},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"statement\",String(!this.outputConnection));const b=this.getInput(\"AT\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at\",String(b));return a},domToMutation:function(a){const b=a.getAttribute(\"statement\")===\"true\";this.updateStatement_(b);a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},saveExtraState:function(){return this.outputConnection?\nnull:{isStatement:!0}},loadExtraState:function(a){a.isStatement?this.updateStatement_(!0):typeof a===\"string\"&&this.domToMutation($.textToDom$$module$build$src$core$utils$xml(a))},updateStatement_:function(a){a!==!this.outputConnection&&(this.unplug(!0,!0),a?(this.setOutput(!1),this.setPreviousStatement(!0),this.setNextStatement(!0)):(this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0)))},updateAt_:function(a){this.removeInput(\"AT\");this.removeInput(\"ORDINAL\",!0);a?(this.appendValueInput(\"AT\").setCheck(\"Number\"),\n$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\");$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL&&this.moveInputBefore(\"TAIL\",null)}};blocks$$module$build$src$blocks$lists.lists_getIndex=LISTS_GETINDEX$$module$build$src$blocks$lists;\nvar LISTS_SETINDEX$$module$build$src$blocks$lists={init:function(){var a=[[$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_SET,\"SET\"],[$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INSERT,\"INSERT\"]];this.WHERE_OPTIONS=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FIRST,\"FIRST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_LAST,\"LAST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_RANDOM,\n\"RANDOM\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"LIST\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INPUT_IN_LIST);a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});this.appendDummyInput().appendField(a,\"MODE\").appendField(\"\",\"SPACE\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this.WHERE_OPTIONS});a.setValidator(function(b){const c=\nthis.getValue();b=b===\"FROM_START\"||b===\"FROM_END\";b!==(c===\"FROM_START\"||c===\"FROM_END\")&&this.getSourceBlock().updateAt_(b)});this.appendDummyInput().appendField(a,\"WHERE\");this.appendDummyInput(\"AT\");this.appendValueInput(\"TO\").appendField($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INPUT_TO);this.setInputsInline(!0);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP);this.updateAt_(!0);this.setTooltip(()=>{const b=\nthis.getFieldValue(\"MODE\"),c=this.getFieldValue(\"WHERE\");let d=\"\";switch(b+\" \"+c){case \"SET FROM_START\":case \"SET FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_FROM;break;case \"SET FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_FIRST;break;case \"SET LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_LAST;break;case \"SET RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_RANDOM;break;case \"INSERT FROM_START\":case \"INSERT FROM_END\":d=\n$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FROM;break;case \"INSERT FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST;break;case \"INSERT LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_LAST;break;case \"INSERT RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM}if(c===\"FROM_START\"||c===\"FROM_END\")d+=\" \"+$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\n\"#1\":\"#0\");return d})},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\"),b=this.getInput(\"AT\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at\",String(b));return a},domToMutation:function(a){a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},saveExtraState:function(){return null},loadExtraState:function(){},updateAt_:function(a){this.removeInput(\"AT\");this.removeInput(\"ORDINAL\",!0);a?(this.appendValueInput(\"AT\").setCheck(\"Number\"),\n$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\");this.moveInputBefore(\"AT\",\"TO\");this.getInput(\"ORDINAL\")&&this.moveInputBefore(\"ORDINAL\",\"TO\")}};blocks$$module$build$src$blocks$lists.lists_setIndex=LISTS_SETINDEX$$module$build$src$blocks$lists;\nvar LISTS_GETSUBLIST$$module$build$src$blocks$lists={init:function(){this.WHERE_OPTIONS_1=[[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FIRST,\"FIRST\"]];this.WHERE_OPTIONS_2=[[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_FROM_END,\"FROM_END\"],\n[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_LAST,\"LAST\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"LIST\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_INPUT_IN_LIST);const a=b=>{const c=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this[\"WHERE_OPTIONS_\"+b]});c.setValidator(function(d){const e=this.getValue();d=d===\"FROM_START\"||d===\n\"FROM_END\";d!==(e===\"FROM_START\"||e===\"FROM_END\")&&this.getSourceBlock().updateAt_(b,d)});return c};this.appendDummyInput(\"WHERE1_INPUT\").appendField(a(1),\"WHERE1\");this.appendDummyInput(\"AT1\");this.appendDummyInput(\"WHERE2_INPUT\").appendField(a(2),\"WHERE2\");this.appendDummyInput(\"AT2\");$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL);this.setInputsInline(!0);this.setOutput(!0,\"Array\");this.updateAt_(1,\n!0);this.updateAt_(2,!0);this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");var b=this.getInput(\"AT1\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at1\",String(b));b=this.getInput(\"AT2\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at2\",String(b));return a},domToMutation:function(a){const b=a.getAttribute(\"at1\")===\n\"true\";a=a.getAttribute(\"at2\")===\"true\";this.updateAt_(1,b);this.updateAt_(2,a)},saveExtraState:function(){return null},loadExtraState:function(){},updateAt_:function(a,b){this.removeInput(\"AT\"+a);this.removeInput(\"ORDINAL\"+a,!0);b?(this.appendValueInput(\"AT\"+a).setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\"+a).appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\"+a);a===1&&(this.moveInputBefore(\"AT1\",\n\"WHERE2_INPUT\"),this.getInput(\"ORDINAL1\")&&this.moveInputBefore(\"ORDINAL1\",\"WHERE2_INPUT\"));$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL&&this.moveInputBefore(\"TAIL\",null)}};blocks$$module$build$src$blocks$lists.lists_getSublist=LISTS_GETSUBLIST$$module$build$src$blocks$lists;\nblocks$$module$build$src$blocks$lists.lists_sort={init:function(){this.jsonInit({message0:\"%{BKY_LISTS_SORT_TITLE}\",args0:[{type:\"field_dropdown\",name:\"TYPE\",options:[[\"%{BKY_LISTS_SORT_TYPE_NUMERIC}\",\"NUMERIC\"],[\"%{BKY_LISTS_SORT_TYPE_TEXT}\",\"TEXT\"],[\"%{BKY_LISTS_SORT_TYPE_IGNORECASE}\",\"IGNORE_CASE\"]]},{type:\"field_dropdown\",name:\"DIRECTION\",options:[[\"%{BKY_LISTS_SORT_ORDER_ASCENDING}\",\"1\"],[\"%{BKY_LISTS_SORT_ORDER_DESCENDING}\",\"-1\"]]},{type:\"input_value\",name:\"LIST\",check:\"Array\"}],output:\"Array\",\nstyle:\"list_blocks\",tooltip:\"%{BKY_LISTS_SORT_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_SORT_HELPURL}\"})}};\nblocks$$module$build$src$blocks$lists.lists_split={init:function(){const a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:[[$.Msg$$module$build$src$core$msg.LISTS_SPLIT_LIST_FROM_TEXT,\"SPLIT\"],[$.Msg$$module$build$src$core$msg.LISTS_SPLIT_TEXT_FROM_LIST,\"JOIN\"]]});if(!a)throw Error(\"field_dropdown not found\");a.setValidator(b=>{this.updateType_(b)});this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_SPLIT_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"INPUT\").setCheck(\"String\").appendField(a,\n\"MODE\");this.appendValueInput(\"DELIM\").setCheck(\"String\").appendField($.Msg$$module$build$src$core$msg.LISTS_SPLIT_WITH_DELIMITER);this.setInputsInline(!0);this.setOutput(!0,\"Array\");this.setTooltip(()=>{const b=this.getFieldValue(\"MODE\");if(b===\"SPLIT\")return $.Msg$$module$build$src$core$msg.LISTS_SPLIT_TOOLTIP_SPLIT;if(b===\"JOIN\")return $.Msg$$module$build$src$core$msg.LISTS_SPLIT_TOOLTIP_JOIN;throw Error(\"Unknown mode: \"+b);})},updateType_:function(a){if(this.getFieldValue(\"MODE\")!==a){const b=\nthis.getInput(\"INPUT\").connection;b.setShadowDom(null);const c=b.targetBlock();c&&(b.disconnect(),c.isShadow()?c.dispose(!1):this.bumpNeighbours())}a===\"SPLIT\"?(this.outputConnection.setCheck(\"Array\"),this.getInput(\"INPUT\").setCheck(\"String\")):(this.outputConnection.setCheck(\"String\"),this.getInput(\"INPUT\").setCheck(\"Array\"))},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"mode\",this.getFieldValue(\"MODE\"));return a},domToMutation:function(a){this.updateType_(a.getAttribute(\"mode\"))},\nsaveExtraState:function(){return{mode:this.getFieldValue(\"MODE\")}},loadExtraState:function(a){this.updateType_(a.mode)}};$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$lists);var module$build$src$blocks$lists={blocks:blocks$$module$build$src$blocks$lists};var blocks$$module$build$src$blocks$blocks=Object.assign({},blocks$$module$build$src$blocks$lists,blocks$$module$build$src$blocks$logic,blocks$$module$build$src$blocks$loops,blocks$$module$build$src$blocks$math,blocks$$module$build$src$blocks$procedures,blocks$$module$build$src$blocks$text,blocks$$module$build$src$blocks$variables,blocks$$module$build$src$blocks$variables_dynamic),module$build$src$blocks$blocks={blocks:blocks$$module$build$src$blocks$blocks,lists:module$build$src$blocks$lists,logic:module$build$src$blocks$logic,\nloops:module$build$src$blocks$loops,math:module$build$src$blocks$math,procedures:module$build$src$blocks$procedures,texts:module$build$src$blocks$text,variables:module$build$src$blocks$variables,variablesDynamic:module$build$src$blocks$variables_dynamic};\nmodule$build$src$blocks$blocks.__namespace__=$;\nreturn module$build$src$blocks$blocks;\n}));\n\n\n//# sourceMappingURL=blocks_compressed.js.map\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/blocks_compressed.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/index.js": +/*!***************************************!*\ + !*** ./node_modules/blockly/index.js ***! + \***************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! blockly/core */ \"./node_modules/blockly/blockly_compressed.js\"), __webpack_require__(/*! blockly/msg/en */ \"./node_modules/blockly/msg/en.js\"), __webpack_require__(/*! blockly/blocks */ \"./node_modules/blockly/blocks_compressed.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function(Blockly, en, blocks) {\n/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Main entrypoint for blockly package. Via its UMD wrapper,\n * this module loads blockly/core, blockly/blocks and blockly/msg/en\n * and then calls setLocale(en).\n *\n * This entrypoint previously also loaded one or more generators\n * (JavaScript in browser, all five in node.js environments) but it no\n * longer makes sense to do so because of changes to generators\n * exports (they no longer have the side effect of defining\n * Blockly.JavaScript, etc., when loaded as modules).\n */\n\n/* eslint-disable */\n'use strict';\n\n// Include the EN Locale by default.\nBlockly.setLocale(en);\n\nreturn Blockly;\n}));\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/index.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/index.mjs": +/*!****************************************!*\ + !*** ./node_modules/blockly/index.mjs ***! + \****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Block: () => (/* binding */ Block),\n/* harmony export */ BlockFlyoutInflater: () => (/* binding */ BlockFlyoutInflater),\n/* harmony export */ BlockNavigationPolicy: () => (/* binding */ BlockNavigationPolicy),\n/* harmony export */ BlockSvg: () => (/* binding */ BlockSvg),\n/* harmony export */ Blocks: () => (/* binding */ Blocks),\n/* harmony export */ ButtonFlyoutInflater: () => (/* binding */ ButtonFlyoutInflater),\n/* harmony export */ COLLAPSED_FIELD_NAME: () => (/* binding */ COLLAPSED_FIELD_NAME),\n/* harmony export */ COLLAPSED_INPUT_NAME: () => (/* binding */ COLLAPSED_INPUT_NAME),\n/* harmony export */ COLLAPSE_CHARS: () => (/* binding */ COLLAPSE_CHARS),\n/* harmony export */ CodeGenerator: () => (/* binding */ CodeGenerator),\n/* harmony export */ CollapsibleToolboxCategory: () => (/* binding */ CollapsibleToolboxCategory),\n/* harmony export */ ComponentManager: () => (/* binding */ ComponentManager),\n/* harmony export */ Connection: () => (/* binding */ Connection),\n/* harmony export */ ConnectionChecker: () => (/* binding */ ConnectionChecker),\n/* harmony export */ ConnectionDB: () => (/* binding */ ConnectionDB),\n/* harmony export */ ConnectionNavigationPolicy: () => (/* binding */ ConnectionNavigationPolicy),\n/* harmony export */ ConnectionType: () => (/* binding */ ConnectionType),\n/* harmony export */ ContextMenu: () => (/* binding */ ContextMenu),\n/* harmony export */ ContextMenuItems: () => (/* binding */ ContextMenuItems),\n/* harmony export */ ContextMenuRegistry: () => (/* binding */ ContextMenuRegistry),\n/* harmony export */ Css: () => (/* binding */ Css),\n/* harmony export */ DELETE_VARIABLE_ID: () => (/* binding */ DELETE_VARIABLE_ID),\n/* harmony export */ DeleteArea: () => (/* binding */ DeleteArea),\n/* harmony export */ DragTarget: () => (/* binding */ DragTarget),\n/* harmony export */ DropDownDiv: () => (/* binding */ DropDownDiv),\n/* harmony export */ Events: () => (/* binding */ Events),\n/* harmony export */ Extensions: () => (/* binding */ Extensions),\n/* harmony export */ Field: () => (/* binding */ Field),\n/* harmony export */ FieldCheckbox: () => (/* binding */ FieldCheckbox),\n/* harmony export */ FieldDropdown: () => (/* binding */ FieldDropdown),\n/* harmony export */ FieldImage: () => (/* binding */ FieldImage),\n/* harmony export */ FieldLabel: () => (/* binding */ FieldLabel),\n/* harmony export */ FieldLabelSerializable: () => (/* binding */ FieldLabelSerializable),\n/* harmony export */ FieldNavigationPolicy: () => (/* binding */ FieldNavigationPolicy),\n/* harmony export */ FieldNumber: () => (/* binding */ FieldNumber),\n/* harmony export */ FieldTextInput: () => (/* binding */ FieldTextInput),\n/* harmony export */ FieldVariable: () => (/* binding */ FieldVariable),\n/* harmony export */ Flyout: () => (/* binding */ Flyout),\n/* harmony export */ FlyoutButton: () => (/* binding */ FlyoutButton),\n/* harmony export */ FlyoutButtonNavigationPolicy: () => (/* binding */ FlyoutButtonNavigationPolicy),\n/* harmony export */ FlyoutItem: () => (/* binding */ FlyoutItem),\n/* harmony export */ FlyoutMetricsManager: () => (/* binding */ FlyoutMetricsManager),\n/* harmony export */ FlyoutNavigationPolicy: () => (/* binding */ FlyoutNavigationPolicy),\n/* harmony export */ FlyoutNavigator: () => (/* binding */ FlyoutNavigator),\n/* harmony export */ FlyoutSeparator: () => (/* binding */ FlyoutSeparator),\n/* harmony export */ FlyoutSeparatorNavigationPolicy: () => (/* binding */ FlyoutSeparatorNavigationPolicy),\n/* harmony export */ FocusManager: () => (/* binding */ FocusManager),\n/* harmony export */ FocusableTreeTraverser: () => (/* binding */ FocusableTreeTraverser),\n/* harmony export */ Generator: () => (/* binding */ Generator),\n/* harmony export */ Gesture: () => (/* binding */ Gesture),\n/* harmony export */ Grid: () => (/* binding */ Grid),\n/* harmony export */ HorizontalFlyout: () => (/* binding */ HorizontalFlyout),\n/* harmony export */ INPUT_VALUE: () => (/* binding */ INPUT_VALUE),\n/* harmony export */ Input: () => (/* binding */ Input),\n/* harmony export */ InsertionMarkerPreviewer: () => (/* binding */ InsertionMarkerPreviewer),\n/* harmony export */ KeyboardNavigationController: () => (/* binding */ KeyboardNavigationController),\n/* harmony export */ LabelFlyoutInflater: () => (/* binding */ LabelFlyoutInflater),\n/* harmony export */ LineCursor: () => (/* binding */ LineCursor),\n/* harmony export */ Marker: () => (/* binding */ Marker),\n/* harmony export */ MarkerManager: () => (/* binding */ MarkerManager),\n/* harmony export */ Menu: () => (/* binding */ Menu),\n/* harmony export */ MenuItem: () => (/* binding */ MenuItem),\n/* harmony export */ MetricsManager: () => (/* binding */ MetricsManager),\n/* harmony export */ Msg: () => (/* binding */ Msg),\n/* harmony export */ NEXT_STATEMENT: () => (/* binding */ NEXT_STATEMENT),\n/* harmony export */ Names: () => (/* binding */ Names),\n/* harmony export */ Navigator: () => (/* binding */ Navigator),\n/* harmony export */ OPPOSITE_TYPE: () => (/* binding */ OPPOSITE_TYPE),\n/* harmony export */ OUTPUT_VALUE: () => (/* binding */ OUTPUT_VALUE),\n/* harmony export */ Options: () => (/* binding */ Options),\n/* harmony export */ PREVIOUS_STATEMENT: () => (/* binding */ PREVIOUS_STATEMENT),\n/* harmony export */ PROCEDURE_CATEGORY_NAME: () => (/* binding */ PROCEDURE_CATEGORY_NAME),\n/* harmony export */ Procedures: () => (/* binding */ Procedures),\n/* harmony export */ RENAME_VARIABLE_ID: () => (/* binding */ RENAME_VARIABLE_ID),\n/* harmony export */ RenderedConnection: () => (/* binding */ RenderedConnection),\n/* harmony export */ Scrollbar: () => (/* binding */ Scrollbar),\n/* harmony export */ ScrollbarPair: () => (/* binding */ ScrollbarPair),\n/* harmony export */ SeparatorFlyoutInflater: () => (/* binding */ SeparatorFlyoutInflater),\n/* harmony export */ ShortcutItems: () => (/* binding */ ShortcutItems),\n/* harmony export */ ShortcutRegistry: () => (/* binding */ ShortcutRegistry),\n/* harmony export */ TOOLBOX_AT_BOTTOM: () => (/* binding */ TOOLBOX_AT_BOTTOM),\n/* harmony export */ TOOLBOX_AT_LEFT: () => (/* binding */ TOOLBOX_AT_LEFT),\n/* harmony export */ TOOLBOX_AT_RIGHT: () => (/* binding */ TOOLBOX_AT_RIGHT),\n/* harmony export */ TOOLBOX_AT_TOP: () => (/* binding */ TOOLBOX_AT_TOP),\n/* harmony export */ Theme: () => (/* binding */ Theme),\n/* harmony export */ ThemeManager: () => (/* binding */ ThemeManager),\n/* harmony export */ Themes: () => (/* binding */ Themes),\n/* harmony export */ Toast: () => (/* binding */ Toast),\n/* harmony export */ Toolbox: () => (/* binding */ Toolbox),\n/* harmony export */ ToolboxCategory: () => (/* binding */ ToolboxCategory),\n/* harmony export */ ToolboxItem: () => (/* binding */ ToolboxItem),\n/* harmony export */ ToolboxSeparator: () => (/* binding */ ToolboxSeparator),\n/* harmony export */ Tooltip: () => (/* binding */ Tooltip),\n/* harmony export */ Touch: () => (/* binding */ Touch),\n/* harmony export */ Trashcan: () => (/* binding */ Trashcan),\n/* harmony export */ UnattachedFieldError: () => (/* binding */ UnattachedFieldError),\n/* harmony export */ VARIABLE_CATEGORY_NAME: () => (/* binding */ VARIABLE_CATEGORY_NAME),\n/* harmony export */ VARIABLE_DYNAMIC_CATEGORY_NAME: () => (/* binding */ VARIABLE_DYNAMIC_CATEGORY_NAME),\n/* harmony export */ VERSION: () => (/* binding */ VERSION),\n/* harmony export */ VariableMap: () => (/* binding */ VariableMap),\n/* harmony export */ VariableModel: () => (/* binding */ VariableModel),\n/* harmony export */ Variables: () => (/* binding */ Variables),\n/* harmony export */ VariablesDynamic: () => (/* binding */ VariablesDynamic),\n/* harmony export */ VerticalFlyout: () => (/* binding */ VerticalFlyout),\n/* harmony export */ WidgetDiv: () => (/* binding */ WidgetDiv),\n/* harmony export */ Workspace: () => (/* binding */ Workspace),\n/* harmony export */ WorkspaceAudio: () => (/* binding */ WorkspaceAudio),\n/* harmony export */ WorkspaceDragger: () => (/* binding */ WorkspaceDragger),\n/* harmony export */ WorkspaceNavigationPolicy: () => (/* binding */ WorkspaceNavigationPolicy),\n/* harmony export */ WorkspaceSvg: () => (/* binding */ WorkspaceSvg),\n/* harmony export */ Xml: () => (/* binding */ Xml),\n/* harmony export */ ZoomControls: () => (/* binding */ ZoomControls),\n/* harmony export */ blockAnimations: () => (/* binding */ blockAnimations),\n/* harmony export */ blockRendering: () => (/* binding */ blockRendering),\n/* harmony export */ browserEvents: () => (/* binding */ browserEvents),\n/* harmony export */ bubbles: () => (/* binding */ bubbles),\n/* harmony export */ bumpObjects: () => (/* binding */ bumpObjects),\n/* harmony export */ clipboard: () => (/* binding */ clipboard),\n/* harmony export */ comments: () => (/* binding */ comments),\n/* harmony export */ common: () => (/* binding */ common),\n/* harmony export */ config: () => (/* binding */ config),\n/* harmony export */ constants: () => (/* binding */ constants),\n/* harmony export */ defineBlocksWithJsonArray: () => (/* binding */ defineBlocksWithJsonArray),\n/* harmony export */ dialog: () => (/* binding */ dialog),\n/* harmony export */ dragging: () => (/* binding */ dragging),\n/* harmony export */ fieldRegistry: () => (/* binding */ fieldRegistry),\n/* harmony export */ geras: () => (/* binding */ geras),\n/* harmony export */ getFocusManager: () => (/* binding */ getFocusManager),\n/* harmony export */ getMainWorkspace: () => (/* binding */ getMainWorkspace),\n/* harmony export */ getSelected: () => (/* binding */ getSelected),\n/* harmony export */ hasBubble: () => (/* binding */ hasBubble),\n/* harmony export */ hideChaff: () => (/* binding */ hideChaff),\n/* harmony export */ icons: () => (/* binding */ icons),\n/* harmony export */ inject: () => (/* binding */ inject),\n/* harmony export */ inputs: () => (/* binding */ inputs),\n/* harmony export */ isCopyable: () => (/* binding */ isCopyable),\n/* harmony export */ isDeletable: () => (/* binding */ isDeletable),\n/* harmony export */ isDraggable: () => (/* binding */ isDraggable),\n/* harmony export */ isIcon: () => (/* binding */ isIcon),\n/* harmony export */ isObservable: () => (/* binding */ isObservable),\n/* harmony export */ isPaster: () => (/* binding */ isPaster),\n/* harmony export */ isRenderedElement: () => (/* binding */ isRenderedElement),\n/* harmony export */ isSelectable: () => (/* binding */ isSelectable),\n/* harmony export */ isSerializable: () => (/* binding */ isSerializable),\n/* harmony export */ isVariableBackedParameterModel: () => (/* binding */ isVariableBackedParameterModel),\n/* harmony export */ keyboardNavigationController: () => (/* binding */ keyboardNavigationController),\n/* harmony export */ layers: () => (/* binding */ layers),\n/* harmony export */ navigateBlock: () => (/* binding */ navigateBlock),\n/* harmony export */ navigateStacks: () => (/* binding */ navigateStacks),\n/* harmony export */ procedures: () => (/* binding */ procedures),\n/* harmony export */ registry: () => (/* binding */ registry),\n/* harmony export */ renderManagement: () => (/* binding */ renderManagement),\n/* harmony export */ serialization: () => (/* binding */ serialization),\n/* harmony export */ setLocale: () => (/* binding */ setLocale),\n/* harmony export */ setParentContainer: () => (/* binding */ setParentContainer),\n/* harmony export */ svgResize: () => (/* binding */ svgResize),\n/* harmony export */ thrasos: () => (/* binding */ thrasos),\n/* harmony export */ uiPosition: () => (/* binding */ uiPosition),\n/* harmony export */ utils: () => (/* binding */ utils),\n/* harmony export */ zelos: () => (/* binding */ zelos)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"./node_modules/blockly/index.js\");\n\nconst {\n Block,\n BlockFlyoutInflater,\n BlockNavigationPolicy,\n BlockSvg,\n Blocks,\n ButtonFlyoutInflater,\n COLLAPSED_FIELD_NAME,\n COLLAPSED_INPUT_NAME,\n COLLAPSE_CHARS,\n CodeGenerator,\n CollapsibleToolboxCategory,\n ComponentManager,\n Connection,\n ConnectionChecker,\n ConnectionDB,\n ConnectionNavigationPolicy,\n ConnectionType,\n ContextMenu,\n ContextMenuItems,\n ContextMenuRegistry,\n Css,\n DELETE_VARIABLE_ID,\n DeleteArea,\n DragTarget,\n DropDownDiv,\n Events,\n Extensions,\n Field,\n FieldCheckbox,\n FieldDropdown,\n FieldImage,\n FieldLabel,\n FieldLabelSerializable,\n FieldNavigationPolicy,\n FieldNumber,\n FieldTextInput,\n FieldVariable,\n Flyout,\n FlyoutButton,\n FlyoutButtonNavigationPolicy,\n FlyoutItem,\n FlyoutMetricsManager,\n FlyoutNavigationPolicy,\n FlyoutNavigator,\n FlyoutSeparator,\n FlyoutSeparatorNavigationPolicy,\n FocusManager,\n FocusableTreeTraverser,\n Generator,\n Gesture,\n Grid,\n HorizontalFlyout,\n INPUT_VALUE,\n Input,\n InsertionMarkerPreviewer,\n KeyboardNavigationController,\n LabelFlyoutInflater,\n LineCursor,\n Marker,\n MarkerManager,\n Menu,\n MenuItem,\n MetricsManager,\n Msg,\n NEXT_STATEMENT,\n Names,\n Navigator,\n OPPOSITE_TYPE,\n OUTPUT_VALUE,\n Options,\n PREVIOUS_STATEMENT,\n PROCEDURE_CATEGORY_NAME,\n Procedures,\n RENAME_VARIABLE_ID,\n RenderedConnection,\n Scrollbar,\n ScrollbarPair,\n SeparatorFlyoutInflater,\n ShortcutItems,\n ShortcutRegistry,\n TOOLBOX_AT_BOTTOM,\n TOOLBOX_AT_LEFT,\n TOOLBOX_AT_RIGHT,\n TOOLBOX_AT_TOP,\n Theme,\n ThemeManager,\n Themes,\n Toast,\n Toolbox,\n ToolboxCategory,\n ToolboxItem,\n ToolboxSeparator,\n Tooltip,\n Touch,\n Trashcan,\n UnattachedFieldError,\n VARIABLE_CATEGORY_NAME,\n VARIABLE_DYNAMIC_CATEGORY_NAME,\n VERSION,\n VariableMap,\n VariableModel,\n Variables,\n VariablesDynamic,\n VerticalFlyout,\n WidgetDiv,\n Workspace,\n WorkspaceAudio,\n WorkspaceDragger,\n WorkspaceNavigationPolicy,\n WorkspaceSvg,\n Xml,\n ZoomControls,\n blockAnimations,\n blockRendering,\n browserEvents,\n bubbles,\n bumpObjects,\n clipboard,\n comments,\n common,\n config,\n constants,\n defineBlocksWithJsonArray,\n dialog,\n dragging,\n fieldRegistry,\n geras,\n getFocusManager,\n getMainWorkspace,\n getSelected,\n hasBubble,\n hideChaff,\n icons,\n inject,\n inputs,\n isCopyable,\n isDeletable,\n isDraggable,\n isIcon,\n isObservable,\n isPaster,\n isRenderedElement,\n isSelectable,\n isSerializable,\n isVariableBackedParameterModel,\n keyboardNavigationController,\n layers,\n navigateBlock,\n navigateStacks,\n procedures,\n registry,\n renderManagement,\n serialization,\n setLocale,\n setParentContainer,\n svgResize,\n thrasos,\n uiPosition,\n utils,\n zelos,\n} = _index_js__WEBPACK_IMPORTED_MODULE_0__;\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/index.mjs?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/msg/en.js": +/*!****************************************!*\ + !*** ./node_modules/blockly/msg/en.js ***! + \****************************************/ +/***/ (function(module, exports) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{ var key, messages; }\n}(this, function() {\n// This file was automatically generated. Do not modify.\n\n'use strict';\n\nvar Blockly = Blockly || { Msg: Object.create(null) };\n\nBlockly.Msg[\"ADD_COMMENT\"] = \"Add Comment\";\nBlockly.Msg[\"ALT_KEY\"] = \"Alt\";\nBlockly.Msg[\"CANNOT_DELETE_VARIABLE_PROCEDURE\"] = \"Can't delete the variable '%1' because it's part of the definition of the function '%2'\";\nBlockly.Msg[\"CHANGE_VALUE_TITLE\"] = \"Change value:\";\nBlockly.Msg[\"CHROME_OS\"] = \"ChromeOS\";\nBlockly.Msg[\"CLEAN_UP\"] = \"Clean up Blocks\";\nBlockly.Msg[\"CLOSE\"] = \"Close\";\nBlockly.Msg[\"COLLAPSED_WARNINGS_WARNING\"] = \"Collapsed blocks contain warnings.\";\nBlockly.Msg[\"COLLAPSE_ALL\"] = \"Collapse Blocks\";\nBlockly.Msg[\"COLLAPSE_BLOCK\"] = \"Collapse Block\";\nBlockly.Msg[\"COLOUR_BLEND_COLOUR1\"] = \"colour 1\";\nBlockly.Msg[\"COLOUR_BLEND_COLOUR2\"] = \"colour 2\";\nBlockly.Msg[\"COLOUR_BLEND_HELPURL\"] = \"https://meyerweb.com/eric/tools/color-blend/#:::rgbp\";\nBlockly.Msg[\"COLOUR_BLEND_RATIO\"] = \"ratio\";\nBlockly.Msg[\"COLOUR_BLEND_TITLE\"] = \"blend\";\nBlockly.Msg[\"COLOUR_BLEND_TOOLTIP\"] = \"Blends two colours together with a given ratio (0.0 - 1.0).\";\nBlockly.Msg[\"COLOUR_PICKER_HELPURL\"] = \"https://en.wikipedia.org/wiki/Color\";\nBlockly.Msg[\"COLOUR_PICKER_TOOLTIP\"] = \"Choose a colour from the palette.\";\nBlockly.Msg[\"COLOUR_RANDOM_HELPURL\"] = \"http://randomcolour.com\";\nBlockly.Msg[\"COLOUR_RANDOM_TITLE\"] = \"random colour\";\nBlockly.Msg[\"COLOUR_RANDOM_TOOLTIP\"] = \"Choose a colour at random.\";\nBlockly.Msg[\"COLOUR_RGB_BLUE\"] = \"blue\";\nBlockly.Msg[\"COLOUR_RGB_GREEN\"] = \"green\";\nBlockly.Msg[\"COLOUR_RGB_HELPURL\"] = \"https://www.december.com/html/spec/colorpercompact.html\";\nBlockly.Msg[\"COLOUR_RGB_RED\"] = \"red\";\nBlockly.Msg[\"COLOUR_RGB_TITLE\"] = \"colour with\";\nBlockly.Msg[\"COLOUR_RGB_TOOLTIP\"] = \"Create a colour with the specified amount of red, green, and blue. All values must be between 0 and 100.\";\nBlockly.Msg[\"COMMAND_KEY\"] = \"⌘ Command\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#loop-termination-blocks\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK\"] = \"break out of loop\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE\"] = \"continue with next iteration of loop\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK\"] = \"Break out of the containing loop.\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE\"] = \"Skip the rest of this loop, and continue with the next iteration.\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_WARNING\"] = \"Warning: This block may only be used within a loop.\";\nBlockly.Msg[\"CONTROLS_FOREACH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#for-each\";\nBlockly.Msg[\"CONTROLS_FOREACH_TITLE\"] = \"for each item %1 in list %2\";\nBlockly.Msg[\"CONTROLS_FOREACH_TOOLTIP\"] = \"For each item in a list, set the variable '%1' to the item, and then do some statements.\";\nBlockly.Msg[\"CONTROLS_FOR_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#count-with\";\nBlockly.Msg[\"CONTROLS_FOR_TITLE\"] = \"count with %1 from %2 to %3 by %4\";\nBlockly.Msg[\"CONTROLS_FOR_TOOLTIP\"] = \"Have the variable '%1' take on the values from the start number to the end number, counting by the specified interval, and do the specified blocks.\";\nBlockly.Msg[\"CONTROLS_IF_ELSEIF_TOOLTIP\"] = \"Add a condition to the if block.\";\nBlockly.Msg[\"CONTROLS_IF_ELSE_TOOLTIP\"] = \"Add a final, catch-all condition to the if block.\";\nBlockly.Msg[\"CONTROLS_IF_HELPURL\"] = \"https://github.com/google/blockly/wiki/IfElse\";\nBlockly.Msg[\"CONTROLS_IF_IF_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this if block.\";\nBlockly.Msg[\"CONTROLS_IF_MSG_ELSE\"] = \"else\";\nBlockly.Msg[\"CONTROLS_IF_MSG_ELSEIF\"] = \"else if\";\nBlockly.Msg[\"CONTROLS_IF_MSG_IF\"] = \"if\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_1\"] = \"If a value is true, then do some statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_2\"] = \"If a value is true, then do the first block of statements. Otherwise, do the second block of statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_3\"] = \"If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_4\"] = \"If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements. If none of the values are true, do the last block of statements.\";\nBlockly.Msg[\"CONTROLS_REPEAT_HELPURL\"] = \"https://en.wikipedia.org/wiki/For_loop\";\nBlockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"] = \"do\";\nBlockly.Msg[\"CONTROLS_REPEAT_TITLE\"] = \"repeat %1 times\";\nBlockly.Msg[\"CONTROLS_REPEAT_TOOLTIP\"] = \"Do some statements several times.\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#repeat\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_OPERATOR_UNTIL\"] = \"repeat until\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_OPERATOR_WHILE\"] = \"repeat while\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL\"] = \"While a value is false, then do some statements.\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_TOOLTIP_WHILE\"] = \"While a value is true, then do some statements.\";\nBlockly.Msg[\"CONTROL_KEY\"] = \"Ctrl\";\nBlockly.Msg[\"COPY_SHORTCUT\"] = \"Copy\";\nBlockly.Msg[\"CUT_SHORTCUT\"] = \"Cut\";\nBlockly.Msg[\"DELETE_ALL_BLOCKS\"] = \"Delete all %1 blocks?\";\nBlockly.Msg[\"DELETE_BLOCK\"] = \"Delete Block\";\nBlockly.Msg[\"DELETE_VARIABLE\"] = \"Delete the '%1' variable\";\nBlockly.Msg[\"DELETE_VARIABLE_CONFIRMATION\"] = \"Delete %1 uses of the '%2' variable?\";\nBlockly.Msg[\"DELETE_X_BLOCKS\"] = \"Delete %1 Blocks\";\nBlockly.Msg[\"DIALOG_CANCEL\"] = \"Cancel\";\nBlockly.Msg[\"DIALOG_OK\"] = \"OK\";\nBlockly.Msg[\"DISABLE_BLOCK\"] = \"Disable Block\";\nBlockly.Msg[\"DUPLICATE_BLOCK\"] = \"Duplicate\";\nBlockly.Msg[\"DUPLICATE_COMMENT\"] = \"Duplicate Comment\";\nBlockly.Msg[\"EDIT_BLOCK_CONTENTS\"] = \"Edit Block contents\";\nBlockly.Msg[\"ENABLE_BLOCK\"] = \"Enable Block\";\nBlockly.Msg[\"EXPAND_ALL\"] = \"Expand Blocks\";\nBlockly.Msg[\"EXPAND_BLOCK\"] = \"Expand Block\";\nBlockly.Msg[\"EXTERNAL_INPUTS\"] = \"External Inputs\";\nBlockly.Msg[\"HELP\"] = \"Help\";\nBlockly.Msg[\"HELP_PROMPT\"] = \"Press %1 for help on keyboard controls\";\nBlockly.Msg[\"INLINE_INPUTS\"] = \"Inline Inputs\";\nBlockly.Msg[\"KEYBOARD_NAV_CONSTRAINED_MOVE_HINT\"] = \"Use the arrow keys to move, then %1 to accept the position\";\nBlockly.Msg[\"KEYBOARD_NAV_COPIED_HINT\"] = \"Copied. Press %1 to paste.\";\nBlockly.Msg[\"KEYBOARD_NAV_CUT_HINT\"] = \"Cut. Press %1 to paste.\";\nBlockly.Msg[\"KEYBOARD_NAV_UNCONSTRAINED_MOVE_HINT\"] = \"Hold %1 and use arrow keys to move freely, then %2 to accept the position\";\nBlockly.Msg[\"LINUX\"] = \"Linux\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-empty-list\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_TITLE\"] = \"create empty list\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_TOOLTIP\"] = \"Returns a list, of length 0, containing no data records\";\nBlockly.Msg[\"LISTS_CREATE_WITH_CONTAINER_TITLE_ADD\"] = \"list\";\nBlockly.Msg[\"LISTS_CREATE_WITH_CONTAINER_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this list block.\";\nBlockly.Msg[\"LISTS_CREATE_WITH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-list-with\";\nBlockly.Msg[\"LISTS_CREATE_WITH_INPUT_WITH\"] = \"create list with\";\nBlockly.Msg[\"LISTS_CREATE_WITH_ITEM_TOOLTIP\"] = \"Add an item to the list.\";\nBlockly.Msg[\"LISTS_CREATE_WITH_TOOLTIP\"] = \"Create a list with any number of items.\";\nBlockly.Msg[\"LISTS_GET_INDEX_FIRST\"] = \"first\";\nBlockly.Msg[\"LISTS_GET_INDEX_FROM_END\"] = \"# from end\";\nBlockly.Msg[\"LISTS_GET_INDEX_FROM_START\"] = \"#\";\nBlockly.Msg[\"LISTS_GET_INDEX_GET\"] = \"get\";\nBlockly.Msg[\"LISTS_GET_INDEX_GET_REMOVE\"] = \"get and remove\";\nBlockly.Msg[\"LISTS_GET_INDEX_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list\";\nBlockly.Msg[\"LISTS_GET_INDEX_LAST\"] = \"last\";\nBlockly.Msg[\"LISTS_GET_INDEX_RANDOM\"] = \"random\";\nBlockly.Msg[\"LISTS_GET_INDEX_REMOVE\"] = \"remove\";\nBlockly.Msg[\"LISTS_GET_INDEX_TAIL\"] = \"\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_FIRST\"] = \"Returns the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_FROM\"] = \"Returns the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_LAST\"] = \"Returns the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_RANDOM\"] = \"Returns a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST\"] = \"Removes and returns the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM\"] = \"Removes and returns the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST\"] = \"Removes and returns the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM\"] = \"Removes and returns a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST\"] = \"Removes the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM\"] = \"Removes the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST\"] = \"Removes the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM\"] = \"Removes a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_FROM_END\"] = \"to # from end\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_FROM_START\"] = \"to #\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_LAST\"] = \"to last\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#getting-a-sublist\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FIRST\"] = \"get sub-list from first\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FROM_END\"] = \"get sub-list from # from end\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FROM_START\"] = \"get sub-list from #\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_TAIL\"] = \"\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_TOOLTIP\"] = \"Creates a copy of the specified portion of a list.\";\nBlockly.Msg[\"LISTS_INDEX_FROM_END_TOOLTIP\"] = \"%1 is the last item.\";\nBlockly.Msg[\"LISTS_INDEX_FROM_START_TOOLTIP\"] = \"%1 is the first item.\";\nBlockly.Msg[\"LISTS_INDEX_OF_FIRST\"] = \"find first occurrence of item\";\nBlockly.Msg[\"LISTS_INDEX_OF_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#finding-items-in-a-list\";\nBlockly.Msg[\"LISTS_INDEX_OF_LAST\"] = \"find last occurrence of item\";\nBlockly.Msg[\"LISTS_INDEX_OF_TOOLTIP\"] = \"Returns the index of the first/last occurrence of the item in the list. Returns %1 if item is not found.\";\nBlockly.Msg[\"LISTS_INLIST\"] = \"in list\";\nBlockly.Msg[\"LISTS_ISEMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#is-empty\";\nBlockly.Msg[\"LISTS_ISEMPTY_TITLE\"] = \"%1 is empty\";\nBlockly.Msg[\"LISTS_ISEMPTY_TOOLTIP\"] = \"Returns true if the list is empty.\";\nBlockly.Msg[\"LISTS_LENGTH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#length-of\";\nBlockly.Msg[\"LISTS_LENGTH_TITLE\"] = \"length of %1\";\nBlockly.Msg[\"LISTS_LENGTH_TOOLTIP\"] = \"Returns the length of a list.\";\nBlockly.Msg[\"LISTS_REPEAT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-list-with\";\nBlockly.Msg[\"LISTS_REPEAT_TITLE\"] = \"create list with item %1 repeated %2 times\";\nBlockly.Msg[\"LISTS_REPEAT_TOOLTIP\"] = \"Creates a list consisting of the given value repeated the specified number of times.\";\nBlockly.Msg[\"LISTS_REVERSE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#reversing-a-list\";\nBlockly.Msg[\"LISTS_REVERSE_MESSAGE0\"] = \"reverse %1\";\nBlockly.Msg[\"LISTS_REVERSE_TOOLTIP\"] = \"Reverse a copy of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#in-list--set\";\nBlockly.Msg[\"LISTS_SET_INDEX_INPUT_TO\"] = \"as\";\nBlockly.Msg[\"LISTS_SET_INDEX_INSERT\"] = \"insert at\";\nBlockly.Msg[\"LISTS_SET_INDEX_SET\"] = \"set\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST\"] = \"Inserts the item at the start of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_FROM\"] = \"Inserts the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_LAST\"] = \"Append the item to the end of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM\"] = \"Inserts the item randomly in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_FIRST\"] = \"Sets the first item in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_FROM\"] = \"Sets the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_LAST\"] = \"Sets the last item in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_RANDOM\"] = \"Sets a random item in a list.\";\nBlockly.Msg[\"LISTS_SORT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#sorting-a-list\";\nBlockly.Msg[\"LISTS_SORT_ORDER_ASCENDING\"] = \"ascending\";\nBlockly.Msg[\"LISTS_SORT_ORDER_DESCENDING\"] = \"descending\";\nBlockly.Msg[\"LISTS_SORT_TITLE\"] = \"sort %1 %2 %3\";\nBlockly.Msg[\"LISTS_SORT_TOOLTIP\"] = \"Sort a copy of a list.\";\nBlockly.Msg[\"LISTS_SORT_TYPE_IGNORECASE\"] = \"alphabetic, ignore case\";\nBlockly.Msg[\"LISTS_SORT_TYPE_NUMERIC\"] = \"numeric\";\nBlockly.Msg[\"LISTS_SORT_TYPE_TEXT\"] = \"alphabetic\";\nBlockly.Msg[\"LISTS_SPLIT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists\";\nBlockly.Msg[\"LISTS_SPLIT_LIST_FROM_TEXT\"] = \"make list from text\";\nBlockly.Msg[\"LISTS_SPLIT_TEXT_FROM_LIST\"] = \"make text from list\";\nBlockly.Msg[\"LISTS_SPLIT_TOOLTIP_JOIN\"] = \"Join a list of texts into one text, separated by a delimiter.\";\nBlockly.Msg[\"LISTS_SPLIT_TOOLTIP_SPLIT\"] = \"Split text into a list of texts, breaking at each delimiter.\";\nBlockly.Msg[\"LISTS_SPLIT_WITH_DELIMITER\"] = \"with delimiter\";\nBlockly.Msg[\"LOGIC_BOOLEAN_FALSE\"] = \"false\";\nBlockly.Msg[\"LOGIC_BOOLEAN_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#values\";\nBlockly.Msg[\"LOGIC_BOOLEAN_TOOLTIP\"] = \"Returns either true or false.\";\nBlockly.Msg[\"LOGIC_BOOLEAN_TRUE\"] = \"true\";\nBlockly.Msg[\"LOGIC_COMPARE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Inequality_(mathematics)\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_EQ\"] = \"Return true if both inputs equal each other.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_GT\"] = \"Return true if the first input is greater than the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_GTE\"] = \"Return true if the first input is greater than or equal to the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_LT\"] = \"Return true if the first input is smaller than the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_LTE\"] = \"Return true if the first input is smaller than or equal to the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_NEQ\"] = \"Return true if both inputs are not equal to each other.\";\nBlockly.Msg[\"LOGIC_NEGATE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#not\";\nBlockly.Msg[\"LOGIC_NEGATE_TITLE\"] = \"not %1\";\nBlockly.Msg[\"LOGIC_NEGATE_TOOLTIP\"] = \"Returns true if the input is false. Returns false if the input is true.\";\nBlockly.Msg[\"LOGIC_NULL\"] = \"null\";\nBlockly.Msg[\"LOGIC_NULL_HELPURL\"] = \"https://en.wikipedia.org/wiki/Nullable_type\";\nBlockly.Msg[\"LOGIC_NULL_TOOLTIP\"] = \"Returns null.\";\nBlockly.Msg[\"LOGIC_OPERATION_AND\"] = \"and\";\nBlockly.Msg[\"LOGIC_OPERATION_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#logical-operations\";\nBlockly.Msg[\"LOGIC_OPERATION_OR\"] = \"or\";\nBlockly.Msg[\"LOGIC_OPERATION_TOOLTIP_AND\"] = \"Return true if both inputs are true.\";\nBlockly.Msg[\"LOGIC_OPERATION_TOOLTIP_OR\"] = \"Return true if at least one of the inputs is true.\";\nBlockly.Msg[\"LOGIC_TERNARY_CONDITION\"] = \"test\";\nBlockly.Msg[\"LOGIC_TERNARY_HELPURL\"] = \"https://en.wikipedia.org/wiki/%3F:\";\nBlockly.Msg[\"LOGIC_TERNARY_IF_FALSE\"] = \"if false\";\nBlockly.Msg[\"LOGIC_TERNARY_IF_TRUE\"] = \"if true\";\nBlockly.Msg[\"LOGIC_TERNARY_TOOLTIP\"] = \"Check the condition in 'test'. If the condition is true, returns the 'if true' value; otherwise returns the 'if false' value.\";\nBlockly.Msg[\"MAC_OS\"] = \"macOS\";\nBlockly.Msg[\"MATH_ADDITION_SYMBOL\"] = \"+\";\nBlockly.Msg[\"MATH_ARITHMETIC_HELPURL\"] = \"https://en.wikipedia.org/wiki/Arithmetic\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_ADD\"] = \"Return the sum of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_DIVIDE\"] = \"Return the quotient of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_MINUS\"] = \"Return the difference of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_MULTIPLY\"] = \"Return the product of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_POWER\"] = \"Return the first number raised to the power of the second number.\";\nBlockly.Msg[\"MATH_ATAN2_HELPURL\"] = \"https://en.wikipedia.org/wiki/Atan2\";\nBlockly.Msg[\"MATH_ATAN2_TITLE\"] = \"atan2 of X:%1 Y:%2\";\nBlockly.Msg[\"MATH_ATAN2_TOOLTIP\"] = \"Return the arctangent of point (X, Y) in degrees from -180 to 180.\";\nBlockly.Msg[\"MATH_CHANGE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter\";\nBlockly.Msg[\"MATH_CHANGE_TITLE\"] = \"change %1 by %2\";\nBlockly.Msg[\"MATH_CHANGE_TOOLTIP\"] = \"Add a number to variable '%1'.\";\nBlockly.Msg[\"MATH_CONSTANT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Mathematical_constant\";\nBlockly.Msg[\"MATH_CONSTANT_TOOLTIP\"] = \"Return one of the common constants: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (infinity).\";\nBlockly.Msg[\"MATH_CONSTRAIN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Clamping_(graphics)\";\nBlockly.Msg[\"MATH_CONSTRAIN_TITLE\"] = \"constrain %1 low %2 high %3\";\nBlockly.Msg[\"MATH_CONSTRAIN_TOOLTIP\"] = \"Constrain a number to be between the specified limits (inclusive).\";\nBlockly.Msg[\"MATH_DIVISION_SYMBOL\"] = \"÷\";\nBlockly.Msg[\"MATH_IS_DIVISIBLE_BY\"] = \"is divisible by\";\nBlockly.Msg[\"MATH_IS_EVEN\"] = \"is even\";\nBlockly.Msg[\"MATH_IS_NEGATIVE\"] = \"is negative\";\nBlockly.Msg[\"MATH_IS_ODD\"] = \"is odd\";\nBlockly.Msg[\"MATH_IS_POSITIVE\"] = \"is positive\";\nBlockly.Msg[\"MATH_IS_PRIME\"] = \"is prime\";\nBlockly.Msg[\"MATH_IS_TOOLTIP\"] = \"Check if a number is an even, odd, prime, whole, positive, negative, or if it is divisible by certain number. Returns true or false.\";\nBlockly.Msg[\"MATH_IS_WHOLE\"] = \"is whole\";\nBlockly.Msg[\"MATH_MODULO_HELPURL\"] = \"https://en.wikipedia.org/wiki/Modulo_operation\";\nBlockly.Msg[\"MATH_MODULO_TITLE\"] = \"remainder of %1 ÷ %2\";\nBlockly.Msg[\"MATH_MODULO_TOOLTIP\"] = \"Return the remainder from dividing the two numbers.\";\nBlockly.Msg[\"MATH_MULTIPLICATION_SYMBOL\"] = \"×\";\nBlockly.Msg[\"MATH_NUMBER_HELPURL\"] = \"https://en.wikipedia.org/wiki/Number\";\nBlockly.Msg[\"MATH_NUMBER_TOOLTIP\"] = \"A number.\";\nBlockly.Msg[\"MATH_ONLIST_HELPURL\"] = \"\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_AVERAGE\"] = \"average of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MAX\"] = \"max of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MEDIAN\"] = \"median of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MIN\"] = \"min of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MODE\"] = \"modes of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_RANDOM\"] = \"random item of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_STD_DEV\"] = \"standard deviation of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_SUM\"] = \"sum of list\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_AVERAGE\"] = \"Return the average (arithmetic mean) of the numeric values in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MAX\"] = \"Return the largest number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MEDIAN\"] = \"Return the median number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MIN\"] = \"Return the smallest number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MODE\"] = \"Return a list of the most common item(s) in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_RANDOM\"] = \"Return a random element from the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_STD_DEV\"] = \"Return the standard deviation of the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_SUM\"] = \"Return the sum of all the numbers in the list.\";\nBlockly.Msg[\"MATH_POWER_SYMBOL\"] = \"^\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Random_number_generation\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_TITLE_RANDOM\"] = \"random fraction\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_TOOLTIP\"] = \"Return a random fraction between 0.0 (inclusive) and 1.0 (exclusive).\";\nBlockly.Msg[\"MATH_RANDOM_INT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Random_number_generation\";\nBlockly.Msg[\"MATH_RANDOM_INT_TITLE\"] = \"random integer from %1 to %2\";\nBlockly.Msg[\"MATH_RANDOM_INT_TOOLTIP\"] = \"Return a random integer between the two specified limits, inclusive.\";\nBlockly.Msg[\"MATH_ROUND_HELPURL\"] = \"https://en.wikipedia.org/wiki/Rounding\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUND\"] = \"round\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUNDDOWN\"] = \"round down\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUNDUP\"] = \"round up\";\nBlockly.Msg[\"MATH_ROUND_TOOLTIP\"] = \"Round a number up or down.\";\nBlockly.Msg[\"MATH_SINGLE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Square_root\";\nBlockly.Msg[\"MATH_SINGLE_OP_ABSOLUTE\"] = \"absolute\";\nBlockly.Msg[\"MATH_SINGLE_OP_ROOT\"] = \"square root\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_ABS\"] = \"Return the absolute value of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_EXP\"] = \"Return e to the power of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_LN\"] = \"Return the natural logarithm of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_LOG10\"] = \"Return the base 10 logarithm of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_NEG\"] = \"Return the negation of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_POW10\"] = \"Return 10 to the power of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_ROOT\"] = \"Return the square root of a number.\";\nBlockly.Msg[\"MATH_SUBTRACTION_SYMBOL\"] = \"-\";\nBlockly.Msg[\"MATH_TRIG_ACOS\"] = \"acos\";\nBlockly.Msg[\"MATH_TRIG_ASIN\"] = \"asin\";\nBlockly.Msg[\"MATH_TRIG_ATAN\"] = \"atan\";\nBlockly.Msg[\"MATH_TRIG_COS\"] = \"cos\";\nBlockly.Msg[\"MATH_TRIG_HELPURL\"] = \"https://en.wikipedia.org/wiki/Trigonometric_functions\";\nBlockly.Msg[\"MATH_TRIG_SIN\"] = \"sin\";\nBlockly.Msg[\"MATH_TRIG_TAN\"] = \"tan\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ACOS\"] = \"Return the arccosine of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ASIN\"] = \"Return the arcsine of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ATAN\"] = \"Return the arctangent of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_COS\"] = \"Return the cosine of a degree (not radian).\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_SIN\"] = \"Return the sine of a degree (not radian).\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_TAN\"] = \"Return the tangent of a degree (not radian).\";\nBlockly.Msg[\"MOVE_BLOCK\"] = \"Move Block\";\nBlockly.Msg[\"NEW_COLOUR_VARIABLE\"] = \"Create colour variable...\";\nBlockly.Msg[\"NEW_NUMBER_VARIABLE\"] = \"Create number variable...\";\nBlockly.Msg[\"NEW_STRING_VARIABLE\"] = \"Create string variable...\";\nBlockly.Msg[\"NEW_VARIABLE\"] = \"Create variable...\";\nBlockly.Msg[\"NEW_VARIABLE_TITLE\"] = \"New variable name:\";\nBlockly.Msg[\"NEW_VARIABLE_TYPE_TITLE\"] = \"New variable type:\";\nBlockly.Msg[\"OPTION_KEY\"] = \"⌥ Option\";\nBlockly.Msg[\"ORDINAL_NUMBER_SUFFIX\"] = \"\";\nBlockly.Msg[\"PASTE_SHORTCUT\"] = \"Paste\";\nBlockly.Msg[\"PROCEDURES_ALLOW_STATEMENTS\"] = \"allow statements\";\nBlockly.Msg[\"PROCEDURES_BEFORE_PARAMS\"] = \"with:\";\nBlockly.Msg[\"PROCEDURES_CALLNORETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_CALLNORETURN_TOOLTIP\"] = \"Run the user-defined function '%1'.\";\nBlockly.Msg[\"PROCEDURES_CALLRETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_CALLRETURN_TOOLTIP\"] = \"Run the user-defined function '%1' and use its output.\";\nBlockly.Msg[\"PROCEDURES_CALL_BEFORE_PARAMS\"] = \"with:\";\nBlockly.Msg[\"PROCEDURES_CALL_DISABLED_DEF_WARNING\"] = \"Can't run the user-defined function '%1' because the definition block is disabled.\";\nBlockly.Msg[\"PROCEDURES_CREATE_DO\"] = \"Create '%1'\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_COMMENT\"] = \"Describe this function...\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_DO\"] = \"\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_PROCEDURE\"] = \"do something\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_TITLE\"] = \"to\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_TOOLTIP\"] = \"Creates a function with no output.\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_RETURN\"] = \"return\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_TOOLTIP\"] = \"Creates a function with an output.\";\nBlockly.Msg[\"PROCEDURES_DEF_DUPLICATE_WARNING\"] = \"Warning: This function has duplicate parameters.\";\nBlockly.Msg[\"PROCEDURES_HIGHLIGHT_DEF\"] = \"Highlight function definition\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_HELPURL\"] = \"https://c2.com/cgi/wiki?GuardClause\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_TOOLTIP\"] = \"If a value is true, then return a second value.\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_WARNING\"] = \"Warning: This block may be used only within a function definition.\";\nBlockly.Msg[\"PROCEDURES_MUTATORARG_TITLE\"] = \"input name:\";\nBlockly.Msg[\"PROCEDURES_MUTATORARG_TOOLTIP\"] = \"Add an input to the function.\";\nBlockly.Msg[\"PROCEDURES_MUTATORCONTAINER_TITLE\"] = \"inputs\";\nBlockly.Msg[\"PROCEDURES_MUTATORCONTAINER_TOOLTIP\"] = \"Add, remove, or reorder inputs to this function.\";\nBlockly.Msg[\"REDO\"] = \"Redo\";\nBlockly.Msg[\"REMOVE_COMMENT\"] = \"Remove Comment\";\nBlockly.Msg[\"RENAME_VARIABLE\"] = \"Rename variable...\";\nBlockly.Msg[\"RENAME_VARIABLE_TITLE\"] = \"Rename all '%1' variables to:\";\nBlockly.Msg[\"SHORTCUTS_CODE_NAVIGATION\"] = \"Code navigation\";\nBlockly.Msg[\"SHORTCUTS_EDITING\"] = \"Editing\";\nBlockly.Msg[\"SHORTCUTS_GENERAL\"] = \"General\";\nBlockly.Msg[\"TEXT_APPEND_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-modification\";\nBlockly.Msg[\"TEXT_APPEND_TITLE\"] = \"to %1 append text %2\";\nBlockly.Msg[\"TEXT_APPEND_TOOLTIP\"] = \"Append some text to variable '%1'.\";\nBlockly.Msg[\"TEXT_CHANGECASE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#adjusting-text-case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_LOWERCASE\"] = \"to lower case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_TITLECASE\"] = \"to Title Case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_UPPERCASE\"] = \"to UPPER CASE\";\nBlockly.Msg[\"TEXT_CHANGECASE_TOOLTIP\"] = \"Return a copy of the text in a different case.\";\nBlockly.Msg[\"TEXT_CHARAT_FIRST\"] = \"get first letter\";\nBlockly.Msg[\"TEXT_CHARAT_FROM_END\"] = \"get letter # from end\";\nBlockly.Msg[\"TEXT_CHARAT_FROM_START\"] = \"get letter #\";\nBlockly.Msg[\"TEXT_CHARAT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#extracting-text\";\nBlockly.Msg[\"TEXT_CHARAT_LAST\"] = \"get last letter\";\nBlockly.Msg[\"TEXT_CHARAT_RANDOM\"] = \"get random letter\";\nBlockly.Msg[\"TEXT_CHARAT_TAIL\"] = \"\";\nBlockly.Msg[\"TEXT_CHARAT_TITLE\"] = \"in text %1 %2\";\nBlockly.Msg[\"TEXT_CHARAT_TOOLTIP\"] = \"Returns the letter at the specified position.\";\nBlockly.Msg[\"TEXT_COUNT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#counting-substrings\";\nBlockly.Msg[\"TEXT_COUNT_MESSAGE0\"] = \"count %1 in %2\";\nBlockly.Msg[\"TEXT_COUNT_TOOLTIP\"] = \"Count how many times some text occurs within some other text.\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_ITEM_TOOLTIP\"] = \"Add an item to the text.\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_TITLE_JOIN\"] = \"join\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this text block.\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_FROM_END\"] = \"to letter # from end\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_FROM_START\"] = \"to letter #\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_LAST\"] = \"to last letter\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_INPUT_IN_TEXT\"] = \"in text\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FIRST\"] = \"get substring from first letter\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FROM_END\"] = \"get substring from letter # from end\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FROM_START\"] = \"get substring from letter #\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_TAIL\"] = \"\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_TOOLTIP\"] = \"Returns a specified portion of the text.\";\nBlockly.Msg[\"TEXT_INDEXOF_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#finding-text\";\nBlockly.Msg[\"TEXT_INDEXOF_OPERATOR_FIRST\"] = \"find first occurrence of text\";\nBlockly.Msg[\"TEXT_INDEXOF_OPERATOR_LAST\"] = \"find last occurrence of text\";\nBlockly.Msg[\"TEXT_INDEXOF_TITLE\"] = \"in text %1 %2 %3\";\nBlockly.Msg[\"TEXT_INDEXOF_TOOLTIP\"] = \"Returns the index of the first/last occurrence of the first text in the second text. Returns %1 if text is not found.\";\nBlockly.Msg[\"TEXT_ISEMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#checking-for-empty-text\";\nBlockly.Msg[\"TEXT_ISEMPTY_TITLE\"] = \"%1 is empty\";\nBlockly.Msg[\"TEXT_ISEMPTY_TOOLTIP\"] = \"Returns true if the provided text is empty.\";\nBlockly.Msg[\"TEXT_JOIN_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-creation\";\nBlockly.Msg[\"TEXT_JOIN_TITLE_CREATEWITH\"] = \"create text with\";\nBlockly.Msg[\"TEXT_JOIN_TOOLTIP\"] = \"Create a piece of text by joining together any number of items.\";\nBlockly.Msg[\"TEXT_LENGTH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-modification\";\nBlockly.Msg[\"TEXT_LENGTH_TITLE\"] = \"length of %1\";\nBlockly.Msg[\"TEXT_LENGTH_TOOLTIP\"] = \"Returns the number of letters (including spaces) in the provided text.\";\nBlockly.Msg[\"TEXT_PRINT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#printing-text\";\nBlockly.Msg[\"TEXT_PRINT_TITLE\"] = \"print %1\";\nBlockly.Msg[\"TEXT_PRINT_TOOLTIP\"] = \"Print the specified text, number or other value.\";\nBlockly.Msg[\"TEXT_PROMPT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#getting-input-from-the-user\";\nBlockly.Msg[\"TEXT_PROMPT_TOOLTIP_NUMBER\"] = \"Prompt for user for a number.\";\nBlockly.Msg[\"TEXT_PROMPT_TOOLTIP_TEXT\"] = \"Prompt for user for some text.\";\nBlockly.Msg[\"TEXT_PROMPT_TYPE_NUMBER\"] = \"prompt for number with message\";\nBlockly.Msg[\"TEXT_PROMPT_TYPE_TEXT\"] = \"prompt for text with message\";\nBlockly.Msg[\"TEXT_REPLACE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#replacing-substrings\";\nBlockly.Msg[\"TEXT_REPLACE_MESSAGE0\"] = \"replace %1 with %2 in %3\";\nBlockly.Msg[\"TEXT_REPLACE_TOOLTIP\"] = \"Replace all occurances of some text within some other text.\";\nBlockly.Msg[\"TEXT_REVERSE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#reversing-text\";\nBlockly.Msg[\"TEXT_REVERSE_MESSAGE0\"] = \"reverse %1\";\nBlockly.Msg[\"TEXT_REVERSE_TOOLTIP\"] = \"Reverses the order of the characters in the text.\";\nBlockly.Msg[\"TEXT_TEXT_HELPURL\"] = \"https://en.wikipedia.org/wiki/String_(computer_science)\";\nBlockly.Msg[\"TEXT_TEXT_TOOLTIP\"] = \"A letter, word, or line of text.\";\nBlockly.Msg[\"TEXT_TRIM_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#trimming-removing-spaces\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_BOTH\"] = \"trim spaces from both sides of\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_LEFT\"] = \"trim spaces from left side of\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_RIGHT\"] = \"trim spaces from right side of\";\nBlockly.Msg[\"TEXT_TRIM_TOOLTIP\"] = \"Return a copy of the text with spaces removed from one or both ends.\";\nBlockly.Msg[\"TODAY\"] = \"Today\";\nBlockly.Msg[\"UNDO\"] = \"Undo\";\nBlockly.Msg[\"UNKNOWN\"] = \"Unknown\";\nBlockly.Msg[\"UNNAMED_KEY\"] = \"unnamed\";\nBlockly.Msg[\"VARIABLES_DEFAULT_NAME\"] = \"item\";\nBlockly.Msg[\"VARIABLES_GET_CREATE_SET\"] = \"Create 'set %1'\";\nBlockly.Msg[\"VARIABLES_GET_HELPURL\"] = \"https://github.com/google/blockly/wiki/Variables#get\";\nBlockly.Msg[\"VARIABLES_GET_TOOLTIP\"] = \"Returns the value of this variable.\";\nBlockly.Msg[\"VARIABLES_SET\"] = \"set %1 to %2\";\nBlockly.Msg[\"VARIABLES_SET_CREATE_GET\"] = \"Create 'get %1'\";\nBlockly.Msg[\"VARIABLES_SET_HELPURL\"] = \"https://github.com/google/blockly/wiki/Variables#set\";\nBlockly.Msg[\"VARIABLES_SET_TOOLTIP\"] = \"Sets this variable to be equal to the input.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS\"] = \"A variable named '%1' already exists.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE\"] = \"A variable named '%1' already exists for another type: '%2'.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS_FOR_A_PARAMETER\"] = \"A variable named '%1' already exists as a parameter in the procedure '%2'.\";\nBlockly.Msg[\"WINDOWS\"] = \"Windows\";\nBlockly.Msg[\"WORKSPACE_ARIA_LABEL\"] = \"Blockly Workspace\";\nBlockly.Msg[\"WORKSPACE_COMMENT_DEFAULT_TEXT\"] = \"Say something...\";\nBlockly.Msg[\"CONTROLS_FOREACH_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_FOR_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_IF_ELSEIF_TITLE_ELSEIF\"] = Blockly.Msg[\"CONTROLS_IF_MSG_ELSEIF\"];\nBlockly.Msg[\"CONTROLS_IF_ELSE_TITLE_ELSE\"] = Blockly.Msg[\"CONTROLS_IF_MSG_ELSE\"];\nBlockly.Msg[\"CONTROLS_IF_IF_TITLE_IF\"] = Blockly.Msg[\"CONTROLS_IF_MSG_IF\"];\nBlockly.Msg[\"CONTROLS_IF_MSG_THEN\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"LISTS_CREATE_WITH_ITEM_TITLE\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"LISTS_GET_INDEX_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_GET_SUBLIST_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_INDEX_OF_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_SET_INDEX_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"MATH_CHANGE_TITLE_ITEM\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_COMMENT\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_COMMENT\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_DO\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_DO\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_PROCEDURE\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_PROCEDURE\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_TITLE\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_TITLE\"];\nBlockly.Msg[\"TEXT_APPEND_VARIABLE\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"TEXT_CREATE_JOIN_ITEM_TITLE_ITEM\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\n\nBlockly.Msg[\"COLOUR_HUE\"] = \"20\";\nBlockly.Msg[\"LISTS_HUE\"] = \"260\";\nBlockly.Msg[\"LOGIC_HUE\"] = \"210\";\nBlockly.Msg[\"LOOPS_HUE\"] = \"120\";\nBlockly.Msg[\"MATH_HUE\"] = \"230\";\nBlockly.Msg[\"PROCEDURES_HUE\"] = \"290\";\nBlockly.Msg[\"TEXTS_HUE\"] = \"160\";\nBlockly.Msg[\"VARIABLES_DYNAMIC_HUE\"] = \"310\";\nBlockly.Msg[\"VARIABLES_HUE\"] = \"330\";\nreturn Blockly.Msg;\n}));\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/msg/en.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/python.mjs": +/*!*****************************************!*\ + !*** ./node_modules/blockly/python.mjs ***! + \*****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Order: () => (/* binding */ Order),\n/* harmony export */ PythonGenerator: () => (/* binding */ PythonGenerator),\n/* harmony export */ pythonGenerator: () => (/* binding */ pythonGenerator)\n/* harmony export */ });\n/* harmony import */ var _python_compressed_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./python_compressed.js */ \"./node_modules/blockly/python_compressed.js\");\n\nconst {\n Order,\n PythonGenerator,\n pythonGenerator,\n} = _python_compressed_js__WEBPACK_IMPORTED_MODULE_0__;\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/python.mjs?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/python_compressed.js": +/*!***************************************************!*\ + !*** ./node_modules/blockly/python_compressed.js ***! + \***************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Do not edit this file; automatically generated.\n\n/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ./blockly_compressed.js */ \"./node_modules/blockly/blockly_compressed.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function(__parent__) {\nvar $=__parent__.__namespace__;\nvar lists_create_empty$$module$build$src$generators$python$lists=function(a,b){return[\"[]\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},lists_create_with$$module$build$src$generators$python$lists=function(a,b){const c=Array(a.itemCount_);for(let d=0;d\",GTE:\">=\"}[a.getFieldValue(\"OP\")],d=Order$$module$build$src$generators$python$python_generator.RELATIONAL,e=b.valueToCode(a,\"A\",d)||\"0\";a=b.valueToCode(a,\"B\",d)||\"0\";return[e+\" \"+c+\" \"+a,d]},logic_operation$$module$build$src$generators$python$logic=function(a,\nb){const c=a.getFieldValue(\"OP\")===\"AND\"?\"and\":\"or\",d=c===\"and\"?Order$$module$build$src$generators$python$python_generator.LOGICAL_AND:Order$$module$build$src$generators$python$python_generator.LOGICAL_OR;let e=b.valueToCode(a,\"A\",d);a=b.valueToCode(a,\"B\",d);e||a?(b=c===\"and\"?\"True\":\"False\",e||(e=b),a||(a=b)):a=e=\"False\";return[e+\" \"+c+\" \"+a,d]},logic_negate$$module$build$src$generators$python$logic=function(a,b){return[\"not \"+(b.valueToCode(a,\"BOOL\",Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT)||\n\"True\"),Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT]},logic_boolean$$module$build$src$generators$python$logic=function(a,b){return[a.getFieldValue(\"BOOL\")===\"TRUE\"?\"True\":\"False\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},logic_null$$module$build$src$generators$python$logic=function(a,b){return[\"None\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},logic_ternary$$module$build$src$generators$python$logic=function(a,b){const c=\nb.valueToCode(a,\"IF\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"False\",d=b.valueToCode(a,\"THEN\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"None\";a=b.valueToCode(a,\"ELSE\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"None\";return[d+\" if \"+c+\" else \"+a,Order$$module$build$src$generators$python$python_generator.CONDITIONAL]},controls_repeat_ext$$module$build$src$generators$python$loops=function(a,b){let c;c=a.getField(\"TIMES\")?\nString(parseInt(a.getFieldValue(\"TIMES\"),10)):b.valueToCode(a,\"TIMES\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";c=$.isNumber$$module$build$src$core$utils$string(c)?parseInt(c,10):\"int(\"+c+\")\";let d=b.statementToCode(a,\"DO\");d=b.addLoopTrap(d,a)||b.PASS;return\"for \"+b.nameDB_.getDistinctName(\"count\",$.NameType$$module$build$src$core$names.VARIABLE)+\" in range(\"+c+\"):\\n\"+d},controls_whileUntil$$module$build$src$generators$python$loops=function(a,b){const c=a.getFieldValue(\"MODE\")===\n\"UNTIL\";let d=b.valueToCode(a,\"BOOL\",c?Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT:Order$$module$build$src$generators$python$python_generator.NONE)||\"False\",e=b.statementToCode(a,\"DO\");e=b.addLoopTrap(e,a)||b.PASS;c&&(d=\"not \"+d);return\"while \"+d+\":\\n\"+e},controls_for$$module$build$src$generators$python$loops=function(a,b){const c=b.getVariableName(a.getFieldValue(\"VAR\"));var d=b.valueToCode(a,\"FROM\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",\ne=b.valueToCode(a,\"TO\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",f=b.valueToCode(a,\"BY\",Order$$module$build$src$generators$python$python_generator.NONE)||\"1\";let g=b.statementToCode(a,\"DO\");g=b.addLoopTrap(g,a)||b.PASS;let h=\"\";a=function(){return b.provideFunction_(\"upRange\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):\n while start <= stop:\n yield start\n start += abs(step)\n`)};const k=function(){return b.provideFunction_(\"downRange\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):\n while start >= stop:\n yield start\n start -= abs(step)\n`)};if($.isNumber$$module$build$src$core$utils$string(d)&&$.isNumber$$module$build$src$core$utils$string(e)&&$.isNumber$$module$build$src$core$utils$string(f))d=Number(d),e=Number(e),f=Math.abs(Number(f)),d%1===0&&e%1===0&&f%1===0?(d<=e?(e++,a=d===0&&f===1?e:d+\", \"+e,f!==1&&(a+=\", \"+f)):(e--,a=d+\", \"+e+\", -\"+f),a=\"range(\"+a+\")\"):(a=d 0\",Order$$module$build$src$generators$python$python_generator.RELATIONAL,Order$$module$build$src$generators$python$python_generator.RELATIONAL],NEGATIVE:[\" < 0\",\nOrder$$module$build$src$generators$python$python_generator.RELATIONAL,Order$$module$build$src$generators$python$python_generator.RELATIONAL],DIVISIBLE_BY:[null,Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE,Order$$module$build$src$generators$python$python_generator.RELATIONAL],PRIME:[null,Order$$module$build$src$generators$python$python_generator.NONE,Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]};const d=a.getFieldValue(\"PROPERTY\"),[e,f,g]=c[d];\nc=b.valueToCode(a,\"NUMBER_TO_CHECK\",f)||\"0\";if(d===\"PRIME\")b.definitions_.import_math=\"import math\",b.definitions_.from_numbers_import_Number=\"from numbers import Number\",a=b.provideFunction_(\"math_isPrime\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(n):\n # https://en.wikipedia.org/wiki/Primality_test#Naive_methods\n # If n is not a number but a string, try parsing it.\n if not isinstance(n, Number):\n try:\n n = float(n)\n except:\n return False\n if n == 2 or n == 3:\n return True\n # False if n is negative, is 1, or not whole, or if n is divisible by 2 or 3.\n if n <= 1 or n % 1 != 0 or n % 2 == 0 or n % 3 == 0:\n return False\n # Check all the numbers of form 6k +/- 1, up to sqrt(n).\n for x in range(6, int(math.sqrt(n)) + 2, 6):\n if n % (x - 1) == 0 or n % (x + 1) == 0:\n return False\n return True\n`)+\"(\"+c+\")\";else if(d===\"DIVISIBLE_BY\"){a=b.valueToCode(a,\"DIVISOR\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\"0\";if(a===\"0\")return[\"False\",Order$$module$build$src$generators$python$python_generator.ATOMIC];a=c+\" % \"+a+\" == 0\"}else a=c+e;return[a,g]},math_change$$module$build$src$generators$python$math=function(a,b){b.definitions_.from_numbers_import_Number=\"from numbers import Number\";const c=b.valueToCode(a,\"DELTA\",Order$$module$build$src$generators$python$python_generator.ADDITIVE)||\n\"0\";a=b.getVariableName(a.getFieldValue(\"VAR\"));return a+\" = (\"+a+\" if isinstance(\"+a+\", Number) else 0) + \"+c+\"\\n\"},math_on_list$$module$build$src$generators$python$math=function(a,b){const c=a.getFieldValue(\"OP\");a=b.valueToCode(a,\"LIST\",Order$$module$build$src$generators$python$python_generator.NONE)||\"[]\";switch(c){case \"SUM\":b=\"sum(\"+a+\")\";break;case \"MIN\":b=\"min(\"+a+\")\";break;case \"MAX\":b=\"max(\"+a+\")\";break;case \"AVERAGE\":b.definitions_.from_numbers_import_Number=\"from numbers import Number\";\nb=b.provideFunction_(\"math_mean\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(myList):\n localList = [e for e in myList if isinstance(e, Number)]\n if not localList: return\n return float(sum(localList)) / len(localList)\n`)+\"(\"+a+\")\";break;case \"MEDIAN\":b.definitions_.from_numbers_import_Number=\"from numbers import Number\";b=b.provideFunction_(\"math_median\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(myList):\n localList = sorted([e for e in myList if isinstance(e, Number)])\n if not localList: return\n if len(localList) % 2 == 0:\n return (localList[len(localList) // 2 - 1] + localList[len(localList) // 2]) / 2.0\n else:\n return localList[(len(localList) - 1) // 2]\n`)+\"(\"+a+\")\";break;case \"MODE\":b=b.provideFunction_(\"math_modes\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(some_list):\n modes = []\n # Using a lists of [item, count] to keep count rather than dict\n # to avoid \"unhashable\" errors when the counted item is itself a list or dict.\n counts = []\n maxCount = 1\n for item in some_list:\n found = False\n for count in counts:\n if count[0] == item:\n count[1] += 1\n maxCount = max(maxCount, count[1])\n found = True\n if not found:\n counts.append([item, 1])\n for counted_item, item_count in counts:\n if item_count == maxCount:\n modes.append(counted_item)\n return modes\n`)+\"(\"+a+\")\";break;case \"STD_DEV\":b.definitions_.import_math=\"import math\";b=b.provideFunction_(\"math_standard_deviation\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(numbers):\n n = len(numbers)\n if n == 0: return\n mean = float(sum(numbers)) / n\n variance = sum((x - mean) ** 2 for x in numbers) / n\n return math.sqrt(variance)\n`)+\"(\"+a+\")\";break;case \"RANDOM\":b.definitions_.import_random=\"import random\";b=\"random.choice(\"+a+\")\";break;default:throw Error(\"Unknown operator: \"+c);}return[b,Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_modulo$$module$build$src$generators$python$math=function(a,b){const c=b.valueToCode(a,\"DIVIDEND\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\"0\";a=b.valueToCode(a,\"DIVISOR\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\n\"0\";return[c+\" % \"+a,Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE]},math_constrain$$module$build$src$generators$python$math=function(a,b){const c=b.valueToCode(a,\"VALUE\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",d=b.valueToCode(a,\"LOW\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";a=b.valueToCode(a,\"HIGH\",Order$$module$build$src$generators$python$python_generator.NONE)||\"float('inf')\";return[\"min(max(\"+c+\", \"+d+\"), \"+\na+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_random_int$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_random=\"import random\";const c=b.valueToCode(a,\"FROM\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";a=b.valueToCode(a,\"TO\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";return[\"random.randint(\"+c+\", \"+a+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},\nmath_random_float$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_random=\"import random\";return[\"random.random()\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_atan2$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_math=\"import math\";const c=b.valueToCode(a,\"X\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";return[\"math.atan2(\"+(b.valueToCode(a,\"Y\",Order$$module$build$src$generators$python$python_generator.NONE)||\n\"0\")+\", \"+c+\") / math.pi * 180\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE]},procedures_defreturn$$module$build$src$generators$python$procedures=function(a,b){var c=[],d=a.workspace,e=$.allUsedVarModels$$module$build$src$core$variables(d)||[];for(var f of e)e=f.getName(),a.getVars().includes(e)||c.push(b.getVariableName(e));d=$.allDeveloperVariables$$module$build$src$core$variables(d);for(f=0;f0?\"int(\"+a+\" + \"+c+\")\":c<0?\"int(\"+a+\" - \"+-c+\")\":\"int(\"+a+\")\",d&&(a=\"-\"+a));return a}},module$build$src$generators$python$python_generator={};module$build$src$generators$python$python_generator.Order=Order$$module$build$src$generators$python$python_generator;module$build$src$generators$python$python_generator.PythonGenerator=PythonGenerator$$module$build$src$generators$python$python_generator;var module$build$src$generators$python$lists={};module$build$src$generators$python$lists.lists_create_empty=lists_create_empty$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_create_with=lists_create_with$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_getIndex=lists_getIndex$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_getSublist=lists_getSublist$$module$build$src$generators$python$lists;\nmodule$build$src$generators$python$lists.lists_indexOf=lists_indexOf$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_isEmpty=lists_isEmpty$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_length=lists_length$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_repeat=lists_repeat$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_reverse=lists_reverse$$module$build$src$generators$python$lists;\nmodule$build$src$generators$python$lists.lists_setIndex=lists_setIndex$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_sort=lists_sort$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_split=lists_split$$module$build$src$generators$python$lists;var controls_ifelse$$module$build$src$generators$python$logic=controls_if$$module$build$src$generators$python$logic,module$build$src$generators$python$logic={};module$build$src$generators$python$logic.controls_if=controls_if$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.controls_ifelse=controls_if$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_boolean=logic_boolean$$module$build$src$generators$python$logic;\nmodule$build$src$generators$python$logic.logic_compare=logic_compare$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_negate=logic_negate$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_null=logic_null$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_operation=logic_operation$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_ternary=logic_ternary$$module$build$src$generators$python$logic;var controls_repeat$$module$build$src$generators$python$loops=controls_repeat_ext$$module$build$src$generators$python$loops,module$build$src$generators$python$loops={};module$build$src$generators$python$loops.controls_flow_statements=controls_flow_statements$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_for=controls_for$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_forEach=controls_forEach$$module$build$src$generators$python$loops;\nmodule$build$src$generators$python$loops.controls_repeat=controls_repeat_ext$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_repeat_ext=controls_repeat_ext$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_whileUntil=controls_whileUntil$$module$build$src$generators$python$loops;var math_round$$module$build$src$generators$python$math=math_single$$module$build$src$generators$python$math,math_trig$$module$build$src$generators$python$math=math_single$$module$build$src$generators$python$math,module$build$src$generators$python$math={};module$build$src$generators$python$math.math_arithmetic=math_arithmetic$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_atan2=math_atan2$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_change=math_change$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_constant=math_constant$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_constrain=math_constrain$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_modulo=math_modulo$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_number=math_number$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_number_property=math_number_property$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_on_list=math_on_list$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_random_float=math_random_float$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_random_int=math_random_int$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_round=math_single$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_single=math_single$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_trig=math_single$$module$build$src$generators$python$math;var procedures_defnoreturn$$module$build$src$generators$python$procedures=procedures_defreturn$$module$build$src$generators$python$procedures,module$build$src$generators$python$procedures={};module$build$src$generators$python$procedures.procedures_callnoreturn=procedures_callnoreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_callreturn=procedures_callreturn$$module$build$src$generators$python$procedures;\nmodule$build$src$generators$python$procedures.procedures_defnoreturn=procedures_defreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_defreturn=procedures_defreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_ifreturn=procedures_ifreturn$$module$build$src$generators$python$procedures;var strRegExp$$module$build$src$generators$python$text=/^\\s*'([^']|\\\\')*'\\s*$/,forceString$$module$build$src$generators$python$text=function(a){return strRegExp$$module$build$src$generators$python$text.test(a)?[a,Order$$module$build$src$generators$python$python_generator.ATOMIC]:[\"str(\"+a+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},text_prompt$$module$build$src$generators$python$text=text_prompt_ext$$module$build$src$generators$python$text,module$build$src$generators$python$text=\n{};module$build$src$generators$python$text.text=text$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_append=text_append$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_changeCase=text_changeCase$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_charAt=text_charAt$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_count=text_count$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_getSubstring=text_getSubstring$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_indexOf=text_indexOf$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_isEmpty=text_isEmpty$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_join=text_join$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_length=text_length$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_print=text_print$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_prompt=text_prompt_ext$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_prompt_ext=text_prompt_ext$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_replace=text_replace$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_reverse=text_reverse$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_trim=text_trim$$module$build$src$generators$python$text;var module$build$src$generators$python$variables={};module$build$src$generators$python$variables.variables_get=variables_get$$module$build$src$generators$python$variables;module$build$src$generators$python$variables.variables_set=variables_set$$module$build$src$generators$python$variables;var module$build$src$generators$python$variables_dynamic={};module$build$src$generators$python$variables_dynamic.variables_get_dynamic=variables_get$$module$build$src$generators$python$variables;module$build$src$generators$python$variables_dynamic.variables_set_dynamic=variables_set$$module$build$src$generators$python$variables;var pythonGenerator$$module$build$src$generators$python=new PythonGenerator$$module$build$src$generators$python$python_generator;pythonGenerator$$module$build$src$generators$python.addReservedWords(\"math,random,Number\");\nvar generators$$module$build$src$generators$python=Object.assign({},module$build$src$generators$python$lists,module$build$src$generators$python$logic,module$build$src$generators$python$loops,module$build$src$generators$python$math,module$build$src$generators$python$procedures,module$build$src$generators$python$text,module$build$src$generators$python$variables,module$build$src$generators$python$variables_dynamic);\nfor(const a in generators$$module$build$src$generators$python)pythonGenerator$$module$build$src$generators$python.forBlock[a]=generators$$module$build$src$generators$python[a];var module$build$src$generators$python={};module$build$src$generators$python.Order=Order$$module$build$src$generators$python$python_generator;module$build$src$generators$python.PythonGenerator=PythonGenerator$$module$build$src$generators$python$python_generator;module$build$src$generators$python.pythonGenerator=pythonGenerator$$module$build$src$generators$python;\nmodule$build$src$generators$python.__namespace__=$;\nreturn module$build$src$generators$python;\n}));\n\n\n//# sourceMappingURL=python_compressed.js.map\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/python_compressed.js?\n}"); + +/***/ }), + +/***/ "./src/steps/step1.js": +/*!****************************!*\ + !*** ./src/steps/step1.js ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var blockly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly */ \"./node_modules/blockly/index.mjs\");\n/* harmony import */ var blockly_python__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! blockly/python */ \"./node_modules/blockly/python.mjs\");\n/**\n * Blockly OT-2 Integration Application\n * \n * This application demonstrates real Blockly installation with custom blocks\n * for OT-2 liquid handler functions from OT2mqtt.py\n */\n\n\n\n\n// Define custom block: OT-2 Home\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_home'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('🏠 OT-2: Home Robot');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Home the OT-2 robot to its initial position');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_home'] = function(block, generator) {\n const code = 'protocol.home()\\n';\n return code;\n};\n\n// Define custom block: OT-2 Mix Color\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_mix_color'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('🎨 OT-2: Mix Color');\n this.appendValueInput('R')\n .setCheck('Number')\n .appendField('Red (µL)');\n this.appendValueInput('Y')\n .setCheck('Number')\n .appendField('Yellow (µL)');\n this.appendValueInput('B')\n .setCheck('Number')\n .appendField('Blue (µL)');\n this.appendValueInput('WELL')\n .setCheck('String')\n .appendField('Well');\n this.appendValueInput('SESSION_ID')\n .setCheck('String')\n .appendField('Session ID');\n this.appendValueInput('EXPERIMENT_ID')\n .setCheck('String')\n .appendField('Experiment ID');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Mix RGB colors in a well using the OT-2 pipette');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_mix_color'] = function(block, generator) {\n const value_r = generator.valueToCode(block, 'R', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_y = generator.valueToCode(block, 'Y', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_b = generator.valueToCode(block, 'B', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_well = generator.valueToCode(block, 'WELL', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"A1\"';\n const value_session_id = generator.valueToCode(block, 'SESSION_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"session_001\"';\n const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"exp_001\"';\n \n const code = `payload = {\n \"command\": {\n \"R\": ${value_r},\n \"Y\": ${value_y},\n \"B\": ${value_b},\n \"well\": ${value_well}\n },\n \"session_id\": ${value_session_id},\n \"experiment_id\": ${value_experiment_id}\n}\nmix_color(payload)\n`;\n return code;\n};\n\n// Define custom block: OT-2 Move Sensor Back\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_move_sensor_back'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('↩️ OT-2: Move Sensor Back');\n this.appendValueInput('SENSOR_STATUS')\n .setCheck('String')\n .appendField('Sensor Status');\n this.appendValueInput('SESSION_ID')\n .setCheck('String')\n .appendField('Session ID');\n this.appendValueInput('EXPERIMENT_ID')\n .setCheck('String')\n .appendField('Experiment ID');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Move the sensor back to charging position');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_move_sensor_back'] = function(block, generator) {\n const value_sensor_status = generator.valueToCode(block, 'SENSOR_STATUS', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"complete\"';\n const value_session_id = generator.valueToCode(block, 'SESSION_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"session_001\"';\n const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"exp_001\"';\n \n const code = `payload = {\n \"command\": {\n \"sensor_status\": ${value_sensor_status}\n },\n \"session_id\": ${value_session_id},\n \"experiment_id\": ${value_experiment_id}\n}\nmove_sensor_back(payload)\n`;\n return code;\n};\n\n// Create toolbox\nconst toolbox = {\n \"kind\": \"categoryToolbox\",\n \"contents\": [\n {\n \"kind\": \"category\",\n \"name\": \"OT-2 Commands\",\n \"colour\": \"#5C81A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"ot2_home\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"ot2_mix_color\",\n \"inputs\": {\n \"R\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 100\n }\n }\n },\n \"Y\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 50\n }\n }\n },\n \"B\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 75\n }\n }\n },\n \"WELL\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"A1\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n },\n {\n \"kind\": \"block\",\n \"type\": \"ot2_move_sensor_back\",\n \"inputs\": {\n \"SENSOR_STATUS\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"complete\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Logic\",\n \"colour\": \"#5C68A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"controls_if\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"logic_compare\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Loops\",\n \"colour\": \"#5CA65C\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"controls_repeat_ext\",\n \"inputs\": {\n \"TIMES\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 3\n }\n }\n }\n }\n },\n {\n \"kind\": \"block\",\n \"type\": \"controls_whileUntil\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Math\",\n \"colour\": \"#5C68A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"math_number\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"math_arithmetic\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Text\",\n \"colour\": \"#5CA68A\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"text\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"text_print\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Variables\",\n \"colour\": \"#A65C81\",\n \"custom\": \"VARIABLE\"\n }\n ]\n};\n\n// Initialize Blockly workspace\nconst workspace = blockly__WEBPACK_IMPORTED_MODULE_0__.inject('blocklyDiv', {\n toolbox: toolbox,\n grid: {\n spacing: 20,\n length: 3,\n colour: '#ccc',\n snap: true\n },\n zoom: {\n controls: true,\n wheel: true,\n startScale: 1.0,\n maxScale: 3,\n minScale: 0.3,\n scaleSpeed: 1.2\n },\n trashcan: true\n});\n\n// Load initial workspace\n\n// Load initial workspace - Step 1: Empty workspace\nconst startBlocks = {\n \"blocks\": {\n \"languageVersion\": 0,\n \"blocks\": []\n }\n};\n\nblockly__WEBPACK_IMPORTED_MODULE_0__.serialization.workspaces.load(startBlocks, workspace);\n\n// Generate code function\nfunction generateCode() {\n const code = blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.workspaceToCode(workspace);\n const fullCode = `# Generated from Blockly visual programming\n# This code uses functions from OT2mqtt.py\n\nfrom OT2mqtt import mix_color, move_sensor_back, protocol\n\n# Main workflow\n${code}`;\n \n document.getElementById('codeOutput').textContent = fullCode;\n}\n\n// Update code on workspace change\nworkspace.addChangeListener(generateCode);\n\n// Generate initial code\ngenerateCode();\n\n// Expose generate function to button\nwindow.generateCode = generateCode;\n\n\n//# sourceURL=webpack://blockly_app/./src/steps/step1.js?\n}"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./src/steps/step1.js"); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/scripts/blockly_app/dist/step2.html b/scripts/blockly_app/dist/step2.html new file mode 100644 index 00000000..36350d8c --- /dev/null +++ b/scripts/blockly_app/dist/step2.html @@ -0,0 +1,84 @@ + + + + + Blockly OT-2 - Step 2 + + + +

Blockly OT-2 Custom Functions - Building Workflow Step by Step

+
Step 2
+
+
+
+

Generated Python Code

+
+ Watch as we build the workflow block by block +
+
# Waiting for blocks...
+
+
+ + + diff --git a/scripts/blockly_app/dist/step2.js b/scripts/blockly_app/dist/step2.js new file mode 100644 index 00000000..e5d23ba0 --- /dev/null +++ b/scripts/blockly_app/dist/step2.js @@ -0,0 +1,170 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/blockly/blockly_compressed.js": +/*!****************************************************!*\ + !*** ./node_modules/blockly/blockly_compressed.js ***! + \****************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Do not edit this file; automatically generated.\n\n/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function() {\nvar $={};\nvar register$$module$build$src$core$registry,validate$$module$build$src$core$registry,unregister$$module$build$src$core$registry,getItem$$module$build$src$core$registry,hasItem$$module$build$src$core$registry,getClass$$module$build$src$core$registry,getObject$$module$build$src$core$registry,getAllItems$$module$build$src$core$registry,getClassFromOptions$$module$build$src$core$registry,longStart$$module$build$src$core$touch,longStop$$module$build$src$core$touch,clearTouchIdentifier$$module$build$src$core$touch,\nshouldHandleEvent$$module$build$src$core$touch,getTouchIdentifierFromEvent$$module$build$src$core$touch,checkTouchIdentifier$$module$build$src$core$touch,conditionalBind$$module$build$src$core$browser_events,bind$$module$build$src$core$browser_events,unbind$$module$build$src$core$browser_events,isTargetInput$$module$build$src$core$browser_events,isRightButton$$module$build$src$core$browser_events,mouseToSvg$$module$build$src$core$browser_events,getScrollDeltaPixels$$module$build$src$core$browser_events,\ngetNextUniqueId$$module$build$src$core$utils$idgenerator,genUid$$module$build$src$core$utils$idgenerator,isBlockCreate$$module$build$src$core$events$predicates,isBlockDelete$$module$build$src$core$events$predicates,isBlockChange$$module$build$src$core$events$predicates,isBlockFieldIntermediateChange$$module$build$src$core$events$predicates,isBlockMove$$module$build$src$core$events$predicates,isVarCreate$$module$build$src$core$events$predicates,isVarDelete$$module$build$src$core$events$predicates,\nisVarRename$$module$build$src$core$events$predicates,isBlockDrag$$module$build$src$core$events$predicates,isSelected$$module$build$src$core$events$predicates,isClick$$module$build$src$core$events$predicates,isBubbleOpen$$module$build$src$core$events$predicates,isTrashcanOpen$$module$build$src$core$events$predicates,isToolboxItemSelect$$module$build$src$core$events$predicates,isThemeChange$$module$build$src$core$events$predicates,isViewportChange$$module$build$src$core$events$predicates,isCommentCreate$$module$build$src$core$events$predicates,\nisCommentDelete$$module$build$src$core$events$predicates,isCommentChange$$module$build$src$core$events$predicates,isCommentMove$$module$build$src$core$events$predicates,isCommentResize$$module$build$src$core$events$predicates,isCommentDrag$$module$build$src$core$events$predicates,isCommentCollapse$$module$build$src$core$events$predicates,isFinishedLoading$$module$build$src$core$events$predicates,getRecordUndo$$module$build$src$core$events$utils,fire$$module$build$src$core$events$utils,fireInternal$$module$build$src$core$events$utils,\nfireNow$$module$build$src$core$events$utils,enqueueEvent$$module$build$src$core$events$utils,filter$$module$build$src$core$events$utils,clearPendingUndo$$module$build$src$core$events$utils,isEnabled$$module$build$src$core$events$utils,setGroupInternal$$module$build$src$core$events$utils,getDescendantIds$$module$build$src$core$events$utils,fromJson$$module$build$src$core$events$utils,get$$module$build$src$core$events$utils,disableOrphans$$module$build$src$core$events$utils,createSvgElement$$module$build$src$core$utils$dom,\naddClass$$module$build$src$core$utils$dom,removeClasses$$module$build$src$core$utils$dom,removeClass$$module$build$src$core$utils$dom,hasClass$$module$build$src$core$utils$dom,removeNode$$module$build$src$core$utils$dom,insertAfter$$module$build$src$core$utils$dom,setCssTransform$$module$build$src$core$utils$dom,startTextWidthCache$$module$build$src$core$utils$dom,stopTextWidthCache$$module$build$src$core$utils$dom,getTextWidth$$module$build$src$core$utils$dom,getFastTextWidth$$module$build$src$core$utils$dom,\ngetFastTextWidthWithSizeString$$module$build$src$core$utils$dom,measureFontMetrics$$module$build$src$core$utils$dom,isFocusableNode$$module$build$src$core$interfaces$i_focusable_node,isSelectable$$module$build$src$core$interfaces$i_selectable,deepMerge$$module$build$src$core$utils$object,getWorkspaceById$$module$build$src$core$common,getAllWorkspaces$$module$build$src$core$common,registerWorkspace$$module$build$src$core$common,unregisterWorkpace$$module$build$src$core$common,getMainWorkspace$$module$build$src$core$common,\nsetMainWorkspace$$module$build$src$core$common,getSelected$$module$build$src$core$common,setSelected$$module$build$src$core$common,fireSelectedEvent$$module$build$src$core$common,getParentContainer$$module$build$src$core$common,setParentContainer$$module$build$src$core$common,svgResize$$module$build$src$core$common,getBlockTypeCounts$$module$build$src$core$common,jsonInitFactory$$module$build$src$core$common,defineBlocksWithJsonArray$$module$build$src$core$common,defineBlocksWithJsonArrayInternal$$module$build$src$core$common,\nglobalShortcutHandler$$module$build$src$core$common,removeElem$$module$build$src$core$utils$array,register$$module$build$src$core$css,inject$$module$build$src$core$css,getSize$$module$build$src$core$utils$style,getSizeInternal$$module$build$src$core$utils$style,getSizeWithDisplay$$module$build$src$core$utils$style,getComputedStyle$$module$build$src$core$utils$style,getPageOffset$$module$build$src$core$utils$style,getViewportPageOffset$$module$build$src$core$utils$style,getBorderBox$$module$build$src$core$utils$style,\nscrollIntoContainerView$$module$build$src$core$utils$style,getContainerOffsetToScrollInto$$module$build$src$core$utils$style,getRelativeXY$$module$build$src$core$utils$svg_math,getInjectionDivXY$$module$build$src$core$utils$svg_math,getViewportBBox$$module$build$src$core$utils$svg_math,getDocumentScroll$$module$build$src$core$utils$svg_math,screenToWsCoordinates$$module$build$src$core$utils$svg_math,wsToScreenCoordinates$$module$build$src$core$utils$svg_math,injectDependencies$$module$build$src$core$utils$xml,\ndomToText$$module$build$src$core$utils$xml,sanitizeText$$module$build$src$core$utils$xml,convertToolboxDefToJson$$module$build$src$core$utils$toolbox,validateToolbox$$module$build$src$core$utils$toolbox,convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox,hasCategories$$module$build$src$core$utils$toolbox,hasCategoriesInternal$$module$build$src$core$utils$toolbox,isCategoryCollapsible$$module$build$src$core$utils$toolbox,convertToToolboxJson$$module$build$src$core$utils$toolbox,xmlToJsonArray$$module$build$src$core$utils$toolbox,\naddAttributes$$module$build$src$core$utils$toolbox,parseToolboxTree$$module$build$src$core$utils$toolbox,getStartPositionRect$$module$build$src$core$positionable_helpers,getCornerOppositeToolbox$$module$build$src$core$positionable_helpers,bumpPositionRect$$module$build$src$core$positionable_helpers,register$$module$build$src$core$serialization$registry,unregister$$module$build$src$core$serialization$registry,save$$module$build$src$core$serialization$workspace_comments,append$$module$build$src$core$serialization$workspace_comments,\nregister$$module$build$src$core$clipboard$registry,unregister$$module$build$src$core$clipboard$registry,moveCommentToNotConflict$$module$build$src$core$clipboard$workspace_comment_paster,commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster,setRole$$module$build$src$core$utils$aria,setState$$module$build$src$core$utils$aria,isSerializable$$module$build$src$core$interfaces$i_serializable,queueRender$$module$build$src$core$render_management,finishQueuedRenders$$module$build$src$core$render_management,\ntriggerQueuedRenders$$module$build$src$core$render_management,alwaysImmediatelyRender$$module$build$src$core$render_management,queueBlock$$module$build$src$core$render_management,doRenders$$module$build$src$core$render_management,dequeueBlock$$module$build$src$core$render_management,shouldRenderRootBlock$$module$build$src$core$render_management,renderBlock$$module$build$src$core$render_management,alert$$module$build$src$core$dialog,setAlert$$module$build$src$core$dialog,confirm$$module$build$src$core$dialog,\nsetConfirm$$module$build$src$core$dialog,prompt$$module$build$src$core$dialog,setPrompt$$module$build$src$core$dialog,toast$$module$build$src$core$dialog,setToast$$module$build$src$core$dialog,isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks,isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks,isVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model,warn$$module$build$src$core$utils$deprecation,\ninternalFlyoutCategory$$module$build$src$core$variables,flyoutCategory$$module$build$src$core$variables,generateVariableFieldJson$$module$build$src$core$variables,jsonFlyoutCategoryBlocks$$module$build$src$core$variables,xmlFlyoutCategory$$module$build$src$core$variables,flyoutCategoryBlocks$$module$build$src$core$variables,generateUniqueName$$module$build$src$core$variables,generateUniqueNameInternal$$module$build$src$core$variables,generateUniqueNameFromOptions$$module$build$src$core$variables,\ncreateVariableButtonHandler$$module$build$src$core$variables,promptName$$module$build$src$core$variables,nameUsedWithOtherType$$module$build$src$core$variables,nameUsedWithAnyType$$module$build$src$core$variables,nameUsedWithConflictingParam$$module$build$src$core$variables,checkForConflictingParamWithProcedureModels$$module$build$src$core$variables,checkForConflictingParamWithLegacyProcedures$$module$build$src$core$variables,generateVariableFieldDom$$module$build$src$core$variables,createVariable$$module$build$src$core$variables,\ngetAddedVariables$$module$build$src$core$variables,compareByName$$module$build$src$core$variables,getVariableUsesById$$module$build$src$core$variables,save$$module$build$src$core$serialization$blocks,saveAttributes$$module$build$src$core$serialization$blocks,saveCoords$$module$build$src$core$serialization$blocks,saveExtraState$$module$build$src$core$serialization$blocks,saveIcons$$module$build$src$core$serialization$blocks,saveFields$$module$build$src$core$serialization$blocks,saveInputBlocks$$module$build$src$core$serialization$blocks,\nsaveNextBlocks$$module$build$src$core$serialization$blocks,saveConnection$$module$build$src$core$serialization$blocks,append$$module$build$src$core$serialization$blocks,appendInternal$$module$build$src$core$serialization$blocks,appendPrivate$$module$build$src$core$serialization$blocks,checkNewVariables$$module$build$src$core$serialization$blocks,loadCoords$$module$build$src$core$serialization$blocks,loadAttributes$$module$build$src$core$serialization$blocks,loadExtraState$$module$build$src$core$serialization$blocks,\ntryToConnectParent$$module$build$src$core$serialization$blocks,loadIcons$$module$build$src$core$serialization$blocks,loadFields$$module$build$src$core$serialization$blocks,loadInputBlocks$$module$build$src$core$serialization$blocks,loadNextBlocks$$module$build$src$core$serialization$blocks,loadConnection$$module$build$src$core$serialization$blocks,initBlock$$module$build$src$core$serialization$blocks,hasBubble$$module$build$src$core$interfaces$i_has_bubble,toRadians$$module$build$src$core$utils$math,\ntoDegrees$$module$build$src$core$utils$math,clamp$$module$build$src$core$utils$math,createDom$$module$build$src$core$dropdowndiv,setBoundsElement$$module$build$src$core$dropdowndiv,getOwner$$module$build$src$core$dropdowndiv,getContentDiv$$module$build$src$core$dropdowndiv,clearContent$$module$build$src$core$dropdowndiv,setColour$$module$build$src$core$dropdowndiv,showPositionedByBlock$$module$build$src$core$dropdowndiv,showPositionedByField$$module$build$src$core$dropdowndiv,getScaledBboxOfBlock$$module$build$src$core$dropdowndiv,\ngetScaledBboxOfField$$module$build$src$core$dropdowndiv,showPositionedByRect$$module$build$src$core$dropdowndiv,show$$module$build$src$core$dropdowndiv,getPositionBelowMetrics$$module$build$src$core$dropdowndiv,getPositionAboveMetrics$$module$build$src$core$dropdowndiv,getPositionTopOfPageMetrics$$module$build$src$core$dropdowndiv,getPositionX$$module$build$src$core$dropdowndiv,isVisible$$module$build$src$core$dropdowndiv,hideIfOwner$$module$build$src$core$dropdowndiv,hide$$module$build$src$core$dropdowndiv,\nhideWithoutAnimation$$module$build$src$core$dropdowndiv,positionInternal$$module$build$src$core$dropdowndiv,repositionForWindowResize$$module$build$src$core$dropdowndiv,shortestStringLength$$module$build$src$core$utils$string,commonWordPrefix$$module$build$src$core$utils$string,commonWordSuffix$$module$build$src$core$utils$string,wrapLine$$module$build$src$core$utils$string,wrapScore$$module$build$src$core$utils$string,wrapMutate$$module$build$src$core$utils$string,wrapToText$$module$build$src$core$utils$string,\nsetCustomTooltip$$module$build$src$core$tooltip,getCustomTooltip$$module$build$src$core$tooltip,isVisible$$module$build$src$core$tooltip,getDiv$$module$build$src$core$tooltip,getTooltipOfObject$$module$build$src$core$tooltip,getTargetObject$$module$build$src$core$tooltip,createDom$$module$build$src$core$tooltip,bindMouseEvents$$module$build$src$core$tooltip,unbindMouseEvents$$module$build$src$core$tooltip,onMouseOver$$module$build$src$core$tooltip,onMouseOut$$module$build$src$core$tooltip,onMouseMove$$module$build$src$core$tooltip,\ndispose$$module$build$src$core$tooltip,hide$$module$build$src$core$tooltip,block$$module$build$src$core$tooltip,unblock$$module$build$src$core$tooltip,renderContent$$module$build$src$core$tooltip,renderDefaultContent$$module$build$src$core$tooltip,getPosition$$module$build$src$core$tooltip,show$$module$build$src$core$tooltip,getHsvSaturation$$module$build$src$core$utils$colour,setHsvSaturation$$module$build$src$core$utils$colour,getHsvValue$$module$build$src$core$utils$colour,setHsvValue$$module$build$src$core$utils$colour,\nparse$$module$build$src$core$utils$colour,rgbToHex$$module$build$src$core$utils$colour,hexToRgb$$module$build$src$core$utils$colour,hsvToHex$$module$build$src$core$utils$colour,blend$$module$build$src$core$utils$colour,hueToHex$$module$build$src$core$utils$colour,tokenizeInterpolationInternal$$module$build$src$core$utils$parsing,tokenizeInterpolation$$module$build$src$core$utils$parsing,replaceMessageReferences$$module$build$src$core$utils$parsing,checkMessageReferences$$module$build$src$core$utils$parsing,\nparseBlockColour$$module$build$src$core$utils$parsing,getDiv$$module$build$src$core$widgetdiv,testOnly_setDiv$$module$build$src$core$widgetdiv,createDom$$module$build$src$core$widgetdiv,show$$module$build$src$core$widgetdiv,hide$$module$build$src$core$widgetdiv,isVisible$$module$build$src$core$widgetdiv,hideIfOwner$$module$build$src$core$widgetdiv,hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv,positionInternal$$module$build$src$core$widgetdiv,positionWithAnchor$$module$build$src$core$widgetdiv,\ncalculateX$$module$build$src$core$widgetdiv,calculateY$$module$build$src$core$widgetdiv,isRepositionable$$module$build$src$core$widgetdiv,repositionForWindowResize$$module$build$src$core$widgetdiv,getCurrentBlock$$module$build$src$core$contextmenu,setCurrentBlock$$module$build$src$core$contextmenu,show$$module$build$src$core$contextmenu,populate_$$module$build$src$core$contextmenu,position_$$module$build$src$core$contextmenu,createWidget_$$module$build$src$core$contextmenu,haltPropagation$$module$build$src$core$contextmenu,\nhide$$module$build$src$core$contextmenu,dispose$$module$build$src$core$contextmenu,mouseToWorkspacePoint$$module$build$src$core$utils$drag,start$$module$build$src$core$utils$drag,move$$module$build$src$core$utils$drag,workspaceToDom$$module$build$src$core$xml,saveWorkspaceComment$$module$build$src$core$xml,variablesToDom$$module$build$src$core$xml,blockToDomWithXY$$module$build$src$core$xml,fieldToDom$$module$build$src$core$xml,allFieldsToDom$$module$build$src$core$xml,blockToDom$$module$build$src$core$xml,\ncloneShadow$$module$build$src$core$xml,domToText$$module$build$src$core$xml,domToPrettyText$$module$build$src$core$xml,clearWorkspaceAndLoadFromXml$$module$build$src$core$xml,loadWorkspaceComment$$module$build$src$core$xml,appendDomToWorkspace$$module$build$src$core$xml,domToBlockInternal$$module$build$src$core$xml,domToVariables$$module$build$src$core$xml,mapSupportedXmlTags$$module$build$src$core$xml,applyMutationTagNodes$$module$build$src$core$xml,applyCommentTagNodes$$module$build$src$core$xml,\napplyDataTagNodes$$module$build$src$core$xml,applyFieldTagNodes$$module$build$src$core$xml,findChildBlocks$$module$build$src$core$xml,applyInputTagNodes$$module$build$src$core$xml,applyNextTagNodes$$module$build$src$core$xml,domToBlockHeadless$$module$build$src$core$xml,domToField$$module$build$src$core$xml,deleteNext$$module$build$src$core$xml,isElement$$module$build$src$core$xml,register$$module$build$src$core$field_registry,unregister$$module$build$src$core$field_registry,fromJsonInternal$$module$build$src$core$field_registry,\nisImageProperties$$module$build$src$core$field_dropdown,unregister$$module$build$src$core$extensions,isRegistered$$module$build$src$core$extensions,apply$$module$build$src$core$extensions,checkNoMutatorProperties$$module$build$src$core$extensions,checkXmlHooks$$module$build$src$core$extensions,checkJsonHooks$$module$build$src$core$extensions,checkMutatorDialog$$module$build$src$core$extensions,checkHasFunctionPair$$module$build$src$core$extensions,checkHasMutatorProperties$$module$build$src$core$extensions,\ngetMutatorProperties$$module$build$src$core$extensions,mutatorPropertiesMatch$$module$build$src$core$extensions,runAfterPageLoad$$module$build$src$core$extensions,checkDropdownOptionsInTable$$module$build$src$core$extensions,extensionParentTooltip$$module$build$src$core$extensions,point$$module$build$src$core$utils$svg_paths,curve$$module$build$src$core$utils$svg_paths,moveTo$$module$build$src$core$utils$svg_paths,moveBy$$module$build$src$core$utils$svg_paths,lineTo$$module$build$src$core$utils$svg_paths,\nline$$module$build$src$core$utils$svg_paths,lineOnAxis$$module$build$src$core$utils$svg_paths,arc$$module$build$src$core$utils$svg_paths,connectReciprocally$$module$build$src$core$connection,getSingleConnection$$module$build$src$core$connection,getConnectionForOrphanedOutput$$module$build$src$core$connection,isIcon$$module$build$src$core$interfaces$i_icon,isCommentIcon$$module$build$src$core$interfaces$i_comment_icon,disposeUiEffect$$module$build$src$core$block_animations,disposeUiStep$$module$build$src$core$block_animations,\nconnectionUiEffect$$module$build$src$core$block_animations,disconnectUiEffect$$module$build$src$core$block_animations,disconnectUiStep$$module$build$src$core$block_animations,disconnectUiStop$$module$build$src$core$block_animations,moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster,blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster,blockIsInSnapRadius$$module$build$src$core$clipboard$block_paster,bumpObjectIntoBounds$$module$build$src$core$bump_objects,bumpIntoBoundsHandler$$module$build$src$core$bump_objects,\nextractObjectFromEvent$$module$build$src$core$bump_objects,bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects,isDeletable$$module$build$src$core$interfaces$i_deletable,getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy,navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy,navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy,register$$module$build$src$core$icons$registry,unregister$$module$build$src$core$icons$registry,\nisDraggable$$module$build$src$core$interfaces$i_draggable,isAutoHideable$$module$build$src$core$interfaces$i_autohideable,isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block,isObservable$$module$build$src$core$interfaces$i_observable,allProcedures$$module$build$src$core$procedures,procTupleComparator$$module$build$src$core$procedures,isLegalName$$module$build$src$core$procedures,isNameUsed$$module$build$src$core$procedures,xmlFlyoutCategory$$module$build$src$core$procedures,internalFlyoutCategory$$module$build$src$core$procedures,\nflyoutCategory$$module$build$src$core$procedures,updateMutatorFlyout$$module$build$src$core$procedures,mutatorOpenListener$$module$build$src$core$procedures,mutatorChangeListener$$module$build$src$core$procedures,getCallers$$module$build$src$core$procedures,blockIsModernCallerFor$$module$build$src$core$procedures,isDynamicShape$$module$build$src$core$renderers$common$constants,isPuzzleTab$$module$build$src$core$renderers$common$constants,isNotch$$module$build$src$core$renderers$common$constants,register$$module$build$src$core$renderers$common$block_rendering,\nunregister$$module$build$src$core$renderers$common$block_rendering,init$$module$build$src$core$renderers$common$block_rendering,stringButtonClickHandler$$module$build$src$core$variables_dynamic,numberButtonClickHandler$$module$build$src$core$variables_dynamic,colourButtonClickHandler$$module$build$src$core$variables_dynamic,internalFlyoutCategory$$module$build$src$core$variables_dynamic,flyoutCategory$$module$build$src$core$variables_dynamic,xmlFlyoutCategory$$module$build$src$core$variables_dynamic,\nflyoutCategoryBlocks$$module$build$src$core$variables_dynamic,resizeSvgContents$$module$build$src$core$workspace_svg,copy$$module$build$src$core$clipboard,getLastCopiedData$$module$build$src$core$clipboard,setLastCopiedData$$module$build$src$core$clipboard,getLastCopiedWorkspace$$module$build$src$core$clipboard,setLastCopiedWorkspace$$module$build$src$core$clipboard,getLastCopiedLocation$$module$build$src$core$clipboard,setLastCopiedLocation$$module$build$src$core$clipboard,paste$$module$build$src$core$clipboard,\npasteFromData$$module$build$src$core$clipboard,isCopyable$$module$build$src$core$interfaces$i_copyable,registerEscape$$module$build$src$core$shortcut_items,registerDelete$$module$build$src$core$shortcut_items,isCopyable$$module$build$src$core$shortcut_items,isCuttable$$module$build$src$core$shortcut_items,registerCopy$$module$build$src$core$shortcut_items,registerCut$$module$build$src$core$shortcut_items,registerPaste$$module$build$src$core$shortcut_items,registerUndo$$module$build$src$core$shortcut_items,\nregisterRedo$$module$build$src$core$shortcut_items,registerDefaultShortcuts$$module$build$src$core$shortcut_items,saveProcedure$$module$build$src$core$serialization$procedures,loadProcedure$$module$build$src$core$serialization$procedures,save$$module$build$src$core$serialization$workspaces,load$$module$build$src$core$serialization$workspaces,inject$$module$build$src$core$inject,createDom$$module$build$src$core$inject,createMainWorkspace$$module$build$src$core$inject,init$$module$build$src$core$inject,\nbindDocumentEvents$$module$build$src$core$inject,loadSounds$$module$build$src$core$inject,isFullBlockField$$module$build$src$core$contextmenu_items,registerUndo$$module$build$src$core$contextmenu_items,registerRedo$$module$build$src$core$contextmenu_items,registerCleanup$$module$build$src$core$contextmenu_items,toggleOption_$$module$build$src$core$contextmenu_items,registerCollapse$$module$build$src$core$contextmenu_items,registerExpand$$module$build$src$core$contextmenu_items,addDeletableBlocks_$$module$build$src$core$contextmenu_items,\ngetDeletableBlocks_$$module$build$src$core$contextmenu_items,deleteNext_$$module$build$src$core$contextmenu_items,registerDeleteAll$$module$build$src$core$contextmenu_items,registerWorkspaceOptions_$$module$build$src$core$contextmenu_items,registerDuplicate$$module$build$src$core$contextmenu_items,registerComment$$module$build$src$core$contextmenu_items,registerInline$$module$build$src$core$contextmenu_items,registerCollapseExpandBlock$$module$build$src$core$contextmenu_items,registerDisable$$module$build$src$core$contextmenu_items,\nregisterDelete$$module$build$src$core$contextmenu_items,registerHelp$$module$build$src$core$contextmenu_items,registerCommentDelete$$module$build$src$core$contextmenu_items,registerCommentDuplicate$$module$build$src$core$contextmenu_items,registerCommentCreate$$module$build$src$core$contextmenu_items,registerBlockOptions_$$module$build$src$core$contextmenu_items,registerCommentOptions$$module$build$src$core$contextmenu_items,registerDefaultOptions$$module$build$src$core$contextmenu_items,isPaster$$module$build$src$core$interfaces$i_paster,\nisRenderedElement$$module$build$src$core$interfaces$i_rendered_element,isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item,hideChaff$$module$build$src$core$blockly,isFocusableTree$$module$build$src$core$interfaces$i_focusable_tree,$jscomp;\nregister$$module$build$src$core$registry=function(a,b,c,d){if(!(a instanceof Type$$module$build$src$core$registry)&&typeof a!==\"string\"||`${a}`.trim()===\"\")throw Error('Invalid type \"'+a+'\". The type must be a non-empty string or a Blockly.registry.Type.');a=`${a}`.toLowerCase();if(typeof b!==\"string\"||b.trim()===\"\")throw Error('Invalid name \"'+b+'\". The name must be a non-empty string.');const e=b.toLowerCase();if(!c)throw Error(\"Can not register a null value\");let f=typeMap$$module$build$src$core$registry[a],\ng=nameMap$$module$build$src$core$registry[a];f||(f=typeMap$$module$build$src$core$registry[a]=Object.create(null),g=nameMap$$module$build$src$core$registry[a]=Object.create(null));validate$$module$build$src$core$registry(a,c);if(!d&&f[e]&&f[e]!==c)throw Error('Name \"'+e+'\" with type \"'+a+'\" already registered.');f[e]=c;g[e]=b};\nvalidate$$module$build$src$core$registry=function(a,b){switch(a){case String(Type$$module$build$src$core$registry.FIELD):if(typeof b.fromJson!==\"function\")throw Error('Type \"'+a+'\" must have a fromJson function');}};\nunregister$$module$build$src$core$registry=function(a,b){a=`${a}`.toLowerCase();b=b.toLowerCase();const c=typeMap$$module$build$src$core$registry[a];c&&c[b]?(delete typeMap$$module$build$src$core$registry[a][b],delete nameMap$$module$build$src$core$registry[a][b]):console.warn(\"Unable to unregister [\"+b+\"][\"+a+\"] from the registry.\")};\ngetItem$$module$build$src$core$registry=function(a,b,c){a=`${a}`.toLowerCase();b=b.toLowerCase();const d=typeMap$$module$build$src$core$registry[a];if(!d||!d[b]){b=\"Unable to find [\"+b+\"][\"+a+\"] in the registry.\";if(c)throw Error(b+\" You must require or register a \"+a+\" plugin.\");console.warn(b);return null}return d[b]};hasItem$$module$build$src$core$registry=function(a,b){a=`${a}`.toLowerCase();b=b.toLowerCase();return(a=typeMap$$module$build$src$core$registry[a])?!!a[b]:!1};\ngetClass$$module$build$src$core$registry=function(a,b,c){return getItem$$module$build$src$core$registry(a,b,c)};getObject$$module$build$src$core$registry=function(a,b,c){return getItem$$module$build$src$core$registry(a,b,c)};\ngetAllItems$$module$build$src$core$registry=function(a,b,c){a=`${a}`.toLowerCase();var d=typeMap$$module$build$src$core$registry[a];if(!d){d=`Unable to find [${a}] in the registry.`;if(c)throw Error(`${d} You must require or register a ${a} plugin.`);console.warn(d);return null}if(!b)return d;a=nameMap$$module$build$src$core$registry[a];c=Object.create(null);for(const e of Object.keys(d))c[a[e]]=d[e];return c};\ngetClassFromOptions$$module$build$src$core$registry=function(a,b,c){b=b.plugins[String(a)]||DEFAULT$$module$build$src$core$registry;return typeof b===\"function\"?b:getClass$$module$build$src$core$registry(a,b,c)};longStart$$module$build$src$core$touch=function(a,b){longStop$$module$build$src$core$touch();longPid_$$module$build$src$core$touch=setTimeout(function(){b&&b.handleRightClick(a)},LONGPRESS$$module$build$src$core$touch)};\nlongStop$$module$build$src$core$touch=function(){longPid_$$module$build$src$core$touch&&(clearTimeout(longPid_$$module$build$src$core$touch),longPid_$$module$build$src$core$touch=0)};clearTouchIdentifier$$module$build$src$core$touch=function(){touchIdentifier_$$module$build$src$core$touch=null};shouldHandleEvent$$module$build$src$core$touch=function(a){return!a.type.startsWith(\"pointer\")||a instanceof PointerEvent&&checkTouchIdentifier$$module$build$src$core$touch(a)};\ngetTouchIdentifierFromEvent$$module$build$src$core$touch=function(a){return`${a.pointerId}`};checkTouchIdentifier$$module$build$src$core$touch=function(a){const b=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);return touchIdentifier_$$module$build$src$core$touch?touchIdentifier_$$module$build$src$core$touch===b:a.type===\"pointerdown\"?(touchIdentifier_$$module$build$src$core$touch=b,!0):!1};\nconditionalBind$$module$build$src$core$browser_events=function(a,b,c,d,e){function f(h){if(e||shouldHandleEvent$$module$build$src$core$touch(h))c?d.call(c,h):d(h)}const g=[];if(b in TOUCH_MAP$$module$build$src$core$touch)for(let h=0;h{setTimeout(fireNow$$module$build$src$core$events$utils,0)})}catch(b){setTimeout(fireNow$$module$build$src$core$events$utils,0)}enqueueEvent$$module$build$src$core$events$utils(a)}};\nfireNow$$module$build$src$core$events$utils=function(){const a=filter$$module$build$src$core$events$utils(FIRE_QUEUE$$module$build$src$core$events$utils);FIRE_QUEUE$$module$build$src$core$events$utils.length=0;for(const b of a){if(!b.workspaceId)continue;let c;(c=getWorkspaceById$$module$build$src$core$common(b.workspaceId))==null||c.fireChangeListener(b)}};\nenqueueEvent$$module$build$src$core$events$utils=function(a){if(isBlockChange$$module$build$src$core$events$predicates(a)&&a.element===\"mutation\"){let b;for(b=FIRE_QUEUE$$module$build$src$core$events$utils.length;b>0;b--){const c=FIRE_QUEUE$$module$build$src$core$events$utils[b-1];if(c.group!==a.group||c.workspaceId!==a.workspaceId||!isBlockMove$$module$build$src$core$events$predicates(c)||c.newParentId!==a.blockId)break}FIRE_QUEUE$$module$build$src$core$events$utils.splice(b,0,a)}else FIRE_QUEUE$$module$build$src$core$events$utils.push(a)};\nfilter$$module$build$src$core$events$utils=function(a){const b=[];for(const c of a)if(a=b[b.length-1],!c.isNull())if(a&&a.workspaceId===c.workspaceId&&a.group===c.group)if(isBlockMove$$module$build$src$core$events$predicates(c)&&isBlockMove$$module$build$src$core$events$predicates(a)&&c.blockId===a.blockId){if(a.newParentId=c.newParentId,a.newInputName=c.newInputName,a.newCoordinate=c.newCoordinate,a.reason||c.reason){let d,e;a.reason=Array.from(new Set(((d=a.reason)!=null?d:[]).concat((e=c.reason)!=\nnull?e:[])))}}else isBlockChange$$module$build$src$core$events$predicates(c)&&isBlockChange$$module$build$src$core$events$predicates(a)&&c.blockId===a.blockId&&c.element===a.element&&c.name===a.name?a.newValue=c.newValue:isViewportChange$$module$build$src$core$events$predicates(c)&&isViewportChange$$module$build$src$core$events$predicates(a)?(a.viewTop=c.viewTop,a.viewLeft=c.viewLeft,a.scale=c.scale,a.oldScale=c.oldScale):isClick$$module$build$src$core$events$predicates(c)&&isBubbleOpen$$module$build$src$core$events$predicates(a)||\nb.push(c);else b.push(c);return a=b.filter(c=>!c.isNull())};clearPendingUndo$$module$build$src$core$events$utils=function(){for(let a=0,b;b=FIRE_QUEUE$$module$build$src$core$events$utils[a];a++)b.recordUndo=!1};$.disable$$module$build$src$core$events$utils=function(){disabled$$module$build$src$core$events$utils++};$.enable$$module$build$src$core$events$utils=function(){disabled$$module$build$src$core$events$utils--};\nisEnabled$$module$build$src$core$events$utils=function(){return disabled$$module$build$src$core$events$utils===0};$.getGroup$$module$build$src$core$events$utils=function(){return group$$module$build$src$core$events$utils};$.setGroup$$module$build$src$core$events$utils=function(a){TEST_ONLY$$module$build$src$core$events$utils.setGroupInternal(a)};\nsetGroupInternal$$module$build$src$core$events$utils=function(a){group$$module$build$src$core$events$utils=typeof a===\"boolean\"?a?genUid$$module$build$src$core$utils$idgenerator():\"\":a};getDescendantIds$$module$build$src$core$events$utils=function(a){const b=[];a=a.getDescendants(!1);for(let c=0,d;d=a[c];c++)b[c]=d.id;return b};\nfromJson$$module$build$src$core$events$utils=function(a,b){const c=get$$module$build$src$core$events$utils(a.type);if(!c)throw Error(\"Unknown event type.\");return c.fromJson(a,b)};get$$module$build$src$core$events$utils=function(a){const b=getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,a);if(!b)throw Error(`Event type ${a} not found in registry.`);return b};\ndisableOrphans$$module$build$src$core$events$utils=function(a){if((isBlockMove$$module$build$src$core$events$predicates(a)||isBlockCreate$$module$build$src$core$events$predicates(a))&&a.workspaceId){var b=getWorkspaceById$$module$build$src$core$common(a.workspaceId);if(!a.blockId)throw Error(\"Encountered a blockEvent without a proper blockId\");if(a=b.getBlockById(a.blockId)){const c=recordUndo$$module$build$src$core$events$utils;try{recordUndo$$module$build$src$core$events$utils=!1;const d=a.getParent();\nif(d&&!d.hasDisabledReason(ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils)){const e=a.getDescendants(!1);for(let f=0,g;g=e[f];f++)g.setDisabledReason(!1,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils)}else if((a.outputConnection||a.previousConnection)&&!b.isDragging()){do a.setDisabledReason(!0,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils),a=a.getNextBlock();while(a)}}finally{recordUndo$$module$build$src$core$events$utils=c}}}};\ncreateSvgElement$$module$build$src$core$utils$dom=function(a,b,c){a=document.createElementNS(SVG_NS$$module$build$src$core$utils$dom,`${a}`);for(const d in b)a.setAttribute(d,`${b[d]}`);c&&c.appendChild(a);return a};addClass$$module$build$src$core$utils$dom=function(a,b){b=b.split(\" \");if(b.every(c=>a.classList.contains(c)))return!1;a.classList.add(...b);return!0};removeClasses$$module$build$src$core$utils$dom=function(a,b){a.classList.remove(...b.split(\" \"))};\nremoveClass$$module$build$src$core$utils$dom=function(a,b){b=b.split(\" \");if(b.every(c=>!a.classList.contains(c)))return!1;a.classList.remove(...b);return!0};hasClass$$module$build$src$core$utils$dom=function(a,b){return a.classList.contains(b)};removeNode$$module$build$src$core$utils$dom=function(a){return a&&a.parentNode?a.parentNode.removeChild(a):null};\ninsertAfter$$module$build$src$core$utils$dom=function(a,b){const c=b.nextSibling;b=b.parentNode;if(!b)throw Error(\"Reference node has no parent.\");c?b.insertBefore(a,c):b.appendChild(a)};setCssTransform$$module$build$src$core$utils$dom=function(a,b){a.style.transform=b;a.style[\"-webkit-transform\"]=b};\nstartTextWidthCache$$module$build$src$core$utils$dom=function(){cacheReference$$module$build$src$core$utils$dom++;cacheWidths$$module$build$src$core$utils$dom||(cacheWidths$$module$build$src$core$utils$dom=Object.create(null))};stopTextWidthCache$$module$build$src$core$utils$dom=function(){cacheReference$$module$build$src$core$utils$dom--;cacheReference$$module$build$src$core$utils$dom||(cacheWidths$$module$build$src$core$utils$dom=null)};\ngetTextWidth$$module$build$src$core$utils$dom=function(a){const b=a.textContent+\"\\n\"+a.className.baseVal;var c;if(cacheWidths$$module$build$src$core$utils$dom&&(c=cacheWidths$$module$build$src$core$utils$dom[b]))return c;c=window.getComputedStyle(a);c=getFastTextWidthWithSizeString$$module$build$src$core$utils$dom(a,c.fontSize,c.fontWeight,c.fontFamily);cacheWidths$$module$build$src$core$utils$dom&&(cacheWidths$$module$build$src$core$utils$dom[b]=c);return c};\ngetFastTextWidth$$module$build$src$core$utils$dom=function(a,b,c,d){return getFastTextWidthWithSizeString$$module$build$src$core$utils$dom(a,b+\"pt\",c,d)};\ngetFastTextWidthWithSizeString$$module$build$src$core$utils$dom=function(a,b,c,d){const e=a.textContent;a=e+\"\\n\"+a.className.baseVal;var f;if(cacheWidths$$module$build$src$core$utils$dom&&(f=cacheWidths$$module$build$src$core$utils$dom[a]))return f;canvasContext$$module$build$src$core$utils$dom||(f=document.createElement(\"canvas\"),f.className=\"blocklyComputeCanvas\",document.body.appendChild(f),canvasContext$$module$build$src$core$utils$dom=f.getContext(\"2d\"));e&&canvasContext$$module$build$src$core$utils$dom?\n(canvasContext$$module$build$src$core$utils$dom.font=c+\" \"+b+\" \"+d,f=canvasContext$$module$build$src$core$utils$dom.measureText(e).width):f=0;cacheWidths$$module$build$src$core$utils$dom&&(cacheWidths$$module$build$src$core$utils$dom[a]=f);return f};\nmeasureFontMetrics$$module$build$src$core$utils$dom=function(a,b,c,d){const e=document.createElement(\"span\");e.style.font=c+\" \"+b+\" \"+d;e.textContent=a;a=document.createElement(\"div\");a.style.width=\"1px\";a.style.height=\"0\";b=document.createElement(\"div\");b.style.display=\"flex\";b.style.position=\"fixed\";b.style.top=\"0\";b.style.left=\"0\";b.appendChild(e);b.appendChild(a);document.body.appendChild(b);c={height:0,baseline:0};try{b.style.alignItems=\"baseline\",c.baseline=a.offsetTop-e.offsetTop,b.style.alignItems=\n\"flex-end\",c.height=a.offsetTop-e.offsetTop}finally{document.body.removeChild(b)}return c};$.getFocusManager$$module$build$src$core$focus_manager=function(){return FocusManager$$module$build$src$core$focus_manager.getFocusManager()};isFocusableNode$$module$build$src$core$interfaces$i_focusable_node=function(a){return a&&typeof a.getFocusableElement===\"function\"&&typeof a.getFocusableTree===\"function\"&&typeof a.onNodeFocus===\"function\"&&typeof a.onNodeBlur===\"function\"&&typeof a.canBeFocused===\"function\"};\nisSelectable$$module$build$src$core$interfaces$i_selectable=function(a){return isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(a)&&typeof a.id===\"string\"&&typeof a.workspace===\"object\"&&typeof a.select===\"function\"&&typeof a.unselect===\"function\"};\ndeepMerge$$module$build$src$core$utils$object=function(a,b){for(const c in b)b[c]!==null&&Array.isArray(b[c])?a[c]=deepMerge$$module$build$src$core$utils$object(a[c]||[],b[c]):a[c]=b[c]!==null&&typeof b[c]===\"object\"?deepMerge$$module$build$src$core$utils$object(a[c]||Object.create(null),b[c]):b[c];return a};getWorkspaceById$$module$build$src$core$common=function(a){return WorkspaceDB_$$module$build$src$core$common[a]||null};\ngetAllWorkspaces$$module$build$src$core$common=function(){const a=[];for(const b in WorkspaceDB_$$module$build$src$core$common)a.push(WorkspaceDB_$$module$build$src$core$common[b]);return a};registerWorkspace$$module$build$src$core$common=function(a){WorkspaceDB_$$module$build$src$core$common[a.id]=a};unregisterWorkpace$$module$build$src$core$common=function(a){delete WorkspaceDB_$$module$build$src$core$common[a.id]};getMainWorkspace$$module$build$src$core$common=function(){return mainWorkspace$$module$build$src$core$common};\nsetMainWorkspace$$module$build$src$core$common=function(a){mainWorkspace$$module$build$src$core$common=a};getSelected$$module$build$src$core$common=function(){const a=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode();return a&&isSelectable$$module$build$src$core$interfaces$i_selectable(a)?a:null};setSelected$$module$build$src$core$common=function(a){$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)};\nfireSelectedEvent$$module$build$src$core$common=function(a){const b=getSelected$$module$build$src$core$common();let c,d,e,f;const g=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.SELECTED))((c=b==null?void 0:b.id)!=null?c:null,(d=a==null?void 0:a.id)!=null?d:null,(f=(e=a==null?void 0:a.workspace.id)!=null?e:b==null?void 0:b.workspace.id)!=null?f:\"\");fire$$module$build$src$core$events$utils(g)};getParentContainer$$module$build$src$core$common=function(){return parentContainer$$module$build$src$core$common};\nsetParentContainer$$module$build$src$core$common=function(a){parentContainer$$module$build$src$core$common=a};\nsvgResize$$module$build$src$core$common=function(a){for(;a.options.parentWorkspace;)a=a.options.parentWorkspace;const b=a.getParentSvg(),c=a.getCachedParentSvgSize();var d=b.parentElement;if(d instanceof HTMLElement){var e=d.offsetWidth;d=d.offsetHeight;c.width!==e&&(b.setAttribute(\"width\",e+\"px\"),a.setCachedParentSvgSize(e,null));c.height!==d&&(b.setAttribute(\"height\",d+\"px\"),a.setCachedParentSvgSize(null,d));a.resize()}};\ngetBlockTypeCounts$$module$build$src$core$common=function(a,b){const c=Object.create(null),d=a.getDescendants(!0);b&&(a=a.getNextBlock())&&(a=d.indexOf(a),d.splice(a,d.length-a));for(let e=0,f;f=d[e];e++)c[f.type]?c[f.type]++:c[f.type]=1;return c};jsonInitFactory$$module$build$src$core$common=function(a){return function(){this.jsonInit(a)}};defineBlocksWithJsonArray$$module$build$src$core$common=function(a){TEST_ONLY$$module$build$src$core$common.defineBlocksWithJsonArrayInternal(a)};\ndefineBlocksWithJsonArrayInternal$$module$build$src$core$common=function(a){$.defineBlocks$$module$build$src$core$common($.createBlockDefinitionsFromJsonArray$$module$build$src$core$common(a))};\n$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common=function(a){const b={};for(let c=0;c>>/g,a),content$$module$build$src$core$css=\"\",a=document.createElement(\"style\"),a.id=\"blockly-common-style\",b=document.createTextNode(b),a.appendChild(b),document.head.insertBefore(a,document.head.firstChild)))};getSize$$module$build$src$core$utils$style=function(a){return TEST_ONLY$$module$build$src$core$utils$style.getSizeInternal(a)};\ngetSizeInternal$$module$build$src$core$utils$style=function(a){if(getComputedStyle$$module$build$src$core$utils$style(a,\"display\")!==\"none\")return getSizeWithDisplay$$module$build$src$core$utils$style(a);const b=a.style,c=b.display,d=b.visibility,e=b.position;b.visibility=\"hidden\";b.position=\"absolute\";b.display=\"inline\";const f=a.offsetWidth;a=a.offsetHeight;b.display=c;b.position=e;b.visibility=d;return new Size$$module$build$src$core$utils$size(f,a)};\ngetSizeWithDisplay$$module$build$src$core$utils$style=function(a){return new Size$$module$build$src$core$utils$size(a.offsetWidth,a.offsetHeight)};getComputedStyle$$module$build$src$core$utils$style=function(a,b){a=window.getComputedStyle(a);return a[b]||a.getPropertyValue(b)};\ngetPageOffset$$module$build$src$core$utils$style=function(a){const b=new Coordinate$$module$build$src$core$utils$coordinate(0,0);a=a.getBoundingClientRect();var c=document.documentElement;c=new Coordinate$$module$build$src$core$utils$coordinate(window.pageXOffset||c.scrollLeft,window.pageYOffset||c.scrollTop);b.x=a.left+c.x;b.y=a.top+c.y;return b};\ngetViewportPageOffset$$module$build$src$core$utils$style=function(){const a=document.body,b=document.documentElement;return new Coordinate$$module$build$src$core$utils$coordinate(a.scrollLeft||b.scrollLeft,a.scrollTop||b.scrollTop)};\ngetBorderBox$$module$build$src$core$utils$style=function(a){const b=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderLeftWidth\")),c=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderRightWidth\")),d=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderTopWidth\"));a=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderBottomWidth\"));return new Rect$$module$build$src$core$utils$rect(d,a,b,c)};\nscrollIntoContainerView$$module$build$src$core$utils$style=function(a,b,c){a=getContainerOffsetToScrollInto$$module$build$src$core$utils$style(a,b,c);b.scrollLeft=a.x;b.scrollTop=a.y};\ngetContainerOffsetToScrollInto$$module$build$src$core$utils$style=function(a,b,c){var d=getPageOffset$$module$build$src$core$utils$style(a),e=getPageOffset$$module$build$src$core$utils$style(b),f=getBorderBox$$module$build$src$core$utils$style(b);const g=d.x-e.x-f.left;d=d.y-e.y-f.top;e=getSizeWithDisplay$$module$build$src$core$utils$style(a);a=b.clientWidth-e.width;e=b.clientHeight-e.height;f=b.scrollLeft;b=b.scrollTop;c?(f+=g-a/2,b+=d-e/2):(f+=Math.min(g,Math.max(g-a,0)),b+=Math.min(d,Math.max(d-\ne,0)));return new Coordinate$$module$build$src$core$utils$coordinate(f,b)};\ngetRelativeXY$$module$build$src$core$utils$svg_math=function(a){const b=new Coordinate$$module$build$src$core$utils$coordinate(0,0);var c=a.x&&a.getAttribute(\"x\");const d=a.y&&a.getAttribute(\"y\");c&&(b.x=parseInt(c));d&&(b.y=parseInt(d));if(c=(c=a.getAttribute(\"transform\"))&&c.match(XY_REGEX$$module$build$src$core$utils$svg_math))b.x+=Number(c[1]),c[3]&&(b.y+=Number(c[3]));(a=a.getAttribute(\"style\"))&&a.includes(\"translate\")&&(a=a.match(XY_STYLE_REGEX$$module$build$src$core$utils$svg_math))&&(b.x+=\nNumber(a[1]),a[3]&&(b.y+=Number(a[3])));return b};getInjectionDivXY$$module$build$src$core$utils$svg_math=function(a){let b=0,c=0;for(;a;){const d=getRelativeXY$$module$build$src$core$utils$svg_math(a);b+=d.x;c+=d.y;if((\" \"+(a.getAttribute(\"class\")||\"\")+\" \").includes(\" injectionDiv \"))break;a=a.parentNode}return new Coordinate$$module$build$src$core$utils$coordinate(b,c)};\ngetViewportBBox$$module$build$src$core$utils$svg_math=function(){const a=getViewportPageOffset$$module$build$src$core$utils$style();return new Rect$$module$build$src$core$utils$rect(a.y,document.documentElement.clientHeight+a.y,a.x,document.documentElement.clientWidth+a.x)};getDocumentScroll$$module$build$src$core$utils$svg_math=function(){const a=document.documentElement,b=window;return new Coordinate$$module$build$src$core$utils$coordinate(b.pageXOffset||a.scrollLeft,b.pageYOffset||a.scrollTop)};\nscreenToWsCoordinates$$module$build$src$core$utils$svg_math=function(a,b){var c=b.x;b=b.y;const d=a.getInjectionDiv().getBoundingClientRect();c=new Coordinate$$module$build$src$core$utils$coordinate(c-d.left,b-d.top);b=a.getOriginOffsetInPixels();return Coordinate$$module$build$src$core$utils$coordinate.difference(c,b).scale(1/a.scale)};\nwsToScreenCoordinates$$module$build$src$core$utils$svg_math=function(a,b){var c=b.scale(a.scale);b=c.x;c=c.y;const d=a.getInjectionDiv().getBoundingClientRect();a=a.getOriginOffsetInPixels();return new Coordinate$$module$build$src$core$utils$coordinate(b+d.left+a.x,c+d.top+a.y)};\ninjectDependencies$$module$build$src$core$utils$xml=function(a){({document:document$$module$build$src$core$utils$xml=document$$module$build$src$core$utils$xml,DOMParser:DOMParser$$module$build$src$core$utils$xml=DOMParser$$module$build$src$core$utils$xml,XMLSerializer:XMLSerializer$$module$build$src$core$utils$xml=XMLSerializer$$module$build$src$core$utils$xml}=a);domParser$$module$build$src$core$utils$xml=new DOMParser$$module$build$src$core$utils$xml;xmlSerializer$$module$build$src$core$utils$xml=\nnew XMLSerializer$$module$build$src$core$utils$xml};$.createElement$$module$build$src$core$utils$xml=function(a){return document$$module$build$src$core$utils$xml.createElementNS(NAME_SPACE$$module$build$src$core$utils$xml,a)};$.createTextNode$$module$build$src$core$utils$xml=function(a){return document$$module$build$src$core$utils$xml.createTextNode(a)};\n$.textToDom$$module$build$src$core$utils$xml=function(a){let b=domParser$$module$build$src$core$utils$xml.parseFromString(a,\"text/xml\");if(b&&b.documentElement&&!b.getElementsByTagName(\"parsererror\").length)return b.documentElement;if((b=domParser$$module$build$src$core$utils$xml.parseFromString(a,\"text/html\"))&&b.body.firstChild&&b.body.firstChild.nodeName.toLowerCase()===\"xml\")return b.body.firstChild;throw Error(`DOMParser was unable to parse: ${a}`);};\ndomToText$$module$build$src$core$utils$xml=function(a){return sanitizeText$$module$build$src$core$utils$xml(xmlSerializer$$module$build$src$core$utils$xml.serializeToString(a))};sanitizeText$$module$build$src$core$utils$xml=function(a){return a.replace(INVALID_CONTROL_CHARS$$module$build$src$core$utils$xml,b=>`&#${b.charCodeAt(0)};`)};\nconvertToolboxDefToJson$$module$build$src$core$utils$toolbox=function(a){if(!a)return null;if(a instanceof Element||typeof a===\"string\")a=parseToolboxTree$$module$build$src$core$utils$toolbox(a),a=convertToToolboxJson$$module$build$src$core$utils$toolbox(a);validateToolbox$$module$build$src$core$utils$toolbox(a);return a};\nvalidateToolbox$$module$build$src$core$utils$toolbox=function(a){const b=a.kind;a=a.contents;if(b&&b!==FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox&&b!==CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox)throw Error(\"Invalid toolbox kind \"+b+\". Please supply either \"+FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox+\" or \"+CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox);if(!a)throw Error(\"Toolbox must have a contents attribute.\");};\nconvertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox=function(a){return a?a.contents?a.contents:Array.isArray(a)&&a.length>0&&!a[0].nodeType?a:xmlToJsonArray$$module$build$src$core$utils$toolbox(a):[]};hasCategories$$module$build$src$core$utils$toolbox=function(a){return TEST_ONLY$$module$build$src$core$utils$toolbox.hasCategoriesInternal(a)};\nhasCategoriesInternal$$module$build$src$core$utils$toolbox=function(a){if(!a)return!1;const b=a.kind;return b?b===CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox:!!a.contents.filter(c=>c.kind.toUpperCase()===\"CATEGORY\").length};isCategoryCollapsible$$module$build$src$core$utils$toolbox=function(a){return a&&a.contents?!!a.contents.filter(function(b){return b.kind.toUpperCase()===\"CATEGORY\"}).length:!1};\nconvertToToolboxJson$$module$build$src$core$utils$toolbox=function(a){const b={contents:xmlToJsonArray$$module$build$src$core$utils$toolbox(a)};a instanceof Node&&addAttributes$$module$build$src$core$utils$toolbox(a,b);return b};\nxmlToJsonArray$$module$build$src$core$utils$toolbox=function(a){const b=[];let c=a.childNodes;c||(c=a);for(let d=0,e;e=c[d];d++){if(!e.tagName)continue;a={};const f=e.tagName.toUpperCase();a.kind=f;f===\"BLOCK\"?a.blockxml=e:e.childNodes&&e.childNodes.length>0&&(a.contents=xmlToJsonArray$$module$build$src$core$utils$toolbox(e));addAttributes$$module$build$src$core$utils$toolbox(e,a);b.push(a)}return b};\naddAttributes$$module$build$src$core$utils$toolbox=function(a,b){for(let c=0;c document.\");}else a instanceof Element&&(b=a);return b};\ngetStartPositionRect$$module$build$src$core$positionable_helpers=function(a,b,c,d,e,f){const g=f.scrollbar&&f.scrollbar.canScrollVertically();a.horizontal===horizontalPosition$$module$build$src$core$positionable_helpers.LEFT?(c=e.absoluteMetrics.left+c,g&&f.RTL&&(c+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness)):(c=e.absoluteMetrics.left+e.viewMetrics.width-b.width-c,g&&!f.RTL&&(c-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness));a.vertical===verticalPosition$$module$build$src$core$positionable_helpers.TOP?\na=e.absoluteMetrics.top+d:(a=e.absoluteMetrics.top+e.viewMetrics.height-b.height-d,f.scrollbar&&f.scrollbar.canScrollHorizontally()&&(a-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness));return new Rect$$module$build$src$core$utils$rect(a,a+b.height,c,c+b.width)};\ngetCornerOppositeToolbox$$module$build$src$core$positionable_helpers=function(a,b){return{horizontal:b.toolboxMetrics.position===Position$$module$build$src$core$utils$toolbox.LEFT||a.horizontalLayout&&!a.RTL?horizontalPosition$$module$build$src$core$positionable_helpers.RIGHT:horizontalPosition$$module$build$src$core$positionable_helpers.LEFT,vertical:b.toolboxMetrics.position===Position$$module$build$src$core$utils$toolbox.BOTTOM?verticalPosition$$module$build$src$core$positionable_helpers.TOP:verticalPosition$$module$build$src$core$positionable_helpers.BOTTOM}};\nbumpPositionRect$$module$build$src$core$positionable_helpers=function(a,b,c,d){const e=a.left,f=a.right-a.left,g=a.bottom-a.top;for(let h=0;hf.id!==a.id).map(f=>f.getRelativeToSurfaceXY());for(;commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster(Coordinate$$module$build$src$core$utils$coordinate.sum(c,d),e);)d.translate(b.RTL?-30:30,30);a.moveTo(Coordinate$$module$build$src$core$utils$coordinate.sum(c,\nd))};commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster=function(a,b){return b.some(c=>Math.abs(c.x-a.x)<=1&&Math.abs(c.y-a.y)<=1)};setRole$$module$build$src$core$utils$aria=function(a,b){a.setAttribute(ROLE_ATTRIBUTE$$module$build$src$core$utils$aria,b)};setState$$module$build$src$core$utils$aria=function(a,b,c){Array.isArray(c)&&(c=c.join(\" \"));a.setAttribute(ARIA_PREFIX$$module$build$src$core$utils$aria+b,`${c}`)};\nisSerializable$$module$build$src$core$interfaces$i_serializable=function(a){return a&&typeof a.saveState===\"function\"&&typeof a.loadState===\"function\"};\nqueueRender$$module$build$src$core$render_management=function(a){queueBlock$$module$build$src$core$render_management(a);if(alwaysImmediatelyRender$$module$build$src$core$render_management())return doRenders$$module$build$src$core$render_management(),Promise.resolve();afterRendersPromise$$module$build$src$core$render_management||(afterRendersPromise$$module$build$src$core$render_management=new Promise(b=>{afterRendersResolver$$module$build$src$core$render_management=b;animationRequestId$$module$build$src$core$render_management=\nwindow.requestAnimationFrame(()=>{doRenders$$module$build$src$core$render_management();b()})}));return afterRendersPromise$$module$build$src$core$render_management};finishQueuedRenders$$module$build$src$core$render_management=function(){return afterRendersPromise$$module$build$src$core$render_management?afterRendersPromise$$module$build$src$core$render_management:Promise.resolve()};\ntriggerQueuedRenders$$module$build$src$core$render_management=function(a){a||window.cancelAnimationFrame(animationRequestId$$module$build$src$core$render_management);doRenders$$module$build$src$core$render_management(a);!a&&afterRendersResolver$$module$build$src$core$render_management&&afterRendersResolver$$module$build$src$core$render_management()};alwaysImmediatelyRender$$module$build$src$core$render_management=function(){return JavaFx$$module$build$src$core$utils$useragent};\nqueueBlock$$module$build$src$core$render_management=function(a){dirtyBlocks$$module$build$src$core$render_management.add(a);eventGroups$$module$build$src$core$render_management.set(a,$.getGroup$$module$build$src$core$events$utils());const b=a.getParent();b?queueBlock$$module$build$src$core$render_management(b):rootBlocks$$module$build$src$core$render_management.add(a)};\ndoRenders$$module$build$src$core$render_management=function(a){const b=a?new Set([a]):new Set([...rootBlocks$$module$build$src$core$render_management].map(f=>f.workspace)),c=[...rootBlocks$$module$build$src$core$render_management].filter(shouldRenderRootBlock$$module$build$src$core$render_management).filter(f=>b.has(f.workspace));for(var d of c)renderBlock$$module$build$src$core$render_management(d);for(const f of b)f.resizeContents();for(var e of c)d=e.getRelativeToSurfaceXY(),e.updateComponentLocations(d);\nfor(const f of c)e=$.getGroup$$module$build$src$core$events$utils(),(d=eventGroups$$module$build$src$core$render_management.get(f))&&$.setGroup$$module$build$src$core$events$utils(d),f.bumpNeighbours(),$.setGroup$$module$build$src$core$events$utils(e);for(const f of c)dequeueBlock$$module$build$src$core$render_management(f);a||(afterRendersPromise$$module$build$src$core$render_management=null)};\ndequeueBlock$$module$build$src$core$render_management=function(a){rootBlocks$$module$build$src$core$render_management.delete(a);dirtyBlocks$$module$build$src$core$render_management.delete(a);eventGroups$$module$build$src$core$render_management.delete(a);for(const b of a.getChildren(!1))dequeueBlock$$module$build$src$core$render_management(b)};shouldRenderRootBlock$$module$build$src$core$render_management=function(a){return!a.isDisposed()&&!a.getParent()};\nrenderBlock$$module$build$src$core$render_management=function(a){if(dirtyBlocks$$module$build$src$core$render_management.has(a)&&a.initialized){for(const b of a.getChildren(!1))renderBlock$$module$build$src$core$render_management(b);a.renderEfficiently()}};alert$$module$build$src$core$dialog=function(a,b){alertImplementation$$module$build$src$core$dialog(a,b)};\nsetAlert$$module$build$src$core$dialog=function(a=defaultAlert$$module$build$src$core$dialog){alertImplementation$$module$build$src$core$dialog=a};confirm$$module$build$src$core$dialog=function(a,b){confirmImplementation$$module$build$src$core$dialog(a,b)};setConfirm$$module$build$src$core$dialog=function(a=defaultConfirm$$module$build$src$core$dialog){confirmImplementation$$module$build$src$core$dialog=a};\nprompt$$module$build$src$core$dialog=function(a,b,c){promptImplementation$$module$build$src$core$dialog(a,b,c)};setPrompt$$module$build$src$core$dialog=function(a=defaultPrompt$$module$build$src$core$dialog){promptImplementation$$module$build$src$core$dialog=a};toast$$module$build$src$core$dialog=function(a,b){toastImplementation$$module$build$src$core$dialog(a,b)};\nsetToast$$module$build$src$core$dialog=function(a=defaultToast$$module$build$src$core$dialog){toastImplementation$$module$build$src$core$dialog=a};isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks=function(a){return a&&typeof a.getProcedureDef===\"function\"};isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks=function(a){return a&&typeof a.getProcedureCall===\"function\"&&typeof a.renameProcedure===\"function\"};\nisVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model=function(a){return a.getVariableModel!==void 0};warn$$module$build$src$core$utils$deprecation=function(a,b,c,d){a=a+\" was deprecated in \"+b+\" and will be deleted in \"+c+\".\";d&&(a+=\"\\nUse \"+d+\" instead.\");previousWarnings$$module$build$src$core$utils$deprecation.has(a)||(previousWarnings$$module$build$src$core$utils$deprecation.add(a),console.warn(a))};\n$.allUsedVarModels$$module$build$src$core$variables=function(a){a=a.getAllBlocks(!1);const b=new Set;for(let c=0;c({kind:\"block\",type:d,gap:8,fields:generateVariableFieldJson$$module$build$src$core$variables(g)})));return a};\nxmlFlyoutCategory$$module$build$src$core$variables=function(a){let b=[];const c=document.createElement(\"button\");c.setAttribute(\"text\",\"%{BKY_NEW_VARIABLE}\");c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE\");a.registerButtonCallback(\"CREATE_VARIABLE\",function(d){createVariableButtonHandler$$module$build$src$core$variables(d.getTargetWorkspace())});b.push(c);a=flyoutCategoryBlocks$$module$build$src$core$variables(a);return b=b.concat(a)};\nflyoutCategoryBlocks$$module$build$src$core$variables=function(a){a=a.getVariableMap().getVariablesOfType(\"\");const b=[];if(a.length>0){var c=a[a.length-1];if(Blocks$$module$build$src$core$blocks.variables_set){var d=$.createElement$$module$build$src$core$utils$xml(\"block\");d.setAttribute(\"type\",\"variables_set\");d.setAttribute(\"gap\",Blocks$$module$build$src$core$blocks.math_change?\"8\":\"24\");d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c));b.push(d)}Blocks$$module$build$src$core$blocks.math_change&&\n(d=$.createElement$$module$build$src$core$utils$xml(\"block\"),d.setAttribute(\"type\",\"math_change\"),d.setAttribute(\"gap\",Blocks$$module$build$src$core$blocks.variables_get?\"20\":\"8\"),d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c)),c=$.textToDom$$module$build$src$core$utils$xml('1'),d.appendChild(c),b.push(d));if(Blocks$$module$build$src$core$blocks.variables_get){a.sort(compareByName$$module$build$src$core$variables);\nfor(let e=0,f;f=a[e];e++)c=$.createElement$$module$build$src$core$utils$xml(\"block\"),c.setAttribute(\"type\",\"variables_get\"),c.setAttribute(\"gap\",\"8\"),c.appendChild(generateVariableFieldDom$$module$build$src$core$variables(f)),b.push(c)}}return b};generateUniqueName$$module$build$src$core$variables=function(a){return TEST_ONLY$$module$build$src$core$variables.generateUniqueNameInternal(a)};\ngenerateUniqueNameInternal$$module$build$src$core$variables=function(a){return generateUniqueNameFromOptions$$module$build$src$core$variables(VAR_LETTER_OPTIONS$$module$build$src$core$variables.charAt(0),a.getVariableMap().getAllVariables().map(b=>b.getName()))};\ngenerateUniqueNameFromOptions$$module$build$src$core$variables=function(a,b){if(!b.length)return a;const c=VAR_LETTER_OPTIONS$$module$build$src$core$variables;let d=\"\",e=c.indexOf(a);for(;;){let f=!1;for(let g=0;gf.getVariableModel().getName());if(d&&(c=d.some(f=>f.toLowerCase()===a),d=d.some(f=>f.toLowerCase()===b),c&&d))return e.getName()}return null};\ncheckForConflictingParamWithLegacyProcedures$$module$build$src$core$variables=function(a,b,c){a=a.toLowerCase();b=b.toLowerCase();c=c.getAllBlocks(!1);for(const e of c){if(!isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(e))continue;c=e.getProcedureDef();var d=c[1];const f=d.some(g=>g.toLowerCase()===a);d=d.some(g=>g.toLowerCase()===b);if(f&&d)return c[0]}return null};\ngenerateVariableFieldDom$$module$build$src$core$variables=function(a){const b=$.createElement$$module$build$src$core$utils$xml(\"field\");b.setAttribute(\"name\",\"VAR\");b.setAttribute(\"id\",a.getId());b.setAttribute(\"variabletype\",a.getType());a=$.createTextNode$$module$build$src$core$utils$xml(a.getName());b.appendChild(a);return b};\n$.getOrCreateVariablePackage$$module$build$src$core$variables=function(a,b,c,d){let e=$.getVariable$$module$build$src$core$variables(a,b,c,d);e||(e=createVariable$$module$build$src$core$variables(a,b,c,d));return e};\n$.getVariable$$module$build$src$core$variables=function(a,b,c,d){const e=a.getPotentialVariableMap();let f=null;if(b&&(f=a.getVariableById(b),!f&&e&&(f=e.getVariableById(b)),f))return f;if(c){if(d===void 0)throw Error(\"Tried to look up a variable by name without a type\");f=a.getVariable(c,d);!f&&e&&(f=e.getVariable(c,d))}return f};\ncreateVariable$$module$build$src$core$variables=function(a,b,c,d){const e=a.getVariableMap(),f=a.getPotentialVariableMap();c||(c=generateUniqueName$$module$build$src$core$variables(a.isFlyout?a.targetWorkspace:a));return f?f.createVariable(c,d,b!=null?b:void 0):e.createVariable(c,d,b)};getAddedVariables$$module$build$src$core$variables=function(a,b){a=a.getAllVariables();const c=[];if(b.length!==a.length)for(let d=0;d=0;f--){const g=e[f];if(g.type===\"procedures_defnoreturn\"||g.type===\"procedures_defreturn\"){c=String(g.getFieldValue(\"NAME\"));d=$.Msg$$module$build$src$core$msg.CANNOT_DELETE_VARIABLE_PROCEDURE.replace(\"%1\",d).replace(\"%2\",c);alert$$module$build$src$core$dialog(d);return}g===c&&e.splice(f,1)}c&&e.length||e.length>1?(d=\n$.Msg$$module$build$src$core$msg.DELETE_VARIABLE_CONFIRMATION.replace(\"%1\",String(e.length+(c&&!c.workspace.isFlyout?1:0))).replace(\"%2\",d),confirm$$module$build$src$core$dialog(d,f=>{f&&b&&a.getVariableMap().deleteVariable(b)})):a.getVariableMap().deleteVariable(b)};\nsave$$module$build$src$core$serialization$blocks=function(a,{addCoordinates:b=!1,addInputBlocks:c=!0,addNextBlocks:d=!0,doFullSerialization:e=!0,saveIds:f=!0}={}){if(a.isInsertionMarker())return null;const g={type:a.type,id:f?a.id:void 0};b&&saveCoords$$module$build$src$core$serialization$blocks(a,g);saveAttributes$$module$build$src$core$serialization$blocks(a,g);saveExtraState$$module$build$src$core$serialization$blocks(a,g,e);saveIcons$$module$build$src$core$serialization$blocks(a,g,e);saveFields$$module$build$src$core$serialization$blocks(a,\ng,e);c&&saveInputBlocks$$module$build$src$core$serialization$blocks(a,g,e,f);d&&saveNextBlocks$$module$build$src$core$serialization$blocks(a,g,e,f);return g};\nsaveAttributes$$module$build$src$core$serialization$blocks=function(a,b){a.isCollapsed()&&(b.collapsed=!0);a.isEnabled()||(b.disabledReasons=Array.from(a.getDisabledReasons()));a.isOwnDeletable()||(b.deletable=!1);a.isOwnMovable()||(b.movable=!1);a.isOwnEditable()||(b.editable=!1);a.inputsInline!==void 0&&a.inputsInline!==a.inputsInlineDefault&&(b.inline=a.inputsInline);a.data&&(b.data=a.data)};\nsaveCoords$$module$build$src$core$serialization$blocks=function(a,b){const c=a.workspace;a=a.getRelativeToSurfaceXY();b.x=Math.round(c.RTL?c.getWidth()-a.x:a.x);b.y=Math.round(a.y)};saveExtraState$$module$build$src$core$serialization$blocks=function(a,b,c){a.saveExtraState?(a=a.saveExtraState(c),a!==null&&(b.extraState=a)):a.mutationToDom&&(a=a.mutationToDom(),a!==null&&(b.extraState=domToText$$module$build$src$core$xml(a).replace(' xmlns=\"https://developers.google.com/blockly/xml\"',\"\")))};\nsaveIcons$$module$build$src$core$serialization$blocks=function(a,b,c){const d=Object.create(null);for(const e of a.getIcons())isSerializable$$module$build$src$core$interfaces$i_serializable(e)&&(a=e.saveState(c))&&(d[e.getType().toString()]=a);Object.keys(d).length&&(b.icons=d)};saveFields$$module$build$src$core$serialization$blocks=function(a,b,c){const d=Object.create(null);for(const e of a.getFields())e.isSerializable()&&(d[e.name]=e.saveState(c));Object.keys(d).length&&(b.fields=d)};\nsaveInputBlocks$$module$build$src$core$serialization$blocks=function(a,b,c,d){const e=Object.create(null);for(let f=0;f{k.disposed||k.setConnectionTracking(!0)},\n1)}return h};\nappendPrivate$$module$build$src$core$serialization$blocks=function(a,b,{parentConnection:c,isShadow:d=!1}={}){if(!a.type)throw new MissingBlockType$$module$build$src$core$serialization$exceptions(a);const e=b.newBlock(a.type,a.id);e.setShadow(d);loadCoords$$module$build$src$core$serialization$blocks(e,a);loadAttributes$$module$build$src$core$serialization$blocks(e,a);loadExtraState$$module$build$src$core$serialization$blocks(e,a);tryToConnectParent$$module$build$src$core$serialization$blocks(c,e,\na);loadIcons$$module$build$src$core$serialization$blocks(e,a);loadFields$$module$build$src$core$serialization$blocks(e,a);loadInputBlocks$$module$build$src$core$serialization$blocks(e,a);loadNextBlocks$$module$build$src$core$serialization$blocks(e,a);initBlock$$module$build$src$core$serialization$blocks(e,b.rendered);return e};\ncheckNewVariables$$module$build$src$core$serialization$blocks=function(a,b){if(isEnabled$$module$build$src$core$events$utils())for(a=getAddedVariables$$module$build$src$core$variables(a,b),b=0;bb&&(b=c[d].length);var e=-Infinity;let f,g=1;do{d=e;f=a;a=[];e=c.length/g;let h=1;for(let k=0;kd);return f};\nwrapScore$$module$build$src$core$utils$string=function(a,b,c){const d=[0],e=[];for(var f=0;f1&&d[d.length-1]<=d[d.length-2]&&(b+=.5);return b};\nwrapMutate$$module$build$src$core$utils$string=function(a,b,c){let d=wrapScore$$module$build$src$core$utils$string(a,b,c),e;for(let f=0;fd&&(d=h,e=g)}return e?wrapMutate$$module$build$src$core$utils$string(a,e,c):b};\nwrapToText$$module$build$src$core$utils$string=function(a,b){const c=[];for(let d=0;dRADIUS_OK$$module$build$src$core$tooltip&&hide$$module$build$src$core$tooltip()}else poisonedElement$$module$build$src$core$tooltip!==element$$module$build$src$core$tooltip&&\n(clearTimeout(showPid$$module$build$src$core$tooltip),lastX$$module$build$src$core$tooltip=a.pageX,lastY$$module$build$src$core$tooltip=a.pageY,showPid$$module$build$src$core$tooltip=setTimeout(show$$module$build$src$core$tooltip,HOVER_MS$$module$build$src$core$tooltip))};dispose$$module$build$src$core$tooltip=function(){poisonedElement$$module$build$src$core$tooltip=element$$module$build$src$core$tooltip=null;hide$$module$build$src$core$tooltip()};\nhide$$module$build$src$core$tooltip=function(){visible$$module$build$src$core$tooltip&&(visible$$module$build$src$core$tooltip=!1,containerDiv$$module$build$src$core$tooltip&&(containerDiv$$module$build$src$core$tooltip.style.display=\"none\"));showPid$$module$build$src$core$tooltip&&(clearTimeout(showPid$$module$build$src$core$tooltip),showPid$$module$build$src$core$tooltip=0)};\nblock$$module$build$src$core$tooltip=function(){hide$$module$build$src$core$tooltip();blocked$$module$build$src$core$tooltip=!0};unblock$$module$build$src$core$tooltip=function(){blocked$$module$build$src$core$tooltip=!1};\nrenderContent$$module$build$src$core$tooltip=function(){containerDiv$$module$build$src$core$tooltip&&element$$module$build$src$core$tooltip&&(typeof customTooltip$$module$build$src$core$tooltip===\"function\"?customTooltip$$module$build$src$core$tooltip(containerDiv$$module$build$src$core$tooltip,element$$module$build$src$core$tooltip):renderDefaultContent$$module$build$src$core$tooltip())};\nrenderDefaultContent$$module$build$src$core$tooltip=function(){var a=getTooltipOfObject$$module$build$src$core$tooltip(element$$module$build$src$core$tooltip);a=$.wrap$$module$build$src$core$utils$string(a,LIMIT$$module$build$src$core$tooltip);a=a.split(\"\\n\");for(let b=0;bc+window.scrollY&&(e-=containerDiv$$module$build$src$core$tooltip.offsetHeight+\n2*OFFSET_Y$$module$build$src$core$tooltip);a?d=Math.max(MARGINS$$module$build$src$core$tooltip-window.scrollX,d):d+containerDiv$$module$build$src$core$tooltip.offsetWidth>b+window.scrollX-2*MARGINS$$module$build$src$core$tooltip&&(d=b-containerDiv$$module$build$src$core$tooltip.offsetWidth-2*MARGINS$$module$build$src$core$tooltip);return{x:d,y:e}};\nshow$$module$build$src$core$tooltip=function(){if(!blocked$$module$build$src$core$tooltip&&(poisonedElement$$module$build$src$core$tooltip=element$$module$build$src$core$tooltip,containerDiv$$module$build$src$core$tooltip)){containerDiv$$module$build$src$core$tooltip.textContent=\"\";renderContent$$module$build$src$core$tooltip();var a=element$$module$build$src$core$tooltip.RTL;containerDiv$$module$build$src$core$tooltip.style.direction=a?\"rtl\":\"ltr\";containerDiv$$module$build$src$core$tooltip.style.display=\n\"block\";visible$$module$build$src$core$tooltip=!0;var {x:b,y:c}=getPosition$$module$build$src$core$tooltip(a);containerDiv$$module$build$src$core$tooltip.style.left=b+\"px\";containerDiv$$module$build$src$core$tooltip.style.top=c+\"px\"}};getHsvSaturation$$module$build$src$core$utils$colour=function(){return hsvSaturation$$module$build$src$core$utils$colour};setHsvSaturation$$module$build$src$core$utils$colour=function(a){hsvSaturation$$module$build$src$core$utils$colour=a};\ngetHsvValue$$module$build$src$core$utils$colour=function(){return hsvValue$$module$build$src$core$utils$colour};setHsvValue$$module$build$src$core$utils$colour=function(a){hsvValue$$module$build$src$core$utils$colour=a};\nparse$$module$build$src$core$utils$colour=function(a){a=`${a}`.toLowerCase().trim();var b=names$$module$build$src$core$utils$colour[a];if(b)return b;b=a.substring(0,2)===\"0x\"?\"#\"+a.substring(2):a;b=b[0]===\"#\"?b:\"#\"+b;if(/^#[0-9a-f]{6}$/.test(b))return b;if(/^#[0-9a-f]{3}$/.test(b))return[\"#\",b[1],b[1],b[2],b[2],b[3],b[3]].join(\"\");var c=a.match(/^(?:rgb)?\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/);return c&&(a=Number(c[1]),b=Number(c[2]),c=Number(c[3]),a>=0&&a<256&&b>=0&&b<256&&c>=0&&c<256)?rgbToHex$$module$build$src$core$utils$colour(a,\nb,c):null};rgbToHex$$module$build$src$core$utils$colour=function(a,b,c){b=a<<16|b<<8|c;return a<16?\"#\"+(16777216|b).toString(16).substr(1):\"#\"+b.toString(16)};hexToRgb$$module$build$src$core$utils$colour=function(a){a=parse$$module$build$src$core$utils$colour(a);if(!a)return[0,0,0];a=parseInt(a.substr(1),16);return[a>>16,a>>8&255,a&255]};\nhsvToHex$$module$build$src$core$utils$colour=function(a,b,c){let d=0,e=0,f=0;if(b===0)f=e=d=c;else{const g=Math.floor(a/60),h=a/60-g;a=c*(1-b);const k=c*(1-b*h);b=c*(1-b*(1-h));switch(g){case 1:d=k;e=c;f=a;break;case 2:d=a;e=c;f=b;break;case 3:d=a;e=k;f=c;break;case 4:d=b;e=a;f=c;break;case 5:d=c;e=a;f=k;break;case 6:case 0:d=c,e=b,f=a}}return rgbToHex$$module$build$src$core$utils$colour(Math.floor(d),Math.floor(e),Math.floor(f))};\nblend$$module$build$src$core$utils$colour=function(a,b,c){a=parse$$module$build$src$core$utils$colour(a);if(!a)return null;b=parse$$module$build$src$core$utils$colour(b);if(!b)return null;a=hexToRgb$$module$build$src$core$utils$colour(a);b=hexToRgb$$module$build$src$core$utils$colour(b);return rgbToHex$$module$build$src$core$utils$colour(Math.round(b[0]+c*(a[0]-b[0])),Math.round(b[1]+c*(a[1]-b[1])),Math.round(b[2]+c*(a[2]-b[2])))};\nhueToHex$$module$build$src$core$utils$colour=function(a){return hsvToHex$$module$build$src$core$utils$colour(a,hsvSaturation$$module$build$src$core$utils$colour,hsvValue$$module$build$src$core$utils$colour*255)};\ntokenizeInterpolationInternal$$module$build$src$core$utils$parsing=function(a,b,c){const d=[];var e=a.split(\"\");e.push(\"\");var f=0;a=[];let g=null;for(let l=0;l=a.bottom?b.top-c.height:b.bottom};isRepositionable$$module$build$src$core$widgetdiv=function(a){return!(a==null||!a.repositionForWindowResize)};repositionForWindowResize$$module$build$src$core$widgetdiv=function(){isRepositionable$$module$build$src$core$widgetdiv(owner$$module$build$src$core$widgetdiv)&&owner$$module$build$src$core$widgetdiv.repositionForWindowResize()||hide$$module$build$src$core$widgetdiv()};\ngetCurrentBlock$$module$build$src$core$contextmenu=function(){return currentBlock$$module$build$src$core$contextmenu};setCurrentBlock$$module$build$src$core$contextmenu=function(a){currentBlock$$module$build$src$core$contextmenu=a};\nshow$$module$build$src$core$contextmenu=function(a,b,c,d,e){show$$module$build$src$core$widgetdiv(dummyOwner$$module$build$src$core$contextmenu,c,dispose$$module$build$src$core$contextmenu,d);if(b.length){e||(a instanceof PointerEvent?e=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):(console.warn(\"Context menu opened with keyboard but no location given\"),e=new Coordinate$$module$build$src$core$utils$coordinate(0,0)));var f=populate_$$module$build$src$core$contextmenu(b,\nc,a,e);menu_$$module$build$src$core$contextmenu=f;position_$$module$build$src$core$contextmenu(f,c,e);setTimeout(function(){f.focus()},1);currentBlock$$module$build$src$core$contextmenu=null}else hide$$module$build$src$core$contextmenu()};\npopulate_$$module$build$src$core$contextmenu=function(a,b,c,d){const e=new Menu$$module$build$src$core$menu;e.setRole(Role$$module$build$src$core$utils$aria.MENU);for(let f=0;f{setTimeout(()=>{g.callback(g.scope,c,l,d)},0)})},{})}return e};\nposition_$$module$build$src$core$contextmenu=function(a,b,c){const d=getViewportBBox$$module$build$src$core$utils$svg_math();c=new Rect$$module$build$src$core$utils$rect(c.y+d.top,c.y+d.top,c.x+d.left,c.x+d.left);createWidget_$$module$build$src$core$contextmenu(a);const e=a.getSize();b&&(c.left+=e.width,c.right+=e.width,d.left+=e.width,d.right+=e.width);positionWithAnchor$$module$build$src$core$widgetdiv(d,c,e,b);a.focus()};\ncreateWidget_$$module$build$src$core$contextmenu=function(a){var b=getDiv$$module$build$src$core$widgetdiv();if(!b)throw Error(\"Attempting to create a context menu when widget div is null\");b=a.render(b);addClass$$module$build$src$core$utils$dom(b,\"blocklyContextMenu\");conditionalBind$$module$build$src$core$browser_events(b,\"contextmenu\",null,haltPropagation$$module$build$src$core$contextmenu);a.focus()};haltPropagation$$module$build$src$core$contextmenu=function(a){a.preventDefault();a.stopPropagation()};\nhide$$module$build$src$core$contextmenu=function(){hideIfOwner$$module$build$src$core$widgetdiv(dummyOwner$$module$build$src$core$contextmenu);currentBlock$$module$build$src$core$contextmenu=null};dispose$$module$build$src$core$contextmenu=function(){menu_$$module$build$src$core$contextmenu&&(menu_$$module$build$src$core$contextmenu.dispose(),menu_$$module$build$src$core$contextmenu=null)};\n$.callbackFactory$$module$build$src$core$contextmenu=function(a,b){return()=>{$.disable$$module$build$src$core$events$utils();let c;try{c=b instanceof Element?domToBlockInternal$$module$build$src$core$xml(b,a.workspace):appendInternal$$module$build$src$core$serialization$blocks(b,a.workspace);const d=a.getRelativeToSurfaceXY();d.x=a.RTL?d.x-$.config$$module$build$src$core$config.snapRadius:d.x+$.config$$module$build$src$core$config.snapRadius;d.y+=$.config$$module$build$src$core$config.snapRadius*\n2;c.moveBy(d.x,d.y)}finally{$.enable$$module$build$src$core$events$utils()}isEnabled$$module$build$src$core$events$utils()&&!c.isShadow()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(c));$.getFocusManager$$module$build$src$core$focus_manager().focusNode(c);return c}};\nmouseToWorkspacePoint$$module$build$src$core$utils$drag=function(a,b){b=mouseToSvg$$module$build$src$core$browser_events(b,a.getParentSvg(),a.getInverseScreenCTM());b.x/=a.scale;b.y/=a.scale;return b};start$$module$build$src$core$utils$drag=function(a,b,c){b=mouseToWorkspacePoint$$module$build$src$core$utils$drag(a,b);workspaceToDragDelta$$module$build$src$core$utils$drag.set(a,Coordinate$$module$build$src$core$utils$coordinate.difference(c,b))};\nmove$$module$build$src$core$utils$drag=function(a,b){b=mouseToWorkspacePoint$$module$build$src$core$utils$drag(a,b);a=workspaceToDragDelta$$module$build$src$core$utils$drag.get(a);if(!a)throw Error(\"Drag not initialized\");return Coordinate$$module$build$src$core$utils$coordinate.sum(a,b)};\nworkspaceToDom$$module$build$src$core$xml=function(a,b=!1){const c=$.createElement$$module$build$src$core$utils$xml(\"xml\");var d=variablesToDom$$module$build$src$core$xml($.allUsedVarModels$$module$build$src$core$variables(a));d.hasChildNodes()&&c.appendChild(d);for(const e of a.getTopComments())c.appendChild(saveWorkspaceComment$$module$build$src$core$xml(e,b));a=a.getTopBlocks(!0);for(d=0;d/g,\"<$1$2>\")};\ndomToPrettyText$$module$build$src$core$xml=function(a){a=domToText$$module$build$src$core$xml(a).split(\"<\");let b=\"\";for(let c=1;c\"&&(b+=\" \")}a=a.join(\"\\n\");a=a.replace(/(<(\\w+)\\b[^>]*>[^\\n]*)\\n *<\\/\\2>/g,\"$1\");return a.replace(/^\\n/,\"\")};\nclearWorkspaceAndLoadFromXml$$module$build$src$core$xml=function(a,b){b.setResizesEnabled(!1);b.clear();a=$.domToWorkspace$$module$build$src$core$xml(a,b);b.setResizesEnabled(!0);return a};\n$.domToWorkspace$$module$build$src$core$xml=function(a,b){let c=0;b.RTL&&(c=b.getWidth());const d=[];startTextWidthCache$$module$build$src$core$utils$dom();const e=$.getGroup$$module$build$src$core$events$utils();e||$.setGroup$$module$build$src$core$events$utils(!0);b.setResizesEnabled&&b.setResizesEnabled(!1);let f=!0;try{for(let g=0,h;h=a.childNodes[g];g++){const k=h.nodeName.toLowerCase(),l=h;if(k===\"block\"||k===\"shadow\"&&!getRecordUndo$$module$build$src$core$events$utils()){const m=domToBlockInternal$$module$build$src$core$xml(l,\nb);d.push(m.id);let n;const p=parseInt((n=l.getAttribute(\"x\"))!=null?n:\"10\",10);let r;const q=parseInt((r=l.getAttribute(\"y\"))!=null?r:\"10\",10);isNaN(p)||isNaN(q)||m.moveBy(b.RTL?c-p:p,q,[\"create\"]);f=!1}else{if(k===\"shadow\")throw TypeError(\"Shadow block cannot be a top-level block.\");if(k===\"comment\")loadWorkspaceComment$$module$build$src$core$xml(l,b);else if(k===\"variables\"){if(f)domToVariables$$module$build$src$core$xml(l,b);else throw Error(\"'variables' tag must exist once before block and shadow tag elements in the workspace XML, but it was found in another location.\");\nf=!1}}}}finally{$.setGroup$$module$build$src$core$events$utils(e),b.setResizesEnabled&&b.setResizesEnabled(!0),b.rendered&&triggerQueuedRenders$$module$build$src$core$render_management(),stopTextWidthCache$$module$build$src$core$utils$dom()}fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.FINISHED_LOADING))(b));return d};\nloadWorkspaceComment$$module$build$src$core$xml=function(a,b){var c;const d=(c=a.getAttribute(\"id\"))!=null?c:void 0;c=b.rendered?new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(b,d):new WorkspaceComment$$module$build$src$core$comments$workspace_comment(b,d);var e;c.setText((e=a.textContent)!=null?e:\"\");var f;e=parseInt((f=a.getAttribute(\"x\"))!=null?f:\"\",10);let g;f=parseInt((g=a.getAttribute(\"y\"))!=null?g:\"\",10);isNaN(e)||isNaN(f)||(e=b.RTL?b.getWidth()-e:e,\nc.moveTo(new Coordinate$$module$build$src$core$utils$coordinate(e,f)));var h;b=parseInt((h=a.getAttribute(\"w\"))!=null?h:\"\",10);let k;h=parseInt((k=a.getAttribute(\"h\"))!=null?k:\"\",10);isNaN(b)||isNaN(h)||c.setSize(new Size$$module$build$src$core$utils$size(b,h));a.getAttribute(\"collapsed\")===\"true\"&&c.setCollapsed(!0);a.getAttribute(\"editable\")===\"false\"&&c.setEditable(!1);a.getAttribute(\"movable\")===\"false\"&&c.setMovable(!1);a.getAttribute(\"deletable\")===\"false\"&&c.setDeletable(!1);return c};\nappendDomToWorkspace$$module$build$src$core$xml=function(a,b){if(!b.getBlocksBoundingBox)return $.domToWorkspace$$module$build$src$core$xml(a,b);var c=b.getBlocksBoundingBox();a=$.domToWorkspace$$module$build$src$core$xml(a,b);if(c&&c.top!==c.bottom){var d=c.bottom;c=b.RTL?c.right:c.left;var e=Infinity;let f=-Infinity,g=Infinity;for(let h=0;hf&&(f=k.x)}d=d-g+10;c=b.RTL?c-f:c-e;for(e=0;e=0;g--)f[g].initSvg();for(let g=f.length-1;g>=0;g--)f[g].queueRender();setTimeout(function(){e.disposed||e.setConnectionTracking(!0)},1);b.resizeContents()}else{const e=d.getDescendants(!1);for(let f=e.length-\n1;f>=0;f--)e[f].initModel()}}finally{$.enable$$module$build$src$core$events$utils()}if(isEnabled$$module$build$src$core$events$utils()){a=getAddedVariables$$module$build$src$core$variables(b,c);for(b=0;b{isNaN(n)||isNaN(r)||(n=b.workspace.RTL?b.workspace.getWidth()-(n+h):n,q.setBubbleLocation(new Coordinate$$module$build$src$core$utils$coordinate(n,r)));q.setBubbleVisible(f)},1)}};applyDataTagNodes$$module$build$src$core$xml=function(a,b){for(let c=0;c100)){var b=a.workspace,c=a.getSvgRoot();b.getAudioManager().play(\"delete\");var d=a.getRelativeToSurfaceXY(),e=c.cloneNode(!0);e.setAttribute(\"transform\",\"translate(\"+d.x+\",\"+d.y+\")\");var f;(f=b.getLayerManager())==null||f.appendToAnimationLayer({getSvgRoot:()=>e});disposeUiStep$$module$build$src$core$block_animations(e,{x:d.x,y:d.y,width:a.width,height:a.height},b.RTL,new Date)}};\ndisposeUiStep$$module$build$src$core$block_animations=function(a,b,c,d){const e=((new Date).getTime()-d.getTime())/150;e>1?removeNode$$module$build$src$core$utils$dom(a):(a.setAttribute(\"transform\",\"translate(\"+(b.x+(c?-1:1)*b.width/2*e)+\",\"+(b.y+b.height/2*e)+\") scale(\"+(1-e)+\")\"),setTimeout(disposeUiStep$$module$build$src$core$block_animations,10,a,b,c,d))};\nconnectionUiEffect$$module$build$src$core$block_animations=function(a){var b=a.workspace;const c=b.scale;b.getAudioManager().play(\"click\");if(!(c<1)){var d=b.getSvgXY(a.getSvgRoot());a.outputConnection?(d.x+=(a.RTL?3:-3)*c,d.y+=13*c):a.previousConnection&&(d.x+=(a.RTL?-23:23)*c,d.y+=3*c);var e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CIRCLE,{cx:d.x,cy:d.y,r:0,fill:\"none\",stroke:\"#888\",\"stroke-width\":10},b.getParentSvg());a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.ANIMATE,\n{id:\"animationCircle\",begin:\"indefinite\",attributeName:\"r\",dur:\"150ms\",from:0,to:25*c},e);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.ANIMATE,{id:\"animationOpacity\",begin:\"indefinite\",attributeName:\"opacity\",dur:\"150ms\",from:1,to:0},e);a.beginElement();b.beginElement();setTimeout(()=>void removeNode$$module$build$src$core$utils$dom(e),150)}};\ndisconnectUiEffect$$module$build$src$core$block_animations=function(a){disconnectUiStop$$module$build$src$core$block_animations();a.workspace.getAudioManager().play(\"disconnect\");if(!(a.workspace.scale<1)){var b=a.getHeightWidth().height;b=Math.atan(10/b)/Math.PI*180;a.RTL||(b*=-1);wobblingBlock$$module$build$src$core$block_animations=a;disconnectUiStep$$module$build$src$core$block_animations(a,b,new Date,0)}};\ndisconnectUiStep$$module$build$src$core$block_animations=function(a,b,c,d){const e=[.66,1,.66,0,-.66,-1,-.66,0];let f=\"\";c.getTime()+200>(new Date).getTime()&&(f=`skewX(${Math.round(e[d%e.length]*b)})`,disconnectPid$$module$build$src$core$block_animations=setTimeout(disconnectUiStep$$module$build$src$core$block_animations,15,a,b,c,d+1));a.getSvgRoot().setAttribute(\"transform\",`${a.getTranslation()} ${f}`)};\ndisconnectUiStop$$module$build$src$core$block_animations=function(){wobblingBlock$$module$build$src$core$block_animations&&(disconnectPid$$module$build$src$core$block_animations&&(clearTimeout(disconnectPid$$module$build$src$core$block_animations),disconnectPid$$module$build$src$core$block_animations=null),wobblingBlock$$module$build$src$core$block_animations.getSvgRoot().setAttribute(\"transform\",wobblingBlock$$module$build$src$core$block_animations.getTranslation()),wobblingBlock$$module$build$src$core$block_animations=\nnull)};\nmoveBlockToNotConflict$$module$build$src$core$clipboard$block_paster=function(a,b){a.workspace.RTL&&(b.x=a.workspace.getWidth()-b.x);const c=a.workspace,d=$.config$$module$build$src$core$config.snapRadius,e=Coordinate$$module$build$src$core$utils$coordinate.difference(b,a.getRelativeToSurfaceXY()),f=new Coordinate$$module$build$src$core$utils$coordinate(0,0),g=c.getAllBlocks(!1).filter(h=>h.id!=a.id).map(h=>h.getRelativeToSurfaceXY());for(;blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster(Coordinate$$module$build$src$core$utils$coordinate.sum(b,f),\ng)||blockIsInSnapRadius$$module$build$src$core$clipboard$block_paster(a,Coordinate$$module$build$src$core$utils$coordinate.sum(e,f),d);)c.RTL?f.translate(-d,d*2):f.translate(d,d*2);a.moveTo(Coordinate$$module$build$src$core$utils$coordinate.sum(b,f))};blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster=function(a,b){return b.some(c=>Math.abs(c.x-a.x)<=1&&Math.abs(c.y-a.y)<=1)};\nblockIsInSnapRadius$$module$build$src$core$clipboard$block_paster=function(a,b,c){return a.getConnections_(!1).some(d=>!!d.closest(c,b).connection)};\nbumpObjectIntoBounds$$module$build$src$core$bump_objects=function(a,b,c){const d=c.getBoundingRectangle(),e=d.right-d.left,f=clamp$$module$build$src$core$utils$math(b.top,d.top,b.top+b.height-(d.bottom-d.top))-d.top;let g=b.left;b=b.left+b.width-e;a.RTL?g=Math.min(b,g):b=Math.max(g,b);return(a=clamp$$module$build$src$core$utils$math(g,d.left,b)-d.left)||f?(c.moveBy(a,f,[\"inbounds\"]),!0):!1};\nbumpIntoBoundsHandler$$module$build$src$core$bump_objects=function(a){return b=>{var c=a.getMetricsManager();if(c.hasFixedEdges()&&!a.isDragging()){var d;if(BUMP_EVENTS$$module$build$src$core$events$type.includes((d=b.type)!=null?d:\"\")){d=c.getScrollMetrics(!0);const e=extractObjectFromEvent$$module$build$src$core$bump_objects(a,b);e&&(c=$.getGroup$$module$build$src$core$events$utils()||!1,$.setGroup$$module$build$src$core$events$utils(b.group),bumpObjectIntoBounds$$module$build$src$core$bump_objects(a,\nd,e)&&!b.group&&console.warn(\"Moved object in bounds but there was no event group. This may break undo.\"),$.setGroup$$module$build$src$core$events$utils(c))}else isViewportChange$$module$build$src$core$events$predicates(b)&&b.scale&&b.oldScale&&b.scale>b.oldScale&&bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects(a)}}};\nextractObjectFromEvent$$module$build$src$core$bump_objects=function(a,b){let c=null;switch(b.type){case EventType$$module$build$src$core$events$type.BLOCK_CREATE:case EventType$$module$build$src$core$events$type.BLOCK_MOVE:(c=a.getBlockById(b.blockId))&&(c=c.getRootBlock());break;case EventType$$module$build$src$core$events$type.COMMENT_CREATE:case EventType$$module$build$src$core$events$type.COMMENT_MOVE:case EventType$$module$build$src$core$events$type.COMMENT_RESIZE:c=a.getCommentById(b.commentId)}return c};\nbumpTopObjectsIntoBounds$$module$build$src$core$bump_objects=function(a){var b=a.getMetricsManager();if(b.hasFixedEdges()&&!a.isDragging()){b=b.getScrollMetrics(!0);var c=a.getTopBoundedElements();for(let d=0,e;e=c[d];d++)bumpObjectIntoBounds$$module$build$src$core$bump_objects(a,b,e)}};isDeletable$$module$build$src$core$interfaces$i_deletable=function(a){return a&&typeof a.isDeletable===\"function\"&&typeof a.dispose===\"function\"&&typeof a.setDeleteStyle===\"function\"};\ngetBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){const c=a.getIcons();for(const d of a.inputList){if(!d.isVisible())continue;c.push(...d.fieldRow);let e;if((e=d.connection)==null?0:e.targetBlock())if(a=d.connection.targetBlock(),d.connection.type!==ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||b)c.push(a);else{let f;(a=(f=a.lastConnectionInStack(!1))==null?void 0:f.getSourceBlock())&&c.push(a)}else{let f;((f=d.connection)==\nnull?void 0:f.type)===ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE&&c.push(d.connection)}}return c};\nnavigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){const c=a.workspace.getTopBoundedElements(!0).filter(e=>isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(e));a=c.indexOf(a instanceof BlockSvg$$module$build$src$core$block_svg?a.getRootBlock():a)+b;let d=null;a>=0&&a=c.length&&(d=c[0]);if(b<0&&d instanceof BlockSvg$$module$build$src$core$block_svg){let e,f;return(f=(e=d.lastConnectionInStack(!1))==null?\nvoid 0:e.getSourceBlock())!=null?f:d}return d};\nnavigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){var c;let d;const e=a instanceof BlockSvg$$module$build$src$core$block_svg?(d=(c=a.outputConnection)==null?void 0:c.targetBlock())!=null?d:a.getSurroundParent():a.getSourceBlock();if(!(e instanceof BlockSvg$$module$build$src$core$block_svg))return null;c=getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy(e,b>0);a=c.indexOf(a);if(a===-1)return null;b=a+b;return b>=0&&b!d.getReturnTypes()).map(d=>[d.getName(),d.getParameters().map(e=>e.getName()),!1]);a.getBlocksByType(\"procedures_defnoreturn\",!1).forEach(d=>{!isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(d)&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&b.push(d.getProcedureDef())});const c=a.getProcedureMap().getProcedures().filter(d=>\n!!d.getReturnTypes()).map(d=>[d.getName(),d.getParameters().map(e=>e.getName()),!0]);a.getBlocksByType(\"procedures_defreturn\",!1).forEach(d=>{!isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(d)&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&c.push(d.getProcedureDef())});b.sort(procTupleComparator$$module$build$src$core$procedures);c.sort(procTupleComparator$$module$build$src$core$procedures);return[b,c]};\nprocTupleComparator$$module$build$src$core$procedures=function(a,b){return a[0].localeCompare(b[0],void 0,{sensitivity:\"base\"})};$.findLegalName$$module$build$src$core$procedures=function(a,b){if(b.isInFlyout)return a;for(a=a||$.Msg$$module$build$src$core$msg.UNNAMED_KEY||\"unnamed\";!isLegalName$$module$build$src$core$procedures(a,b.workspace,b);){const c=a.match(/^(.*?)(\\d+)$/);a=c?c[1]+(parseInt(c[2])+1):a+\"2\"}return a};\nisLegalName$$module$build$src$core$procedures=function(a,b,c){return!isNameUsed$$module$build$src$core$procedures(a,b,c)};\nisNameUsed$$module$build$src$core$procedures=function(a,b,c){for(const d of b.getAllBlocks(!1))if(d!==c&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&$.Names$$module$build$src$core$names.equals(d.getProcedureDef()[0],a))return!0;c=c&&isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(c)?c==null?void 0:c.getProcedureModel():void 0;for(const d of b.getProcedureMap().getProcedures())if(d!==c&&$.Names$$module$build$src$core$names.equals(d.getName(),\na))return!0;return!1};\n$.rename$$module$build$src$core$procedures=function(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;a=a.trim();const c=$.findLegalName$$module$build$src$core$procedures(a,b);isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(b)&&!b.isInsertionMarker()&&b.getProcedureModel().setName(c);const d=this.getValue();if(d!==a&&d!==c)for(a=b.workspace.getAllBlocks(!1),b=0;bblockIsModernCallerFor$$module$build$src$core$procedures(c,a)||isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(c)&&$.Names$$module$build$src$core$names.equals(c.getProcedureCall(),a))};\nblockIsModernCallerFor$$module$build$src$core$procedures=function(a,b){return isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(a)&&!a.isProcedureDef()&&a.getProcedureModel()&&$.Names$$module$build$src$core$names.equals(a.getProcedureModel().getName(),b)};\n$.mutateCallers$$module$build$src$core$procedures=function(a){const b=getRecordUndo$$module$build$src$core$events$utils();var c=a.getProcedureDef()[0];const d=a.mutationToDom(!0);a=getCallers$$module$build$src$core$procedures(c,a.workspace);for(let f=0,g;g=a[f];f++){c=(c=g.mutationToDom())&&domToText$$module$build$src$core$utils$xml(c);g.domToMutation&&g.domToMutation(d);var e=g.mutationToDom();e=e&&domToText$$module$build$src$core$utils$xml(e);c!==e&&($.setRecordUndo$$module$build$src$core$events$utils(!1),\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(g,\"mutation\",null,c,e)),$.setRecordUndo$$module$build$src$core$events$utils(b))}};\n$.getDefinition$$module$build$src$core$procedures=function(a,b){for(const c of b.getAllBlocks(!1))if(isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(c)&&c.isProcedureDef()&&$.Names$$module$build$src$core$names.equals(c.getProcedureModel().getName(),a)||isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(c)&&$.Names$$module$build$src$core$names.equals(c.getProcedureDef()[0],a))return c;return null};\nisDynamicShape$$module$build$src$core$renderers$common$constants=function(a){return a.isDynamic};isPuzzleTab$$module$build$src$core$renderers$common$constants=function(a){return a.pathDown!==void 0&&a.pathUp!==void 0};isNotch$$module$build$src$core$renderers$common$constants=function(a){return a.pathLeft!==void 0&&a.pathRight!==void 0};\nregister$$module$build$src$core$renderers$common$block_rendering=function(a,b){register$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a,b)};unregister$$module$build$src$core$renderers$common$block_rendering=function(a){unregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a)};\ninit$$module$build$src$core$renderers$common$block_rendering=function(a,b,c){a=new (getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a))(a);a.init(b,c);return a};stringButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"String\")};\nnumberButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"Number\")};colourButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"Colour\")};\ninternalFlyoutCategory$$module$build$src$core$variables_dynamic=function(a){return flyoutCategory$$module$build$src$core$variables_dynamic(a,!1)};\nflyoutCategory$$module$build$src$core$variables_dynamic=function(a,b=!0){Blocks$$module$build$src$core$blocks.variables_set_dynamic||Blocks$$module$build$src$core$blocks.variables_get_dynamic||console.warn(\"There are no dynamic variable blocks, but there is a dynamic variable category.\");if(b)return warn$$module$build$src$core$utils$deprecation(\"The XML return value of Blockly.VariablesDynamic.flyoutCategory()\",\"v12\",\"v13\",\"the same method, but handle a return type of FlyoutItemInfo[] (JSON) instead.\"),\nxmlFlyoutCategory$$module$build$src$core$variables_dynamic(a);a.registerButtonCallback(\"CREATE_VARIABLE_STRING\",stringButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_NUMBER\",numberButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_COLOUR\",colourButtonClickHandler$$module$build$src$core$variables_dynamic);return[{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_STRING_VARIABLE,callbackkey:\"CREATE_VARIABLE_STRING\"},\n{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_NUMBER_VARIABLE,callbackkey:\"CREATE_VARIABLE_NUMBER\"},{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_COLOUR_VARIABLE,callbackkey:\"CREATE_VARIABLE_COLOUR\"},...jsonFlyoutCategoryBlocks$$module$build$src$core$variables(a,a.getVariableMap().getAllVariables(),!1,\"variables_get_dynamic\",\"variables_set_dynamic\")]};\nxmlFlyoutCategory$$module$build$src$core$variables_dynamic=function(a){let b=[],c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_STRING_VARIABLE);c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_STRING\");b.push(c);c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_NUMBER_VARIABLE);c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_NUMBER\");b.push(c);c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_COLOUR_VARIABLE);\nc.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_COLOUR\");b.push(c);a.registerButtonCallback(\"CREATE_VARIABLE_STRING\",stringButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_NUMBER\",numberButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_COLOUR\",colourButtonClickHandler$$module$build$src$core$variables_dynamic);a=flyoutCategoryBlocks$$module$build$src$core$variables_dynamic(a);return b=b.concat(a)};\nflyoutCategoryBlocks$$module$build$src$core$variables_dynamic=function(a){a=a.getVariableMap().getAllVariables();const b=[];if(a.length>0){if(Blocks$$module$build$src$core$blocks.variables_set_dynamic){var c=a[a.length-1];const d=$.createElement$$module$build$src$core$utils$xml(\"block\");d.setAttribute(\"type\",\"variables_set_dynamic\");d.setAttribute(\"gap\",\"24\");d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c));b.push(d)}if(Blocks$$module$build$src$core$blocks.variables_get_dynamic){a.sort(compareByName$$module$build$src$core$variables);\nfor(let d=0,e;e=a[d];d++)c=$.createElement$$module$build$src$core$utils$xml(\"block\"),c.setAttribute(\"type\",\"variables_get_dynamic\"),c.setAttribute(\"gap\",\"8\"),c.appendChild(generateVariableFieldDom$$module$build$src$core$variables(e)),b.push(c)}}return b};resizeSvgContents$$module$build$src$core$workspace_svg=function(a){a.resizeContents()};\ncopy$$module$build$src$core$clipboard=function(a,b){const c=a.toCopyData();stashedCopyData$$module$build$src$core$clipboard=c;stashedWorkspace$$module$build$src$core$clipboard=isSelectable$$module$build$src$core$interfaces$i_selectable(a)&&a.workspace instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?a.workspace:null;stashedCoordinates$$module$build$src$core$clipboard=b;return c};getLastCopiedData$$module$build$src$core$clipboard=function(){return stashedCopyData$$module$build$src$core$clipboard};\nsetLastCopiedData$$module$build$src$core$clipboard=function(a){stashedCopyData$$module$build$src$core$clipboard=a};getLastCopiedWorkspace$$module$build$src$core$clipboard=function(){return stashedWorkspace$$module$build$src$core$clipboard};setLastCopiedWorkspace$$module$build$src$core$clipboard=function(a){stashedWorkspace$$module$build$src$core$clipboard=a};getLastCopiedLocation$$module$build$src$core$clipboard=function(){return stashedCoordinates$$module$build$src$core$clipboard};\nsetLastCopiedLocation$$module$build$src$core$clipboard=function(a){stashedCoordinates$$module$build$src$core$clipboard=a};\npaste$$module$build$src$core$clipboard=function(a,b,c){return a&&b?pasteFromData$$module$build$src$core$clipboard(a,b,c):stashedCopyData$$module$build$src$core$clipboard&&stashedWorkspace$$module$build$src$core$clipboard?pasteFromData$$module$build$src$core$clipboard(stashedCopyData$$module$build$src$core$clipboard,stashedWorkspace$$module$build$src$core$clipboard,stashedCoordinates$$module$build$src$core$clipboard):null};\npasteFromData$$module$build$src$core$clipboard=function(a,b,c){let d;b=b.isMutator?b:(d=b.options.parentWorkspace)!=null?d:b;let e,f;return(f=(e=getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.PASTER,a.paster,!1))==null?void 0:e.paste(a,b,c))!=null?f:null};isCopyable$$module$build$src$core$interfaces$i_copyable=function(a){return a&&typeof a.toCopyData===\"function\"};\nregisterEscape$$module$build$src$core$shortcut_items=function(){ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.ESCAPE,preconditionFn(a){return!a.isReadOnly()},callback(a){a.hideChaff();return!0},keyCodes:[KeyCodes$$module$build$src$core$utils$keycodes.ESC]})};\nregisterDelete$$module$build$src$core$shortcut_items=function(){ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.DELETE,preconditionFn(a,b){b=b.focusedNode;return!a.isReadOnly()&&b!=null&&isDeletable$$module$build$src$core$interfaces$i_deletable(b)&&b.isDeletable()&&!a.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(a,b,c,d){b.preventDefault();a=d.focusedNode;a instanceof\nBlockSvg$$module$build$src$core$block_svg?a.checkAndDelete():isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&a.isDeletable()&&($.setGroup$$module$build$src$core$events$utils(!0),a.dispose(),$.setGroup$$module$build$src$core$events$utils(!1));return!0},keyCodes:[KeyCodes$$module$build$src$core$utils$keycodes.DELETE,KeyCodes$$module$build$src$core$utils$keycodes.BACKSPACE]})};\nisCopyable$$module$build$src$core$shortcut_items=function(a){return isCopyable$$module$build$src$core$interfaces$i_copyable(a)&&isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&isDraggable$$module$build$src$core$interfaces$i_draggable(a)?a.isCopyable?a.isCopyable():a instanceof BlockSvg$$module$build$src$core$block_svg||a instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment?a.isOwnDeletable()&&a.isOwnMovable():a.isDeletable()&&a.isMovable():!1};\nisCuttable$$module$build$src$core$shortcut_items=function(a){return isCopyable$$module$build$src$core$shortcut_items(a)&&isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&a.isDeletable()};\nregisterCopy$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.C,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.C,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.COPY,\npreconditionFn(c,d){d=d.focusedNode;c=c.isFlyout?c.targetWorkspace:c;return!!d&&!!c&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()&&isCopyable$$module$build$src$core$shortcut_items(d)},callback(c,d,e,f){d.preventDefault();d=f.focusedNode;if(!d||!isCopyable$$module$build$src$core$interfaces$i_copyable(d)||!isCopyable$$module$build$src$core$shortcut_items(d))return!1;c=c.isFlyout?c.targetWorkspace:c;if(!c)return!1;d.workspace.isFlyout||c.hideChaff();\nc=isDraggable$$module$build$src$core$interfaces$i_draggable(d)&&d.workspace==c?d.getRelativeToSurfaceXY():void 0;return!!copy$$module$build$src$core$clipboard(d,c)},keyCodes:[a,b]})};\nregisterCut$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.X,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.X,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.CUT,\npreconditionFn(c,d){d=d.focusedNode;return!!d&&!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()&&isCuttable$$module$build$src$core$shortcut_items(d)},callback(c,d,e,f){c=f.focusedNode;if(!c||!isCuttable$$module$build$src$core$shortcut_items(c)||!isCopyable$$module$build$src$core$interfaces$i_copyable(c))return!1;d=isDraggable$$module$build$src$core$interfaces$i_draggable(c)?c.getRelativeToSurfaceXY():void 0;d=copy$$module$build$src$core$clipboard(c,\nd);c instanceof BlockSvg$$module$build$src$core$block_svg?c.checkAndDelete():isDeletable$$module$build$src$core$interfaces$i_deletable(c)&&c.dispose();return!!d},keyCodes:[a,b]})};\nregisterPaste$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.V,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.V,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.PASTE,\npreconditionFn(){var c=getLastCopiedWorkspace$$module$build$src$core$clipboard();if(!c||!c.rendered)return!1;c=c.isFlyout?c.targetWorkspace:c;return!!getLastCopiedData$$module$build$src$core$clipboard()&&!!c&&!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(c,d){c=getLastCopiedData$$module$build$src$core$clipboard();if(!c)return!1;var e=getLastCopiedWorkspace$$module$build$src$core$clipboard();if(!e)return!1;e=e.isFlyout?e.targetWorkspace:\ne;if(!e||e.isReadOnly())return!1;if(d instanceof PointerEvent)return d=screenToWsCoordinates$$module$build$src$core$utils$svg_math(e,new Coordinate$$module$build$src$core$utils$coordinate(d.clientX,d.clientY)),!!paste$$module$build$src$core$clipboard(c,e,d);d=getLastCopiedLocation$$module$build$src$core$clipboard();if(!d)return!!paste$$module$build$src$core$clipboard(c,e);const {left:f,top:g,width:h,height:k}=e.getMetricsManager().getViewMetrics(!0);if((new Rect$$module$build$src$core$utils$rect(g,\ng+k,f,f+h)).contains(d.x,d.y))return!!paste$$module$build$src$core$clipboard(c,e);d=new Coordinate$$module$build$src$core$utils$coordinate(f+h/2,g+k/2);return!!paste$$module$build$src$core$clipboard(c,e,d)},keyCodes:[a,b]})};\nregisterUndo$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.UNDO,\npreconditionFn(c){return!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(c,d){c.hideChaff();c.undo(!1);d.preventDefault();return!0},keyCodes:[a,b]})};\nregisterRedo$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL,KeyCodes$$module$build$src$core$utils$keycodes.SHIFT]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.META,\nKeyCodes$$module$build$src$core$utils$keycodes.SHIFT]),c=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Y,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.REDO,preconditionFn(d){return!d.isDragging()&&!d.isReadOnly()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},\ncallback(d,e){d.hideChaff();d.undo(!0);e.preventDefault();return!0},keyCodes:[a,b,c]})};registerDefaultShortcuts$$module$build$src$core$shortcut_items=function(){registerEscape$$module$build$src$core$shortcut_items();registerDelete$$module$build$src$core$shortcut_items();registerCopy$$module$build$src$core$shortcut_items();registerCut$$module$build$src$core$shortcut_items();registerPaste$$module$build$src$core$shortcut_items();registerUndo$$module$build$src$core$shortcut_items();registerRedo$$module$build$src$core$shortcut_items()};\nsaveProcedure$$module$build$src$core$serialization$procedures=function(a){const b=a.saveState();if(!a.getParameters().length)return b;b.parameters=a.getParameters().map(c=>c.saveState());return b};loadProcedure$$module$build$src$core$serialization$procedures=function(a,b,c,d){a=a.loadState(c,d);if(!c.parameters)return a;for(const [e,f]of c.parameters.entries())a.insertParameter(b.loadState(f,d),e);return a};\nsave$$module$build$src$core$serialization$workspaces=function(a){const b=Object.create(null),c=getAllItems$$module$build$src$core$registry(Type$$module$build$src$core$registry.SERIALIZER,!0);for(const d in c){let e;const f=(e=c[d])==null?void 0:e.save(a);f&&(b[d]=f)}return b};\nload$$module$build$src$core$serialization$workspaces=function(a,b,{recordUndo:c=!1}={}){var d=getAllItems$$module$build$src$core$registry(Type$$module$build$src$core$registry.SERIALIZER,!0);if(d){d=Object.entries(d).sort((f,g)=>g[1].priority-f[1].priority);var e=getRecordUndo$$module$build$src$core$events$utils();$.setRecordUndo$$module$build$src$core$events$utils(c);(c=$.getGroup$$module$build$src$core$events$utils())||$.setGroup$$module$build$src$core$events$utils(!0);startTextWidthCache$$module$build$src$core$utils$dom();\nb instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&b.setResizesEnabled(!1);for(const [,f]of d.reverse()){let g;(g=f)==null||g.clear(b)}for(const [f,g]of d.reverse())if(a[f]){let h;(h=g)==null||h.load(a[f],b)}b instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&b.setResizesEnabled(!0);stopTextWidthCache$$module$build$src$core$utils$dom();fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.FINISHED_LOADING))(b));\n$.setGroup$$module$build$src$core$events$utils(c);$.setRecordUndo$$module$build$src$core$events$utils(e)}};\ninject$$module$build$src$core$inject=function(a,b){let c=null;c=typeof a===\"string\"?document.getElementById(a)||document.querySelector(a):a;var d;if(!document.contains(c)&&document!==((d=c)==null?void 0:d.ownerDocument))throw Error(\"Error: container is not in current document\");a=new Options$$module$build$src$core$options(b||{});d=document.createElement(\"div\");addClass$$module$build$src$core$utils$dom(d,\"injectionDiv\");(b==null?0:b.rtl)&&addClass$$module$build$src$core$utils$dom(d,\"blocklyRTL\");c.appendChild(d);\nb=createDom$$module$build$src$core$inject(d,a);const e=createMainWorkspace$$module$build$src$core$inject(d,b,a);init$$module$build$src$core$inject(e);setMainWorkspace$$module$build$src$core$common(e);svgResize$$module$build$src$core$common(e);d.addEventListener(\"focusin\",function(){setMainWorkspace$$module$build$src$core$common(e)});conditionalBind$$module$build$src$core$browser_events(d,\"keydown\",null,globalShortcutHandler$$module$build$src$core$common);return e};\ncreateDom$$module$build$src$core$inject=function(a,b){a.setAttribute(\"dir\",\"LTR\");inject$$module$build$src$core$css(b.hasCss,b.pathToMedia);const c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{xmlns:SVG_NS$$module$build$src$core$utils$dom,\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\",\"class\":\"blocklySvg\"},a),d=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.DEFS,\n{},c),e=String(Math.random()).substring(2);b.gridPattern=Grid$$module$build$src$core$grid.createDom(e,b.gridOptions,d,a);return c};\ncreateMainWorkspace$$module$build$src$core$inject=function(a,b,c){c.parentWorkspace=null;c=new WorkspaceSvg$$module$build$src$core$workspace_svg(c);const d=c.options;c.scale=d.zoomOptions.startScale;b.appendChild(c.createDom(\"blocklyMainBackground\",a));var e=c.getRenderer().getClassName();e&&addClass$$module$build$src$core$utils$dom(a,e);(e=c.getTheme().getClassName())&&addClass$$module$build$src$core$utils$dom(a,e);!d.hasCategories&&d.languageTree&&(a=c.addFlyout(Svg$$module$build$src$core$utils$svg.SVG),\ninsertAfter$$module$build$src$core$utils$dom(a,b));d.hasTrashcan&&c.addTrashcan();d.zoomOptions&&d.zoomOptions.controls&&c.addZoomControls();c.getThemeManager().subscribe(b,\"workspaceBackgroundColour\",\"background-color\");c.translate(0,0);c.addChangeListener(bumpIntoBoundsHandler$$module$build$src$core$bump_objects(c));svgResize$$module$build$src$core$common(c);createDom$$module$build$src$core$widgetdiv();createDom$$module$build$src$core$dropdowndiv();createDom$$module$build$src$core$tooltip();return c};\ninit$$module$build$src$core$inject=function(a){const b=a.options;var c=a.getParentSvg();conditionalBind$$module$build$src$core$browser_events(c.parentNode,\"contextmenu\",null,function(d){isTargetInput$$module$build$src$core$browser_events(d)||d.preventDefault()});c=conditionalBind$$module$build$src$core$browser_events(window,\"resize\",null,function(){hide$$module$build$src$core$tooltip();a.hideComponents(!0);repositionForWindowResize$$module$build$src$core$dropdowndiv();repositionForWindowResize$$module$build$src$core$widgetdiv();\nsvgResize$$module$build$src$core$common(a);bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects(a)});a.setResizeHandlerWrapper(c);bindDocumentEvents$$module$build$src$core$inject();if(b.languageTree){c=a.getToolbox();const d=a.getFlyout(!0);c?c.init():d&&(d.init(a),d.show(b.languageTree),typeof d.scrollToStart===\"function\"&&d.scrollToStart())}b.hasTrashcan&&a.trashcan.init();b.zoomOptions&&b.zoomOptions.controls&&a.zoomControls_.init();b.moveOptions&&b.moveOptions.scrollbars?(a.scrollbar=\nnew ScrollbarPair$$module$build$src$core$scrollbar_pair(a,b.moveOptions.scrollbars===!0||!!b.moveOptions.scrollbars.horizontal,b.moveOptions.scrollbars===!0||!!b.moveOptions.scrollbars.vertical,\"blocklyMainWorkspaceScrollbar\"),a.scrollbar.resize()):a.setMetrics({x:.5,y:.5});b.hasSounds&&loadSounds$$module$build$src$core$inject(b.pathToMedia,a)};\nbindDocumentEvents$$module$build$src$core$inject=function(){documentEventsBound$$module$build$src$core$inject||(conditionalBind$$module$build$src$core$browser_events(document,\"scroll\",null,function(){const a=getAllWorkspaces$$module$build$src$core$common();for(let b=0,c;c=a[b];b++)c instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&c.updateInverseScreenCTM()}),bind$$module$build$src$core$browser_events(document,\"touchend\",null,longStop$$module$build$src$core$touch),bind$$module$build$src$core$browser_events(document,\n\"touchcancel\",null,longStop$$module$build$src$core$touch));documentEventsBound$$module$build$src$core$inject=!0};\nloadSounds$$module$build$src$core$inject=function(a,b){function c(){for(;e.length;){const f=e.pop();f&&unbind$$module$build$src$core$browser_events(f)}d.preload()}const d=b.getAudioManager();d.load([a+\"click.mp3\",a+\"click.wav\",a+\"click.ogg\"],\"click\");d.load([a+\"disconnect.wav\",a+\"disconnect.mp3\",a+\"disconnect.ogg\"],\"disconnect\");d.load([a+\"delete.mp3\",a+\"delete.ogg\",a+\"delete.wav\"],\"delete\");const e=[];e.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",null,c,!0));\ne.push(conditionalBind$$module$build$src$core$browser_events(document,\"touchstart\",null,c,!0))};isFullBlockField$$module$build$src$core$contextmenu_items=function(a){if(!a||!a.isSimpleReporter())return!1;let b;return(b=a.getFields().next().value)==null?void 0:b.isFullBlockField()};\nregisterUndo$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.UNDO},preconditionFn(a){return a.workspace.getUndoStack().length>0?\"enabled\":\"disabled\"},callback(a){a.workspace.undo(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"undoWorkspace\",weight:1})};\nregisterRedo$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.REDO},preconditionFn(a){return a.workspace.getRedoStack().length>0?\"enabled\":\"disabled\"},callback(a){a.workspace.undo(!0)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"redoWorkspace\",weight:2})};\nregisterCleanup$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.CLEAN_UP},preconditionFn(a){return a.workspace.isMovable()?a.workspace.getTopBlocks(!1).length>1?\"enabled\":\"disabled\":\"hidden\"},callback(a){a.workspace.cleanUp()},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"cleanWorkspace\",weight:3})};\ntoggleOption_$$module$build$src$core$contextmenu_items=function(a,b){function c(f){e--;f.setCollapsed(a);e===0&&$.setGroup$$module$build$src$core$events$utils(!1)}let d=0,e=0;$.setGroup$$module$build$src$core$events$utils(!0);for(let f=0;f\n0?\"enabled\":\"disabled\":\"disabled\"},callback(a){if(a.workspace){a.workspace.cancelCurrentGesture();var b=getDeletableBlocks_$$module$build$src$core$contextmenu_items(a.workspace);b.length<2?deleteNext_$$module$build$src$core$contextmenu_items(b):confirm$$module$build$src$core$dialog($.Msg$$module$build$src$core$msg.DELETE_ALL_BLOCKS.replace(\"%1\",String(b.length)),function(c){c&&deleteNext_$$module$build$src$core$contextmenu_items(b)})}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,\nid:\"workspaceDelete\",weight:6})};registerWorkspaceOptions_$$module$build$src$core$contextmenu_items=function(){registerUndo$$module$build$src$core$contextmenu_items();registerRedo$$module$build$src$core$contextmenu_items();registerCleanup$$module$build$src$core$contextmenu_items();registerCollapse$$module$build$src$core$contextmenu_items();registerExpand$$module$build$src$core$contextmenu_items();registerDeleteAll$$module$build$src$core$contextmenu_items()};\nregisterDuplicate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.DUPLICATE_BLOCK},preconditionFn(a){a=a.block;return!a.isInFlyout&&a.isDeletable()&&a.isMovable()?a.isDuplicatable()?\"enabled\":\"disabled\":\"hidden\"},callback(a){if(a.block){var b=a.block.toCopyData();b&&paste$$module$build$src$core$clipboard(b,a.block.workspace)}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,\nid:\"blockDuplicate\",weight:1})};\nregisterComment$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){return a.block.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)?$.Msg$$module$build$src$core$msg.REMOVE_COMMENT:$.Msg$$module$build$src$core$msg.ADD_COMMENT},preconditionFn(a){a=a.block;return!a||a.isInFlyout||!a.workspace.options.comments||a.isCollapsed()||!a.isEditable()||!a.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)&&isFullBlockField$$module$build$src$core$contextmenu_items(a)?\n\"hidden\":\"enabled\"},callback(a){(a=a.block)&&a.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)?a.setCommentText(null):a.setCommentText(\"\")},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockComment\",weight:2})};\nregisterInline$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){return a.block.getInputsInline()?$.Msg$$module$build$src$core$msg.EXTERNAL_INPUTS:$.Msg$$module$build$src$core$msg.INLINE_INPUTS},preconditionFn(a){a=a.block;if(!a.isInFlyout&&a.isMovable()&&!a.isCollapsed())for(let b=1;b(b.has(MANUALLY_DISABLED$$module$build$src$core$constants)?\n1:0);return a.getInheritedDisabled()||b?\"disabled\":\"enabled\"}return\"hidden\"},callback(a){a=a.block;const b=$.getGroup$$module$build$src$core$events$utils();b||$.setGroup$$module$build$src$core$events$utils(!0);a.setDisabledReason(!a.hasDisabledReason(MANUALLY_DISABLED$$module$build$src$core$constants),MANUALLY_DISABLED$$module$build$src$core$constants);$.setGroup$$module$build$src$core$events$utils(b)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockDisable\",\nweight:5})};\nregisterDelete$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){var b=a.block;a=b.getDescendants(!1).length;(b=b.getNextBlock())&&(a-=b.getDescendants(!1).length);return a===1?$.Msg$$module$build$src$core$msg.DELETE_BLOCK:$.Msg$$module$build$src$core$msg.DELETE_X_BLOCKS.replace(\"%1\",`${a}`)},preconditionFn(a){return!a.block.isInFlyout&&a.block.isDeletable()?\"enabled\":\"hidden\"},callback(a){a.block&&a.block.checkAndDelete()},\nscopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockDelete\",weight:6})};\nregisterHelp$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.HELP},preconditionFn(a){a=a.block;return(typeof a.helpUrl===\"function\"?a.helpUrl():a.helpUrl)?\"enabled\":\"hidden\"},callback(a){a.block.showHelp()},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockHelp\",weight:7})};\nregisterCommentDelete$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.REMOVE_COMMENT,preconditionFn(a){let b;return((b=a.comment)==null?0:b.isDeletable())?\"enabled\":\"hidden\"},callback(a){$.setGroup$$module$build$src$core$events$utils(!0);let b;(b=a.comment)==null||b.dispose();$.setGroup$$module$build$src$core$events$utils(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.COMMENT,\nid:\"commentDelete\",weight:6})};\nregisterCommentDuplicate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.DUPLICATE_COMMENT,preconditionFn(a){let b;return((b=a.comment)==null?0:b.isMovable())?\"enabled\":\"hidden\"},callback(a){if(a.comment){var b=a.comment.toCopyData();b&&paste$$module$build$src$core$clipboard(b,a.comment.workspace)}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.COMMENT,id:\"commentDuplicate\",\nweight:1})};\nregisterCommentCreate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.ADD_COMMENT,preconditionFn:a=>{let b;return((b=a.workspace)==null?0:b.isMutator)?\"hidden\":\"enabled\"},callback:(a,b,c,d)=>{if(a=a.workspace)$.setGroup$$module$build$src$core$events$utils(!0),b=new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(a),b.setPlaceholderText($.Msg$$module$build$src$core$msg.WORKSPACE_COMMENT_DEFAULT_TEXT),\nb.moveTo(screenToWsCoordinates$$module$build$src$core$utils$svg_math(a,new Coordinate$$module$build$src$core$utils$coordinate(d.x,d.y))),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b),$.setGroup$$module$build$src$core$events$utils(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"commentCreate\",weight:8})};\nregisterBlockOptions_$$module$build$src$core$contextmenu_items=function(){registerDuplicate$$module$build$src$core$contextmenu_items();registerComment$$module$build$src$core$contextmenu_items();registerInline$$module$build$src$core$contextmenu_items();registerCollapseExpandBlock$$module$build$src$core$contextmenu_items();registerDisable$$module$build$src$core$contextmenu_items();registerDelete$$module$build$src$core$contextmenu_items();registerHelp$$module$build$src$core$contextmenu_items()};\nregisterCommentOptions$$module$build$src$core$contextmenu_items=function(){registerCommentDuplicate$$module$build$src$core$contextmenu_items();registerCommentDelete$$module$build$src$core$contextmenu_items();registerCommentCreate$$module$build$src$core$contextmenu_items()};registerDefaultOptions$$module$build$src$core$contextmenu_items=function(){registerWorkspaceOptions_$$module$build$src$core$contextmenu_items();registerBlockOptions_$$module$build$src$core$contextmenu_items()};\nisPaster$$module$build$src$core$interfaces$i_paster=function(a){return a&&typeof a.paste===\"function\"};isRenderedElement$$module$build$src$core$interfaces$i_rendered_element=function(a){return a&&typeof a.getSvgRoot===\"function\"};isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item=function(a){return a.isSelectable()};hideChaff$$module$build$src$core$blockly=function(a){getMainWorkspace$$module$build$src$core$common().hideChaff(a)};\nisFocusableTree$$module$build$src$core$interfaces$i_focusable_tree=function(a){return a&&typeof a.getRootFocusableNode===\"function\"&&typeof a.getRestoredFocusableNode===\"function\"&&typeof a.getNestedTrees===\"function\"&&typeof a.lookUpFocusableNode===\"function\"&&typeof a.onTreeFocus===\"function\"&&typeof a.onTreeBlur===\"function\"};$jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_ES6=!1;$jscomp.ASSUME_ES2020=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;\n$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.INSTRUMENT_ASYNC_CONTEXT=!0;$jscomp.objectCreate=$jscomp.ASSUME_ES5||typeof Object.create==\"function\"?Object.create:function(a){var b=function(){};b.prototype=a;return new b};$jscomp.defineProperty=$jscomp.ASSUME_ES5||typeof Object.defineProperties==\"function\"?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};\n$jscomp.getGlobal=function(a){a=[\"object\"==typeof globalThis&&globalThis,a,\"object\"==typeof window&&window,\"object\"==typeof self&&self,\"object\"==typeof __webpack_require__.g&&__webpack_require__.g];for(var b=0;b>>0,$jscomp.propertyToPolyfillSymbol[e]=$jscomp.IS_SYMBOL_NATIVE?\n$jscomp.global.Symbol(e):$jscomp.POLYFILL_PREFIX+c+\"$\"+e),$jscomp.defineProperty(d,$jscomp.propertyToPolyfillSymbol[e],{configurable:!0,writable:!0,value:b})))};\n$jscomp.getConstructImplementation=function(){function a(){function c(){}new c;Reflect.construct(c,[],function(){});return new c instanceof c}if($jscomp.TRUST_ES6_POLYFILLS&&typeof Reflect!=\"undefined\"&&Reflect.construct){if(a())return Reflect.construct;var b=Reflect.construct;return function(c,d,e){c=b(c,d);e&&Reflect.setPrototypeOf(c,e.prototype);return c}}return function(c,d,e){e===void 0&&(e=c);e=$jscomp.objectCreate(e.prototype||Object.prototype);return Function.prototype.apply.call(c,e,d)||\ne}};$jscomp.construct={valueOf:$jscomp.getConstructImplementation}.valueOf();$jscomp.underscoreProtoCanBeSet=function(){var a={a:!0},b={};try{return b.__proto__=a,b.a}catch(c){}return!1};$jscomp.setPrototypeOf=$jscomp.ASSUME_ES6||$jscomp.TRUST_ES6_POLYFILLS&&typeof Object.setPrototypeOf==\"function\"?Object.setPrototypeOf:$jscomp.underscoreProtoCanBeSet()?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+\" is not extensible\");return a}:null;\n$jscomp.inherits=function(a,b){a.prototype=$jscomp.objectCreate(b.prototype);a.prototype.constructor=a;if($jscomp.ASSUME_ES6||$jscomp.setPrototypeOf){var c=$jscomp.setPrototypeOf;c(a,b)}else for(c in b)if(c!=\"prototype\")if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.superClass_=b.prototype};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b0;){var a=this.properties_.pop();if(a in this.object_)return a}return null};$jscomp.generator.Engine_=function(a){this.context_=new $jscomp.generator.Context;this.program_=a};\n$jscomp.generator.Engine_.prototype.next_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,a,this.context_.next_);this.context_.next_(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.return_=function(a){this.context_.start_();var b=this.context_.yieldAllIterator_;if(b)return this.yieldAllStep_(\"return\"in b?b[\"return\"]:function(c){return{value:c,done:!0}},a,this.context_.return);this.context_.return(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.throw_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_[\"throw\"],a,this.context_.next_);this.context_.throw_(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.yieldAllStep_=function(a,b,c){try{var d=a.call(this.context_.yieldAllIterator_,b);$jscomp.generator.ensureIteratorResultIsObject_(d);if(!d.done)return this.context_.stop_(),d;var e=d.value}catch(f){return this.context_.yieldAllIterator_=null,this.context_.throw_(f),this.nextStep_()}this.context_.yieldAllIterator_=null;c.call(this.context_,e);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var a=this.program_(this.context_);if(a)return this.context_.stop_(),{value:a.value,done:!1}}catch(b){this.context_.yieldResult=void 0,this.context_.throw_(b)}this.context_.stop_();if(this.context_.abruptCompletion_){a=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(a.isException)throw a.exception;return{value:a.return,done:!0}}return{value:void 0,done:!0}};\n$jscomp.generator.Generator_=function(a){this.next=function(b){return a.next_(b)};this.throw=function(b){return a.throw_(b)};this.return=function(b){return a.return_(b)};this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(a,b){b=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(b));$jscomp.setPrototypeOf&&a.prototype&&$jscomp.setPrototypeOf(b,a.prototype);return b};\n$jscomp.asyncExecutePromiseGenerator=function(a){function b(d){return a.next(d)}function c(d){return a.throw(d)}return new Promise(function(d,e){function f(g){g.done?d(g.value):Promise.resolve(g.value).then(b,c).then(f,e)}f(a.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(a){return $jscomp.asyncExecutePromiseGenerator(a())};$jscomp.asyncExecutePromiseGeneratorProgram=function(a){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(a)))};\n$jscomp.polyfill(\"globalThis\",function(a){return a||$jscomp.global},\"es_2020\",\"es3\");$jscomp.polyfill(\"Array.prototype.includes\",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var e=d.length;c=c||0;for(c<0&&(c=Math.max(c+e,0));c0?(d=Array.prototype.flat.call(d,b-1),c.push.apply(c,d)):c.push(d)});return c}},\"es9\",\"es5\");\n$jscomp.polyfill(\"Object.entries\",function(a){return a?a:function(b){var c=[],d;for(d in b)$jscomp.owns(b,d)&&c.push([d,b[d]]);return c}},\"es8\",\"es3\");$jscomp.polyfill(\"Object.values\",function(a){return a?a:function(b){var c=[],d;for(d in b)$jscomp.owns(b,d)&&c.push(b[d]);return c}},\"es8\",\"es3\");\nvar typeMap$$module$build$src$core$registry=Object.create(null),TEST_ONLY$$module$build$src$core$registry={typeMap:typeMap$$module$build$src$core$registry},nameMap$$module$build$src$core$registry=Object.create(null),DEFAULT$$module$build$src$core$registry=\"default\",Type$$module$build$src$core$registry=class{constructor(a){this.name=a}toString(){return this.name}};Type$$module$build$src$core$registry.CONNECTION_CHECKER=new Type$$module$build$src$core$registry(\"connectionChecker\");\nType$$module$build$src$core$registry.CONNECTION_PREVIEWER=new Type$$module$build$src$core$registry(\"connectionPreviewer\");Type$$module$build$src$core$registry.CURSOR=new Type$$module$build$src$core$registry(\"cursor\");Type$$module$build$src$core$registry.EVENT=new Type$$module$build$src$core$registry(\"event\");Type$$module$build$src$core$registry.FIELD=new Type$$module$build$src$core$registry(\"field\");Type$$module$build$src$core$registry.INPUT=new Type$$module$build$src$core$registry(\"input\");\nType$$module$build$src$core$registry.RENDERER=new Type$$module$build$src$core$registry(\"renderer\");Type$$module$build$src$core$registry.TOOLBOX=new Type$$module$build$src$core$registry(\"toolbox\");Type$$module$build$src$core$registry.THEME=new Type$$module$build$src$core$registry(\"theme\");Type$$module$build$src$core$registry.TOOLBOX_ITEM=new Type$$module$build$src$core$registry(\"toolboxItem\");Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX=new Type$$module$build$src$core$registry(\"flyoutsVerticalToolbox\");\nType$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX=new Type$$module$build$src$core$registry(\"flyoutsHorizontalToolbox\");Type$$module$build$src$core$registry.FLYOUT_INFLATER=new Type$$module$build$src$core$registry(\"flyoutInflater\");Type$$module$build$src$core$registry.METRICS_MANAGER=new Type$$module$build$src$core$registry(\"metricsManager\");Type$$module$build$src$core$registry.BLOCK_DRAGGER=new Type$$module$build$src$core$registry(\"blockDragger\");\nType$$module$build$src$core$registry.SERIALIZER=new Type$$module$build$src$core$registry(\"serializer\");Type$$module$build$src$core$registry.ICON=new Type$$module$build$src$core$registry(\"icon\");Type$$module$build$src$core$registry.PASTER=new Type$$module$build$src$core$registry(\"paster\");Type$$module$build$src$core$registry.VARIABLE_MODEL=new Type$$module$build$src$core$registry(\"variableModel\");Type$$module$build$src$core$registry.VARIABLE_MAP=new Type$$module$build$src$core$registry(\"variableMap\");\nvar module$build$src$core$registry={DEFAULT:DEFAULT$$module$build$src$core$registry,TEST_ONLY:TEST_ONLY$$module$build$src$core$registry};module$build$src$core$registry.Type=Type$$module$build$src$core$registry;module$build$src$core$registry.getAllItems=getAllItems$$module$build$src$core$registry;module$build$src$core$registry.getClass=getClass$$module$build$src$core$registry;module$build$src$core$registry.getClassFromOptions=getClassFromOptions$$module$build$src$core$registry;\nmodule$build$src$core$registry.getObject=getObject$$module$build$src$core$registry;module$build$src$core$registry.hasItem=hasItem$$module$build$src$core$registry;module$build$src$core$registry.register=register$$module$build$src$core$registry;module$build$src$core$registry.unregister=unregister$$module$build$src$core$registry;var Blocks$$module$build$src$core$blocks=Object.create(null),module$build$src$core$blocks={Blocks:Blocks$$module$build$src$core$blocks};var LONGPRESS$$module$build$src$core$touch=750,TOUCH_ENABLED$$module$build$src$core$touch=\"ontouchstart\"in globalThis||!!(globalThis.document&&document.documentElement&&\"ontouchstart\"in document.documentElement)||!(!globalThis.navigator||!globalThis.navigator.maxTouchPoints&&!globalThis.navigator.msMaxTouchPoints),touchIdentifier_$$module$build$src$core$touch=null,TOUCH_MAP$$module$build$src$core$touch={mousedown:[\"pointerdown\"],mouseenter:[\"pointerenter\"],mouseleave:[\"pointerleave\"],mousemove:[\"pointermove\"],\nmouseout:[\"pointerout\"],mouseover:[\"pointerover\"],mouseup:[\"pointerup\",\"pointercancel\"],touchend:[\"pointerup\"],touchcancel:[\"pointercancel\"]},longPid_$$module$build$src$core$touch=0,module$build$src$core$touch={TOUCH_ENABLED:TOUCH_ENABLED$$module$build$src$core$touch,TOUCH_MAP:TOUCH_MAP$$module$build$src$core$touch};module$build$src$core$touch.checkTouchIdentifier=checkTouchIdentifier$$module$build$src$core$touch;module$build$src$core$touch.clearTouchIdentifier=clearTouchIdentifier$$module$build$src$core$touch;\nmodule$build$src$core$touch.getTouchIdentifierFromEvent=getTouchIdentifierFromEvent$$module$build$src$core$touch;module$build$src$core$touch.longStart=longStart$$module$build$src$core$touch;module$build$src$core$touch.longStop=longStop$$module$build$src$core$touch;module$build$src$core$touch.shouldHandleEvent=shouldHandleEvent$$module$build$src$core$touch;var rawUserAgent$$module$build$src$core$utils$useragent,isJavaFx$$module$build$src$core$utils$useragent,isWebKit$$module$build$src$core$utils$useragent,isGecko$$module$build$src$core$utils$useragent,isAndroid$$module$build$src$core$utils$useragent,isIPad$$module$build$src$core$utils$useragent,isIPhone$$module$build$src$core$utils$useragent,isMac$$module$build$src$core$utils$useragent,isTablet$$module$build$src$core$utils$useragent,isMobile$$module$build$src$core$utils$useragent;\n(function(a){function b(d){return c.includes(d.toUpperCase())}rawUserAgent$$module$build$src$core$utils$useragent=a;const c=rawUserAgent$$module$build$src$core$utils$useragent.toUpperCase();isJavaFx$$module$build$src$core$utils$useragent=b(\"JavaFX\");isWebKit$$module$build$src$core$utils$useragent=b(\"WebKit\");isGecko$$module$build$src$core$utils$useragent=b(\"Gecko\")&&!isWebKit$$module$build$src$core$utils$useragent;isAndroid$$module$build$src$core$utils$useragent=b(\"Android\");a=globalThis.navigator&&\nglobalThis.navigator.maxTouchPoints;isIPad$$module$build$src$core$utils$useragent=b(\"iPad\")||b(\"Macintosh\")&&a>0;isIPhone$$module$build$src$core$utils$useragent=b(\"iPhone\")&&!isIPad$$module$build$src$core$utils$useragent;isMac$$module$build$src$core$utils$useragent=b(\"Macintosh\");isTablet$$module$build$src$core$utils$useragent=isIPad$$module$build$src$core$utils$useragent||isAndroid$$module$build$src$core$utils$useragent&&!b(\"Mobile\")||b(\"Silk\");isMobile$$module$build$src$core$utils$useragent=!isTablet$$module$build$src$core$utils$useragent&&\n(isIPhone$$module$build$src$core$utils$useragent||isAndroid$$module$build$src$core$utils$useragent)})(globalThis.navigator&&globalThis.navigator.userAgent||\"\");\nvar raw$$module$build$src$core$utils$useragent=rawUserAgent$$module$build$src$core$utils$useragent,JavaFx$$module$build$src$core$utils$useragent=isJavaFx$$module$build$src$core$utils$useragent,GECKO$$module$build$src$core$utils$useragent=isGecko$$module$build$src$core$utils$useragent,ANDROID$$module$build$src$core$utils$useragent=isAndroid$$module$build$src$core$utils$useragent,IPAD$$module$build$src$core$utils$useragent=isIPad$$module$build$src$core$utils$useragent,IPHONE$$module$build$src$core$utils$useragent=\nisIPhone$$module$build$src$core$utils$useragent,MAC$$module$build$src$core$utils$useragent=isMac$$module$build$src$core$utils$useragent,MOBILE$$module$build$src$core$utils$useragent=isMobile$$module$build$src$core$utils$useragent,module$build$src$core$utils$useragent={ANDROID:ANDROID$$module$build$src$core$utils$useragent,GECKO:GECKO$$module$build$src$core$utils$useragent,IPAD:IPAD$$module$build$src$core$utils$useragent,IPHONE:IPHONE$$module$build$src$core$utils$useragent,JavaFx:JavaFx$$module$build$src$core$utils$useragent,\nMAC:MAC$$module$build$src$core$utils$useragent,MOBILE:MOBILE$$module$build$src$core$utils$useragent,raw:raw$$module$build$src$core$utils$useragent};var LINE_MODE_MULTIPLIER$$module$build$src$core$browser_events=40,PAGE_MODE_MULTIPLIER$$module$build$src$core$browser_events=125,module$build$src$core$browser_events={};module$build$src$core$browser_events.bind=bind$$module$build$src$core$browser_events;module$build$src$core$browser_events.conditionalBind=conditionalBind$$module$build$src$core$browser_events;module$build$src$core$browser_events.getScrollDeltaPixels=getScrollDeltaPixels$$module$build$src$core$browser_events;\nmodule$build$src$core$browser_events.isRightButton=isRightButton$$module$build$src$core$browser_events;module$build$src$core$browser_events.isTargetInput=isTargetInput$$module$build$src$core$browser_events;module$build$src$core$browser_events.mouseToSvg=mouseToSvg$$module$build$src$core$browser_events;module$build$src$core$browser_events.unbind=unbind$$module$build$src$core$browser_events;var EventType$$module$build$src$core$events$type;\n(function(a){a.BLOCK_CREATE=\"create\";a.BLOCK_DELETE=\"delete\";a.BLOCK_CHANGE=\"change\";a.BLOCK_FIELD_INTERMEDIATE_CHANGE=\"block_field_intermediate_change\";a.BLOCK_MOVE=\"move\";a.VAR_CREATE=\"var_create\";a.VAR_DELETE=\"var_delete\";a.VAR_RENAME=\"var_rename\";a.VAR_TYPE_CHANGE=\"var_type_change\";a.UI=\"ui\";a.BLOCK_DRAG=\"drag\";a.SELECTED=\"selected\";a.CLICK=\"click\";a.MARKER_MOVE=\"marker_move\";a.BUBBLE_OPEN=\"bubble_open\";a.TRASHCAN_OPEN=\"trashcan_open\";a.TOOLBOX_ITEM_SELECT=\"toolbox_item_select\";a.THEME_CHANGE=\n\"theme_change\";a.VIEWPORT_CHANGE=\"viewport_change\";a.COMMENT_CREATE=\"comment_create\";a.COMMENT_DELETE=\"comment_delete\";a.COMMENT_CHANGE=\"comment_change\";a.COMMENT_MOVE=\"comment_move\";a.COMMENT_RESIZE=\"comment_resize\";a.COMMENT_DRAG=\"comment_drag\";a.COMMENT_COLLAPSE=\"comment_collapse\";a.FINISHED_LOADING=\"finished_loading\"})(EventType$$module$build$src$core$events$type||(EventType$$module$build$src$core$events$type={}));\nvar BUMP_EVENTS$$module$build$src$core$events$type=[EventType$$module$build$src$core$events$type.BLOCK_CREATE,EventType$$module$build$src$core$events$type.BLOCK_MOVE,EventType$$module$build$src$core$events$type.COMMENT_CREATE,EventType$$module$build$src$core$events$type.COMMENT_MOVE],module$build$src$core$events$type={BUMP_EVENTS:BUMP_EVENTS$$module$build$src$core$events$type};module$build$src$core$events$type.EventType=EventType$$module$build$src$core$events$type;var soup$$module$build$src$core$utils$idgenerator=\"!#$%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",internal$$module$build$src$core$utils$idgenerator={genUid:()=>{const a=soup$$module$build$src$core$utils$idgenerator.length,b=[];for(let c=0;c<20;c++)b[c]=soup$$module$build$src$core$utils$idgenerator.charAt(Math.random()*a);return b.join(\"\")}},TEST_ONLY$$module$build$src$core$utils$idgenerator=internal$$module$build$src$core$utils$idgenerator,nextId$$module$build$src$core$utils$idgenerator=\n0,module$build$src$core$utils$idgenerator={TEST_ONLY:internal$$module$build$src$core$utils$idgenerator};module$build$src$core$utils$idgenerator.genUid=genUid$$module$build$src$core$utils$idgenerator;module$build$src$core$utils$idgenerator.getNextUniqueId=getNextUniqueId$$module$build$src$core$utils$idgenerator;var module$build$src$core$events$predicates={};module$build$src$core$events$predicates.isBlockChange=isBlockChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockCreate=isBlockCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockDelete=isBlockDelete$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockDrag=isBlockDrag$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isBlockFieldIntermediateChange=isBlockFieldIntermediateChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockMove=isBlockMove$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBubbleOpen=isBubbleOpen$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isClick=isClick$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isCommentChange=isCommentChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentCollapse=isCommentCollapse$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentCreate=isCommentCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentDelete=isCommentDelete$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isCommentDrag=isCommentDrag$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentMove=isCommentMove$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentResize=isCommentResize$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isFinishedLoading=isFinishedLoading$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isSelected=isSelected$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isThemeChange=isThemeChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isToolboxItemSelect=isToolboxItemSelect$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isTrashcanOpen=isTrashcanOpen$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isVarCreate=isVarCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isVarDelete=isVarDelete$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isVarRename=isVarRename$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isViewportChange=isViewportChange$$module$build$src$core$events$predicates;var group$$module$build$src$core$events$utils=\"\",recordUndo$$module$build$src$core$events$utils=!0,disabled$$module$build$src$core$events$utils=0,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils=\"ORPHANED_BLOCK\",FIRE_QUEUE$$module$build$src$core$events$utils=[],TEST_ONLY$$module$build$src$core$events$utils={FIRE_QUEUE:FIRE_QUEUE$$module$build$src$core$events$utils,enqueueEvent:enqueueEvent$$module$build$src$core$events$utils,fireNow:fireNow$$module$build$src$core$events$utils,fireInternal:fireInternal$$module$build$src$core$events$utils,\nsetGroupInternal:setGroupInternal$$module$build$src$core$events$utils},module$build$src$core$events$utils={TEST_ONLY:TEST_ONLY$$module$build$src$core$events$utils};module$build$src$core$events$utils.clearPendingUndo=clearPendingUndo$$module$build$src$core$events$utils;module$build$src$core$events$utils.disable=$.disable$$module$build$src$core$events$utils;module$build$src$core$events$utils.disableOrphans=disableOrphans$$module$build$src$core$events$utils;\nmodule$build$src$core$events$utils.enable=$.enable$$module$build$src$core$events$utils;module$build$src$core$events$utils.filter=filter$$module$build$src$core$events$utils;module$build$src$core$events$utils.fire=fire$$module$build$src$core$events$utils;module$build$src$core$events$utils.fromJson=fromJson$$module$build$src$core$events$utils;module$build$src$core$events$utils.get=get$$module$build$src$core$events$utils;module$build$src$core$events$utils.getDescendantIds=getDescendantIds$$module$build$src$core$events$utils;\nmodule$build$src$core$events$utils.getGroup=$.getGroup$$module$build$src$core$events$utils;module$build$src$core$events$utils.getRecordUndo=getRecordUndo$$module$build$src$core$events$utils;module$build$src$core$events$utils.isEnabled=isEnabled$$module$build$src$core$events$utils;module$build$src$core$events$utils.setGroup=$.setGroup$$module$build$src$core$events$utils;module$build$src$core$events$utils.setRecordUndo=$.setRecordUndo$$module$build$src$core$events$utils;var SVG_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/2000/svg\",HTML_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/1999/xhtml\",XLINK_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/1999/xlink\",NodeType$$module$build$src$core$utils$dom;(function(a){a[a.ELEMENT_NODE=1]=\"ELEMENT_NODE\";a[a.TEXT_NODE=3]=\"TEXT_NODE\";a[a.COMMENT_NODE=8]=\"COMMENT_NODE\"})(NodeType$$module$build$src$core$utils$dom||(NodeType$$module$build$src$core$utils$dom={}));\nvar cacheWidths$$module$build$src$core$utils$dom=null,cacheReference$$module$build$src$core$utils$dom=0,canvasContext$$module$build$src$core$utils$dom=null,module$build$src$core$utils$dom={HTML_NS:HTML_NS$$module$build$src$core$utils$dom};module$build$src$core$utils$dom.NodeType=NodeType$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.SVG_NS=SVG_NS$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.XLINK_NS=XLINK_NS$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.addClass=addClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.createSvgElement=createSvgElement$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getFastTextWidth=getFastTextWidth$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getFastTextWidthWithSizeString=getFastTextWidthWithSizeString$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getTextWidth=getTextWidth$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.hasClass=hasClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.insertAfter=insertAfter$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.measureFontMetrics=measureFontMetrics$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeClass=removeClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeClasses=removeClasses$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeNode=removeNode$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.setCssTransform=setCssTransform$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.startTextWidthCache=startTextWidthCache$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.stopTextWidthCache=stopTextWidthCache$$module$build$src$core$utils$dom;var FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser=class{static findFocusedNode(a){var b=a.getRootFocusableNode();if(!b.canBeFocused())return null;var c=b.getFocusableElement();if(hasClass$$module$build$src$core$utils$dom(c,FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME)||hasClass$$module$build$src$core$utils$dom(c,FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME))return b;\nb=c.querySelector(this.ACTIVE_FOCUS_NODE_CSS_SELECTOR);if(b instanceof HTMLElement||b instanceof SVGElement)if(b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(b,a))return b;c=c.querySelector(this.PASSIVE_FOCUS_NODE_CSS_SELECTOR);if(c instanceof HTMLElement||c instanceof SVGElement)if(a=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(c,a))return a;return null}static findFocusableNodeFor(a,b){if(!a.id||\na.id===\"null\"||b.getNestedTrees().map(e=>FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(a,e)).findIndex(e=>!!e)!==-1)return null;var c=b.getRootFocusableNode();if(c.canBeFocused()&&a===c.getFocusableElement())return c;var d;if(c=(d=b.lookUpFocusableNode(a.id))!=null?d:null)return c;d=a.parentElement;return!c&&d?FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(d,b):null}};\nFocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME=\"blocklyActiveFocus\";FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME=\"blocklyPassiveFocus\";FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_FOCUS_NODE_CSS_SELECTOR=`.${FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME}`;\nFocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_FOCUS_NODE_CSS_SELECTOR=`.${FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME}`;var module$build$src$core$utils$focusable_tree_traverser={};module$build$src$core$utils$focusable_tree_traverser.FocusableTreeTraverser=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser;var TreeRegistration$$module$build$src$core$focus_manager=class{constructor(a,b){this.tree=a;this.rootShouldBeAutoTabbable=b}},FocusManager$$module$build$src$core$focus_manager=class{constructor(a){this.previouslyFocusedNode=this.focusedNode=null;this.registeredTrees=[];this.isUpdatingFocusedNode=this.recentlyLostAllFocus=this.lockFocusStateChanges=this.currentlyHoldsEphemeralFocus=!1;const b=c=>{if(!this.isUpdatingFocusedNode){this.recentlyLostAllFocus=!c;var d=null;if(c instanceof HTMLElement||\nc instanceof SVGElement)for(var e of this.registeredTrees)if(d=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(c,e.tree))break;if(d&&d.canBeFocused()){c=d.getFocusableTree();let f;e=(f=this.focusedNode)==null?void 0:f.getFocusableTree();d===c.getRootFocusableNode()&&c!==e?this.focusTree(c):this.focusNode(d)}else this.defocusCurrentFocusedNode()}};a(\"focusin\",c=>{c instanceof FocusEvent&&b(document.activeElement)});a(\"focusout\",c=>{c instanceof FocusEvent&&\nb(c.relatedTarget)})}registerTree(a,b=!1){this.ensureManagerIsUnlocked();if(this.isRegistered(a))throw Error(`Attempted to re-register already registered tree: ${a}.`);this.registeredTrees.push(new TreeRegistration$$module$build$src$core$focus_manager(a,b));const c=a.getRootFocusableNode().getFocusableElement();if(!c.id||c.id===\"null\")throw Error(\"Attempting to register a tree with a root element that has an \"+`invalid ID: ${a}.`);b&&(c.tabIndex=0)}isRegistered(a){return!!this.lookUpRegistration(a)}lookUpRegistration(a){let b;\nreturn(b=this.registeredTrees.find(c=>c.tree===a))!=null?b:null}unregisterTree(a){this.ensureManagerIsUnlocked();if(!this.isRegistered(a))throw Error(`Attempted to unregister not registered tree: ${a}.`);var b=this.registeredTrees.findIndex(e=>e.tree===a);const c=this.registeredTrees[b];this.registeredTrees.splice(b,1);b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(a);const d=a.getRootFocusableNode();b&&this.removeHighlight(b);this.focusedNode!==b&&\nthis.focusedNode!==d||this.updateFocusedNode(null);this.removeHighlight(d);c.rootShouldBeAutoTabbable&&a.getRootFocusableNode().getFocusableElement().removeAttribute(\"tabindex\")}getFocusedTree(){let a,b;return(b=(a=this.focusedNode)==null?void 0:a.getFocusableTree())!=null?b:null}getFocusedNode(){return this.focusedNode}focusTree(a){this.ensureManagerIsUnlocked();if(!this.isRegistered(a))throw Error(`Attempted to focus unregistered tree: ${a}.`);const b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(a),\nc=a.getRestoredFocusableNode(b);a=a.getRootFocusableNode();let d;this.focusNode((d=c!=null?c:b)!=null?d:a)}focusNode(a){this.ensureManagerIsUnlocked();const b=!this.currentlyHoldsEphemeralFocus;b&&(this.isUpdatingFocusedNode=!0);var c,d=((c=this.focusedNode)==null?void 0:c.getFocusableElement())!==document.activeElement;if(this.focusedNode!==a||d)if(a.canBeFocused()){c=a.getFocusableTree();if(!this.isRegistered(c))throw Error(`Attempted to focus unregistered node: ${a}.`);d=a.getFocusableElement();\nd.id&&d.id!==\"null\"||console.warn(\"Trying to focus a node that has an invalid ID.\");var e=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(d,c);d=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(c);var f=a;if(e!==a){f=c.getRestoredFocusableNode(d);a=c.getRootFocusableNode();var g;f=(g=f!=null?f:d)!=null?g:a}a=this.focusedNode;g=a==null?void 0:a.getFocusableTree();a&&this.passivelyFocusNode(a,c);c=c.getRootFocusableNode();\nd&&this.removeHighlight(d);c!==f&&this.removeHighlight(c);this.currentlyHoldsEphemeralFocus||this.activelyFocusNode(f,g!=null?g:null);this.updateFocusedNode(f)}else console.warn(\"Trying to focus a node that can't be focused.\");b&&(this.isUpdatingFocusedNode=!1)}takeEphemeralFocus(a){this.ensureManagerIsUnlocked();if(this.currentlyHoldsEphemeralFocus)throw Error(\"Attempted to take ephemeral focus when it's already held, \"+`with new element: ${a}.`);this.currentlyHoldsEphemeralFocus=!0;this.focusedNode&&\nthis.passivelyFocusNode(this.focusedNode,null);a.focus({preventScroll:!0});let b=!1;return()=>{if(b)throw Error(\"Attempted to finish ephemeral focus twice for element: \"+`${a}.`);b=!0;this.currentlyHoldsEphemeralFocus=!1;if(this.focusedNode){this.activelyFocusNode(this.focusedNode,null);const c=this.focusedNode;setTimeout(()=>{!this.focusedNode&&this.previouslyFocusedNode===c&&this.recentlyLostAllFocus&&this.focusNode(c)},0)}}}ephemeralFocusTaken(){return this.currentlyHoldsEphemeralFocus}ensureManagerIsUnlocked(){if(this.lockFocusStateChanges)throw Error(\"FocusManager state changes cannot happen in a tree/node focus/blur callback.\");\n}updateFocusedNode(a){this.previouslyFocusedNode=this.focusedNode;this.focusedNode=a}defocusCurrentFocusedNode(){this.focusedNode&&!this.currentlyHoldsEphemeralFocus&&(this.passivelyFocusNode(this.focusedNode,null),this.updateFocusedNode(null))}activelyFocusNode(a,b){this.lockFocusStateChanges=!0;const c=a.getFocusableTree(),d=a.getFocusableElement();let e;const f=(e=this.lookUpRegistration(c))==null?void 0:e.rootShouldBeAutoTabbable;c!==b&&(c.onTreeFocus(a,b),f&&(c.getRootFocusableNode().getFocusableElement().tabIndex=\n-1));a.onNodeFocus();this.lockFocusStateChanges=!1;f&&a===c.getRootFocusableNode()||d.hasAttribute(\"tabindex\")||(d.tabIndex=-1);this.setNodeToVisualActiveFocus(a);d.focus({preventScroll:!0})}passivelyFocusNode(a,b){this.lockFocusStateChanges=!0;const c=a.getFocusableTree();if(c!==b){c.onTreeBlur(b);let d;if((d=this.lookUpRegistration(c))==null?0:d.rootShouldBeAutoTabbable)c.getRootFocusableNode().getFocusableElement().tabIndex=0}a.onNodeBlur();this.lockFocusStateChanges=!1;c!==b&&this.setNodeToVisualPassiveFocus(a)}setNodeToVisualActiveFocus(a){a=\na.getFocusableElement();addClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}setNodeToVisualPassiveFocus(a){a=a.getFocusableElement();removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);addClass$$module$build$src$core$utils$dom(a,\nFocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}removeHighlight(a){a=a.getFocusableElement();removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}static getFocusManager(){FocusManager$$module$build$src$core$focus_manager.focusManager||(FocusManager$$module$build$src$core$focus_manager.focusManager=\nnew FocusManager$$module$build$src$core$focus_manager(document.addEventListener));return FocusManager$$module$build$src$core$focus_manager.focusManager}};FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME=\"blocklyActiveFocus\";FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME=\"blocklyPassiveFocus\";FocusManager$$module$build$src$core$focus_manager.focusManager=null;var module$build$src$core$focus_manager={};\nmodule$build$src$core$focus_manager.FocusManager=FocusManager$$module$build$src$core$focus_manager;module$build$src$core$focus_manager.getFocusManager=$.getFocusManager$$module$build$src$core$focus_manager;var module$build$src$core$interfaces$i_focusable_node={};module$build$src$core$interfaces$i_focusable_node.isFocusableNode=isFocusableNode$$module$build$src$core$interfaces$i_focusable_node;var module$build$src$core$interfaces$i_selectable={};module$build$src$core$interfaces$i_selectable.isSelectable=isSelectable$$module$build$src$core$interfaces$i_selectable;var module$build$src$core$utils$object={};module$build$src$core$utils$object.deepMerge=deepMerge$$module$build$src$core$utils$object;var ShortcutRegistry$$module$build$src$core$shortcut_registry=class{constructor(){this.shortcuts=new Map;this.keyMap=new Map;this.reset()}reset(){this.shortcuts.clear();this.keyMap.clear()}register(a,b){if(this.shortcuts.get(a.name)&&!b)throw Error(`Shortcut named \"${a.name}\" already exists.`);this.shortcuts.set(a.name,a);b=a.keyCodes;if(b==null?0:b.length)for(const c of b)this.addKeyMapping(c,a.name,!!a.allowCollision)}unregister(a){if(!this.shortcuts.get(a))return console.warn(`Keyboard shortcut named \"${a}\" not found.`),\n!1;this.removeAllKeyMappings(a);this.shortcuts.delete(a);return!0}addKeyMapping(a,b,c){a=`${a}`;const d=this.keyMap.get(a);if(d&&!c)throw Error(`Shortcut named \"${b}\" collides with shortcuts \"${d}\"`);d&&c?d.unshift(b):this.keyMap.set(a,[b])}removeKeyMapping(a,b,c){const d=this.keyMap.get(a);if(!d)return c||console.warn(`No keyboard shortcut named \"${b}\" registered with key code \"${a}\"`),!1;const e=d.indexOf(b);if(e>-1)return d.splice(e,1),d.length===0&&this.keyMap.delete(a),!0;c||console.warn(`No keyboard shortcut named \"${b}\" registered with key code \"${a}\"`);\nreturn!1}removeAllKeyMappings(a){for(const b of this.keyMap.keys())this.removeKeyMapping(b,a,!0)}setKeyMap(a){this.keyMap.clear();for(const b in a)this.keyMap.set(b,a[b])}getKeyMap(){const a=Object.create(null);for(const [b,c]of this.keyMap)a[b]=c;return a}getRegistry(){const a=Object.create(null);for(const [b,c]of this.shortcuts)a[b]=c;return deepMerge$$module$build$src$core$utils$object(Object.create(null),a)}onKeyDown(a,b){var c=this.serializeKeyEvent(b);c=this.getShortcutNamesByKeyCode(c);if(!c)return!1;\nfor(const d of c){c=this.shortcuts.get(d);let e;if(!c||c.preconditionFn&&!c.preconditionFn(a,{focusedNode:(e=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode())!=null?e:void 0}))continue;let f,g,h;if((g=(f=c).callback)==null?0:g.call(f,a,b,c,{focusedNode:(h=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode())!=null?h:void 0}))return!0}return!1}getShortcutNamesByKeyCode(a){let b;return((b=this.keyMap.get(a))==null?void 0:b.slice())||[]}getKeyCodesByShortcutName(a){const b=\n[];for(const [c,d]of this.keyMap)d.indexOf(a)>-1&&b.push(c);return b}serializeKeyEvent(a){let b=\"\";for(const c in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys)a.getModifierState(c)&&(b!==\"\"&&(b+=\"+\"),b+=c);b!==\"\"&&a.keyCode?b+=\"+\"+a.keyCode:a.keyCode&&(b=String(a.keyCode));return b}checkModifiers(a){for(const b of a)if(!(b in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys))throw Error(b+\" is not a valid modifier key.\");}createSerializedKey(a,b){let c=\n\"\";if(b){this.checkModifiers(b);for(const d in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys)b.includes(ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys[d])&&(c!==\"\"&&(c+=\"+\"),c+=d)}c!==\"\"&&a?c+=\"+\"+a:a&&(c=`${a}`);return c}};ShortcutRegistry$$module$build$src$core$shortcut_registry.registry=new ShortcutRegistry$$module$build$src$core$shortcut_registry;\n(function(a){a=a.modifierKeys||(a.modifierKeys={});a[a.Shift=16]=\"Shift\";a[a.Control=17]=\"Control\";a[a.Alt=18]=\"Alt\";a[a.Meta=91]=\"Meta\"})(ShortcutRegistry$$module$build$src$core$shortcut_registry||(ShortcutRegistry$$module$build$src$core$shortcut_registry={}));var module$build$src$core$shortcut_registry={};module$build$src$core$shortcut_registry.ShortcutRegistry=ShortcutRegistry$$module$build$src$core$shortcut_registry;var WorkspaceDB_$$module$build$src$core$common=Object.create(null),mainWorkspace$$module$build$src$core$common,parentContainer$$module$build$src$core$common,draggingConnections$$module$build$src$core$common=[],TEST_ONLY$$module$build$src$core$common={defineBlocksWithJsonArrayInternal:defineBlocksWithJsonArrayInternal$$module$build$src$core$common},module$build$src$core$common={TEST_ONLY:TEST_ONLY$$module$build$src$core$common};module$build$src$core$common.createBlockDefinitionsFromJsonArray=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common;\nmodule$build$src$core$common.defineBlocks=$.defineBlocks$$module$build$src$core$common;module$build$src$core$common.defineBlocksWithJsonArray=defineBlocksWithJsonArray$$module$build$src$core$common;module$build$src$core$common.draggingConnections=draggingConnections$$module$build$src$core$common;module$build$src$core$common.fireSelectedEvent=fireSelectedEvent$$module$build$src$core$common;module$build$src$core$common.getAllWorkspaces=getAllWorkspaces$$module$build$src$core$common;\nmodule$build$src$core$common.getBlockTypeCounts=getBlockTypeCounts$$module$build$src$core$common;module$build$src$core$common.getMainWorkspace=getMainWorkspace$$module$build$src$core$common;module$build$src$core$common.getParentContainer=getParentContainer$$module$build$src$core$common;module$build$src$core$common.getSelected=getSelected$$module$build$src$core$common;module$build$src$core$common.getWorkspaceById=getWorkspaceById$$module$build$src$core$common;\nmodule$build$src$core$common.globalShortcutHandler=globalShortcutHandler$$module$build$src$core$common;module$build$src$core$common.registerWorkspace=registerWorkspace$$module$build$src$core$common;module$build$src$core$common.setMainWorkspace=setMainWorkspace$$module$build$src$core$common;module$build$src$core$common.setParentContainer=setParentContainer$$module$build$src$core$common;module$build$src$core$common.setSelected=setSelected$$module$build$src$core$common;\nmodule$build$src$core$common.svgResize=svgResize$$module$build$src$core$common;module$build$src$core$common.unregisterWorkpace=unregisterWorkpace$$module$build$src$core$common;var Abstract$$module$build$src$core$events$events_abstract=class{constructor(){this.workspaceId=void 0;this.isUiEvent=!1;this.type=\"\";this.group=$.getGroup$$module$build$src$core$events$utils();this.recordUndo=getRecordUndo$$module$build$src$core$events$utils()}toJson(){return{type:this.type,group:this.group}}static fromJson(a,b,c){c.isBlank=!1;c.group=a.group||\"\";c.workspaceId=b.id;return c}isNull(){return!1}run(a){}getEventWorkspace_(){let a;this.workspaceId&&(a=getWorkspaceById$$module$build$src$core$common(this.workspaceId));\nif(!a)throw Error(\"Workspace is null. Event must have been generated from real Blockly events.\");return a}},module$build$src$core$events$events_abstract={};module$build$src$core$events$events_abstract.Abstract=Abstract$$module$build$src$core$events$events_abstract;var UiBase$$module$build$src$core$events$events_ui_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.recordUndo=!1;this.isUiEvent=!0;this.isBlank=typeof a===\"undefined\";this.workspaceId=a?a:\"\"}},module$build$src$core$events$events_ui_base={};module$build$src$core$events$events_ui_base.UiBase=UiBase$$module$build$src$core$events$events_ui_base;var Click$$module$build$src$core$events$events_click=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b,c){b=a?a.workspace.id:b;b===null&&(b=void 0);super(b);this.type=EventType$$module$build$src$core$events$type.CLICK;this.blockId=a?a.id:void 0;this.targetType=c}toJson(){const a=super.toJson();if(!this.targetType)throw Error(\"The click target type is undefined. Either pass a block to the constructor, or call fromJson\");a.targetType=this.targetType;a.blockId=this.blockId;\nreturn a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new Click$$module$build$src$core$events$events_click);b.targetType=a.targetType;b.blockId=a.blockId;return b}},ClickTarget$$module$build$src$core$events$events_click;(function(a){a.BLOCK=\"block\";a.WORKSPACE=\"workspace\";a.ZOOM_CONTROLS=\"zoom_controls\"})(ClickTarget$$module$build$src$core$events$events_click||(ClickTarget$$module$build$src$core$events$events_click={}));\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.CLICK,Click$$module$build$src$core$events$events_click);var module$build$src$core$events$events_click={};module$build$src$core$events$events_click.Click=Click$$module$build$src$core$events$events_click;module$build$src$core$events$events_click.ClickTarget=ClickTarget$$module$build$src$core$events$events_click;var module$build$src$core$utils$array={};module$build$src$core$utils$array.removeElem=removeElem$$module$build$src$core$utils$array;var Capability$$module$build$src$core$component_manager=class{constructor(a){this.name=a}toString(){return this.name}};Capability$$module$build$src$core$component_manager.POSITIONABLE=new Capability$$module$build$src$core$component_manager(\"positionable\");Capability$$module$build$src$core$component_manager.DRAG_TARGET=new Capability$$module$build$src$core$component_manager(\"drag_target\");Capability$$module$build$src$core$component_manager.DELETE_AREA=new Capability$$module$build$src$core$component_manager(\"delete_area\");\nCapability$$module$build$src$core$component_manager.AUTOHIDEABLE=new Capability$$module$build$src$core$component_manager(\"autohideable\");\nvar ComponentManager$$module$build$src$core$component_manager=class{constructor(){this.componentData=new Map;this.capabilityToComponentIds=new Map}addComponent(a,b){const c=a.component.id;if(!b&&this.componentData.has(c)){var d;throw Error('Plugin \"'+c+'\" with capabilities \"'+((d=this.componentData.get(c))==null?void 0:d.capabilities)+'\" already added.');}this.componentData.set(c,a);b=[];for(d=0;d\n{d.push(this.componentData.get(e))});d.sort(function(e,f){return e.weight-f.weight});d.forEach(function(e){c.push(e.component)})}else a.forEach(d=>{c.push(this.componentData.get(d).component)});return c}};ComponentManager$$module$build$src$core$component_manager.Capability=Capability$$module$build$src$core$component_manager;\n(function(a){a=a.ComponentWeight||(a.ComponentWeight={});a[a.TOOLBOX_WEIGHT=0]=\"TOOLBOX_WEIGHT\";a[a.FLYOUT_WEIGHT=1]=\"FLYOUT_WEIGHT\";a[a.TRASHCAN_WEIGHT=2]=\"TRASHCAN_WEIGHT\";a[a.ZOOM_CONTROLS_WEIGHT=3]=\"ZOOM_CONTROLS_WEIGHT\"})(ComponentManager$$module$build$src$core$component_manager||(ComponentManager$$module$build$src$core$component_manager={}));\nvar ComponentWeight$$module$build$src$core$component_manager=ComponentManager$$module$build$src$core$component_manager.ComponentWeight,module$build$src$core$component_manager={};module$build$src$core$component_manager.ComponentManager=ComponentManager$$module$build$src$core$component_manager;module$build$src$core$component_manager.ComponentWeight=ComponentWeight$$module$build$src$core$component_manager;var injected$$module$build$src$core$css=!1,content$$module$build$src$core$css='\\n.blocklySvg {\\n background-color: #fff;\\n outline: none;\\n overflow: hidden; /* IE overflows by default. */\\n position: absolute;\\n display: block;\\n}\\n\\n.blocklyWidgetDiv {\\n display: none;\\n position: absolute;\\n z-index: 99999; /* big value for bootstrap3 compatibility */\\n}\\n\\n.injectionDiv {\\n height: 100%;\\n position: relative;\\n overflow: hidden; /* So blocks in drag surface disappear at edges */\\n touch-action: none;\\n user-select: none;\\n -webkit-user-select: none;\\n}\\n\\n.blocklyBlockCanvas.blocklyCanvasTransitioning,\\n.blocklyBubbleCanvas.blocklyCanvasTransitioning {\\n transition: transform .5s;\\n}\\n\\n.blocklyEmboss {\\n filter: var(--blocklyEmbossFilter);\\n}\\n\\n.blocklyTooltipDiv {\\n background-color: #ffffc7;\\n border: 1px solid #ddc;\\n box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15);\\n color: #000;\\n display: none;\\n font: 9pt sans-serif;\\n opacity: .9;\\n padding: 2px;\\n position: absolute;\\n z-index: 100000; /* big value for bootstrap3 compatibility */\\n}\\n\\n.blocklyDropDownDiv {\\n position: absolute;\\n left: 0;\\n top: 0;\\n z-index: 1000;\\n display: none;\\n border: 1px solid;\\n border-color: #dadce0;\\n background-color: #fff;\\n border-radius: 2px;\\n padding: 4px;\\n box-shadow: 0 0 3px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownDiv:focus {\\n box-shadow: 0 0 6px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownContent {\\n max-height: 300px; /* @todo: spec for maximum height. */\\n}\\n\\n.blocklyDropDownArrow {\\n position: absolute;\\n left: 0;\\n top: 0;\\n width: 16px;\\n height: 16px;\\n z-index: -1;\\n background-color: inherit;\\n border-color: inherit;\\n border-top: 1px solid;\\n border-left: 1px solid;\\n border-top-left-radius: 4px;\\n border-color: inherit;\\n}\\n\\n.blocklyHighlighted>.blocklyPath {\\n filter: var(--blocklyEmbossFilter);\\n}\\n\\n.blocklyHighlightedConnectionPath {\\n fill: none;\\n stroke: #fc3;\\n stroke-width: 4px;\\n}\\n\\n.blocklyPathLight {\\n fill: none;\\n stroke-linecap: round;\\n stroke-width: 1;\\n}\\n\\n.blocklySelected>.blocklyPathLight {\\n display: none;\\n}\\n\\n.blocklyDraggable {\\n cursor: grab;\\n cursor: -webkit-grab;\\n}\\n\\n.blocklyDragging {\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n /* Drag surface disables events to not block the toolbox, so we have to\\n * reenable them here for the cursor values to work. */\\n pointer-events: auto;\\n}\\n\\n /* Changes cursor on mouse down. Not effective in Firefox because of\\n https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */\\n.blocklyDraggable:active {\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n}\\n\\n.blocklyDragging.blocklyDraggingDelete,\\n.blocklyDragging.blocklyDraggingDelete .blocklyField {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyDragging>.blocklyPath,\\n.blocklyDragging>.blocklyPathLight {\\n fill-opacity: .8;\\n stroke-opacity: .8;\\n}\\n\\n.blocklyDragging>.blocklyPathDark {\\n display: none;\\n}\\n\\n.blocklyDisabledPattern>.blocklyPath {\\n fill: var(--blocklyDisabledPattern);\\n fill-opacity: .5;\\n stroke-opacity: .5;\\n}\\n\\n.blocklyDisabled>.blocklyPathLight,\\n.blocklyDisabled>.blocklyPathDark {\\n display: none;\\n}\\n\\n.blocklyInsertionMarker>.blocklyPath,\\n.blocklyInsertionMarker>.blocklyPathLight,\\n.blocklyInsertionMarker>.blocklyPathDark {\\n fill-opacity: .2;\\n stroke: none;\\n}\\n\\n.blocklyNonEditableField>text {\\n pointer-events: none;\\n}\\n\\n.blocklyFlyout {\\n position: absolute;\\n z-index: 20;\\n}\\n\\n.blocklyText text {\\n cursor: default;\\n}\\n\\n/*\\n Don\\'t allow users to select text. It gets annoying when trying to\\n drag a block and selected text moves instead.\\n*/\\n.blocklySvg text {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n cursor: inherit;\\n}\\n\\n.blocklyIconGroup {\\n cursor: default;\\n}\\n\\n.blocklyIconGroup:not(:hover):not(:focus),\\n.blocklyIconGroupReadonly {\\n opacity: .6;\\n}\\n\\n.blocklyIconShape {\\n fill: #00f;\\n stroke: #fff;\\n stroke-width: 1px;\\n}\\n\\n.blocklyIconSymbol {\\n fill: #fff;\\n}\\n\\n.blocklyMinimalBody {\\n margin: 0;\\n padding: 0;\\n height: 100%;\\n}\\n\\n.blocklyHtmlInput {\\n border: none;\\n border-radius: 4px;\\n height: 100%;\\n margin: 0;\\n outline: none;\\n padding: 0;\\n width: 100%;\\n text-align: center;\\n display: block;\\n box-sizing: border-box;\\n}\\n\\n/* Remove the increase and decrease arrows on the field number editor */\\ninput.blocklyHtmlInput[type=number]::-webkit-inner-spin-button,\\ninput.blocklyHtmlInput[type=number]::-webkit-outer-spin-button {\\n -webkit-appearance: none;\\n margin: 0;\\n}\\n\\ninput[type=number] {\\n -moz-appearance: textfield;\\n}\\n\\n.blocklyMainBackground {\\n stroke-width: 1;\\n stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */\\n}\\n\\n.blocklyMutatorBackground {\\n fill: #fff;\\n stroke: #ddd;\\n stroke-width: 1;\\n}\\n\\n.blocklyFlyoutBackground {\\n fill: #ddd;\\n fill-opacity: .8;\\n}\\n\\n.blocklyMainWorkspaceScrollbar {\\n z-index: 20;\\n}\\n\\n.blocklyFlyoutScrollbar {\\n z-index: 30;\\n}\\n\\n.blocklyScrollbarHorizontal,\\n.blocklyScrollbarVertical {\\n position: absolute;\\n outline: none;\\n}\\n\\n.blocklyScrollbarBackground {\\n opacity: 0;\\n pointer-events: none;\\n}\\n\\n.blocklyScrollbarHandle {\\n fill: #ccc;\\n}\\n\\n.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,\\n.blocklyScrollbarHandle:hover {\\n fill: #bbb;\\n}\\n\\n/* Darken flyout scrollbars due to being on a grey background. */\\n/* By contrast, workspace scrollbars are on a white background. */\\n.blocklyFlyout .blocklyScrollbarHandle {\\n fill: #bbb;\\n}\\n\\n.blocklyFlyout .blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,\\n.blocklyFlyout .blocklyScrollbarHandle:hover {\\n fill: #aaa;\\n}\\n\\n.blocklyInvalidInput {\\n background: #faa;\\n}\\n\\n.blocklyVerticalMarker {\\n stroke-width: 3px;\\n fill: rgba(255,255,255,.5);\\n pointer-events: none;\\n}\\n\\n.blocklyComputeCanvas {\\n position: absolute;\\n width: 0;\\n height: 0;\\n}\\n\\n.blocklyNoPointerEvents {\\n pointer-events: none;\\n}\\n\\n.blocklyContextMenu {\\n border-radius: 4px;\\n max-height: 100%;\\n}\\n\\n.blocklyDropdownMenu {\\n border-radius: 2px;\\n padding: 0 !important;\\n}\\n\\n.blocklyDropdownMenu .blocklyMenuItem {\\n /* 28px on the left for icon or checkbox. */\\n padding-left: 28px;\\n}\\n\\n/* BiDi override for the resting state. */\\n.blocklyDropdownMenu .blocklyMenuItemRtl {\\n /* Flip left/right padding for BiDi. */\\n padding-left: 5px;\\n padding-right: 28px;\\n}\\n\\n.blocklyWidgetDiv .blocklyMenu {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background: #fff;\\n border: 1px solid transparent;\\n box-shadow: 0 0 3px 1px rgba(0,0,0,.3);\\n font: normal 13px Arial, sans-serif;\\n margin: 0;\\n outline: none;\\n padding: 4px 0;\\n position: absolute;\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 100%;\\n z-index: 20000; /* Arbitrary, but some apps depend on it... */\\n}\\n\\n.blocklyWidgetDiv .blocklyMenu:focus {\\n box-shadow: 0 0 6px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownDiv .blocklyMenu {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background: inherit; /* Compatibility with gapi, reset from goog-menu */\\n border: inherit; /* Compatibility with gapi, reset from goog-menu */\\n font: normal 13px \"Helvetica Neue\", Helvetica, sans-serif;\\n outline: none;\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 100%;\\n z-index: 20000; /* Arbitrary, but some apps depend on it... */\\n}\\n\\n/* State: resting. */\\n.blocklyMenuItem {\\n border: none;\\n color: #000;\\n cursor: pointer;\\n list-style: none;\\n margin: 0;\\n /* 7em on the right for shortcut. */\\n min-width: 7em;\\n padding: 6px 15px;\\n white-space: nowrap;\\n}\\n\\n/* State: disabled. */\\n.blocklyMenuItemDisabled {\\n color: #ccc;\\n cursor: inherit;\\n}\\n\\n/* State: hover. */\\n.blocklyMenuItemHighlight {\\n background-color: rgba(0,0,0,.1);\\n}\\n\\n/* State: selected/checked. */\\n.blocklyMenuItemCheckbox {\\n height: 16px;\\n position: absolute;\\n width: 16px;\\n}\\n\\n.blocklyMenuItemSelected .blocklyMenuItemCheckbox {\\n background: url(<<>>/sprites.png) no-repeat -48px -16px;\\n float: left;\\n margin-left: -24px;\\n position: static; /* Scroll with the menu. */\\n}\\n\\n.blocklyMenuItemRtl .blocklyMenuItemCheckbox {\\n float: right;\\n margin-right: -24px;\\n}\\n\\n.blocklyMenuSeparator {\\n background-color: #ccc;\\n height: 1px;\\n border: 0;\\n margin-left: 4px;\\n margin-right: 4px;\\n}\\n\\n.blocklyBlockDragSurface, .blocklyAnimationLayer {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n overflow: visible !important;\\n z-index: 80;\\n pointer-events: none;\\n}\\n\\n.blocklyField {\\n cursor: default;\\n}\\n\\n.blocklyInputField {\\n cursor: text;\\n}\\n\\n.blocklyDragging .blocklyField,\\n.blocklyDragging .blocklyIconGroup {\\n cursor: grabbing;\\n}\\n\\n.blocklyActiveFocus:is(\\n .blocklyFlyout,\\n .blocklyWorkspace,\\n .blocklyField,\\n .blocklyPath,\\n .blocklyHighlightedConnectionPath,\\n .blocklyComment,\\n .blocklyBubble,\\n .blocklyIconGroup,\\n .blocklyTextarea\\n) {\\n outline: none;\\n}\\n',\nmodule$build$src$core$css={};module$build$src$core$css.inject=inject$$module$build$src$core$css;module$build$src$core$css.register=register$$module$build$src$core$css;var Coordinate$$module$build$src$core$utils$coordinate=class{constructor(a,b){this.x=a;this.y=b}clone(){return new Coordinate$$module$build$src$core$utils$coordinate(this.x,this.y)}scale(a){this.x*=a;this.y*=a;return this}translate(a,b){this.x+=a;this.y+=b;return this}static equals(a,b){return a===b?!0:a&&b?a.x===b.x&&a.y===b.y:!1}static distance(a,b){const c=a.x-b.x;a=a.y-b.y;return Math.sqrt(c*c+a*a)}static magnitude(a){return Math.sqrt(a.x*a.x+a.y*a.y)}static difference(a,b){return new Coordinate$$module$build$src$core$utils$coordinate(a.x-\nb.x,a.y-b.y)}static sum(a,b){return new Coordinate$$module$build$src$core$utils$coordinate(a.x+b.x,a.y+b.y)}},module$build$src$core$utils$coordinate={};module$build$src$core$utils$coordinate.Coordinate=Coordinate$$module$build$src$core$utils$coordinate;var Svg$$module$build$src$core$utils$svg=class{constructor(a){this.tagName=a}toString(){return this.tagName}};Svg$$module$build$src$core$utils$svg.ANIMATE=new Svg$$module$build$src$core$utils$svg(\"animate\");Svg$$module$build$src$core$utils$svg.CIRCLE=new Svg$$module$build$src$core$utils$svg(\"circle\");Svg$$module$build$src$core$utils$svg.CLIPPATH=new Svg$$module$build$src$core$utils$svg(\"clipPath\");Svg$$module$build$src$core$utils$svg.DEFS=new Svg$$module$build$src$core$utils$svg(\"defs\");\nSvg$$module$build$src$core$utils$svg.FECOMPOSITE=new Svg$$module$build$src$core$utils$svg(\"feComposite\");Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER=new Svg$$module$build$src$core$utils$svg(\"feComponentTransfer\");Svg$$module$build$src$core$utils$svg.FEFLOOD=new Svg$$module$build$src$core$utils$svg(\"feFlood\");Svg$$module$build$src$core$utils$svg.FEFUNCA=new Svg$$module$build$src$core$utils$svg(\"feFuncA\");Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR=new Svg$$module$build$src$core$utils$svg(\"feGaussianBlur\");\nSvg$$module$build$src$core$utils$svg.FEPOINTLIGHT=new Svg$$module$build$src$core$utils$svg(\"fePointLight\");Svg$$module$build$src$core$utils$svg.FESPECULARLIGHTING=new Svg$$module$build$src$core$utils$svg(\"feSpecularLighting\");Svg$$module$build$src$core$utils$svg.FILTER=new Svg$$module$build$src$core$utils$svg(\"filter\");Svg$$module$build$src$core$utils$svg.FOREIGNOBJECT=new Svg$$module$build$src$core$utils$svg(\"foreignObject\");Svg$$module$build$src$core$utils$svg.G=new Svg$$module$build$src$core$utils$svg(\"g\");\nSvg$$module$build$src$core$utils$svg.IMAGE=new Svg$$module$build$src$core$utils$svg(\"image\");Svg$$module$build$src$core$utils$svg.LINE=new Svg$$module$build$src$core$utils$svg(\"line\");Svg$$module$build$src$core$utils$svg.PATH=new Svg$$module$build$src$core$utils$svg(\"path\");Svg$$module$build$src$core$utils$svg.PATTERN=new Svg$$module$build$src$core$utils$svg(\"pattern\");Svg$$module$build$src$core$utils$svg.POLYGON=new Svg$$module$build$src$core$utils$svg(\"polygon\");\nSvg$$module$build$src$core$utils$svg.RECT=new Svg$$module$build$src$core$utils$svg(\"rect\");Svg$$module$build$src$core$utils$svg.SVG=new Svg$$module$build$src$core$utils$svg(\"svg\");Svg$$module$build$src$core$utils$svg.TEXT=new Svg$$module$build$src$core$utils$svg(\"text\");Svg$$module$build$src$core$utils$svg.TSPAN=new Svg$$module$build$src$core$utils$svg(\"tspan\");var module$build$src$core$utils$svg={};module$build$src$core$utils$svg.Svg=Svg$$module$build$src$core$utils$svg;var Rect$$module$build$src$core$utils$rect=class{constructor(a,b,c,d){this.top=a;this.bottom=b;this.left=c;this.right=d}static from(a){return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}clone(){return new Rect$$module$build$src$core$utils$rect(this.top,this.bottom,this.left,this.right)}getHeight(){return this.bottom-this.top}getWidth(){return this.right-this.left}getOrigin(){return new Coordinate$$module$build$src$core$utils$coordinate(this.left,this.top)}contains(a,\nb){return a>=this.left&&a<=this.right&&b>=this.top&&b<=this.bottom}intersects(a){return this.left<=a.right&&this.right>=a.left&&this.bottom>=a.top&&this.top<=a.bottom}static equals(a,b){return a===b?!0:a&&b?a.top===b.top&&a.bottom===b.bottom&&a.left===b.left&&a.right===b.right:!1}static createFromPoint(a,b,c){const d=a.x;a=a.y;return new Rect$$module$build$src$core$utils$rect(a,a+c,d,d+b)}},module$build$src$core$utils$rect={};module$build$src$core$utils$rect.Rect=Rect$$module$build$src$core$utils$rect;var Size$$module$build$src$core$utils$size=class{constructor(a,b){this.width=a;this.height=b}static equals(a,b){return a===b?!0:a&&b?a.width===b.width&&a.height===b.height:!1}static max(a,b){return new Size$$module$build$src$core$utils$size(Math.max(a.width,b.width),Math.max(a.height,b.height))}static min(a,b){return new Size$$module$build$src$core$utils$size(Math.min(a.width,b.width),Math.min(a.height,b.height))}},module$build$src$core$utils$size={};module$build$src$core$utils$size.Size=Size$$module$build$src$core$utils$size;var TEST_ONLY$$module$build$src$core$utils$style={getSizeInternal:getSizeInternal$$module$build$src$core$utils$style},module$build$src$core$utils$style={TEST_ONLY:TEST_ONLY$$module$build$src$core$utils$style};module$build$src$core$utils$style.getBorderBox=getBorderBox$$module$build$src$core$utils$style;module$build$src$core$utils$style.getComputedStyle=getComputedStyle$$module$build$src$core$utils$style;module$build$src$core$utils$style.getContainerOffsetToScrollInto=getContainerOffsetToScrollInto$$module$build$src$core$utils$style;\nmodule$build$src$core$utils$style.getPageOffset=getPageOffset$$module$build$src$core$utils$style;module$build$src$core$utils$style.getSize=getSize$$module$build$src$core$utils$style;module$build$src$core$utils$style.getViewportPageOffset=getViewportPageOffset$$module$build$src$core$utils$style;module$build$src$core$utils$style.scrollIntoContainerView=scrollIntoContainerView$$module$build$src$core$utils$style;var XY_REGEX$$module$build$src$core$utils$svg_math=/translate\\(\\s*([-+\\d.e]+)([ ,]\\s*([-+\\d.e]+)\\s*)?/,XY_STYLE_REGEX$$module$build$src$core$utils$svg_math=/transform:\\s*translate(?:3d)?\\(\\s*([-+\\d.e]+)\\s*px([ ,]\\s*([-+\\d.e]+)\\s*px)?/,TEST_ONLY$$module$build$src$core$utils$svg_math={XY_REGEX:XY_REGEX$$module$build$src$core$utils$svg_math,XY_STYLE_REGEX:XY_STYLE_REGEX$$module$build$src$core$utils$svg_math},module$build$src$core$utils$svg_math={TEST_ONLY:TEST_ONLY$$module$build$src$core$utils$svg_math};\nmodule$build$src$core$utils$svg_math.getDocumentScroll=getDocumentScroll$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getInjectionDivXY=getInjectionDivXY$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getRelativeXY=getRelativeXY$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getViewportBBox=getViewportBBox$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.screenToWsCoordinates=screenToWsCoordinates$$module$build$src$core$utils$svg_math;\nmodule$build$src$core$utils$svg_math.wsToScreenCoordinates=wsToScreenCoordinates$$module$build$src$core$utils$svg_math;var Scrollbar$$module$build$src$core$scrollbar=class{constructor(a,b,c,d,e){this.workspace=a;this.horizontal=b;this.oldHostMetrics=null;this.ratio=1;this.origin=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.startDragHandle=this.handlePosition=this.handleLength=this.scrollbarLength=this.startDragMouse=0;this.containerVisible=this.isHandleVisible=!0;this.position=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.onMouseMoveWrapper_=this.onMouseUpWrapper_=null;this.pair=\nc||!1;this.margin=e!==void 0?e:Scrollbar$$module$build$src$core$scrollbar.DEFAULT_SCROLLBAR_MARGIN;a=\"blocklyScrollbar\"+(this.horizontal?\"Horizontal\":\"Vertical\");d&&(a+=\" \"+d);this.outerSvg=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{\"class\":a});d=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},this.outerSvg);this.svgBackground=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{\"class\":\"blocklyScrollbarBackground\"},d);a=Math.floor((Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-5)/2);this.svgHandle=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyScrollbarHandle\",rx:a,ry:a},d);this.workspace.getThemeManager().subscribe(this.svgHandle,\"scrollbarColour\",\"fill\");this.workspace.getThemeManager().subscribe(this.svgHandle,\"scrollbarOpacity\",\"fill-opacity\");insertAfter$$module$build$src$core$utils$dom(this.outerSvg,\nthis.workspace.getParentSvg());this.setInitialThickness();b?(this.lengthAttribute_=\"width\",this.positionAttribute_=\"x\"):(this.lengthAttribute_=\"height\",this.positionAttribute_=\"y\");this.onMouseDownBarWrapper_=conditionalBind$$module$build$src$core$browser_events(this.svgBackground,\"pointerdown\",this,this.onMouseDownBar);this.onMouseDownHandleWrapper_=conditionalBind$$module$build$src$core$browser_events(this.svgHandle,\"pointerdown\",this,this.onMouseDownHandle)}setInitialThickness(){const a=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;\nthis.horizontal?(this.svgBackground.setAttribute(\"height\",String(a)),this.outerSvg.setAttribute(\"height\",String(a)),this.svgHandle.setAttribute(\"height\",String(a-5)),this.svgHandle.setAttribute(\"y\",\"2.5\")):(this.svgBackground.setAttribute(\"width\",String(a)),this.outerSvg.setAttribute(\"width\",String(a)),this.svgHandle.setAttribute(\"width\",String(a-5)),this.svgHandle.setAttribute(\"x\",\"2.5\"))}dispose(){this.cleanUp();unbind$$module$build$src$core$browser_events(this.onMouseDownBarWrapper_);unbind$$module$build$src$core$browser_events(this.onMouseDownHandleWrapper_);\nremoveNode$$module$build$src$core$utils$dom(this.outerSvg);this.workspace.getThemeManager().unsubscribe(this.svgHandle)}constrainHandleLength(a){return a=a<=0||isNaN(a)?0:Math.min(a,this.scrollbarLength)}setHandleLength(a){this.handleLength=a;this.svgHandle.setAttribute(this.lengthAttribute_,String(this.handleLength))}constrainHandlePosition(a){return a=a<=0||isNaN(a)?0:Math.min(a,this.scrollbarLength-this.handleLength)}setHandlePosition(a){this.handlePosition=a;this.svgHandle.setAttribute(this.positionAttribute_,\nString(this.handlePosition))}setScrollbarLength(a){this.scrollbarLength=a;this.outerSvg.setAttribute(this.lengthAttribute_,String(this.scrollbarLength));this.svgBackground.setAttribute(this.lengthAttribute_,String(this.scrollbarLength))}setPosition(a,b){this.position.x=a;this.position.y=b;setCssTransform$$module$build$src$core$utils$dom(this.outerSvg,\"translate(\"+(this.position.x+this.origin.x)+\"px,\"+(this.position.y+this.origin.y)+\"px)\")}resize(a){if(!a&&(a=this.workspace.getMetrics(),!a))return;\nthis.oldHostMetrics&&Scrollbar$$module$build$src$core$scrollbar.metricsAreEquivalent(a,this.oldHostMetrics)||(this.horizontal?this.resizeHorizontal(a):this.resizeVertical(a),this.oldHostMetrics=a,this.updateMetrics())}requiresViewResize(a){return this.oldHostMetrics?this.oldHostMetrics.viewWidth!==a.viewWidth||this.oldHostMetrics.viewHeight!==a.viewHeight||this.oldHostMetrics.absoluteLeft!==a.absoluteLeft||this.oldHostMetrics.absoluteTop!==a.absoluteTop:!0}resizeHorizontal(a){this.requiresViewResize(a)?\nthis.resizeViewHorizontal(a):this.resizeContentHorizontal(a)}resizeViewHorizontal(a){var b=a.viewWidth-this.margin*2;this.pair&&(b-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setScrollbarLength(Math.max(0,b));b=a.absoluteLeft+this.margin;this.pair&&this.workspace.RTL&&(b+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setPosition(b,a.absoluteTop+a.viewHeight-Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-this.margin);this.resizeContentHorizontal(a)}resizeContentHorizontal(a){if(a.viewWidth>=\na.scrollWidth)this.setHandleLength(this.scrollbarLength),this.setHandlePosition(0),this.pair||this.setVisible(!1);else{this.pair||this.setVisible(!0);var b=this.scrollbarLength*a.viewWidth/a.scrollWidth;b=this.constrainHandleLength(b);this.setHandleLength(b);b=a.scrollWidth-a.viewWidth;var c=this.scrollbarLength-this.handleLength;a=(a.viewLeft-a.scrollLeft)/b*c;a=this.constrainHandlePosition(a);this.setHandlePosition(a);this.ratio=c/b}}resizeVertical(a){this.requiresViewResize(a)?this.resizeViewVertical(a):\nthis.resizeContentVertical(a)}resizeViewVertical(a){let b=a.viewHeight-this.margin*2;this.pair&&(b-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setScrollbarLength(Math.max(0,b));this.setPosition(this.workspace.RTL?a.absoluteLeft+this.margin:a.absoluteLeft+a.viewWidth-Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-this.margin,a.absoluteTop+this.margin);this.resizeContentVertical(a)}resizeContentVertical(a){if(a.viewHeight>=a.scrollHeight)this.setHandleLength(this.scrollbarLength),\nthis.setHandlePosition(0),this.pair||this.setVisible(!1);else{this.pair||this.setVisible(!0);var b=this.scrollbarLength*a.viewHeight/a.scrollHeight;b=this.constrainHandleLength(b);this.setHandleLength(b);b=a.scrollHeight-a.viewHeight;var c=this.scrollbarLength-this.handleLength;a=(a.viewTop-a.scrollTop)/b*c;a=this.constrainHandlePosition(a);this.setHandlePosition(a);this.ratio=c/b}}isVisible(){return this.isHandleVisible}setContainerVisible(a){const b=a!==this.containerVisible;this.containerVisible=\na;b&&this.updateDisplay_()}setVisible(a){if(this.pair)throw Error(\"Unable to toggle visibility of paired scrollbars.\");this.setVisibleInternal(a)}setVisibleInternal(a){const b=a!==this.isVisible();this.isHandleVisible=a;b&&this.updateDisplay_()}updateDisplay_(){this.containerVisible&&this.isVisible()?this.outerSvg.setAttribute(\"display\",\"block\"):this.outerSvg.setAttribute(\"display\",\"none\")}onMouseDownBar(a){this.workspace.markFocused();clearTouchIdentifier$$module$build$src$core$touch();this.cleanUp();\nif(isRightButton$$module$build$src$core$browser_events(a))a.stopPropagation();else{var b=mouseToSvg$$module$build$src$core$browser_events(a,this.workspace.getParentSvg(),this.workspace.getInverseScreenCTM());b=this.horizontal?b.x:b.y;var c=getInjectionDivXY$$module$build$src$core$utils$svg_math(this.svgHandle);c=this.horizontal?c.x:c.y;var d=this.handlePosition,e=this.handleLength*.95;b<=c?d-=e:b>=c+this.handleLength&&(d+=e);this.setHandlePosition(this.constrainHandlePosition(d));this.updateMetrics();\na.stopPropagation();a.preventDefault()}}onMouseDownHandle(a){this.workspace.markFocused();this.cleanUp();isRightButton$$module$build$src$core$browser_events(a)?a.stopPropagation():(this.startDragHandle=this.handlePosition,this.startDragMouse=this.horizontal?a.clientX:a.clientY,this.onMouseUpWrapper_=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onMouseUpHandle),this.onMouseMoveWrapper_=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",\nthis,this.onMouseMoveHandle),a.stopPropagation(),a.preventDefault())}onMouseMoveHandle(a){this.setHandlePosition(this.constrainHandlePosition(this.startDragHandle+((this.horizontal?a.clientX:a.clientY)-this.startDragMouse)));this.updateMetrics()}onMouseUpHandle(){clearTouchIdentifier$$module$build$src$core$touch();this.cleanUp()}cleanUp(){this.workspace.hideChaff(!0);this.onMouseUpWrapper_&&(unbind$$module$build$src$core$browser_events(this.onMouseUpWrapper_),this.onMouseUpWrapper_=null);this.onMouseMoveWrapper_&&\n(unbind$$module$build$src$core$browser_events(this.onMouseMoveWrapper_),this.onMouseMoveWrapper_=null)}getRatio_(){let a=this.handlePosition/(this.scrollbarLength-this.handleLength);isNaN(a)&&(a=0);return a}updateMetrics(){const a=this.getRatio_();this.horizontal?this.workspace.setMetrics({x:a}):this.workspace.setMetrics({y:a})}set(a,b){this.setHandlePosition(this.constrainHandlePosition(a*this.ratio));(b||b===void 0)&&this.updateMetrics()}setOrigin(a,b){this.origin=new Coordinate$$module$build$src$core$utils$coordinate(a,\nb)}static metricsAreEquivalent(a,b){return a.viewWidth===b.viewWidth&&a.viewHeight===b.viewHeight&&a.viewLeft===b.viewLeft&&a.viewTop===b.viewTop&&a.absoluteTop===b.absoluteTop&&a.absoluteLeft===b.absoluteLeft&&a.scrollWidth===b.scrollWidth&&a.scrollHeight===b.scrollHeight&&a.scrollLeft===b.scrollLeft&&a.scrollTop===b.scrollTop}};Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness=TOUCH_ENABLED$$module$build$src$core$touch?25:15;\nScrollbar$$module$build$src$core$scrollbar.DEFAULT_SCROLLBAR_MARGIN=.5;var module$build$src$core$scrollbar={};module$build$src$core$scrollbar.Scrollbar=Scrollbar$$module$build$src$core$scrollbar;var domParser$$module$build$src$core$utils$xml={parseFromString:function(){throw Error(\"DOMParser was not found in the global scope and was not properly injected using injectDependencies\");}},xmlSerializer$$module$build$src$core$utils$xml={serializeToString:function(){throw Error(\"XMLSerializer was not foundin the global scope and was not properly injected using injectDependencies\");}},{document:document$$module$build$src$core$utils$xml,DOMParser:DOMParser$$module$build$src$core$utils$xml,XMLSerializer:XMLSerializer$$module$build$src$core$utils$xml}=\nglobalThis;DOMParser$$module$build$src$core$utils$xml&&(domParser$$module$build$src$core$utils$xml=new DOMParser$$module$build$src$core$utils$xml);XMLSerializer$$module$build$src$core$utils$xml&&(xmlSerializer$$module$build$src$core$utils$xml=new XMLSerializer$$module$build$src$core$utils$xml);\nvar NAME_SPACE$$module$build$src$core$utils$xml=\"https://developers.google.com/blockly/xml\",INVALID_CONTROL_CHARS$$module$build$src$core$utils$xml=/[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F]/g,module$build$src$core$utils$xml={NAME_SPACE:NAME_SPACE$$module$build$src$core$utils$xml};module$build$src$core$utils$xml.createElement=$.createElement$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.createTextNode=$.createTextNode$$module$build$src$core$utils$xml;\nmodule$build$src$core$utils$xml.domToText=domToText$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.injectDependencies=injectDependencies$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.textToDom=$.textToDom$$module$build$src$core$utils$xml;var CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox=\"categoryToolbox\",FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox=\"flyoutToolbox\",Position$$module$build$src$core$utils$toolbox;(function(a){a[a.TOP=0]=\"TOP\";a[a.BOTTOM=1]=\"BOTTOM\";a[a.LEFT=2]=\"LEFT\";a[a.RIGHT=3]=\"RIGHT\"})(Position$$module$build$src$core$utils$toolbox||(Position$$module$build$src$core$utils$toolbox={}));\nvar TEST_ONLY$$module$build$src$core$utils$toolbox={hasCategoriesInternal:hasCategoriesInternal$$module$build$src$core$utils$toolbox},module$build$src$core$utils$toolbox={};module$build$src$core$utils$toolbox.Position=Position$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.TEST_ONLY=TEST_ONLY$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.convertFlyoutDefToJsonArray=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox;\nmodule$build$src$core$utils$toolbox.convertToolboxDefToJson=convertToolboxDefToJson$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.hasCategories=hasCategories$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.isCategoryCollapsible=isCategoryCollapsible$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.parseToolboxTree=parseToolboxTree$$module$build$src$core$utils$toolbox;var verticalPosition$$module$build$src$core$positionable_helpers;(function(a){a[a.TOP=0]=\"TOP\";a[a.BOTTOM=1]=\"BOTTOM\"})(verticalPosition$$module$build$src$core$positionable_helpers||(verticalPosition$$module$build$src$core$positionable_helpers={}));var horizontalPosition$$module$build$src$core$positionable_helpers;(function(a){a[a.LEFT=0]=\"LEFT\";a[a.RIGHT=1]=\"RIGHT\"})(horizontalPosition$$module$build$src$core$positionable_helpers||(horizontalPosition$$module$build$src$core$positionable_helpers={}));\nvar bumpDirection$$module$build$src$core$positionable_helpers;(function(a){a[a.UP=0]=\"UP\";a[a.DOWN=1]=\"DOWN\"})(bumpDirection$$module$build$src$core$positionable_helpers||(bumpDirection$$module$build$src$core$positionable_helpers={}));var module$build$src$core$positionable_helpers={};module$build$src$core$positionable_helpers.bumpDirection=bumpDirection$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.bumpPositionRect=bumpPositionRect$$module$build$src$core$positionable_helpers;\nmodule$build$src$core$positionable_helpers.getCornerOppositeToolbox=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.getStartPositionRect=getStartPositionRect$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.horizontalPosition=horizontalPosition$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.verticalPosition=verticalPosition$$module$build$src$core$positionable_helpers;var SPRITE$$module$build$src$core$sprites={width:96,height:124,url:\"sprites.png\"},module$build$src$core$sprites={SPRITE:SPRITE$$module$build$src$core$sprites};var ZoomControls$$module$build$src$core$zoom_controls=class{constructor(a){this.workspace=a;this.id=\"zoomControls\";this.boundEvents=[];this.zoomResetGroup=this.zoomOutGroup=this.zoomInGroup=null;this.HEIGHT=this.WIDTH=32;this.SMALL_SPACING=2;this.LARGE_SPACING=11;this.MARGIN_HORIZONTAL=this.MARGIN_VERTICAL=20;this.svgGroup=null;this.top=this.left=0;this.initialized=!1}createDom(){this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});const a=String(Math.random()).substring(2);\nthis.createZoomOutSvg(a);this.createZoomInSvg(a);this.workspace.isMovable()&&this.createZoomResetSvg(a);return this.svgGroup}init(){this.workspace.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.ZOOM_CONTROLS_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE]});this.initialized=!0}dispose(){this.workspace.getComponentManager().removeComponent(\"zoomControls\");this.svgGroup&&\nremoveNode$$module$build$src$core$utils$dom(this.svgGroup);for(const a of this.boundEvents)unbind$$module$build$src$core$browser_events(a);this.boundEvents.length=0}getBoundingRectangle(){let a=this.SMALL_SPACING+2*this.HEIGHT;this.zoomResetGroup&&(a+=this.LARGE_SPACING+this.HEIGHT);return new Rect$$module$build$src$core$utils$rect(this.top,this.top+a,this.left,this.left+this.WIDTH)}position(a,b){if(this.initialized){var c=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers(this.workspace,\na),d=this.SMALL_SPACING+2*this.HEIGHT;this.zoomResetGroup&&(d+=this.LARGE_SPACING+this.HEIGHT);a=getStartPositionRect$$module$build$src$core$positionable_helpers(c,new Size$$module$build$src$core$utils$size(this.WIDTH,d),this.MARGIN_HORIZONTAL,this.MARGIN_VERTICAL,a,this.workspace);c=c.vertical;b=bumpPositionRect$$module$build$src$core$positionable_helpers(a,this.MARGIN_VERTICAL,c===verticalPosition$$module$build$src$core$positionable_helpers.TOP?bumpDirection$$module$build$src$core$positionable_helpers.DOWN:\nbumpDirection$$module$build$src$core$positionable_helpers.UP,b);if(c===verticalPosition$$module$build$src$core$positionable_helpers.TOP){var e=this.SMALL_SPACING+this.HEIGHT,f;(f=this.zoomInGroup)==null||f.setAttribute(\"transform\",\"translate(0, \"+e+\")\");this.zoomResetGroup&&this.zoomResetGroup.setAttribute(\"transform\",\"translate(0, \"+(e+this.LARGE_SPACING+this.HEIGHT)+\")\")}else{f=this.zoomResetGroup?this.LARGE_SPACING+this.HEIGHT:0;let h;(h=this.zoomInGroup)==null||h.setAttribute(\"transform\",\"translate(0, \"+\nf+\")\");f=f+this.SMALL_SPACING+this.HEIGHT;(e=this.zoomOutGroup)==null||e.setAttribute(\"transform\",\"translate(0, \"+f+\")\")}this.top=b.top;this.left=b.left;var g;(g=this.svgGroup)==null||g.setAttribute(\"transform\",\"translate(\"+this.left+\",\"+this.top+\")\")}}createZoomOutSvg(a){this.zoomOutGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomOut\"},this.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,\n{id:\"blocklyZoomoutClipPath\"+a},this.zoomOutGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,x:-64,y:-92,\"clip-path\":\"url(#blocklyZoomoutClipPath\"+a+\")\"},this.zoomOutGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomOutGroup,\"pointerdown\",null,this.zoom.bind(this,-1)))}createZoomInSvg(a){this.zoomInGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomIn\"},this.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyZoominClipPath\"+\na},this.zoomInGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,x:-32,y:-92,\"clip-path\":\"url(#blocklyZoominClipPath\"+a+\")\"},this.zoomInGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+\nSPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomInGroup,\"pointerdown\",null,this.zoom.bind(this,1)))}zoom(a,b){this.workspace.markFocused();this.workspace.zoomCenter(a);this.fireZoomEvent();clearTouchIdentifier$$module$build$src$core$touch();b.stopPropagation();b.preventDefault()}createZoomResetSvg(a){this.zoomResetGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomReset\"},\nthis.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyZoomresetClipPath\"+a},this.zoomResetGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,y:-92,\"clip-path\":\"url(#blocklyZoomresetClipPath\"+\na+\")\"},this.zoomResetGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomResetGroup,\"pointerdown\",null,this.resetZoom.bind(this)))}resetZoom(a){this.workspace.markFocused();const b=Math.log(this.workspace.options.zoomOptions.startScale/this.workspace.scale)/Math.log(this.workspace.options.zoomOptions.scaleSpeed);\nthis.workspace.beginCanvasTransition();this.workspace.zoomCenter(b);this.workspace.scrollCenter();setTimeout(this.workspace.endCanvasTransition.bind(this.workspace),500);this.fireZoomEvent();clearTouchIdentifier$$module$build$src$core$touch();a.stopPropagation();a.preventDefault()}fireZoomEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(null,this.workspace.id,\"zoom_controls\");fire$$module$build$src$core$events$utils(a)}};register$$module$build$src$core$css(\"\\n.blocklyZoom>image, .blocklyZoom>svg>image {\\n opacity: .4;\\n}\\n\\n.blocklyZoom>image:hover, .blocklyZoom>svg>image:hover {\\n opacity: .6;\\n}\\n\\n.blocklyZoom>image:active, .blocklyZoom>svg>image:active {\\n opacity: .8;\\n}\\n\");\nvar module$build$src$core$zoom_controls={};module$build$src$core$zoom_controls.ZoomControls=ZoomControls$$module$build$src$core$zoom_controls;var VARIABLES$$module$build$src$core$serialization$priorities=100,PROCEDURES$$module$build$src$core$serialization$priorities=75,BLOCKS$$module$build$src$core$serialization$priorities=50,WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities=25,module$build$src$core$serialization$priorities={BLOCKS:BLOCKS$$module$build$src$core$serialization$priorities,PROCEDURES:PROCEDURES$$module$build$src$core$serialization$priorities,VARIABLES:VARIABLES$$module$build$src$core$serialization$priorities,\nWORKSPACE_COMMENTS:WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities};var module$build$src$core$serialization$registry={};module$build$src$core$serialization$registry.register=register$$module$build$src$core$serialization$registry;module$build$src$core$serialization$registry.unregister=unregister$$module$build$src$core$serialization$registry;var saveComment$$module$build$src$core$serialization$workspace_comments=save$$module$build$src$core$serialization$workspace_comments,WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments=class{constructor(){this.priority=WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities}save(a){const b=[];for(const c of a.getTopComments())(a=save$$module$build$src$core$serialization$workspace_comments(c,{addCoordinates:!0,saveIds:!0}))&&b.push(a);return b.length?b:null}load(a,\nb){for(const c of a)append$$module$build$src$core$serialization$workspace_comments(c,b,{recordUndo:getRecordUndo$$module$build$src$core$events$utils()})}clear(a){for(const b of a.getTopComments())b.dispose()}};register$$module$build$src$core$serialization$registry(\"workspaceComments\",new WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments);var module$build$src$core$serialization$workspace_comments={};\nmodule$build$src$core$serialization$workspace_comments.WorkspaceCommentSerializer=WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments;module$build$src$core$serialization$workspace_comments.append=append$$module$build$src$core$serialization$workspace_comments;module$build$src$core$serialization$workspace_comments.save=save$$module$build$src$core$serialization$workspace_comments;var module$build$src$core$clipboard$registry={};module$build$src$core$clipboard$registry.register=register$$module$build$src$core$clipboard$registry;module$build$src$core$clipboard$registry.unregister=unregister$$module$build$src$core$clipboard$registry;var WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster=class{paste(a,b,c){a=a.commentState;c&&(a.x=c.x,a.y=c.y);$.disable$$module$build$src$core$events$utils();let d;try{d=append$$module$build$src$core$serialization$workspace_comments(a,b),moveCommentToNotConflict$$module$build$src$core$clipboard$workspace_comment_paster(d)}finally{$.enable$$module$build$src$core$events$utils()}if(!d)return null;isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CREATE))(d));\n$.getFocusManager$$module$build$src$core$focus_manager().focusNode(d);return d}};WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE=\"workspace-comment\";register$$module$build$src$core$clipboard$registry(WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE,new WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster);var module$build$src$core$clipboard$workspace_comment_paster={};\nmodule$build$src$core$clipboard$workspace_comment_paster.WorkspaceCommentPaster=WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster;var DEFAULT_SNAP_RADIUS$$module$build$src$core$config,module$build$src$core$config;DEFAULT_SNAP_RADIUS$$module$build$src$core$config=28;$.config$$module$build$src$core$config={dragRadius:5,flyoutDragRadius:10,snapRadius:DEFAULT_SNAP_RADIUS$$module$build$src$core$config,connectingSnapRadius:DEFAULT_SNAP_RADIUS$$module$build$src$core$config,currentConnectionPreference:8,bumpDelay:250};module$build$src$core$config={config:$.config$$module$build$src$core$config};var ARIA_PREFIX$$module$build$src$core$utils$aria=\"aria-\",ROLE_ATTRIBUTE$$module$build$src$core$utils$aria=\"role\",Role$$module$build$src$core$utils$aria;\n(function(a){a.GRID=\"grid\";a.GRIDCELL=\"gridcell\";a.GROUP=\"group\";a.LISTBOX=\"listbox\";a.MENU=\"menu\";a.MENUITEM=\"menuitem\";a.MENUITEMCHECKBOX=\"menuitemcheckbox\";a.OPTION=\"option\";a.PRESENTATION=\"presentation\";a.ROW=\"row\";a.TREE=\"tree\";a.TREEITEM=\"treeitem\";a.SEPARATOR=\"separator\";a.STATUS=\"status\"})(Role$$module$build$src$core$utils$aria||(Role$$module$build$src$core$utils$aria={}));var State$$module$build$src$core$utils$aria;\n(function(a){a.ACTIVEDESCENDANT=\"activedescendant\";a.COLCOUNT=\"colcount\";a.DISABLED=\"disabled\";a.EXPANDED=\"expanded\";a.INVALID=\"invalid\";a.LABEL=\"label\";a.LABELLEDBY=\"labelledby\";a.LEVEL=\"level\";a.ORIENTATION=\"orientation\";a.POSINSET=\"posinset\";a.ROWCOUNT=\"rowcount\";a.SELECTED=\"selected\";a.SETSIZE=\"setsize\";a.VALUEMAX=\"valuemax\";a.VALUEMIN=\"valuemin\";a.LIVE=\"live\";a.HIDDEN=\"hidden\"})(State$$module$build$src$core$utils$aria||(State$$module$build$src$core$utils$aria={}));\nvar module$build$src$core$utils$aria={};module$build$src$core$utils$aria.Role=Role$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.State=State$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.setRole=setRole$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.setState=setState$$module$build$src$core$utils$aria;var MenuItem$$module$build$src$core$menuitem=class{constructor(a,b){this.content=a;this.opt_value=b;this.enabled=!0;this.element=null;this.rightToLeft=!1;this.roleName=null;this.highlight=this.checked=this.checkable=!1;this.actionHandler=null}createDom(){const a=document.createElement(\"div\");a.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();this.element=a;a.className=\"blocklyMenuItem \"+(this.enabled?\"\":\"blocklyMenuItemDisabled \")+(this.checked?\"blocklyMenuItemSelected \":\"\")+(this.highlight?\n\"blocklyMenuItemHighlight \":\"\")+(this.rightToLeft?\"blocklyMenuItemRtl \":\"\");const b=document.createElement(\"div\");b.className=\"blocklyMenuItemContent\";if(this.checkable){var c=document.createElement(\"div\");c.className=\"blocklyMenuItemCheckbox \";b.appendChild(c)}c=this.content;typeof this.content===\"string\"&&(c=document.createTextNode(this.content));b.appendChild(c);a.appendChild(b);this.roleName&&setRole$$module$build$src$core$utils$aria(a,this.roleName);setState$$module$build$src$core$utils$aria(a,\nState$$module$build$src$core$utils$aria.SELECTED,this.checkable&&this.checked||!1);setState$$module$build$src$core$utils$aria(a,State$$module$build$src$core$utils$aria.DISABLED,!this.enabled);return a}dispose(){this.element=null}getElement(){return this.element}getId(){return this.element.id}getValue(){let a;return(a=this.opt_value)!=null?a:null}setRightToLeft(a){this.rightToLeft=a}setRole(a){this.roleName=a}setCheckable(a){this.checkable=a}setChecked(a){this.checked=a}setHighlighted(a){this.highlight=\na;const b=this.getElement();b&&this.isEnabled()&&(a?addClass$$module$build$src$core$utils$dom(b,\"blocklyMenuItemHighlight\"):removeClass$$module$build$src$core$utils$dom(b,\"blocklyMenuItemHighlight\"))}isEnabled(){return this.enabled}setEnabled(a){this.enabled=a}performAction(a){this.isEnabled()&&this.actionHandler&&this.actionHandler(this,a)}onAction(a,b){this.actionHandler=a.bind(b)}},module$build$src$core$menuitem={};module$build$src$core$menuitem.MenuItem=MenuItem$$module$build$src$core$menuitem;var Menu$$module$build$src$core$menu=class{constructor(){this.menuItems=[];this.roleName=this.element=this.onKeyDownHandler=this.pointerLeaveHandler=this.pointerEnterHandler=this.clickHandler=this.pointerMoveHandler=this.highlightedItem=this.openingCoords=null}addChild(a){this.menuItems.push(a)}render(a){const b=document.createElement(\"div\");b.className=\"blocklyMenu\";b.tabIndex=0;this.roleName&&setRole$$module$build$src$core$utils$aria(b,this.roleName);this.element=b;for(let c=0,d;d=this.menuItems[c];c++)b.appendChild(d.createDom());\nthis.pointerMoveHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointermove\",this,this.handlePointerMove,!0);this.clickHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerup\",this,this.handleClick,!0);this.pointerEnterHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerenter\",this,this.handlePointerEnter,!0);this.pointerLeaveHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerleave\",this,this.handlePointerLeave,!0);this.onKeyDownHandler=\nconditionalBind$$module$build$src$core$browser_events(b,\"keydown\",this,this.handleKeyEvent);a.appendChild(b);return b}getElement(){return this.element}focus(){const a=this.getElement();a&&a.focus({preventScroll:!0})}blur(){const a=this.getElement();a&&a.blur()}setRole(a){this.roleName=a}dispose(){this.pointerMoveHandler&&(unbind$$module$build$src$core$browser_events(this.pointerMoveHandler),this.pointerMoveHandler=null);this.clickHandler&&(unbind$$module$build$src$core$browser_events(this.clickHandler),\nthis.clickHandler=null);this.pointerEnterHandler&&(unbind$$module$build$src$core$browser_events(this.pointerEnterHandler),this.pointerEnterHandler=null);this.pointerLeaveHandler&&(unbind$$module$build$src$core$browser_events(this.pointerLeaveHandler),this.pointerLeaveHandler=null);this.onKeyDownHandler&&(unbind$$module$build$src$core$browser_events(this.onKeyDownHandler),this.onKeyDownHandler=null);for(let a=0,b;b=this.menuItems[a];a++)b.dispose();this.element=null}getMenuItem(a){const b=this.getElement();\nfor(;a&&a!==b;){if(a.classList.contains(\"blocklyMenuItem\")){const c=this.getMenuItems();for(let d=0,e;e=c[d];d++)if(e.getElement()===a)return e}a=a.parentElement}return null}setHighlighted(a){var b=this.highlightedItem;b&&(b.setHighlighted(!1),this.highlightedItem=null);if(a){a.setHighlighted(!0);this.highlightedItem=a;b=this.getElement();const c=a.getElement();b&&c&&(scrollIntoContainerView$$module$build$src$core$utils$style(c,b),setState$$module$build$src$core$utils$aria(b,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,\na.getId()))}}highlightNext(){const a=this.highlightedItem?this.menuItems.indexOf(this.highlightedItem):-1;this.highlightHelper(a,1)}highlightPrevious(){const a=this.highlightedItem?this.menuItems.indexOf(this.highlightedItem):-1;this.highlightHelper(a<0?this.menuItems.length:a,-1)}highlightFirst(){this.highlightHelper(-1,1)}highlightLast(){this.highlightHelper(this.menuItems.length,-1)}highlightHelper(a,b){a+=b;let c;const d=this.getMenuItems();for(;c=d[a];){if(c.isEnabled()){this.setHighlighted(c);\nbreak}a+=b}}handlePointerMove(a){Math.max(Math.abs(a.movementX),Math.abs(a.movementY))!==0&&(a=this.getMenuItem(a.target))&&(a.isEnabled()?this.highlightedItem!==a&&this.setHighlighted(a):this.setHighlighted(null))}handleClick(a){var b=this.openingCoords;this.openingCoords=null;if(b&&typeof a.clientX===\"number\"){const c=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY);if(Coordinate$$module$build$src$core$utils$coordinate.distance(b,c)<1)return}(b=this.getMenuItem(a.target))&&\nb.performAction(a)}handlePointerEnter(a){this.focus()}handlePointerLeave(a){this.getElement()&&this.setHighlighted(null)}handleKeyEvent(a){if(this.menuItems.length&&!(a.shiftKey||a.ctrlKey||a.metaKey||a.altKey)){var b=this.highlightedItem;switch(a.key){case \"Enter\":case \" \":b&&b.performAction(a);break;case \"ArrowUp\":this.highlightPrevious();break;case \"ArrowDown\":this.highlightNext();break;case \"PageUp\":case \"Home\":this.highlightFirst();break;case \"PageDown\":case \"End\":this.highlightLast();break;\ndefault:return}a.preventDefault();a.stopPropagation()}}getSize(){const a=this.getElement(),b=getSize$$module$build$src$core$utils$style(a);b.height=a.scrollHeight;return b}getMenuItems(){return this.menuItems.filter(a=>a instanceof MenuItem$$module$build$src$core$menuitem)}},module$build$src$core$menu={};module$build$src$core$menu.Menu=Menu$$module$build$src$core$menu;var MenuSeparator$$module$build$src$core$menu_separator=class{constructor(){this.element=null}createDom(){this.element=document.createElement(\"hr\");this.element.className=\"blocklyMenuSeparator\";setRole$$module$build$src$core$utils$aria(this.element,Role$$module$build$src$core$utils$aria.SEPARATOR);return this.element}dispose(){let a;(a=this.element)==null||a.remove();this.element=null}},module$build$src$core$menu_separator={};module$build$src$core$menu_separator.MenuSeparator=MenuSeparator$$module$build$src$core$menu_separator;var COLLAPSED_INPUT_NAME$$module$build$src$core$constants=\"_TEMP_COLLAPSED_INPUT\",COLLAPSED_FIELD_NAME$$module$build$src$core$constants=\"_TEMP_COLLAPSED_FIELD\",MANUALLY_DISABLED$$module$build$src$core$constants=\"MANUALLY_DISABLED\",module$build$src$core$constants={COLLAPSED_FIELD_NAME:COLLAPSED_FIELD_NAME$$module$build$src$core$constants,COLLAPSED_INPUT_NAME:COLLAPSED_INPUT_NAME$$module$build$src$core$constants,MANUALLY_DISABLED:MANUALLY_DISABLED$$module$build$src$core$constants};(function(a){a[a.VALUE=1]=\"VALUE\";a[a.STATEMENT=3]=\"STATEMENT\";a[a.DUMMY=5]=\"DUMMY\";a[a.CUSTOM=6]=\"CUSTOM\";a[a.END_ROW=7]=\"END_ROW\"})($.inputTypes$$module$build$src$core$inputs$input_types||($.inputTypes$$module$build$src$core$inputs$input_types={}));var module$build$src$core$inputs$input_types={};module$build$src$core$inputs$input_types.inputTypes=$.inputTypes$$module$build$src$core$inputs$input_types;var module$build$src$core$interfaces$i_serializable={};module$build$src$core$interfaces$i_serializable.isSerializable=isSerializable$$module$build$src$core$interfaces$i_serializable;var rootBlocks$$module$build$src$core$render_management=new Set,dirtyBlocks$$module$build$src$core$render_management=new WeakSet,eventGroups$$module$build$src$core$render_management=new WeakMap,afterRendersPromise$$module$build$src$core$render_management=null,afterRendersResolver$$module$build$src$core$render_management=null,animationRequestId$$module$build$src$core$render_management=0,module$build$src$core$render_management={};module$build$src$core$render_management.finishQueuedRenders=finishQueuedRenders$$module$build$src$core$render_management;\nmodule$build$src$core$render_management.queueRender=queueRender$$module$build$src$core$render_management;module$build$src$core$render_management.triggerQueuedRenders=triggerQueuedRenders$$module$build$src$core$render_management;var setLocale$$module$build$src$core$msg,module$build$src$core$msg;$.Msg$$module$build$src$core$msg=Object.create(null);setLocale$$module$build$src$core$msg=function(a){Object.keys(a).forEach(function(b){$.Msg$$module$build$src$core$msg[b]=a[b]})};module$build$src$core$msg={Msg:$.Msg$$module$build$src$core$msg,setLocale:setLocale$$module$build$src$core$msg};var CLASS_NAME$$module$build$src$core$toast=\"blocklyToast\",MESSAGE_CLASS_NAME$$module$build$src$core$toast=\"blocklyToastMessage\",CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast=\"blocklyToastCloseButton\",Toast$$module$build$src$core$toast=class{static show(a,b){if(b.oncePerSession&&b.id){if(this.shownIds.has(b.id))return;this.shownIds.add(b.id)}this.hide(a);const c=this.createDom(a,b);requestAnimationFrame(()=>{c.style.bottom=\"2rem\"})}static createDom(a,b){const {message:c,duration:d=5,assertiveness:e=\nToast$$module$build$src$core$toast.Assertiveness.POLITE}=b,f=document.createElement(\"div\");a.getInjectionDiv().appendChild(f);f.dataset.toastId=b.id;f.className=CLASS_NAME$$module$build$src$core$toast;setRole$$module$build$src$core$utils$aria(f,Role$$module$build$src$core$utils$aria.STATUS);setState$$module$build$src$core$utils$aria(f,State$$module$build$src$core$utils$aria.LIVE,e);b=f.appendChild(document.createElement(\"div\"));b.className=MESSAGE_CLASS_NAME$$module$build$src$core$toast;b.innerText=\nc;b=f.appendChild(document.createElement(\"button\"));b.className=CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast;setState$$module$build$src$core$utils$aria(b,State$$module$build$src$core$utils$aria.LABEL,$.Msg$$module$build$src$core$msg.CLOSE);var g=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{width:24,height:24,viewBox:\"0 0 24 24\",fill:\"none\"},b);setState$$module$build$src$core$utils$aria(g,State$$module$build$src$core$utils$aria.HIDDEN,!0);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{x:19.7782,y:2.80762,width:2,height:24,transform:\"rotate(45, 19.7782, 2.80762)\",fill:\"black\"},g);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{x:2.80762,y:4.22183,width:2,height:24,transform:\"rotate(-45, 2.80762, 4.22183)\",fill:\"black\"},g);b.addEventListener(\"click\",()=>{f.remove();a.markFocused()});let h;b=()=>{h=setTimeout(()=>f.remove(),d*1E3)};g=()=>clearTimeout(h);f.addEventListener(\"focusin\",g);f.addEventListener(\"focusout\",b);f.addEventListener(\"mouseenter\",\ng);f.addEventListener(\"mousemove\",g);f.addEventListener(\"mouseleave\",b);b();return f}static hide(a,b){a=a.getInjectionDiv().querySelector(`.${CLASS_NAME$$module$build$src$core$toast}`);a instanceof HTMLElement&&(!b||b===a.dataset.toastId)&&a.remove()}};Toast$$module$build$src$core$toast.shownIds=new Set;(function(a){a=a.Assertiveness||(a.Assertiveness={});a.ASSERTIVE=\"assertive\";a.POLITE=\"polite\"})(Toast$$module$build$src$core$toast||(Toast$$module$build$src$core$toast={}));register$$module$build$src$core$css(`\n.${CLASS_NAME$$module$build$src$core$toast} {\n font-size: 1.2rem;\n position: absolute;\n bottom: -10rem;\n right: 2rem;\n padding: 1rem;\n color: black;\n background-color: white;\n border: 2px solid black;\n border-radius: 0.4rem;\n z-index: 999;\n display: flex;\n align-items: center;\n gap: 0.8rem;\n line-height: 1.5;\n transition: bottom 0.3s ease-out;\n}\n\n.${CLASS_NAME$$module$build$src$core$toast} .${MESSAGE_CLASS_NAME$$module$build$src$core$toast} {\n maxWidth: 18rem;\n}\n\n.${CLASS_NAME$$module$build$src$core$toast} .${CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast} {\n margin: 0;\n padding: 0.2rem;\n background-color: transparent;\n color: black;\n border: none;\n cursor: pointer;\n}\n`);var module$build$src$core$toast={};module$build$src$core$toast.Toast=Toast$$module$build$src$core$toast;var defaultAlert$$module$build$src$core$dialog=function(a,b){window.alert(a);b&&b()},alertImplementation$$module$build$src$core$dialog=defaultAlert$$module$build$src$core$dialog,defaultConfirm$$module$build$src$core$dialog=function(a,b){b(window.confirm(a))},confirmImplementation$$module$build$src$core$dialog=defaultConfirm$$module$build$src$core$dialog,defaultPrompt$$module$build$src$core$dialog=function(a,b,c){c(window.prompt(a,b))},promptImplementation$$module$build$src$core$dialog=defaultPrompt$$module$build$src$core$dialog,\ndefaultToast$$module$build$src$core$dialog=Toast$$module$build$src$core$toast.show.bind(Toast$$module$build$src$core$toast),toastImplementation$$module$build$src$core$dialog=defaultToast$$module$build$src$core$dialog,module$build$src$core$dialog={};module$build$src$core$dialog.alert=alert$$module$build$src$core$dialog;module$build$src$core$dialog.confirm=confirm$$module$build$src$core$dialog;module$build$src$core$dialog.prompt=prompt$$module$build$src$core$dialog;\nmodule$build$src$core$dialog.setAlert=setAlert$$module$build$src$core$dialog;module$build$src$core$dialog.setConfirm=setConfirm$$module$build$src$core$dialog;module$build$src$core$dialog.setPrompt=setPrompt$$module$build$src$core$dialog;module$build$src$core$dialog.setToast=setToast$$module$build$src$core$dialog;module$build$src$core$dialog.toast=toast$$module$build$src$core$dialog;var module$build$src$core$interfaces$i_legacy_procedure_blocks={};module$build$src$core$interfaces$i_legacy_procedure_blocks.isLegacyProcedureCallBlock=isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks;module$build$src$core$interfaces$i_legacy_procedure_blocks.isLegacyProcedureDefBlock=isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks;var module$build$src$core$interfaces$i_variable_backed_parameter_model={};module$build$src$core$interfaces$i_variable_backed_parameter_model.isVariableBackedParameterModel=isVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model;var previousWarnings$$module$build$src$core$utils$deprecation=new Set,module$build$src$core$utils$deprecation={};module$build$src$core$utils$deprecation.warn=warn$$module$build$src$core$utils$deprecation;var CATEGORY_NAME$$module$build$src$core$variables=\"VARIABLE\",VAR_LETTER_OPTIONS$$module$build$src$core$variables=\"ijkmnopqrstuvwxyzabcdefgh\",TEST_ONLY$$module$build$src$core$variables={generateUniqueNameInternal:generateUniqueNameInternal$$module$build$src$core$variables},module$build$src$core$variables={CATEGORY_NAME:CATEGORY_NAME$$module$build$src$core$variables,TEST_ONLY:TEST_ONLY$$module$build$src$core$variables,VAR_LETTER_OPTIONS:VAR_LETTER_OPTIONS$$module$build$src$core$variables};\nmodule$build$src$core$variables.allDeveloperVariables=$.allDeveloperVariables$$module$build$src$core$variables;module$build$src$core$variables.allUsedVarModels=$.allUsedVarModels$$module$build$src$core$variables;module$build$src$core$variables.compareByName=compareByName$$module$build$src$core$variables;module$build$src$core$variables.createVariableButtonHandler=createVariableButtonHandler$$module$build$src$core$variables;module$build$src$core$variables.deleteVariable=$.deleteVariable$$module$build$src$core$variables;\nmodule$build$src$core$variables.flyoutCategory=flyoutCategory$$module$build$src$core$variables;module$build$src$core$variables.flyoutCategoryBlocks=flyoutCategoryBlocks$$module$build$src$core$variables;module$build$src$core$variables.generateUniqueName=generateUniqueName$$module$build$src$core$variables;module$build$src$core$variables.generateUniqueNameFromOptions=generateUniqueNameFromOptions$$module$build$src$core$variables;module$build$src$core$variables.generateVariableFieldDom=generateVariableFieldDom$$module$build$src$core$variables;\nmodule$build$src$core$variables.getAddedVariables=getAddedVariables$$module$build$src$core$variables;module$build$src$core$variables.getOrCreateVariablePackage=$.getOrCreateVariablePackage$$module$build$src$core$variables;module$build$src$core$variables.getVariable=$.getVariable$$module$build$src$core$variables;module$build$src$core$variables.getVariableUsesById=getVariableUsesById$$module$build$src$core$variables;module$build$src$core$variables.internalFlyoutCategory=internalFlyoutCategory$$module$build$src$core$variables;\nmodule$build$src$core$variables.jsonFlyoutCategoryBlocks=jsonFlyoutCategoryBlocks$$module$build$src$core$variables;module$build$src$core$variables.nameUsedWithAnyType=nameUsedWithAnyType$$module$build$src$core$variables;module$build$src$core$variables.nameUsedWithConflictingParam=nameUsedWithConflictingParam$$module$build$src$core$variables;module$build$src$core$variables.promptName=promptName$$module$build$src$core$variables;module$build$src$core$variables.renameVariable=$.renameVariable$$module$build$src$core$variables;var DeserializationError$$module$build$src$core$serialization$exceptions=class extends Error{},MissingBlockType$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a){super(\"Expected to find a 'type' property, defining the block type\");this.state=a}},MissingConnection$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,\nb,c){super(`The block ${b.toDevString()} is missing a(n) ${a}\nconnection`);this.block=b;this.state=c}},BadConnectionCheck$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,b,c,d){super(`The block ${c.toDevString()} could not connect its\n${b} to its parent, because: ${a}`);this.childBlock=c;this.childState=d}},RealChildOfShadow$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a){super(\"Encountered a real block which is defined as a child of a shadow\\nblock. It is an invariant of Blockly that shadow blocks only have shadow\\nchildren\");this.state=a}},UnregisteredIcon$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,\nb,c){super(`Cannot add an icon of type '${a}' to the block `+`${b.toDevString()}, because there is no icon registered with `+`type '${a}'. Make sure that all of your icons have been `+\"registered.\");this.block=b;this.state=c}},module$build$src$core$serialization$exceptions={};module$build$src$core$serialization$exceptions.BadConnectionCheck=BadConnectionCheck$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.DeserializationError=DeserializationError$$module$build$src$core$serialization$exceptions;\nmodule$build$src$core$serialization$exceptions.MissingBlockType=MissingBlockType$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.MissingConnection=MissingConnection$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.RealChildOfShadow=RealChildOfShadow$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.UnregisteredIcon=UnregisteredIcon$$module$build$src$core$serialization$exceptions;var saveBlock$$module$build$src$core$serialization$blocks=save$$module$build$src$core$serialization$blocks,BlockSerializer$$module$build$src$core$serialization$blocks=class{constructor(){this.priority=BLOCKS$$module$build$src$core$serialization$priorities}save(a){const b=[];for(const c of a.getTopBlocks(!1))(a=save$$module$build$src$core$serialization$blocks(c,{addCoordinates:!0,doFullSerialization:!1}))&&b.push(a);return b.length?{languageVersion:0,blocks:b}:null}load(a,b){a=a.blocks;for(const c of a)append$$module$build$src$core$serialization$blocks(c,\nb,{recordUndo:getRecordUndo$$module$build$src$core$events$utils()})}clear(a){for(const b of a.getTopBlocks(!1))b.dispose(!1)}};register$$module$build$src$core$serialization$registry(\"blocks\",new BlockSerializer$$module$build$src$core$serialization$blocks);var module$build$src$core$serialization$blocks={};module$build$src$core$serialization$blocks.BlockSerializer=BlockSerializer$$module$build$src$core$serialization$blocks;module$build$src$core$serialization$blocks.append=append$$module$build$src$core$serialization$blocks;\nmodule$build$src$core$serialization$blocks.appendInternal=appendInternal$$module$build$src$core$serialization$blocks;module$build$src$core$serialization$blocks.save=save$$module$build$src$core$serialization$blocks;var IconType$$module$build$src$core$icons$icon_types=class{constructor(a){this.name=a}toString(){return this.name}equals(a){return this.name===a.toString()}};IconType$$module$build$src$core$icons$icon_types.MUTATOR=new IconType$$module$build$src$core$icons$icon_types(\"mutator\");IconType$$module$build$src$core$icons$icon_types.WARNING=new IconType$$module$build$src$core$icons$icon_types(\"warning\");IconType$$module$build$src$core$icons$icon_types.COMMENT=new IconType$$module$build$src$core$icons$icon_types(\"comment\");\nvar module$build$src$core$icons$icon_types={};module$build$src$core$icons$icon_types.IconType=IconType$$module$build$src$core$icons$icon_types;var module$build$src$core$interfaces$i_has_bubble={};module$build$src$core$interfaces$i_has_bubble.hasBubble=hasBubble$$module$build$src$core$interfaces$i_has_bubble;var BlockBase$$module$build$src$core$events$events_block_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.isBlank=!a;a&&(this.blockId=a.id,this.workspaceId=a.workspace.id)}toJson(){const a=super.toJson();if(!this.blockId)throw Error(\"The block ID is undefined. Either pass a block to the constructor, or call fromJson\");a.blockId=this.blockId;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new BlockBase$$module$build$src$core$events$events_block_base);\nb.blockId=a.blockId;return b}},module$build$src$core$events$events_block_base={};module$build$src$core$events$events_block_base.BlockBase=BlockBase$$module$build$src$core$events$events_block_base;var BlockChange$$module$build$src$core$events$events_block_change=class extends BlockBase$$module$build$src$core$events$events_block_base{constructor(a,b,c,d,e){super(a);this.type=EventType$$module$build$src$core$events$type.BLOCK_CHANGE;a&&(this.element=b,this.name=c||void 0,this.oldValue=d,this.newValue=e)}toJson(){const a=super.toJson();if(!this.element)throw Error(\"The changed element is undefined. Either pass an element to the constructor, or call fromJson\");a.element=this.element;a.name=this.name;\na.oldValue=this.oldValue;a.newValue=this.newValue;this.disabledReason&&(a.disabledReason=this.disabledReason);return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new BlockChange$$module$build$src$core$events$events_block_change);b.element=a.element;b.name=a.name;b.oldValue=a.oldValue;b.newValue=a.newValue;a.disabledReason!==void 0&&(b.disabledReason=a.disabledReason);return b}setDisabledReason(a){if(this.element!==\"disabled\")throw Error('Cannot set the disabled reason for a BlockChange event if the element is not \"disabled\".');\nthis.disabledReason=a}isNull(){return this.oldValue===this.newValue}run(a){var b=this.getEventWorkspace_();if(!this.blockId)throw Error(\"The block ID is undefined. Either pass a block to the constructor, or call fromJson\");b=b.getBlockById(this.blockId);if(!b)throw Error(\"The associated block is undefined. Either pass a block to the constructor, or call fromJson\");const c=b.getIcon(IconType$$module$build$src$core$icons$icon_types.MUTATOR);c&&hasBubble$$module$build$src$core$interfaces$i_has_bubble(c)&&\nc.bubbleIsVisible()&&c.setBubbleVisible(!1);a=a?this.newValue:this.oldValue;switch(this.element){case \"field\":(b=b.getField(this.name))?b.setValue(a):console.warn(\"Can't set non-existent field: \"+this.name);break;case \"comment\":b.setCommentText(a||null);break;case \"collapsed\":b.setCollapsed(!!a);break;case \"disabled\":var d;b.setDisabledReason(!!a,(d=this.disabledReason)!=null?d:MANUALLY_DISABLED$$module$build$src$core$constants);break;case \"inline\":b.setInputsInline(!!a);break;case \"mutation\":d=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(b);\nb.loadExtraState?b.loadExtraState(JSON.parse(a||\"{}\")):b.domToMutation&&b.domToMutation($.textToDom$$module$build$src$core$utils$xml(a||\"\"));fire$$module$build$src$core$events$utils(new BlockChange$$module$build$src$core$events$events_block_change(b,\"mutation\",null,d,a));break;default:console.warn(\"Unknown change type: \"+this.element)}}static getExtraBlockState_(a){return a.saveExtraState?(a=a.saveExtraState(!0))?JSON.stringify(a):\"\":a.mutationToDom?(a=a.mutationToDom())?domToText$$module$build$src$core$xml(a):\n\"\":\"\"}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.BLOCK_CHANGE,BlockChange$$module$build$src$core$events$events_block_change);var module$build$src$core$events$events_block_change={};module$build$src$core$events$events_block_change.BlockChange=BlockChange$$module$build$src$core$events$events_block_change;var module$build$src$core$utils$math={};module$build$src$core$utils$math.clamp=clamp$$module$build$src$core$utils$math;module$build$src$core$utils$math.toDegrees=toDegrees$$module$build$src$core$utils$math;module$build$src$core$utils$math.toRadians=toRadians$$module$build$src$core$utils$math;var ARROW_SIZE$$module$build$src$core$dropdowndiv=16,BORDER_SIZE$$module$build$src$core$dropdowndiv=1,ARROW_HORIZONTAL_PADDING$$module$build$src$core$dropdowndiv=12,PADDING_Y$$module$build$src$core$dropdowndiv=16,ANIMATION_TIME$$module$build$src$core$dropdowndiv=.25,animateOutTimer$$module$build$src$core$dropdowndiv=null,onHide$$module$build$src$core$dropdowndiv=null,renderedClassName$$module$build$src$core$dropdowndiv=\"\",themeClassName$$module$build$src$core$dropdowndiv=\"\",div$$module$build$src$core$dropdowndiv,\ncontent$$module$build$src$core$dropdowndiv,arrow$$module$build$src$core$dropdowndiv,boundsElement$$module$build$src$core$dropdowndiv=null,owner$$module$build$src$core$dropdowndiv=null,positionToField$$module$build$src$core$dropdowndiv=null,returnEphemeralFocus$$module$build$src$core$dropdowndiv=null,keydownListener$$module$build$src$core$dropdowndiv=null,internal$$module$build$src$core$dropdowndiv={getBoundsInfo:function(){const a=getPageOffset$$module$build$src$core$utils$style(boundsElement$$module$build$src$core$dropdowndiv),\nb=getSize$$module$build$src$core$utils$style(boundsElement$$module$build$src$core$dropdowndiv);return{left:a.x,right:a.x+b.width,top:a.y,bottom:a.y+b.height,width:b.width,height:b.height}},getPositionMetrics:function(a,b,c,d){const e=internal$$module$build$src$core$dropdowndiv.getBoundsInfo(),f=getSize$$module$build$src$core$utils$style(div$$module$build$src$core$dropdowndiv);return b+f.heighte.top?getPositionAboveMetrics$$module$build$src$core$dropdowndiv(c,\nd,e,f):b+f.heightdocument.documentElement.clientTop?getPositionAboveMetrics$$module$build$src$core$dropdowndiv(c,d,e,f):getPositionTopOfPageMetrics$$module$build$src$core$dropdowndiv(a,e,f)}},TEST_ONLY$$module$build$src$core$dropdowndiv=internal$$module$build$src$core$dropdowndiv,module$build$src$core$dropdowndiv={ANIMATION_TIME:ANIMATION_TIME$$module$build$src$core$dropdowndiv,ARROW_HORIZONTAL_PADDING:ARROW_HORIZONTAL_PADDING$$module$build$src$core$dropdowndiv,\nARROW_SIZE:ARROW_SIZE$$module$build$src$core$dropdowndiv,BORDER_SIZE:BORDER_SIZE$$module$build$src$core$dropdowndiv,PADDING_Y:PADDING_Y$$module$build$src$core$dropdowndiv,TEST_ONLY:internal$$module$build$src$core$dropdowndiv};module$build$src$core$dropdowndiv.clearContent=clearContent$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.createDom=createDom$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.getContentDiv=getContentDiv$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.getOwner=getOwner$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.getPositionX=getPositionX$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hide=hide$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hideIfOwner=hideIfOwner$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hideWithoutAnimation=hideWithoutAnimation$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.isVisible=isVisible$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.repositionForWindowResize=repositionForWindowResize$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.setBoundsElement=setBoundsElement$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.setColour=setColour$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.show=show$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.showPositionedByBlock=showPositionedByBlock$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.showPositionedByField=showPositionedByField$$module$build$src$core$dropdowndiv;var module$build$src$core$utils$string={};module$build$src$core$utils$string.commonWordPrefix=commonWordPrefix$$module$build$src$core$utils$string;module$build$src$core$utils$string.commonWordSuffix=commonWordSuffix$$module$build$src$core$utils$string;module$build$src$core$utils$string.isNumber=$.isNumber$$module$build$src$core$utils$string;module$build$src$core$utils$string.shortestStringLength=shortestStringLength$$module$build$src$core$utils$string;module$build$src$core$utils$string.wrap=$.wrap$$module$build$src$core$utils$string;var customTooltip$$module$build$src$core$tooltip=void 0,visible$$module$build$src$core$tooltip=!1,blocked$$module$build$src$core$tooltip=!1,LIMIT$$module$build$src$core$tooltip=50,mouseOutPid$$module$build$src$core$tooltip=0,showPid$$module$build$src$core$tooltip=0,lastX$$module$build$src$core$tooltip=0,lastY$$module$build$src$core$tooltip=0,element$$module$build$src$core$tooltip=null,poisonedElement$$module$build$src$core$tooltip=null,OFFSET_X$$module$build$src$core$tooltip=0,OFFSET_Y$$module$build$src$core$tooltip=\n10,RADIUS_OK$$module$build$src$core$tooltip=10,HOVER_MS$$module$build$src$core$tooltip=750,MARGINS$$module$build$src$core$tooltip=5,containerDiv$$module$build$src$core$tooltip=null,module$build$src$core$tooltip={HOVER_MS:HOVER_MS$$module$build$src$core$tooltip,LIMIT:LIMIT$$module$build$src$core$tooltip,MARGINS:MARGINS$$module$build$src$core$tooltip,OFFSET_X:OFFSET_X$$module$build$src$core$tooltip,OFFSET_Y:OFFSET_Y$$module$build$src$core$tooltip,RADIUS_OK:RADIUS_OK$$module$build$src$core$tooltip};\nmodule$build$src$core$tooltip.bindMouseEvents=bindMouseEvents$$module$build$src$core$tooltip;module$build$src$core$tooltip.block=block$$module$build$src$core$tooltip;module$build$src$core$tooltip.createDom=createDom$$module$build$src$core$tooltip;module$build$src$core$tooltip.dispose=dispose$$module$build$src$core$tooltip;module$build$src$core$tooltip.getCustomTooltip=getCustomTooltip$$module$build$src$core$tooltip;module$build$src$core$tooltip.getDiv=getDiv$$module$build$src$core$tooltip;\nmodule$build$src$core$tooltip.getTooltipOfObject=getTooltipOfObject$$module$build$src$core$tooltip;module$build$src$core$tooltip.hide=hide$$module$build$src$core$tooltip;module$build$src$core$tooltip.isVisible=isVisible$$module$build$src$core$tooltip;module$build$src$core$tooltip.setCustomTooltip=setCustomTooltip$$module$build$src$core$tooltip;module$build$src$core$tooltip.unbindMouseEvents=unbindMouseEvents$$module$build$src$core$tooltip;module$build$src$core$tooltip.unblock=unblock$$module$build$src$core$tooltip;var hsvSaturation$$module$build$src$core$utils$colour=.45,hsvValue$$module$build$src$core$utils$colour=.65,names$$module$build$src$core$utils$colour={aqua:\"#00ffff\",black:\"#000000\",blue:\"#0000ff\",fuchsia:\"#ff00ff\",gray:\"#808080\",green:\"#008000\",lime:\"#00ff00\",maroon:\"#800000\",navy:\"#000080\",olive:\"#808000\",purple:\"#800080\",red:\"#ff0000\",silver:\"#c0c0c0\",teal:\"#008080\",white:\"#ffffff\",yellow:\"#ffff00\"},module$build$src$core$utils$colour={};module$build$src$core$utils$colour.blend=blend$$module$build$src$core$utils$colour;\nmodule$build$src$core$utils$colour.getHsvSaturation=getHsvSaturation$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.getHsvValue=getHsvValue$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hexToRgb=hexToRgb$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hsvToHex=hsvToHex$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hueToHex=hueToHex$$module$build$src$core$utils$colour;\nmodule$build$src$core$utils$colour.names=names$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.parse=parse$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.rgbToHex=rgbToHex$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.setHsvSaturation=setHsvSaturation$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.setHsvValue=setHsvValue$$module$build$src$core$utils$colour;var module$build$src$core$utils$parsing={};module$build$src$core$utils$parsing.checkMessageReferences=checkMessageReferences$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.parseBlockColour=parseBlockColour$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.replaceMessageReferences=replaceMessageReferences$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.tokenizeInterpolation=tokenizeInterpolation$$module$build$src$core$utils$parsing;var Field$$module$build$src$core$field=class{get size_(){return this.size}set size_(a){this.size=a}constructor(a,b,c){this.DEFAULT_VALUE=null;this.name=void 0;this.tooltip=this.validator_=null;this.size=new Size$$module$build$src$core$utils$size(0,0);this.constants_=this.mouseDownWrapper=this.textContent_=this.textElement_=this.borderRect_=this.fieldGroup_=null;this.disposed=!1;this.maxDisplayLength=50;this.sourceBlock_=null;this.enabled_=this.visible_=this.isDirty_=!0;this.suffixField=this.prefixField=\nthis.clickTarget_=null;this.EDITABLE=!0;this.SERIALIZABLE=!1;this.id_=null;this.value_=\"DEFAULT_VALUE\"in new.target.prototype?new.target.prototype.DEFAULT_VALUE:this.DEFAULT_VALUE;this.size_=new Size$$module$build$src$core$utils$size(0,0);a!==Field$$module$build$src$core$field.SKIP_SETUP&&(c&&this.configure_(c),this.setValue(a),b&&this.setValidator(b))}configure_(a){a.tooltip&&this.setTooltip(replaceMessageReferences$$module$build$src$core$utils$parsing(a.tooltip))}setSourceBlock(a){if(this.sourceBlock_)throw Error(\"Field already bound to a block\");\nthis.sourceBlock_=a;if(a.id.includes(\"_field\"))throw Error(\"Field ID indicator is contained in block ID. This may cause \"+`problems with focus: ${a.id}.`);this.id_=`${a.id}_field_${getNextUniqueId$$module$build$src$core$utils$idgenerator()}`}getConstants(){!this.constants_&&this.sourceBlock_&&!this.sourceBlock_.isDeadOrDying()&&this.sourceBlock_.workspace.rendered&&(this.constants_=this.sourceBlock_.workspace.getRenderer().getConstants());return this.constants_}getSourceBlock(){return this.sourceBlock_}init(){if(!this.fieldGroup_){var a=\nthis.id_;if(!a)throw Error(\"Expected ID to be defined prior to init.\");this.fieldGroup_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{id:a});this.isVisible()||(this.fieldGroup_.style.display=\"none\");this.sourceBlock_.getSvgRoot().appendChild(this.fieldGroup_);this.initView();this.updateEditable();this.setTooltip(this.tooltip);this.bindEvents_();this.initModel();this.applyColour()}}initView(){this.createBorderRect_();this.createTextElement_();this.fieldGroup_&&\naddClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyField\")}initModel(){}isFullBlockField(){return!this.borderRect_}createBorderRect_(){this.borderRect_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{rx:this.getConstants().FIELD_BORDER_RECT_RADIUS,ry:this.getConstants().FIELD_BORDER_RECT_RADIUS,x:0,y:0,height:this.size_.height,width:this.size_.width,\"class\":\"blocklyFieldRect\"},this.fieldGroup_)}createTextElement_(){this.textElement_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,\n{\"class\":\"blocklyText blocklyFieldText\"},this.fieldGroup_);this.getConstants().FIELD_TEXT_BASELINE_CENTER&&this.textElement_.setAttribute(\"dominant-baseline\",\"central\");this.textContent_=document.createTextNode(\"\");this.textElement_.appendChild(this.textContent_)}bindEvents_(){const a=this.getClickTarget_();if(!a)throw Error(\"A click target has not been set.\");bindMouseEvents$$module$build$src$core$tooltip(a);this.mouseDownWrapper=conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",\nthis,this.onMouseDown_)}fromXml(a){this.setValue(a.textContent)}toXml(a){a.textContent=this.getValue();return a}saveState(a){a=this.saveLegacyState(Field$$module$build$src$core$field);return a!==null?a:this.getValue()}loadState(a){this.loadLegacyState(Field$$module$build$src$core$field,a)||this.setValue(a)}saveLegacyState(a){return a.prototype.saveState===this.saveState&&a.prototype.toXml!==this.toXml?(a=$.createElement$$module$build$src$core$utils$xml(\"field\"),a.setAttribute(\"name\",this.name||\"\"),\ndomToText$$module$build$src$core$utils$xml(this.toXml(a)).replace(' xmlns=\"https://developers.google.com/blockly/xml\"',\"\")):null}loadLegacyState(a,b){return a.prototype.loadState===this.loadState&&a.prototype.fromXml!==this.fromXml?(this.fromXml($.textToDom$$module$build$src$core$utils$xml(b)),!0):!1}dispose(){hideIfOwner$$module$build$src$core$dropdowndiv(this);hideIfOwner$$module$build$src$core$widgetdiv(this);let a;((a=this.getSourceBlock())==null?0:a.isDeadOrDying())||removeNode$$module$build$src$core$utils$dom(this.fieldGroup_);\nthis.disposed=!0}updateEditable(){const a=this.fieldGroup_,b=this.getSourceBlock();this.EDITABLE&&a&&b&&(this.enabled_&&b.isEditable()?(addClass$$module$build$src$core$utils$dom(a,\"blocklyEditableField\"),removeClass$$module$build$src$core$utils$dom(a,\"blocklyNonEditableField\")):(addClass$$module$build$src$core$utils$dom(a,\"blocklyNonEditableField\"),removeClass$$module$build$src$core$utils$dom(a,\"blocklyEditableField\")))}setEnabled(a){this.enabled_=a;this.updateEditable()}isEnabled(){return this.enabled_}isClickable(){return this.enabled_&&\n!!this.sourceBlock_&&this.sourceBlock_.isEditable()&&this.showEditor_!==Field$$module$build$src$core$field.prototype.showEditor_}isClickableInFlyout(a){return!a}isCurrentlyEditable(){return this.enabled_&&this.EDITABLE&&!!this.sourceBlock_&&this.sourceBlock_.isEditable()}isSerializable(){let a=!1;this.name&&(this.SERIALIZABLE?a=!0:this.EDITABLE&&(console.warn(\"Detected an editable field that was not serializable. Please define SERIALIZABLE property as true on all editable custom fields. Proceeding with serialization.\"),\na=!0));return a}isVisible(){return this.visible_}setVisible(a){if(this.visible_!==a){this.visible_=a;var b=this.fieldGroup_;b&&(b.style.display=a?\"block\":\"none\")}}setValidator(a){this.validator_=a}getValidator(){return this.validator_}getSvgRoot(){return this.fieldGroup_}getBorderRect(){if(!this.borderRect_)throw Error(`The border rectangle is ${this.borderRect_}.`);return this.borderRect_}getTextElement(){if(!this.textElement_)throw Error(`The text element is ${this.textElement_}.`);return this.textElement_}getTextContent(){if(!this.textContent_)throw Error(`The text content is ${this.textContent_}.`);\nreturn this.textContent_}applyColour(){}render_(){this.textContent_&&(this.textContent_.nodeValue=this.getDisplayText_());this.updateSize_()}showEditor(a){this.isClickable()&&this.showEditor_(a)}showEditor_(a){}repositionForWindowResize(){return!1}updateSize_(a){const b=this.getConstants();a=a!==void 0?a:this.isFullBlockField()?0:this.getConstants().FIELD_BORDER_RECT_X_PADDING;let c=a*2,d=b.FIELD_TEXT_HEIGHT,e=0;this.textElement_&&(e=getTextWidth$$module$build$src$core$utils$dom(this.textElement_),\nc+=e);this.isFullBlockField()||(d=Math.max(d,b.FIELD_BORDER_RECT_HEIGHT));this.size_=new Size$$module$build$src$core$utils$size(c,d);this.positionTextElement_(a,e);this.positionBorderRect_()}positionTextElement_(a,b){if(this.textElement_){var c=this.getConstants(),d=this.size_.height/2,e;this.textElement_.setAttribute(\"x\",String(((e=this.getSourceBlock())==null?0:e.RTL)?this.size_.width-b-a:a));this.textElement_.setAttribute(\"y\",String(c.FIELD_TEXT_BASELINE_CENTER?d:d-c.FIELD_TEXT_HEIGHT/2+c.FIELD_TEXT_BASELINE))}}positionBorderRect_(){this.borderRect_&&\n(this.borderRect_.setAttribute(\"width\",String(this.size_.width)),this.borderRect_.setAttribute(\"height\",String(this.size_.height)),this.borderRect_.setAttribute(\"rx\",String(this.getConstants().FIELD_BORDER_RECT_RADIUS)),this.borderRect_.setAttribute(\"ry\",String(this.getConstants().FIELD_BORDER_RECT_RADIUS)))}getSize(){if(!this.isVisible())return new Size$$module$build$src$core$utils$size(0,0);this.isDirty_&&(this.render_(),this.isDirty_=!1);return this.size_}getScaledBBox(){let a;var b=this.getSourceBlock();\nif(!b)throw new UnattachedFieldError$$module$build$src$core$field;if(this.isFullBlockField()){var c=this.sourceBlock_.getHeightWidth();const d=b.workspace.scale;a=this.getAbsoluteXY_();b=(c.width+1)*d;c=(c.height+1)*d;GECKO$$module$build$src$core$utils$useragent?(a.x+=1.5*d,a.y+=1.5*d):(a.x-=.5*d,a.y-=.5*d)}else c=this.borderRect_.getBoundingClientRect(),a=getPageOffset$$module$build$src$core$utils$style(this.borderRect_),b=c.width,c=c.height;return new Rect$$module$build$src$core$utils$rect(a.y,\na.y+c,a.x,a.x+b)}onLocationChange(a){}getDisplayText_(){let a=this.getText();a.length>this.maxDisplayLength&&(a=a.substring(0,this.maxDisplayLength-2)+\"\\u2026\");a=a.replace(/\\s/g,Field$$module$build$src$core$field.NBSP);this.sourceBlock_&&this.sourceBlock_.RTL&&(a+=\"\\u200f\");return a}getText(){const a=this.getText_();return a!==null?String(a):String(this.getValue())}getText_(){return null}markDirty(){this.isDirty_=!0;this.constants_=null}forceRerender(){this.isDirty_=!0;this.sourceBlock_&&this.sourceBlock_.rendered&&\nthis.sourceBlock_.queueRender()}setValue(a,b=!0){if(a!==null){var c=$.getGroup$$module$build$src$core$events$utils();c||$.setGroup$$module$build$src$core$events$utils(!0);try{const k=this.doClassValidation_(a),l=this.processValidation(a,k,b);if(!(l instanceof Error)){var d,e=(d=this.getValidator())==null?void 0:d.call(this,l),f=this.processValidation(l,e,b);if(!(f instanceof Error)){var g=this.sourceBlock_;if(!g||!g.disposed){var h=this.getValue();h===f?this.doValueUpdate_(f):(this.doValueUpdate_(f),\nb&&g&&isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(g,\"field\",this.name||null,h,f)),this.isDirty_&&this.forceRerender())}}}}finally{$.setGroup$$module$build$src$core$events$utils(c)}}}processValidation(a,b,c){return b===null?(this.doValueInvalid_(a,c),this.isDirty_&&this.forceRerender(),Error()):b===void 0?a:b}getValue(){return this.value_}doClassValidation_(a){return a===\nnull||a===void 0?null:a}doValueUpdate_(a){this.value_=a;this.isDirty_=!0}doValueInvalid_(a,b){}onMouseDown_(a){this.sourceBlock_&&!this.sourceBlock_.isDeadOrDying()&&(a=this.sourceBlock_.workspace.getGesture(a))&&a.setStartField(this)}setTooltip(a){a||a===\"\"||(a=this.sourceBlock_);const b=this.getClickTarget_();b?b.tooltip=a:this.tooltip=a}getTooltip(){const a=this.getClickTarget_();return a?getTooltipOfObject$$module$build$src$core$tooltip(a):getTooltipOfObject$$module$build$src$core$tooltip({tooltip:this.tooltip})}getClickTarget_(){return this.clickTarget_||\nthis.getSvgRoot()}getAbsoluteXY_(){return getPageOffset$$module$build$src$core$utils$style(this.getClickTarget_())}referencesVariables(){return!1}refreshVariableName(){}getParentInput(){let a=null;const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;const c=b.inputList;for(let d=0;d{d.stopPropagation();$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this);clearTouchIdentifier$$module$build$src$core$touch()});\nconditionalBind$$module$build$src$core$browser_events(this.textArea,\"wheel\",this,d=>{d.stopPropagation()});conditionalBind$$module$build$src$core$browser_events(this.textArea,\"keydown\",this,this.handleKeyDown)}getDom(){return this.foreignObject}getText(){return this.text}setText(a){this.textArea.value=a;this.onTextChange()}onTextChange(){const a=this.text;this.text=this.textArea.value;for(let b=this.textChangeListeners.length-1;b>=0;b--)this.textChangeListeners[b](a,this.text)}handleKeyDown(a){if(a.key===\n\"Escape\"||a.key===\"Enter\"&&(a.ctrlKey||a.metaKey)){if(this.onFinishEditing)this.onFinishEditing();a.stopPropagation()}}addTextChangeListener(a){this.textChangeListeners.push(a)}removeTextChangeListener(a){this.textChangeListeners.splice(this.textChangeListeners.indexOf(a),1)}setPlaceholderText(a){this.textArea.placeholder=a}setEditable(a){a?this.textArea.removeAttribute(\"readonly\"):this.textArea.setAttribute(\"readonly\",\"true\")}updateSize(a,b){this.foreignObject.setAttribute(\"height\",`${a.height-b.height}`);\nthis.foreignObject.setAttribute(\"width\",`${a.width}`);this.foreignObject.setAttribute(\"y\",`${b.height}`);this.workspace.RTL&&this.foreignObject.setAttribute(\"x\",`${-a.width}`)}getFocusableElement(){return this.textArea}getFocusableTree(){return this.workspace}onNodeFocus(){const a=Rect$$module$build$src$core$utils$rect.from(this.foreignObject.getBoundingClientRect());this.workspace.scrollBoundsIntoView(Rect$$module$build$src$core$utils$rect.createFromPoint(screenToWsCoordinates$$module$build$src$core$utils$svg_math(this.workspace,\na.getOrigin()),a.getWidth(),a.getHeight()))}onNodeBlur(){}canBeFocused(){return this.id?!0:!1}},module$build$src$core$comments$comment_editor={COMMENT_EDITOR_FOCUS_IDENTIFIER:COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor};module$build$src$core$comments$comment_editor.CommentEditor=CommentEditor$$module$build$src$core$comments$comment_editor;var COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button=\"_delete_bar_button\",DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button=class extends CommentBarButton$$module$build$src$core$comments$comment_bar_button{constructor(a,b,c,d){super(a,b,c,d);this.id=a;this.workspace=b;this.container=c;this.commentView=d;this.icon=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{\"class\":\"blocklyDeleteIcon\",\nhref:`${this.workspace.options.pathToMedia}delete-icon.svg`,id:`${this.id}${COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button}`},c);this.bindId=conditionalBind$$module$build$src$core$browser_events(this.icon,\"pointerdown\",this,this.performAction.bind(this))}dispose(){unbind$$module$build$src$core$browser_events(this.bindId)}reposition(){const a=this.getMargin();this.icon.setAttribute(\"x\",\"0\");const b=this.container.getBBox();this.icon.setAttribute(\"y\",\n`${a}`);this.icon.setAttribute(\"x\",`${b.width-this.getSize(!0).getWidth()}`)}performAction(a){clearTouchIdentifier$$module$build$src$core$touch();a&&a instanceof PointerEvent&&isRightButton$$module$build$src$core$browser_events(a)?a.stopPropagation():(this.getCommentView().dispose(),a==null||a.stopPropagation(),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.workspace))}},module$build$src$core$comments$delete_comment_bar_button={COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER:COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button};\nmodule$build$src$core$comments$delete_comment_bar_button.DeleteCommentBarButton=DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button;var CommentView$$module$build$src$core$comments$comment_view=class{constructor(a,b){this.workspace=a;this.commentId=b;this.collapsed=!1;this.editable=!0;this.location=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.sizeChangeListeners=[];this.disposeListeners=[];this.collapseChangeListeners=[];this.resizePointerMoveListener=this.resizePointerUpListener=null;this.disposed=this.disposing=!1;this.svgRoot=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,\n{\"class\":\"blocklyComment blocklyEditable blocklyDraggable\"});this.highlightRect=this.createHighlightRect(this.svgRoot);({topBarGroup:this.topBarGroup,topBarBackground:this.topBarBackground,deleteButton:this.deleteButton,foldoutButton:this.foldoutButton,textPreview:this.textPreview,textPreviewNode:this.textPreviewNode}=this.createTopBar(this.svgRoot));this.commentEditor=this.createTextArea();this.resizeHandle=this.createResizeHandle(this.svgRoot,a);let c;(c=a.getLayerManager())==null||c.append(this,\nBLOCK$$module$build$src$core$layers);this.size=CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize;this.setSizeWithoutFiringEvents(this.size);this.moveTo(new Coordinate$$module$build$src$core$utils$coordinate(0,0))}createHighlightRect(a){return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyCommentHighlight\"},a)}createTopBar(a){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,\n{\"class\":\"blocklyCommentTopbar\"},a);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyCommentTopbarBackground\"},a),c=new DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button(this.commentId,this.workspace,a,this),d=new CollapseCommentBarButton$$module$build$src$core$comments$collapse_comment_bar_button(this.commentId,this.workspace,a,this);this.addDisposeListener(()=>{c.dispose();d.dispose()});const e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,\n{\"class\":\"blocklyCommentPreview blocklyCommentText blocklyText\"},a),f=document.createTextNode(\"\");e.appendChild(f);return{topBarGroup:a,topBarBackground:b,deleteButton:c,foldoutButton:d,textPreview:e,textPreviewNode:f}}createTextArea(){const a=new CommentEditor$$module$build$src$core$comments$comment_editor(this.workspace,this.commentId,()=>this.svgRoot.focus());this.svgRoot.appendChild(a.getDom());a.addTextChangeListener((b,c)=>{this.updateTextPreview(c);this.setSize(this.size)});return a}getEditorFocusableNode(){return this.commentEditor}createResizeHandle(a,\nb){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{\"class\":\"blocklyResizeHandle\",href:`${b.options.pathToMedia}resize-handle.svg`},a);conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onResizePointerDown);return a}getSvgRoot(){return this.svgRoot}getSize(){return this.collapsed?this.topBarBackground.getBBox():this.size}setSizeWithoutFiringEvents(a){const b=this.topBarBackground.getBBox(),c=this.textPreview.getBBox(),d=this.resizeHandle.getBBox();\nthis.size=a=Size$$module$build$src$core$utils$size.max(a,this.calcMinSize(b));this.svgRoot.setAttribute(\"height\",`${a.height}`);this.svgRoot.setAttribute(\"width\",`${a.width}`);this.updateHighlightRect(a);this.updateTopBarSize(a);this.commentEditor.updateSize(a,b);this.deleteButton.reposition();this.foldoutButton.reposition();this.updateTextPreviewSize(a,b,c);this.updateResizeHandlePosition(a,d)}setSize(a){const b=this.preResizeSize||this.size;this.setSizeWithoutFiringEvents(a);this.onSizeChange(b,\nthis.size)}calcMinSize(a){var b;this.updateTextPreview((b=this.commentEditor.getText())!=null?b:\"\");let c=b=getTextWidth$$module$build$src$core$utils$dom(this.textPreview);this.foldoutButton.isVisible()?c+=this.foldoutButton.getSize(!0).getWidth():b&&(c+=4);this.deleteButton.isVisible()?c+=this.deleteButton.getSize(!0).getWidth():b&&(c+=4);return new Size$$module$build$src$core$utils$size(c,a.height+20)}updateHighlightRect(a){this.highlightRect.setAttribute(\"height\",`${a.height}`);this.highlightRect.setAttribute(\"width\",\n`${a.width}`);this.workspace.RTL&&this.highlightRect.setAttribute(\"x\",`${-a.width}`)}updateTopBarSize(a){this.topBarBackground.setAttribute(\"width\",`${a.width}`)}updateTextPreviewSize(a,b,c){b=(b.height-c.height)/2;const d=this.foldoutButton.getSize(!0),e=this.deleteButton.getSize(!0);a=a.width-d.getWidth()-e.getWidth();this.textPreview.setAttribute(\"x\",`${(this.workspace.RTL?-1:1)*d.getWidth()}`);this.textPreview.setAttribute(\"y\",`${b+c.height/2}`);this.textPreview.setAttribute(\"width\",`${a}`)}updateResizeHandlePosition(a,\nb){this.resizeHandle.setAttribute(\"y\",`${a.height-b.height}`);this.resizeHandle.setAttribute(\"x\",`${a.width-b.width}`)}onSizeChange(a,b){for(let c=this.sizeChangeListeners.length-1;c>=0;c--)this.sizeChangeListeners[c](a,b)}addSizeChangeListener(a){this.sizeChangeListeners.push(a)}removeSizeChangeListener(a){this.sizeChangeListeners.splice(this.sizeChangeListeners.indexOf(a),1)}onResizePointerDown(a){this.isEditable()&&(this.bringToFront(),isRightButton$$module$build$src$core$browser_events(a)||(this.preResizeSize=\nthis.getSize(),start$$module$build$src$core$utils$drag(this.workspace,a,new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.getSize().width:this.getSize().width,this.getSize().height)),this.resizePointerUpListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onResizePointerUp),this.resizePointerMoveListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",this,this.onResizePointerMove),this.workspace.hideChaff()),\na.stopPropagation())}onResizePointerUp(a){clearTouchIdentifier$$module$build$src$core$touch();this.resizePointerUpListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerUpListener),this.resizePointerUpListener=null);this.resizePointerMoveListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerMoveListener),this.resizePointerMoveListener=null);this.setSize(this.size);this.preResizeSize=void 0}onResizePointerMove(a){a=move$$module$build$src$core$utils$drag(this.workspace,\na);this.setSizeWithoutFiringEvents(new Size$$module$build$src$core$utils$size(this.workspace.RTL?-a.x:a.x,a.y))}isCollapsed(){return this.collapsed}setCollapsed(a){(this.collapsed=a)?addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCollapsed\"):removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCollapsed\");this.setSizeWithoutFiringEvents(this.size);this.onCollapse()}onCollapse(){for(let a=this.collapseChangeListeners.length-1;a>=0;a--)this.collapseChangeListeners[a](this.collapsed)}addOnCollapseListener(a){this.collapseChangeListeners.push(a)}removeOnCollapseListener(a){this.collapseChangeListeners.splice(this.collapseChangeListeners.indexOf(a),\n1)}isEditable(){return this.editable}setEditable(a){(this.editable=a)?(addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyEditable\"),removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyReadonly\")):(removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyEditable\"),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyReadonly\"));this.commentEditor.setEditable(a)}getRelativeToSurfaceXY(){return this.location}moveTo(a){this.location=a;this.svgRoot.setAttribute(\"transform\",\n`translate(${a.x}, ${a.y})`)}getText(){return this.commentEditor.getText()}setText(a){this.commentEditor.setText(a)}setPlaceholderText(a){this.commentEditor.setPlaceholderText(a)}addTextChangeListener(a){this.commentEditor.addTextChangeListener(a)}removeTextChangeListener(a){this.commentEditor.removeTextChangeListener(a)}updateTextPreview(a){this.textPreviewNode.textContent=this.truncateText(a)}truncateText(a){return a.length>=12?`${a.substring(0,9)}...`:a}bringToFront(){const a=this.svgRoot.parentNode,\nb=a.childNodes;b[b.length-1]!==this.svgRoot&&a.appendChild(this.svgRoot)}onDeleteDown(a){clearTouchIdentifier$$module$build$src$core$touch();isRightButton$$module$build$src$core$browser_events(a)||this.dispose();a.stopPropagation()}dispose(){this.disposing=!0;removeNode$$module$build$src$core$utils$dom(this.svgRoot);for(let a=this.disposeListeners.length-1;a>=0;a--)this.disposeListeners[a]();this.disposeListeners.length=0;this.disposed=!0}isDisposed(){return this.disposed}isDeadOrDying(){return this.disposing||\nthis.disposed}addDisposeListener(a){this.disposeListeners.push(a)}removeDisposeListener(a){this.disposeListeners.splice(this.disposeListeners.indexOf(a),1)}getCommentBarButtons(){return[this.foldoutButton,this.deleteButton]}};CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize=new Size$$module$build$src$core$utils$size(120,100);register$$module$build$src$core$css(\"\\n.injectionDiv {\\n --commentFillColour: #FFFCC7;\\n --commentBorderColour: #F2E49B;\\n}\\n\\n.blocklyComment .blocklyTextarea {\\n background-color: var(--commentFillColour);\\n border: 1px solid var(--commentBorderColour);\\n box-sizing: border-box;\\n display: block;\\n outline: 0;\\n padding: 5px;\\n resize: none;\\n width: 100%;\\n height: 100%;\\n}\\n\\n.blocklyReadonly.blocklyComment .blocklyTextarea {\\n cursor: inherit;\\n}\\n\\n.blocklyDeleteIcon {\\n width: 20px;\\n height: 20px;\\n display: none;\\n cursor: pointer;\\n}\\n\\n.blocklyFoldoutIcon {\\n width: 20px;\\n height: 20px;\\n transform-origin: 12px 12px;\\n cursor: pointer;\\n}\\n.blocklyResizeHandle {\\n width: 12px;\\n height: 12px;\\n cursor: se-resize;\\n}\\n.blocklyReadonly.blocklyComment .blocklyResizeHandle {\\n cursor: inherit;\\n}\\n\\n.blocklyCommentTopbarBackground {\\n fill: var(--commentBorderColour);\\n height: 24px;\\n}\\n\\n.blocklyComment .blocklyCommentPreview.blocklyText {\\n fill: #000;\\n dominant-baseline: middle;\\n visibility: hidden;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyCommentPreview {\\n visibility: visible;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyCommentForeignObject,\\n.blocklyCollapsed.blocklyComment .blocklyResizeHandle {\\n display: none;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyFoldoutIcon {\\n transform: rotate(-90deg);\\n}\\n\\n.blocklyRTL .blocklyCommentTopbar {\\n transform: scale(-1, 1);\\n}\\n\\n.blocklyRTL .blocklyCommentForeignObject {\\n direction: rtl;\\n}\\n\\n.blocklyRTL .blocklyCommentPreview {\\n /* Revert the scale and control RTL using direction instead. */\\n transform: scale(-1, 1);\\n direction: rtl;\\n}\\n\\n.blocklyRTL .blocklyResizeHandle {\\n transform: scale(-1, 1);\\n cursor: sw-resize;\\n}\\n\\n.blocklyCommentHighlight {\\n fill: none;\\n}\\n\\n.blocklyCommentText.blocklyActiveFocus {\\n border-color: #fc3;\\n border-width: 2px;\\n}\\n\\n.blocklySelected .blocklyCommentHighlight {\\n stroke: #fc3;\\n stroke-width: 3px;\\n}\\n\\n.blocklyCollapsed.blocklySelected .blocklyCommentHighlight {\\n stroke: none;\\n}\\n\\n.blocklyCollapsed.blocklySelected .blocklyCommentTopbarBackground {\\n stroke: #fc3;\\n stroke-width: 3px;\\n}\\n\");\nvar module$build$src$core$comments$comment_view={};module$build$src$core$comments$comment_view.CommentView=CommentView$$module$build$src$core$comments$comment_view;var WorkspaceComment$$module$build$src$core$comments$workspace_comment=class{constructor(a,b){this.workspace=a;this.text=\"\";this.collapsed=!1;this.deletable=this.movable=this.editable=!0;this.location=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.disposing=this.disposed=!1;this.id=b&&!a.getCommentById(b)?b:genUid$$module$build$src$core$utils$idgenerator();this.size=CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize;a.addTopComment(this);this.fireCreateEvent()}fireCreateEvent(){isEnabled$$module$build$src$core$events$utils()&&\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CREATE))(this))}fireDeleteEvent(){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_DELETE))(this))}fireChangeEvent(a,b){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CHANGE))(this,\na,b))}fireCollapseEvent(a){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_COLLAPSE))(this,a))}setText(a){const b=this.text;this.text=a;this.fireChangeEvent(b,a)}getText(){return this.text}setSize(a){const b=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_RESIZE))(this);this.size=a;b.recordCurrentSizeAsNewSize();\nfire$$module$build$src$core$events$utils(b)}getSize(){return this.size}setCollapsed(a){this.collapsed=a;this.fireCollapseEvent(a)}isCollapsed(){return this.collapsed}setEditable(a){this.editable=a}isEditable(){return this.isOwnEditable()&&!this.workspace.isReadOnly()}isOwnEditable(){return this.editable}setMovable(a){this.movable=a}isMovable(){return this.isOwnMovable()&&!this.workspace.isReadOnly()&&!this.workspace.isFlyout}isOwnMovable(){return this.movable}setDeletable(a){this.deletable=a}isDeletable(){return this.isOwnDeletable()&&\n!this.isDeadOrDying()&&!this.workspace.isReadOnly()&&!this.workspace.isFlyout}isOwnDeletable(){return this.deletable}moveTo(a,b){const c=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_MOVE))(this);b&&c.setReason(b);this.location=a;c.recordNew();fire$$module$build$src$core$events$utils(c)}getRelativeToSurfaceXY(){return this.location}dispose(){this.disposing=!0;this.fireDeleteEvent();this.workspace.removeTopComment(this);this.disposed=!0}isDisposed(){return this.disposed}isDeadOrDying(){return this.disposing||\nthis.disposed}},module$build$src$core$comments$workspace_comment={};module$build$src$core$comments$workspace_comment.WorkspaceComment=WorkspaceComment$$module$build$src$core$comments$workspace_comment;var RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment=class extends WorkspaceComment$$module$build$src$core$comments$workspace_comment{constructor(a,b){super(a,b);this.dragStrategy=new CommentDragStrategy$$module$build$src$core$dragging$comment_drag_strategy(this);this.workspace=a;this.view=new CommentView$$module$build$src$core$comments$comment_view(a,this.id);this.view.setSize(this.getSize());this.view.setEditable(this.isEditable());this.view.getSvgRoot().setAttribute(\"data-id\",\nthis.id);this.view.getSvgRoot().setAttribute(\"id\",this.id);this.addModelUpdateBindings();conditionalBind$$module$build$src$core$browser_events(this.view.getSvgRoot(),\"pointerdown\",this,this.startGesture)}addModelUpdateBindings(){this.view.addTextChangeListener((a,b)=>void super.setText(b));this.view.addSizeChangeListener((a,b)=>void super.setSize(b));this.view.addOnCollapseListener(()=>void super.setCollapsed(this.view.isCollapsed()));this.view.addDisposeListener(()=>{this.isDeadOrDying()||this.dispose()})}setText(a){this.view.setText(a)}setPlaceholderText(a){this.view.setPlaceholderText(a)}setSize(a){this.view.setSize(a)}setCollapsed(a){this.view.setCollapsed(a)}setEditable(a){super.setEditable(a);\nthis.view.setEditable(this.isEditable())}getSvgRoot(){return this.view.getSvgRoot()}getSize(){return super.getSize()}getBoundingRectangle(){const a=this.getRelativeToSurfaceXY();var b,c;const d=(c=(b=this.view)==null?void 0:b.getSize())!=null?c:this.getSize();this.workspace.RTL?(b=a.x-d.width,c=a.x):(b=a.x,c=a.x+d.width);return new Rect$$module$build$src$core$utils$rect(a.y,a.y+d.height,b,c)}moveBy(a,b,c){const d=this.getRelativeToSurfaceXY();a=new Coordinate$$module$build$src$core$utils$coordinate(d.x+\na,d.y+b);this.moveTo(a,c)}moveTo(a,b){super.moveTo(a,b);this.view.moveTo(a)}moveDuringDrag(a){this.location=a;this.view.moveTo(a)}setDragging(a){a?addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDragging\"):removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDragging\")}dispose(){this.disposing=!0;const a=$.getFocusManager$$module$build$src$core$focus_manager();a.getFocusedNode()===this&&setTimeout(()=>a.focusTree(this.workspace),0);this.view.isDeadOrDying()||\nthis.view.dispose();super.dispose()}startGesture(a){const b=this.workspace.getGesture(a);b&&(b.handleCommentStart(a,this),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this))}setDeleteStyle(a){a?addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDraggingDelete\"):removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDraggingDelete\")}isCopyable(){return this.isOwnMovable()&&this.isOwnDeletable()}isMovable(){return this.dragStrategy.isMovable()}startDrag(){this.dragStrategy.startDrag()}drag(a){this.dragStrategy.drag(a)}endDrag(){this.dragStrategy.endDrag()}revertDrag(){this.dragStrategy.revertDrag()}select(){addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\n\"blocklySelected\");fireSelectedEvent$$module$build$src$core$common(this)}unselect(){removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklySelected\");fireSelectedEvent$$module$build$src$core$common(null)}toCopyData(){return{paster:WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE,commentState:save$$module$build$src$core$serialization$workspace_comments(this,{addCoordinates:!0,saveIds:!1})}}showContextMenu(a){const b=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({comment:this,\nfocusedNode:this},a);let c;c=a instanceof PointerEvent?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this.workspace,this.getRelativeToSurfaceXY()).translate(10,10);show$$module$build$src$core$contextmenu(a,b,this.workspace.RTL,this.workspace,c)}snapToGrid(){if(!this.isDeadOrDying()){var a=this.workspace.getGrid();if(a!=null&&a.shouldSnap()){var b=this.getRelativeToSurfaceXY();a=a.alignXY(b);a!==b&&this.moveTo(a,\n[\"snap\"])}}}getEditorFocusableNode(){return this.view.getEditorFocusableNode()}getFocusableElement(){return this.getSvgRoot()}getFocusableTree(){return this.workspace}onNodeFocus(){this.select();let a;(a=this.workspace.getLayerManager())==null||a.append(this,BLOCK$$module$build$src$core$layers);this.workspace.scrollBoundsIntoView(this.getBoundingRectangle())}onNodeBlur(){this.unselect()}canBeFocused(){return!0}},module$build$src$core$comments$rendered_workspace_comment={};\nmodule$build$src$core$comments$rendered_workspace_comment.RenderedWorkspaceComment=RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment;var module$build$src$core$xml={};module$build$src$core$xml.appendDomToWorkspace=appendDomToWorkspace$$module$build$src$core$xml;module$build$src$core$xml.blockToDom=blockToDom$$module$build$src$core$xml;module$build$src$core$xml.blockToDomWithXY=blockToDomWithXY$$module$build$src$core$xml;module$build$src$core$xml.clearWorkspaceAndLoadFromXml=clearWorkspaceAndLoadFromXml$$module$build$src$core$xml;module$build$src$core$xml.deleteNext=deleteNext$$module$build$src$core$xml;\nmodule$build$src$core$xml.domToBlock=$.domToBlock$$module$build$src$core$xml;module$build$src$core$xml.domToBlockInternal=domToBlockInternal$$module$build$src$core$xml;module$build$src$core$xml.domToPrettyText=domToPrettyText$$module$build$src$core$xml;module$build$src$core$xml.domToText=domToText$$module$build$src$core$xml;module$build$src$core$xml.domToVariables=domToVariables$$module$build$src$core$xml;module$build$src$core$xml.domToWorkspace=$.domToWorkspace$$module$build$src$core$xml;\nmodule$build$src$core$xml.loadWorkspaceComment=loadWorkspaceComment$$module$build$src$core$xml;module$build$src$core$xml.saveWorkspaceComment=saveWorkspaceComment$$module$build$src$core$xml;module$build$src$core$xml.variablesToDom=variablesToDom$$module$build$src$core$xml;module$build$src$core$xml.workspaceToDom=workspaceToDom$$module$build$src$core$xml;var BlockCreate$$module$build$src$core$events$events_block_create=class extends BlockBase$$module$build$src$core$events$events_block_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.BLOCK_CREATE;a&&(a.isShadow()&&(this.recordUndo=!1),this.xml=blockToDomWithXY$$module$build$src$core$xml(a),this.ids=getDescendantIds$$module$build$src$core$events$utils(a),this.json=save$$module$build$src$core$serialization$blocks(a,{addCoordinates:!0}))}toJson(){const a=super.toJson();\nif(!this.xml)throw Error(\"The block XML is undefined. Either pass a block to the constructor, or call fromJson\");if(!this.ids)throw Error(\"The block IDs are undefined. Either pass a block to the constructor, or call fromJson\");if(!this.json)throw Error(\"The block JSON is undefined. Either pass a block to the constructor, or call fromJson\");a.xml=domToText$$module$build$src$core$xml(this.xml);a.ids=this.ids;a.json=this.json;this.recordUndo||(a.recordUndo=this.recordUndo);return a}static fromJson(a,\nb,c){b=super.fromJson(a,b,c!=null?c:new BlockCreate$$module$build$src$core$events$events_block_create);b.xml=$.textToDom$$module$build$src$core$utils$xml(a.xml);b.ids=a.ids;b.json=a.json;a.recordUndo!==void 0&&(b.recordUndo=a.recordUndo);return b}run(a){const b=this.getEventWorkspace_();if(!this.json)throw Error(\"The block JSON is undefined. Either pass a block to the constructor, or call fromJson\");if(!this.ids)throw Error(\"The block IDs are undefined. Either pass a block to the constructor, or call fromJson\");\nif(!allShadowBlocks$$module$build$src$core$events$events_block_create(b,this.ids))if(a)append$$module$build$src$core$serialization$blocks(this.json,b);else for(a=0;aa.getBlockById(c)).filter(c=>c&&c.isShadow()).length===b.length};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.BLOCK_CREATE,BlockCreate$$module$build$src$core$events$events_block_create);var module$build$src$core$events$events_block_create={};module$build$src$core$events$events_block_create.BlockCreate=BlockCreate$$module$build$src$core$events$events_block_create;var ThemeChange$$module$build$src$core$events$events_theme_change=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b){super(b);this.type=EventType$$module$build$src$core$events$type.THEME_CHANGE;this.themeName=a}toJson(){const a=super.toJson();if(!this.themeName)throw Error(\"The theme name is undefined. Either pass a theme name to the constructor, or call fromJson\");a.themeName=this.themeName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new ThemeChange$$module$build$src$core$events$events_theme_change);\nb.themeName=a.themeName;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.THEME_CHANGE,ThemeChange$$module$build$src$core$events$events_theme_change);var module$build$src$core$events$events_theme_change={};module$build$src$core$events$events_theme_change.ThemeChange=ThemeChange$$module$build$src$core$events$events_theme_change;var ViewportChange$$module$build$src$core$events$events_viewport=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b,c,d,e){super(d);this.type=EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE;this.viewTop=a;this.viewLeft=b;this.scale=c;this.oldScale=e}toJson(){const a=super.toJson();if(this.viewTop===void 0)throw Error(\"The view top is undefined. Either pass a value to the constructor, or call fromJson\");if(this.viewLeft===void 0)throw Error(\"The view left is undefined. Either pass a value to the constructor, or call fromJson\");\nif(this.scale===void 0)throw Error(\"The scale is undefined. Either pass a value to the constructor, or call fromJson\");if(this.oldScale===void 0)throw Error(\"The old scale is undefined. Either pass a value to the constructor, or call fromJson\");a.viewTop=this.viewTop;a.viewLeft=this.viewLeft;a.scale=this.scale;a.oldScale=this.oldScale;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new ViewportChange$$module$build$src$core$events$events_viewport);b.viewTop=a.viewTop;b.viewLeft=a.viewLeft;\nb.scale=a.scale;b.oldScale=a.oldScale;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE,ViewportChange$$module$build$src$core$events$events_viewport);var module$build$src$core$events$events_viewport={};module$build$src$core$events$events_viewport.ViewportChange=ViewportChange$$module$build$src$core$events$events_viewport;var TEST_ONLY$$module$build$src$core$field_registry={fromJsonInternal:fromJsonInternal$$module$build$src$core$field_registry},module$build$src$core$field_registry={TEST_ONLY:TEST_ONLY$$module$build$src$core$field_registry};module$build$src$core$field_registry.fromJson=$.fromJson$$module$build$src$core$field_registry;module$build$src$core$field_registry.register=register$$module$build$src$core$field_registry;module$build$src$core$field_registry.unregister=unregister$$module$build$src$core$field_registry;var FieldDropdown$$module$build$src$core$field_dropdown=class extends Field$$module$build$src$core$field{constructor(a,b,c){super(Field$$module$build$src$core$field.SKIP_SETUP);this.svgArrow=this.arrow=this.imageElement=this.menu_=this.selectedMenuItem=null;this.SERIALIZABLE=!0;this.clickTarget_=this.suffixField=this.prefixField=this.generatedOptions=null;a!==Field$$module$build$src$core$field.SKIP_SETUP&&(this.setOptions(a),c&&this.configure_(c),b&&this.setValidator(b))}fromXml(a){this.isOptionListDynamic()&&\nthis.getOptions(!1);this.setValue(a.textContent)}loadState(a){this.loadLegacyState(FieldDropdown$$module$build$src$core$field_dropdown,a)||(this.isOptionListDynamic()&&this.getOptions(!1),this.setValue(a))}initView(){this.shouldAddBorderRect_()?this.createBorderRect_():this.clickTarget_=this.sourceBlock_.getSvgRoot();this.createTextElement_();this.imageElement=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{},this.fieldGroup_);this.getConstants().FIELD_DROPDOWN_SVG_ARROW?\nthis.createSVGArrow_():this.createTextArrow_();this.borderRect_&&addClass$$module$build$src$core$utils$dom(this.borderRect_,\"blocklyDropdownRect\");this.fieldGroup_&&(addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyField\"),addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyDropdownField\"))}shouldAddBorderRect_(){let a;return!this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW||this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW&&!((a=this.getSourceBlock())==\nnull?0:a.isShadow())}createTextArrow_(){this.arrow=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TSPAN,{},this.textElement_);let a;this.arrow.appendChild(document.createTextNode(((a=this.getSourceBlock())==null?0:a.RTL)?FieldDropdown$$module$build$src$core$field_dropdown.ARROW_CHAR+\" \":\" \"+FieldDropdown$$module$build$src$core$field_dropdown.ARROW_CHAR));this.getConstants().FIELD_TEXT_BASELINE_CENTER&&this.arrow.setAttribute(\"dominant-baseline\",\"central\");let b;\n((b=this.getSourceBlock())==null?0:b.RTL)?this.getTextElement().insertBefore(this.arrow,this.textContent_):this.getTextElement().appendChild(this.arrow)}createSVGArrow_(){this.svgArrow=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{height:this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE+\"px\",width:this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE+\"px\"},this.fieldGroup_);this.svgArrow.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.getConstants().FIELD_DROPDOWN_SVG_ARROW_DATAURI)}showEditor_(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.dropdownCreate();this.menu_&&(this.menu_.openingCoords=a&&typeof a.clientX===\"number\"?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):null,clearContent$$module$build$src$core$dropdowndiv(),a=this.menu_.render(getContentDiv$$module$build$src$core$dropdowndiv()),addClass$$module$build$src$core$utils$dom(a,\n\"blocklyDropdownMenu\"),this.getConstants().FIELD_DROPDOWN_COLOURED_DIV&&(b=b.getColour(),a=this.sourceBlock_.getColourTertiary(),setColour$$module$build$src$core$dropdowndiv(b,a)),showPositionedByField$$module$build$src$core$dropdowndiv(this,this.dropdownDispose_.bind(this)),getContentDiv$$module$build$src$core$dropdowndiv().style.height=`${this.menu_.getSize().height}px`,this.menu_.focus(),this.selectedMenuItem&&this.menu_.setHighlighted(this.selectedMenuItem),this.applyColour())}dropdownCreate(){const a=\nthis.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;const b=new Menu$$module$build$src$core$menu;b.setRole(Role$$module$build$src$core$utils$aria.LISTBOX);this.menu_=b;const c=this.getOptions(!1);this.selectedMenuItem=null;for(let e=0;eb[1]===a)?a:(this.sourceBlock_&&console.warn(\"Cannot set the dropdown's value to an unavailable option. Block type: \"+this.sourceBlock_.type+\", Field name: \"+this.name+\", Value: \"+a),null)}doValueUpdate_(a){super.doValueUpdate_(a);\na=this.getOptions(!0);for(let b=0,c;c=a[b];b++)c[1]===this.value_&&(this.selectedOption=c)}applyColour(){const a=this.sourceBlock_;this.borderRect_&&(this.borderRect_.setAttribute(\"stroke\",a.getColourTertiary()),this.menu_?this.borderRect_.setAttribute(\"fill\",a.getColourTertiary()):this.borderRect_.setAttribute(\"fill\",\"transparent\"));a&&this.arrow&&(a.isShadow()?this.arrow.style.fill=a.getColourSecondary():this.arrow.style.fill=a.getColour())}render_(){this.getTextContent().nodeValue=\"\";this.imageElement.style.display=\n\"none\";const a=this.selectedOption&&this.selectedOption[0];isImageProperties$$module$build$src$core$field_dropdown(a)?this.renderSelectedImage(a):this.renderSelectedText();this.positionBorderRect_()}renderSelectedImage(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.imageElement.style.display=\"\";this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",a.src);this.imageElement.setAttribute(\"height\",String(a.height));\nthis.imageElement.setAttribute(\"width\",String(a.width));const c=Number(a.height);a=Number(a.width);var d=!!this.borderRect_;const e=Math.max(d?this.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT:0,c+FieldDropdown$$module$build$src$core$field_dropdown.IMAGE_Y_PADDING);d=d?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0;let f;f=this.svgArrow?this.positionSVGArrow(a+d,e/2-this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE/2):getTextWidth$$module$build$src$core$utils$dom(this.arrow);this.size_=new Size$$module$build$src$core$utils$size(a+\nf+d*2,e);let g=0;b.RTL?this.imageElement.setAttribute(\"x\",`${d+f}`):(g=a+f,this.getTextElement().setAttribute(\"text-anchor\",\"end\"),this.imageElement.setAttribute(\"x\",`${d}`));this.imageElement.setAttribute(\"y\",String(e/2-c/2));this.positionTextElement_(g+d,a+f)}renderSelectedText(){this.getTextContent().nodeValue=this.getDisplayText_();var a=this.getTextElement();addClass$$module$build$src$core$utils$dom(a,\"blocklyDropdownText\");a.setAttribute(\"text-anchor\",\"start\");var b=!!this.borderRect_;a=Math.max(b?\nthis.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT:0,this.getConstants().FIELD_TEXT_HEIGHT);const c=getTextWidth$$module$build$src$core$utils$dom(this.getTextElement());b=b?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0;let d=0;this.svgArrow&&(d=this.positionSVGArrow(c+b,a/2-this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE/2));this.size_=new Size$$module$build$src$core$utils$size(c+d+b*2,a);this.positionTextElement_(b,c)}positionSVGArrow(a,b){if(!this.svgArrow)return 0;const c=this.getSourceBlock();\nif(!c)throw new UnattachedFieldError$$module$build$src$core$field;const d=this.borderRect_?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0,e=this.getConstants().FIELD_DROPDOWN_SVG_ARROW_PADDING,f=this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE;this.svgArrow.setAttribute(\"transform\",\"translate(\"+(c.RTL?d:a+e)+\",\"+b+\")\");return f+e}getText_(){if(!this.selectedOption)return null;const a=this.selectedOption[0];if(isImageProperties$$module$build$src$core$field_dropdown(a))return a.alt;if(typeof HTMLElement!==\n\"undefined\"&&a instanceof HTMLElement){let b,c;return(c=(b=a.title)!=null?b:a.ariaLabel)!=null?c:a.innerText}if(typeof a===\"string\")return a;console.warn(\"Can't get text for existing dropdown option. If you're using HTMLElement dropdown options in node, ensure you're using jsdom-global or similar.\");return null}static fromJson(a){if(!a.options)throw Error(\"options are required for the dropdown field. The options property must be assigned an array of [humanReadableValue, languageNeutralValue] tuples.\");\nreturn new this(a.options,void 0,a)}trimOptions(a){let b=!1;const c=a.map(g=>{if(g===FieldDropdown$$module$build$src$core$field_dropdown.SEPARATOR)return b=!0,g;const [h,k]=g;if(typeof h===\"string\")return[replaceMessageReferences$$module$build$src$core$utils$parsing(h),k];b=!0;return[isImageProperties$$module$build$src$core$field_dropdown(h)?Object.assign({},h,{alt:replaceMessageReferences$$module$build$src$core$utils$parsing(h.alt)}):h,k]});if(b||a.length<2)return{options:c};var d=c.map(([g])=>g),\ne=shortestStringLength$$module$build$src$core$utils$string(d);a=commonWordPrefix$$module$build$src$core$utils$string(d,e);const f=commonWordSuffix$$module$build$src$core$utils$string(d,e);if(!a&&!f||e<=a+f)return{options:c};e=a?d[0].substring(0,a-1):void 0;d=f?d[0].substr(1-f):void 0;return{options:this.applyTrim(c,a,f),prefix:e,suffix:d}}applyTrim(a,b,c){return a.map(([d,e])=>[d.substring(b,d.length-c),e])}validateOptions(a){if(!Array.isArray(a))throw TypeError(\"FieldDropdown options must be an array.\");\nif(!a.length)throw TypeError(\"FieldDropdown options must not be an empty array.\");let b=!1;for(let c=0;c0&&!!a.snap;return b}static parseThemeOptions(a){a=a.theme||Classic$$module$build$src$core$theme$classic;return typeof a===\"string\"?getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.THEME,a):a instanceof Theme$$module$build$src$core$theme?a:Theme$$module$build$src$core$theme.defineTheme(a.name||\"builtin\"+getNextUniqueId$$module$build$src$core$utils$idgenerator(),a)}},module$build$src$core$options=\n{};module$build$src$core$options.Options=Options$$module$build$src$core$options;var BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy=class{constructor(a,b){this.bubble=a;this.workspace=b;this.startLoc=null}isMovable(){return!0}startDrag(){this.startLoc=this.bubble.getRelativeToSurfaceXY();this.workspace.setResizesEnabled(!1);let a;(a=this.workspace.getLayerManager())==null||a.moveToDragLayer(this.bubble);this.bubble.setDragging&&this.bubble.setDragging(!0)}drag(a){this.bubble.moveDuringDrag(a)}endDrag(){this.workspace.setResizesEnabled(!0);let a;(a=this.workspace.getLayerManager())==\nnull||a.moveOffDragLayer(this.bubble,BUBBLE$$module$build$src$core$layers);this.bubble.setDragging(!1)}revertDrag(){this.startLoc&&this.bubble.moveDuringDrag(this.startLoc)}},module$build$src$core$dragging$bubble_drag_strategy={};module$build$src$core$dragging$bubble_drag_strategy.BubbleDragStrategy=BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy;var _a$$module$build$src$core$bubbles$bubble,Bubble$$module$build$src$core$bubbles$bubble=class{constructor(a,b,c,d,e){this.workspace=a;this.anchor=b;this.ownerRect=c;this.owner=e;this.size=new Size$$module$build$src$core$utils$size(0,0);this.colour=\"#ffffff\";this.disposed=!1;this.relativeLeft=this.relativeTop=0;this.dragStrategy=new BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy(this,this.workspace);this.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();this.svgRoot=\ncreateSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyBubble\"},a.getBubbleCanvas());a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyEmboss\"},this.svgRoot);this.tail=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyBubbleTail\"},a);this.background=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{\"class\":\"blocklyDraggable\",x:0,y:0,rx:_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH,ry:_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},a);this.contentContainer=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},this.svgRoot);this.focusableElement=d!=null?d:this.svgRoot;this.focusableElement.setAttribute(\"id\",this.id);conditionalBind$$module$build$src$core$browser_events(this.background,\"pointerdown\",this,this.onMouseDown);conditionalBind$$module$build$src$core$browser_events(this.focusableElement,\n\"keydown\",this,this.onKeyDown)}dispose(){removeNode$$module$build$src$core$utils$dom(this.svgRoot);this.disposed=!0}setAnchorLocation(a,b=!1){this.anchor=a;b?this.positionByRect(this.ownerRect):this.positionRelativeToAnchor();this.renderTail()}setPositionRelativeToAnchor(a,b){this.relativeLeft=a;this.relativeTop=b;this.positionRelativeToAnchor();this.renderTail()}getSize(){return this.size}setSize(a,b=!1){a.width=Math.max(a.width,_a$$module$build$src$core$bubbles$bubble.MIN_SIZE);a.height=Math.max(a.height,\n_a$$module$build$src$core$bubbles$bubble.MIN_SIZE);this.size=a;this.background.setAttribute(\"width\",`${a.width}`);this.background.setAttribute(\"height\",`${a.height}`);b?this.positionByRect(this.ownerRect):this.positionRelativeToAnchor();this.renderTail()}getColour(){return this.colour}setColour(a){this.colour=a;this.tail.setAttribute(\"fill\",a);this.background.setAttribute(\"fill\",a)}onMouseDown(a){let b;(b=this.workspace.getGesture(a))==null||b.handleBubbleStart(a,this);$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this)}onKeyDown(a){a.key===\n\"Escape\"&&this.owner&&(this.owner.setBubbleVisible(!1),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.owner))}positionRelativeToAnchor(){let a=this.anchor.x;a=this.workspace.RTL?a-(this.relativeLeft+this.size.width):a+this.relativeLeft;this.moveTo(a,this.relativeTop+this.anchor.y)}moveTo(a,b){this.svgRoot.setAttribute(\"transform\",`translate(${a}, ${b})`)}positionByRect(a=new Rect$$module$build$src$core$utils$rect(0,0,0,0)){var b=this.workspace.getMetricsManager().getViewMetrics(!0),\nc=this.getOptimalRelativeLeft(b),d=this.getOptimalRelativeTop(b);const e={x:c,y:-this.size.height-this.workspace.getRenderer().getConstants().MIN_BLOCK_HEIGHT},f={x:-this.size.width-30,y:d};d={x:a.getWidth(),y:d};var g={x:c,y:a.getHeight()};c=a.getWidth()a.width)return b;a=this.getWorkspaceViewRect(a);if(this.workspace.RTL){var c=this.anchor.x-b;c-this.size.widtha.right&&(b=-(a.right-this.anchor.x))}else{c=b+this.anchor.x;const d=c+this.size.width;ca.right&&(b=a.right-this.anchor.x-this.size.width)}return b}getOptimalRelativeTop(a){let b=-this.size.height/4;if(this.size.height>a.height)return b;const c=this.anchor.y+b,d=c+this.size.height;a=this.getWorkspaceViewRect(a);\nca.bottom&&(b=a.bottom-this.anchor.y-this.size.height);return b}getWorkspaceViewRect(a){const b=a.top;let c=a.top+a.height,d=a.left;a=a.left+a.width;c-=this.getScrollbarThickness();this.workspace.RTL?d-=this.getScrollbarThickness():a-=this.getScrollbarThickness();return new Rect$$module$build$src$core$utils$rect(b,c,d,a)}getScrollbarThickness(){return Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness/this.workspace.scale}renderTail(){const a=[];var b=this.size.width/\n2,c=this.size.height/2,d=-this.relativeLeft,e=-this.relativeTop;if(b===d&&c===e)a.push(\"M \"+b+\",\"+c);else{e-=c;d-=b;this.workspace.RTL&&(d*=-1);var f=Math.sqrt(e*e+d*d),g=Math.acos(d/f);e<0&&(g=2*Math.PI-g);var h=g+Math.PI/2;h>Math.PI*2&&(h-=Math.PI*2);var k=Math.sin(h);const m=Math.cos(h);let n=(this.size.width+this.size.height)/_a$$module$build$src$core$bubbles$bubble.TAIL_THICKNESS;n=Math.min(n,this.size.width,this.size.height)/4;h=1-_a$$module$build$src$core$bubbles$bubble.ANCHOR_RADIUS/f;d=b+\nh*d;e=c+h*e;h=b+n*m;const p=c+n*k;b-=n*m;c-=n*k;k=toRadians$$module$build$src$core$utils$math(this.workspace.RTL?-_a$$module$build$src$core$bubbles$bubble.TAIL_ANGLE:_a$$module$build$src$core$bubbles$bubble.TAIL_ANGLE);k=g+k;k>Math.PI*2&&(k-=Math.PI*2);g=Math.sin(k)*f/_a$$module$build$src$core$bubbles$bubble.TAIL_BEND;f=Math.cos(k)*f/_a$$module$build$src$core$bubbles$bubble.TAIL_BEND;a.push(\"M\"+h+\",\"+p);a.push(\"C\"+(h+f)+\",\"+(p+g)+\" \"+d+\",\"+e+\" \"+d+\",\"+e);a.push(\"C\"+d+\",\"+e+\" \"+(b+f)+\",\"+(c+g)+\" \"+\nb+\",\"+c)}a.push(\"z\");let l;(l=this.tail)==null||l.setAttribute(\"d\",a.join(\" \"))}bringToFront(){let a;const b=(a=this.svgRoot)==null?void 0:a.parentNode;return this.svgRoot&&(b==null?void 0:b.lastChild)!==this.svgRoot?(b==null||b.appendChild(this.svgRoot),!0):!1}getRelativeToSurfaceXY(){return new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.relativeLeft+this.anchor.x-this.size.width:this.anchor.x+this.relativeLeft,this.anchor.y+this.relativeTop)}getSvgRoot(){return this.svgRoot}moveDuringDrag(a){this.moveTo(a.x,\na.y);this.relativeLeft=this.workspace.RTL?this.anchor.x-a.x-this.size.width:a.x-this.anchor.x;this.relativeTop=a.y-this.anchor.y;this.renderTail()}setDragging(a){}setDeleteStyle(a){}isDeletable(){return!1}showContextMenu(a){}isMovable(){return!0}startDrag(){this.dragStrategy.startDrag()}drag(a){this.dragStrategy.drag(a)}endDrag(){this.dragStrategy.endDrag()}revertDrag(){this.dragStrategy.revertDrag()}select(){fireSelectedEvent$$module$build$src$core$common(this)}unselect(){fireSelectedEvent$$module$build$src$core$common(null)}getFocusableElement(){return this.focusableElement}getFocusableTree(){return this.workspace}onNodeFocus(){this.select();\nthis.bringToFront();var a=this.getRelativeToSurfaceXY();const b=this.getSize();a=new Rect$$module$build$src$core$utils$rect(a.y,a.y+b.height,a.x,a.x+b.width);this.workspace.scrollBoundsIntoView(a)}onNodeBlur(){this.unselect()}canBeFocused(){return!0}getOwner(){return this.owner}};_a$$module$build$src$core$bubbles$bubble=Bubble$$module$build$src$core$bubbles$bubble;Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH=6;\nBubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER=_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2;Bubble$$module$build$src$core$bubbles$bubble.MIN_SIZE=_a$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER;Bubble$$module$build$src$core$bubbles$bubble.TAIL_THICKNESS=1;Bubble$$module$build$src$core$bubbles$bubble.TAIL_ANGLE=20;Bubble$$module$build$src$core$bubbles$bubble.TAIL_BEND=4;Bubble$$module$build$src$core$bubbles$bubble.ANCHOR_RADIUS=8;\nvar module$build$src$core$bubbles$bubble={};module$build$src$core$bubbles$bubble.Bubble=Bubble$$module$build$src$core$bubbles$bubble;var MiniWorkspaceBubble$$module$build$src$core$bubbles$mini_workspace_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(b,c,d);this.workspace=b;this.anchor=c;this.ownerRect=d;this.autoLayout=!0;b=new Options$$module$build$src$core$options(a);this.validateWorkspaceOptions(b);this.svgDialog=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{x:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH,y:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},\nthis.contentContainer);a.parentWorkspace=this.workspace;this.miniWorkspace=this.newWorkspaceSvg(new Options$$module$build$src$core$options(a));this.miniWorkspace.internalIsMutator=!0;a=this.miniWorkspace.createDom(\"blocklyMutatorBackground\");this.svgDialog.appendChild(a);b.languageTree&&(a.insertBefore(this.miniWorkspace.addFlyout(Svg$$module$build$src$core$utils$svg.G),this.miniWorkspace.getCanvas()),a=this.miniWorkspace.getFlyout(),a==null||a.init(this.miniWorkspace),a==null||a.show(b.languageTree));\naddClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyMiniWorkspaceBubble\");this.miniWorkspace.addChangeListener(this.onWorkspaceChange.bind(this));let e,f;(e=this.miniWorkspace.getFlyout())==null||(f=e.getWorkspace())==null||f.addChangeListener(this.onWorkspaceChange.bind(this));this.updateBubbleSize()}dispose(){this.miniWorkspace.dispose();super.dispose()}getWorkspace(){return this.miniWorkspace}addWorkspaceChangeListener(a){this.miniWorkspace.addChangeListener(a)}validateWorkspaceOptions(a){if(a.hasCategories)throw Error(\"The miniworkspace bubble does not support toolboxes with categories\");\nif(a.hasTrashcan)throw Error(\"The miniworkspace bubble does not support trashcans\");if(a.zoomOptions.controls||a.zoomOptions.wheel||a.zoomOptions.pinch)throw Error(\"The miniworkspace bubble does not support zooming\");if(a.moveOptions.scrollbars||a.moveOptions.wheel||a.moveOptions.drag)throw Error(\"The miniworkspace bubble does not scrolling/moving the workspace\");if(a.horizontalLayout)throw Error(\"The miniworkspace bubble does not support horizontal layouts\");}onWorkspaceChange(){this.bumpBlocksIntoBounds();\nthis.updateBubbleSize()}bumpBlocksIntoBounds(){if(!this.miniWorkspace.isDragging()||this.miniWorkspace.keyboardMoveInProgress)for(const a of this.miniWorkspace.getTopBlocks(!1)){const b=a.getRelativeToSurfaceXY();b.y<20&&a.moveBy(0,20-b.y);if(a.RTL){let c=-20;const d=this.miniWorkspace.getFlyout();d&&(c-=d.getWidth());b.x>c&&a.moveBy(c-b.x,0)}else b.x<20&&a.moveBy(20-b.x,0)}}updateBubbleSize(){if(!this.miniWorkspace.isDragging()||this.miniWorkspace.keyboardMoveInProgress){this.autoLayout&&(this.autoLayout=\n!this.miniWorkspace.keyboardMoveInProgress);var a=this.getSize(),b=this.calculateWorkspaceSize();Math.abs(a.width-b.width)({kind:\"block\",type:c}))});return b}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$mutator_icon/\n2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,new Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){const a=this.sourceBlock.getSvgRoot().getBBox();return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}createRootBlock(){if(!this.sourceBlock.decompose)throw Error(\"Blocks with mutator icons must include a decompose method\");this.rootBlock=this.sourceBlock.decompose(this.miniWorkspaceBubble.getWorkspace());\nfor(var a of this.rootBlock.getDescendants(!1))a.queueRender();this.rootBlock.setMovable(!1);this.rootBlock.setDeletable(!1);let b,c,d,e;a=(e=(b=this.miniWorkspaceBubble)==null?void 0:(c=b.getWorkspace())==null?void 0:(d=c.getFlyout())==null?void 0:d.getWidth())!=null?e:0;this.rootBlock.moveBy(this.rootBlock.RTL?-(a+WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon):WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon,WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon)}addSaveConnectionsListener(){this.sourceBlock.saveConnections&&\nthis.rootBlock&&(this.saveConnectionsListener=()=>{this.sourceBlock.saveConnections&&this.rootBlock&&this.sourceBlock.saveConnections(this.rootBlock)},this.saveConnectionsListener(),this.sourceBlock.workspace.addChangeListener(this.saveConnectionsListener))}createMiniWorkspaceChangeListener(){return a=>{$.MutatorIcon$$module$build$src$core$icons$mutator_icon.isIgnorableMutatorEvent(a)||this.updateWorkspacePid||(this.updateWorkspacePid=setTimeout(()=>{this.updateWorkspacePid=null;this.recomposeSourceBlock()},\n0))}}static isIgnorableMutatorEvent(a){return a.isUiEvent||isBlockCreate$$module$build$src$core$events$predicates(a)||isBlockChange$$module$build$src$core$events$predicates(a)&&a.element===\"disabled\"}recomposeSourceBlock(){if(this.rootBlock){if(!this.sourceBlock.compose)throw Error(\"Blocks with mutator icons must include a compose method\");var a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);var b=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(this.sourceBlock);\nthis.sourceBlock.compose(this.rootBlock);var c=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(this.sourceBlock);b!==c&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\"mutation\",null,b,c));$.setGroup$$module$build$src$core$events$utils(a)}}getWorkspace(){let a;return(a=this.miniWorkspaceBubble)==null?void 0:a.getWorkspace()}};\n$.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.MUTATOR;$.MutatorIcon$$module$build$src$core$icons$mutator_icon.WEIGHT=1;var module$build$src$core$icons$mutator_icon={};module$build$src$core$icons$mutator_icon.MutatorIcon=$.MutatorIcon$$module$build$src$core$icons$mutator_icon;var allExtensions$$module$build$src$core$extensions=Object.create(null),TEST_ONLY$$module$build$src$core$extensions={allExtensions:allExtensions$$module$build$src$core$extensions};$.register$$module$build$src$core$extensions(\"parent_tooltip_when_inline\",extensionParentTooltip$$module$build$src$core$extensions);var module$build$src$core$extensions={TEST_ONLY:TEST_ONLY$$module$build$src$core$extensions};module$build$src$core$extensions.apply=apply$$module$build$src$core$extensions;\nmodule$build$src$core$extensions.buildTooltipForDropdown=$.buildTooltipForDropdown$$module$build$src$core$extensions;module$build$src$core$extensions.buildTooltipWithFieldText=$.buildTooltipWithFieldText$$module$build$src$core$extensions;module$build$src$core$extensions.isRegistered=isRegistered$$module$build$src$core$extensions;module$build$src$core$extensions.register=$.register$$module$build$src$core$extensions;module$build$src$core$extensions.registerMixin=$.registerMixin$$module$build$src$core$extensions;\nmodule$build$src$core$extensions.registerMutator=$.registerMutator$$module$build$src$core$extensions;module$build$src$core$extensions.runAfterPageLoad=runAfterPageLoad$$module$build$src$core$extensions;module$build$src$core$extensions.unregister=unregister$$module$build$src$core$extensions;var KeyCodes$$module$build$src$core$utils$keycodes;\n(function(a){a[a.WIN_KEY_FF_LINUX=0]=\"WIN_KEY_FF_LINUX\";a[a.MAC_ENTER=3]=\"MAC_ENTER\";a[a.BACKSPACE=8]=\"BACKSPACE\";a[a.TAB=9]=\"TAB\";a[a.NUM_CENTER=12]=\"NUM_CENTER\";a[a.ENTER=13]=\"ENTER\";a[a.SHIFT=16]=\"SHIFT\";a[a.CTRL=17]=\"CTRL\";a[a.ALT=18]=\"ALT\";a[a.PAUSE=19]=\"PAUSE\";a[a.CAPS_LOCK=20]=\"CAPS_LOCK\";a[a.ESC=27]=\"ESC\";a[a.SPACE=32]=\"SPACE\";a[a.PAGE_UP=33]=\"PAGE_UP\";a[a.PAGE_DOWN=34]=\"PAGE_DOWN\";a[a.END=35]=\"END\";a[a.HOME=36]=\"HOME\";a[a.LEFT=37]=\"LEFT\";a[a.UP=38]=\"UP\";a[a.RIGHT=39]=\"RIGHT\";a[a.DOWN=40]=\n\"DOWN\";a[a.PLUS_SIGN=43]=\"PLUS_SIGN\";a[a.PRINT_SCREEN=44]=\"PRINT_SCREEN\";a[a.INSERT=45]=\"INSERT\";a[a.DELETE=46]=\"DELETE\";a[a.ZERO=48]=\"ZERO\";a[a.ONE=49]=\"ONE\";a[a.TWO=50]=\"TWO\";a[a.THREE=51]=\"THREE\";a[a.FOUR=52]=\"FOUR\";a[a.FIVE=53]=\"FIVE\";a[a.SIX=54]=\"SIX\";a[a.SEVEN=55]=\"SEVEN\";a[a.EIGHT=56]=\"EIGHT\";a[a.NINE=57]=\"NINE\";a[a.FF_SEMICOLON=59]=\"FF_SEMICOLON\";a[a.FF_EQUALS=61]=\"FF_EQUALS\";a[a.FF_DASH=173]=\"FF_DASH\";a[a.FF_HASH=163]=\"FF_HASH\";a[a.QUESTION_MARK=63]=\"QUESTION_MARK\";a[a.AT_SIGN=64]=\"AT_SIGN\";\na[a.A=65]=\"A\";a[a.B=66]=\"B\";a[a.C=67]=\"C\";a[a.D=68]=\"D\";a[a.E=69]=\"E\";a[a.F=70]=\"F\";a[a.G=71]=\"G\";a[a.H=72]=\"H\";a[a.I=73]=\"I\";a[a.J=74]=\"J\";a[a.K=75]=\"K\";a[a.L=76]=\"L\";a[a.M=77]=\"M\";a[a.N=78]=\"N\";a[a.O=79]=\"O\";a[a.P=80]=\"P\";a[a.Q=81]=\"Q\";a[a.R=82]=\"R\";a[a.S=83]=\"S\";a[a.T=84]=\"T\";a[a.U=85]=\"U\";a[a.V=86]=\"V\";a[a.W=87]=\"W\";a[a.X=88]=\"X\";a[a.Y=89]=\"Y\";a[a.Z=90]=\"Z\";a[a.META=91]=\"META\";a[a.WIN_KEY_RIGHT=92]=\"WIN_KEY_RIGHT\";a[a.CONTEXT_MENU=93]=\"CONTEXT_MENU\";a[a.NUM_ZERO=96]=\"NUM_ZERO\";a[a.NUM_ONE=97]=\n\"NUM_ONE\";a[a.NUM_TWO=98]=\"NUM_TWO\";a[a.NUM_THREE=99]=\"NUM_THREE\";a[a.NUM_FOUR=100]=\"NUM_FOUR\";a[a.NUM_FIVE=101]=\"NUM_FIVE\";a[a.NUM_SIX=102]=\"NUM_SIX\";a[a.NUM_SEVEN=103]=\"NUM_SEVEN\";a[a.NUM_EIGHT=104]=\"NUM_EIGHT\";a[a.NUM_NINE=105]=\"NUM_NINE\";a[a.NUM_MULTIPLY=106]=\"NUM_MULTIPLY\";a[a.NUM_PLUS=107]=\"NUM_PLUS\";a[a.NUM_MINUS=109]=\"NUM_MINUS\";a[a.NUM_PERIOD=110]=\"NUM_PERIOD\";a[a.NUM_DIVISION=111]=\"NUM_DIVISION\";a[a.F1=112]=\"F1\";a[a.F2=113]=\"F2\";a[a.F3=114]=\"F3\";a[a.F4=115]=\"F4\";a[a.F5=116]=\"F5\";a[a.F6=\n117]=\"F6\";a[a.F7=118]=\"F7\";a[a.F8=119]=\"F8\";a[a.F9=120]=\"F9\";a[a.F10=121]=\"F10\";a[a.F11=122]=\"F11\";a[a.F12=123]=\"F12\";a[a.NUMLOCK=144]=\"NUMLOCK\";a[a.SCROLL_LOCK=145]=\"SCROLL_LOCK\";a[a.FIRST_MEDIA_KEY=166]=\"FIRST_MEDIA_KEY\";a[a.LAST_MEDIA_KEY=183]=\"LAST_MEDIA_KEY\";a[a.SEMICOLON=186]=\"SEMICOLON\";a[a.DASH=189]=\"DASH\";a[a.EQUALS=187]=\"EQUALS\";a[a.COMMA=188]=\"COMMA\";a[a.PERIOD=190]=\"PERIOD\";a[a.SLASH=191]=\"SLASH\";a[a.APOSTROPHE=192]=\"APOSTROPHE\";a[a.TILDE=192]=\"TILDE\";a[a.SINGLE_QUOTE=222]=\"SINGLE_QUOTE\";\na[a.OPEN_SQUARE_BRACKET=219]=\"OPEN_SQUARE_BRACKET\";a[a.BACKSLASH=220]=\"BACKSLASH\";a[a.CLOSE_SQUARE_BRACKET=221]=\"CLOSE_SQUARE_BRACKET\";a[a.WIN_KEY=224]=\"WIN_KEY\";a[a.MAC_FF_META=224]=\"MAC_FF_META\";a[a.MAC_WK_CMD_LEFT=91]=\"MAC_WK_CMD_LEFT\";a[a.MAC_WK_CMD_RIGHT=93]=\"MAC_WK_CMD_RIGHT\";a[a.WIN_IME=229]=\"WIN_IME\";a[a.VK_NONAME=252]=\"VK_NONAME\";a[a.PHANTOM=255]=\"PHANTOM\"})(KeyCodes$$module$build$src$core$utils$keycodes||(KeyCodes$$module$build$src$core$utils$keycodes={}));\nvar module$build$src$core$utils$keycodes={};module$build$src$core$utils$keycodes.KeyCodes=KeyCodes$$module$build$src$core$utils$keycodes;var module$build$src$core$utils$svg_paths={};module$build$src$core$utils$svg_paths.arc=arc$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.curve=curve$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.line=line$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.lineOnAxis=lineOnAxis$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.lineTo=lineTo$$module$build$src$core$utils$svg_paths;\nmodule$build$src$core$utils$svg_paths.moveBy=moveBy$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.moveTo=moveTo$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.point=point$$module$build$src$core$utils$svg_paths;var module$build$src$core$utils={};module$build$src$core$utils.Coordinate=Coordinate$$module$build$src$core$utils$coordinate;module$build$src$core$utils.KeyCodes=KeyCodes$$module$build$src$core$utils$keycodes;module$build$src$core$utils.Rect=Rect$$module$build$src$core$utils$rect;module$build$src$core$utils.Size=Size$$module$build$src$core$utils$size;module$build$src$core$utils.Svg=Svg$$module$build$src$core$utils$svg;module$build$src$core$utils.aria=module$build$src$core$utils$aria;\nmodule$build$src$core$utils.array=module$build$src$core$utils$array;module$build$src$core$utils.browserEvents=module$build$src$core$browser_events;module$build$src$core$utils.colour=module$build$src$core$utils$colour;module$build$src$core$utils.deprecation=module$build$src$core$utils$deprecation;module$build$src$core$utils.dom=module$build$src$core$utils$dom;module$build$src$core$utils.extensions=module$build$src$core$extensions;module$build$src$core$utils.idGenerator=module$build$src$core$utils$idgenerator;\nmodule$build$src$core$utils.math=module$build$src$core$utils$math;module$build$src$core$utils.object=module$build$src$core$utils$object;module$build$src$core$utils.parsing=module$build$src$core$utils$parsing;module$build$src$core$utils.string=module$build$src$core$utils$string;module$build$src$core$utils.style=module$build$src$core$utils$style;module$build$src$core$utils.svgMath=module$build$src$core$utils$svg_math;module$build$src$core$utils.svgPaths=module$build$src$core$utils$svg_paths;\nmodule$build$src$core$utils.toolbox=module$build$src$core$utils$toolbox;module$build$src$core$utils.userAgent=module$build$src$core$utils$useragent;module$build$src$core$utils.xml=module$build$src$core$utils$xml;var TextInputBubble$$module$build$src$core$bubbles$textinput_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(a,b,c,void 0,d);this.workspace=a;this.anchor=b;this.ownerRect=c;this.owner=d;this.resizePointerMoveListener=this.resizePointerUpListener=null;this.sizeChangeListeners=[];this.locationChangeListeners=[];this.DEFAULT_SIZE=new Size$$module$build$src$core$utils$size(160+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,80+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER);\nthis.MIN_SIZE=new Size$$module$build$src$core$utils$size(45+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,20+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER);this.editable=!0;addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyTextInputBubble\");this.editor=new CommentEditor$$module$build$src$core$comments$comment_editor(a,this.id,()=>{$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this)});this.contentContainer.appendChild(this.editor.getDom());\nthis.resizeGroup=this.createResizeHandle(this.svgRoot,a);this.setSize(this.DEFAULT_SIZE,!0)}getText(){return this.editor.getText()}setText(a){this.editor.setText(a)}setEditable(a){this.editable=a;this.editor.setEditable(a)}isEditable(){return this.editable}addTextChangeListener(a){this.editor.addTextChangeListener(a)}addSizeChangeListener(a){this.sizeChangeListeners.push(a)}addLocationChangeListener(a){this.locationChangeListeners.push(a)}createResizeHandle(a,b){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,\n{\"class\":\"blocklyResizeHandle\",href:`${b.options.pathToMedia}resize-handle.svg`},a);conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onResizePointerDown);return a}setSize(a,b=!1){a.width=Math.max(a.width,this.MIN_SIZE.width);a.height=Math.max(a.height,this.MIN_SIZE.height);const c=a.width-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,d=a.height-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER;this.editor.updateSize(new Size$$module$build$src$core$utils$size(c,\nd),new Size$$module$build$src$core$utils$size(0,0));this.editor.getDom().setAttribute(\"x\",`${Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER/2}`);this.editor.getDom().setAttribute(\"y\",`${Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER/2}`);this.resizeGroup.setAttribute(\"y\",`${d}`);this.workspace.RTL?this.resizeGroup.setAttribute(\"x\",`${-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER}`):this.resizeGroup.setAttribute(\"x\",`${c}`);super.setSize(a,b);this.onSizeChange()}getSize(){return super.getSize()}moveDuringDrag(a){super.moveDuringDrag(a);\nthis.onLocationChange()}setPositionRelativeToAnchor(a,b){super.setPositionRelativeToAnchor(a,b);this.onLocationChange()}positionByRect(a=new Rect$$module$build$src$core$utils$rect(0,0,0,0)){super.positionByRect(a);this.onLocationChange()}onResizePointerDown(a){this.bringToFront();isRightButton$$module$build$src$core$browser_events(a)||(start$$module$build$src$core$utils$drag(this.workspace,a,new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.getSize().width:this.getSize().width,\nthis.getSize().height)),this.resizePointerUpListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onResizePointerUp),this.resizePointerMoveListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",this,this.onResizePointerMove),this.workspace.hideChaff());a.stopPropagation()}onResizePointerUp(a){clearTouchIdentifier$$module$build$src$core$touch();this.resizePointerUpListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerUpListener),\nthis.resizePointerUpListener=null);this.resizePointerMoveListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerMoveListener),this.resizePointerMoveListener=null)}onResizePointerMove(a){a=move$$module$build$src$core$utils$drag(this.workspace,a);this.setSize(new Size$$module$build$src$core$utils$size(this.workspace.RTL?-a.x:a.x,a.y),!1);this.onSizeChange()}onSizeChange(){for(const a of this.sizeChangeListeners)a()}onLocationChange(){for(const a of this.locationChangeListeners)a()}getEditor(){return this.editor}};\nregister$$module$build$src$core$css(\"\\n.blocklyTextInputBubble .blocklyTextarea {\\n background-color: var(--commentFillColour);\\n border: 0;\\n box-sizing: border-box;\\n display: block;\\n outline: 0;\\n padding: 5px;\\n resize: none;\\n width: 100%;\\n height: 100%;\\n}\\n\");var module$build$src$core$bubbles$textinput_bubble={};module$build$src$core$bubbles$textinput_bubble.TextInputBubble=TextInputBubble$$module$build$src$core$bubbles$textinput_bubble;var ConnectionType$$module$build$src$core$connection_type;(function(a){a[a.INPUT_VALUE=1]=\"INPUT_VALUE\";a[a.OUTPUT_VALUE=2]=\"OUTPUT_VALUE\";a[a.NEXT_STATEMENT=3]=\"NEXT_STATEMENT\";a[a.PREVIOUS_STATEMENT=4]=\"PREVIOUS_STATEMENT\"})(ConnectionType$$module$build$src$core$connection_type||(ConnectionType$$module$build$src$core$connection_type={}));var module$build$src$core$connection_type={};module$build$src$core$connection_type.ConnectionType=ConnectionType$$module$build$src$core$connection_type;var ConnectionDB$$module$build$src$core$connection_db=class{constructor(a){this.connectionChecker=a;this.connections=[]}addConnection(a,b){b=this.calculateIndexForYPos(b);this.connections.splice(b,0,a)}findIndexOfConnection(a,b){if(!this.connections.length)return-1;const c=this.calculateIndexForYPos(b);if(c>=this.connections.length)return-1;b=a.y;let d=c;for(;d>=0&&this.connections[d].y===b;){if(this.connections[d]===a)return d;d--}for(d=c;da)c=d;else{b=d;break}}return b}removeConnection(a,b){a=this.findIndexOfConnection(a,b);if(a===-1)throw Error(\"Unable to find connection in connectionDB.\");this.connections.splice(a,1)}getNeighbours(a,b){function c(l){const m=e-d[l].x,n=f-d[l].y;Math.sqrt(m*m+n*n)<=b&&k.push(d[l]);\nreturn n=0&&c(a);)a--;do g++;while(g=0&&this.isInYRange(k,a.y,b);)h=this.connections[k],\nthis.connectionChecker.canConnect(a,h,!0,g)&&(c=h,g=h.distanceFrom(a)),k--;for(;fthis.fieldRow.length)throw Error(\"index \"+a+\" out of bounds.\");if(!(b||\nb===\"\"&&c))return a;typeof b===\"string\"&&(b=$.fromJson$$module$build$src$core$field_registry({type:\"field_label\",text:b}));b.setSourceBlock(this.sourceBlock);this.sourceBlock.initialized&&this.initField(b);b.name=c;b.setVisible(this.isVisible());b.prefixField&&(a=this.insertFieldAt(a,b.prefixField));this.fieldRow.splice(a,0,b);a++;b.suffixField&&(a=this.insertFieldAt(a,b.suffixField));this.sourceBlock.rendered&&this.sourceBlock.queueRender();return a}removeField(a,b){for(let c=0,d;d=this.fieldRow[c];c++)if(d.name===\na)return d.dispose(),this.fieldRow.splice(c,1),this.sourceBlock.rendered&&this.sourceBlock.queueRender(),!0;if(b)return!1;throw Error('Field \"'+a+'\" not found.');}isVisible(){return this.visible}setVisible(a){let b=[];if(this.visible===a)return b;this.visible=a;for(let c=0,d;d=this.fieldRow[c];c++)d.setVisible(a);if(this.connection&&this.connection instanceof RenderedConnection$$module$build$src$core$rendered_connection){a?b=this.connection.startTrackingAll():this.connection.stopTrackingAll();const c=\nthis.connection.targetBlock();c&&(c.getSvgRoot().style.display=a?\"block\":\"none\")}return b}markDirty(){for(let a=0,b;b=this.fieldRow[a];a++)b.markDirty()}setCheck(a){if(!this.connection)throw Error(\"This input does not have a connection.\");this.connection.setCheck(a);return this}setAlign(a){this.align=a;this.sourceBlock.rendered&&this.sourceBlock.queueRender();return this}setShadowDom(a){if(!this.connection)throw Error(\"This input does not have a connection.\");this.connection.setShadowDom(a);return this}getShadowDom(){if(!this.connection)throw Error(\"This input does not have a connection.\");\nreturn this.connection.getShadowDom()}init(){for(const a of this.fieldRow)a.init()}initModel(){for(const a of this.fieldRow)a.initModel()}initField(a){this.sourceBlock.rendered?a.init():a.initModel()}dispose(){for(let a=0,b;b=this.fieldRow[a];a++)b.dispose();this.connection&&this.connection.dispose()}makeConnection(a){return this.sourceBlock.makeConnection_(a)}},module$build$src$core$inputs$input={};module$build$src$core$inputs$input.Input=Input$$module$build$src$core$inputs$input;var DummyInput$$module$build$src$core$inputs$dummy_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.DUMMY}},module$build$src$core$inputs$dummy_input={};module$build$src$core$inputs$dummy_input.DummyInput=DummyInput$$module$build$src$core$inputs$dummy_input;var EndRowInput$$module$build$src$core$inputs$end_row_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.END_ROW}},module$build$src$core$inputs$end_row_input={};module$build$src$core$inputs$end_row_input.EndRowInput=EndRowInput$$module$build$src$core$inputs$end_row_input;var StatementInput$$module$build$src$core$inputs$statement_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){if(!a)throw Error(\"Statement inputs must have a non-empty name\");super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.STATEMENT;this.connection=this.makeConnection(ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT)}},module$build$src$core$inputs$statement_input={};\nmodule$build$src$core$inputs$statement_input.StatementInput=StatementInput$$module$build$src$core$inputs$statement_input;var module$build$src$core$inputs$value_input;$.ValueInput$$module$build$src$core$inputs$value_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){if(!a)throw Error(\"Value inputs must have a non-empty name\");super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.VALUE;this.connection=this.makeConnection(ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE)}};module$build$src$core$inputs$value_input={};\nmodule$build$src$core$inputs$value_input.ValueInput=$.ValueInput$$module$build$src$core$inputs$value_input;var module$build$src$core$interfaces$i_icon={};module$build$src$core$interfaces$i_icon.isIcon=isIcon$$module$build$src$core$interfaces$i_icon;var module$build$src$core$interfaces$i_comment_icon={};module$build$src$core$interfaces$i_comment_icon.isCommentIcon=isCommentIcon$$module$build$src$core$interfaces$i_comment_icon;var Block$$module$build$src$core$block=class{constructor(a,b,c){this.data=null;this.disposed=!1;this.hue=null;this.colour_=\"#000000\";this.styleName_=\"\";this.suppressPrefixSuffix=!1;this.previousConnection=this.nextConnection=this.outputConnection=null;this.inputList=[];this.icons=[];this.disabledReasons=new Set;this.tooltip=\"\";this.contextMenu=!0;this.parentBlock_=null;this.childBlocks_=[];this.editable=this.movable=this.deletable=!0;this.collapsed_=this.shadow=!1;this.outputShape_=null;this.rendered=\nthis.isInsertionMarker_=this.initialized=this.disposing=!1;this.onchangeWrapper=this.helpUrl=null;this.statementInputCount=0;this.workspace=a;this.id=c&&!a.getBlockById(c)?c:genUid$$module$build$src$core$utils$idgenerator();a.setBlockById(this.id,this);this.xy=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.isInFlyout=a.isFlyout;this.isInMutator=a.isMutator;this.RTL=a.RTL;if(b){this.type=b;c=Blocks$$module$build$src$core$blocks[b];if(!c||typeof c!==\"object\")throw TypeError(\"Invalid block definition for type: \"+\nb);Object.assign(this,c)}a.addTopBlock(this);a.addTypedBlock(this);new.target===Block$$module$build$src$core$block&&this.doInit_()}doInit_(){const a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);const b=getRecordUndo$$module$build$src$core$events$utils();try{typeof this.init===\"function\"&&($.setRecordUndo$$module$build$src$core$events$utils(!1),this.init(),$.setRecordUndo$$module$build$src$core$events$utils(b)),isEnabled$$module$build$src$core$events$utils()&&\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(this))}finally{$.setGroup$$module$build$src$core$events$utils(a),$.setRecordUndo$$module$build$src$core$events$utils(b)}this.inputsInlineDefault=this.inputsInline;typeof this.onchange===\"function\"&&this.setOnChange(this.onchange)}dispose(a=!1){this.disposing=!0;this.onchangeWrapper&&this.workspace.removeChangeListener(this.onchangeWrapper);this.unplug(a);\nisEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DELETE))(this));this.workspace.removeTopBlock(this);this.disposeInternal()}disposeInternal(){this.disposing=!0;this.onchangeWrapper&&this.workspace.removeChangeListener(this.onchangeWrapper);this.workspace.removeTypedBlock(this);this.workspace.removeBlockById(this.id);typeof this.destroy===\"function\"&&this.destroy();\nthis.childBlocks_.forEach(a=>a.disposeInternal());this.inputList.forEach(a=>a.dispose());this.inputList.length=0;this.getConnections_(!0).forEach(a=>a.dispose());this.disposed=!0}isDeadOrDying(){return this.disposing||this.disposed}initModel(){if(!this.initialized){for(const a of this.inputList)a.initModel();this.initialized=!0}}unplug(a){this.outputConnection&&this.unplugFromRow(a);this.previousConnection&&this.unplugFromStack(a)}unplugFromRow(a){let b=null,c;if((c=this.outputConnection)==null?0:\nc.isConnected())b=this.outputConnection.targetConnection,this.outputConnection.disconnect();b&&a&&(a=this.getOnlyValueConnection())&&a.isConnected()&&!a.targetBlock().isShadow()&&(a=a.targetConnection,a==null||a.disconnect(),this.workspace.connectionChecker.canConnect(a,b,!1)?b.connect(a):a==null||a.onFailedConnect(b))}getOnlyValueConnection(){let a=null;for(let b=0;b1)return!1;return!0}getMatchingConnection(a,\nb){const c=this.getConnections_(!0);a=a.getConnections_(!0);if(c.length!==a.length)throw Error(\"Connection lists did not match in length.\");for(let d=0;d{d=d+(c===\"(\"||e===\")\"?\"\":\" \")+e;c=e[e.length-1];return d},\"\");b=b.trim()||\"???\";a&&b.length>a&&(b=b.substring(0,a-3)+\"...\");return b}toTokens(a=\"?\"){const b=[];for(const d of this.inputList)if(d.name!=COLLAPSED_INPUT_NAME$$module$build$src$core$constants){for(const e of d.fieldRow)b.push(e.getText());if(d.connection){const e=d.connection.targetBlock();if(e){var c=d.connection;let f=c.getCheck();\n!f&&c.targetConnection&&(f=c.targetConnection.getCheck());(c=!!f&&(f.includes(\"Boolean\")||f.includes(\"Number\")))&&b.push(\"(\");b.push(...e.toTokens(a));c&&b.push(\")\")}else b.push(a)}}return b}appendValueInput(a){return this.appendInput(new $.ValueInput$$module$build$src$core$inputs$value_input(a,this))}appendStatementInput(a){this.statementInputCount++;return this.appendInput(new StatementInput$$module$build$src$core$inputs$statement_input(a,this))}appendDummyInput(a=\"\"){return this.appendInput(new DummyInput$$module$build$src$core$inputs$dummy_input(a,\nthis))}appendEndRowInput(a=\"\"){return this.appendInput(new EndRowInput$$module$build$src$core$inputs$end_row_input(a,this))}appendInput(a){this.inputList.push(a);return a}appendInputFromRegistry(a,b){return(a=getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.INPUT,a,!1))?this.appendInput(new a(b,this)):null}jsonInit(a){var b=a.type?'Block \"'+a.type+'\": ':\"\";if(a.output&&a.previousStatement)throw Error(b+\"Must not have both an output and a previousStatement.\");for(var c=\n0;a[\"args\"+c];){if(a[\"message\"+c]===void 0)throw Error(b+`args${c} must have a corresponding message (message${c}).`);c++}a.style&&a.style.hat&&(this.hat=a.style.hat,a.style=null);if(a.style&&a.colour)throw Error(b+\"Must not have both a colour and a style.\");a.style?this.jsonInitStyle(a,b):this.jsonInitColour(a,b);for(c=0;a[\"message\"+c]!==void 0;)this.interpolate(a[\"message\"+c],a[\"args\"+c]||[],a[\"implicitAlign\"+c]||a[\"lastDummyAlign\"+c],b),c++;a.inputsInline!==void 0&&($.disable$$module$build$src$core$events$utils(),\nthis.setInputsInline(a.inputsInline),$.enable$$module$build$src$core$events$utils());a.output!==void 0&&this.setOutput(!0,a.output);a.outputShape!==void 0&&this.setOutputShape(a.outputShape);a.previousStatement!==void 0&&this.setPreviousStatement(!0,a.previousStatement);a.nextStatement!==void 0&&this.setNextStatement(!0,a.nextStatement);a.tooltip!==void 0&&(c=replaceMessageReferences$$module$build$src$core$utils$parsing(a.tooltip),this.setTooltip(c));a.enableContextMenu!==void 0&&(this.contextMenu=\n!!a.enableContextMenu);a.suppressPrefixSuffix!==void 0&&(this.suppressPrefixSuffix=!!a.suppressPrefixSuffix);a.helpUrl!==void 0&&(c=replaceMessageReferences$$module$build$src$core$utils$parsing(a.helpUrl),this.setHelpUrl(c));typeof a.extensions===\"string\"&&(console.warn(b+\"JSON attribute 'extensions' should be an array of strings. Found raw string in JSON for '\"+a.type+\"' block.\"),a.extensions=[a.extensions]);a.mutator!==void 0&&apply$$module$build$src$core$extensions(a.mutator,this,!0);a=a.extensions;\nif(Array.isArray(a))for(b=0;bb)throw Error('Block \"'+this.type+'\": Message index %'+f+\" out of range.\");if(c[f])throw Error('Block \"'+this.type+'\": Message index %'+f+\" duplicated.\");c[f]=!0;d++}}if(d!==b)throw Error('Block \"'+this.type+'\": Message does not reference all '+b+\" arg(s).\");}interpolateArguments(a,b,c){const d=[];for(let f=0;f=this.inputList.length)throw RangeError(\"Input index \"+a+\" out of bounds.\");if(b>this.inputList.length)throw RangeError(\"Reference input \"+b+\" out of bounds.\");const c=this.inputList[a];this.inputList.splice(a,1);ab.getWeight()-c.getWeight());return a}removeIcon(a){if(!this.hasIcon(a))return!1;let b;(b=this.getIcon(a))==null||b.dispose();this.icons=this.icons.filter(c=>!c.getType().equals(a));return!0}hasIcon(a){return this.icons.some(b=>b.getType().equals(a))}getIcon(a){return a instanceof IconType$$module$build$src$core$icons$icon_types?\nthis.icons.find(b=>b.getType().equals(a)):this.icons.find(b=>b.getType().toString()===a)}getIcons(){return[...this.icons]}getRelativeToSurfaceXY(){return this.xy}moveBy(a,b,c){if(this.parentBlock_)throw Error(\"Block has parent\");const d=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this);c&&d.setReason(c);this.xy.translate(a,b);d.recordNew();fire$$module$build$src$core$events$utils(d)}makeConnection_(a){return new Connection$$module$build$src$core$connection(this,\na)}allInputsFilled(a){a===void 0&&(a=!0);if(!a&&this.isShadow())return!1;for(let c=0,d;d=this.inputList[c];c++)if(d.connection){var b=d.connection.targetBlock();if(!b||!b.allInputsFilled(a))return!1}return(b=this.getNextBlock())?b.allInputsFilled(a):!0}toDevString(){let a=this.type?'\"'+this.type+'\" block':\"Block\";this.id&&(a+=' (id=\"'+this.id+'\")');return a}};Block$$module$build$src$core$block.COLLAPSED_INPUT_NAME=COLLAPSED_INPUT_NAME$$module$build$src$core$constants;\nBlock$$module$build$src$core$block.COLLAPSED_FIELD_NAME=COLLAPSED_FIELD_NAME$$module$build$src$core$constants;var module$build$src$core$block={};module$build$src$core$block.Block=Block$$module$build$src$core$block;var disconnectPid$$module$build$src$core$block_animations=null,wobblingBlock$$module$build$src$core$block_animations=null,module$build$src$core$block_animations={};module$build$src$core$block_animations.connectionUiEffect=connectionUiEffect$$module$build$src$core$block_animations;module$build$src$core$block_animations.disconnectUiEffect=disconnectUiEffect$$module$build$src$core$block_animations;module$build$src$core$block_animations.disconnectUiStop=disconnectUiStop$$module$build$src$core$block_animations;\nmodule$build$src$core$block_animations.disposeUiEffect=disposeUiEffect$$module$build$src$core$block_animations;var BlockPaster$$module$build$src$core$clipboard$block_paster=class{paste(a,b,c){if(!b.isCapacityAvailable(a.typeCounts))return null;c&&(a.blockState.x=c.x,a.blockState.y=c.y);c=c||new Coordinate$$module$build$src$core$utils$coordinate(a.blockState.x||0,a.blockState.y||0);$.disable$$module$build$src$core$events$utils();let d;try{d=append$$module$build$src$core$serialization$blocks(a.blockState,b),moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster(d,c)}finally{$.enable$$module$build$src$core$events$utils()}if(!d)return d;\nisEnabled$$module$build$src$core$events$utils()&&!d.isShadow()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(d));const e=d;finishQueuedRenders$$module$build$src$core$render_management().then(()=>$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e));return d}};BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE=\"block\";\nregister$$module$build$src$core$clipboard$registry(BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE,new BlockPaster$$module$build$src$core$clipboard$block_paster);var module$build$src$core$clipboard$block_paster={};module$build$src$core$clipboard$block_paster.BlockPaster=BlockPaster$$module$build$src$core$clipboard$block_paster;module$build$src$core$clipboard$block_paster.moveBlockToNotConflict=moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster;var bumpIntoBounds$$module$build$src$core$bump_objects=bumpObjectIntoBounds$$module$build$src$core$bump_objects,module$build$src$core$bump_objects={};module$build$src$core$bump_objects.bumpIntoBounds=bumpObjectIntoBounds$$module$build$src$core$bump_objects;module$build$src$core$bump_objects.bumpIntoBoundsHandler=bumpIntoBoundsHandler$$module$build$src$core$bump_objects;module$build$src$core$bump_objects.bumpTopObjectsIntoBounds=bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects;var BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy=class{constructor(a){this.block=a;this.connectionPreviewer=this.connectionCandidate=this.startLoc=this.startChildConn=this.startParentConn=null;this.dragging=!1;this.dragOffset=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.originalEventGroup=\"\";this.workspace=a.workspace}isMovable(){if(this.block.isShadow()){let a,b;return(b=(a=this.block.getParent())==null?void 0:a.isMovable())!=null?b:!1}return this.block.isOwnMovable()&&\n!this.block.isDeadOrDying()&&!this.workspace.isReadOnly()&&!this.block.isInFlyout}startDrag(a){if(this.block.isShadow())this.startDraggingShadow(a);else{this.dragging=!0;this.fireDragStartEvent();this.startLoc=this.block.getRelativeToSurfaceXY();this.connectionCandidate=null;this.connectionPreviewer=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_PREVIEWER,this.workspace.options))(this.block);startTextWidthCache$$module$build$src$core$utils$dom();\nthis.workspace.setResizesEnabled(!1);disconnectUiStop$$module$build$src$core$block_animations();a=this.shouldHealStack(a);this.shouldDisconnect(a)&&this.disconnectBlock(a);this.block.setDragging(!0);var b;(b=this.workspace.getLayerManager())==null||b.moveToDragLayer(this.block)}}shouldHealStack(a){return!!a&&(a.altKey||a.ctrlKey||a.metaKey)}startDraggingShadow(a){const b=this.block.getParent();if(!b)throw Error(\"Tried to drag a shadow block with no parent. Shadow blocks should always have parents.\");\nthis.dragOffset=Coordinate$$module$build$src$core$utils$coordinate.difference(b.getRelativeToSurfaceXY(),this.block.getRelativeToSurfaceXY());b.startDrag(a)}shouldDisconnect(a){return!!(this.block.getParent()||a&&this.block.nextConnection&&this.block.nextConnection.targetBlock())}disconnectBlock(a){let b,c,d;this.startParentConn=(d=(b=this.block.outputConnection)==null?void 0:b.targetConnection)!=null?d:(c=this.block.previousConnection)==null?void 0:c.targetConnection;if(a){let e;this.startChildConn=\n(e=this.block.nextConnection)==null?void 0:e.targetConnection}this.block.unplug(a);disconnectUiEffect$$module$build$src$core$block_animations(this.block)}fireDragStartEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DRAG))(this.block,!0,this.block.getDescendants(!1));fire$$module$build$src$core$events$utils(a)}fireDragEndEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DRAG))(this.block,\n!1,this.block.getDescendants(!1));fire$$module$build$src$core$events$utils(a)}fireMoveEvent(){if(!this.block.isDeadOrDying()){var a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this.block);a.setReason([\"drag\"]);a.oldCoordinate=this.startLoc;a.recordNew();fire$$module$build$src$core$events$utils(a)}}drag(a){if(this.block.isShadow()){let b;(b=this.block.getParent())==null||b.drag(Coordinate$$module$build$src$core$utils$coordinate.sum(a,this.dragOffset))}else this.block.moveDuringDrag(a),\nthis.updateConnectionPreview(this.block,Coordinate$$module$build$src$core$utils$coordinate.difference(a,this.startLoc))}updateConnectionPreview(a,b){var c=this.connectionCandidate;const d=this.getConnectionCandidate(a,b);if(d){this.connectionCandidate=b=c&&this.currCandidateIsBetter(c,b,d)?c:d;var {local:e,neighbour:f}=b;b=e.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE||e.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT;var g;c=f.isConnected()&&\n!((g=f.targetBlock())==null?0:g.isInsertionMarker());if(b&&c&&!this.orphanCanConnectAtEnd(a,f.targetBlock(),e.type)){let k;(k=this.connectionPreviewer)==null||k.previewReplacement(e,f,f.targetBlock())}else{var h;(h=this.connectionPreviewer)==null||h.previewConnection(e,f)}}else{let k;(k=this.connectionPreviewer)==null||k.hidePreview();this.connectionCandidate=null}}orphanCanConnectAtEnd(a,b,c){return!!Connection$$module$build$src$core$connection.getConnectionForOrphanedConnection(a,c===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE?\nb.outputConnection:b.previousConnection)}currCandidateIsBetter(a,b,c){const {local:d,neighbour:e}=a;a=new Coordinate$$module$build$src$core$utils$coordinate(d.x,d.y);const f=new Coordinate$$module$build$src$core$utils$coordinate(e.x,e.y);b=Coordinate$$module$build$src$core$utils$coordinate.distance(Coordinate$$module$build$src$core$utils$coordinate.sum(a,b),f);return c.distance>b-$.config$$module$build$src$core$config.currentConnectionPreference}getConnectionCandidate(a,b){a=this.getLocalConnections(a);\nlet c=this.getSearchRadius(),d=null;for(const e of a){const {connection:f,radius:g}=e.closest(c,b);f&&(d={local:e,neighbour:f,distance:g},c=g)}return d}getSearchRadius(){return this.connectionCandidate?$.config$$module$build$src$core$config.connectingSnapRadius:$.config$$module$build$src$core$config.snapRadius}getLocalConnections(a){const b=a.getConnections_(!1),c=a.lastConnectionInStack(!0);c&&c!==a.nextConnection&&b.push(c);return b}endDrag(a){if(this.block.isShadow()){let c;(c=this.block.getParent())==\nnull||c.endDrag(a)}else{this.originalEventGroup=$.getGroup$$module$build$src$core$events$utils();this.fireDragEndEvent();this.fireMoveEvent();stopTextWidthCache$$module$build$src$core$utils$dom();disconnectUiStop$$module$build$src$core$block_animations();var b;(b=this.connectionPreviewer)==null||b.hidePreview();if(!this.block.isDeadOrDying()&&this.dragging){let c;(c=this.workspace.getLayerManager())==null||c.moveOffDragLayer(this.block,BLOCK$$module$build$src$core$layers);this.block.setDragging(!1)}this.connectionCandidate?\n(this.applyConnections(this.connectionCandidate),this.disposeStep()):this.block.queueRender().then(()=>this.disposeStep())}}disposeStep(){const a=$.getGroup$$module$build$src$core$events$utils();$.setGroup$$module$build$src$core$events$utils(this.originalEventGroup);this.block.snapToGrid();let b;(b=this.connectionPreviewer)==null||b.dispose();this.workspace.setResizesEnabled(!0);$.setGroup$$module$build$src$core$events$utils(a)}applyConnections(a){const {local:b,neighbour:c}=a;b.connect(c);const d=\nb.isSuperior()?c:b,e=this.block.getRootBlock();finishQueuedRenders$$module$build$src$core$render_management().then(()=>{connectionUiEffect$$module$build$src$core$block_animations(d.getSourceBlock());setTimeout(()=>{e.bringToFront()},0)})}revertDrag(){if(this.block.isShadow()){let c;(c=this.block.getParent())==null||c.revertDrag()}else{var a;(a=this.connectionPreviewer)==null||a.hidePreview();this.connectionCandidate=null;var b;(b=this.startChildConn)==null||b.connect(this.block.nextConnection);if(this.startParentConn)switch(this.startParentConn.type){case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:this.startParentConn.connect(this.block.outputConnection);\nbreak;case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:this.startParentConn.connect(this.block.previousConnection)}else{this.block.moveTo(this.startLoc,[\"drag\"]);let c;(c=this.workspace.getLayerManager())==null||c.moveOffDragLayer(this.block,BLOCK$$module$build$src$core$layers);bumpObjectIntoBounds$$module$build$src$core$bump_objects(this.workspace,this.workspace.getMetricsManager().getScrollMetrics(!0),this.block)}this.startParentConn=this.startChildConn=null;this.block.setDragging(!1);\nthis.dragging=!1}}},module$build$src$core$dragging$block_drag_strategy={};module$build$src$core$dragging$block_drag_strategy.BlockDragStrategy=BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy;var TextBubble$$module$build$src$core$bubbles$text_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(b,c,d);this.text=a;this.workspace=b;this.anchor=c;this.ownerRect=d;this.paragraph=this.stringToSvg(a,this.contentContainer);this.updateBubbleSize();addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyTextBubble\")}getText(){return this.text}setText(a){this.text=a;removeNode$$module$build$src$core$utils$dom(this.paragraph);this.paragraph=this.stringToSvg(a,\nthis.contentContainer);this.updateBubbleSize()}stringToSvg(a,b){b=this.createParagraph(b);a=this.createTextFragments(b,a);this.workspace.RTL&&this.rightAlignTextFragments(b.getBBox().width,a);return b}createParagraph(a){return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyText blocklyBubbleText blocklyNoPointerEvents\",transform:`translate(0,${Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH})`,style:`direction: ${this.workspace.RTL?\n\"rtl\":\"ltr\"}`},a)}createTextFragments(a,b){let c=1;return b.split(\"\\n\").map(d=>{const e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,{y:`${c}em`,x:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},a);d=document.createTextNode(d);e.appendChild(d);c+=1;return e})}rightAlignTextFragments(a,b){for(const c of b)c.setAttribute(\"text-anchor\",\"start\"),c.setAttribute(\"x\",`${a+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH}`)}updateBubbleSize(){const a=\nthis.paragraph.getBBox();this.setSize(new Size$$module$build$src$core$utils$size(a.width+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2,a.height+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2),!0)}},module$build$src$core$bubbles$text_bubble={};module$build$src$core$bubbles$text_bubble.TextBubble=TextBubble$$module$build$src$core$bubbles$text_bubble;var SIZE$$module$build$src$core$icons$warning_icon=17,WarningIcon$$module$build$src$core$icons$warning_icon=class extends Icon$$module$build$src$core$icons$icon{constructor(a){super(a);this.sourceBlock=a;this.textMap=new Map;this.textBubble=null}getType(){return WarningIcon$$module$build$src$core$icons$warning_icon.TYPE}initView(a){this.svgRoot||(super.initView(a),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconShape\",d:\"M2,15Q-1,15 0.5,12L6.5,1.7Q8,-1 9.5,1.7L15.5,12Q17,15 14,15z\"},\nthis.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconSymbol\",d:\"m7,4.8v3.16l0.27,2.27h1.46l0.27,-2.27v-3.16z\"},this.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyIconSymbol\",x:\"7\",y:\"11\",height:\"2\",width:\"2\"},this.svgRoot),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyWarningIcon\"))}dispose(){super.dispose();let a;(a=this.textBubble)==null||\na.dispose()}getWeight(){return WarningIcon$$module$build$src$core$icons$warning_icon.WEIGHT}getSize(){return new Size$$module$build$src$core$utils$size(SIZE$$module$build$src$core$icons$warning_icon,SIZE$$module$build$src$core$icons$warning_icon)}applyColour(){super.applyColour();let a;(a=this.textBubble)==null||a.setColour(this.sourceBlock.getColour())}updateCollapsed(){}isShownWhenCollapsed(){return!0}onLocationChange(a){super.onLocationChange(a);let b;(b=this.textBubble)==null||b.setAnchorLocation(this.getAnchorLocation())}addMessage(a,\nb){if(this.textMap.get(b)===a)return this;a?this.textMap.set(b,a):this.textMap.delete(b);let c;(c=this.textBubble)==null||c.setText(this.getText());return this}getText(){return[...this.textMap.values()].join(\"\\n\")}onClick(){super.onClick();this.setBubbleVisible(!this.bubbleIsVisible())}isClickableInFlyout(){return!1}bubbleIsVisible(){return!!this.textBubble}setBubbleVisible(a){const b=this;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){if(b.bubbleIsVisible()!==a){yield finishQueuedRenders$$module$build$src$core$render_management();\nif(a)b.textBubble=new TextBubble$$module$build$src$core$bubbles$text_bubble(b.getText(),b.sourceBlock.workspace,b.getAnchorLocation(),b.getBubbleOwnerRect()),b.applyColour();else{let c;(c=b.textBubble)==null||c.dispose();b.textBubble=null}fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BUBBLE_OPEN))(b.sourceBlock,a,\"warning\"))}})}getBubble(){return this.textBubble}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$warning_icon/\n2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,new Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){const a=this.sourceBlock.getSvgRoot().getBBox();return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}};WarningIcon$$module$build$src$core$icons$warning_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.WARNING;WarningIcon$$module$build$src$core$icons$warning_icon.WEIGHT=2;\nvar module$build$src$core$icons$warning_icon={};module$build$src$core$icons$warning_icon.WarningIcon=WarningIcon$$module$build$src$core$icons$warning_icon;var BlockSvg$$module$build$src$core$block_svg=class extends Block$$module$build$src$core$block{constructor(a,b,c){super(a,b,c);this.childlessWidth=this.width=this.height=0;this.warningTextDb=new Map;this.mutator=null;this.rendered=!0;this.visuallyDisabled=!1;this.translation=\"\";this.dragging=!1;this.relativeCoords=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.dragStrategy=new BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy(this);if(!a.rendered)throw TypeError(\"Cannot create a rendered block in a headless workspace\");\nthis.workspace=a;this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});b&&addClass$$module$build$src$core$utils$dom(this.svgGroup,b);this.style=a.getRenderer().getConstants().getBlockStyle(null);this.pathObject=a.getRenderer().makePathObject(this.svgGroup,this.style);a=this.pathObject.svgPath;a.tooltip=this;bindMouseEvents$$module$build$src$core$tooltip(a);this.svgGroup.setAttribute(\"data-id\",this.id);a.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();\nthis.doInit_()}initSvg(){if(!this.initialized){for(var a of this.inputList)a.init();for(const b of this.getIcons())b.initView(this.createIconPointerDownListener(b)),b.updateEditable();this.applyColour();this.pathObject.updateMovable(this.isMovable()||this.isInFlyout);(a=this.getSvgRoot())&&conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onMouseDown);a.parentNode||this.workspace.getCanvas().appendChild(a);this.initialized=!0}}getColourSecondary(){return this.style.colourSecondary}getColourTertiary(){return this.style.colourTertiary}select(){this.addSelect();\nfireSelectedEvent$$module$build$src$core$common(this)}unselect(){this.removeSelect();fireSelectedEvent$$module$build$src$core$common(null)}setParent(a){var b=this.parentBlock_;if(a!==b){startTextWidthCache$$module$build$src$core$utils$dom();super.setParent(a);stopTextWidthCache$$module$build$src$core$utils$dom();var c=this.getSvgRoot();if(!this.workspace.isClearing&&c){var d=this.getRelativeToSurfaceXY(),e=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode(),f,g=this.getSvgRoot().contains((f=\ne==null?void 0:e.getFocusableElement())!=null?f:null);a?(a.getSvgRoot().appendChild(c),g&&e&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e)):b&&(a=this.workspace.getCanvas().querySelector(\".blocklyDragging\"),b=a==null?void 0:a.parentElement,f=this.workspace.getCanvas(),b===f?f.insertBefore(c,a):(f.appendChild(c),g&&e&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e)),this.translate(d.x,d.y));this.applyColour()}}}getRelativeToSurfaceXY(){const a=this.workspace.getLayerManager();\nif(!a)throw Error(\"Cannot calculate position because the workspace has not been appended\");let b=0,c=0,d=this.getSvgRoot();if(d){do{const e=getRelativeXY$$module$build$src$core$utils$svg_math(d);b+=e.x;c+=e.y;d=d.parentNode}while(d&&!a.hasLayer(d))}return new Coordinate$$module$build$src$core$utils$coordinate(b,c)}moveBy(a,b,c){if(this.parentBlock_)throw Error(\"Block has parent\");const d=isEnabled$$module$build$src$core$events$utils();let e=null;d&&(e=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this),\nc&&e.setReason(c));a=new Coordinate$$module$build$src$core$utils$coordinate(a,b);b=this.getRelativeToSurfaceXY();a=Coordinate$$module$build$src$core$utils$coordinate.sum(b,a);this.translate(a.x,a.y);this.updateComponentLocations(a);d&&e&&(e.recordNew(),fire$$module$build$src$core$events$utils(e));this.workspace.resizeContents()}translate(a,b){this.translation=`translate(${a}, ${b})`;this.relativeCoords=new Coordinate$$module$build$src$core$utils$coordinate(a,b);this.getSvgRoot().setAttribute(\"transform\",\nthis.getTranslation())}getTranslation(){return this.translation}moveTo(a,b){const c=this.getRelativeToSurfaceXY();this.moveBy(a.x-c.x,a.y-c.y,b)}moveDuringDrag(a){this.translate(a.x,a.y);this.getSvgRoot().setAttribute(\"transform\",this.getTranslation());this.updateComponentLocations(a)}snapToGrid(){if(!this.isDeadOrDying()&&!this.getParent()&&!this.isInFlyout){var a=this.workspace.getGrid();if(a!=null&&a.shouldSnap()){var b=this.getRelativeToSurfaceXY();a=a.alignXY(b);a!==b&&this.moveTo(a,[\"snap\"])}}}getBoundingRectangle(){return this.getBoundingRectangleWithDimensions(this.getHeightWidth())}getBoundingRectangleWithoutChildren(){return this.getBoundingRectangleWithDimensions({height:this.height,\nwidth:this.childlessWidth})}getBoundingRectangleWithDimensions(a){const b=this.getRelativeToSurfaceXY();let c,d;this.RTL?(c=b.x-a.width,d=b.x):(c=b.x,d=b.x+a.width);return new Rect$$module$build$src$core$utils$rect(b.y,b.y+a.height,c,d)}markDirty(){this.pathObject.constants=this.workspace.getRenderer().getConstants();for(let a=0,b;b=this.inputList[a];a++)b.markDirty()}setCollapsed(a){this.collapsed_!==a&&(super.setCollapsed(a),this.updateCollapsed())}childHasWarning(){const a=this.getChildren(!1);\nfor(const b of a)if(b.getIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE)||b.childHasWarning())return!0;return!1}updateCollapsed(){var a=this.isCollapsed();const b=COLLAPSED_INPUT_NAME$$module$build$src$core$constants,c=COLLAPSED_FIELD_NAME$$module$build$src$core$constants;for(let e=0,f;f=this.inputList[e];e++)f.name!==b&&f.setVisible(!a);for(var d of this.getIcons())d.updateCollapsed();a?(addClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyCollapsed\"),this.childHasWarning()&&\nthis.setWarningText($.Msg$$module$build$src$core$msg.COLLAPSED_WARNINGS_WARNING,BlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID),a=this.toString(COLLAPSE_CHARS$$module$build$src$core$internal_constants),(d=this.getField(c))?d.setValue(a):(this.getInput(b)||this.appendDummyInput(b)).appendField(new FieldLabel$$module$build$src$core$field_label(a),c)):(this.updateDisabled(),this.removeInput(b),removeClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyCollapsed\"),this.setWarningText(null,\nBlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID))}onMouseDown(a){if(!this.workspace.isReadOnly()){var b=this.workspace.getGesture(a);b&&b.handleBlockStart(a,this)}}showHelp(){const a=typeof this.helpUrl===\"function\"?this.helpUrl():this.helpUrl;a&&window.open(a)}generateContextMenu(a){if(this.workspace.isReadOnly()||!this.contextMenu)return null;a=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({block:this,focusedNode:this},a);this.customContextMenu&&\nthis.customContextMenu(a);return a}calculateContextMenuLocation(a){if(a instanceof PointerEvent)return new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY);a=wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this.workspace,this.getRelativeToSurfaceXY());let b,c;const d=(b=this.inputList.filter(e=>e.isVisible()).flatMap(e=>e.fieldRow).find(e=>e.isVisible()))==null?void 0:(c=b.getSvgRoot())==null?void 0:c.getBoundingClientRect();return new Coordinate$$module$build$src$core$utils$coordinate(this.RTL?\na.x-5:a.x+5,(d&&d.height?d.y+d.height:a.y+this.height)+5)}showContextMenu(a){const b=this.generateContextMenu(a),c=this.calculateContextMenuLocation(a);b&&b.length&&(show$$module$build$src$core$contextmenu(a,b,this.RTL,this.workspace,c),setCurrentBlock$$module$build$src$core$contextmenu(this))}updateComponentLocations(a){this.dragging||this.updateConnectionLocations(a);this.updateIconLocations(a);this.updateFieldLocations(a);for(const b of this.getChildren(!1))b.updateComponentLocations(Coordinate$$module$build$src$core$utils$coordinate.sum(a,\nb.relativeCoords))}updateConnectionLocations(a){for(const b of this.getConnections_(!1))b.moveToOffset(a)}updateIconLocations(a){for(const b of this.getIcons())b.onLocationChange(a)}updateFieldLocations(a){for(const b of this.inputList)for(const c of b.fieldRow)c.onLocationChange(a)}addClass(a){addClass$$module$build$src$core$utils$dom(this.svgGroup,a)}removeClass(a){removeClass$$module$build$src$core$utils$dom(this.svgGroup,a)}setDragging(a){(this.dragging=a)?(this.translation=\"\",draggingConnections$$module$build$src$core$common.push(...this.getConnections_(!0)),\nthis.addClass(\"blocklyDragging\")):(draggingConnections$$module$build$src$core$common.length=0,this.removeClass(\"blocklyDragging\"));for(let b=0;bc.focusTree(this.workspace),0)}b&&(this.unplug(a),disposeUiEffect$$module$build$src$core$block_animations(this));super.dispose(!!a);\nremoveNode$$module$build$src$core$utils$dom(this.svgGroup)}disposeInternal(){this.disposing=!0;super.disposeInternal();$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===this&&this.workspace.cancelCurrentGesture();[...this.warningTextDb.values()].forEach(a=>clearTimeout(a));this.warningTextDb.clear();this.getIcons().forEach(a=>a.dispose())}checkAndDelete(){this.workspace.isFlyout||($.setGroup$$module$build$src$core$events$utils(!0),this.workspace.hideChaff(),this.outputConnection?\nthis.dispose(!1,!0):this.dispose(!0,!0),$.setGroup$$module$build$src$core$events$utils(!1))}toCopyData(a=!1){return this.isInsertionMarker_?null:{paster:BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE,blockState:save$$module$build$src$core$serialization$blocks(this,{addCoordinates:!0,addNextBlocks:a,saveIds:!1}),typeCounts:getBlockTypeCounts$$module$build$src$core$common(this,!0)}}applyColour(){var a,b;(b=(a=this.pathObject).applyColour)==null||b.call(a,this);a=this.getIcons();for(b=\n0;b{this.isDeadOrDying()||(this.warningTextDb.delete(b),this.setWarningText(a,b))},100));else if(this.isInFlyout&&(a=null),c=this.getIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE),a){let d=this.getSurroundParent(),e=null;for(;d;)d.isCollapsed()&&(e=d),d=d.getSurroundParent();e&&e.setWarningText($.Msg$$module$build$src$core$msg.COLLAPSED_WARNINGS_WARNING,BlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID);\nc?c.addMessage(a,b):this.addIcon((new WarningIcon$$module$build$src$core$icons$warning_icon(this)).addMessage(a,b))}else c&&(b?(c.addMessage(\"\",b),c.getText()||this.removeIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE)):this.removeIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE))}setMutator(a){this.removeIcon($.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE);a&&this.addIcon(a)}addIcon(a){super.addIcon(a);a instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&\n(this.mutator=a);a.initView(this.createIconPointerDownListener(a));a.applyColour();a.updateEditable();this.queueRender();return a}createIconPointerDownListener(a){return b=>{this.isDeadOrDying()||(b=this.workspace.getGesture(b))&&b.setStartIcon(a)}}removeIcon(a){const b=super.removeIcon(a);a.equals($.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE)&&(this.mutator=null);this.queueRender();return b}setDisabledReason(a,b){const c=this.isEnabled();super.setDisabledReason(a,b);this.isEnabled()===\nc||this.getInheritedDisabled()||this.updateDisabled()}setDeletable(a){super.setDeletable(a);a?removeClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyNotDeletable\"):addClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyNotDeletable\")}setHighlighted(a){this.pathObject.updateHighlighted(a)}addSelect(){this.pathObject.updateSelected(!0)}removeSelect(){this.pathObject.updateSelected(!1)}setDeleteStyle(a){this.pathObject.updateDraggingDelete(a)}getColour(){return this.style.colourPrimary}setColour(a){super.setColour(a);\na=this.workspace.getRenderer().getConstants().getBlockStyleForColour(this.colour_);let b,c;(c=(b=this.pathObject).setStyle)==null||c.call(b,a.style);this.style=a.style;this.styleName_=a.name;this.applyColour()}setStyle(a){const b=this.workspace.getRenderer().getConstants().getBlockStyle(a);this.styleName_&&removeClass$$module$build$src$core$utils$dom(this.svgGroup,this.styleName_);if(b){this.hat=b.hat;let c,d;(d=(c=this.pathObject).setStyle)==null||d.call(c,b);this.colour_=b.colourPrimary;this.style=\nb;this.applyColour();addClass$$module$build$src$core$utils$dom(this.svgGroup,a);this.styleName_=a}else throw Error(\"Invalid style name: \"+a);}getStyle(){return this.style}bringToFront(a=!1){const b=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode();let c=this;if(!c.isDeadOrDying()){do{const d=c.getSvgRoot(),e=d.parentNode,f=e.childNodes;f[f.length-1]!==d&&e.appendChild(d);if(a)break;c=c.getParent()}while(c);b&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b)}}setPreviousStatement(a,\nb){super.setPreviousStatement(a,b);this.queueRender()}setNextStatement(a,b){super.setNextStatement(a,b);this.queueRender()}setOutput(a,b){super.setOutput(a,b);this.queueRender()}setInputsInline(a){super.setInputsInline(a);this.queueRender()}removeInput(a,b){a=super.removeInput(a,b);this.queueRender();return a}moveNumberedInputBefore(a,b){super.moveNumberedInputBefore(a,b);this.queueRender()}appendInput(a){super.appendInput(a);this.queueRender();return a}setConnectionTracking(a){this.previousConnection&&\nthis.previousConnection.setTracking(a);this.outputConnection&&this.outputConnection.setTracking(a);if(this.nextConnection){this.nextConnection.setTracking(a);var b=this.nextConnection.targetBlock();b&&b.setConnectionTracking(a)}if(!this.collapsed_)for(b=0;bd.getElement()===a);if(c===-1)return null;c++;c>=b.length&&(c=0);return b[c].getElement()}getPreviousSibling(a){const b=this.flyout.getContents();if(!b)return null;let c=b.findIndex(d=>d.getElement()===\na);if(c===-1)return null;c--;c<0&&(c=b.length-1);return b[c].getElement()}isNavigable(a){return this.policy.isNavigable(a)}isApplicable(a){return this.policy.isApplicable(a)}},module$build$src$core$keyboard_nav$flyout_navigation_policy={};module$build$src$core$keyboard_nav$flyout_navigation_policy.FlyoutNavigationPolicy=FlyoutNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_navigation_policy;var FlyoutSeparator$$module$build$src$core$flyout_separator=class{constructor(a,b){this.gap=a;this.axis=b;this.y=this.x=0}getBoundingRectangle(){switch(this.axis){case \"x\":return new Rect$$module$build$src$core$utils$rect(this.y,this.y,this.x,this.x+this.gap);case \"y\":return new Rect$$module$build$src$core$utils$rect(this.y,this.y+this.gap,this.x,this.x)}}moveBy(a,b,c){this.x+=a;this.y+=b}isNavigable(){return!1}getFocusableElement(){throw Error(\"Cannot be focused\");}getFocusableTree(){throw Error(\"Cannot be focused\");\n}onNodeFocus(){}onNodeBlur(){}canBeFocused(){return!1}},module$build$src$core$flyout_separator={};module$build$src$core$flyout_separator.FlyoutSeparator=FlyoutSeparator$$module$build$src$core$flyout_separator;var FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy=class{getFirstChild(a){return null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return!1}isApplicable(a){return a instanceof FlyoutSeparator$$module$build$src$core$flyout_separator}},module$build$src$core$keyboard_nav$flyout_separator_navigation_policy={};\nmodule$build$src$core$keyboard_nav$flyout_separator_navigation_policy.FlyoutSeparatorNavigationPolicy=FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy;var BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy=class{getFirstChild(a){return a.getEditor()}getParent(a){let b;return(b=a.getOwner())!=null?b:null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof TextInputBubble$$module$build$src$core$bubbles$textinput_bubble}},module$build$src$core$keyboard_nav$block_comment_navigation_policy={};\nmodule$build$src$core$keyboard_nav$block_comment_navigation_policy.BlockCommentNavigationPolicy=BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy;var BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy=class{getFirstChild(a){return getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy(a,!0)[0]}getParent(a){var b;if((b=a.previousConnection)==null?0:b.targetBlock()){if(b=a.getSurroundParent())return b}else{let c;if((c=a.outputConnection)==null?0:c.targetBlock())return a.outputConnection.targetBlock()}return a.workspace}getNextSibling(a){let b;if((b=a.nextConnection)==null?0:b.targetBlock()){let d;\nreturn(d=a.nextConnection)==null?void 0:d.targetBlock()}let c;return((c=a.outputConnection)==null?0:c.targetBlock())?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1):a.getSurroundParent()?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a.getTopStackBlock(),1):this.getParent(a)instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1):null}getPreviousSibling(a){let b;\nif((b=a.previousConnection)==null?0:b.targetBlock()){let d;return(d=a.previousConnection)==null?void 0:d.targetBlock()}let c;return((c=a.outputConnection)==null?0:c.targetBlock())?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1):this.getParent(a)instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1):null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof BlockSvg$$module$build$src$core$block_svg}},\nmodule$build$src$core$keyboard_nav$block_navigation_policy={};module$build$src$core$keyboard_nav$block_navigation_policy.BlockNavigationPolicy=BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy;module$build$src$core$keyboard_nav$block_navigation_policy.navigateBlock=navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy;module$build$src$core$keyboard_nav$block_navigation_policy.navigateStacks=navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy;var CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy=class{getFirstChild(a){return null}getParent(a){return a.getCommentView().workspace.getCommentById(a.getCommentView().commentId)}getNextSibling(a){const b=a.getCommentView().getCommentBarButtons();a=b.indexOf(a);return a>=0&&a+10?b[a-1]:null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof\nCommentBarButton$$module$build$src$core$comments$comment_bar_button}},module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy={};module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy.CommentBarButtonNavigationPolicy=CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy;var CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy=class{getFirstChild(a){return null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof CommentEditor$$module$build$src$core$comments$comment_editor}},module$build$src$core$keyboard_nav$comment_editor_navigation_policy={};\nmodule$build$src$core$keyboard_nav$comment_editor_navigation_policy.CommentEditorNavigationPolicy=CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy;var ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy=class{getFirstChild(a){return a.getParentInput()?a.targetConnection:null}getParent(a){return a.getSourceBlock()}getNextSibling(a){if(a.getParentInput())return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1);if(a.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT){const c=a.targetConnection;var b=a.getSourceBlock();if(!c&&b.getRootBlock().lastConnectionInStack(!1)===\na){a=b.workspace.getTopBlocks(!0);b=a.indexOf(b.getRootBlock())+1;b>=a.length&&(b=0);b=a[b];let d;return(d=this.getParentConnection(b))!=null?d:b}return c}return a.getSourceBlock()}getPreviousSibling(a){if(a.getParentInput())return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1);if(a.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||a.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE){const c=a.targetConnection&&\n!a.targetConnection.getParentInput()?a.targetConnection:null;var b=a.getSourceBlock();if(!c&&this.getParentConnection(b.getRootBlock())===a){a=b.workspace.getTopBlocks(!0);b=a.indexOf(b.getRootBlock())-1;b<0&&(b=a.length-1);b=a[b];let d;return(d=b.lastConnectionInStack(!1))!=null?d:b}return c}return a.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT?a.getSourceBlock():null}getParentConnection(a){let b;return!a.outputConnection||((b=a.previousConnection)==null?0:b.isConnected())?\na.previousConnection:a.outputConnection}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof RenderedConnection$$module$build$src$core$rendered_connection}},module$build$src$core$keyboard_nav$connection_navigation_policy={};module$build$src$core$keyboard_nav$connection_navigation_policy.ConnectionNavigationPolicy=ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy;var FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy=class{getFirstChild(a){return null}getParent(a){return a.getSourceBlock()}getNextSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){let b;return a.canBeFocused()&&a.isVisible()&&(a.isClickable()||a.isCurrentlyEditable())&&!(((b=a.getSourceBlock())==\nnull?0:b.isSimpleReporter())&&a.isFullBlockField())&&a.getParentInput().isVisible()}isApplicable(a){return a instanceof Field$$module$build$src$core$field}},module$build$src$core$keyboard_nav$field_navigation_policy={};module$build$src$core$keyboard_nav$field_navigation_policy.FieldNavigationPolicy=FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy;var module$build$src$core$icons$registry={};module$build$src$core$icons$registry.register=register$$module$build$src$core$icons$registry;module$build$src$core$icons$registry.unregister=unregister$$module$build$src$core$icons$registry;var SIZE$$module$build$src$core$icons$comment_icon=17,DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon=160,DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon=80,CommentIcon$$module$build$src$core$icons$comment_icon=class extends Icon$$module$build$src$core$icons$icon{constructor(a){super(a);this.sourceBlock=a;this.textInputBubble=null;this.text=\"\";this.bubbleSize=new Size$$module$build$src$core$utils$size(DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon,DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon);\nthis.bubbleVisiblity=!1}getType(){return CommentIcon$$module$build$src$core$icons$comment_icon.TYPE}initView(a){this.svgRoot||(super.initView(a),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CIRCLE,{\"class\":\"blocklyIconShape\",r:\"8\",cx:\"8\",cy:\"8\"},this.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconSymbol\",d:\"m6.8,10h2c0.003,-0.617 0.271,-0.962 0.633,-1.266 2.875,-2.4050.607,-5.534 -3.765,-3.874v1.7c3.12,-1.657 3.698,0.118 2.336,1.25-1.201,0.998 -1.201,1.528 -1.204,2.19z\"},\nthis.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyIconSymbol\",x:\"6.8\",y:\"10.78\",height:\"2\",width:\"2\"},this.svgRoot),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCommentIcon\"))}dispose(){super.dispose();let a;(a=this.textInputBubble)==null||a.dispose()}getWeight(){return CommentIcon$$module$build$src$core$icons$comment_icon.WEIGHT}getSize(){return new Size$$module$build$src$core$utils$size(SIZE$$module$build$src$core$icons$comment_icon,\nSIZE$$module$build$src$core$icons$comment_icon)}applyColour(){super.applyColour();const a=this.sourceBlock.getColour();let b;(b=this.textInputBubble)==null||b.setColour(a)}updateEditable(){const a=this,b=()=>super.updateEditable;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){b().call(a);a.bubbleIsVisible()&&(yield a.setBubbleVisible(!1),yield a.setBubbleVisible(!0))})}onLocationChange(a){const b=this.workspaceLocation;super.onLocationChange(a);this.bubbleLocation&&(a=Coordinate$$module$build$src$core$utils$coordinate.difference(this.workspaceLocation,\nb),this.bubbleLocation=Coordinate$$module$build$src$core$utils$coordinate.sum(this.bubbleLocation,a));a=this.getAnchorLocation();let c;(c=this.textInputBubble)==null||c.setAnchorLocation(a)}setText(a){const b=this.text;fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\"comment\",null,b,a));this.text=a;let c;(c=this.textInputBubble)==null||c.setText(this.text)}getText(){return this.text}setBubbleSize(a){this.bubbleSize=\na;let b;(b=this.textInputBubble)==null||b.setSize(this.bubbleSize,!0)}getBubbleSize(){return this.bubbleSize}setBubbleLocation(a){this.bubbleLocation=a;let b;(b=this.textInputBubble)==null||b.moveDuringDrag(a)}getBubbleLocation(){return this.bubbleLocation}saveState(){if(this.text){const a={text:this.text,pinned:this.bubbleIsVisible(),height:this.bubbleSize.height,width:this.bubbleSize.width},b=this.getBubbleLocation();b&&(a.x=this.sourceBlock.workspace.RTL?this.sourceBlock.workspace.getWidth()-(b.x+\nthis.bubbleSize.width):b.x,a.y=b.y);return a}return null}loadState(a){let b;this.text=(b=a.text)!=null?b:\"\";let c,d;this.bubbleSize=new Size$$module$build$src$core$utils$size((c=a.width)!=null?c:DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon,(d=a.height)!=null?d:DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon);let e;this.bubbleVisiblity=(e=a.pinned)!=null?e:!1;this.setBubbleVisible(this.bubbleVisiblity);let f=a.x;const g=a.y;finishQueuedRenders$$module$build$src$core$render_management().then(()=>\n{f&&g&&(f=this.sourceBlock.workspace.RTL?this.sourceBlock.workspace.getWidth()-(f+this.bubbleSize.width):f,this.setBubbleLocation(new Coordinate$$module$build$src$core$utils$coordinate(f,g)))})}onClick(){super.onClick();this.setBubbleVisible(!this.bubbleIsVisible())}isClickableInFlyout(){return!1}onTextChange(){if(this.textInputBubble){var a=this.textInputBubble.getText();this.text!==a&&(fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\n\"comment\",null,this.text,a)),this.text=a)}}onSizeChange(){this.textInputBubble&&(this.bubbleSize=this.textInputBubble.getSize())}onBubbleLocationChange(){this.textInputBubble&&(this.bubbleLocation=this.textInputBubble.getRelativeToSurfaceXY())}bubbleIsVisible(){return this.bubbleVisiblity}setBubbleVisible(a){const b=this;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){b.bubbleVisiblity!==a&&(b.bubbleVisiblity=a,yield finishQueuedRenders$$module$build$src$core$render_management(),\n!b.sourceBlock.rendered||b.sourceBlock.isInFlyout||b.sourceBlock.isInsertionMarker()||(a?(b.sourceBlock.isEditable()?b.showEditableBubble():b.showNonEditableBubble(),b.applyColour()):b.hideBubble(),fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BUBBLE_OPEN))(b.sourceBlock,a,\"comment\"))))})}getBubble(){return this.textInputBubble}showEditableBubble(){this.createBubble();let a;(a=this.textInputBubble)==null||a.addTextChangeListener(()=>\nthis.onTextChange());let b;(b=this.textInputBubble)==null||b.addSizeChangeListener(()=>this.onSizeChange())}showNonEditableBubble(){this.createBubble();let a;(a=this.textInputBubble)==null||a.setEditable(!1)}createBubble(){this.textInputBubble=new TextInputBubble$$module$build$src$core$bubbles$textinput_bubble(this.sourceBlock.workspace,this.getAnchorLocation(),this.getBubbleOwnerRect(),this);this.textInputBubble.setText(this.getText());this.textInputBubble.setSize(this.bubbleSize,!0);this.bubbleLocation&&\nthis.textInputBubble.moveDuringDrag(this.bubbleLocation);this.textInputBubble.addTextChangeListener(()=>this.onTextChange());this.textInputBubble.addSizeChangeListener(()=>this.onSizeChange());this.textInputBubble.addLocationChangeListener(()=>this.onBubbleLocationChange())}hideBubble(){let a;(a=this.textInputBubble)==null||a.dispose();this.textInputBubble=null}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$comment_icon/2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,\nnew Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){return this.sourceBlock.getBoundingRectangleWithoutChildren()}};CommentIcon$$module$build$src$core$icons$comment_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.COMMENT;CommentIcon$$module$build$src$core$icons$comment_icon.WEIGHT=3;register$$module$build$src$core$icons$registry(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE,CommentIcon$$module$build$src$core$icons$comment_icon);\nvar module$build$src$core$icons$comment_icon={};module$build$src$core$icons$comment_icon.CommentIcon=CommentIcon$$module$build$src$core$icons$comment_icon;var IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy=class{getFirstChild(a){if(a instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&a.bubbleIsVisible()&&$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===a){let b,c;return(c=(b=a.getBubble())==null?void 0:b.getWorkspace())!=null?c:null}if(a instanceof CommentIcon$$module$build$src$core$icons$comment_icon&&a.bubbleIsVisible()&&$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===\na){let b,c;return(c=(b=a.getBubble())==null?void 0:b.getEditor())!=null?c:null}return null}getParent(a){return a.getSourceBlock()}getNextSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof Icon$$module$build$src$core$icons$icon}},module$build$src$core$keyboard_nav$icon_navigation_policy=\n{};module$build$src$core$keyboard_nav$icon_navigation_policy.IconNavigationPolicy=IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy;var WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy=class{getFirstChild(a){return a.view.getCommentBarButtons()[0]}getParent(a){return a.workspace}getNextSibling(a){return navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment}},\nmodule$build$src$core$keyboard_nav$workspace_comment_navigation_policy={};module$build$src$core$keyboard_nav$workspace_comment_navigation_policy.WorkspaceCommentNavigationPolicy=WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy;var WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy=class{getFirstChild(a){a=a.getTopBlocks(!0);return a.length?a[0]:null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()&&!a.isMutator}isApplicable(a){return a instanceof WorkspaceSvg$$module$build$src$core$workspace_svg}},module$build$src$core$keyboard_nav$workspace_navigation_policy={};\nmodule$build$src$core$keyboard_nav$workspace_navigation_policy.WorkspaceNavigationPolicy=WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy;var Navigator$$module$build$src$core$navigator=class{constructor(){this.rules=[new BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy,new FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy,new ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy,new WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy,new IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy,\nnew WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy,new CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy,new BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy,new CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy]}addNavigationPolicy(a){this.rules.push(a)}get(a){return this.rules.find(b=>b.isApplicable(a))}getFirstChild(a){let b;\nconst c=(b=this.get(a))==null?void 0:b.getFirstChild(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getFirstChild(c)||this.getNextSibling(c)}getParent(a){let b;const c=(b=this.get(a))==null?void 0:b.getParent(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getParent(c)}getNextSibling(a){let b;const c=(b=this.get(a))==null?void 0:b.getNextSibling(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getNextSibling(c)}getPreviousSibling(a){let b;\nconst c=(b=this.get(a))==null?void 0:b.getPreviousSibling(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getPreviousSibling(c)}},module$build$src$core$navigator={};module$build$src$core$navigator.Navigator=Navigator$$module$build$src$core$navigator;var FlyoutNavigator$$module$build$src$core$flyout_navigator=class extends Navigator$$module$build$src$core$navigator{constructor(a){super();this.rules.push(new FlyoutButtonNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_button_navigation_policy,new FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy);this.rules=this.rules.map(b=>new FlyoutNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_navigation_policy(b,a))}},module$build$src$core$flyout_navigator=\n{};module$build$src$core$flyout_navigator.FlyoutNavigator=FlyoutNavigator$$module$build$src$core$flyout_navigator;var ScrollbarPair$$module$build$src$core$scrollbar_pair=class{constructor(a,b,c,d,e){this.workspace=a;this.oldHostMetrics=this.corner_=this.vScroll=this.hScroll=null;b=b===void 0?!0:b;c=c===void 0?!0:c;const f=b&&c;b&&(this.hScroll=new Scrollbar$$module$build$src$core$scrollbar(a,!0,f,d,e));c&&(this.vScroll=new Scrollbar$$module$build$src$core$scrollbar(a,!1,f,d,e));f&&(this.corner_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{height:Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness,\nwidth:Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness,\"class\":\"blocklyScrollbarBackground\"}),insertAfter$$module$build$src$core$utils$dom(this.corner_,a.getBubbleCanvas()))}dispose(){removeNode$$module$build$src$core$utils$dom(this.corner_);this.oldHostMetrics=this.corner_=null;this.hScroll&&(this.hScroll.dispose(),this.hScroll=null);this.vScroll&&(this.vScroll.dispose(),this.vScroll=null)}resize(){const a=this.workspace.getMetrics();if(a){var b=!1,c=!1;this.oldHostMetrics&&this.oldHostMetrics.viewWidth===\na.viewWidth&&this.oldHostMetrics.viewHeight===a.viewHeight&&this.oldHostMetrics.absoluteTop===a.absoluteTop&&this.oldHostMetrics.absoluteLeft===a.absoluteLeft?(this.oldHostMetrics&&this.oldHostMetrics.scrollWidth===a.scrollWidth&&this.oldHostMetrics.viewLeft===a.viewLeft&&this.oldHostMetrics.scrollLeft===a.scrollLeft||(b=!0),this.oldHostMetrics&&this.oldHostMetrics.scrollHeight===a.scrollHeight&&this.oldHostMetrics.viewTop===a.viewTop&&this.oldHostMetrics.scrollTop===a.scrollTop||(c=!0)):c=b=!0;if(b||\nc){try{$.disable$$module$build$src$core$events$utils(),this.hScroll&&b&&this.hScroll.resize(a),this.vScroll&&c&&this.vScroll.resize(a)}finally{$.enable$$module$build$src$core$events$utils()}this.workspace.maybeFireViewportChangeEvent()}if(this.hScroll&&this.vScroll){if(!this.oldHostMetrics||this.oldHostMetrics.viewWidth!==a.viewWidth||this.oldHostMetrics.absoluteLeft!==a.absoluteLeft){let d;(d=this.corner_)==null||d.setAttribute(\"x\",String(this.vScroll.position.x))}if(!this.oldHostMetrics||this.oldHostMetrics.viewHeight!==\na.viewHeight||this.oldHostMetrics.absoluteTop!==a.absoluteTop){let d;(d=this.corner_)==null||d.setAttribute(\"y\",String(this.hScroll.position.y))}}this.oldHostMetrics=a}}canScrollHorizontally(){return!!this.hScroll}canScrollVertically(){return!!this.vScroll}setOrigin(a,b){this.hScroll&&this.hScroll.setOrigin(a,b);this.vScroll&&this.vScroll.setOrigin(a,b)}set(a,b,c){this.hScroll&&this.hScroll.set(a,!1);this.vScroll&&this.vScroll.set(b,!1);if(c||c===void 0)a={},this.hScroll&&(a.x=this.hScroll.getRatio_()),\nthis.vScroll&&(a.y=this.vScroll.getRatio_()),this.workspace.setMetrics(a)}setX(a){this.hScroll&&this.hScroll.set(a,!0)}setY(a){this.vScroll&&this.vScroll.set(a,!0)}setContainerVisible(a){this.hScroll&&this.hScroll.setContainerVisible(a);this.vScroll&&this.vScroll.setContainerVisible(a)}isVisible(){let a=!1;this.hScroll&&(a=this.hScroll.isVisible());this.vScroll&&(a=a||this.vScroll.isVisible());return a}setVisible(a){this.hScroll&&this.hScroll.setVisibleInternal(a);this.vScroll&&this.vScroll.setVisibleInternal(a)}resizeContent(a){this.hScroll&&\nthis.hScroll.resizeContentHorizontal(a);this.vScroll&&this.vScroll.resizeContentVertical(a)}resizeView(a){this.hScroll&&this.hScroll.resizeViewHorizontal(a);this.vScroll&&this.vScroll.resizeViewVertical(a)}},module$build$src$core$scrollbar_pair={};module$build$src$core$scrollbar_pair.ScrollbarPair=ScrollbarPair$$module$build$src$core$scrollbar_pair;var SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater=\"sep\",SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater=class{load(a,b){a=new FlyoutSeparator$$module$build$src$core$flyout_separator(0,b.horizontalLayout?\"x\":\"y\");return new FlyoutItem$$module$build$src$core$flyout_item(a,SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater)}gapForItem(a,b){let c;return(c=parseInt(String(a.gap)))!=null?c:b}disposeItem(a){}getType(){return SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater}};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater,SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater);var module$build$src$core$separator_flyout_inflater={SEPARATOR_TYPE:SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater};module$build$src$core$separator_flyout_inflater.SeparatorFlyoutInflater=SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater;var Flyout$$module$build$src$core$flyout_base=class extends DeleteArea$$module$build$src$core$delete_area{constructor(a){super();this.horizontalLayout=!1;this.boundEvents=[];this.reflowWrapper=null;this.contents=[];this.autoClose=!0;this.visible=!1;this.containerVisible=!0;this.CORNER_RADIUS=8;this.SCROLLBAR_MARGIN=2.5;this.height_=this.width_=0;this.dragAngleRange_=70;this.svgGroup_=this.svgBackground_=null;this.inflaters=new Map;a.setMetrics=this.setMetrics_.bind(this);this.workspace_=new WorkspaceSvg$$module$build$src$core$workspace_svg(a);\nthis.workspace_.setMetricsManager(new FlyoutMetricsManager$$module$build$src$core$flyout_metrics_manager(this.workspace_,this));this.workspace_.internalIsFlyout=!0;this.workspace_.setVisible(this.visible);this.workspace_.setNavigator(new FlyoutNavigator$$module$build$src$core$flyout_navigator(this));this.id=genUid$$module$build$src$core$utils$idgenerator();this.RTL=!!a.RTL;this.toolboxPosition_=a.toolboxPosition;this.tabWidth_=this.workspace_.getRenderer().getConstants().TAB_WIDTH;this.MARGIN=this.CORNER_RADIUS;\nthis.GAP_X=this.MARGIN*3;this.GAP_Y=this.MARGIN*3}createDom(a){this.svgGroup_=createSvgElement$$module$build$src$core$utils$dom(a,{\"class\":\"blocklyFlyout\"});this.svgGroup_.style.display=\"none\";this.svgBackground_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyFlyoutBackground\"},this.svgGroup_);this.svgGroup_.appendChild(this.workspace_.createDom());this.workspace_.getThemeManager().subscribe(this.svgBackground_,\"flyoutBackgroundColour\",\n\"fill\");this.workspace_.getThemeManager().subscribe(this.svgBackground_,\"flyoutOpacity\",\"fill-opacity\");return this.svgGroup_}init(a){this.targetWorkspace=a;this.workspace_.targetWorkspace=a;this.workspace_.scrollbar=new ScrollbarPair$$module$build$src$core$scrollbar_pair(this.workspace_,this.horizontalLayout,!this.horizontalLayout,\"blocklyFlyoutScrollbar\",this.SCROLLBAR_MARGIN);this.hide();this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"wheel\",this,this.wheel_));\nthis.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.svgBackground_,\"pointerdown\",this,this.onMouseDown));this.workspace_.getGesture=this.targetWorkspace.getGesture.bind(this.targetWorkspace);this.workspace_.setVariableMap(this.targetWorkspace.getVariableMap());this.workspace_.createPotentialVariableMap();a.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.FLYOUT_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,\nComponentManager$$module$build$src$core$component_manager.Capability.DELETE_AREA,ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET]})}dispose(){this.hide();this.targetWorkspace.getComponentManager().removeComponent(this.id);for(const a of this.boundEvents)unbind$$module$build$src$core$browser_events(a);this.boundEvents.length=0;this.workspace_&&(this.workspace_.getThemeManager().unsubscribe(this.svgBackground_),this.workspace_.dispose());this.svgGroup_&&removeNode$$module$build$src$core$utils$dom(this.svgGroup_)}getWidth(){return this.width_}getHeight(){return this.height_}getFlyoutScale(){return this.targetWorkspace.scale}getWorkspace(){return this.workspace_}setAutoClose(a){this.autoClose=\na;this.targetWorkspace.recordDragTargets();this.targetWorkspace.resizeContents()}autoHide(a){!a&&this.targetWorkspace.getFlyout(!0)===this&&this.autoClose&&this.hide()}getTargetWorkspace(){return this.targetWorkspace}isVisible(){return this.visible}setVisible(a){const b=a!==this.isVisible();this.visible=a;b&&(this.autoClose||this.targetWorkspace.recordDragTargets(),this.updateDisplay())}setContainerVisible(a){const b=a!==this.containerVisible;this.containerVisible=a;b&&this.updateDisplay()}getContents(){return this.contents}setContents(a){this.contents=\na}updateDisplay(){let a;a=this.containerVisible?this.isVisible():!1;this.svgGroup_&&(this.svgGroup_.style.display=a?\"block\":\"none\");let b;(b=this.workspace_.scrollbar)==null||b.setContainerVisible(a)}positionAt_(a,b,c,d){let e;(e=this.svgGroup_)==null||e.setAttribute(\"width\",`${a}`);let f;(f=this.svgGroup_)==null||f.setAttribute(\"height\",`${b}`);this.workspace_.setCachedParentSvgSize(a,b);this.svgGroup_&&setCssTransform$$module$build$src$core$utils$dom(this.svgGroup_,\"translate(\"+c+\"px,\"+d+\"px)\");\nif(a=this.workspace_.scrollbar)a.setOrigin(c,d),a.resize(),a.hScroll&&a.hScroll.setPosition(a.hScroll.position.x,a.hScroll.position.y),a.vScroll&&a.vScroll.setPosition(a.vScroll.position.x,a.vScroll.position.y)}hide(){this.isVisible()&&(this.setVisible(!1),this.reflowWrapper&&(this.workspace_.removeChangeListener(this.reflowWrapper),this.reflowWrapper=null))}show(a){this.workspace_.setResizesEnabled(!1);this.hide();this.clearOldBlocks();typeof a===\"string\"&&(a=this.getDynamicCategoryContents(a));\nthis.setVisible(!0);a=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox(a);a=this.createFlyoutInfo(a);triggerQueuedRenders$$module$build$src$core$render_management(this.workspace_);this.setContents(a);this.layout_(a);this.horizontalLayout?this.height_=0:this.width_=0;this.reflow();this.workspace_.setResizesEnabled(!0);this.reflowWrapper=b=>{b.type!==EventType$$module$build$src$core$events$type.BLOCK_CHANGE&&b.type!==EventType$$module$build$src$core$events$type.BLOCK_FIELD_INTERMEDIATE_CHANGE||\nthis.reflow()};this.workspace_.addChangeListener(this.reflowWrapper)}createFlyoutInfo(a){const b=[],c=this.horizontalLayout?this.GAP_X:this.GAP_Y;for(const d of a)if(\"custom\"in d&&(a=this.getDynamicCategoryContents(d.custom),a=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox(a),b.push(...this.createFlyoutInfo(a))),a=d.kind.toLowerCase(),a=this.getInflaterForType(a))b.push(a.load(d,this)),(a=a.gapForItem(d,c))&&b.push(new FlyoutItem$$module$build$src$core$flyout_item(new FlyoutSeparator$$module$build$src$core$flyout_separator(a,\nthis.horizontalLayout?\"x\":\"y\"),SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater));return this.normalizeSeparators(b)}normalizeSeparators(a){for(let b=a.length-1;b>0;b--){const c=a[b].getType().toLowerCase(),d=a[b-1].getType().toLowerCase();c===SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater&&d===SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater&&a.splice(b-1,1)}return a}getDynamicCategoryContents(a){a=this.workspace_.targetWorkspace.getToolboxCategoryCallback(a);\nif(typeof a!==\"function\")throw TypeError(\"Couldn't find a callback function when opening a toolbox category.\");return a(this.workspace_.targetWorkspace)}clearOldBlocks(){this.getContents().forEach(b=>{let c;(c=this.getInflaterForType(b.getType()))==null||c.disposeItem(b)});let a;(a=this.workspace_.getPotentialVariableMap())==null||a.clear()}onMouseDown(a){const b=this.targetWorkspace.getGesture(a);b&&b.handleFlyoutStart(a,this)}isBlockCreatable(a){return a.isEnabled()&&!this.getTargetWorkspace().isReadOnly()}createBlock(a){let b=\nnull;$.disable$$module$build$src$core$events$utils();var c=this.targetWorkspace.getAllVariables();this.targetWorkspace.setResizesEnabled(!1);try{b=this.placeNewBlock(a)}finally{$.enable$$module$build$src$core$events$utils()}this.targetWorkspace.hideChaff();a=getAddedVariables$$module$build$src$core$variables(this.targetWorkspace,c);if(isEnabled$$module$build$src$core$events$utils()){$.setGroup$$module$build$src$core$events$utils(!0);for(c=0;c\n(this.flyout?$.config$$module$build$src$core$config.flyoutDragRadius:$.config$$module$build$src$core$config.dragRadius)}updateIsDraggingFromFlyout(){let a;if(!this.targetBlock||(a=this.flyout)==null||!a.isBlockCreatable(this.targetBlock))return!1;if(!this.flyout.targetWorkspace)throw Error(\"Cannot update dragging from the flyout because the ' +\\n 'flyout's target workspace is undefined\");return!this.flyout.isScrollable()||this.flyout.isDragTowardWorkspace(this.currentDragDeltaXY)?(this.startWorkspace_=\nthis.flyout.targetWorkspace,this.startWorkspace_.updateScreenCalculationsIfScrolled(),$.getGroup$$module$build$src$core$events$utils()||$.setGroup$$module$build$src$core$events$utils(!0),this.startBlock=null,this.targetBlock=this.flyout.createBlock(this.targetBlock),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.targetBlock),!0):!1}updateIsDraggingWorkspace(){if(!this.startWorkspace_)throw Error(\"Cannot update dragging the workspace because the start workspace is undefined\");\nif(this.flyout?this.flyout.isScrollable():this.startWorkspace_&&this.startWorkspace_.isDraggable())this.dragging=!0,this.workspaceDragger=new WorkspaceDragger$$module$build$src$core$workspace_dragger(this.startWorkspace_),this.workspaceDragger.startDrag()}updateIsDragging(a){if(!this.startWorkspace_)throw Error(\"Cannot update dragging because the start workspace is undefined\");if(this.calledUpdateIsDragging)throw Error(\"updateIsDragging_ should only be called once per gesture.\");this.calledUpdateIsDragging=\n!0;this.flyout&&this.updateIsDraggingFromFlyout();const b=getSelected$$module$build$src$core$common();b&&isDraggable$$module$build$src$core$interfaces$i_draggable(b)&&b.isMovable()?(this.dragging=!0,this.dragger=this.createDragger(b,this.startWorkspace_),this.dragger.onDragStart(a),this.dragger.onDrag(a,this.currentDragDeltaXY)):this.updateIsDraggingWorkspace()}createDragger(a,b){return new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.BLOCK_DRAGGER,this.creatorWorkspace.options,\n!0))(a,b)}doStart(a){if(!this.startWorkspace_)throw Error(\"Cannot start the touch gesture becauase the start workspace is undefined\");this.isPinchZoomEnabled=this.startWorkspace_.options.zoomOptions&&this.startWorkspace_.options.zoomOptions.pinch;isTargetInput$$module$build$src$core$browser_events(a)?this.cancel():(this.gestureHasStarted=!0,disconnectUiStop$$module$build$src$core$block_animations(),this.startWorkspace_.updateScreenCalculationsIfScrolled(),this.startWorkspace_.isMutator&&this.startWorkspace_.resize(),\nthis.currentDropdownOwner=getOwner$$module$build$src$core$dropdowndiv(),this.startWorkspace_.hideChaff(!!this.flyout),this.startWorkspace_.markFocused(),this.mostRecentEvent=a,block$$module$build$src$core$tooltip(),isRightButton$$module$build$src$core$browser_events(a)?this.handleRightClick(a):(a.type.toLowerCase()===\"pointerdown\"&&a.pointerType!==\"mouse\"&&longStart$$module$build$src$core$touch(a,this),this.mouseDownXY=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY),this.bindMouseEvents(a),\nthis.isEnding_||this.handleTouchStart(a)))}bindMouseEvents(a){this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointerdown\",null,this.handleStart.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",null,this.handleMove.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",null,this.handleUp.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\n\"pointercancel\",null,this.handleUp.bind(this),!0));a.preventDefault();a.stopPropagation()}handleStart(a){this.isDragging()||(this.handleTouchStart(a),this.isMultiTouch()&&longStop$$module$build$src$core$touch())}handleMove(a){if(this.isDragging()&&shouldHandleEvent$$module$build$src$core$touch(a)||!this.isMultiTouch()){this.updateFromEvent(a);if(this.workspaceDragger)this.workspaceDragger.drag(this.currentDragDeltaXY);else if(this.dragger)this.dragger.onDrag(this.mostRecentEvent,this.currentDragDeltaXY);\na.preventDefault();a.stopPropagation()}else this.isMultiTouch()&&(this.handleTouchMove(a),longStop$$module$build$src$core$touch())}handleUp(a){this.isDragging()||this.handleTouchEnd(a);if(!this.isMultiTouch()||this.isDragging()){if(!shouldHandleEvent$$module$build$src$core$touch(a))return;this.updateFromEvent(a);longStop$$module$build$src$core$touch();if(this.isEnding_){console.log(\"Trying to end a gesture recursively.\");return}this.isEnding_=!0;this.dragger?(keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1),\nthis.dragger.onDragEnd(a,this.currentDragDeltaXY)):this.workspaceDragger?(keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1),this.workspaceDragger.endDrag(this.currentDragDeltaXY)):this.isBubbleClick()||this.isCommentClick()||(this.isFieldClick()?this.doFieldClick():this.isIconClick()?this.doIconClick():this.isBlockClick()?this.doBlockClick():this.isWorkspaceClick()&&this.doWorkspaceClick(a))}a.preventDefault();a.stopPropagation();this.dispose()}handleTouchStart(a){var b=\ngetTouchIdentifierFromEvent$$module$build$src$core$touch(a);this.cachedPoints.set(b,this.getTouchPoint(a));var c=Array.from(this.cachedPoints.keys());c.length===2&&(b=this.cachedPoints.get(c[0]),c=this.cachedPoints.get(c[1]),this.startDistance=Coordinate$$module$build$src$core$utils$coordinate.distance(b,c),this.multiTouch=!0,a.preventDefault())}handleTouchMove(a){const b=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);this.cachedPoints.set(b,this.getTouchPoint(a));if(this.isPinchZoomEnabled&&\nthis.cachedPoints.size===2)this.handlePinch(a);else{this.updateFromEvent(a);if(this.workspaceDragger)this.workspaceDragger.drag(this.currentDragDeltaXY);else if(this.dragger)this.dragger.onDrag(this.mostRecentEvent,this.currentDragDeltaXY);a.preventDefault();a.stopPropagation()}}handlePinch(a){var b=Array.from(this.cachedPoints.keys()),c=this.cachedPoints.get(b[0]);b=this.cachedPoints.get(b[1]);c=Coordinate$$module$build$src$core$utils$coordinate.distance(c,b)/this.startDistance;if(this.previousScale>\n0&&this.previousScale0?b*ZOOM_IN_MULTIPLIER$$module$build$src$core$gesture:b*ZOOM_OUT_MULTIPLIER$$module$build$src$core$gesture;if(!this.startWorkspace_)throw Error(\"Cannot handle a pinch because the start workspace is undefined\");const d=this.startWorkspace_,e=mouseToSvg$$module$build$src$core$browser_events(a,d.getParentSvg(),d.getInverseScreenCTM());d.zoom(e.x,e.y,b)}this.previousScale=c;a.preventDefault()}handleTouchEnd(a){a=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);\nthis.cachedPoints.has(a)&&this.cachedPoints.delete(a);this.cachedPoints.size<2&&(this.cachedPoints.clear(),this.previousScale=0)}getTouchPoint(a){return this.startWorkspace_?new Coordinate$$module$build$src$core$utils$coordinate(a.pageX,a.pageY):null}isMultiTouch(){return this.multiTouch}cancel(){if(!this.isEnding_){longStop$$module$build$src$core$touch();if(this.dragger)this.dragger.onDragEnd(this.mostRecentEvent,this.currentDragDeltaXY);else this.workspaceDragger&&this.workspaceDragger.endDrag(this.currentDragDeltaXY);\nthis.dispose()}}handleRightClick(a){this.targetBlock?(this.bringBlockToFront(),this.targetBlock.workspace.hideChaff(!!this.flyout),this.targetBlock.showContextMenu(a)):this.startBubble?this.startBubble.showContextMenu(a):this.startComment?(this.startComment.workspace.hideChaff(),this.startComment.showContextMenu(a)):this.startWorkspace_&&!this.flyout&&(this.startWorkspace_.hideChaff(),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.startWorkspace_),this.startWorkspace_.showContextMenu(a));\na.preventDefault();a.stopPropagation();keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1);this.dispose()}handleWsStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleWsStart, but the gesture had already been started.\");this.setStartWorkspace(b);this.mostRecentEvent=a;this.startBlock||this.startBubble||this.startComment?this.startBlock&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.startBlock):$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b);\nthis.doStart(a)}fireWorkspaceClick(a){fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(null,a.id,\"workspace\"))}handleFlyoutStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleFlyoutStart, but the gesture had already been started.\");this.setStartFlyout(b);this.handleWsStart(a,b.getWorkspace())}handleBlockStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleBlockStart, but the gesture had already been started.\");\nthis.setStartBlock(b);this.mostRecentEvent=a}handleBubbleStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleBubbleStart, but the gesture had already been started.\");this.setStartBubble(b);this.mostRecentEvent=a}handleCommentStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleCommentStart, but the gesture had already been started.\");this.setStartComment(b);this.mostRecentEvent=a}doFieldClick(){if(!this.startField)throw Error(\"Cannot do a field click because the start field is undefined\");\nthis.bringBlockToFront();this.currentDropdownOwner!==this.startField&&this.startField.showEditor(this.mostRecentEvent)}doIconClick(){if(!this.startIcon)throw Error(\"Cannot do an icon click because the start icon is undefined\");this.bringBlockToFront();this.startIcon.onClick()}doBlockClick(){if(this.flyout&&this.flyout.autoClose){if(!this.targetBlock)throw Error(\"Cannot do a block click because the target block is undefined\");if(this.flyout.isBlockCreatable(this.targetBlock)){$.getGroup$$module$build$src$core$events$utils()||\n$.setGroup$$module$build$src$core$events$utils(!0);var a=this.flyout.createBlock(this.targetBlock);a.snapToGrid();a.bumpNeighbours();$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}}else{if(!this.startWorkspace_)throw Error(\"Cannot do a block click because the start workspace is undefined\");a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(this.startBlock,this.startWorkspace_.id,\"block\");fire$$module$build$src$core$events$utils(a)}this.bringBlockToFront();\n$.setGroup$$module$build$src$core$events$utils(!1)}doWorkspaceClick(a){this.fireWorkspaceClick(this.startWorkspace_||this.creatorWorkspace)}bringBlockToFront(){this.targetBlock&&!this.flyout&&($.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.targetBlock),this.targetBlock.bringToFront())}setStartField(a){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.setStartField, but the gesture had already been started.\");this.startField||(this.startField=a)}setStartIcon(a){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.setStartIcon, but the gesture had already been started.\");\nthis.startIcon||(this.startIcon=a)}setStartBubble(a){this.startBubble||(this.startBubble=a)}setStartComment(a){this.startComment||(this.startComment=a)}setStartBlock(a){this.startBlock||this.startBubble||(this.startBlock=a,a.isInFlyout&&a!==a.getRootBlock()?this.setTargetBlock(a.getRootBlock()):this.setTargetBlock(a))}setTargetBlock(a){a.isShadow()?this.setTargetBlock(a.getParent()):(this.targetBlock=a,$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a))}setStartWorkspace(a){this.startWorkspace_||\n(this.startWorkspace_=a)}setStartFlyout(a){this.flyout||(this.flyout=a)}isBubbleClick(){return!!this.startBubble&&!this.hasExceededDragRadius}isCommentClick(){return!!this.startComment&&!this.hasExceededDragRadius}isBlockClick(){return!!this.startBlock&&!this.hasExceededDragRadius&&!this.isFieldClick()&&!this.isIconClick()}isFieldClick(){return this.startField?this.startField.isClickable()&&!this.hasExceededDragRadius&&(!this.flyout||this.startField.isClickableInFlyout(this.flyout.autoClose)):!1}isIconClick(){if(!this.startIcon)return!1;\nconst a=!this.flyout||!this.startIcon.isClickableInFlyout||this.startIcon.isClickableInFlyout(this.flyout.autoClose);return!this.hasExceededDragRadius&&a}isWorkspaceClick(){return!this.startBlock&&!this.startBubble&&!this.startField&&!this.hasExceededDragRadius}getCurrentDragger(){let a,b;return(b=(a=this.workspaceDragger)!=null?a:this.dragger)!=null?b:null}isDragging(){return this.dragging}hasStarted(){return this.gestureHasStarted}static inProgress(){const a=getAllWorkspaces$$module$build$src$core$common();\nfor(let b=0,c;c=a[b];b++)if(c.currentGesture_)return!0;return!1}},module$build$src$core$gesture={};module$build$src$core$gesture.Gesture=Gesture$$module$build$src$core$gesture;var Grid$$module$build$src$core$grid=class{constructor(a,b){this.pattern=a;this.scale=1;let c;this.spacing=(c=b.spacing)!=null?c:0;let d;this.length=(d=b.length)!=null?d:1;this.line2=(this.line1=a.firstChild)&&this.line1.nextSibling;let e;this.snapToGrid=(e=b.snap)!=null?e:!1}setSpacing(a){this.spacing=a;this.update(this.scale)}getSpacing(){return this.spacing}setLength(a){this.length=a;this.update(this.scale)}getLength(){return this.length}setSnapToGrid(a){this.snapToGrid=a}shouldSnap(){return this.snapToGrid}getPatternId(){return this.pattern.id}update(a){this.scale=\na;var b=this.spacing*a;this.pattern.setAttribute(\"width\",`${b}`);this.pattern.setAttribute(\"height\",`${b}`);b=Math.floor(this.spacing/2)+.5;let c=b-this.length/2,d=b+this.length/2;b*=a;c*=a;d*=a;this.setLineAttributes(this.line1,a,c,d,b,b);this.setLineAttributes(this.line2,a,b,b,c,d)}setLineAttributes(a,b,c,d,e,f){a&&(a.setAttribute(\"stroke-width\",`${b}`),a.setAttribute(\"x1\",`${c}`),a.setAttribute(\"y1\",`${e}`),a.setAttribute(\"x2\",`${d}`),a.setAttribute(\"y2\",`${f}`))}moveTo(a,b){this.pattern.setAttribute(\"x\",\n`${a}`);this.pattern.setAttribute(\"y\",`${b}`)}alignXY(a){var b=this.getSpacing();const c=b/2,d=Math.round(Math.round((a.x-c)/b)*b+c);b=Math.round(Math.round((a.y-c)/b)*b+c);return d===a.x&&b===a.y?a:new Coordinate$$module$build$src$core$utils$coordinate(d,b)}static createDom(a,b,c,d){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATTERN,{id:\"blocklyGridPattern\"+a,patternUnits:\"userSpaceOnUse\"},c);let e,f;if(((e=b.length)!=null?e:1)>0&&((f=b.spacing)!=null?\nf:0)>0){createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{stroke:b.colour},a);let g;(g=b.length)!=null&&g&&createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{stroke:b.colour},a)}else createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{},a);d&&d.style.setProperty(\"--blocklyGridPattern\",`url(#${a.id})`);return a}},module$build$src$core$grid={};\nmodule$build$src$core$grid.Grid=Grid$$module$build$src$core$grid;var module$build$src$core$interfaces$i_autohideable={};module$build$src$core$interfaces$i_autohideable.isAutoHideable=isAutoHideable$$module$build$src$core$interfaces$i_autohideable;var LayerManager$$module$build$src$core$layer_manager=class{constructor(a){this.workspace=a;this.layers=new Map;if(a=a.getInjectionDiv())this.dragLayer=this.createDragLayer(a),this.animationLayer=this.createAnimationLayer(a);a=this.createLayer(BLOCK$$module$build$src$core$layers);addClass$$module$build$src$core$utils$dom(a,\"blocklyBlockCanvas\");a=this.createLayer(BUBBLE$$module$build$src$core$layers);addClass$$module$build$src$core$utils$dom(a,\"blocklyBubbleCanvas\")}createDragLayer(a){const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,\n{\"class\":\"blocklyBlockDragSurface\",xmlns:SVG_NS$$module$build$src$core$utils$dom,\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\"});a.append(b);return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},b)}createAnimationLayer(a){const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{\"class\":\"blocklyAnimationLayer\",xmlns:SVG_NS$$module$build$src$core$utils$dom,\n\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\"});a.append(b);return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},b)}appendToAnimationLayer(a){let b;const c=(b=this.dragLayer)==null?void 0:b.getAttribute(\"transform\");if(c){let e;(e=this.animationLayer)==null||e.setAttribute(\"transform\",c)}let d;(d=this.animationLayer)==null||d.appendChild(a.getSvgRoot())}translateLayers(a,b){a=\n`translate(${a.x}, ${a.y}) scale(${b})`;let c;(c=this.dragLayer)==null||c.setAttribute(\"transform\",a);for(const [,d]of this.layers)d.setAttribute(\"transform\",a)}moveToDragLayer(a){let b;(b=this.dragLayer)==null||b.appendChild(a.getSvgRoot());a.canBeFocused()&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}moveOffDragLayer(a,b){this.append(a,b);a.canBeFocused()&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}append(a,b){this.layers.has(b)||this.createLayer(b);\na=a.getSvgRoot();let c;if(((c=this.layers.get(b))==null?void 0:c.lastChild)!==a){let d;(d=this.layers.get(b))==null||d.appendChild(a)}}createLayer(a){const b=this.workspace.getSvgGroup(),c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});let d=!1;const e=[...this.layers].sort((f,g)=>f[0]-g[0]);for(const [f,g]of e)if(a{let c;return b instanceof BlockSvg$$module$build$src$core$block_svg&&!((c=b.outputConnection)==null?0:c.targetBlock())||b instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment},\n!0))&&this.setCurNode(a);return a}in(){var a=this.getCurNode();if(!a)return null;(a=this.getNextNode(a,()=>!0,!0))&&this.setCurNode(a);return a}prev(){var a=this.getCurNode();if(!a)return null;(a=this.getPreviousNode(a,b=>{let c;return b instanceof BlockSvg$$module$build$src$core$block_svg&&!((c=b.outputConnection)==null?0:c.targetBlock())||b instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment},!0))&&this.setCurNode(a);return a}out(){var a=this.getCurNode();\nif(!a)return null;(a=this.getPreviousNode(a,()=>!0,!0))&&this.setCurNode(a);return a}atEndOfLine(){var a=this.getCurNode();if(!a)return!1;const b=this.getNextNode(a,()=>!0,!0);a=this.getNextNode(a,c=>{let d;return c instanceof BlockSvg$$module$build$src$core$block_svg&&!((d=c.outputConnection)==null?0:d.targetBlock())},!0);return b===a}getNextNodeImpl(a,b,c=new Set){if(!a||c.has(a))return null;let d=this.workspace.getNavigator().getFirstChild(a)||this.workspace.getNavigator().getNextSibling(a);for(var e=\na;e&&!d;){e=this.workspace.getNavigator().getParent(e);if(!e)break;d=this.workspace.getNavigator().getNextSibling(e)}return b(d)?d:d?(c.add(a),this.getNextNodeImpl(d,b,c)):null}getNextNode(a,b,c){return!a||!c&&this.getLastNode()===a?null:this.getNextNodeImpl(a,b)}getPreviousNodeImpl(a,b,c=new Set){if(!a||c.has(a))return null;const d=this.getRightMostChild(this.workspace.getNavigator().getPreviousSibling(a),a)||this.workspace.getNavigator().getParent(a);return b(d)?d:d?(c.add(a),this.getPreviousNodeImpl(d,\nb,c)):null}getPreviousNode(a,b,c){return!a||!c&&this.getFirstNode()===a?null:this.getPreviousNodeImpl(a,b)}getRightMostChild(a,b){if(!a)return a;let c=this.workspace.getNavigator().getFirstChild(a);if(!c||c===b)return a;for(a=c;a&&a!==b;a=this.workspace.getNavigator().getNextSibling(c))c=a;return this.getRightMostChild(c,b)}preDelete(a){var b=this.getCurNode();b=b?[b]:[];var c;let d,e;const f=(e=(c=a.previousConnection)==null?void 0:c.targetConnection)!=null?e:(d=a.outputConnection)==null?void 0:\nd.targetConnection;f&&b.push(f);(c=a.getNextBlock())&&b.push(c);(a=a.getParent())&&b.push(a);b.push(this.workspace);this.potentialNodes=b}postDelete(){const a=this.potentialNodes;this.potentialNodes=null;if(!a)throw Error(\"must call preDelete first\");for(const b of a){let c;if((c=this.getSourceBlockFromNode(b))==null||!c.disposed){this.setCurNode(b);return}}throw Error(\"no valid nodes in this.potentialNodes\");}getCurNode(){return $.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()}setCurNode(a){$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}getFirstNode(){return this.workspace.getNavigator().getFirstChild(this.workspace)}getLastNode(){const a=\nthis.getFirstNode();return this.getPreviousNode(a,()=>!0,!0)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.CURSOR,DEFAULT$$module$build$src$core$registry,LineCursor$$module$build$src$core$keyboard_nav$line_cursor);var module$build$src$core$keyboard_nav$line_cursor={};module$build$src$core$keyboard_nav$line_cursor.LineCursor=LineCursor$$module$build$src$core$keyboard_nav$line_cursor;var MarkerManager$$module$build$src$core$marker_manager=class{constructor(a){this.workspace=a;this.markers=new Map;this.cursor=new LineCursor$$module$build$src$core$keyboard_nav$line_cursor(this.workspace)}registerMarker(a,b){this.markers.has(a)&&this.unregisterMarker(a);this.markers.set(a,b)}unregisterMarker(a){const b=this.markers.get(a);if(b)b.dispose(),this.markers.delete(a);else throw Error(\"Marker with ID \"+a+\" does not exist. Can only unregister markers that exist.\");}getCursor(){return this.cursor}getMarker(a){return this.markers.get(a)||\nnull}setCursor(a){this.cursor=a}dispose(){const a=Object.keys(this.markers);for(let b=0,c;c=a[b];b++)this.unregisterMarker(c);this.markers.clear();this.cursor.dispose()}};MarkerManager$$module$build$src$core$marker_manager.LOCAL_MARKER=\"local_marker_1\";var module$build$src$core$marker_manager={};module$build$src$core$marker_manager.MarkerManager=MarkerManager$$module$build$src$core$marker_manager;var module$build$src$core$icons={};module$build$src$core$icons.CommentIcon=CommentIcon$$module$build$src$core$icons$comment_icon;module$build$src$core$icons.Icon=Icon$$module$build$src$core$icons$icon;module$build$src$core$icons.IconType=IconType$$module$build$src$core$icons$icon_types;module$build$src$core$icons.MutatorIcon=$.MutatorIcon$$module$build$src$core$icons$mutator_icon;module$build$src$core$icons.WarningIcon=WarningIcon$$module$build$src$core$icons$warning_icon;\nmodule$build$src$core$icons.exceptions=module$build$src$core$icons$exceptions;module$build$src$core$icons.registry=module$build$src$core$icons$registry;var module$build$src$core$interfaces$i_procedure_block={};module$build$src$core$interfaces$i_procedure_block.isProcedureBlock=isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block;$.Names$$module$build$src$core$names=class{constructor(a,b){this.db=new Map;this.dbReverse=new Set;this.variableMap=null;this.variablePrefix=b||\"\";this.reservedWords=new Set(a?a.split(\",\"):[])}reset(){this.db.clear();this.dbReverse.clear();this.variableMap=null}setVariableMap(a){this.variableMap=a}getNameForUserVariable(a){return this.variableMap?(a=this.variableMap.getVariableById(a))?a.getName():null:(console.warn(\"Deprecated call to Names.prototype.getName without defining a variable map. To fix, add the following code in your generator's init() function:\\nBlockly.YourGeneratorName.nameDB_.setVariableMap(workspace.getVariableMap());\"),\nnull)}populateVariables(a){a=$.allUsedVarModels$$module$build$src$core$variables(a);for(let b=0;b=1}isHat(a){return(a.type&this.HAT)>=1}isIcon(a){return(a.type&\nthis.ICON)>=1}isSpacer(a){return(a.type&this.SPACER)>=1}isInRowSpacer(a){return(a.type&this.IN_ROW_SPACER)>=1}isSpacerRow(a){return(a.type&this.BETWEEN_ROW_SPACER)>=1}isInput(a){return(a.type&this.INPUT)>=1}isExternalInput(a){return(a.type&this.EXTERNAL_VALUE_INPUT)>=1}isInlineInput(a){return(a.type&this.INLINE_INPUT)>=1}isStatementInput(a){return(a.type&this.STATEMENT_INPUT)>=1}isPreviousConnection(a){return(a.type&this.PREVIOUS_CONNECTION)>=1}isNextConnection(a){return(a.type&this.NEXT_CONNECTION)>=\n1}isPreviousOrNextConnection(a){return this.isPreviousConnection(a)||this.isNextConnection(a)}isRoundCorner(a){return(a.type&this.LEFT_ROUND_CORNER)>=1||(a.type&this.RIGHT_ROUND_CORNER)>=1}isLeftRoundedCorner(a){return this.isRoundCorner(a)&&(a.type&this.LEFT_ROUND_CORNER)>=1}isRightRoundedCorner(a){return this.isRoundCorner(a)&&(a.type&this.RIGHT_ROUND_CORNER)>=1}isLeftSquareCorner(a){return(a.type&this.LEFT_SQUARE_CORNER)>=1}isRightSquareCorner(a){return(a.type&this.RIGHT_SQUARE_CORNER)>=1}isCorner(a){return(a.type&\nthis.CORNER)>=1}isJaggedEdge(a){return(a.type&this.JAGGED_EDGE)>=1}isRow(a){return(a.type&this.ROW)>=1}isBetweenRowSpacer(a){return(a.type&this.BETWEEN_ROW_SPACER)>=1}isTopRow(a){return(a.type&this.TOP_ROW)>=1}isBottomRow(a){return(a.type&this.BOTTOM_ROW)>=1}isTopOrBottomRow(a){return this.isTopRow(a)||this.isBottomRow(a)}isInputRow(a){return(a.type&this.INPUT_ROW)>=1}},Types$$module$build$src$core$renderers$measurables$types=new TypesContainer$$module$build$src$core$renderers$measurables$types,module$build$src$core$renderers$measurables$types=\n{Types:Types$$module$build$src$core$renderers$measurables$types};var Measurable$$module$build$src$core$renderers$measurables$base=class{constructor(a){this.centerline=this.xPos=this.height=this.width=0;this.constants_=a;this.type=Types$$module$build$src$core$renderers$measurables$types.NONE;this.notchOffset=this.constants_.NOTCH_OFFSET_LEFT}},module$build$src$core$renderers$measurables$base={};module$build$src$core$renderers$measurables$base.Measurable=Measurable$$module$build$src$core$renderers$measurables$base;var Row$$module$build$src$core$renderers$measurables$row=class{constructor(a){this.elements=[];this.xPos=this.yPos=this.widthWithConnectedBlocks=this.minWidth=this.minHeight=this.width=this.height=0;this.hasStatement=this.hasExternalInput=!1;this.statementEdge=0;this.hasJaggedEdge=this.hasDummyInput=this.hasInlineInput=!1;this.align=null;this.constants_=a;this.type=Types$$module$build$src$core$renderers$measurables$types.ROW;this.notchOffset=this.constants_.NOTCH_OFFSET_LEFT}getLastInput(){for(let a=\nthis.elements.length-1;a>=0;a--){const b=this.elements[a];if(Types$$module$build$src$core$renderers$measurables$types.isInput(b))return b}return null}measure(){throw Error(\"Unexpected attempt to measure a base Row.\");}startsWithElemSpacer(){return!0}endsWithElemSpacer(){return!0}getFirstSpacer(){for(let a=0;a=0;a--){const b=this.elements[a];if(Types$$module$build$src$core$renderers$measurables$types.isInRowSpacer(b))return b}return null}},module$build$src$core$renderers$measurables$row={};module$build$src$core$renderers$measurables$row.Row=Row$$module$build$src$core$renderers$measurables$row;var BottomRow$$module$build$src$core$renderers$measurables$bottom_row=class extends Row$$module$build$src$core$renderers$measurables$row{constructor(a){super(a);this.hasNextConnection=!1;this.connection=null;this.baseline=this.descenderHeight=0;this.type|=Types$$module$build$src$core$renderers$measurables$types.BOTTOM_ROW}hasLeftSquareCorner(a){return!!a.outputConnection||!!a.getNextBlock()}hasRightSquareCorner(a){return!0}measure(){let a=0,b=0,c=0;for(let d=0;drect,`,`${a} .blocklyEditableField>rect {`,`fill: ${this.FIELD_BORDER_RECT_COLOUR};`,\"fill-opacity: .6;\",\"stroke: none;\",\"}\",`${a} .blocklyNonEditableField>text,`,`${a} .blocklyEditableField>text {`,\n\"fill: #000;\",\"}\",`${a} .blocklyFlyoutLabelText {`,\"fill: #000;\",\"}\",`${a} .blocklyText.blocklyBubbleText {`,\"fill: #000;\",\"}\",`${a} .blocklyEditableField:not(.blocklyEditing):hover>rect {`,\"stroke: #fff;\",\"stroke-width: 2;\",\"}\",`${a} .blocklyHtmlInput {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,`font-weight: ${this.FIELD_TEXT_FONTWEIGHT};`,\"}\",`${a} .blocklySelected>.blocklyPath {`,\"stroke: #fc3;\",\"stroke-width: 3px;\",\"}\",`${a} .blocklyHighlightedConnectionPath {`,\"stroke: #fc3;\",\"}\",`${a} .blocklyReplaceable .blocklyPath {`,\n\"fill-opacity: .5;\",\"}\",`${a} .blocklyReplaceable .blocklyPathLight,`,`${a} .blocklyReplaceable .blocklyPathDark {`,\"display: none;\",\"}\",`${a} .blocklyInsertionMarker>.blocklyPath {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\"stroke: none;\",\"}\"]}},module$build$src$core$renderers$common$constants={};module$build$src$core$renderers$common$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$common$constants;\nmodule$build$src$core$renderers$common$constants.isDynamicShape=isDynamicShape$$module$build$src$core$renderers$common$constants;module$build$src$core$renderers$common$constants.isNotch=isNotch$$module$build$src$core$renderers$common$constants;module$build$src$core$renderers$common$constants.isPuzzleTab=isPuzzleTab$$module$build$src$core$renderers$common$constants;var Drawer$$module$build$src$core$renderers$common$drawer=class{constructor(a,b){this.inlinePath_=this.outlinePath_=\"\";this.block_=a;this.info_=b;this.topLeft_=a.getRelativeToSurfaceXY();this.constants_=b.getRenderer().getConstants()}draw(){this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();this.block_.pathObject.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);this.info_.RTL&&this.block_.pathObject.flipRTL();this.recordSizeOnBlock_()}recordSizeOnBlock_(){this.block_.height=\nthis.info_.height;this.block_.width=this.info_.widthWithChildren;this.block_.childlessWidth=this.info_.width}drawOutline_(){this.drawTop_();for(let a=1;a0&&this.addAlignmentPadding_(c,a);Types$$module$build$src$core$renderers$measurables$types.isTopOrBottomRow(c)&&(c.widthWithConnectedBlocks=c.width)}}getDesiredRowWidth_(a){return this.width-this.startX}addAlignmentPadding_(a,\nb){const c=a.getFirstSpacer(),d=a.getLastSpacer();if(a.hasExternalInput||a.hasStatement)a.widthWithConnectedBlocks+=b;if(a.align===$.Align$$module$build$src$core$inputs$align.LEFT&&d)d.width+=b;else if(a.align===$.Align$$module$build$src$core$inputs$align.CENTRE&&c&&d)c.width+=b/2,d.width+=b/2;else if(a.align===$.Align$$module$build$src$core$inputs$align.RIGHT&&c)c.width+=b;else if(d)d.width+=b;else return;a.width+=b}alignStatementRow_(a){const b=a.getLastInput();if(b){var c=a.width-b.width,d=this.statementEdge;\nc=d-c;c>0&&this.addAlignmentPadding_(a,c);c=a.width;d=this.getDesiredRowWidth_(a);b.width+=d-c;b.height=Math.max(b.height,a.height);a.width+=d-c;a.widthWithConnectedBlocks=Math.max(a.width,this.statementEdge+a.connectedBlockWidths)}}addRowSpacing_(){const a=this.rows;this.rows=[];for(let b=0;b=0;d--)c[d].element===a&&c.splice(d,1);c.length||this.componentDB.delete(b)}}dispose(){this.subscribedWorkspaces.length=0;this.componentDB.clear()}},module$build$src$core$theme_manager={};module$build$src$core$theme_manager.ThemeManager=ThemeManager$$module$build$src$core$theme_manager;var CATEGORY_NAME$$module$build$src$core$variables_dynamic=\"VARIABLE_DYNAMIC\",onCreateVariableButtonClick_String$$module$build$src$core$variables_dynamic=stringButtonClickHandler$$module$build$src$core$variables_dynamic,onCreateVariableButtonClick_Number$$module$build$src$core$variables_dynamic=numberButtonClickHandler$$module$build$src$core$variables_dynamic,onCreateVariableButtonClick_Colour$$module$build$src$core$variables_dynamic=colourButtonClickHandler$$module$build$src$core$variables_dynamic,\nmodule$build$src$core$variables_dynamic={CATEGORY_NAME:CATEGORY_NAME$$module$build$src$core$variables_dynamic};module$build$src$core$variables_dynamic.flyoutCategory=flyoutCategory$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.flyoutCategoryBlocks=flyoutCategoryBlocks$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.internalFlyoutCategory=internalFlyoutCategory$$module$build$src$core$variables_dynamic;\nmodule$build$src$core$variables_dynamic.onCreateVariableButtonClick_Colour=colourButtonClickHandler$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.onCreateVariableButtonClick_Number=numberButtonClickHandler$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.onCreateVariableButtonClick_String=stringButtonClickHandler$$module$build$src$core$variables_dynamic;var ConnectionChecker$$module$build$src$core$connection_checker=class{canConnect(a,b,c,d){return this.canConnectWithReason(a,b,c,d)===Connection$$module$build$src$core$connection.CAN_CONNECT}canConnectWithReason(a,b,c,d){const e=this.doSafetyChecks(a,b);return e!==Connection$$module$build$src$core$connection.CAN_CONNECT?e:this.doTypeChecks(a,b)?c&&!this.doDragChecks(a,b,d||0)?Connection$$module$build$src$core$connection.REASON_DRAG_CHECKS_FAILED:Connection$$module$build$src$core$connection.CAN_CONNECT:\nConnection$$module$build$src$core$connection.REASON_CHECKS_FAILED}getErrorMessage(a,b,c){switch(a){case Connection$$module$build$src$core$connection.REASON_SELF_CONNECTION:return\"Attempted to connect a block to itself.\";case Connection$$module$build$src$core$connection.REASON_DIFFERENT_WORKSPACES:return\"Blocks not on same workspace.\";case Connection$$module$build$src$core$connection.REASON_WRONG_TYPE:return\"Attempt to connect incompatible types.\";case Connection$$module$build$src$core$connection.REASON_TARGET_NULL:return\"Target connection is null.\";\ncase Connection$$module$build$src$core$connection.REASON_CHECKS_FAILED:return\"Connection checks failed. \"+(b+\" expected \"+b.getCheck()+\", found \"+c.getCheck());case Connection$$module$build$src$core$connection.REASON_SHADOW_PARENT:return\"Connecting non-shadow to shadow block.\";case Connection$$module$build$src$core$connection.REASON_DRAG_CHECKS_FAILED:return\"Drag checks failed.\";case Connection$$module$build$src$core$connection.REASON_PREVIOUS_AND_OUTPUT:return\"Block would have an output and a previous connection.\";\ndefault:return\"Unknown connection failure: this should never happen!\"}}doSafetyChecks(a,b){if(!a||!b)return Connection$$module$build$src$core$connection.REASON_TARGET_NULL;let c,d,e;a.isSuperior()?(c=a.getSourceBlock(),d=b.getSourceBlock(),e=b):(d=a.getSourceBlock(),c=b.getSourceBlock(),e=a,a=b);return c===d?Connection$$module$build$src$core$connection.REASON_SELF_CONNECTION:e.type!==OPPOSITE_TYPE$$module$build$src$core$internal_constants[a.type]?Connection$$module$build$src$core$connection.REASON_WRONG_TYPE:\nc.workspace!==d.workspace?Connection$$module$build$src$core$connection.REASON_DIFFERENT_WORKSPACES:c.isShadow()&&!d.isShadow()?Connection$$module$build$src$core$connection.REASON_SHADOW_PARENT:e.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE&&d.previousConnection&&d.previousConnection.isConnected()||e.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT&&d.outputConnection&&d.outputConnection.isConnected()?Connection$$module$build$src$core$connection.REASON_PREVIOUS_AND_OUTPUT:\nConnection$$module$build$src$core$connection.CAN_CONNECT}doTypeChecks(a,b){a=a.getCheck();b=b.getCheck();if(!a||!b)return!0;for(let c=0;cc||b.getSourceBlock().isInsertionMarker())return!1;switch(b.type){case ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT:return this.canConnectToPrevious_(a,b);case ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE:if(b.isConnected()&&\n!b.targetBlock().isInsertionMarker()||a.isConnected())return!1;break;case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:if(b.isConnected()&&!b.targetBlock().isMovable()&&!b.targetBlock().isShadow())return!1;break;case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:if(b.isConnected()&&!a.getSourceBlock().nextConnection&&!b.targetBlock().isShadow()&&b.targetBlock().nextConnection||b.targetBlock()&&!b.targetBlock().isMovable()&&!b.targetBlock().isShadow())return!1;\nbreak;default:return!1}return draggingConnections$$module$build$src$core$common.includes(b)?!1:!0}canConnectToPrevious_(a,b){if(a.targetConnection||draggingConnections$$module$build$src$core$common.includes(b))return!1;if(!b.targetConnection)return!0;a=b.targetBlock();return a.isInsertionMarker()?!a.getPreviousBlock():!1}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_CHECKER,DEFAULT$$module$build$src$core$registry,ConnectionChecker$$module$build$src$core$connection_checker);\nvar module$build$src$core$connection_checker={};module$build$src$core$connection_checker.ConnectionChecker=ConnectionChecker$$module$build$src$core$connection_checker;var Workspace$$module$build$src$core$workspace=class{get isFlyout(){return this.internalIsFlyout}get isMutator(){return this.internalIsMutator}constructor(a){this.isClearing=this.internalIsMutator=this.internalIsFlyout=this.rendered=!1;this.MAX_UNDO=1024;this.connectionDBList=[];this.topBlocks=[];this.topComments=[];this.commentDB=new Map;this.listeners=[];this.undoStack_=[];this.redoStack_=[];this.blockDB=new Map;this.typedBlocksDB=new Map;this.procedureMap=new ObservableProcedureMap$$module$build$src$core$observable_procedure_map;\nthis.readOnly=!1;this.potentialVariableMap=null;this.id=genUid$$module$build$src$core$utils$idgenerator();registerWorkspace$$module$build$src$core$common(this);this.options=a||new Options$$module$build$src$core$options({});this.RTL=!!this.options.RTL;this.horizontalLayout=!!this.options.horizontalLayout;this.toolboxPosition=this.options.toolboxPosition;this.connectionChecker=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_CHECKER,this.options,\n!0))(this);this.variableMap=new (this.getVariableMapClass())(this);this.setIsReadOnly(this.options.readOnly)}dispose(){this.listeners.length=0;this.clear();unregisterWorkpace$$module$build$src$core$common(this)}sortObjects(a,b){const c=d=>({getBoundingRectangle:()=>{const e=d.getRelativeToSurfaceXY();return new Rect$$module$build$src$core$utils$rect(e.y,e.y,e.x,e.x)},moveBy:()=>{}});return this.sortByOrigin(c(a),c(b))}sortByOrigin(a,b){const c=Math.sin(toRadians$$module$build$src$core$utils$math(Workspace$$module$build$src$core$workspace.SCAN_ANGLE))*\n(this.RTL?-1:1);a=a.getBoundingRectangle().getOrigin();b=b.getBoundingRectangle().getOrigin();return a.y+c*a.x-(b.y+c*b.x)}addTopBlock(a){this.topBlocks.push(a)}removeTopBlock(a){if(!removeElem$$module$build$src$core$utils$array(this.topBlocks,a))throw Error(\"Block not present in workspace's list of top-most blocks.\");}getTopBlocks(a=!1){const b=[].concat(this.topBlocks);a&&b.length>1&&b.sort(this.sortObjects.bind(this));return b}addTypedBlock(a){this.typedBlocksDB.has(a.type)||this.typedBlocksDB.set(a.type,\n[]);this.typedBlocksDB.get(a.type).push(a)}removeTypedBlock(a){removeElem$$module$build$src$core$utils$array(this.typedBlocksDB.get(a.type),a);this.typedBlocksDB.get(a.type).length||this.typedBlocksDB.delete(a.type)}getBlocksByType(a,b=!1){if(!this.typedBlocksDB.has(a))return[];a=this.typedBlocksDB.get(a).slice(0);b&&a&&a.length>1&&a.sort(this.sortObjects.bind(this));return a.filter(c=>!c.isInsertionMarker())}addTopComment(a){this.topComments.push(a);this.commentDB.has(a.id)&&console.warn('Overriding an existing comment on this workspace, with id \"'+\na.id+'\"');this.commentDB.set(a.id,a)}removeTopComment(a){if(!removeElem$$module$build$src$core$utils$array(this.topComments,a))throw Error(\"Comment not present in workspace's list of top-most comments.\");this.commentDB.delete(a.id)}getTopComments(a=!1){const b=[].concat(this.topComments);a&&b.length>1&&b.sort(this.sortObjects.bind(this));return b}getAllBlocks(a=!1){if(a){var b=this.getTopBlocks(!0);a=[];for(let c=0;c!c.isInsertionMarker())}clear(){this.isClearing=!0;try{const a=$.getGroup$$module$build$src$core$events$utils();for(a||$.setGroup$$module$build$src$core$events$utils(!0);this.topBlocks.length;)this.topBlocks[0].dispose(!1);for(;this.topComments.length;)this.topComments[this.topComments.length-1].dispose();$.setGroup$$module$build$src$core$events$utils(a);this.isFlyout||this.variableMap.clear();this.potentialVariableMap&&this.potentialVariableMap.clear()}finally{this.isClearing=\n!1}}renameVariableById(a,b){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.renameVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().renameVariable\");(a=this.variableMap.getVariableById(a))&&this.variableMap.renameVariable(a,b)}createVariable(a,b,c){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.createVariable\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().createVariable\");return this.variableMap.createVariable(a,b!=null?b:void 0,c!=null?c:void 0)}getVariableUsesById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariableUsesById\",\n\"v12\",\"v13\",\"Blockly.Variables.getVariableUsesById\");return getVariableUsesById$$module$build$src$core$variables(this,a)}deleteVariableById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.deleteVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().deleteVariable\");const b=this.variableMap.getVariableById(a);b?$.deleteVariable$$module$build$src$core$variables(this,b):console.warn(`Can't delete non-existent variable: ${a}`)}getVariable(a,b){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariable\",\n\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariable\");return this.variableMap.getVariable(a,b)}getVariableById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariableById\");return this.variableMap.getVariableById(a)}getVariablesOfType(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariablesOfType\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariablesOfType\");return this.variableMap.getVariablesOfType(a!=\nnull?a:\"\")}getAllVariables(){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getAllVariables\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getAllVariables\");return this.variableMap.getAllVariables()}getAllVariableNames(){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getAllVariableNames\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getAllVariables\");return this.variableMap.getAllVariables().map(a=>a.getName())}getWidth(){return 0}newBlock(a,b){throw Error(\"The implementation of newBlock should be monkey-patched in by blockly.ts\");\n}newComment(a){throw Error(\"The implementation of newComment should be monkey-patched in by blockly.ts\");}remainingCapacity(){return isNaN(this.options.maxBlocks)?Infinity:this.options.maxBlocks-this.getAllBlocks(!1).length}remainingCapacityOfType(a){return this.options.maxInstances?(this.options.maxInstances[a]!==void 0?this.options.maxInstances[a]:Infinity)-this.getBlocksByType(a,!1).length:Infinity}isCapacityAvailable(a){if(!this.hasBlockLimits())return!0;let b=0;for(const c in a){if(a[c]>this.remainingCapacityOfType(c))return!1;\nb+=a[c]}return b>this.remainingCapacity()?!1:!0}hasBlockLimits(){return this.options.maxBlocks!==Infinity||!!this.options.maxInstances}getUndoStack(){return this.undoStack_}getRedoStack(){return this.redoStack_}undo(a){var b=a?this.redoStack_:this.undoStack_,c=a?this.undoStack_:this.redoStack_;const d=b.pop();if(d){for(var e=[d];b.length&&d.group&&d.group===b[b.length-1].group;){const f=b.pop();f&&e.push(f)}for(b=0;bthis.MAX_UNDO&&this.MAX_UNDO>=\n0;)this.undoStack_.shift();for(let b=0;b!!b.getStyleName()));this.refreshToolboxSelection();this.toolbox&&this.toolbox.refreshTheme();this.isVisible()&&this.setVisible(!0);a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.THEME_CHANGE))(this.getTheme().name,this.id);fire$$module$build$src$core$events$utils(a)}updateBlockStyles(a){for(let b=0,c;c=a[b];b++){const d=\nc.getStyleName();d&&c.setStyle(d)}}getInverseScreenCTM(){if(this.inverseScreenCTMDirty){const a=this.getParentSvg().getScreenCTM();a&&(this.inverseScreenCTM=a.inverse(),this.inverseScreenCTMDirty=!1)}return this.inverseScreenCTM}updateInverseScreenCTM(){this.inverseScreenCTMDirty=!0}isVisible(){return this.visible}getSvgXY(a){let b=0,c=0,d=1;if(this.getCanvas().contains(a)||this.getBubbleCanvas().contains(a))d=this.scale;do{const e=getRelativeXY$$module$build$src$core$utils$svg_math(a);if(a===this.getCanvas()||\na===this.getBubbleCanvas())d=1;b+=e.x*d;c+=e.y*d;a=a.parentNode}while(a&&a!==this.getParentSvg()&&a!==this.getInjectionDiv());return new Coordinate$$module$build$src$core$utils$coordinate(b,c)}getCachedParentSvgSize(){const a=this.cachedParentSvgSize;return new Size$$module$build$src$core$utils$size(a.width,a.height)}getOriginOffsetInPixels(){return getInjectionDivXY$$module$build$src$core$utils$svg_math(this.getCanvas())}getInjectionDiv(){if(!this.injectionDiv){let a=this.svgGroup_;for(;a;){if((\" \"+\n(a.getAttribute(\"class\")||\"\")+\" \").includes(\" injectionDiv \")){this.injectionDiv=a;break}a=a.parentNode}}return this.injectionDiv}getSvgGroup(){return this.svgGroup_}getBlockCanvas(){return this.getCanvas()}setResizeHandlerWrapper(a){this.resizeHandlerWrapper=a}createDom(a,b){this.injectionDiv||(this.injectionDiv=b!=null?b:null);this.svgGroup_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyWorkspace\",id:this.id});b&&setState$$module$build$src$core$utils$aria(this.svgGroup_,\nState$$module$build$src$core$utils$aria.LABEL,$.Msg$$module$build$src$core$msg.WORKSPACE_ARIA_LABEL);a&&(this.svgBackground_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{height:\"100%\",width:\"100%\",\"class\":a},this.svgGroup_),a===\"blocklyMainBackground\"&&this.grid?this.svgBackground_.style.fill=\"var(--blocklyGridPattern)\":this.themeManager_.subscribe(this.svgBackground_,\"workspaceBackgroundColour\",\"fill\"));this.layerManager=new LayerManager$$module$build$src$core$layer_manager(this);\nthis.svgBlockCanvas_=this.layerManager.getBlockLayer();this.svgBubbleCanvas_=this.layerManager.getBubbleLayer();this.isFlyout||(conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"pointerdown\",this,this.onMouseDown,!1),this.dummyWheelListener=()=>{},document.body.addEventListener(\"wheel\",this.dummyWheelListener),conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"wheel\",this,this.onMouseWheel));this.options.hasCategories&&(this.toolbox=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX,\nthis.options,!0))(this));this.grid&&this.grid.update(this.scale);this.recordDragTargets();(a=getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CURSOR,this.options))&&this.markerManager.setCursor(new a(this));a=this.options.parentWorkspace===null;this.renderer.createDom(this.svgGroup_,this.getTheme(),a?this.getInjectionDiv():void 0);$.getFocusManager$$module$build$src$core$focus_manager().registerTree(this,!!this.injectionDiv||this.isFlyout);return this.svgGroup_}dispose(){this.rendered=\n!1;this.currentGesture_&&this.currentGesture_.cancel();this.svgGroup_&&removeNode$$module$build$src$core$utils$dom(this.svgGroup_);this.toolbox&&(this.toolbox.dispose(),this.toolbox=null);this.flyout&&(this.flyout.dispose(),this.flyout=null);this.trashcan&&(this.trashcan.dispose(),this.trashcan=null);this.scrollbar&&(this.scrollbar.dispose(),this.scrollbar=null);this.zoomControls_&&this.zoomControls_.dispose();this.audioManager&&this.audioManager.dispose();this.grid&&(this.grid=null);this.renderer.dispose();\nthis.markerManager.dispose();super.dispose();this.themeManager_&&(this.themeManager_.unsubscribeWorkspace(this),this.themeManager_.unsubscribe(this.svgBackground_),this.options.parentWorkspace||this.themeManager_.dispose());this.connectionDBList.length=0;this.toolboxCategoryCallbacks.clear();this.flyoutButtonCallbacks.clear();if(!this.options.parentWorkspace){const a=this.getParentSvg();a&&a.parentNode&&removeNode$$module$build$src$core$utils$dom(a.parentNode)}this.resizeHandlerWrapper&&(unbind$$module$build$src$core$browser_events(this.resizeHandlerWrapper),\nthis.resizeHandlerWrapper=null);this.dummyWheelListener&&(document.body.removeEventListener(\"wheel\",this.dummyWheelListener),this.dummyWheelListener=null);$.getFocusManager$$module$build$src$core$focus_manager().isRegistered(this)&&$.getFocusManager$$module$build$src$core$focus_manager().unregisterTree(this)}addTrashcan(){this.trashcan=WorkspaceSvg$$module$build$src$core$workspace_svg.newTrashcan(this);const a=this.trashcan.createDom();this.svgGroup_.insertBefore(a,this.getCanvas())}static newTrashcan(a){throw Error(\"The implementation of newTrashcan should be monkey-patched in by blockly.ts\");\n}addZoomControls(){this.zoomControls_=new ZoomControls$$module$build$src$core$zoom_controls(this);const a=this.zoomControls_.createDom();this.svgGroup_.appendChild(a)}copyOptionsForFlyout(){return new Options$$module$build$src$core$options({parentWorkspace:this,rtl:this.RTL,oneBasedIndex:this.options.oneBasedIndex,horizontalLayout:this.horizontalLayout,renderer:this.options.renderer,rendererOverrides:this.options.rendererOverrides,plugins:this.options.plugins,modalInputs:this.options.modalInputs,\nmove:{scrollbars:!0}})}addFlyout(a){const b=this.copyOptionsForFlyout();b.toolboxPosition=this.options.toolboxPosition;this.flyout=this.horizontalLayout?new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,this.options,!0))(b):new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,this.options,!0))(b);this.flyout.autoClose=!1;this.flyout.getWorkspace().setVisible(!0);\nreturn this.flyout.createDom(a)}getFlyout(a){return this.flyout||a?this.flyout:this.toolbox?this.toolbox.getFlyout():null}getToolbox(){return this.toolbox}updateScreenCalculations(){this.updateInverseScreenCTM();this.recordDragTargets()}resizeContents(){this.resizesEnabled&&this.rendered&&(this.scrollbar&&this.scrollbar.resize(),this.updateInverseScreenCTM())}resize(){this.toolbox?this.toolbox.position():this.flyout&&this.flyout.position();const a=this.componentManager.getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE,\n!0),b=this.getMetricsManager().getUiMetrics(),c=[];for(let d=0,e;e=a[d];d++){e.position(b,c);const f=e.getBoundingRectangle();f&&c.push(f)}this.scrollbar&&this.scrollbar.resize();this.updateScreenCalculations()}updateScreenCalculationsIfScrolled(){const a=getDocumentScroll$$module$build$src$core$utils$svg_math();Coordinate$$module$build$src$core$utils$coordinate.equals(this.lastRecordedPageScroll,a)||(this.lastRecordedPageScroll=a,this.updateScreenCalculations())}getLayerManager(){return this.layerManager}getCanvas(){return this.layerManager.getBlockLayer()}setCachedParentSvgSize(a,\nb){const c=this.getParentSvg();a!=null&&(this.cachedParentSvgSize.width=a,c.setAttribute(\"data-cached-width\",`${a}`));b!=null&&(this.cachedParentSvgSize.height=b,c.setAttribute(\"data-cached-height\",`${b}`))}getBubbleCanvas(){return this.layerManager.getBubbleLayer()}getParentSvg(){if(!this.cachedParentSvg){let a=this.svgGroup_;for(;a;){if(a.tagName===\"svg\"){this.cachedParentSvg=a;break}a=a.parentNode}}return this.cachedParentSvg}maybeFireViewportChangeEvent(){if(isEnabled$$module$build$src$core$events$utils()){var a=\nthis.scale,b=-this.scrollY,c=-this.scrollX;if(!(a===this.oldScale&&Math.abs(b-this.oldTop)<1&&Math.abs(c-this.oldLeft)<1)){var d=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE))(b,c,a,this.id,this.oldScale);this.oldScale=a;this.oldTop=b;this.oldLeft=c;fire$$module$build$src$core$events$utils(d)}}}translate(a,b){let c;(c=this.layerManager)==null||c.translateLayers(new Coordinate$$module$build$src$core$utils$coordinate(a,b),this.scale);let d;\n(d=this.grid)==null||d.moveTo(a,b);this.maybeFireViewportChangeEvent()}getWidth(){const a=this.getMetrics();return a?a.viewWidth/this.scale:0}setVisible(a){this.visible=a;this.svgGroup_&&(this.scrollbar&&this.scrollbar.setContainerVisible(a),this.getFlyout()&&this.getFlyout().setContainerVisible(a),this.getParentSvg().style.display=a?\"block\":\"none\",this.toolbox&&this.toolbox.setVisible(a),a||this.hideChaff(!0))}render(){const a=this.getAllBlocks(!1);for(let b=a.length-1;b>=0;b--)a[b].queueRender();\nthis.getTopBlocks().flatMap(b=>b.getDescendants(!1)).filter(b=>b.isInsertionMarker()).forEach(b=>b.queueRender())}highlightBlock(a,b){if(b===void 0){for(let c=0,d;d=this.highlightedBlocks[c];c++)d.setHighlighted(!1);this.highlightedBlocks.length=0}if(a=a?this.getBlockById(a):null)(b=b===void 0||b)?this.highlightedBlocks.includes(a)||this.highlightedBlocks.push(a):removeElem$$module$build$src$core$utils$array(this.highlightedBlocks,a),a.setHighlighted(b)}variableChangeCallback(a){switch(a.type){case EventType$$module$build$src$core$events$type.VAR_CREATE:case EventType$$module$build$src$core$events$type.VAR_DELETE:case EventType$$module$build$src$core$events$type.VAR_RENAME:case EventType$$module$build$src$core$events$type.VAR_TYPE_CHANGE:this.refreshToolboxSelection()}}refreshToolboxSelection(){const a=\nthis.isFlyout?this.targetWorkspace:this;a&&!a.currentGesture_&&a.toolbox&&a.toolbox.getFlyout()&&a.toolbox.refreshSelection()}recordDragTargets(){const a=this.componentManager.getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET,!0);this.dragTargetAreas=[];for(let b=0,c;c=a[b];b++){const d=c.getClientRect();d&&this.dragTargetAreas.push({component:c,clientRect:d})}}newBlock(a,b){throw Error(\"The implementation of newBlock should be monkey-patched in by blockly.ts\");\n}newComment(a){throw Error(\"The implementation of newComment should be monkey-patched in by blockly.ts\");}getDragTarget(a){for(let b=0,c;c=this.dragTargetAreas[b];b++)if(c.clientRect.contains(a.clientX,a.clientY))return c.component;return null}onMouseDown(a){const b=this.getGesture(a);b&&b.handleWsStart(a,this)}startDrag(a,b){start$$module$build$src$core$utils$drag(this,a,b)}moveDrag(a){return move$$module$build$src$core$utils$drag(this,a)}setKeyboardMoveInProgress(a){this.keyboardMoveInProgress=\na}isDragging(){return this.keyboardMoveInProgress||this.currentGesture_!==null&&this.currentGesture_.isDragging()}isDraggable(){return this.options.moveOptions&&this.options.moveOptions.drag}isMovable(){return this.options.moveOptions&&!!this.options.moveOptions.scrollbars||this.options.moveOptions&&this.options.moveOptions.wheel||this.options.moveOptions&&this.options.moveOptions.drag||this.options.zoomOptions&&this.options.zoomOptions.wheel||this.options.zoomOptions&&this.options.zoomOptions.pinch}isMovableHorizontally(){const a=\n!!this.scrollbar;return this.isMovable()&&(!a||a&&this.scrollbar.canScrollHorizontally())}isMovableVertically(){const a=!!this.scrollbar;return this.isMovable()&&(!a||a&&this.scrollbar.canScrollVertically())}onMouseWheel(a){if(Gesture$$module$build$src$core$gesture.inProgress())a.preventDefault(),a.stopPropagation();else{var b=this.options.zoomOptions&&this.options.zoomOptions.wheel,c=this.options.moveOptions&&this.options.moveOptions.wheel;if(b||c){var d=getScrollDeltaPixels$$module$build$src$core$browser_events(a);\nif(MAC$$module$build$src$core$utils$useragent)var e=a.metaKey;b&&(a.ctrlKey||e||!c)?(d=-d.y/50,b=mouseToSvg$$module$build$src$core$browser_events(a,this.getParentSvg(),this.getInverseScreenCTM()),this.zoom(b.x,b.y,d)):(b=this.scrollX-d.x,c=this.scrollY-d.y,a.shiftKey&&!d.x&&(b=this.scrollX-d.y,c=this.scrollY),this.scroll(b,c));a.preventDefault()}}}getBlocksBoundingBox(){const a=this.getTopBoundedElements();if(!a.length)return new Rect$$module$build$src$core$utils$rect(0,0,0,0);const b=a[0].getBoundingRectangle();\nfor(let d=1;db.bottom&&(b.bottom=c.bottom),c.leftb.right&&(b.right=c.right))}return b}cleanUp(){this.setResizesEnabled(!1);const a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);var b=this.getTopBlocks(!0),c=b.filter(g=>g.isMovable());const d=b.filter(g=>!g.isMovable()).map(g=>\ng.getBoundingRectangle());b=function(g){for(const h of d)if(g.intersects(h))return h;return null};var e=0;const f=this.renderer.getConstants().MIN_BLOCK_HEIGHT;for(const g of c){c=g.getBoundingRectangle();g.moveBy(-c.left,e-c.top,[\"cleanup\"]);g.snapToGrid();c=g.getBoundingRectangle();for(e=b(c);e!=null;)e=e.top+e.getHeight()+f,g.moveBy(0,e-c.top,[\"cleanup\"]),g.snapToGrid(),c=g.getBoundingRectangle(),e=b(c);e=g.getRelativeToSurfaceXY().y+g.getHeightWidth().height+f}$.setGroup$$module$build$src$core$events$utils(a);\nthis.setResizesEnabled(!0)}showContextMenu(a){if(!this.isReadOnly()&&!this.isFlyout){var b=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({workspace:this,focusedNode:this},a);this.configureContextMenu&&this.configureContextMenu(b,a);var c=a instanceof PointerEvent?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this,new Coordinate$$module$build$src$core$utils$coordinate(5,\n5));show$$module$build$src$core$contextmenu(a,b,this.RTL,this,c)}}updateToolbox(a){if(a=convertToolboxDefToJson$$module$build$src$core$utils$toolbox(a)){if(!this.options.languageTree)throw Error(\"Existing toolbox is null. Can't create new toolbox.\");if(hasCategories$$module$build$src$core$utils$toolbox(a)){if(!this.toolbox)throw Error(\"Existing toolbox has no categories. Can't change mode.\");this.options.languageTree=a;this.toolbox.render(a)}else{if(!this.flyout)throw Error(\"Existing toolbox has categories. Can't change mode.\");\nthis.options.languageTree=a;this.flyout.show(a)}}else if(this.options.languageTree)throw Error(\"Can't nullify an existing toolbox.\");}markFocused(){this.options.parentWorkspace?this.options.parentWorkspace.markFocused():(setMainWorkspace$$module$build$src$core$common(this),this.getParentSvg().focus({preventScroll:!0}))}zoom(a,b,c){c=Math.pow(this.options.zoomOptions.scaleSpeed,c);const d=this.scale*c;if(this.scale!==d){d>this.options.zoomOptions.maxScale?c=this.options.zoomOptions.maxScale/this.scale:\ndthis.options.zoomOptions.maxScale?a=this.options.zoomOptions.maxScale:this.options.zoomOptions.minScale&&a{if(c.isFlyout){let d;const e=(d=c.targetWorkspace)==null?void 0:d.getFlyout();if(e instanceof Flyout$$module$build$src$core$flyout_base)return e.getFlyoutScale()}return c.getScale()},b=(c,d)=>c.options.parentWorkspace&&c.options.parentWorkspace.getSvgGroup().contains(c.getSvgGroup())?b(c.options.parentWorkspace,d*a(c)):d*a(c);return b(this,1)}scroll(a,b){this.hideChaff(!0);\nconst c=this.getMetrics();a=Math.min(a,-c.scrollLeft);b=Math.min(b,-c.scrollTop);const d=c.scrollTop+Math.max(0,c.scrollHeight-c.viewHeight);a=Math.max(a,-(c.scrollLeft+Math.max(0,c.scrollWidth-c.viewWidth)));b=Math.max(b,-d);this.scrollX=a;this.scrollY=b;this.scrollbar&&this.scrollbar.set(-(a+c.scrollLeft),-(b+c.scrollTop),!1);a+=c.absoluteLeft;b+=c.absoluteTop;this.translate(a,b)}getBlockById(a){return super.getBlockById(a)}getAllBlocks(a=!1){return super.getAllBlocks(a)}getTopBlocks(a=!1){return super.getTopBlocks(a)}addTopBlock(a){this.addTopBoundedElement(a);\nsuper.addTopBlock(a)}removeTopBlock(a){this.removeTopBoundedElement(a);super.removeTopBlock(a)}addTopComment(a){this.addTopBoundedElement(a);super.addTopComment(a)}removeTopComment(a){this.removeTopBoundedElement(a);super.removeTopComment(a)}getTopComments(a=!1){return super.getTopComments(a)}getCommentById(a){return super.getCommentById(a)}getRootWorkspace(){return super.getRootWorkspace()}addTopBoundedElement(a){this.topBoundedElements.push(a)}removeTopBoundedElement(a){removeElem$$module$build$src$core$utils$array(this.topBoundedElements,\na)}getTopBoundedElements(a=!1){const b=[].concat(this.topBoundedElements);a&&b.sort(this.sortByOrigin.bind(this));return b}setResizesEnabled(a){const b=!this.resizesEnabled&&a;this.resizesEnabled=a;b&&this.resizeContents()}clear(){this.setResizesEnabled(!1);super.clear();this.topBoundedElements=[];this.setResizesEnabled(!0)}registerButtonCallback(a,b){if(typeof b!==\"function\")throw TypeError(\"Button callbacks must be functions.\");this.flyoutButtonCallbacks.set(a,b)}getButtonCallback(a){let b;return(b=\nthis.flyoutButtonCallbacks.get(a))!=null?b:null}removeButtonCallback(a){this.flyoutButtonCallbacks.delete(a)}registerToolboxCategoryCallback(a,b){if(typeof b!==\"function\")throw TypeError(\"Toolbox category callbacks must be functions.\");this.toolboxCategoryCallbacks.set(a,b)}getToolboxCategoryCallback(a){return this.toolboxCategoryCallbacks.get(a)||null}removeToolboxCategoryCallback(a){this.toolboxCategoryCallbacks.delete(a)}getGesture(a){if(this.keyboardMoveInProgress)return a.preventDefault(),a.stopPropagation(),\nnull;const b=a.type===\"pointerdown\";let c;b&&((c=this.currentGesture_)==null?0:c.hasStarted())&&(console.warn(\"Tried to start the same gesture twice.\"),this.currentGesture_.cancel());!this.currentGesture_&&b&&(this.currentGesture_=new Gesture$$module$build$src$core$gesture(a,this));return this.currentGesture_}clearGesture(){this.currentGesture_=null}cancelCurrentGesture(){this.currentGesture_&&this.currentGesture_.cancel()}getAudioManager(){return this.audioManager}getGrid(){return this.grid}hideChaff(a=\n!1){hide$$module$build$src$core$tooltip();hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv(this);hideWithoutAnimation$$module$build$src$core$dropdowndiv();this.hideComponents(a)}hideComponents(a=!1){this.getComponentManager().getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,!0).forEach(b=>b.autoHide(a))}static setTopLevelWorkspaceMetrics(a){const b=this.getMetrics();typeof a.x===\"number\"&&(this.scrollX=-(b.scrollLeft+(b.scrollWidth-b.viewWidth)*\na.x));typeof a.y===\"number\"&&(this.scrollY=-(b.scrollTop+(b.scrollHeight-b.viewHeight)*a.y));this.translate(this.scrollX+b.absoluteLeft,this.scrollY+b.absoluteTop)}addClass(a){this.injectionDiv&&addClass$$module$build$src$core$utils$dom(this.injectionDiv,a)}removeClass(a){this.injectionDiv&&removeClass$$module$build$src$core$utils$dom(this.injectionDiv,a)}setIsReadOnly(a){super.setIsReadOnly(a);a?this.addClass(\"blocklyReadOnly\"):this.removeClass(\"blocklyReadOnly\")}scrollBoundsIntoView(a,b=10){if(!Gesture$$module$build$src$core$gesture.inProgress()){var c=\nthis.getScale(),d=this.getMetricsManager().getViewMetrics(!0);d=new Rect$$module$build$src$core$utils$rect(d.top,d.top+d.height,d.left,d.left+d.width);if(!(a.left>=d.left&&a.top>=d.top&&a.right<=d.right&&a.bottom<=d.bottom)){a=a.clone();a.top-=b;a.bottom+=b;a.left-=b;a.right+=b;var e=b=0;a.leftd.right&&(b=this.RTL?d.right-a.right:Math.max(d.right-a.right,d.left-a.left));a.topd.bottom&&(e=\nMath.max(d.bottom-a.bottom,d.top-a.top));this.scroll(this.scrollX+b*c,this.scrollY+e*c)}}}getFocusableElement(){return this.svgGroup_}getFocusableTree(){return this.isMutator&&this.options.parentWorkspace||this}onNodeFocus(){}onNodeBlur(){}canBeFocused(){return!0}getRootFocusableNode(){return this}getRestoredFocusableNode(a){if(a)return null;let b;a=(b=this.targetWorkspace)==null?void 0:b.getFlyout();if(this.isFlyout&&a){let d,e;return(e=(d=a.getContents().find(f=>{f=f.getElement();return isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(f)&&\nf.canBeFocused()}))==null?void 0:d.getElement())!=null?e:null}let c;return(c=this.getTopBlocks(!0)[0])!=null?c:null}getNestedTrees(){const a=this.getAllBlocks().map(c=>c.getIcons()).flat().filter(c=>c instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&c.bubbleIsVisible()).map(c=>{let d;return(d=c.getBubble())==null?void 0:d.getWorkspace()}).filter(c=>!!c),b=this.getFlyout(!0);b&&a.push(b.getWorkspace());return a}searchForWorkspaceComment(a){for(const b of this.getTopComments())if(b instanceof\nRenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment&&b.canBeFocused()&&b.getFocusableElement().id===a)return b}lookUpFocusableNode(a){var b;const c=(b=this.targetWorkspace)==null?void 0:b.getFlyout();if(this.isFlyout&&c)for(var d of c.getContents())if(b=d.getElement(),isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(b)&&b.canBeFocused()&&b.getFocusableElement().id===a)return b;d=a.indexOf(\"_field_\");b=a.indexOf(\"_connection_\");if(d!==-1){var e=a.substring(0,\nd);if(e=this.getBlockById(e))for(var f of e.getFields())if(f.canBeFocused()&&f.getFocusableElement().id===a)return f;return null}if(b!==-1){e=a.substring(0,b);if(e=this.getBlockById(e))for(const h of e.getConnections_(!0))if(h.id===a)return h;return null}f=Math.max(a.indexOf(COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor),a.indexOf(COMMENT_COLLAPSE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$collapse_comment_bar_button),a.indexOf(COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button));\nif(f!==-1&&(f=a.substring(0,f),f=this.searchForWorkspaceComment(f))){if(a.indexOf(COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor)>-1)return f.getEditorFocusableNode();var g;return(g=f.view.getCommentBarButtons().find(h=>h.getFocusableElement().id.includes(a)))!=null?g:null}if((g=this.getAllBlocks(!1).find(h=>h.getFocusableElement().id===a))||(g=this.searchForWorkspaceComment(a)))return g;g=this.getAllBlocks().map(h=>h.getIcons()).flat();for(e of g){if(e.canBeFocused()&&\ne.getFocusableElement().id===a)return e;if(hasBubble$$module$build$src$core$interfaces$i_has_bubble(e)){if((g=e.getBubble())&&g.canBeFocused()&&g.getFocusableElement().id===a)return g;if(g instanceof TextInputBubble$$module$build$src$core$bubbles$textinput_bubble&&g.getEditor().getFocusableElement().id===a)return g.getEditor()}}return null}onTreeFocus(a,b){}onTreeBlur(a){if(this.isFlyout&&this.targetWorkspace&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()){var b=\nthis.targetWorkspace.getToolbox();b&&a===b||isAutoHideable$$module$build$src$core$interfaces$i_autohideable(b)&&b.autoHide(!1)}}getNavigator(){return this.navigator}setNavigator(a){this.navigator=a}},module$build$src$core$workspace_svg={};module$build$src$core$workspace_svg.WorkspaceSvg=WorkspaceSvg$$module$build$src$core$workspace_svg;module$build$src$core$workspace_svg.resizeSvgContents=resizeSvgContents$$module$build$src$core$workspace_svg;var VarBase$$module$build$src$core$events$events_var_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.isBlank=typeof a===\"undefined\";a&&(this.varId=a.getId(),this.workspaceId=a.getWorkspace().id)}toJson(){const a=super.toJson();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");a.varId=this.varId;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarBase$$module$build$src$core$events$events_var_base);\nb.varId=a.varId;return b}},module$build$src$core$events$events_var_base={};module$build$src$core$events$events_var_base.VarBase=VarBase$$module$build$src$core$events$events_var_base;var VarCreate$$module$build$src$core$events$events_var_create=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_CREATE;a&&(this.varType=a.getType(),this.varName=a.getName())}toJson(){const a=super.toJson();if(this.varType===void 0)throw Error(\"The var type is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");\na.varType=this.varType;a.varName=this.varName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarCreate$$module$build$src$core$events$events_var_create);b.varType=a.varType;b.varName=a.varName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");b=b.getVariableMap();\na?b.createVariable(this.varName,this.varType,this.varId):(a=b.getVariableById(this.varId))&&b.deleteVariable(a)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_CREATE,VarCreate$$module$build$src$core$events$events_var_create);var module$build$src$core$events$events_var_create={};module$build$src$core$events$events_var_create.VarCreate=VarCreate$$module$build$src$core$events$events_var_create;var VariableModel$$module$build$src$core$variable_model=class{constructor(a,b,c,d){this.workspace=a;this.name=b;this.type=c||\"\";this.id=d||genUid$$module$build$src$core$utils$idgenerator()}getId(){return this.id}getName(){return this.name}setName(a){this.name=a;return this}getType(){return this.type}setType(a){this.type=a;return this}getWorkspace(){return this.workspace}save(){const a={name:this.getName(),id:this.getId()},b=this.getType();b&&(a.type=b);return a}static load(a,b){a=new this(b,a.name,\na.type,a.id);b.getVariableMap().addVariable(a);fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_CREATE))(a))}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MODEL,DEFAULT$$module$build$src$core$registry,VariableModel$$module$build$src$core$variable_model);var module$build$src$core$variable_model={};module$build$src$core$variable_model.VariableModel=VariableModel$$module$build$src$core$variable_model;var VarDelete$$module$build$src$core$events$events_var_delete=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_DELETE;a&&(this.varType=a.getType(),this.varName=a.getName())}toJson(){const a=super.toJson();if(this.varType===void 0)throw Error(\"The var type is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");\na.varType=this.varType;a.varName=this.varName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarDelete$$module$build$src$core$events$events_var_delete);b.varType=a.varType;b.varName=a.varName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");b=b.getVariableMap();\na?(a=b.getVariableById(this.varId))&&b.deleteVariable(a):b.createVariable(this.varName,this.varType,this.varId)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_DELETE,VarDelete$$module$build$src$core$events$events_var_delete);var module$build$src$core$events$events_var_delete={};module$build$src$core$events$events_var_delete.VarDelete=VarDelete$$module$build$src$core$events$events_var_delete;var VarRename$$module$build$src$core$events$events_var_rename=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a,b){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_RENAME;a&&(this.oldName=a.getName(),this.newName=typeof b===\"undefined\"?\"\":b)}toJson(){const a=super.toJson();if(!this.oldName)throw Error(\"The old var name is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.newName)throw Error(\"The new var name is undefined. Either pass a value to the constructor, or call fromJson\");\na.oldName=this.oldName;a.newName=this.newName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarRename$$module$build$src$core$events$events_var_rename);b.oldName=a.oldName;b.newName=a.newName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.oldName)throw Error(\"The old var name is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.newName)throw Error(\"The new var name is undefined. Either pass a value to the constructor, or call fromJson\");\nb=b.getVariableMap();const c=b.getVariableById(this.varId);a?c&&b.renameVariable(c,this.newName):c&&b.renameVariable(c,this.oldName)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_RENAME,VarRename$$module$build$src$core$events$events_var_rename);var module$build$src$core$events$events_var_rename={};module$build$src$core$events$events_var_rename.VarRename=VarRename$$module$build$src$core$events$events_var_rename;var VariableMap$$module$build$src$core$variable_map=class{constructor(a,b=!1){this.workspace=a;this.potentialMap=b;this.variableMap=new Map}clear(){for(const a of this.variableMap.values())for(const b of a.values())this.deleteVariable(b);if(this.variableMap.size!==0)throw Error(\"Non-empty variable map\");}renameVariable(a,b){if(a.getName()===b)return a;var c=a.getType();c=this.getVariable(b,c);const d=this.workspace.getAllBlocks(!1);let e=\"\";this.potentialMap||(e=$.getGroup$$module$build$src$core$events$utils())||\n$.setGroup$$module$build$src$core$events$utils(!0);try{c&&c.getId()!==a.getId()?this.renameVariableWithConflict(a,b,c,d):this.renameVariableAndUses(a,b,d)}finally{this.potentialMap||$.setGroup$$module$build$src$core$events$utils(e)}return a}changeVariableType(a,b){const c=a.getType();if(c===b)return a;var d=this.variableMap.get(c);d==null||d.delete(a.getId());(d==null?void 0:d.size)===0&&this.variableMap.delete(c);a.setType(b);let e;d=(e=this.variableMap.get(b))!=null?e:new Map;d.set(a.getId(),a);\nthis.variableMap.has(b)||this.variableMap.set(b,d);fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_TYPE_CHANGE))(a,c,b));return a}renameVariableById(a,b){warn$$module$build$src$core$utils$deprecation(\"VariableMap.renameVariableById\",\"v12\",\"v13\",\"VariableMap.renameVariable\");const c=this.getVariableById(a);if(!c)throw Error(\"Tried to rename a variable that didn't exist. ID: \"+a);this.renameVariable(c,b)}renameVariableAndUses(a,\nb,c){this.potentialMap||fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_RENAME))(a,b));a.setName(b);for(b=0;b$.Names$$module$build$src$core$names.equals(d.getName(),\na)))!=null?c:null}getVariableById(a){for(const b of this.variableMap.values())if(b.has(a)){let c;return(c=b.get(a))!=null?c:null}return null}getVariablesOfType(a){return(a=this.variableMap.get(a||\"\"))?[...a.values()]:[]}getTypes(){return[...this.variableMap.keys()]}getAllVariables(){let a=[];for(const b of this.variableMap.values())a=a.concat(...b.values());return a}getAllVariableNames(){warn$$module$build$src$core$utils$deprecation(\"VariableMap.getAllVariableNames\",\"v12\",\"v13\",\"Blockly.Variables.getAllVariables\");\nconst a=[];for(const b of this.variableMap.values())for(const c of b.values())a.push(c.getName());return a}getVariableUsesById(a){warn$$module$build$src$core$utils$deprecation(\"VariableMap.getVariableUsesById\",\"v12\",\"v13\",\"Blockly.Variables.getVariableUsesById\");return getVariableUsesById$$module$build$src$core$variables(this.workspace,a)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MAP,DEFAULT$$module$build$src$core$registry,VariableMap$$module$build$src$core$variable_map);\nvar module$build$src$core$variable_map={};module$build$src$core$variable_map.VariableMap=VariableMap$$module$build$src$core$variable_map;var TrashcanOpen$$module$build$src$core$events$events_trashcan_open=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b){super(b);this.type=EventType$$module$build$src$core$events$type.TRASHCAN_OPEN;this.isOpen=a}toJson(){const a=super.toJson();if(this.isOpen===void 0)throw Error(\"Whether this is already open or not is undefined. Either pass a value to the constructor, or call fromJson\");a.isOpen=this.isOpen;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?\nc:new TrashcanOpen$$module$build$src$core$events$events_trashcan_open);b.isOpen=a.isOpen;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.TRASHCAN_OPEN,TrashcanOpen$$module$build$src$core$events$events_trashcan_open);var module$build$src$core$events$events_trashcan_open={};module$build$src$core$events$events_trashcan_open.TrashcanOpen=TrashcanOpen$$module$build$src$core$events$events_trashcan_open;var Trashcan$$module$build$src$core$trashcan=class extends DeleteArea$$module$build$src$core$delete_area{constructor(a){super();this.workspace=a;this.id=\"trashcan\";this.contents=[];this.flyout=null;this.isLidOpen=!1;this.minOpenness=0;this.lidTask=this.svgLid=this.svgGroup=null;this.top=this.left=this.lidOpen=0;this.initialized=!1;this.workspace.options.maxTrashcanContents<=0||(a=this.workspace.copyOptionsForFlyout(),this.workspace.horizontalLayout?(a.toolboxPosition=this.workspace.toolboxPosition===\nPosition$$module$build$src$core$utils$toolbox.TOP?Position$$module$build$src$core$utils$toolbox.BOTTOM:Position$$module$build$src$core$utils$toolbox.TOP,this.flyout=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,this.workspace.options,!0))(a)):(a.toolboxPosition=this.workspace.toolboxPosition===Position$$module$build$src$core$utils$toolbox.RIGHT?Position$$module$build$src$core$utils$toolbox.LEFT:Position$$module$build$src$core$utils$toolbox.RIGHT,\nthis.flyout=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,this.workspace.options,!0))(a)),this.workspace.addChangeListener(this.onDelete.bind(this)))}createDom(){this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyTrash\"});let a;const b=String(Math.random()).substring(2);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,\n{id:\"blocklyTrashBodyClipPath\"+b},this.svgGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:WIDTH$$module$build$src$core$trashcan,height:BODY_HEIGHT$$module$build$src$core$trashcan,y:LID_HEIGHT$$module$build$src$core$trashcan},a);const c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,x:-SPRITE_LEFT$$module$build$src$core$trashcan,height:SPRITE$$module$build$src$core$sprites.height,\ny:-SPRITE_TOP$$module$build$src$core$trashcan,\"clip-path\":\"url(#blocklyTrashBodyClipPath\"+b+\")\"},this.svgGroup);c.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyTrashLidClipPath\"+b},this.svgGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:WIDTH$$module$build$src$core$trashcan,\nheight:LID_HEIGHT$$module$build$src$core$trashcan},a);this.svgLid=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,x:-SPRITE_LEFT$$module$build$src$core$trashcan,height:SPRITE$$module$build$src$core$sprites.height,y:-SPRITE_TOP$$module$build$src$core$trashcan,\"clip-path\":\"url(#blocklyTrashLidClipPath\"+b+\")\"},this.svgGroup);this.svgLid.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);bind$$module$build$src$core$browser_events(this.svgGroup,\"pointerdown\",this,this.blockMouseDownWhenOpenable);bind$$module$build$src$core$browser_events(this.svgGroup,\"pointerup\",this,this.click);bind$$module$build$src$core$browser_events(c,\"pointerover\",this,this.mouseOver);bind$$module$build$src$core$browser_events(c,\"pointerout\",this,this.mouseOut);this.animateLid();return this.svgGroup}init(){if(this.workspace.options.maxTrashcanContents>\n0){const a=this.flyout.createDom(Svg$$module$build$src$core$utils$svg.SVG);addClass$$module$build$src$core$utils$dom(a,\"blocklyTrashcanFlyout\");insertAfter$$module$build$src$core$utils$dom(a,this.workspace.getParentSvg());this.flyout.init(this.workspace)}this.workspace.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.TRASHCAN_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,\nComponentManager$$module$build$src$core$component_manager.Capability.DELETE_AREA,ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET,ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE]});this.initialized=!0;this.setLidOpen(!1)}dispose(){this.workspace.getComponentManager().removeComponent(\"trashcan\");this.svgGroup&&removeNode$$module$build$src$core$utils$dom(this.svgGroup);this.lidTask&&clearTimeout(this.lidTask)}hasContents(){return!!this.contents.length}contentsIsOpen(){return!!this.flyout&&\nthis.flyout.isVisible()}openFlyout(){if(!this.contentsIsOpen()){var a=this.contents.map(function(c){return JSON.parse(c)}),b=this.workspace.getParentSvg().style;b.cursor=\"wait\";setTimeout(()=>{let c;(c=this.flyout)==null||c.show(a);b.cursor=\"\";let d;(d=this.workspace.scrollbar)==null||d.setVisible(!1)},10);this.fireUiEvent(!0)}}closeFlyout(){if(this.contentsIsOpen()){var a;(a=this.flyout)==null||a.hide();var b;(b=this.workspace.scrollbar)==null||b.setVisible(!0);this.fireUiEvent(!1);this.workspace.recordDragTargets()}}autoHide(a){!a&&\nthis.flyout&&this.closeFlyout()}emptyContents(){this.hasContents()&&(this.contents.length=0,this.setMinOpenness(0),this.closeFlyout())}position(a,b){if(this.initialized){var c=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers(this.workspace,a);a=getStartPositionRect$$module$build$src$core$positionable_helpers(c,new Size$$module$build$src$core$utils$size(WIDTH$$module$build$src$core$trashcan,BODY_HEIGHT$$module$build$src$core$trashcan+LID_HEIGHT$$module$build$src$core$trashcan),\nMARGIN_HORIZONTAL$$module$build$src$core$trashcan,MARGIN_VERTICAL$$module$build$src$core$trashcan,a,this.workspace);b=bumpPositionRect$$module$build$src$core$positionable_helpers(a,MARGIN_VERTICAL$$module$build$src$core$trashcan,c.vertical===verticalPosition$$module$build$src$core$positionable_helpers.TOP?bumpDirection$$module$build$src$core$positionable_helpers.DOWN:bumpDirection$$module$build$src$core$positionable_helpers.UP,b);this.top=b.top;this.left=b.left;var d;(d=this.svgGroup)==null||d.setAttribute(\"transform\",\n\"translate(\"+this.left+\",\"+this.top+\")\");var e;(e=this.flyout)==null||e.position()}}getBoundingRectangle(){return new Rect$$module$build$src$core$utils$rect(this.top,this.top+BODY_HEIGHT$$module$build$src$core$trashcan+LID_HEIGHT$$module$build$src$core$trashcan,this.left,this.left+WIDTH$$module$build$src$core$trashcan)}getClientRect(){if(!this.svgGroup)return null;var a=this.svgGroup.getBoundingClientRect();const b=a.top+SPRITE_TOP$$module$build$src$core$trashcan-MARGIN_HOTSPOT$$module$build$src$core$trashcan;\na=a.left+SPRITE_LEFT$$module$build$src$core$trashcan-MARGIN_HOTSPOT$$module$build$src$core$trashcan;return new Rect$$module$build$src$core$utils$rect(b,b+LID_HEIGHT$$module$build$src$core$trashcan+BODY_HEIGHT$$module$build$src$core$trashcan+2*MARGIN_HOTSPOT$$module$build$src$core$trashcan,a,a+WIDTH$$module$build$src$core$trashcan+2*MARGIN_HOTSPOT$$module$build$src$core$trashcan)}onDragOver(a){this.setLidOpen(this.wouldDelete_)}onDragExit(a){this.setLidOpen(!1)}onDrop(a){setTimeout(this.setLidOpen.bind(this,\n!1),100)}setLidOpen(a){this.isLidOpen!==a&&(this.lidTask&&clearTimeout(this.lidTask),this.isLidOpen=a,this.animateLid())}animateLid(){const a=ANIMATION_FRAMES$$module$build$src$core$trashcan;var b=1/(a+1);this.lidOpen+=this.isLidOpen?b:-b;this.lidOpen=Math.min(Math.max(this.lidOpen,this.minOpenness),1);this.setLidAngle(this.lidOpen*MAX_LID_ANGLE$$module$build$src$core$trashcan);b=OPACITY_MIN$$module$build$src$core$trashcan+this.lidOpen*(OPACITY_MAX$$module$build$src$core$trashcan-OPACITY_MIN$$module$build$src$core$trashcan);\nthis.svgGroup&&(this.svgGroup.style.opacity=`${b}`);this.lidOpen>this.minOpenness&&this.lidOpen<1&&(this.lidTask=setTimeout(this.animateLid.bind(this),ANIMATION_LENGTH$$module$build$src$core$trashcan/a))}setLidAngle(a){const b=this.workspace.toolboxPosition===Position$$module$build$src$core$utils$toolbox.RIGHT||this.workspace.horizontalLayout&&this.workspace.RTL;let c;(c=this.svgLid)==null||c.setAttribute(\"transform\",\"rotate(\"+(b?-a:a)+\",\"+(b?4:WIDTH$$module$build$src$core$trashcan-4)+\",\"+(LID_HEIGHT$$module$build$src$core$trashcan-\n2)+\")\")}setMinOpenness(a){this.minOpenness=a;this.isLidOpen||this.setLidAngle(a*MAX_LID_ANGLE$$module$build$src$core$trashcan)}closeLid(){this.setLidOpen(!1)}click(){this.hasContents()&&!this.workspace.isDragging()&&this.openFlyout()}fireUiEvent(a){a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.TRASHCAN_OPEN))(a,this.workspace.id);fire$$module$build$src$core$events$utils(a)}blockMouseDownWhenOpenable(a){!this.contentsIsOpen()&&this.hasContents()&&a.stopPropagation()}mouseOver(){this.hasContents()&&\nthis.setLidOpen(!0)}mouseOut(){this.setLidOpen(!1)}onDelete(a){if(!(this.workspace.options.maxTrashcanContents<=0||!isBlockDelete$$module$build$src$core$events$predicates(a)||a.wasShadow)){if(!a.oldJson)throw Error(\"Encountered a delete event without proper oldJson\");a=JSON.stringify(this.cleanBlockJson(a.oldJson));if(!this.contents.includes(a)){for(this.contents.unshift(a);this.contents.length>this.workspace.options.maxTrashcanContents;)this.contents.pop();this.setMinOpenness(HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan)}}}cleanBlockJson(a){function b(c){if(c){delete c.id;\ndelete c.x;delete c.y;delete c.enabled;delete c.disabledReasons;if(c.icons&&c.icons.comment){var d=c.icons.comment;delete d.height;delete d.width;delete d.pinned}d=c.inputs;for(var e in d){var f=d[e];const g=f.block;f=f.shadow;g&&b(g);f&&b(f)}c.next&&(e=c.next,c=e.block,e=e.shadow,c&&b(c),e&&b(e))}}a=JSON.parse(JSON.stringify(a));b(a);return Object.assign({},{kind:\"BLOCK\"},a)}},WIDTH$$module$build$src$core$trashcan=47,BODY_HEIGHT$$module$build$src$core$trashcan=44,LID_HEIGHT$$module$build$src$core$trashcan=\n16,MARGIN_VERTICAL$$module$build$src$core$trashcan=20,MARGIN_HORIZONTAL$$module$build$src$core$trashcan=20,MARGIN_HOTSPOT$$module$build$src$core$trashcan=10,SPRITE_LEFT$$module$build$src$core$trashcan=0,SPRITE_TOP$$module$build$src$core$trashcan=32,HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan=.1,ANIMATION_LENGTH$$module$build$src$core$trashcan=80,ANIMATION_FRAMES$$module$build$src$core$trashcan=4,OPACITY_MIN$$module$build$src$core$trashcan=.4,OPACITY_MAX$$module$build$src$core$trashcan=.8,\nMAX_LID_ANGLE$$module$build$src$core$trashcan=45,module$build$src$core$trashcan={};module$build$src$core$trashcan.Trashcan=Trashcan$$module$build$src$core$trashcan;var stashedCopyData$$module$build$src$core$clipboard=null,stashedWorkspace$$module$build$src$core$clipboard=null,stashedCoordinates$$module$build$src$core$clipboard=void 0,module$build$src$core$clipboard={};module$build$src$core$clipboard.BlockPaster=BlockPaster$$module$build$src$core$clipboard$block_paster;module$build$src$core$clipboard.copy=copy$$module$build$src$core$clipboard;module$build$src$core$clipboard.getLastCopiedData=getLastCopiedData$$module$build$src$core$clipboard;\nmodule$build$src$core$clipboard.getLastCopiedLocation=getLastCopiedLocation$$module$build$src$core$clipboard;module$build$src$core$clipboard.getLastCopiedWorkspace=getLastCopiedWorkspace$$module$build$src$core$clipboard;module$build$src$core$clipboard.paste=paste$$module$build$src$core$clipboard;module$build$src$core$clipboard.registry=module$build$src$core$clipboard$registry;module$build$src$core$clipboard.setLastCopiedData=setLastCopiedData$$module$build$src$core$clipboard;\nmodule$build$src$core$clipboard.setLastCopiedLocation=setLastCopiedLocation$$module$build$src$core$clipboard;module$build$src$core$clipboard.setLastCopiedWorkspace=setLastCopiedWorkspace$$module$build$src$core$clipboard;var module$build$src$core$comments={};module$build$src$core$comments.CollapseCommentBarButton=CollapseCommentBarButton$$module$build$src$core$comments$collapse_comment_bar_button;module$build$src$core$comments.CommentBarButton=CommentBarButton$$module$build$src$core$comments$comment_bar_button;module$build$src$core$comments.CommentEditor=CommentEditor$$module$build$src$core$comments$comment_editor;module$build$src$core$comments.CommentView=CommentView$$module$build$src$core$comments$comment_view;\nmodule$build$src$core$comments.DeleteCommentBarButton=DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button;module$build$src$core$comments.RenderedWorkspaceComment=RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment;module$build$src$core$comments.WorkspaceComment=WorkspaceComment$$module$build$src$core$comments$workspace_comment;var module$build$src$core$interfaces$i_copyable={};module$build$src$core$interfaces$i_copyable.isCopyable=isCopyable$$module$build$src$core$interfaces$i_copyable;var names$$module$build$src$core$shortcut_items;(function(a){a.ESCAPE=\"escape\";a.DELETE=\"delete\";a.COPY=\"copy\";a.CUT=\"cut\";a.PASTE=\"paste\";a.UNDO=\"undo\";a.REDO=\"redo\"})(names$$module$build$src$core$shortcut_items||(names$$module$build$src$core$shortcut_items={}));registerDefaultShortcuts$$module$build$src$core$shortcut_items();var module$build$src$core$shortcut_items={};module$build$src$core$shortcut_items.names=names$$module$build$src$core$shortcut_items;\nmodule$build$src$core$shortcut_items.registerCopy=registerCopy$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerCut=registerCut$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerDefaultShortcuts=registerDefaultShortcuts$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerDelete=registerDelete$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerEscape=registerEscape$$module$build$src$core$shortcut_items;\nmodule$build$src$core$shortcut_items.registerPaste=registerPaste$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerRedo=registerRedo$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerUndo=registerUndo$$module$build$src$core$shortcut_items;var ProcedureSerializer$$module$build$src$core$serialization$procedures=class{constructor(a,b){this.procedureModelClass=a;this.parameterModelClass=b;this.priority=PROCEDURES$$module$build$src$core$serialization$priorities}save(a){a=a.getProcedureMap().getProcedures().map(b=>saveProcedure$$module$build$src$core$serialization$procedures(b));return a.length?a:null}load(a,b){const c=b.getProcedureMap();for(const d of a)c.add(loadProcedure$$module$build$src$core$serialization$procedures(this.procedureModelClass,\nthis.parameterModelClass,d,b))}clear(a){a.getProcedureMap().clear()}},module$build$src$core$serialization$procedures={};module$build$src$core$serialization$procedures.ProcedureSerializer=ProcedureSerializer$$module$build$src$core$serialization$procedures;module$build$src$core$serialization$procedures.loadProcedure=loadProcedure$$module$build$src$core$serialization$procedures;module$build$src$core$serialization$procedures.saveProcedure=saveProcedure$$module$build$src$core$serialization$procedures;var VariableSerializer$$module$build$src$core$serialization$variables=class{constructor(){this.priority=VARIABLES$$module$build$src$core$serialization$priorities}save(a){a=a.getAllVariables().map(b=>b.save());return a.length?a:null}load(a,b){const c=getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MODEL,DEFAULT$$module$build$src$core$registry);a.forEach(d=>{c==null||c.load(d,b)})}clear(a){a.getVariableMap().clear()}};\nregister$$module$build$src$core$serialization$registry(\"variables\",new VariableSerializer$$module$build$src$core$serialization$variables);var module$build$src$core$serialization$variables={};module$build$src$core$serialization$variables.VariableSerializer=VariableSerializer$$module$build$src$core$serialization$variables;var module$build$src$core$serialization$workspaces={};module$build$src$core$serialization$workspaces.load=load$$module$build$src$core$serialization$workspaces;module$build$src$core$serialization$workspaces.save=save$$module$build$src$core$serialization$workspaces;var module$build$src$core$serialization={blocks:module$build$src$core$serialization$blocks,exceptions:module$build$src$core$serialization$exceptions,priorities:module$build$src$core$serialization$priorities,procedures:module$build$src$core$serialization$procedures,registry:module$build$src$core$serialization$registry,variables:module$build$src$core$serialization$variables,workspaceComments:module$build$src$core$serialization$workspace_comments,workspaces:module$build$src$core$serialization$workspaces};\"Blockly\"in globalThis||(globalThis.Blockly={Msg:module$build$src$core$msg});var module$build$src$core$main={};var LABEL_TYPE$$module$build$src$core$label_flyout_inflater=\"label\",LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater=class{load(a,b){a=new FlyoutButton$$module$build$src$core$flyout_button(b.getWorkspace(),b.targetWorkspace,a,!0);a.show();return new FlyoutItem$$module$build$src$core$flyout_item(a,LABEL_TYPE$$module$build$src$core$label_flyout_inflater)}gapForItem(a,b){return b}disposeItem(a){a=a.getElement();a instanceof FlyoutButton$$module$build$src$core$flyout_button&&a.dispose()}getType(){return LABEL_TYPE$$module$build$src$core$label_flyout_inflater}};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,LABEL_TYPE$$module$build$src$core$label_flyout_inflater,LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater);var module$build$src$core$label_flyout_inflater={};module$build$src$core$label_flyout_inflater.LabelFlyoutInflater=LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater;var ConstantProvider$$module$build$src$core$renderers$zelos$constants=class extends ConstantProvider$$module$build$src$core$renderers$common$constants{constructor(a){super();this.GRID_UNIT=4;this.CURSOR_COLOUR=\"#ffa200\";this.CURSOR_RADIUS=5;this.JAGGED_TEETH_WIDTH=this.JAGGED_TEETH_HEIGHT=0;this.START_HAT_HEIGHT=22;this.START_HAT_WIDTH=96;this.SHAPES={HEXAGONAL:1,ROUND:2,SQUARE:3,PUZZLE:4,NOTCH:5};this.SHAPE_IN_SHAPE_PADDING={1:{0:5*this.GRID_UNIT,1:2*this.GRID_UNIT,2:5*this.GRID_UNIT,3:5*this.GRID_UNIT},\n2:{0:3*this.GRID_UNIT,1:3*this.GRID_UNIT,2:1*this.GRID_UNIT,3:2*this.GRID_UNIT},3:{0:2*this.GRID_UNIT,1:2*this.GRID_UNIT,2:2*this.GRID_UNIT,3:2*this.GRID_UNIT}};this.FULL_BLOCK_FIELDS=!0;this.FIELD_TEXT_FONTWEIGHT=\"bold\";this.FIELD_TEXT_FONTFAMILY='\"Helvetica Neue\", \"Segoe UI\", Helvetica, sans-serif';this.FIELD_COLOUR_FULL_BLOCK=this.FIELD_TEXTINPUT_BOX_SHADOW=this.FIELD_DROPDOWN_SVG_ARROW=this.FIELD_DROPDOWN_COLOURED_DIV=this.FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW=!0;this.SELECTED_GLOW_COLOUR=\"#fff200\";\nthis.SELECTED_GLOW_SIZE=.5;this.REPLACEMENT_GLOW_COLOUR=\"#fff200\";this.REPLACEMENT_GLOW_SIZE=2;this.selectedGlowFilterId=\"\";this.selectedGlowFilter=null;this.replacementGlowFilterId=\"\";this.SQUARED=this.ROUNDED=this.HEXAGONAL=this.replacementGlowFilter=null;a&&(this.GRID_UNIT=a);this.SMALL_PADDING=this.GRID_UNIT;this.MEDIUM_PADDING=2*this.GRID_UNIT;this.MEDIUM_LARGE_PADDING=3*this.GRID_UNIT;this.LARGE_PADDING=4*this.GRID_UNIT;this.CORNER_RADIUS=1*this.GRID_UNIT;this.NOTCH_WIDTH=9*this.GRID_UNIT;this.NOTCH_HEIGHT=\n2*this.GRID_UNIT;this.STATEMENT_INPUT_NOTCH_OFFSET=this.NOTCH_OFFSET_LEFT=3*this.GRID_UNIT;this.MIN_BLOCK_WIDTH=2*this.GRID_UNIT;this.MIN_BLOCK_HEIGHT=12*this.GRID_UNIT;this.EMPTY_STATEMENT_INPUT_HEIGHT=6*this.GRID_UNIT;this.TOP_ROW_MIN_HEIGHT=this.CORNER_RADIUS;this.TOP_ROW_PRECEDES_STATEMENT_MIN_HEIGHT=this.LARGE_PADDING;this.BOTTOM_ROW_MIN_HEIGHT=this.CORNER_RADIUS;this.BOTTOM_ROW_AFTER_STATEMENT_MIN_HEIGHT=6*this.GRID_UNIT;this.STATEMENT_BOTTOM_SPACER=-this.NOTCH_HEIGHT;this.STATEMENT_INPUT_SPACER_MIN_WIDTH=\n40*this.GRID_UNIT;this.STATEMENT_INPUT_PADDING_LEFT=4*this.GRID_UNIT;this.EMPTY_INLINE_INPUT_PADDING=4*this.GRID_UNIT;this.EMPTY_INLINE_INPUT_HEIGHT=8*this.GRID_UNIT;this.DUMMY_INPUT_MIN_HEIGHT=8*this.GRID_UNIT;this.DUMMY_INPUT_SHADOW_MIN_HEIGHT=6*this.GRID_UNIT;this.CURSOR_WS_WIDTH=20*this.GRID_UNIT;this.FIELD_TEXT_FONTSIZE=3*this.GRID_UNIT;this.FIELD_BORDER_RECT_RADIUS=this.CORNER_RADIUS;this.FIELD_BORDER_RECT_X_PADDING=2*this.GRID_UNIT;this.FIELD_BORDER_RECT_Y_PADDING=1.625*this.GRID_UNIT;this.FIELD_BORDER_RECT_HEIGHT=\n8*this.GRID_UNIT;this.FIELD_DROPDOWN_BORDER_RECT_HEIGHT=8*this.GRID_UNIT;this.FIELD_DROPDOWN_SVG_ARROW_PADDING=this.FIELD_BORDER_RECT_X_PADDING;this.FIELD_COLOUR_DEFAULT_WIDTH=6*this.GRID_UNIT;this.FIELD_COLOUR_DEFAULT_HEIGHT=8*this.GRID_UNIT;this.FIELD_CHECKBOX_X_OFFSET=1*this.GRID_UNIT;this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH=12*this.GRID_UNIT}setFontConstants_(a){super.setFontConstants_(a);this.FIELD_DROPDOWN_BORDER_RECT_HEIGHT=this.FIELD_BORDER_RECT_HEIGHT=this.FIELD_TEXT_HEIGHT+this.FIELD_BORDER_RECT_Y_PADDING*\n2}init(){super.init();this.HEXAGONAL=this.makeHexagonal();this.ROUNDED=this.makeRounded();this.SQUARED=this.makeSquared();this.STATEMENT_INPUT_NOTCH_OFFSET=this.NOTCH_OFFSET_LEFT+this.INSIDE_CORNERS.rightWidth}setDynamicProperties_(a){super.setDynamicProperties_(a);this.SELECTED_GLOW_COLOUR=a.getComponentStyle(\"selectedGlowColour\")||this.SELECTED_GLOW_COLOUR;const b=Number(a.getComponentStyle(\"selectedGlowSize\"));this.SELECTED_GLOW_SIZE=b&&!isNaN(b)?b:this.SELECTED_GLOW_SIZE;this.REPLACEMENT_GLOW_COLOUR=\na.getComponentStyle(\"replacementGlowColour\")||this.REPLACEMENT_GLOW_COLOUR;this.REPLACEMENT_GLOW_SIZE=(a=Number(a.getComponentStyle(\"replacementGlowSize\")))&&!isNaN(a)?a:this.REPLACEMENT_GLOW_SIZE}dispose(){super.dispose();this.selectedGlowFilter&&removeNode$$module$build$src$core$utils$dom(this.selectedGlowFilter);this.replacementGlowFilter&&removeNode$$module$build$src$core$utils$dom(this.replacementGlowFilter)}makeStartHat(){const a=this.START_HAT_HEIGHT,b=this.START_HAT_WIDTH,c=curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(25,-a),point$$module$build$src$core$utils$svg_paths(71,-a),point$$module$build$src$core$utils$svg_paths(b,0)]);return{height:a*.75,width:b,path:c}}makeHexagonal(){function a(c,d,e){var f=c/2;f=f>b?b:f;e=e?-1:1;c=(d?-1:1)*c/2;return lineTo$$module$build$src$core$utils$svg_paths(-e*f,c)+lineTo$$module$build$src$core$utils$svg_paths(e*f,c)}const b=this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH;return{type:this.SHAPES.HEXAGONAL,isDynamic:!0,width(c){c/=2;return c>\nb?b:c},height(c){return c},connectionOffsetY(c){return c/2},connectionOffsetX(c){return-c},pathDown(c){return a(c,!1,!1)},pathUp(c){return a(c,!0,!1)},pathRightDown(c){return a(c,!1,!0)},pathRightUp(c){return a(c,!1,!0)}}}makeRounded(){function a(d,e,f){const g=d>c?d-c:0;d=(d>c?c:d)/2;const h=f===e?\"0\":\"1\";return arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+h,d,point$$module$build$src$core$utils$svg_paths((f?1:-1)*d,(e?-1:1)*d))+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",(e?-1:\n1)*g)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+h,d,point$$module$build$src$core$utils$svg_paths((f?-1:1)*d,(e?-1:1)*d))}const b=this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH,c=b*2;return{type:this.SHAPES.ROUND,isDynamic:!0,width(d){d/=2;return d>b?b:d},height(d){return d},connectionOffsetY(d){return d/2},connectionOffsetX(d){return-d},pathDown(d){return a(d,!1,!1)},pathUp(d){return a(d,!0,!1)},pathRightDown(d){return a(d,!1,!0)},pathRightUp(d){return a(d,!1,!0)}}}makeSquared(){function a(c,\nd,e){c-=b*2;const f=e===d?\"0\":\"1\";return arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+f,b,point$$module$build$src$core$utils$svg_paths((e?1:-1)*b,(d?-1:1)*b))+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",(d?-1:1)*c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+f,b,point$$module$build$src$core$utils$svg_paths((e?-1:1)*b,(d?-1:1)*b))}const b=this.CORNER_RADIUS;return{type:this.SHAPES.SQUARE,isDynamic:!0,width(c){return b},height(c){return c},connectionOffsetY(c){return c/\n2},connectionOffsetX(c){return-c},pathDown(c){return a(c,!1,!1)},pathUp(c){return a(c,!0,!1)},pathRightDown(c){return a(c,!1,!0)},pathRightUp(c){return a(c,!1,!0)}}}shapeFor(a){let b=a.getCheck();!b&&a.targetConnection&&(b=a.targetConnection.getCheck());switch(a.type){case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:case ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE:a=a.getSourceBlock().getOutputShape();if(a!==null)switch(a){case this.SHAPES.HEXAGONAL:return this.HEXAGONAL;\ncase this.SHAPES.ROUND:return this.ROUNDED;case this.SHAPES.SQUARE:return this.SQUARED}if(b&&b.includes(\"Boolean\"))return this.HEXAGONAL;if(b&&b.includes(\"Number\"))return this.ROUNDED;b&&b.includes(\"String\");return this.ROUNDED;case ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT:case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:return this.NOTCH;default:throw Error(\"Unknown type\");}}makeNotch(){function a(l){return curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(l*e/2,0),point$$module$build$src$core$utils$svg_paths(l*e*3/4,g/2),point$$module$build$src$core$utils$svg_paths(l*e,g)])+line$$module$build$src$core$utils$svg_paths([point$$module$build$src$core$utils$svg_paths(l*e,f)])+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/4,g/2),point$$module$build$src$core$utils$svg_paths(l*e/2,g),point$$module$build$src$core$utils$svg_paths(l*e,g)])+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",\nl*d)+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/2,0),point$$module$build$src$core$utils$svg_paths(l*e*3/4,-(g/2)),point$$module$build$src$core$utils$svg_paths(l*e,-g)])+line$$module$build$src$core$utils$svg_paths([point$$module$build$src$core$utils$svg_paths(l*e,-f)])+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/4,-(g/2)),point$$module$build$src$core$utils$svg_paths(l*e/2,-g),point$$module$build$src$core$utils$svg_paths(l*\ne,-g)])}const b=this.NOTCH_WIDTH,c=this.NOTCH_HEIGHT,d=b/3,e=d/3,f=c/2,g=f/2,h=a(1),k=a(-1);return{type:this.SHAPES.NOTCH,width:b,height:c,pathLeft:h,pathRight:k}}makeInsideCorners(){const a=this.CORNER_RADIUS,b=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(-a,a)),c=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a,point$$module$build$src$core$utils$svg_paths(-a,a)),d=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(a,\na)),e=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a,point$$module$build$src$core$utils$svg_paths(a,a));return{width:a,height:a,pathTop:b,pathBottom:d,rightWidth:a,rightHeight:a,pathTopRight:c,pathBottomRight:e}}generateSecondaryColour_(a){return blend$$module$build$src$core$utils$colour(\"#000\",a,.15)||a}generateTertiaryColour_(a){return blend$$module$build$src$core$utils$colour(\"#000\",a,.25)||a}createDom(a,b,c,d){super.createDom(a,b,c,d);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.DEFS,\n{},a);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FILTER,{id:\"blocklySelectedGlowFilter\"+this.randomIdentifier,height:\"160%\",width:\"180%\",y:\"-30%\",x:\"-40%\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR,{\"in\":\"SourceGraphic\",stdDeviation:this.SELECTED_GLOW_SIZE},b);c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER,{result:\"outBlur\"},b);\ncreateSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFUNCA,{type:\"table\",tableValues:\"0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\"},c);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFLOOD,{\"flood-color\":this.SELECTED_GLOW_COLOUR,\"flood-opacity\":1,result:\"outColor\"},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"outColor\",in2:\"outBlur\",operator:\"in\",result:\"outGlow\"},b);\nthis.selectedGlowFilterId=b.id;this.selectedGlowFilter=b;a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FILTER,{id:\"blocklyReplacementGlowFilter\"+this.randomIdentifier,height:\"160%\",width:\"180%\",y:\"-30%\",x:\"-40%\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR,{\"in\":\"SourceGraphic\",stdDeviation:this.REPLACEMENT_GLOW_SIZE},a);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER,\n{result:\"outBlur\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFUNCA,{type:\"table\",tableValues:\"0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\"},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFLOOD,{\"flood-color\":this.REPLACEMENT_GLOW_COLOUR,\"flood-opacity\":1,result:\"outColor\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"outColor\",in2:\"outBlur\",operator:\"in\",\nresult:\"outGlow\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"SourceGraphic\",in2:\"outGlow\",operator:\"over\"},a);this.replacementGlowFilterId=a.id;this.replacementGlowFilter=a;d&&(d.style.setProperty(\"--blocklySelectedGlowFilter\",`url(#${this.selectedGlowFilterId})`),d.style.setProperty(\"--blocklyReplacementGlowFilter\",`url(#${this.replacementGlowFilterId})`))}getCSS_(a){return[`${a} .blocklyText,`,`${a} .blocklyFlyoutLabelText {`,`font: ${this.FIELD_TEXT_FONTWEIGHT} ${this.FIELD_TEXT_FONTSIZE}`+\n`pt ${this.FIELD_TEXT_FONTFAMILY};`,\"}\",`${a} .blocklyTextInputBubble textarea {`,\"font-weight: normal;\",\"}\",`${a} .blocklyText {`,\"fill: #fff;\",\"}\",`${a} .blocklyNonEditableField>rect:not(.blocklyDropdownRect),`,`${a} .blocklyEditableField>rect:not(.blocklyDropdownRect) {`,`fill: ${this.FIELD_BORDER_RECT_COLOUR};`,\"}\",`${a} .blocklyNonEditableField>text,`,`${a} .blocklyEditableField>text,`,`${a} .blocklyNonEditableField>g>text,`,`${a} .blocklyEditableField>g>text {`,\"fill: #575E75;\",\"}\",`${a} .blocklyFlyoutLabelText {`,\n\"fill: #575E75;\",\"}\",`${a} .blocklyText.blocklyBubbleText {`,\"fill: #575E75;\",\"}\",`${a} .blocklyDraggable:not(.blocklyDisabled)`,\" .blocklyEditableField:not(.blocklyEditing):hover>rect,\",`${a} .blocklyDraggable:not(.blocklyDisabled)`,\" .blocklyEditableField:not(.blocklyEditing):hover>.blocklyPath {\",\"stroke: #fff;\",\"stroke-width: 2;\",\"}\",`${a} .blocklyHtmlInput {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,`font-weight: ${this.FIELD_TEXT_FONTWEIGHT};`,\"color: #575E75;\",\"}\",`${a} .blocklyDropdownText {`,\n\"fill: #fff !important;\",\"}\",`${a}.blocklyWidgetDiv .blocklyMenuItem,`,`${a}.blocklyDropDownDiv .blocklyMenuItem {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,\"}\",`${a}.blocklyDropDownDiv .blocklyMenuItemContent {`,\"color: #fff;\",\"}\",`${a} .blocklyHighlightedConnectionPath {`,`stroke: ${this.SELECTED_GLOW_COLOUR};`,\"}\",`${a} .blocklyDisabledPattern > .blocklyOutlinePath {`,\"fill: var(--blocklyDisabledPattern)\",\"}\",`${a} .blocklyInsertionMarker>.blocklyPath {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\n\"stroke: none;\",\"}\",`${a} .blocklySelected>.blocklyPath.blocklyPathSelected {`,\"fill: none;\",\"filter: var(--blocklySelectedGlowFilter);\",\"}\",`${a} .blocklyReplaceable>.blocklyPath {`,\"filter: var(--blocklyReplacementGlowFilter);\",\"}\"]}},module$build$src$core$renderers$zelos$constants={};module$build$src$core$renderers$zelos$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$zelos$constants;var Drawer$$module$build$src$core$renderers$zelos$drawer=class extends Drawer$$module$build$src$core$renderers$common$drawer{constructor(a,b){super(a,b)}draw(){const a=this.block_.pathObject;a.beginDrawing();this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();a.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);this.info_.RTL&&a.flipRTL();this.recordSizeOnBlock_();this.info_.outputConnection&&(a.outputShapeType=this.info_.outputConnection.shape.type);a.endDrawing()}drawOutline_(){this.info_.outputConnection&&\nthis.info_.outputConnection.isDynamicShape&&!this.info_.hasStatementInput&&!this.info_.bottomRow.hasNextConnection?(this.drawFlatTop_(),this.drawRightDynamicConnection_(),this.drawFlatBottom_(),this.drawLeftDynamicConnection_()):super.drawOutline_()}drawLeft_(){this.info_.outputConnection&&this.info_.outputConnection.isDynamicShape?this.drawLeftDynamicConnection_():super.drawLeft_()}drawRightSideRow_(a){if(!(a.height<=0)){if(Types$$module$build$src$core$renderers$measurables$types.isSpacer(a)){const d=\na.precedesStatement;var b=a.followsStatement;if(d||b){const e=this.constants_.INSIDE_CORNERS;var c=e.rightHeight;c=a.height-(d?c:0);b=b?e.pathBottomRight:\"\";a=c>0?lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+c):\"\";this.outlinePath_+=b+a+(d?e.pathTopRight:\"\");return}}this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+a.height)}}drawRightDynamicConnection_(){if(!this.info_.outputConnection)throw Error(\"Cannot draw the output connection of a block that doesn't have one\");\nthis.outlinePath_+=this.info_.outputConnection.shape.pathRightDown(this.info_.outputConnection.height)}drawLeftDynamicConnection_(){if(!this.info_.outputConnection)throw Error(\"Cannot draw the output connection of a block that doesn't have one\");this.positionOutputConnection_();this.outlinePath_+=this.info_.outputConnection.shape.pathUp(this.info_.outputConnection.height);this.outlinePath_+=\"z\"}drawFlatTop_(){const a=this.info_.topRow;this.positionPreviousConnection_();this.outlinePath_+=moveBy$$module$build$src$core$utils$svg_paths(a.xPos,\nthis.info_.startY);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",a.width)}drawFlatBottom_(){const a=this.info_.bottomRow;this.positionNextConnection_();this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.baseline);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-a.width)}drawInlineInput_(a){this.positionInlineInputConnection_(a);const b=a.input.name;a.connectedBlock||this.info_.isInsertionMarker||(a=moveTo$$module$build$src$core$utils$svg_paths(a.xPos+\na.connectionWidth,a.centerline-a.height/2)+this.getInlineInputPath(a),this.block_.pathObject.setOutlinePath(b,a))}getInlineInputPath(a){const b=a.width-a.connectionWidth*2,c=a.height;return lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",b)+a.shape.pathRightDown(c)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-b)+a.shape.pathUp(c)+\"z\"}drawStatementInput_(a){var b=a.getLastInput();const c=b.xPos+b.notchOffset+b.shape.width,d=this.constants_.INSIDE_CORNERS,e=b.shape.pathRight+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",\n-(b.notchOffset-d.width))+d.pathTop,f=a.height-2*d.height;b=d.pathBottom+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",b.notchOffset-d.width)+(b.connectedBottomNextConnection?\"\":b.shape.pathLeft);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",c)+e+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",f)+b+lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",a.xPos+a.width);this.positionStatementInputConnection_(a)}drawConnectionHighlightPath(a){const b=a.connectionModel;\nif(b.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE&&!a.isDynamicShape)return super.drawConnectionHighlightPath(a);a=b.type===ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE?moveTo$$module$build$src$core$utils$svg_paths(a.connectionWidth,-a.height/2)+this.getInlineInputPath(a):moveTo$$module$build$src$core$utils$svg_paths(a.width,\n-a.height/2)+a.shape.pathDown(a.height);const c=b.getSourceBlock();let d,e;return(e=(d=c.pathObject).addConnectionHighlight)==null?void 0:e.call(d,b,a,b.getOffsetInBlock(),c.RTL)}},module$build$src$core$renderers$zelos$drawer={};module$build$src$core$renderers$zelos$drawer.Drawer=Drawer$$module$build$src$core$renderers$zelos$drawer;var FieldImage$$module$build$src$core$field_image=class extends Field$$module$build$src$core$field{constructor(a,b,c,d,e,f,g){super(Field$$module$build$src$core$field.SKIP_SETUP);this.imageElement=this.clickHandler=null;this.flipRtl=this.isDirty_=this.EDITABLE=!1;this.altText=\"\";c=Number(replaceMessageReferences$$module$build$src$core$utils$parsing(c));b=Number(replaceMessageReferences$$module$build$src$core$utils$parsing(b));if(isNaN(c)||isNaN(b))throw Error(\"Height and width values of an image field must cast to numbers.\");\nif(c<=0||b<=0)throw Error(\"Height and width values of an image field must be greater than 0.\");this.size_=new Size$$module$build$src$core$utils$size(b,c+FieldImage$$module$build$src$core$field_image.Y_PADDING);this.imageHeight=c;typeof e===\"function\"&&(this.clickHandler=e);a!==Field$$module$build$src$core$field.SKIP_SETUP&&(g?this.configure_(g):(this.flipRtl=!!f,this.altText=replaceMessageReferences$$module$build$src$core$utils$parsing(d)||\"\"),this.setValue(replaceMessageReferences$$module$build$src$core$utils$parsing(a)))}configure_(a){super.configure_(a);\na.flipRtl&&(this.flipRtl=a.flipRtl);a.alt&&(this.altText=replaceMessageReferences$$module$build$src$core$utils$parsing(a.alt))}initView(){this.imageElement=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{height:this.imageHeight+\"px\",width:this.size_.width+\"px\",alt:this.altText},this.fieldGroup_);this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.value_);this.fieldGroup_&&addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\n\"blocklyImageField\");this.clickHandler&&(this.imageElement.style.cursor=\"pointer\")}updateSize_(){}doClassValidation_(a){return typeof a!==\"string\"?null:a}doValueUpdate_(a){this.value_=a;this.imageElement&&this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.value_)}getFlipRtl(){return this.flipRtl}setAlt(a){a!==this.altText&&(this.altText=a||\"\",this.imageElement&&this.imageElement.setAttribute(\"alt\",this.altText))}isClickable(){return super.isClickable()&&!!this.clickHandler}showEditor_(){this.clickHandler&&\nthis.clickHandler(this)}setOnClickHandler(a){this.clickHandler=a}getText_(){return this.altText}static fromJson(a){if(!a.src||!a.width||!a.height)throw Error(\"src, width, and height values for an image field arerequired. The width and height must be non-zero.\");return new this(a.src,a.width,a.height,void 0,void 0,void 0,a)}};FieldImage$$module$build$src$core$field_image.Y_PADDING=1;register$$module$build$src$core$field_registry(\"field_image\",FieldImage$$module$build$src$core$field_image);\nFieldImage$$module$build$src$core$field_image.prototype.DEFAULT_VALUE=\"\";var module$build$src$core$field_image={};module$build$src$core$field_image.FieldImage=FieldImage$$module$build$src$core$field_image;var MINIMUM_WIDTH$$module$build$src$core$field_input=14,FieldInput$$module$build$src$core$field_input=class extends Field$$module$build$src$core$field{set size_(a){super.size_=a}get size_(){const a=super.size_;a.width{a!==null&&this.setValue(this.getValueFromEditorText_(a));this.onFinishEditing_(this.value_)})}showInlineEditor(a,b){const c=this.getSourceBlock();if(!c)throw new UnattachedFieldError$$module$build$src$core$field;show$$module$build$src$core$widgetdiv(this,c.RTL,this.widgetDispose_.bind(this),this.workspace_,b);this.htmlInput_=this.widgetCreate_();this.isBeingEdited_=!0;this.valueWhenEditorWasOpened_=this.value_;a||(this.htmlInput_.focus({preventScroll:!0}),this.htmlInput_.select())}widgetCreate_(){var a=\nthis.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;$.setGroup$$module$build$src$core$events$utils(!0);const b=getDiv$$module$build$src$core$widgetdiv();var c=this.getClickTarget_();if(!c)throw Error(\"A click target has not been set.\");addClass$$module$build$src$core$utils$dom(c,\"blocklyEditing\");c=document.createElement(\"input\");c.className=\"blocklyHtmlInput\";c.setAttribute(\"spellcheck\",this.spellcheck_);const d=this.workspace_.getAbsoluteScale();var e=this.getConstants().FIELD_TEXT_FONTSIZE*\nd+\"pt\";b.style.fontSize=e;c.style.fontSize=e;e=FieldInput$$module$build$src$core$field_input.BORDERRADIUS*d+\"px\";this.isFullBlockField()&&(e=this.getScaledBBox(),e=(e.bottom-e.top)/2+\"px\",a=a.getParent()?a.getParent().getColourTertiary():this.sourceBlock_.getColourTertiary(),c.style.border=1*d+\"px solid \"+a,b.style.borderRadius=e,b.style.transition=\"box-shadow 0.25s ease 0s\",this.getConstants().FIELD_TEXTINPUT_BOX_SHADOW&&(b.style.boxShadow=\"rgba(255, 255, 255, 0.3) 0 0 0 \"+4*d+\"px\"));c.style.borderRadius=\ne;b.appendChild(c);c.value=c.defaultValue=this.getEditorText_(this.value_);c.setAttribute(\"data-untyped-default-value\",String(this.value_));this.resizeEditor_();this.bindInputEvents_(c);return c}widgetDispose_(){this.isBeingEdited_=!1;this.isTextValid_=!0;this.forceRerender();this.onFinishEditing_(this.value_);this.sourceBlock_&&isEnabled$$module$build$src$core$events$utils()&&this.valueWhenEditorWasOpened_!==null&&this.valueWhenEditorWasOpened_!==this.value_&&(fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock_,\n\"field\",this.name||null,this.valueWhenEditorWasOpened_,this.value_)),this.valueWhenEditorWasOpened_=null);$.setGroup$$module$build$src$core$events$utils(!1);this.unbindInputEvents_();var a=getDiv$$module$build$src$core$widgetdiv().style;a.width=\"auto\";a.height=\"auto\";a.fontSize=\"\";a.transition=\"\";a.boxShadow=\"\";this.htmlInput_=null;a=this.getClickTarget_();if(!a)throw Error(\"A click target has not been set.\");removeClass$$module$build$src$core$utils$dom(a,\"blocklyEditing\")}onFinishEditing_(a){}bindInputEvents_(a){this.onKeyDownWrapper=\nconditionalBind$$module$build$src$core$browser_events(a,\"keydown\",this,this.onHtmlInputKeyDown_);this.onInputWrapper=conditionalBind$$module$build$src$core$browser_events(a,\"input\",this,this.onHtmlInputChange)}unbindInputEvents_(){this.onKeyDownWrapper&&(unbind$$module$build$src$core$browser_events(this.onKeyDownWrapper),this.onKeyDownWrapper=null);this.onInputWrapper&&(unbind$$module$build$src$core$browser_events(this.onInputWrapper),this.onInputWrapper=null)}onHtmlInputKeyDown_(a){if(a.key===\"Enter\")hideIfOwner$$module$build$src$core$widgetdiv(this),\nhideWithoutAnimation$$module$build$src$core$dropdowndiv();else if(a.key===\"Escape\")this.setValue(this.htmlInput_.getAttribute(\"data-untyped-default-value\"),!1),hideIfOwner$$module$build$src$core$widgetdiv(this),hideWithoutAnimation$$module$build$src$core$dropdowndiv();else if(a.key===\"Tab\"){a.preventDefault();var b,c=(b=this.workspace_)==null?void 0:b.getCursor();b=d=>(d instanceof FieldInput$$module$build$src$core$field_input||d instanceof BlockSvg$$module$build$src$core$block_svg&&d.isSimpleReporter())&&\nd!==this.getSourceBlock();a=a.shiftKey?c==null?void 0:c.getPreviousNode(this,b,!1):c==null?void 0:c.getNextNode(this,b,!1);a=a instanceof BlockSvg$$module$build$src$core$block_svg&&a.isSimpleReporter()?a.getFields().next().value:a;a instanceof FieldInput$$module$build$src$core$field_input&&(hideIfOwner$$module$build$src$core$widgetdiv(this),hideWithoutAnimation$$module$build$src$core$dropdowndiv(),c=a.getSourceBlock(),a.isFullBlockField()&&c&&c instanceof BlockSvg$$module$build$src$core$block_svg?\n$.getFocusManager$$module$build$src$core$focus_manager().focusNode(c):$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a),a.showEditor())}}onHtmlInputChange(a){a=this.value_;this.setValue(this.getValueFromEditorText_(this.htmlInput_.value),!1);this.sourceBlock_&&isEnabled$$module$build$src$core$events$utils()&&this.value_!==a&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_FIELD_INTERMEDIATE_CHANGE))(this.sourceBlock_,\nthis.name||null,a,this.value_))}setEditorValue_(a,b=!0){this.isDirty_=!0;this.isBeingEdited_&&(this.htmlInput_.value=this.getEditorText_(a));this.setValue(a,b)}resizeEditor_(){finishQueuedRenders$$module$build$src$core$render_management().then(()=>{const a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;const b=getDiv$$module$build$src$core$widgetdiv(),c=this.getScaledBBox();b.style.width=c.right-c.left+\"px\";b.style.height=c.bottom-c.top+\"px\";const d=c.top;\nb.style.left=`${a.RTL?c.right-b.offsetWidth:c.left}px`;b.style.top=`${d}px`})}repositionForWindowResize(){let a;const b=(a=this.getSourceBlock())==null?void 0:a.getRootBlock();if(!(b instanceof BlockSvg$$module$build$src$core$block_svg))return!1;bumpObjectIntoBounds$$module$build$src$core$bump_objects(this.workspace_,this.workspace_.getMetricsManager().getViewMetrics(!0),b)||this.resizeEditor_();return!0}positionTextElement_(a,b){const c=a*2+b;super.positionTextElement_(a+(c0;this.rightSide=this.outputConnection?new RightConnectionShape$$module$build$src$core$renderers$zelos$measurables$row_elements(this.constants_):null;this.rightAlignedDummyInputs=new WeakMap}getRenderer(){return this.renderer_}measure(){this.createRows_();this.addElemSpacing_();this.addRowSpacing_();this.adjustXPosition_();this.computeBounds_();this.alignRowElements_();this.finalize_()}shouldStartNewRow_(a,b){return b?b instanceof EndRowInput$$module$build$src$core$inputs$end_row_input||\na instanceof StatementInput$$module$build$src$core$inputs$statement_input||b instanceof StatementInput$$module$build$src$core$inputs$statement_input?!0:a instanceof $.ValueInput$$module$build$src$core$inputs$value_input||a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input?!this.isInline||this.isMultiRow:!1:!1}getDesiredRowWidth_(a){return a.hasStatement?this.width-this.startX-(this.constants_.INSIDE_CORNERS.rightWidth||\n0):super.getDesiredRowWidth_(a)}getInRowSpacing_(a,b){return a&&b||!this.outputConnection||!this.outputConnection.isDynamicShape||this.hasStatementInput||this.bottomRow.hasNextConnection?!a&&b&&Types$$module$build$src$core$renderers$measurables$types.isStatementInput(b)?this.constants_.STATEMENT_INPUT_PADDING_LEFT:a&&Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(a)&&b&&(Types$$module$build$src$core$renderers$measurables$types.isPreviousConnection(b)||Types$$module$build$src$core$renderers$measurables$types.isNextConnection(b))?\nb.notchOffset-this.constants_.CORNER_RADIUS:a&&Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(a)&&b&&Types$$module$build$src$core$renderers$measurables$types.isHat(b)||a&&Types$$module$build$src$core$renderers$measurables$types.isField(a)&&a.width===0?this.constants_.NO_PADDING:this.constants_.MEDIUM_PADDING:this.constants_.NO_PADDING}getSpacerRowHeight_(a,b){if(Types$$module$build$src$core$renderers$measurables$types.isTopRow(a)&&Types$$module$build$src$core$renderers$measurables$types.isBottomRow(b))return this.constants_.EMPTY_BLOCK_SPACER_HEIGHT;\nconst c=Types$$module$build$src$core$renderers$measurables$types.isInputRow(a)&&a.hasStatement,d=Types$$module$build$src$core$renderers$measurables$types.isInputRow(b)&&b.hasStatement;return d||c?(a=Math.max(this.constants_.NOTCH_HEIGHT,this.constants_.INSIDE_CORNERS.rightHeight||0),d&&c?Math.max(a,this.constants_.DUMMY_INPUT_MIN_HEIGHT):a):Types$$module$build$src$core$renderers$measurables$types.isTopRow(a)?a.hasPreviousConnection||this.outputConnection&&!this.hasStatementInput?this.constants_.NO_PADDING:\nMath.abs(this.constants_.NOTCH_HEIGHT-this.constants_.CORNER_RADIUS):Types$$module$build$src$core$renderers$measurables$types.isBottomRow(b)?this.outputConnection?!b.hasNextConnection&&this.hasStatementInput?Math.abs(this.constants_.NOTCH_HEIGHT-this.constants_.CORNER_RADIUS):this.constants_.NO_PADDING:Math.max(this.topRow.minHeight,Math.max(this.constants_.NOTCH_HEIGHT,this.constants_.CORNER_RADIUS))-this.constants_.CORNER_RADIUS:this.constants_.MEDIUM_PADDING}getSpacerRowWidth_(a,b){const c=this.width-\nthis.startX;return Types$$module$build$src$core$renderers$measurables$types.isInputRow(a)&&a.hasStatement||Types$$module$build$src$core$renderers$measurables$types.isInputRow(b)&&b.hasStatement?Math.max(c,this.constants_.STATEMENT_INPUT_SPACER_MIN_WIDTH):c}getElemCenterline_(a,b){if(a.hasStatement&&!Types$$module$build$src$core$renderers$measurables$types.isSpacer(b)&&!Types$$module$build$src$core$renderers$measurables$types.isStatementInput(b))return a.yPos+this.constants_.EMPTY_STATEMENT_INPUT_HEIGHT/\n2;if(Types$$module$build$src$core$renderers$measurables$types.isInlineInput(b)){const c=b.connectedBlock;if(c&&c.outputConnection&&c.nextConnection)return a.yPos+c.height/2}return super.getElemCenterline_(a,b)}addInput_(a,b){if((a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input)&&b.hasDummyInput&&b.align===$.Align$$module$build$src$core$inputs$align.LEFT&&a.align===$.Align$$module$build$src$core$inputs$align.RIGHT)this.rightAlignedDummyInputs.set(b,\na);else if(a instanceof StatementInput$$module$build$src$core$inputs$statement_input){b.elements.push(new StatementInput$$module$build$src$core$renderers$zelos$measurables$inputs(this.constants_,a));b.hasStatement=!0;b.align===null&&(b.align=a.align);return}super.addInput_(a,b)}addAlignmentPadding_(a,b){if(this.rightAlignedDummyInputs.get(a)){let c;for(let d=0;d=this.rows.length-1?!!this.bottomRow.hasNextConnection:!!d.precedesStatement;if(Types$$module$build$src$core$renderers$measurables$types.isInputRow(f)&&\nf.hasStatement){f.measure();let g,h;b=f.width-((h=(g=f.getLastInput())==null?void 0:g.width)!=null?h:0)+a}else if(c&&(e===2||d)&&Types$$module$build$src$core$renderers$measurables$types.isInputRow(f)&&!f.hasStatement){d=f.xPos;c=null;for(let g=0;g1)switch(c){case d.SHAPES.ROUND:return c=this.constants_.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH,c=this.height/2>c?c:this.height/2,b-c*(1-Math.sin(Math.acos((c-this.constants_.SMALL_PADDING)/c)));default:return 0}if(Types$$module$build$src$core$renderers$measurables$types.isInlineInput(a)){const e=a.connectedBlock;a=\ne?e.pathObject.outputShapeType:a.shape.type;return a==null||e&&e.outputConnection&&(e.statementInputCount||e.nextConnection)||c===d.SHAPES.HEXAGONAL&&c!==a?0:b-this.constants_.SHAPE_IN_SHAPE_PADDING[c][a]}return Types$$module$build$src$core$renderers$measurables$types.isField(a)?c===d.SHAPES.ROUND&&a.field instanceof $.FieldTextInput$$module$build$src$core$field_textinput?b-2.75*d.GRID_UNIT:b-this.constants_.SHAPE_IN_SHAPE_PADDING[c][0]:Types$$module$build$src$core$renderers$measurables$types.isIcon(a)?\nthis.constants_.SMALL_PADDING:0}finalizeVerticalAlignment_(){if(!this.outputConnection)for(let d=2;d=this.rows.length-1?!!this.bottomRow.hasNextConnection:!!g.precedesStatement;if(a?this.topRow.hasPreviousConnection:e.followsStatement){var c=f.elements[1];c=f.elements.length===3&&c instanceof Field$$module$build$src$core$renderers$measurables$field&&(c.field instanceof FieldLabel$$module$build$src$core$field_label||\nc.field instanceof FieldImage$$module$build$src$core$field_image);if(!a&&c)e.height-=this.constants_.SMALL_PADDING,g.height-=this.constants_.SMALL_PADDING,f.height-=this.constants_.MEDIUM_PADDING;else if(!a&&!b)e.height+=this.constants_.SMALL_PADDING;else if(b){a=!1;for(b=0;b=40){a=!0;break}a&&\n(e.height-=this.constants_.SMALL_PADDING,g.height-=this.constants_.SMALL_PADDING)}}}}finalize_(){this.finalizeOutputConnection_();this.finalizeHorizontalAlignment_();this.finalizeVerticalAlignment_();super.finalize_();this.rightSide&&(this.widthWithChildren+=this.rightSide.width)}},module$build$src$core$renderers$zelos$info={};module$build$src$core$renderers$zelos$info.RenderInfo=RenderInfo$$module$build$src$core$renderers$zelos$info;var PathObject$$module$build$src$core$renderers$zelos$path_object=class extends PathObject$$module$build$src$core$renderers$common$path_object{constructor(a,b,c){super(a,b,c);this.svgPathSelected=null;this.outlines=new Map;this.remainingOutlines=new Set;this.outputShapeType=null;this.constants=c}setPath(a){super.setPath(a);this.svgPathSelected&&this.svgPathSelected.setAttribute(\"d\",a)}applyColour(a){super.applyColour(a);const b=a.getParent();a.isShadow()&&b&&this.svgPath.setAttribute(\"stroke\",b.getColourTertiary());\nfor(const c of this.outlines.values())c.setAttribute(\"fill\",this.style.colourTertiary)}flipRTL(){super.flipRTL();for(const a of this.outlines.values())a.setAttribute(\"transform\",\"scale(-1 1)\")}updateSelected(a){this.setClass_(\"blocklySelected\",a);a?this.svgPathSelected||(this.svgPathSelected=this.svgPath.cloneNode(!0),this.svgPathSelected.classList.add(\"blocklyPathSelected\"),removeClass$$module$build$src$core$utils$dom(this.svgPathSelected,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME),\nremoveClass$$module$build$src$core$utils$dom(this.svgPathSelected,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME),this.svgPathSelected.removeAttribute(\"tabindex\"),this.svgPathSelected.removeAttribute(\"id\"),this.svgRoot.appendChild(this.svgPathSelected)):this.svgPathSelected&&(this.svgRoot.removeChild(this.svgPathSelected),this.svgPathSelected=null)}updateReplacementFade(a){this.setClass_(\"blocklyReplaceable\",a)}updateShapeForInputHighlight(a,b){a=a.getParentInput().name;\n(a=this.getOutlinePath(a))&&(b?a.setAttribute(\"filter\",\"url(#\"+this.constants.replacementGlowFilterId+\")\"):a.removeAttribute(\"filter\"))}beginDrawing(){this.remainingOutlines.clear();for(const a of this.outlines.keys())this.remainingOutlines.add(a)}endDrawing(){if(this.remainingOutlines.size)for(const a of this.remainingOutlines)this.removeOutlinePath(a);this.remainingOutlines.clear()}setOutlinePath(a,b){a=this.getOutlinePath(a);a.setAttribute(\"d\",b);a.setAttribute(\"fill\",this.style.colourTertiary)}getOutlinePath(a){this.outlines.has(a)||\nthis.outlines.set(a,createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyOutlinePath\",d:\"\"},this.svgRoot));this.remainingOutlines.delete(a);return this.outlines.get(a)}removeOutlinePath(a){let b,c;(b=this.outlines.get(a))==null||(c=b.parentNode)==null||c.removeChild(this.outlines.get(a));this.outlines.delete(a)}},module$build$src$core$renderers$zelos$path_object={};module$build$src$core$renderers$zelos$path_object.PathObject=PathObject$$module$build$src$core$renderers$zelos$path_object;var Renderer$$module$build$src$core$renderers$zelos$renderer=class extends Renderer$$module$build$src$core$renderers$common$renderer{constructor(a){super(a)}makeConstants_(){return new ConstantProvider$$module$build$src$core$renderers$zelos$constants}makeRenderInfo_(a){return new RenderInfo$$module$build$src$core$renderers$zelos$info(this,a)}makeDrawer_(a,b){return new Drawer$$module$build$src$core$renderers$zelos$drawer(a,b)}makePathObject(a,b){return new PathObject$$module$build$src$core$renderers$zelos$path_object(a,\nb,this.getConstants())}getConstants(){return this.constants_}};register$$module$build$src$core$renderers$common$block_rendering(\"zelos\",Renderer$$module$build$src$core$renderers$zelos$renderer);var module$build$src$core$renderers$zelos$renderer={};module$build$src$core$renderers$zelos$renderer.Renderer=Renderer$$module$build$src$core$renderers$zelos$renderer;var InsertionMarkerPreviewer$$module$build$src$core$insertion_marker_previewer=class{constructor(a){this.staticConn=this.draggedConn=this.markerConn=this.fadedBlock=null;this.workspace=a.workspace}previewReplacement(a,b,c){$.disable$$module$build$src$core$events$utils();try{this.hidePreview(),this.fadedBlock=c,c.fadeForReplacement(!0),this.workspace.getRenderer().shouldHighlightConnection(b)&&(b.highlight(),this.staticConn=b)}finally{$.enable$$module$build$src$core$events$utils()}}previewConnection(a,\nb){if(a!==this.draggedConn||b!==this.staticConn){$.disable$$module$build$src$core$events$utils();try{this.hidePreview(),this.shouldUseMarkerPreview(a,b)&&(this.markerConn=this.previewMarker(a,b)),this.workspace.getRenderer().shouldHighlightConnection(b)&&b.highlight(),this.draggedConn=a,this.staticConn=b}finally{$.enable$$module$build$src$core$events$utils()}}}shouldUseMarkerPreview(a,b){return b.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||\n!(this.workspace.getRenderer()instanceof Renderer$$module$build$src$core$renderers$zelos$renderer)}previewMarker(a,b){const c=a.getSourceBlock(),d=this.createInsertionMarker(c),e=this.getMatchingConnection(c,d,a);if(!e)return null;d.queueRender();triggerQueuedRenders$$module$build$src$core$render_management();e.connect(b);const f={x:b.x-e.x,y:b.y-e.y},g=e.getOffsetInBlock().clone();finishQueuedRenders$$module$build$src$core$render_management().then(()=>{if(!d.isDeadOrDying()){$.disable$$module$build$src$core$events$utils();\ntry{d==null||d.positionNearConnection(e,f,g),d==null||d.getSvgRoot().setAttribute(\"visibility\",\"visible\")}finally{$.enable$$module$build$src$core$events$utils()}}});return e}serializeBlockToInsertionMarker(a){const b=save$$module$build$src$core$serialization$blocks(a,{addCoordinates:!1,addInputBlocks:!1,addNextBlocks:!1,doFullSerialization:!1});if(!b)throw Error(`Failed to serialize source block. ${a.toDevString()}`);return b}createInsertionMarker(a){a=this.serializeBlockToInsertionMarker(a);a=append$$module$build$src$core$serialization$blocks(a,\nthis.workspace);for(const b of a.getDescendants(!1))b.setInsertionMarker(!0);a.initSvg();a.getSvgRoot().setAttribute(\"visibility\",\"hidden\");return a}getMatchingConnection(a,b,c){a=a.getConnections_(!0);b=b.getConnections_(!0);if(a.length!==b.length)return null;for(let d=0;d-b||a<-180+b||a>180-b?!0:!1}getClientRect(){if(!this.svgGroup_||this.autoClose||!this.isVisible())return null;const a=this.svgGroup_.getBoundingClientRect(),b=a.left;return this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.LEFT?new Rect$$module$build$src$core$utils$rect(-1E9,1E9,-1E9,b+a.width):new Rect$$module$build$src$core$utils$rect(-1E9,1E9,b,1E9)}reflowInternal_(){this.workspace_.scale=this.getFlyoutScale();\nlet a=this.getContents().reduce((b,c)=>Math.max(b,c.getElement().getBoundingRectangle().getWidth()),0);a+=this.MARGIN*1.5+this.tabWidth_;a*=this.workspace_.scale;a+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;if(this.getWidth()!==a){if(this.RTL)for(const b of this.getContents()){const c=b.getElement().getBoundingRectangle().left,d=a/this.workspace_.scale-b.getElement().getBoundingRectangle().getWidth()-this.MARGIN-this.tabWidth_;b.getElement().moveBy(d-c,0)}this.targetWorkspace.scrollbar||\nthis.autoClose||this.targetWorkspace.getFlyout()!==this||this.toolboxPosition_!==Position$$module$build$src$core$utils$toolbox.LEFT||this.targetWorkspace.translate(this.targetWorkspace.scrollX+a,this.targetWorkspace.scrollY);this.width_=a;this.position();this.targetWorkspace.resizeContents();this.targetWorkspace.recordDragTargets()}}};VerticalFlyout$$module$build$src$core$flyout_vertical.registryName=\"verticalFlyout\";\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,DEFAULT$$module$build$src$core$registry,VerticalFlyout$$module$build$src$core$flyout_vertical);var module$build$src$core$flyout_vertical={};module$build$src$core$flyout_vertical.VerticalFlyout=VerticalFlyout$$module$build$src$core$flyout_vertical;var HorizontalFlyout$$module$build$src$core$flyout_horizontal=class extends Flyout$$module$build$src$core$flyout_base{constructor(a){super(a);this.horizontalLayout=!0}setMetrics_(a){if(this.isVisible()){var b=this.workspace_.getMetricsManager(),c=b.getScrollMetrics(),d=b.getViewMetrics();b=b.getAbsoluteMetrics();typeof a.x===\"number\"&&(this.workspace_.scrollX=-(c.left+(c.width-d.width)*a.x));this.workspace_.translate(this.workspace_.scrollX+b.left,this.workspace_.scrollY+b.top)}}getX(){return 0}getY(){if(!this.isVisible())return 0;\nvar a=this.targetWorkspace.getMetricsManager();const b=a.getAbsoluteMetrics(),c=a.getViewMetrics();a=a.getToolboxMetrics();const d=this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.TOP;return this.targetWorkspace.toolboxPosition===this.toolboxPosition_?this.targetWorkspace.getToolbox()?d?a.height:c.height-this.getHeight():d?0:c.height:d?0:c.height+b.top-this.getHeight()}position(){if(this.isVisible()&&this.targetWorkspace.isVisible()){var a=this.targetWorkspace.getMetricsManager().getViewMetrics();\nthis.width_=a.width;a=a.width-2*this.CORNER_RADIUS;var b=this.getHeight()-this.CORNER_RADIUS;this.setBackgroundPath(a,b);a=this.getX();b=this.getY();this.positionAt_(this.getWidth(),this.getHeight(),a,b)}}setBackgroundPath(a,b){const c=this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.TOP,d=[\"M 0,\"+(c?0:this.CORNER_RADIUS)];c?(d.push(\"h\",a+2*this.CORNER_RADIUS),d.push(\"v\",b),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,-this.CORNER_RADIUS,this.CORNER_RADIUS),d.push(\"h\",\n-a),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,-this.CORNER_RADIUS,-this.CORNER_RADIUS)):(d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,this.CORNER_RADIUS,-this.CORNER_RADIUS),d.push(\"h\",a),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,this.CORNER_RADIUS,this.CORNER_RADIUS),d.push(\"v\",b),d.push(\"h\",-a-2*this.CORNER_RADIUS));d.push(\"z\");this.svgBackground_.setAttribute(\"d\",d.join(\" \"))}scrollToStart(){let a;(a=this.workspace_.scrollbar)==null||a.setX(this.RTL?Infinity:\n0)}wheel_(a){var b=getScrollDeltaPixels$$module$build$src$core$browser_events(a);if(b=b.x||b.y){const c=this.workspace_.getMetricsManager(),d=c.getScrollMetrics();b=c.getViewMetrics().left-d.left+b;let e;(e=this.workspace_.scrollbar)==null||e.setX(b);hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv(this.workspace_);hideWithoutAnimation$$module$build$src$core$dropdowndiv()}a.preventDefault();a.stopPropagation()}layout_(a){this.workspace_.scale=this.targetWorkspace.scale;const b=this.MARGIN;\nlet c=b+this.tabWidth_;this.RTL&&(a=a.reverse());for(const d of a)a=d.getElement().getBoundingRectangle(),a=this.RTL?c+a.getWidth():c,d.getElement().moveBy(a,b),c+=d.getElement().getBoundingRectangle().getWidth()}isDragTowardWorkspace(a){a=Math.atan2(a.y,a.x)/Math.PI*180;const b=this.dragAngleRange_;return a<90+b&&a>90-b||a>-90-b&&a<-90+b?!0:!1}getClientRect(){if(!this.svgGroup_||this.autoClose||!this.isVisible())return null;const a=this.svgGroup_.getBoundingClientRect(),b=a.top;return this.toolboxPosition_===\nPosition$$module$build$src$core$utils$toolbox.TOP?new Rect$$module$build$src$core$utils$rect(-1E9,b+a.height,-1E9,1E9):new Rect$$module$build$src$core$utils$rect(b,1E9,-1E9,1E9)}reflowInternal_(){this.workspace_.scale=this.getFlyoutScale();let a=this.getContents().reduce((b,c)=>Math.max(b,c.getElement().getBoundingRectangle().getHeight()),0);a+=this.MARGIN*1.5;a*=this.workspace_.scale;a+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;this.getHeight()!==a&&(this.targetWorkspace.scrollbar||\nthis.autoClose||this.targetWorkspace.getFlyout()!==this||this.toolboxPosition_!==Position$$module$build$src$core$utils$toolbox.TOP||this.targetWorkspace.translate(this.targetWorkspace.scrollX,this.targetWorkspace.scrollY+a),this.height_=a,this.position(),this.targetWorkspace.resizeContents(),this.targetWorkspace.recordDragTargets())}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,DEFAULT$$module$build$src$core$registry,HorizontalFlyout$$module$build$src$core$flyout_horizontal);\nvar module$build$src$core$flyout_horizontal={};module$build$src$core$flyout_horizontal.HorizontalFlyout=HorizontalFlyout$$module$build$src$core$flyout_horizontal;var FieldVariable$$module$build$src$core$field_variable=class extends FieldDropdown$$module$build$src$core$field_dropdown{constructor(a,b,c,d,e){super(Field$$module$build$src$core$field.SKIP_SETUP);this.defaultType=\"\";this.variableTypes=[];this.variable=null;this.SERIALIZABLE=!0;this.menuGenerator_=FieldVariable$$module$build$src$core$field_variable.dropdownCreate;this.defaultVariableName=typeof a===\"string\"?a:\"\";this.size_=new Size$$module$build$src$core$utils$size(0,0);a!==Field$$module$build$src$core$field.SKIP_SETUP&&\n(e?this.configure_(e):this.setTypes(c,d),b&&this.setValidator(b))}configure_(a){super.configure_(a);this.setTypes(a.variableTypes,a.defaultType)}initModel(){var a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;this.variable||(a=$.getOrCreateVariablePackage$$module$build$src$core$variables(a.workspace,null,this.defaultVariableName,this.defaultType),this.doValueUpdate_(a.getId()))}initView(){super.initView();addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\n\"blocklyVariableField\")}shouldAddBorderRect_(){const a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;return super.shouldAddBorderRect_()&&(!this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW||a.type!==\"variables_get\")}fromXml(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;const c=a.getAttribute(\"id\"),d=a.textContent,e=a.getAttribute(\"variabletype\")||a.getAttribute(\"variableType\")||\"\";b=$.getOrCreateVariablePackage$$module$build$src$core$variables(b.workspace,\nc,d,e);if(e!==null&&e!==b.getType())throw Error(\"Serialized variable type with id '\"+b.getId()+\"' had type \"+b.getType()+\", and does not match variable field that references it: \"+domToText$$module$build$src$core$xml(a)+\".\");this.setValue(b.getId())}toXml(a){this.initModel();a.id=this.variable.getId();a.textContent=this.variable.getName();this.variable.getType()&&a.setAttribute(\"variabletype\",this.variable.getType());return a}saveState(a){var b=this.saveLegacyState(FieldVariable$$module$build$src$core$field_variable);\nif(b!==null)return b;this.initModel();b={id:this.variable.getId()};a&&(b.name=this.variable.getName(),b.type=this.variable.getType());return b}loadState(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.loadLegacyState(FieldVariable$$module$build$src$core$field_variable,a)||(a=$.getOrCreateVariablePackage$$module$build$src$core$variables(b.workspace,a.id||null,a.name,a.type||\"\"),this.setValue(a.getId()))}setSourceBlock(a){if(a.isShadow())throw Error(\"Variable fields are not allowed to exist on shadow blocks.\");\nsuper.setSourceBlock(a)}getValue(){return this.variable?this.variable.getId():null}getText(){return this.variable?this.variable.getName():\"\"}getVariable(){return this.variable}getDefaultType(){return this.defaultType}getValidator(){return this.variable?this.validator_:null}doClassValidation_(a){if(a===null)return null;var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;b=$.getVariable$$module$build$src$core$variables(b.workspace,a);if(!b)return console.warn(\"Variable id doesn't point to a real variable! ID was \"+\na),null;b=b.getType();return this.typeIsAllowed(b)?a:(console.warn(\"Variable type doesn't match this field! Type was \"+b),null)}doValueUpdate_(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.variable=$.getVariable$$module$build$src$core$variables(b.workspace,a);super.doValueUpdate_(a)}typeIsAllowed(a){const b=this.getVariableTypes();if(!b)return!0;for(let c=0;c-Infinity&&(a.min=`${this.min_}`,setState$$module$build$src$core$utils$aria(a,State$$module$build$src$core$utils$aria.VALUEMIN,this.min_));this.max_c.isInFlyout=!0);this.addBlockListeners(a);return new FlyoutItem$$module$build$src$core$flyout_item(a,BLOCK_TYPE$$module$build$src$core$block_flyout_inflater)}createBlock(a,b){a.blockxml?(a=typeof a.blockxml===\"string\"?$.textToDom$$module$build$src$core$utils$xml(a.blockxml):a.blockxml,b=domToBlockInternal$$module$build$src$core$xml(a,b)):(a.enabled===void 0&&(a.enabled=a.disabled!==\"true\"&&a.disabled!==!0),a.disabledReasons===\nvoid 0&&a.enabled===!1&&(a.disabledReasons=[MANUALLY_DISABLED$$module$build$src$core$constants]),\"x\"in a&&delete a.x,\"y\"in a&&delete a.y,b=appendInternal$$module$build$src$core$serialization$blocks(a,b));return b}gapForItem(a,b){let c;a.gap?c=parseInt(String(a.gap)):a.blockxml&&(a=typeof a.blockxml===\"string\"?$.textToDom$$module$build$src$core$utils$xml(a.blockxml):a.blockxml,c=parseInt(a.getAttribute(\"gap\")));return!c||isNaN(c)?b:c}disposeItem(a){a=a.getElement();a instanceof BlockSvg$$module$build$src$core$block_svg&&\n(this.removeListeners(a.id),a.dispose(!1,!1))}removeListeners(a){let b;((b=this.listeners.get(a))!=null?b:[]).forEach(c=>unbind$$module$build$src$core$browser_events(c));this.listeners.delete(a)}setFlyout(a){if(this.flyout!==a){if(this.flyout){let c;(c=this.flyout.targetWorkspace)==null||c.removeChangeListener(this.capacityWrapper)}this.flyout=a;var b;(b=this.flyout.targetWorkspace)==null||b.addChangeListener(this.capacityWrapper)}}updateStateBasedOnCapacity(a){let b,c;const d=(b=this.flyout)==null?\nvoid 0:(c=b.targetWorkspace)==null?void 0:c.isCapacityAvailable(getBlockTypeCounts$$module$build$src$core$common(a));for(;a;)a.setDisabledReason(!d,WORKSPACE_AT_BLOCK_CAPACITY_DISABLED_REASON$$module$build$src$core$block_flyout_inflater),a=a.getNextBlock()}addBlockListeners(a){const b=[];b.push(conditionalBind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointerdown\",a,c=>{let d,e;const f=(d=this.flyout)==null?void 0:(e=d.targetWorkspace)==null?void 0:e.getGesture(c);f&&this.flyout&&(f.setStartBlock(a),\nf.handleFlyoutStart(c,this.flyout))}));b.push(bind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointermove\",null,()=>{let c,d;((c=this.flyout)==null?0:(d=c.targetWorkspace)==null?0:d.isDragging())||a.addSelect()}));b.push(bind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointerleave\",null,()=>{let c,d;((c=this.flyout)==null?0:(d=c.targetWorkspace)==null?0:d.isDragging())||a.removeSelect()}));this.listeners.set(a.id,b)}filterFlyoutBasedOnCapacity(a){!this.flyout||a&&a.type!==EventType$$module$build$src$core$events$type.BLOCK_CREATE&&\na.type!==EventType$$module$build$src$core$events$type.BLOCK_DELETE||this.flyout.getWorkspace().getTopBlocks(!1).forEach(b=>{this.permanentlyDisabledBlocks.has(b)||this.updateStateBasedOnCapacity(b)})}getType(){return BLOCK_TYPE$$module$build$src$core$block_flyout_inflater}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,BLOCK_TYPE$$module$build$src$core$block_flyout_inflater,BlockFlyoutInflater$$module$build$src$core$block_flyout_inflater);\nvar module$build$src$core$block_flyout_inflater={};module$build$src$core$block_flyout_inflater.BlockFlyoutInflater=BlockFlyoutInflater$$module$build$src$core$block_flyout_inflater;var module$build$src$core$interfaces$i_paster={};module$build$src$core$interfaces$i_paster.isPaster=isPaster$$module$build$src$core$interfaces$i_paster;var module$build$src$core$interfaces$i_rendered_element={};module$build$src$core$interfaces$i_rendered_element.isRenderedElement=isRenderedElement$$module$build$src$core$interfaces$i_rendered_element;var ConstantProvider$$module$build$src$core$renderers$geras$constants=class extends ConstantProvider$$module$build$src$core$renderers$common$constants{constructor(){super();this.FIELD_TEXT_BASELINE_CENTER=!1;this.DARK_PATH_OFFSET=1;this.MAX_BOTTOM_WIDTH=30;this.STATEMENT_BOTTOM_SPACER=-this.NOTCH_HEIGHT/2}getCSS_(a){return super.getCSS_(a).concat([`${a} .blocklyInsertionMarker>.blocklyPathLight,`,`${a} .blocklyInsertionMarker>.blocklyPathDark {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\"stroke: none;\",\n\"}\"])}},module$build$src$core$renderers$geras$constants={};module$build$src$core$renderers$geras$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$geras$constants;var Highlighter$$module$build$src$core$renderers$geras$highlighter=class{constructor(a){this.inlineSteps_=this.steps_=\"\";this.info_=a;this.RTL_=this.info_.RTL;a=a.getRenderer();this.constants_=a.getConstants();this.highlightConstants_=a.getHighlightConstants();this.highlightOffset=this.highlightConstants_.OFFSET;this.outsideCornerPaths_=this.highlightConstants_.OUTSIDE_CORNER;this.insideCornerPaths_=this.highlightConstants_.INSIDE_CORNER;this.puzzleTabPaths_=this.highlightConstants_.PUZZLE_TAB;this.notchPaths_=\nthis.highlightConstants_.NOTCH;this.startPaths_=this.highlightConstants_.START_HAT;this.jaggedTeethPaths_=this.highlightConstants_.JAGGED_TEETH}getPath(){return this.steps_+\"\\n\"+this.inlineSteps_}drawTopCorner(a){this.steps_+=moveBy$$module$build$src$core$utils$svg_paths(a.xPos,this.info_.startY);for(let b=0,c;c=a.elements[b];b++)Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(c)?this.steps_+=this.highlightConstants_.START_POINT:Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(c)?\nthis.steps_+=this.outsideCornerPaths_.topLeft(this.RTL_):Types$$module$build$src$core$renderers$measurables$types.isPreviousConnection(c)?this.steps_+=this.notchPaths_.pathLeft:Types$$module$build$src$core$renderers$measurables$types.isHat(c)?this.steps_+=this.startPaths_.path(this.RTL_):Types$$module$build$src$core$renderers$measurables$types.isSpacer(c)&&c.width!==0&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",c.xPos+c.width-this.highlightOffset));this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",\na.xPos+a.width-this.highlightOffset)}drawJaggedEdge_(a){this.info_.RTL&&(this.steps_+=this.jaggedTeethPaths_.pathLeft+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a.height-this.jaggedTeethPaths_.height-this.highlightOffset))}drawValueInput(a){const b=a.getLastInput();if(this.RTL_){const c=a.height-b.connectionHeight;this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos+b.width-this.highlightOffset,a.yPos)+this.puzzleTabPaths_.pathDown(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",\nc)}else this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos+b.width,a.yPos)+this.puzzleTabPaths_.pathDown(this.RTL_)}drawStatementInput(a){const b=a.getLastInput();if(b)if(this.RTL_){const c=a.height-2*this.insideCornerPaths_.height;this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos,a.yPos)+this.insideCornerPaths_.pathTop(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",c)+this.insideCornerPaths_.pathBottom(this.RTL_)+lineTo$$module$build$src$core$utils$svg_paths(a.width-\nb.xPos-this.insideCornerPaths_.width,0)}else this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos,a.yPos+a.height)+this.insideCornerPaths_.pathBottom(this.RTL_)+lineTo$$module$build$src$core$utils$svg_paths(a.width-b.xPos-this.insideCornerPaths_.width,0)}drawRightSideRow(a){const b=a.xPos+a.width-this.highlightOffset;a instanceof SpacerRow$$module$build$src$core$renderers$measurables$spacer_row&&a.followsStatement&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",b));\nthis.RTL_&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",b),a.height>this.highlightOffset&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+a.height-this.highlightOffset)))}drawBottomRow(a){if(this.RTL_)this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.baseline-this.highlightOffset);else{const b=this.info_.bottomRow.elements[0];Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(b)?this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(a.xPos+\nthis.highlightOffset,a.baseline-this.highlightOffset):Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(b)&&(this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(a.xPos,a.baseline),this.steps_+=this.outsideCornerPaths_.bottomLeft())}}drawLeft(){var a=this.info_.outputConnection;a&&(a=a.connectionOffsetY+a.height,this.RTL_?this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(this.info_.startX,a):(this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(this.info_.startX+\nthis.highlightOffset,this.info_.bottomRow.baseline-this.highlightOffset),this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a)),this.steps_+=this.puzzleTabPaths_.pathUp(this.RTL_));this.RTL_||(a=this.info_.topRow,Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(a.elements[0])?this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",this.outsideCornerPaths_.height):this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.capline+this.highlightOffset))}drawInlineInput(a){const b=\nthis.highlightOffset,c=a.xPos+a.connectionWidth;var d=a.centerline-a.height/2;const e=a.width-a.connectionWidth,f=d+b;this.RTL_?(d=a.connectionOffsetY-b,a=a.height-(a.connectionOffsetY+a.connectionHeight)+b,this.inlineSteps_+=moveTo$$module$build$src$core$utils$svg_paths(c-b,f)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",d)+this.puzzleTabPaths_.pathDown(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",e)):this.inlineSteps_+=\nmoveTo$$module$build$src$core$utils$svg_paths(a.xPos+a.width+b,f)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a.height)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-e)+moveTo$$module$build$src$core$utils$svg_paths(c,d+a.connectionOffsetY)+this.puzzleTabPaths_.pathDown(this.RTL_)}},module$build$src$core$renderers$geras$highlighter={};module$build$src$core$renderers$geras$highlighter.Highlighter=Highlighter$$module$build$src$core$renderers$geras$highlighter;var Drawer$$module$build$src$core$renderers$geras$drawer=class extends Drawer$$module$build$src$core$renderers$common$drawer{constructor(a,b){super(a,b);this.highlighter_=new Highlighter$$module$build$src$core$renderers$geras$highlighter(b)}draw(){this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();const a=this.block_.pathObject;a.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);a.setHighlightPath(this.highlighter_.getPath());this.info_.RTL&&a.flipRTL();this.recordSizeOnBlock_()}drawTop_(){this.highlighter_.drawTopCorner(this.info_.topRow);\nthis.highlighter_.drawRightSideRow(this.info_.topRow);super.drawTop_()}drawJaggedEdge_(a){this.highlighter_.drawJaggedEdge_(a);super.drawJaggedEdge_(a)}drawValueInput_(a){this.highlighter_.drawValueInput(a);super.drawValueInput_(a)}drawStatementInput_(a){this.highlighter_.drawStatementInput(a);super.drawStatementInput_(a)}drawRightSideRow_(a){this.highlighter_.drawRightSideRow(a);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",a.xPos+a.width)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",\na.yPos+a.height)}drawBottom_(){this.highlighter_.drawBottomRow(this.info_.bottomRow);super.drawBottom_()}drawLeft_(){this.highlighter_.drawLeft();super.drawLeft_()}drawInlineInput_(a){this.highlighter_.drawInlineInput(a);super.drawInlineInput_(a)}positionInlineInputConnection_(a){const b=a.centerline-a.height/2;if(a.connectionModel){let c=a.xPos+a.connectionWidth+this.constants_.DARK_PATH_OFFSET;this.info_.RTL&&(c*=-1);a.connectionModel.setOffsetInBlock(c,b+a.connectionOffsetY+this.constants_.DARK_PATH_OFFSET)}}positionStatementInputConnection_(a){const b=\na.getLastInput();if(b==null?0:b.connectionModel){let c=a.xPos+a.statementEdge+b.notchOffset;c=this.info_.RTL?c*-1:c+this.constants_.DARK_PATH_OFFSET;b.connectionModel.setOffsetInBlock(c,a.yPos+this.constants_.DARK_PATH_OFFSET)}}positionExternalValueConnection_(a){const b=a.getLastInput();if(b&&b.connectionModel){let c=a.xPos+a.width+this.constants_.DARK_PATH_OFFSET;this.info_.RTL&&(c*=-1);b.connectionModel.setOffsetInBlock(c,a.yPos)}}positionNextConnection_(){const a=this.info_.bottomRow;if(a.connection){const b=\na.connection,c=b.xPos;b.connectionModel.setOffsetInBlock((this.info_.RTL?-c:c)+this.constants_.DARK_PATH_OFFSET/2,a.baseline+this.constants_.DARK_PATH_OFFSET)}}},module$build$src$core$renderers$geras$drawer={};module$build$src$core$renderers$geras$drawer.Drawer=Drawer$$module$build$src$core$renderers$geras$drawer;var HighlightConstantProvider$$module$build$src$core$renderers$geras$highlight_constants=class{constructor(a){this.OFFSET=.5;this.constantProvider=a;this.START_POINT=moveBy$$module$build$src$core$utils$svg_paths(this.OFFSET,this.OFFSET)}init(){this.INSIDE_CORNER=this.makeInsideCorner();this.OUTSIDE_CORNER=this.makeOutsideCorner();this.PUZZLE_TAB=this.makePuzzleTab();this.NOTCH=this.makeNotch();this.JAGGED_TEETH=this.makeJaggedTeeth();this.START_HAT=this.makeStartHat()}makeInsideCorner(){const a=this.constantProvider.CORNER_RADIUS,\nb=this.OFFSET,c=(1-Math.SQRT1_2)*(a+b)-b,d=moveBy$$module$build$src$core$utils$svg_paths(c,c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(-c-b,a-c)),e=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a+b,point$$module$build$src$core$utils$svg_paths(a+b,a+b)),f=moveBy$$module$build$src$core$utils$svg_paths(c,-c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a+b,point$$module$build$src$core$utils$svg_paths(a-c,c+b));return{width:a+\nb,height:a,pathTop(g){return g?d:\"\"},pathBottom(g){return g?e:f}}}makeOutsideCorner(){const a=this.constantProvider.CORNER_RADIUS,b=this.OFFSET,c=(1-Math.SQRT1_2)*(a-b)+b,d=moveBy$$module$build$src$core$utils$svg_paths(c,c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(a-c,-c+b)),e=moveBy$$module$build$src$core$utils$svg_paths(b,a)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(a,-a+\nb)),f=-c,g=moveBy$$module$build$src$core$utils$svg_paths(c,f)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(-c+b,-f-a));return{height:a,topLeft(h){return h?d:e},bottomLeft(){return g}}}makePuzzleTab(){const a=this.constantProvider.TAB_WIDTH,b=this.constantProvider.TAB_HEIGHT,c=moveBy$$module$build$src$core$utils$svg_paths(-2,-b+2.5+.9)+lineTo$$module$build$src$core$utils$svg_paths(a*-.45,-2.1),d=lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",\n2.5)+moveBy$$module$build$src$core$utils$svg_paths(-a*.97,2.5)+curve$$module$build$src$core$utils$svg_paths(\"q\",[point$$module$build$src$core$utils$svg_paths(-a*.05,10),point$$module$build$src$core$utils$svg_paths(a*.3,9.5)])+moveBy$$module$build$src$core$utils$svg_paths(a*.67,-1.9)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",2.5),e=lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",-1.5)+moveBy$$module$build$src$core$utils$svg_paths(a*-.92,-.5)+curve$$module$build$src$core$utils$svg_paths(\"q\",\n[point$$module$build$src$core$utils$svg_paths(a*-.19,-5.5),point$$module$build$src$core$utils$svg_paths(0,-11)])+moveBy$$module$build$src$core$utils$svg_paths(a*.92,1),f=moveBy$$module$build$src$core$utils$svg_paths(-5,b-.7)+lineTo$$module$build$src$core$utils$svg_paths(a*.46,-2.1);return{width:a,height:b,pathUp(g){return g?c:e},pathDown(g){return g?d:f}}}makeNotch(){return{pathLeft:lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",this.OFFSET)+this.constantProvider.NOTCH.pathLeft}}makeJaggedTeeth(){return{pathLeft:lineTo$$module$build$src$core$utils$svg_paths(5.1,\n2.6)+moveBy$$module$build$src$core$utils$svg_paths(-10.2,6.8)+lineTo$$module$build$src$core$utils$svg_paths(5.1,2.6),height:12,width:10.2}}makeStartHat(){const a=this.constantProvider.START_HAT.height,b=moveBy$$module$build$src$core$utils$svg_paths(25,-8.7)+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(29.7,-6.2),point$$module$build$src$core$utils$svg_paths(57.2,-.5),point$$module$build$src$core$utils$svg_paths(75,8.7)]),c=curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(17.8,-9.2),point$$module$build$src$core$utils$svg_paths(45.3,-14.9),point$$module$build$src$core$utils$svg_paths(75,-8.7)])+moveTo$$module$build$src$core$utils$svg_paths(100.5,a+.5);return{path(d){return d?b:c}}}},module$build$src$core$renderers$geras$highlight_constants={};module$build$src$core$renderers$geras$highlight_constants.HighlightConstantProvider=HighlightConstantProvider$$module$build$src$core$renderers$geras$highlight_constants;var InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input=class extends InlineInput$$module$build$src$core$renderers$measurables$inline_input{constructor(a,b){super(a,b);this.constants_=a;this.connectedBlock&&(this.width+=this.constants_.DARK_PATH_OFFSET,this.height+=this.constants_.DARK_PATH_OFFSET)}},module$build$src$core$renderers$geras$measurables$inline_input={};module$build$src$core$renderers$geras$measurables$inline_input.InlineInput=InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input;var StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input=class extends StatementInput$$module$build$src$core$renderers$measurables$statement_input{constructor(a,b){super(a,b);this.constants_=a;this.connectedBlock&&(this.height+=this.constants_.DARK_PATH_OFFSET)}},module$build$src$core$renderers$geras$measurables$statement_input={};module$build$src$core$renderers$geras$measurables$statement_input.StatementInput=StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input;var RenderInfo$$module$build$src$core$renderers$geras$info=class extends RenderInfo$$module$build$src$core$renderers$common$info{constructor(a,b){super(a,b);this.renderer_=a}getRenderer(){return this.renderer_}populateBottomRow_(){super.populateBottomRow_();this.block_.inputList.length&&this.block_.inputList[this.block_.inputList.length-1]instanceof StatementInput$$module$build$src$core$inputs$statement_input||(this.bottomRow.minHeight=this.constants_.MEDIUM_PADDING-this.constants_.DARK_PATH_OFFSET)}addInput_(a,\nb){if(this.isInline&&a instanceof $.ValueInput$$module$build$src$core$inputs$value_input)b.elements.push(new InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input(this.constants_,a)),b.hasInlineInput=!0;else if(a instanceof StatementInput$$module$build$src$core$inputs$statement_input)b.elements.push(new StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input(this.constants_,a)),b.hasStatement=!0;else if(a instanceof $.ValueInput$$module$build$src$core$inputs$value_input)b.elements.push(new ExternalValueInput$$module$build$src$core$renderers$measurables$external_value_input(this.constants_,\na)),b.hasExternalInput=!0;else if(a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input)b.minHeight=Math.max(b.minHeight,this.constants_.DUMMY_INPUT_MIN_HEIGHT),b.hasDummyInput=!0;this.isInline||b.align!==null||(b.align=a.align)}addElemSpacing_(){let a=!1;for(let c=0,d;d=this.rows[c];c++)d.hasExternalInput&&(a=!0);for(let c=0,d;d=this.rows[c];c++){var b=d.elements;d.elements=[];d.startsWithElemSpacer()&&d.elements.push(new InRowSpacer$$module$build$src$core$renderers$measurables$in_row_spacer(this.constants_,\nthis.getInRowSpacing_(null,b[0])));if(b.length){for(let e=0;e0&&this.addAlignmentPadding_(e,a),a=e.width)}else super.alignRowElements_()}getDesiredRowWidth_(a){return this.isInline&&a.hasStatement?this.statementEdge+\nthis.constants_.MAX_BOTTOM_WIDTH+this.startX:super.getDesiredRowWidth_(a)}finalize_(){let a=0,b=0;for(let d=0,e;e=this.rows[d];d++){e.yPos=b;e.xPos=this.startX;b+=e.height;a=Math.max(a,e.widthWithConnectedBlocks);var c=b-this.topRow.ascenderHeight;e===this.bottomRow&&c>>/sprites.png);\\n height: 16px;\\n vertical-align: middle;\\n visibility: hidden;\\n width: 16px;\\n}\\n\\n.blocklyToolboxCategoryIconClosed {\\n background-position: -32px -1px;\\n}\\n\\n.blocklyToolbox[dir=\"RTL\"] .blocklyToolboxCategoryIconClosed {\\n background-position: 0 -1px;\\n}\\n\\n.blocklyToolboxSelected>.blocklyToolboxCategoryIconClosed {\\n background-position: -32px -17px;\\n}\\n\\n.blocklyToolbox[dir=\"RTL\"] .blocklyToolboxSelected>.blocklyToolboxCategoryIconClosed {\\n background-position: 0 -17px;\\n}\\n\\n.blocklyToolboxCategoryIconOpen {\\n background-position: -16px -1px;\\n}\\n\\n.blocklyToolboxSelected>.blocklyToolboxCategoryIconOpen {\\n background-position: -16px -17px;\\n}\\n\\n.blocklyToolboxCategoryLabel {\\n cursor: default;\\n font: 16px sans-serif;\\n padding: 0 3px;\\n vertical-align: middle;\\n}\\n\\n.blocklyToolboxDelete .blocklyToolboxCategoryLabel {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyToolboxSelected .blocklyToolboxCategoryLabel {\\n color: #fff;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX_ITEM,ToolboxCategory$$module$build$src$core$toolbox$category.registrationName,ToolboxCategory$$module$build$src$core$toolbox$category);var module$build$src$core$toolbox$category={};module$build$src$core$toolbox$category.ToolboxCategory=ToolboxCategory$$module$build$src$core$toolbox$category;var ToolboxSeparator$$module$build$src$core$toolbox$separator=class extends ToolboxItem$$module$build$src$core$toolbox$toolbox_item{constructor(a,b){super(a,b);this.cssConfig_={container:\"blocklyTreeSeparator\"};this.htmlDiv=null;Object.assign(this.cssConfig_,a.cssconfig||a.cssConfig)}init(){this.createDom_()}createDom_(){const a=document.createElement(\"div\");a.tabIndex=-1;a.id=this.getId();const b=this.cssConfig_.container;b&&addClass$$module$build$src$core$utils$dom(a,b);return this.htmlDiv=a}getDiv(){return this.htmlDiv}dispose(){removeNode$$module$build$src$core$utils$dom(this.htmlDiv)}};\nToolboxSeparator$$module$build$src$core$toolbox$separator.registrationName=\"sep\";register$$module$build$src$core$css('\\n.blocklyTreeSeparator {\\n border-bottom: solid #e5e5e5 1px;\\n height: 0;\\n margin: 5px 0;\\n}\\n\\n.blocklyToolbox[layout=\"h\"] .blocklyTreeSeparator {\\n border-right: solid #e5e5e5 1px;\\n border-bottom: none;\\n height: auto;\\n margin: 0 5px 0 5px;\\n padding: 5px 0;\\n width: 0;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX_ITEM,ToolboxSeparator$$module$build$src$core$toolbox$separator.registrationName,ToolboxSeparator$$module$build$src$core$toolbox$separator);var module$build$src$core$toolbox$separator={};module$build$src$core$toolbox$separator.ToolboxSeparator=ToolboxSeparator$$module$build$src$core$toolbox$separator;var CollapsibleToolboxCategory$$module$build$src$core$toolbox$collapsible_category=class extends ToolboxCategory$$module$build$src$core$toolbox$category{constructor(a,b,c){super(a,b,c);this.subcategoriesDiv_=null;this.expanded_=!1;this.toolboxItems_=[]}makeDefaultCssConfig_(){const a=super.makeDefaultCssConfig_();a.contents=\"blocklyToolboxCategoryGroup\";return a}parseContents_(a){if(\"custom\"in a)this.flyoutItems_=a.custom;else{const b=a.contents;if(b){this.flyoutItems_=[];a=!0;for(let c=0;cb.dispose());this.contents.clear();this.renderContents_(a.contents);this.position();this.handleToolboxItemResize()}renderContents_(a){const b=document.createDocumentFragment();\nfor(let c=0;c\n{a.refreshTheme&&a.refreshTheme()})}refreshSelection(){this.selectedItem_&&this.selectedItem_.isSelectable()&&this.selectedItem_.getContents().length&&this.flyout.show(this.selectedItem_.getContents())}setVisible(a){this.isVisible_!==a&&(this.HtmlDiv.style.display=a?\"block\":\"none\",this.isVisible_=a,this.workspace_.recordDragTargets())}autoHide(a){!a&&this.flyout&&this.flyout.autoClose&&this.clearSelection()}setSelectedItem(a){const b=this.selectedItem_;!a&&!b||a&&!isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item(a)||\n(this.shouldDeselectItem_(b,a)&&b!==null&&this.deselectItem_(b),this.shouldSelectItem_(b,a)&&a!==null&&this.selectItem_(b,a),this.updateFlyout_(b,a),this.fireSelectEvent(b,a))}shouldDeselectItem_(a,b){return a!==null&&(!a.isCollapsible()||a!==b)}shouldSelectItem_(a,b){return b!==null&&b!==a}deselectItem_(a){this.selectedItem_=null;this.previouslySelectedItem_=a;a.setSelected(!1);setState$$module$build$src$core$utils$aria(this.contentsDiv_,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,\"\")}selectItem_(a,\nb){this.selectedItem_=b;this.previouslySelectedItem_=a;b.setSelected(!0);setState$$module$build$src$core$utils$aria(this.contentsDiv_,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,b.getId())}selectItemByPosition(a){(a=this.getToolboxItems()[a])&&this.setSelectedItem(a)}updateFlyout_(a,b){b&&(a!==b||b.isCollapsible())&&b.getContents().length?(this.flyout.show(b.getContents()),this.flyout.scrollToStart()):this.flyout.hide()}fireSelectEvent(a,b){const c=a&&a.getName();let d=b&&b.getName();\na===b&&(d=null);a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.TOOLBOX_ITEM_SELECT))(c,d,this.workspace_.id);fire$$module$build$src$core$events$utils(a)}selectParent(){return this.selectedItem_?this.selectedItem_.isCollapsible()&&this.selectedItem_.isExpanded()?(this.selectedItem_.toggleExpanded(),!0):this.selectedItem_.getParent()&&this.selectedItem_.getParent().isSelectable()?(this.setSelectedItem(this.selectedItem_.getParent()),!0):!1:!1}selectChild(){if(!this.selectedItem_||\n!this.selectedItem_.isCollapsible())return!1;const a=this.selectedItem_;a.isExpanded()?this.selectNext():a.toggleExpanded();return!0}selectNext(){if(!this.selectedItem_)return!1;const a=[...this.contents.values()];let b=a.indexOf(this.selectedItem_)+1;if(b>-1&&b-1&&ba.dispose());for(let a=0;ac.isSelectable()))!=null?b:null}return null}getNestedTrees(){return[]}lookUpFocusableNode(a){return this.getToolboxItemById(a)}onTreeFocus(a,\nb){a!==this?this.getSelectedItem()!==a&&this.setSelectedItem(a):this.clearSelection()}onTreeBlur(a){let b;a&&a===((b=this.flyout)==null?void 0:b.getWorkspace())||this.autoHide(!1)}};register$$module$build$src$core$css('\\n.blocklyToolboxDelete {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyToolboxGrab {\\n cursor: url(\"<<>>/handclosed.cur\"), auto;\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n}\\n\\n/* Category tree in Toolbox. */\\n.blocklyToolbox {\\n box-sizing: border-box;\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background-color: #ddd;\\n overflow-x: visible;\\n overflow-y: auto;\\n padding: 4px 0 4px 0;\\n position: absolute;\\n z-index: 70; /* so blocks go under toolbox when dragging */\\n -webkit-tap-highlight-color: transparent; /* issue #1345 */\\n}\\n\\n.blocklyToolboxCategoryGroup {\\n display: flex;\\n flex-wrap: wrap;\\n flex-direction: column;\\n}\\n\\n.blocklyToolboxCategoryGroup:focus {\\n outline: none;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX,DEFAULT$$module$build$src$core$registry,Toolbox$$module$build$src$core$toolbox$toolbox);var module$build$src$core$toolbox$toolbox={};module$build$src$core$toolbox$toolbox.Toolbox=Toolbox$$module$build$src$core$toolbox$toolbox;var module$build$src$core$interfaces$i_navigation_policy={};var VERSION$$module$build$src$core$blockly=\"12.3.1\",INPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE,OUTPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE,NEXT_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT,PREVIOUS_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT,\nTOOLBOX_AT_TOP$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.TOP,TOOLBOX_AT_BOTTOM$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.BOTTOM,TOOLBOX_AT_LEFT$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.LEFT,TOOLBOX_AT_RIGHT$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.RIGHT,svgResize$$module$build$src$core$blockly=svgResize$$module$build$src$core$common,getMainWorkspace$$module$build$src$core$blockly=\ngetMainWorkspace$$module$build$src$core$common,getSelected$$module$build$src$core$blockly=getSelected$$module$build$src$core$common,defineBlocksWithJsonArray$$module$build$src$core$blockly=defineBlocksWithJsonArray$$module$build$src$core$common,setParentContainer$$module$build$src$core$blockly=setParentContainer$$module$build$src$core$common,COLLAPSE_CHARS$$module$build$src$core$blockly=COLLAPSE_CHARS$$module$build$src$core$internal_constants,OPPOSITE_TYPE$$module$build$src$core$blockly=OPPOSITE_TYPE$$module$build$src$core$internal_constants,\nRENAME_VARIABLE_ID$$module$build$src$core$blockly=RENAME_VARIABLE_ID$$module$build$src$core$internal_constants,DELETE_VARIABLE_ID$$module$build$src$core$blockly=DELETE_VARIABLE_ID$$module$build$src$core$internal_constants,COLLAPSED_INPUT_NAME$$module$build$src$core$blockly=COLLAPSED_INPUT_NAME$$module$build$src$core$constants,COLLAPSED_FIELD_NAME$$module$build$src$core$blockly=COLLAPSED_FIELD_NAME$$module$build$src$core$constants,VARIABLE_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$variables,\nVARIABLE_DYNAMIC_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$variables_dynamic,PROCEDURE_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$procedures;Workspace$$module$build$src$core$workspace.prototype.newBlock=function(a,b){return new Block$$module$build$src$core$block(this,a,b)};WorkspaceSvg$$module$build$src$core$workspace_svg.prototype.newBlock=function(a,b){return new BlockSvg$$module$build$src$core$block_svg(this,a,b)};\nWorkspace$$module$build$src$core$workspace.prototype.newComment=function(a){return new WorkspaceComment$$module$build$src$core$comments$workspace_comment(this,a)};WorkspaceSvg$$module$build$src$core$workspace_svg.prototype.newComment=function(a){return new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(this,a)};WorkspaceSvg$$module$build$src$core$workspace_svg.newTrashcan=function(a){return new Trashcan$$module$build$src$core$trashcan(a)};\nMiniWorkspaceBubble$$module$build$src$core$bubbles$mini_workspace_bubble.prototype.newWorkspaceSvg=function(a){return new WorkspaceSvg$$module$build$src$core$workspace_svg(a)};$.Names$$module$build$src$core$names.prototype.populateProcedures=function(a){a=allProcedures$$module$build$src$core$procedures(a);a=a[0].concat(a[1]);for(let b=0;b0,text:c.replace(\"%1\",d.getText()),callback:$.callbackFactory$$module$build$src$core$contextmenu(this,b)})}else if(this.type===\"variables_get_dynamic\"||this.type===\"variables_get_reporter_dynamic\")c={text:$.Msg$$module$build$src$core$msg.RENAME_VARIABLE,\nenabled:!0,callback:renameOptionCallbackFactory$$module$build$src$blocks$variables_dynamic(this)},d=this.getField(\"VAR\").getText(),d={text:$.Msg$$module$build$src$core$msg.DELETE_VARIABLE.replace(\"%1\",d),enabled:!0,callback:deleteOptionCallbackFactory$$module$build$src$blocks$variables_dynamic(this)},a.unshift(c),a.unshift(d)},onchange:function(a){a=this.getFieldValue(\"VAR\");a=$.getVariable$$module$build$src$core$variables(this.workspace,a);this.type===\"variables_get_dynamic\"?this.outputConnection.setCheck(a.getType()):\nthis.getInput(\"VALUE\").connection.setCheck(a.getType())}},renameOptionCallbackFactory$$module$build$src$blocks$variables_dynamic=function(a){return function(){const b=a.workspace,c=a.getField(\"VAR\").getVariable();$.renameVariable$$module$build$src$core$variables(b,c)}},deleteOptionCallbackFactory$$module$build$src$blocks$variables_dynamic=function(a){return function(){const b=a.getField(\"VAR\").getVariable();b&&$.deleteVariable$$module$build$src$core$variables(b.getWorkspace(),b,a)}};\n$.registerMixin$$module$build$src$core$extensions(\"contextMenu_variableDynamicSetterGetter\",CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables_dynamic);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$variables_dynamic);var module$build$src$blocks$variables_dynamic={blocks:blocks$$module$build$src$blocks$variables_dynamic};var blocks$$module$build$src$blocks$variables=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"variables_get\",message0:\"%1\",args0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_VARIABLES_DEFAULT_NAME}\"}],output:null,style:\"variable_blocks\",helpUrl:\"%{BKY_VARIABLES_GET_HELPURL}\",tooltip:\"%{BKY_VARIABLES_GET_TOOLTIP}\",extensions:[\"contextMenu_variableSetterGetter\"]},{type:\"variables_set\",message0:\"%{BKY_VARIABLES_SET}\",args0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_VARIABLES_DEFAULT_NAME}\"},\n{type:\"input_value\",name:\"VALUE\"}],previousStatement:null,nextStatement:null,style:\"variable_blocks\",tooltip:\"%{BKY_VARIABLES_SET_TOOLTIP}\",helpUrl:\"%{BKY_VARIABLES_SET_HELPURL}\",extensions:[\"contextMenu_variableSetterGetter\"]}]),CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables={customContextMenu:function(a){if(!this.isInFlyout){if(this.type===\"variables_get\"){var b=\"variables_set\";var c=$.Msg$$module$build$src$core$msg.VARIABLES_GET_CREATE_SET}else b=\"variables_get\",\nc=$.Msg$$module$build$src$core$msg.VARIABLES_SET_CREATE_GET;var d=this.getField(\"VAR\");b={type:b,fields:{VAR:d.saveState(!0)}};a.push({enabled:this.workspace.remainingCapacity()>0,text:c.replace(\"%1\",d.getText()),callback:$.callbackFactory$$module$build$src$core$contextmenu(this,b)})}else if(this.type===\"variables_get\"||this.type===\"variables_get_reporter\")c={text:$.Msg$$module$build$src$core$msg.RENAME_VARIABLE,enabled:!0,callback:renameOptionCallbackFactory$$module$build$src$blocks$variables(this)},\nd=this.getField(\"VAR\").getText(),d={text:$.Msg$$module$build$src$core$msg.DELETE_VARIABLE.replace(\"%1\",d),enabled:!0,callback:deleteOptionCallbackFactory$$module$build$src$blocks$variables(this)},a.unshift(c),a.unshift(d)}},renameOptionCallbackFactory$$module$build$src$blocks$variables=function(a){return function(){const b=a.workspace,c=a.getField(\"VAR\").getVariable();$.renameVariable$$module$build$src$core$variables(b,c)}},deleteOptionCallbackFactory$$module$build$src$blocks$variables=function(a){return function(){const b=\na.getField(\"VAR\").getVariable();b&&$.deleteVariable$$module$build$src$core$variables(b.getWorkspace(),b,a)}};$.registerMixin$$module$build$src$core$extensions(\"contextMenu_variableSetterGetter\",CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$variables);var module$build$src$blocks$variables={blocks:blocks$$module$build$src$blocks$variables};var blocks$$module$build$src$blocks$text=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"text\",message0:\"%1\",args0:[{type:\"field_input\",name:\"TEXT\",text:\"\"}],output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_TEXT_HELPURL}\",tooltip:\"%{BKY_TEXT_TEXT_TOOLTIP}\",extensions:[\"text_quotes\",\"parent_tooltip_when_inline\"]},{type:\"text_join\",message0:\"\",output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_JOIN_HELPURL}\",tooltip:\"%{BKY_TEXT_JOIN_TOOLTIP}\",mutator:\"text_join_mutator\"},\n{type:\"text_create_join_container\",message0:\"%{BKY_TEXT_CREATE_JOIN_TITLE_JOIN} %1 %2\",args0:[{type:\"input_dummy\"},{type:\"input_statement\",name:\"STACK\"}],style:\"text_blocks\",tooltip:\"%{BKY_TEXT_CREATE_JOIN_TOOLTIP}\",enableContextMenu:!1},{type:\"text_create_join_item\",message0:\"%{BKY_TEXT_CREATE_JOIN_ITEM_TITLE_ITEM}\",previousStatement:null,nextStatement:null,style:\"text_blocks\",tooltip:\"%{BKY_TEXT_CREATE_JOIN_ITEM_TOOLTIP}\",enableContextMenu:!1},{type:\"text_append\",message0:\"%{BKY_TEXT_APPEND_TITLE}\",\nargs0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_TEXT_APPEND_VARIABLE}\"},{type:\"input_value\",name:\"TEXT\"}],previousStatement:null,nextStatement:null,style:\"text_blocks\",extensions:[\"text_append_tooltip\"]},{type:\"text_length\",message0:\"%{BKY_TEXT_LENGTH_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Number\",style:\"text_blocks\",tooltip:\"%{BKY_TEXT_LENGTH_TOOLTIP}\",helpUrl:\"%{BKY_TEXT_LENGTH_HELPURL}\"},{type:\"text_isEmpty\",message0:\"%{BKY_TEXT_ISEMPTY_TITLE}\",\nargs0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Boolean\",style:\"text_blocks\",tooltip:\"%{BKY_TEXT_ISEMPTY_TOOLTIP}\",helpUrl:\"%{BKY_TEXT_ISEMPTY_HELPURL}\"},{type:\"text_indexOf\",message0:\"%{BKY_TEXT_INDEXOF_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:\"String\"},{type:\"field_dropdown\",name:\"END\",options:[[\"%{BKY_TEXT_INDEXOF_OPERATOR_FIRST}\",\"FIRST\"],[\"%{BKY_TEXT_INDEXOF_OPERATOR_LAST}\",\"LAST\"]]},{type:\"input_value\",name:\"FIND\",check:\"String\"}],output:\"Number\",style:\"text_blocks\",\nhelpUrl:\"%{BKY_TEXT_INDEXOF_HELPURL}\",inputsInline:!0,extensions:[\"text_indexOf_tooltip\"]},{type:\"text_charAt\",message0:\"%{BKY_TEXT_CHARAT_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:\"String\"},{type:\"field_dropdown\",name:\"WHERE\",options:[[\"%{BKY_TEXT_CHARAT_FROM_START}\",\"FROM_START\"],[\"%{BKY_TEXT_CHARAT_FROM_END}\",\"FROM_END\"],[\"%{BKY_TEXT_CHARAT_FIRST}\",\"FIRST\"],[\"%{BKY_TEXT_CHARAT_LAST}\",\"LAST\"],[\"%{BKY_TEXT_CHARAT_RANDOM}\",\"RANDOM\"]]}],output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_CHARAT_HELPURL}\",\ninputsInline:!0,mutator:\"text_charAt_mutator\"}]),GET_SUBSTRING_BLOCK$$module$build$src$blocks$text={init:function(){this.WHERE_OPTIONS_1=[[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FIRST,\"FIRST\"]];this.WHERE_OPTIONS_2=[[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_FROM_END,\n\"FROM_END\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_LAST,\"LAST\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"STRING\").setCheck(\"String\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_INPUT_IN_TEXT);const a=b=>{const c=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this[\"WHERE_OPTIONS_\"+b]});c.setValidator(function(d){const e=this.getValue();d=d===\n\"FROM_START\"||d===\"FROM_END\";d!==(e===\"FROM_START\"||e===\"FROM_END\")&&this.getSourceBlock().updateAt_(b,d)});return c};this.appendDummyInput(\"WHERE1_INPUT\").appendField(a(1),\"WHERE1\");this.appendDummyInput(\"AT1\");this.appendDummyInput(\"WHERE2_INPUT\").appendField(a(2),\"WHERE2\");this.appendDummyInput(\"AT2\");$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL);this.setInputsInline(!0);this.setOutput(!0,\n\"String\");this.updateAt_(1,!0);this.updateAt_(2,!0);this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");var b=this.getInput(\"AT1\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at1\",`${b}`);b=this.getInput(\"AT2\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at2\",`${b}`);return a},domToMutation:function(a){const b=\na.getAttribute(\"at1\")===\"true\";a=a.getAttribute(\"at2\")===\"true\";this.updateAt_(1,b);this.updateAt_(2,a)},updateAt_:function(a,b){this.removeInput(\"AT\"+a);this.removeInput(\"ORDINAL\"+a,!0);b?(this.appendValueInput(\"AT\"+a).setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\"+a).appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\"+a);a===2&&$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL&&(this.removeInput(\"TAIL\",\n!0),this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL));a===1&&(this.moveInputBefore(\"AT1\",\"WHERE2_INPUT\"),this.getInput(\"ORDINAL1\")&&this.moveInputBefore(\"ORDINAL1\",\"WHERE2_INPUT\"))}};blocks$$module$build$src$blocks$text.text_getSubstring=GET_SUBSTRING_BLOCK$$module$build$src$blocks$text;\nblocks$$module$build$src$blocks$text.text_changeCase={init:function(){const a=[[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_UPPERCASE,\"UPPERCASE\"],[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_LOWERCASE,\"LOWERCASE\"],[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_TITLECASE,\"TITLECASE\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"TEXT\").setCheck(\"String\").appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",\noptions:a}),\"CASE\");this.setOutput(!0,\"String\");this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_TOOLTIP)}};\nblocks$$module$build$src$blocks$text.text_trim={init:function(){const a=[[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_BOTH,\"BOTH\"],[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_LEFT,\"LEFT\"],[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_RIGHT,\"RIGHT\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_TRIM_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"TEXT\").setCheck(\"String\").appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a}),\n\"MODE\");this.setOutput(!0,\"String\");this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_TRIM_TOOLTIP)}};blocks$$module$build$src$blocks$text.text_print={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_PRINT_TITLE,args0:[{type:\"input_value\",name:\"TEXT\"}],previousStatement:null,nextStatement:null,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_PRINT_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_PRINT_HELPURL})}};\nvar PROMPT_COMMON$$module$build$src$blocks$text={updateType_:function(a){this.outputConnection.setCheck(a===\"NUMBER\"?\"Number\":\"String\")},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"type\",this.getFieldValue(\"TYPE\"));return a},domToMutation:function(a){this.updateType_(a.getAttribute(\"type\"))}};\nblocks$$module$build$src$blocks$text.text_prompt_ext=Object.assign({},PROMPT_COMMON$$module$build$src$blocks$text,{init:function(){var a=[[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_TEXT,\"TEXT\"],[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_NUMBER,\"NUMBER\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_PROMPT_HELPURL);this.setStyle(\"text_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});a.setValidator(b=>{this.updateType_(b)});this.appendValueInput(\"TEXT\").appendField(a,\n\"TYPE\");this.setOutput(!0,\"String\");this.setTooltip(()=>this.getFieldValue(\"TYPE\")===\"TEXT\"?$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_TEXT:$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_NUMBER)}});\nblocks$$module$build$src$blocks$text.text_prompt=Object.assign({},PROMPT_COMMON$$module$build$src$blocks$text,{init:function(){this.mixin(QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);var a=[[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_TEXT,\"TEXT\"],[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_NUMBER,\"NUMBER\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_PROMPT_HELPURL);this.setStyle(\"text_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});\na.setValidator(b=>{this.updateType_(b)});this.appendDummyInput().appendField(a,\"TYPE\").appendField(this.newQuote_(!0)).appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_input\",text:\"\"}),\"TEXT\").appendField(this.newQuote_(!1));this.setOutput(!0,\"String\");this.setTooltip(()=>this.getFieldValue(\"TYPE\")===\"TEXT\"?$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_TEXT:$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_NUMBER)}});\nblocks$$module$build$src$blocks$text.text_count={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_COUNT_MESSAGE0,args0:[{type:\"input_value\",name:\"SUB\",check:\"String\"},{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"Number\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_COUNT_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_COUNT_HELPURL})}};\nblocks$$module$build$src$blocks$text.text_replace={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_MESSAGE0,args0:[{type:\"input_value\",name:\"FROM\",check:\"String\"},{type:\"input_value\",name:\"TO\",check:\"String\"},{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"String\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_HELPURL})}};\nblocks$$module$build$src$blocks$text.text_reverse={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_MESSAGE0,args0:[{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"String\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_HELPURL})}};\nvar QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text={QUOTE_IMAGE_LEFT_DATAURI:\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC\",QUOTE_IMAGE_RIGHT_DATAURI:\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==\",\nQUOTE_IMAGE_WIDTH:12,QUOTE_IMAGE_HEIGHT:12,quoteField_:function(a){for(let b=0,c;c=this.inputList[b];b++)for(let d=0,e;e=c.fieldRow[d];d++)if(a===e.name){c.insertFieldAt(d,this.newQuote_(!0));c.insertFieldAt(d+2,this.newQuote_(!1));return}console.warn('field named \"'+a+'\" not found in '+this.toDevString())},newQuote_:function(a){a=this.RTL?!a:a;return $.fromJson$$module$build$src$core$field_registry({type:\"field_image\",src:a?this.QUOTE_IMAGE_LEFT_DATAURI:this.QUOTE_IMAGE_RIGHT_DATAURI,width:this.QUOTE_IMAGE_WIDTH,\nheight:this.QUOTE_IMAGE_HEIGHT,alt:a?\"\\u201c\":\"\\u201d\"})}},QUOTES_EXTENSION$$module$build$src$blocks$text=function(){this.mixin(QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);this.quoteField_(\"TEXT\")},JOIN_MUTATOR_MIXIN$$module$build$src$blocks$text={itemCount_:0,mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"items\",`${this.itemCount_}`);return a},domToMutation:function(a){this.itemCount_=parseInt(a.getAttribute(\"items\"),10);this.updateShape_()},\nsaveExtraState:function(){return{itemCount:this.itemCount_}},loadExtraState:function(a){this.itemCount_=a.itemCount;this.updateShape_()},decompose:function(a){const b=a.newBlock(\"text_create_join_container\");b.initSvg();let c=b.getInput(\"STACK\").connection;for(let d=0;d$.Msg$$module$build$src$core$msg.TEXT_INDEXOF_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\"0\":\"-1\"))},CHARAT_MUTATOR_MIXIN$$module$build$src$blocks$text={isAt_:!1,mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"at\",`${this.isAt_}`);return a},domToMutation:function(a){a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},updateAt_:function(a){this.removeInput(\"AT\",\n!0);this.removeInput(\"ORDINAL\",!0);a&&(this.appendValueInput(\"AT\").setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX));$.Msg$$module$build$src$core$msg.TEXT_CHARAT_TAIL&&(this.removeInput(\"TAIL\",!0),this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_CHARAT_TAIL));this.isAt_=a}},CHARAT_EXTENSION$$module$build$src$blocks$text=function(){this.getField(\"WHERE\").setValidator(function(a){a=\na===\"FROM_START\"||a===\"FROM_END\";const b=this.getSourceBlock();a!==b.isAt_&&b.updateAt_(a)});this.updateAt_(!0);this.setTooltip(()=>{var a=this.getFieldValue(\"WHERE\");let b=$.Msg$$module$build$src$core$msg.TEXT_CHARAT_TOOLTIP;(a===\"FROM_START\"||a===\"FROM_END\")&&(a=a===\"FROM_START\"?$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP:$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_END_TOOLTIP)&&(b+=\" \"+a.replace(\"%1\",this.workspace.options.oneBasedIndex?\"#1\":\"#0\"));return b})};\n$.register$$module$build$src$core$extensions(\"text_indexOf_tooltip\",INDEXOF_TOOLTIP_EXTENSION$$module$build$src$blocks$text);$.register$$module$build$src$core$extensions(\"text_quotes\",QUOTES_EXTENSION$$module$build$src$blocks$text);$.registerMixin$$module$build$src$core$extensions(\"quote_image_mixin\",QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);$.registerMutator$$module$build$src$core$extensions(\"text_join_mutator\",JOIN_MUTATOR_MIXIN$$module$build$src$blocks$text,JOIN_EXTENSION$$module$build$src$blocks$text);\n$.registerMutator$$module$build$src$core$extensions(\"text_charAt_mutator\",CHARAT_MUTATOR_MIXIN$$module$build$src$blocks$text,CHARAT_EXTENSION$$module$build$src$blocks$text);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$text);var module$build$src$blocks$text={blocks:blocks$$module$build$src$blocks$text};var blocks$$module$build$src$blocks$procedures={},PROCEDURE_DEF_COMMON$$module$build$src$blocks$procedures={setStatements_:function(a){this.hasStatements_!==a&&(a?(this.appendStatementInput(\"STACK\").appendField($.Msg$$module$build$src$core$msg.PROCEDURES_DEFNORETURN_DO),this.getInput(\"RETURN\")&&this.moveInputBefore(\"STACK\",\"RETURN\")):this.removeInput(\"STACK\",!0),this.hasStatements_=a)},updateParams_:function(){let a=\"\";this.arguments_.length&&(a=$.Msg$$module$build$src$core$msg.PROCEDURES_BEFORE_PARAMS+\n\" \"+this.arguments_.join(\", \"));$.disable$$module$build$src$core$events$utils();try{this.setFieldValue(a,\"PARAMS\")}finally{$.enable$$module$build$src$core$events$utils()}},mutationToDom:function(a){const b=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a&&b.setAttribute(\"name\",this.getFieldValue(\"NAME\"));for(let c=0;c\",\"GT\"],[\"\\u200f\\u2265\",\"GTE\"]]},{type:\"input_value\",name:\"B\"}],\ninputsInline:!0,output:\"Boolean\",style:\"logic_blocks\",helpUrl:\"%{BKY_LOGIC_COMPARE_HELPURL}\",extensions:[\"logic_compare\",\"logic_op_tooltip\"]},{type:\"logic_operation\",message0:\"%1 %2 %3\",args0:[{type:\"input_value\",name:\"A\",check:\"Boolean\"},{type:\"field_dropdown\",name:\"OP\",options:[[\"%{BKY_LOGIC_OPERATION_AND}\",\"AND\"],[\"%{BKY_LOGIC_OPERATION_OR}\",\"OR\"]]},{type:\"input_value\",name:\"B\",check:\"Boolean\"}],inputsInline:!0,output:\"Boolean\",style:\"logic_blocks\",helpUrl:\"%{BKY_LOGIC_OPERATION_HELPURL}\",extensions:[\"logic_op_tooltip\"]},\n{type:\"logic_negate\",message0:\"%{BKY_LOGIC_NEGATE_TITLE}\",args0:[{type:\"input_value\",name:\"BOOL\",check:\"Boolean\"}],output:\"Boolean\",style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_NEGATE_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_NEGATE_HELPURL}\"},{type:\"logic_null\",message0:\"%{BKY_LOGIC_NULL}\",output:null,style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_NULL_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_NULL_HELPURL}\"},{type:\"logic_ternary\",message0:\"%{BKY_LOGIC_TERNARY_CONDITION} %1\",args0:[{type:\"input_value\",name:\"IF\",check:\"Boolean\"}],\nmessage1:\"%{BKY_LOGIC_TERNARY_IF_TRUE} %1\",args1:[{type:\"input_value\",name:\"THEN\"}],message2:\"%{BKY_LOGIC_TERNARY_IF_FALSE} %1\",args2:[{type:\"input_value\",name:\"ELSE\"}],output:null,style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_TERNARY_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_TERNARY_HELPURL}\",extensions:[\"logic_ternary\"]},{type:\"controls_if_if\",message0:\"%{BKY_CONTROLS_IF_IF_TITLE_IF}\",nextStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_IF_TOOLTIP}\"},{type:\"controls_if_elseif\",\nmessage0:\"%{BKY_CONTROLS_IF_ELSEIF_TITLE_ELSEIF}\",previousStatement:null,nextStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_ELSEIF_TOOLTIP}\"},{type:\"controls_if_else\",message0:\"%{BKY_CONTROLS_IF_ELSE_TITLE_ELSE}\",previousStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_ELSE_TOOLTIP}\"}]),TOOLTIPS_BY_OP$$module$build$src$blocks$logic={EQ:\"%{BKY_LOGIC_COMPARE_TOOLTIP_EQ}\",NEQ:\"%{BKY_LOGIC_COMPARE_TOOLTIP_NEQ}\",LT:\"%{BKY_LOGIC_COMPARE_TOOLTIP_LT}\",\nLTE:\"%{BKY_LOGIC_COMPARE_TOOLTIP_LTE}\",GT:\"%{BKY_LOGIC_COMPARE_TOOLTIP_GT}\",GTE:\"%{BKY_LOGIC_COMPARE_TOOLTIP_GTE}\",AND:\"%{BKY_LOGIC_OPERATION_TOOLTIP_AND}\",OR:\"%{BKY_LOGIC_OPERATION_TOOLTIP_OR}\"};$.register$$module$build$src$core$extensions(\"logic_op_tooltip\",$.buildTooltipForDropdown$$module$build$src$core$extensions(\"OP\",TOOLTIPS_BY_OP$$module$build$src$blocks$logic));\nvar CONTROLS_IF_MUTATOR_MIXIN$$module$build$src$blocks$logic={elseifCount_:0,elseCount_:0,mutationToDom:function(){if(!this.elseifCount_&&!this.elseCount_)return null;const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");this.elseifCount_&&a.setAttribute(\"elseif\",String(this.elseifCount_));this.elseCount_&&a.setAttribute(\"else\",\"1\");return a},domToMutation:function(a){this.elseifCount_=parseInt(a.getAttribute(\"elseif\"),10)||0;this.elseCount_=parseInt(a.getAttribute(\"else\"),10)||0;this.rebuildShape_()},\nsaveExtraState:function(){if(!this.elseifCount_&&!this.elseCount_)return null;const a=Object.create(null);this.elseifCount_&&(a.elseIfCount=this.elseifCount_);this.elseCount_&&(a.hasElse=!0);return a},loadExtraState:function(a){this.elseifCount_=a.elseIfCount||0;this.elseCount_=a.hasElse?1:0;this.updateShape_()},decompose:function(a){const b=a.newBlock(\"controls_if_if\");b.initSvg();let c=b.nextConnection;for(let d=1;d<=this.elseifCount_;d++){const e=a.newBlock(\"controls_if_elseif\");e.initSvg();c.connect(e.previousConnection);\nc=e.nextConnection}this.elseCount_&&(a=a.newBlock(\"controls_if_else\"),a.initSvg(),c.connect(a.previousConnection));return b},compose:function(a){a=a.nextConnection.targetBlock();this.elseCount_=this.elseifCount_=0;const b=[null],c=[null];let d=null;for(;a;){if(!a.isInsertionMarker())switch(a.type){case \"controls_if_elseif\":this.elseifCount_++;b.push(a.valueConnection_);c.push(a.statementConnection_);break;case \"controls_if_else\":this.elseCount_++;d=a.statementConnection_;break;default:throw TypeError(\"Unknown block type: \"+\na.type);}a=a.getNextBlock()}this.updateShape_();this.reconnectChildBlocks_(b,c,d)},saveConnections:function(a){a=a.nextConnection.targetBlock();let b=1;for(;a;){if(!a.isInsertionMarker())switch(a.type){case \"controls_if_elseif\":var c=this.getInput(\"IF\"+b);const d=this.getInput(\"DO\"+b);a.valueConnection_=c&&c.connection.targetConnection;a.statementConnection_=d&&d.connection.targetConnection;b++;break;case \"controls_if_else\":c=this.getInput(\"ELSE\");a.statementConnection_=c&&c.connection.targetConnection;\nbreak;default:throw TypeError(\"Unknown block type: \"+a.type);}a=a.getNextBlock()}},rebuildShape_:function(){const a=[null],b=[null];let c=null;this.getInput(\"ELSE\")&&(c=this.getInput(\"ELSE\").connection.targetConnection);for(let d=1;this.getInput(\"IF\"+d);d++){const e=this.getInput(\"IF\"+d),f=this.getInput(\"DO\"+d);a.push(e.connection.targetConnection);b.push(f.connection.targetConnection)}this.updateShape_();this.reconnectChildBlocks_(a,b,c)},updateShape_:function(){this.getInput(\"ELSE\")&&this.removeInput(\"ELSE\");\nfor(var a=1;this.getInput(\"IF\"+a);a++)this.removeInput(\"IF\"+a),this.removeInput(\"DO\"+a);for(a=1;a<=this.elseifCount_;a++)this.appendValueInput(\"IF\"+a).setCheck(\"Boolean\").appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_ELSEIF),this.appendStatementInput(\"DO\"+a).appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_THEN);this.elseCount_&&this.appendStatementInput(\"ELSE\").appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_ELSE)},reconnectChildBlocks_:function(a,b,c){for(let d=\n1;d<=this.elseifCount_;d++){let e;(e=a[d])==null||e.reconnect(this,\"IF\"+d);let f;(f=b[d])==null||f.reconnect(this,\"DO\"+d)}c==null||c.reconnect(this,\"ELSE\")}};$.registerMutator$$module$build$src$core$extensions(\"controls_if_mutator\",CONTROLS_IF_MUTATOR_MIXIN$$module$build$src$blocks$logic,null,[\"controls_if_elseif\",\"controls_if_else\"]);\nvar CONTROLS_IF_TOOLTIP_EXTENSION$$module$build$src$blocks$logic=function(){this.setTooltip(function(){if(this.elseifCount_||this.elseCount_){if(!this.elseifCount_&&this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_2;if(this.elseifCount_&&!this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_3;if(this.elseifCount_&&this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_4}else return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_1;\nreturn\"\"}.bind(this))};$.register$$module$build$src$core$extensions(\"controls_if_tooltip\",CONTROLS_IF_TOOLTIP_EXTENSION$$module$build$src$blocks$logic);\nvar LOGIC_COMPARE_ONCHANGE_MIXIN$$module$build$src$blocks$logic={onchange:function(a){this.prevBlocks_||(this.prevBlocks_=[null,null]);var b=this.getInputTargetBlock(\"A\");const c=this.getInputTargetBlock(\"B\");b&&c&&!this.workspace.connectionChecker.doTypeChecks(b.outputConnection,c.outputConnection)&&($.setGroup$$module$build$src$core$events$utils(a.group),a=this.prevBlocks_[0],a!==b&&(b.unplug(),!a||a.isDisposed()||a.isShadow()||this.getInput(\"A\").connection.connect(a.outputConnection)),b=this.prevBlocks_[1],\nb!==c&&(c.unplug(),!b||b.isDisposed()||b.isShadow()||this.getInput(\"B\").connection.connect(b.outputConnection)),this.bumpNeighbours(),$.setGroup$$module$build$src$core$events$utils(!1));this.prevBlocks_[0]=this.getInputTargetBlock(\"A\");this.prevBlocks_[1]=this.getInputTargetBlock(\"B\")}},LOGIC_COMPARE_EXTENSION$$module$build$src$blocks$logic=function(){this.mixin(LOGIC_COMPARE_ONCHANGE_MIXIN$$module$build$src$blocks$logic)};$.register$$module$build$src$core$extensions(\"logic_compare\",LOGIC_COMPARE_EXTENSION$$module$build$src$blocks$logic);\nvar LOGIC_TERNARY_ONCHANGE_MIXIN$$module$build$src$blocks$logic={prevParentConnection_:null,onchange:function(a){const b=this.getInputTargetBlock(\"THEN\"),c=this.getInputTargetBlock(\"ELSE\"),d=this.outputConnection.targetConnection;if((b||c)&&d)for(let e=0;e<2;e++){const f=e===1?b:c;f&&!f.workspace.connectionChecker.doTypeChecks(f.outputConnection,d)&&($.setGroup$$module$build$src$core$events$utils(a.group),d===this.prevParentConnection_?(this.unplug(),d.getSourceBlock().bumpNeighbours()):(f.unplug(),\nf.bumpNeighbours()),$.setGroup$$module$build$src$core$events$utils(!1))}this.prevParentConnection_=d}};$.registerMixin$$module$build$src$core$extensions(\"logic_ternary\",LOGIC_TERNARY_ONCHANGE_MIXIN$$module$build$src$blocks$logic);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$logic);var module$build$src$blocks$logic={blocks:blocks$$module$build$src$blocks$logic};var blocks$$module$build$src$blocks$lists=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"lists_create_empty\",message0:\"%{BKY_LISTS_CREATE_EMPTY_TITLE}\",output:\"Array\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_CREATE_EMPTY_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_CREATE_EMPTY_HELPURL}\"},{type:\"lists_repeat\",message0:\"%{BKY_LISTS_REPEAT_TITLE}\",args0:[{type:\"input_value\",name:\"ITEM\"},{type:\"input_value\",name:\"NUM\",check:\"Number\"}],output:\"Array\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_REPEAT_TOOLTIP}\",\nhelpUrl:\"%{BKY_LISTS_REPEAT_HELPURL}\"},{type:\"lists_reverse\",message0:\"%{BKY_LISTS_REVERSE_MESSAGE0}\",args0:[{type:\"input_value\",name:\"LIST\",check:\"Array\"}],output:\"Array\",inputsInline:!0,style:\"list_blocks\",tooltip:\"%{BKY_LISTS_REVERSE_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_REVERSE_HELPURL}\"},{type:\"lists_isEmpty\",message0:\"%{BKY_LISTS_ISEMPTY_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Boolean\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_ISEMPTY_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_ISEMPTY_HELPURL}\"},\n{type:\"lists_length\",message0:\"%{BKY_LISTS_LENGTH_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Number\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_LENGTH_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_LENGTH_HELPURL}\"}]),LISTS_CREATE_WITH$$module$build$src$blocks$lists={init:function(){this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_CREATE_WITH_HELPURL);this.setStyle(\"list_blocks\");this.itemCount_=3;this.updateShape_();this.setOutput(!0,\"Array\");this.setMutator(new $.MutatorIcon$$module$build$src$core$icons$mutator_icon([\"lists_create_with_item\"],\nthis));this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_CREATE_WITH_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"items\",String(this.itemCount_));return a},domToMutation:function(a){a=a.getAttribute(\"items\");if(!a)throw new TypeError(\"element did not have items\");this.itemCount_=parseInt(a,10);this.updateShape_()},saveExtraState:function(){return{itemCount:this.itemCount_}},loadExtraState:function(a){this.itemCount_=a.itemCount;\nthis.updateShape_()},decompose:function(a){const b=a.newBlock(\"lists_create_with_container\");b.initSvg();let c=b.getInput(\"STACK\").connection;for(let d=0;d$.Msg$$module$build$src$core$msg.LISTS_INDEX_OF_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\"0\":\"-1\"))}};blocks$$module$build$src$blocks$lists.lists_indexOf=LISTS_INDEXOF$$module$build$src$blocks$lists;\nvar LISTS_GETINDEX$$module$build$src$blocks$lists={init:function(){var a=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_GET,\"GET\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_GET_REMOVE,\"GET_REMOVE\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_REMOVE,\"REMOVE\"]];this.WHERE_OPTIONS=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FIRST,\"FIRST\"],\n[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_LAST,\"LAST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_RANDOM,\"RANDOM\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_HELPURL);this.setStyle(\"list_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});a.setValidator(function(b){b=b===\"REMOVE\";this.getSourceBlock().updateStatement_(b)});this.appendValueInput(\"VALUE\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_INPUT_IN_LIST);\nthis.appendDummyInput().appendField(a,\"MODE\").appendField(\"\",\"SPACE\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this.WHERE_OPTIONS});a.setValidator(function(b){const c=this.getValue();b=b===\"FROM_START\"||b===\"FROM_END\";b!==(c===\"FROM_START\"||c===\"FROM_END\")&&this.getSourceBlock().updateAt_(b)});this.appendDummyInput().appendField(a,\"WHERE\");this.appendDummyInput(\"AT\");$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL);\nthis.setInputsInline(!0);this.setOutput(!0);this.updateAt_(!0);this.setTooltip(()=>{const b=this.getFieldValue(\"MODE\"),c=this.getFieldValue(\"WHERE\");let d=\"\";switch(b+\" \"+c){case \"GET FROM_START\":case \"GET FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM;break;case \"GET FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_FIRST;break;case \"GET LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_LAST;break;case \"GET RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM;\nbreak;case \"GET_REMOVE FROM_START\":case \"GET_REMOVE FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM;break;case \"GET_REMOVE FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST;break;case \"GET_REMOVE LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST;break;case \"GET_REMOVE RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM;break;case \"REMOVE FROM_START\":case \"REMOVE FROM_END\":d=\n$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM;break;case \"REMOVE FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST;break;case \"REMOVE LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST;break;case \"REMOVE RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM}if(c===\"FROM_START\"||c===\"FROM_END\")d+=\" \"+(c===\"FROM_START\"?$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP:$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_END_TOOLTIP).replace(\"%1\",\nthis.workspace.options.oneBasedIndex?\"#1\":\"#0\");return d})},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"statement\",String(!this.outputConnection));const b=this.getInput(\"AT\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at\",String(b));return a},domToMutation:function(a){const b=a.getAttribute(\"statement\")===\"true\";this.updateStatement_(b);a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},saveExtraState:function(){return this.outputConnection?\nnull:{isStatement:!0}},loadExtraState:function(a){a.isStatement?this.updateStatement_(!0):typeof a===\"string\"&&this.domToMutation($.textToDom$$module$build$src$core$utils$xml(a))},updateStatement_:function(a){a!==!this.outputConnection&&(this.unplug(!0,!0),a?(this.setOutput(!1),this.setPreviousStatement(!0),this.setNextStatement(!0)):(this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0)))},updateAt_:function(a){this.removeInput(\"AT\");this.removeInput(\"ORDINAL\",!0);a?(this.appendValueInput(\"AT\").setCheck(\"Number\"),\n$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\");$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL&&this.moveInputBefore(\"TAIL\",null)}};blocks$$module$build$src$blocks$lists.lists_getIndex=LISTS_GETINDEX$$module$build$src$blocks$lists;\nvar LISTS_SETINDEX$$module$build$src$blocks$lists={init:function(){var a=[[$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_SET,\"SET\"],[$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INSERT,\"INSERT\"]];this.WHERE_OPTIONS=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FIRST,\"FIRST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_LAST,\"LAST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_RANDOM,\n\"RANDOM\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"LIST\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INPUT_IN_LIST);a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});this.appendDummyInput().appendField(a,\"MODE\").appendField(\"\",\"SPACE\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this.WHERE_OPTIONS});a.setValidator(function(b){const c=\nthis.getValue();b=b===\"FROM_START\"||b===\"FROM_END\";b!==(c===\"FROM_START\"||c===\"FROM_END\")&&this.getSourceBlock().updateAt_(b)});this.appendDummyInput().appendField(a,\"WHERE\");this.appendDummyInput(\"AT\");this.appendValueInput(\"TO\").appendField($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INPUT_TO);this.setInputsInline(!0);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP);this.updateAt_(!0);this.setTooltip(()=>{const b=\nthis.getFieldValue(\"MODE\"),c=this.getFieldValue(\"WHERE\");let d=\"\";switch(b+\" \"+c){case \"SET FROM_START\":case \"SET FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_FROM;break;case \"SET FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_FIRST;break;case \"SET LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_LAST;break;case \"SET RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_RANDOM;break;case \"INSERT FROM_START\":case \"INSERT FROM_END\":d=\n$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FROM;break;case \"INSERT FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST;break;case \"INSERT LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_LAST;break;case \"INSERT RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM}if(c===\"FROM_START\"||c===\"FROM_END\")d+=\" \"+$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\n\"#1\":\"#0\");return d})},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\"),b=this.getInput(\"AT\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at\",String(b));return a},domToMutation:function(a){a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},saveExtraState:function(){return null},loadExtraState:function(){},updateAt_:function(a){this.removeInput(\"AT\");this.removeInput(\"ORDINAL\",!0);a?(this.appendValueInput(\"AT\").setCheck(\"Number\"),\n$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\");this.moveInputBefore(\"AT\",\"TO\");this.getInput(\"ORDINAL\")&&this.moveInputBefore(\"ORDINAL\",\"TO\")}};blocks$$module$build$src$blocks$lists.lists_setIndex=LISTS_SETINDEX$$module$build$src$blocks$lists;\nvar LISTS_GETSUBLIST$$module$build$src$blocks$lists={init:function(){this.WHERE_OPTIONS_1=[[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FIRST,\"FIRST\"]];this.WHERE_OPTIONS_2=[[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_FROM_END,\"FROM_END\"],\n[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_LAST,\"LAST\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"LIST\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_INPUT_IN_LIST);const a=b=>{const c=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this[\"WHERE_OPTIONS_\"+b]});c.setValidator(function(d){const e=this.getValue();d=d===\"FROM_START\"||d===\n\"FROM_END\";d!==(e===\"FROM_START\"||e===\"FROM_END\")&&this.getSourceBlock().updateAt_(b,d)});return c};this.appendDummyInput(\"WHERE1_INPUT\").appendField(a(1),\"WHERE1\");this.appendDummyInput(\"AT1\");this.appendDummyInput(\"WHERE2_INPUT\").appendField(a(2),\"WHERE2\");this.appendDummyInput(\"AT2\");$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL);this.setInputsInline(!0);this.setOutput(!0,\"Array\");this.updateAt_(1,\n!0);this.updateAt_(2,!0);this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");var b=this.getInput(\"AT1\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at1\",String(b));b=this.getInput(\"AT2\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at2\",String(b));return a},domToMutation:function(a){const b=a.getAttribute(\"at1\")===\n\"true\";a=a.getAttribute(\"at2\")===\"true\";this.updateAt_(1,b);this.updateAt_(2,a)},saveExtraState:function(){return null},loadExtraState:function(){},updateAt_:function(a,b){this.removeInput(\"AT\"+a);this.removeInput(\"ORDINAL\"+a,!0);b?(this.appendValueInput(\"AT\"+a).setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\"+a).appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\"+a);a===1&&(this.moveInputBefore(\"AT1\",\n\"WHERE2_INPUT\"),this.getInput(\"ORDINAL1\")&&this.moveInputBefore(\"ORDINAL1\",\"WHERE2_INPUT\"));$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL&&this.moveInputBefore(\"TAIL\",null)}};blocks$$module$build$src$blocks$lists.lists_getSublist=LISTS_GETSUBLIST$$module$build$src$blocks$lists;\nblocks$$module$build$src$blocks$lists.lists_sort={init:function(){this.jsonInit({message0:\"%{BKY_LISTS_SORT_TITLE}\",args0:[{type:\"field_dropdown\",name:\"TYPE\",options:[[\"%{BKY_LISTS_SORT_TYPE_NUMERIC}\",\"NUMERIC\"],[\"%{BKY_LISTS_SORT_TYPE_TEXT}\",\"TEXT\"],[\"%{BKY_LISTS_SORT_TYPE_IGNORECASE}\",\"IGNORE_CASE\"]]},{type:\"field_dropdown\",name:\"DIRECTION\",options:[[\"%{BKY_LISTS_SORT_ORDER_ASCENDING}\",\"1\"],[\"%{BKY_LISTS_SORT_ORDER_DESCENDING}\",\"-1\"]]},{type:\"input_value\",name:\"LIST\",check:\"Array\"}],output:\"Array\",\nstyle:\"list_blocks\",tooltip:\"%{BKY_LISTS_SORT_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_SORT_HELPURL}\"})}};\nblocks$$module$build$src$blocks$lists.lists_split={init:function(){const a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:[[$.Msg$$module$build$src$core$msg.LISTS_SPLIT_LIST_FROM_TEXT,\"SPLIT\"],[$.Msg$$module$build$src$core$msg.LISTS_SPLIT_TEXT_FROM_LIST,\"JOIN\"]]});if(!a)throw Error(\"field_dropdown not found\");a.setValidator(b=>{this.updateType_(b)});this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_SPLIT_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"INPUT\").setCheck(\"String\").appendField(a,\n\"MODE\");this.appendValueInput(\"DELIM\").setCheck(\"String\").appendField($.Msg$$module$build$src$core$msg.LISTS_SPLIT_WITH_DELIMITER);this.setInputsInline(!0);this.setOutput(!0,\"Array\");this.setTooltip(()=>{const b=this.getFieldValue(\"MODE\");if(b===\"SPLIT\")return $.Msg$$module$build$src$core$msg.LISTS_SPLIT_TOOLTIP_SPLIT;if(b===\"JOIN\")return $.Msg$$module$build$src$core$msg.LISTS_SPLIT_TOOLTIP_JOIN;throw Error(\"Unknown mode: \"+b);})},updateType_:function(a){if(this.getFieldValue(\"MODE\")!==a){const b=\nthis.getInput(\"INPUT\").connection;b.setShadowDom(null);const c=b.targetBlock();c&&(b.disconnect(),c.isShadow()?c.dispose(!1):this.bumpNeighbours())}a===\"SPLIT\"?(this.outputConnection.setCheck(\"Array\"),this.getInput(\"INPUT\").setCheck(\"String\")):(this.outputConnection.setCheck(\"String\"),this.getInput(\"INPUT\").setCheck(\"Array\"))},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"mode\",this.getFieldValue(\"MODE\"));return a},domToMutation:function(a){this.updateType_(a.getAttribute(\"mode\"))},\nsaveExtraState:function(){return{mode:this.getFieldValue(\"MODE\")}},loadExtraState:function(a){this.updateType_(a.mode)}};$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$lists);var module$build$src$blocks$lists={blocks:blocks$$module$build$src$blocks$lists};var blocks$$module$build$src$blocks$blocks=Object.assign({},blocks$$module$build$src$blocks$lists,blocks$$module$build$src$blocks$logic,blocks$$module$build$src$blocks$loops,blocks$$module$build$src$blocks$math,blocks$$module$build$src$blocks$procedures,blocks$$module$build$src$blocks$text,blocks$$module$build$src$blocks$variables,blocks$$module$build$src$blocks$variables_dynamic),module$build$src$blocks$blocks={blocks:blocks$$module$build$src$blocks$blocks,lists:module$build$src$blocks$lists,logic:module$build$src$blocks$logic,\nloops:module$build$src$blocks$loops,math:module$build$src$blocks$math,procedures:module$build$src$blocks$procedures,texts:module$build$src$blocks$text,variables:module$build$src$blocks$variables,variablesDynamic:module$build$src$blocks$variables_dynamic};\nmodule$build$src$blocks$blocks.__namespace__=$;\nreturn module$build$src$blocks$blocks;\n}));\n\n\n//# sourceMappingURL=blocks_compressed.js.map\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/blocks_compressed.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/index.js": +/*!***************************************!*\ + !*** ./node_modules/blockly/index.js ***! + \***************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! blockly/core */ \"./node_modules/blockly/blockly_compressed.js\"), __webpack_require__(/*! blockly/msg/en */ \"./node_modules/blockly/msg/en.js\"), __webpack_require__(/*! blockly/blocks */ \"./node_modules/blockly/blocks_compressed.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function(Blockly, en, blocks) {\n/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Main entrypoint for blockly package. Via its UMD wrapper,\n * this module loads blockly/core, blockly/blocks and blockly/msg/en\n * and then calls setLocale(en).\n *\n * This entrypoint previously also loaded one or more generators\n * (JavaScript in browser, all five in node.js environments) but it no\n * longer makes sense to do so because of changes to generators\n * exports (they no longer have the side effect of defining\n * Blockly.JavaScript, etc., when loaded as modules).\n */\n\n/* eslint-disable */\n'use strict';\n\n// Include the EN Locale by default.\nBlockly.setLocale(en);\n\nreturn Blockly;\n}));\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/index.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/index.mjs": +/*!****************************************!*\ + !*** ./node_modules/blockly/index.mjs ***! + \****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Block: () => (/* binding */ Block),\n/* harmony export */ BlockFlyoutInflater: () => (/* binding */ BlockFlyoutInflater),\n/* harmony export */ BlockNavigationPolicy: () => (/* binding */ BlockNavigationPolicy),\n/* harmony export */ BlockSvg: () => (/* binding */ BlockSvg),\n/* harmony export */ Blocks: () => (/* binding */ Blocks),\n/* harmony export */ ButtonFlyoutInflater: () => (/* binding */ ButtonFlyoutInflater),\n/* harmony export */ COLLAPSED_FIELD_NAME: () => (/* binding */ COLLAPSED_FIELD_NAME),\n/* harmony export */ COLLAPSED_INPUT_NAME: () => (/* binding */ COLLAPSED_INPUT_NAME),\n/* harmony export */ COLLAPSE_CHARS: () => (/* binding */ COLLAPSE_CHARS),\n/* harmony export */ CodeGenerator: () => (/* binding */ CodeGenerator),\n/* harmony export */ CollapsibleToolboxCategory: () => (/* binding */ CollapsibleToolboxCategory),\n/* harmony export */ ComponentManager: () => (/* binding */ ComponentManager),\n/* harmony export */ Connection: () => (/* binding */ Connection),\n/* harmony export */ ConnectionChecker: () => (/* binding */ ConnectionChecker),\n/* harmony export */ ConnectionDB: () => (/* binding */ ConnectionDB),\n/* harmony export */ ConnectionNavigationPolicy: () => (/* binding */ ConnectionNavigationPolicy),\n/* harmony export */ ConnectionType: () => (/* binding */ ConnectionType),\n/* harmony export */ ContextMenu: () => (/* binding */ ContextMenu),\n/* harmony export */ ContextMenuItems: () => (/* binding */ ContextMenuItems),\n/* harmony export */ ContextMenuRegistry: () => (/* binding */ ContextMenuRegistry),\n/* harmony export */ Css: () => (/* binding */ Css),\n/* harmony export */ DELETE_VARIABLE_ID: () => (/* binding */ DELETE_VARIABLE_ID),\n/* harmony export */ DeleteArea: () => (/* binding */ DeleteArea),\n/* harmony export */ DragTarget: () => (/* binding */ DragTarget),\n/* harmony export */ DropDownDiv: () => (/* binding */ DropDownDiv),\n/* harmony export */ Events: () => (/* binding */ Events),\n/* harmony export */ Extensions: () => (/* binding */ Extensions),\n/* harmony export */ Field: () => (/* binding */ Field),\n/* harmony export */ FieldCheckbox: () => (/* binding */ FieldCheckbox),\n/* harmony export */ FieldDropdown: () => (/* binding */ FieldDropdown),\n/* harmony export */ FieldImage: () => (/* binding */ FieldImage),\n/* harmony export */ FieldLabel: () => (/* binding */ FieldLabel),\n/* harmony export */ FieldLabelSerializable: () => (/* binding */ FieldLabelSerializable),\n/* harmony export */ FieldNavigationPolicy: () => (/* binding */ FieldNavigationPolicy),\n/* harmony export */ FieldNumber: () => (/* binding */ FieldNumber),\n/* harmony export */ FieldTextInput: () => (/* binding */ FieldTextInput),\n/* harmony export */ FieldVariable: () => (/* binding */ FieldVariable),\n/* harmony export */ Flyout: () => (/* binding */ Flyout),\n/* harmony export */ FlyoutButton: () => (/* binding */ FlyoutButton),\n/* harmony export */ FlyoutButtonNavigationPolicy: () => (/* binding */ FlyoutButtonNavigationPolicy),\n/* harmony export */ FlyoutItem: () => (/* binding */ FlyoutItem),\n/* harmony export */ FlyoutMetricsManager: () => (/* binding */ FlyoutMetricsManager),\n/* harmony export */ FlyoutNavigationPolicy: () => (/* binding */ FlyoutNavigationPolicy),\n/* harmony export */ FlyoutNavigator: () => (/* binding */ FlyoutNavigator),\n/* harmony export */ FlyoutSeparator: () => (/* binding */ FlyoutSeparator),\n/* harmony export */ FlyoutSeparatorNavigationPolicy: () => (/* binding */ FlyoutSeparatorNavigationPolicy),\n/* harmony export */ FocusManager: () => (/* binding */ FocusManager),\n/* harmony export */ FocusableTreeTraverser: () => (/* binding */ FocusableTreeTraverser),\n/* harmony export */ Generator: () => (/* binding */ Generator),\n/* harmony export */ Gesture: () => (/* binding */ Gesture),\n/* harmony export */ Grid: () => (/* binding */ Grid),\n/* harmony export */ HorizontalFlyout: () => (/* binding */ HorizontalFlyout),\n/* harmony export */ INPUT_VALUE: () => (/* binding */ INPUT_VALUE),\n/* harmony export */ Input: () => (/* binding */ Input),\n/* harmony export */ InsertionMarkerPreviewer: () => (/* binding */ InsertionMarkerPreviewer),\n/* harmony export */ KeyboardNavigationController: () => (/* binding */ KeyboardNavigationController),\n/* harmony export */ LabelFlyoutInflater: () => (/* binding */ LabelFlyoutInflater),\n/* harmony export */ LineCursor: () => (/* binding */ LineCursor),\n/* harmony export */ Marker: () => (/* binding */ Marker),\n/* harmony export */ MarkerManager: () => (/* binding */ MarkerManager),\n/* harmony export */ Menu: () => (/* binding */ Menu),\n/* harmony export */ MenuItem: () => (/* binding */ MenuItem),\n/* harmony export */ MetricsManager: () => (/* binding */ MetricsManager),\n/* harmony export */ Msg: () => (/* binding */ Msg),\n/* harmony export */ NEXT_STATEMENT: () => (/* binding */ NEXT_STATEMENT),\n/* harmony export */ Names: () => (/* binding */ Names),\n/* harmony export */ Navigator: () => (/* binding */ Navigator),\n/* harmony export */ OPPOSITE_TYPE: () => (/* binding */ OPPOSITE_TYPE),\n/* harmony export */ OUTPUT_VALUE: () => (/* binding */ OUTPUT_VALUE),\n/* harmony export */ Options: () => (/* binding */ Options),\n/* harmony export */ PREVIOUS_STATEMENT: () => (/* binding */ PREVIOUS_STATEMENT),\n/* harmony export */ PROCEDURE_CATEGORY_NAME: () => (/* binding */ PROCEDURE_CATEGORY_NAME),\n/* harmony export */ Procedures: () => (/* binding */ Procedures),\n/* harmony export */ RENAME_VARIABLE_ID: () => (/* binding */ RENAME_VARIABLE_ID),\n/* harmony export */ RenderedConnection: () => (/* binding */ RenderedConnection),\n/* harmony export */ Scrollbar: () => (/* binding */ Scrollbar),\n/* harmony export */ ScrollbarPair: () => (/* binding */ ScrollbarPair),\n/* harmony export */ SeparatorFlyoutInflater: () => (/* binding */ SeparatorFlyoutInflater),\n/* harmony export */ ShortcutItems: () => (/* binding */ ShortcutItems),\n/* harmony export */ ShortcutRegistry: () => (/* binding */ ShortcutRegistry),\n/* harmony export */ TOOLBOX_AT_BOTTOM: () => (/* binding */ TOOLBOX_AT_BOTTOM),\n/* harmony export */ TOOLBOX_AT_LEFT: () => (/* binding */ TOOLBOX_AT_LEFT),\n/* harmony export */ TOOLBOX_AT_RIGHT: () => (/* binding */ TOOLBOX_AT_RIGHT),\n/* harmony export */ TOOLBOX_AT_TOP: () => (/* binding */ TOOLBOX_AT_TOP),\n/* harmony export */ Theme: () => (/* binding */ Theme),\n/* harmony export */ ThemeManager: () => (/* binding */ ThemeManager),\n/* harmony export */ Themes: () => (/* binding */ Themes),\n/* harmony export */ Toast: () => (/* binding */ Toast),\n/* harmony export */ Toolbox: () => (/* binding */ Toolbox),\n/* harmony export */ ToolboxCategory: () => (/* binding */ ToolboxCategory),\n/* harmony export */ ToolboxItem: () => (/* binding */ ToolboxItem),\n/* harmony export */ ToolboxSeparator: () => (/* binding */ ToolboxSeparator),\n/* harmony export */ Tooltip: () => (/* binding */ Tooltip),\n/* harmony export */ Touch: () => (/* binding */ Touch),\n/* harmony export */ Trashcan: () => (/* binding */ Trashcan),\n/* harmony export */ UnattachedFieldError: () => (/* binding */ UnattachedFieldError),\n/* harmony export */ VARIABLE_CATEGORY_NAME: () => (/* binding */ VARIABLE_CATEGORY_NAME),\n/* harmony export */ VARIABLE_DYNAMIC_CATEGORY_NAME: () => (/* binding */ VARIABLE_DYNAMIC_CATEGORY_NAME),\n/* harmony export */ VERSION: () => (/* binding */ VERSION),\n/* harmony export */ VariableMap: () => (/* binding */ VariableMap),\n/* harmony export */ VariableModel: () => (/* binding */ VariableModel),\n/* harmony export */ Variables: () => (/* binding */ Variables),\n/* harmony export */ VariablesDynamic: () => (/* binding */ VariablesDynamic),\n/* harmony export */ VerticalFlyout: () => (/* binding */ VerticalFlyout),\n/* harmony export */ WidgetDiv: () => (/* binding */ WidgetDiv),\n/* harmony export */ Workspace: () => (/* binding */ Workspace),\n/* harmony export */ WorkspaceAudio: () => (/* binding */ WorkspaceAudio),\n/* harmony export */ WorkspaceDragger: () => (/* binding */ WorkspaceDragger),\n/* harmony export */ WorkspaceNavigationPolicy: () => (/* binding */ WorkspaceNavigationPolicy),\n/* harmony export */ WorkspaceSvg: () => (/* binding */ WorkspaceSvg),\n/* harmony export */ Xml: () => (/* binding */ Xml),\n/* harmony export */ ZoomControls: () => (/* binding */ ZoomControls),\n/* harmony export */ blockAnimations: () => (/* binding */ blockAnimations),\n/* harmony export */ blockRendering: () => (/* binding */ blockRendering),\n/* harmony export */ browserEvents: () => (/* binding */ browserEvents),\n/* harmony export */ bubbles: () => (/* binding */ bubbles),\n/* harmony export */ bumpObjects: () => (/* binding */ bumpObjects),\n/* harmony export */ clipboard: () => (/* binding */ clipboard),\n/* harmony export */ comments: () => (/* binding */ comments),\n/* harmony export */ common: () => (/* binding */ common),\n/* harmony export */ config: () => (/* binding */ config),\n/* harmony export */ constants: () => (/* binding */ constants),\n/* harmony export */ defineBlocksWithJsonArray: () => (/* binding */ defineBlocksWithJsonArray),\n/* harmony export */ dialog: () => (/* binding */ dialog),\n/* harmony export */ dragging: () => (/* binding */ dragging),\n/* harmony export */ fieldRegistry: () => (/* binding */ fieldRegistry),\n/* harmony export */ geras: () => (/* binding */ geras),\n/* harmony export */ getFocusManager: () => (/* binding */ getFocusManager),\n/* harmony export */ getMainWorkspace: () => (/* binding */ getMainWorkspace),\n/* harmony export */ getSelected: () => (/* binding */ getSelected),\n/* harmony export */ hasBubble: () => (/* binding */ hasBubble),\n/* harmony export */ hideChaff: () => (/* binding */ hideChaff),\n/* harmony export */ icons: () => (/* binding */ icons),\n/* harmony export */ inject: () => (/* binding */ inject),\n/* harmony export */ inputs: () => (/* binding */ inputs),\n/* harmony export */ isCopyable: () => (/* binding */ isCopyable),\n/* harmony export */ isDeletable: () => (/* binding */ isDeletable),\n/* harmony export */ isDraggable: () => (/* binding */ isDraggable),\n/* harmony export */ isIcon: () => (/* binding */ isIcon),\n/* harmony export */ isObservable: () => (/* binding */ isObservable),\n/* harmony export */ isPaster: () => (/* binding */ isPaster),\n/* harmony export */ isRenderedElement: () => (/* binding */ isRenderedElement),\n/* harmony export */ isSelectable: () => (/* binding */ isSelectable),\n/* harmony export */ isSerializable: () => (/* binding */ isSerializable),\n/* harmony export */ isVariableBackedParameterModel: () => (/* binding */ isVariableBackedParameterModel),\n/* harmony export */ keyboardNavigationController: () => (/* binding */ keyboardNavigationController),\n/* harmony export */ layers: () => (/* binding */ layers),\n/* harmony export */ navigateBlock: () => (/* binding */ navigateBlock),\n/* harmony export */ navigateStacks: () => (/* binding */ navigateStacks),\n/* harmony export */ procedures: () => (/* binding */ procedures),\n/* harmony export */ registry: () => (/* binding */ registry),\n/* harmony export */ renderManagement: () => (/* binding */ renderManagement),\n/* harmony export */ serialization: () => (/* binding */ serialization),\n/* harmony export */ setLocale: () => (/* binding */ setLocale),\n/* harmony export */ setParentContainer: () => (/* binding */ setParentContainer),\n/* harmony export */ svgResize: () => (/* binding */ svgResize),\n/* harmony export */ thrasos: () => (/* binding */ thrasos),\n/* harmony export */ uiPosition: () => (/* binding */ uiPosition),\n/* harmony export */ utils: () => (/* binding */ utils),\n/* harmony export */ zelos: () => (/* binding */ zelos)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"./node_modules/blockly/index.js\");\n\nconst {\n Block,\n BlockFlyoutInflater,\n BlockNavigationPolicy,\n BlockSvg,\n Blocks,\n ButtonFlyoutInflater,\n COLLAPSED_FIELD_NAME,\n COLLAPSED_INPUT_NAME,\n COLLAPSE_CHARS,\n CodeGenerator,\n CollapsibleToolboxCategory,\n ComponentManager,\n Connection,\n ConnectionChecker,\n ConnectionDB,\n ConnectionNavigationPolicy,\n ConnectionType,\n ContextMenu,\n ContextMenuItems,\n ContextMenuRegistry,\n Css,\n DELETE_VARIABLE_ID,\n DeleteArea,\n DragTarget,\n DropDownDiv,\n Events,\n Extensions,\n Field,\n FieldCheckbox,\n FieldDropdown,\n FieldImage,\n FieldLabel,\n FieldLabelSerializable,\n FieldNavigationPolicy,\n FieldNumber,\n FieldTextInput,\n FieldVariable,\n Flyout,\n FlyoutButton,\n FlyoutButtonNavigationPolicy,\n FlyoutItem,\n FlyoutMetricsManager,\n FlyoutNavigationPolicy,\n FlyoutNavigator,\n FlyoutSeparator,\n FlyoutSeparatorNavigationPolicy,\n FocusManager,\n FocusableTreeTraverser,\n Generator,\n Gesture,\n Grid,\n HorizontalFlyout,\n INPUT_VALUE,\n Input,\n InsertionMarkerPreviewer,\n KeyboardNavigationController,\n LabelFlyoutInflater,\n LineCursor,\n Marker,\n MarkerManager,\n Menu,\n MenuItem,\n MetricsManager,\n Msg,\n NEXT_STATEMENT,\n Names,\n Navigator,\n OPPOSITE_TYPE,\n OUTPUT_VALUE,\n Options,\n PREVIOUS_STATEMENT,\n PROCEDURE_CATEGORY_NAME,\n Procedures,\n RENAME_VARIABLE_ID,\n RenderedConnection,\n Scrollbar,\n ScrollbarPair,\n SeparatorFlyoutInflater,\n ShortcutItems,\n ShortcutRegistry,\n TOOLBOX_AT_BOTTOM,\n TOOLBOX_AT_LEFT,\n TOOLBOX_AT_RIGHT,\n TOOLBOX_AT_TOP,\n Theme,\n ThemeManager,\n Themes,\n Toast,\n Toolbox,\n ToolboxCategory,\n ToolboxItem,\n ToolboxSeparator,\n Tooltip,\n Touch,\n Trashcan,\n UnattachedFieldError,\n VARIABLE_CATEGORY_NAME,\n VARIABLE_DYNAMIC_CATEGORY_NAME,\n VERSION,\n VariableMap,\n VariableModel,\n Variables,\n VariablesDynamic,\n VerticalFlyout,\n WidgetDiv,\n Workspace,\n WorkspaceAudio,\n WorkspaceDragger,\n WorkspaceNavigationPolicy,\n WorkspaceSvg,\n Xml,\n ZoomControls,\n blockAnimations,\n blockRendering,\n browserEvents,\n bubbles,\n bumpObjects,\n clipboard,\n comments,\n common,\n config,\n constants,\n defineBlocksWithJsonArray,\n dialog,\n dragging,\n fieldRegistry,\n geras,\n getFocusManager,\n getMainWorkspace,\n getSelected,\n hasBubble,\n hideChaff,\n icons,\n inject,\n inputs,\n isCopyable,\n isDeletable,\n isDraggable,\n isIcon,\n isObservable,\n isPaster,\n isRenderedElement,\n isSelectable,\n isSerializable,\n isVariableBackedParameterModel,\n keyboardNavigationController,\n layers,\n navigateBlock,\n navigateStacks,\n procedures,\n registry,\n renderManagement,\n serialization,\n setLocale,\n setParentContainer,\n svgResize,\n thrasos,\n uiPosition,\n utils,\n zelos,\n} = _index_js__WEBPACK_IMPORTED_MODULE_0__;\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/index.mjs?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/msg/en.js": +/*!****************************************!*\ + !*** ./node_modules/blockly/msg/en.js ***! + \****************************************/ +/***/ (function(module, exports) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{ var key, messages; }\n}(this, function() {\n// This file was automatically generated. Do not modify.\n\n'use strict';\n\nvar Blockly = Blockly || { Msg: Object.create(null) };\n\nBlockly.Msg[\"ADD_COMMENT\"] = \"Add Comment\";\nBlockly.Msg[\"ALT_KEY\"] = \"Alt\";\nBlockly.Msg[\"CANNOT_DELETE_VARIABLE_PROCEDURE\"] = \"Can't delete the variable '%1' because it's part of the definition of the function '%2'\";\nBlockly.Msg[\"CHANGE_VALUE_TITLE\"] = \"Change value:\";\nBlockly.Msg[\"CHROME_OS\"] = \"ChromeOS\";\nBlockly.Msg[\"CLEAN_UP\"] = \"Clean up Blocks\";\nBlockly.Msg[\"CLOSE\"] = \"Close\";\nBlockly.Msg[\"COLLAPSED_WARNINGS_WARNING\"] = \"Collapsed blocks contain warnings.\";\nBlockly.Msg[\"COLLAPSE_ALL\"] = \"Collapse Blocks\";\nBlockly.Msg[\"COLLAPSE_BLOCK\"] = \"Collapse Block\";\nBlockly.Msg[\"COLOUR_BLEND_COLOUR1\"] = \"colour 1\";\nBlockly.Msg[\"COLOUR_BLEND_COLOUR2\"] = \"colour 2\";\nBlockly.Msg[\"COLOUR_BLEND_HELPURL\"] = \"https://meyerweb.com/eric/tools/color-blend/#:::rgbp\";\nBlockly.Msg[\"COLOUR_BLEND_RATIO\"] = \"ratio\";\nBlockly.Msg[\"COLOUR_BLEND_TITLE\"] = \"blend\";\nBlockly.Msg[\"COLOUR_BLEND_TOOLTIP\"] = \"Blends two colours together with a given ratio (0.0 - 1.0).\";\nBlockly.Msg[\"COLOUR_PICKER_HELPURL\"] = \"https://en.wikipedia.org/wiki/Color\";\nBlockly.Msg[\"COLOUR_PICKER_TOOLTIP\"] = \"Choose a colour from the palette.\";\nBlockly.Msg[\"COLOUR_RANDOM_HELPURL\"] = \"http://randomcolour.com\";\nBlockly.Msg[\"COLOUR_RANDOM_TITLE\"] = \"random colour\";\nBlockly.Msg[\"COLOUR_RANDOM_TOOLTIP\"] = \"Choose a colour at random.\";\nBlockly.Msg[\"COLOUR_RGB_BLUE\"] = \"blue\";\nBlockly.Msg[\"COLOUR_RGB_GREEN\"] = \"green\";\nBlockly.Msg[\"COLOUR_RGB_HELPURL\"] = \"https://www.december.com/html/spec/colorpercompact.html\";\nBlockly.Msg[\"COLOUR_RGB_RED\"] = \"red\";\nBlockly.Msg[\"COLOUR_RGB_TITLE\"] = \"colour with\";\nBlockly.Msg[\"COLOUR_RGB_TOOLTIP\"] = \"Create a colour with the specified amount of red, green, and blue. All values must be between 0 and 100.\";\nBlockly.Msg[\"COMMAND_KEY\"] = \"⌘ Command\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#loop-termination-blocks\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK\"] = \"break out of loop\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE\"] = \"continue with next iteration of loop\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK\"] = \"Break out of the containing loop.\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE\"] = \"Skip the rest of this loop, and continue with the next iteration.\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_WARNING\"] = \"Warning: This block may only be used within a loop.\";\nBlockly.Msg[\"CONTROLS_FOREACH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#for-each\";\nBlockly.Msg[\"CONTROLS_FOREACH_TITLE\"] = \"for each item %1 in list %2\";\nBlockly.Msg[\"CONTROLS_FOREACH_TOOLTIP\"] = \"For each item in a list, set the variable '%1' to the item, and then do some statements.\";\nBlockly.Msg[\"CONTROLS_FOR_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#count-with\";\nBlockly.Msg[\"CONTROLS_FOR_TITLE\"] = \"count with %1 from %2 to %3 by %4\";\nBlockly.Msg[\"CONTROLS_FOR_TOOLTIP\"] = \"Have the variable '%1' take on the values from the start number to the end number, counting by the specified interval, and do the specified blocks.\";\nBlockly.Msg[\"CONTROLS_IF_ELSEIF_TOOLTIP\"] = \"Add a condition to the if block.\";\nBlockly.Msg[\"CONTROLS_IF_ELSE_TOOLTIP\"] = \"Add a final, catch-all condition to the if block.\";\nBlockly.Msg[\"CONTROLS_IF_HELPURL\"] = \"https://github.com/google/blockly/wiki/IfElse\";\nBlockly.Msg[\"CONTROLS_IF_IF_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this if block.\";\nBlockly.Msg[\"CONTROLS_IF_MSG_ELSE\"] = \"else\";\nBlockly.Msg[\"CONTROLS_IF_MSG_ELSEIF\"] = \"else if\";\nBlockly.Msg[\"CONTROLS_IF_MSG_IF\"] = \"if\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_1\"] = \"If a value is true, then do some statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_2\"] = \"If a value is true, then do the first block of statements. Otherwise, do the second block of statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_3\"] = \"If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_4\"] = \"If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements. If none of the values are true, do the last block of statements.\";\nBlockly.Msg[\"CONTROLS_REPEAT_HELPURL\"] = \"https://en.wikipedia.org/wiki/For_loop\";\nBlockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"] = \"do\";\nBlockly.Msg[\"CONTROLS_REPEAT_TITLE\"] = \"repeat %1 times\";\nBlockly.Msg[\"CONTROLS_REPEAT_TOOLTIP\"] = \"Do some statements several times.\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#repeat\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_OPERATOR_UNTIL\"] = \"repeat until\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_OPERATOR_WHILE\"] = \"repeat while\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL\"] = \"While a value is false, then do some statements.\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_TOOLTIP_WHILE\"] = \"While a value is true, then do some statements.\";\nBlockly.Msg[\"CONTROL_KEY\"] = \"Ctrl\";\nBlockly.Msg[\"COPY_SHORTCUT\"] = \"Copy\";\nBlockly.Msg[\"CUT_SHORTCUT\"] = \"Cut\";\nBlockly.Msg[\"DELETE_ALL_BLOCKS\"] = \"Delete all %1 blocks?\";\nBlockly.Msg[\"DELETE_BLOCK\"] = \"Delete Block\";\nBlockly.Msg[\"DELETE_VARIABLE\"] = \"Delete the '%1' variable\";\nBlockly.Msg[\"DELETE_VARIABLE_CONFIRMATION\"] = \"Delete %1 uses of the '%2' variable?\";\nBlockly.Msg[\"DELETE_X_BLOCKS\"] = \"Delete %1 Blocks\";\nBlockly.Msg[\"DIALOG_CANCEL\"] = \"Cancel\";\nBlockly.Msg[\"DIALOG_OK\"] = \"OK\";\nBlockly.Msg[\"DISABLE_BLOCK\"] = \"Disable Block\";\nBlockly.Msg[\"DUPLICATE_BLOCK\"] = \"Duplicate\";\nBlockly.Msg[\"DUPLICATE_COMMENT\"] = \"Duplicate Comment\";\nBlockly.Msg[\"EDIT_BLOCK_CONTENTS\"] = \"Edit Block contents\";\nBlockly.Msg[\"ENABLE_BLOCK\"] = \"Enable Block\";\nBlockly.Msg[\"EXPAND_ALL\"] = \"Expand Blocks\";\nBlockly.Msg[\"EXPAND_BLOCK\"] = \"Expand Block\";\nBlockly.Msg[\"EXTERNAL_INPUTS\"] = \"External Inputs\";\nBlockly.Msg[\"HELP\"] = \"Help\";\nBlockly.Msg[\"HELP_PROMPT\"] = \"Press %1 for help on keyboard controls\";\nBlockly.Msg[\"INLINE_INPUTS\"] = \"Inline Inputs\";\nBlockly.Msg[\"KEYBOARD_NAV_CONSTRAINED_MOVE_HINT\"] = \"Use the arrow keys to move, then %1 to accept the position\";\nBlockly.Msg[\"KEYBOARD_NAV_COPIED_HINT\"] = \"Copied. Press %1 to paste.\";\nBlockly.Msg[\"KEYBOARD_NAV_CUT_HINT\"] = \"Cut. Press %1 to paste.\";\nBlockly.Msg[\"KEYBOARD_NAV_UNCONSTRAINED_MOVE_HINT\"] = \"Hold %1 and use arrow keys to move freely, then %2 to accept the position\";\nBlockly.Msg[\"LINUX\"] = \"Linux\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-empty-list\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_TITLE\"] = \"create empty list\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_TOOLTIP\"] = \"Returns a list, of length 0, containing no data records\";\nBlockly.Msg[\"LISTS_CREATE_WITH_CONTAINER_TITLE_ADD\"] = \"list\";\nBlockly.Msg[\"LISTS_CREATE_WITH_CONTAINER_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this list block.\";\nBlockly.Msg[\"LISTS_CREATE_WITH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-list-with\";\nBlockly.Msg[\"LISTS_CREATE_WITH_INPUT_WITH\"] = \"create list with\";\nBlockly.Msg[\"LISTS_CREATE_WITH_ITEM_TOOLTIP\"] = \"Add an item to the list.\";\nBlockly.Msg[\"LISTS_CREATE_WITH_TOOLTIP\"] = \"Create a list with any number of items.\";\nBlockly.Msg[\"LISTS_GET_INDEX_FIRST\"] = \"first\";\nBlockly.Msg[\"LISTS_GET_INDEX_FROM_END\"] = \"# from end\";\nBlockly.Msg[\"LISTS_GET_INDEX_FROM_START\"] = \"#\";\nBlockly.Msg[\"LISTS_GET_INDEX_GET\"] = \"get\";\nBlockly.Msg[\"LISTS_GET_INDEX_GET_REMOVE\"] = \"get and remove\";\nBlockly.Msg[\"LISTS_GET_INDEX_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list\";\nBlockly.Msg[\"LISTS_GET_INDEX_LAST\"] = \"last\";\nBlockly.Msg[\"LISTS_GET_INDEX_RANDOM\"] = \"random\";\nBlockly.Msg[\"LISTS_GET_INDEX_REMOVE\"] = \"remove\";\nBlockly.Msg[\"LISTS_GET_INDEX_TAIL\"] = \"\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_FIRST\"] = \"Returns the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_FROM\"] = \"Returns the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_LAST\"] = \"Returns the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_RANDOM\"] = \"Returns a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST\"] = \"Removes and returns the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM\"] = \"Removes and returns the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST\"] = \"Removes and returns the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM\"] = \"Removes and returns a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST\"] = \"Removes the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM\"] = \"Removes the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST\"] = \"Removes the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM\"] = \"Removes a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_FROM_END\"] = \"to # from end\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_FROM_START\"] = \"to #\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_LAST\"] = \"to last\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#getting-a-sublist\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FIRST\"] = \"get sub-list from first\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FROM_END\"] = \"get sub-list from # from end\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FROM_START\"] = \"get sub-list from #\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_TAIL\"] = \"\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_TOOLTIP\"] = \"Creates a copy of the specified portion of a list.\";\nBlockly.Msg[\"LISTS_INDEX_FROM_END_TOOLTIP\"] = \"%1 is the last item.\";\nBlockly.Msg[\"LISTS_INDEX_FROM_START_TOOLTIP\"] = \"%1 is the first item.\";\nBlockly.Msg[\"LISTS_INDEX_OF_FIRST\"] = \"find first occurrence of item\";\nBlockly.Msg[\"LISTS_INDEX_OF_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#finding-items-in-a-list\";\nBlockly.Msg[\"LISTS_INDEX_OF_LAST\"] = \"find last occurrence of item\";\nBlockly.Msg[\"LISTS_INDEX_OF_TOOLTIP\"] = \"Returns the index of the first/last occurrence of the item in the list. Returns %1 if item is not found.\";\nBlockly.Msg[\"LISTS_INLIST\"] = \"in list\";\nBlockly.Msg[\"LISTS_ISEMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#is-empty\";\nBlockly.Msg[\"LISTS_ISEMPTY_TITLE\"] = \"%1 is empty\";\nBlockly.Msg[\"LISTS_ISEMPTY_TOOLTIP\"] = \"Returns true if the list is empty.\";\nBlockly.Msg[\"LISTS_LENGTH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#length-of\";\nBlockly.Msg[\"LISTS_LENGTH_TITLE\"] = \"length of %1\";\nBlockly.Msg[\"LISTS_LENGTH_TOOLTIP\"] = \"Returns the length of a list.\";\nBlockly.Msg[\"LISTS_REPEAT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-list-with\";\nBlockly.Msg[\"LISTS_REPEAT_TITLE\"] = \"create list with item %1 repeated %2 times\";\nBlockly.Msg[\"LISTS_REPEAT_TOOLTIP\"] = \"Creates a list consisting of the given value repeated the specified number of times.\";\nBlockly.Msg[\"LISTS_REVERSE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#reversing-a-list\";\nBlockly.Msg[\"LISTS_REVERSE_MESSAGE0\"] = \"reverse %1\";\nBlockly.Msg[\"LISTS_REVERSE_TOOLTIP\"] = \"Reverse a copy of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#in-list--set\";\nBlockly.Msg[\"LISTS_SET_INDEX_INPUT_TO\"] = \"as\";\nBlockly.Msg[\"LISTS_SET_INDEX_INSERT\"] = \"insert at\";\nBlockly.Msg[\"LISTS_SET_INDEX_SET\"] = \"set\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST\"] = \"Inserts the item at the start of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_FROM\"] = \"Inserts the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_LAST\"] = \"Append the item to the end of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM\"] = \"Inserts the item randomly in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_FIRST\"] = \"Sets the first item in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_FROM\"] = \"Sets the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_LAST\"] = \"Sets the last item in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_RANDOM\"] = \"Sets a random item in a list.\";\nBlockly.Msg[\"LISTS_SORT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#sorting-a-list\";\nBlockly.Msg[\"LISTS_SORT_ORDER_ASCENDING\"] = \"ascending\";\nBlockly.Msg[\"LISTS_SORT_ORDER_DESCENDING\"] = \"descending\";\nBlockly.Msg[\"LISTS_SORT_TITLE\"] = \"sort %1 %2 %3\";\nBlockly.Msg[\"LISTS_SORT_TOOLTIP\"] = \"Sort a copy of a list.\";\nBlockly.Msg[\"LISTS_SORT_TYPE_IGNORECASE\"] = \"alphabetic, ignore case\";\nBlockly.Msg[\"LISTS_SORT_TYPE_NUMERIC\"] = \"numeric\";\nBlockly.Msg[\"LISTS_SORT_TYPE_TEXT\"] = \"alphabetic\";\nBlockly.Msg[\"LISTS_SPLIT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists\";\nBlockly.Msg[\"LISTS_SPLIT_LIST_FROM_TEXT\"] = \"make list from text\";\nBlockly.Msg[\"LISTS_SPLIT_TEXT_FROM_LIST\"] = \"make text from list\";\nBlockly.Msg[\"LISTS_SPLIT_TOOLTIP_JOIN\"] = \"Join a list of texts into one text, separated by a delimiter.\";\nBlockly.Msg[\"LISTS_SPLIT_TOOLTIP_SPLIT\"] = \"Split text into a list of texts, breaking at each delimiter.\";\nBlockly.Msg[\"LISTS_SPLIT_WITH_DELIMITER\"] = \"with delimiter\";\nBlockly.Msg[\"LOGIC_BOOLEAN_FALSE\"] = \"false\";\nBlockly.Msg[\"LOGIC_BOOLEAN_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#values\";\nBlockly.Msg[\"LOGIC_BOOLEAN_TOOLTIP\"] = \"Returns either true or false.\";\nBlockly.Msg[\"LOGIC_BOOLEAN_TRUE\"] = \"true\";\nBlockly.Msg[\"LOGIC_COMPARE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Inequality_(mathematics)\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_EQ\"] = \"Return true if both inputs equal each other.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_GT\"] = \"Return true if the first input is greater than the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_GTE\"] = \"Return true if the first input is greater than or equal to the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_LT\"] = \"Return true if the first input is smaller than the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_LTE\"] = \"Return true if the first input is smaller than or equal to the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_NEQ\"] = \"Return true if both inputs are not equal to each other.\";\nBlockly.Msg[\"LOGIC_NEGATE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#not\";\nBlockly.Msg[\"LOGIC_NEGATE_TITLE\"] = \"not %1\";\nBlockly.Msg[\"LOGIC_NEGATE_TOOLTIP\"] = \"Returns true if the input is false. Returns false if the input is true.\";\nBlockly.Msg[\"LOGIC_NULL\"] = \"null\";\nBlockly.Msg[\"LOGIC_NULL_HELPURL\"] = \"https://en.wikipedia.org/wiki/Nullable_type\";\nBlockly.Msg[\"LOGIC_NULL_TOOLTIP\"] = \"Returns null.\";\nBlockly.Msg[\"LOGIC_OPERATION_AND\"] = \"and\";\nBlockly.Msg[\"LOGIC_OPERATION_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#logical-operations\";\nBlockly.Msg[\"LOGIC_OPERATION_OR\"] = \"or\";\nBlockly.Msg[\"LOGIC_OPERATION_TOOLTIP_AND\"] = \"Return true if both inputs are true.\";\nBlockly.Msg[\"LOGIC_OPERATION_TOOLTIP_OR\"] = \"Return true if at least one of the inputs is true.\";\nBlockly.Msg[\"LOGIC_TERNARY_CONDITION\"] = \"test\";\nBlockly.Msg[\"LOGIC_TERNARY_HELPURL\"] = \"https://en.wikipedia.org/wiki/%3F:\";\nBlockly.Msg[\"LOGIC_TERNARY_IF_FALSE\"] = \"if false\";\nBlockly.Msg[\"LOGIC_TERNARY_IF_TRUE\"] = \"if true\";\nBlockly.Msg[\"LOGIC_TERNARY_TOOLTIP\"] = \"Check the condition in 'test'. If the condition is true, returns the 'if true' value; otherwise returns the 'if false' value.\";\nBlockly.Msg[\"MAC_OS\"] = \"macOS\";\nBlockly.Msg[\"MATH_ADDITION_SYMBOL\"] = \"+\";\nBlockly.Msg[\"MATH_ARITHMETIC_HELPURL\"] = \"https://en.wikipedia.org/wiki/Arithmetic\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_ADD\"] = \"Return the sum of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_DIVIDE\"] = \"Return the quotient of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_MINUS\"] = \"Return the difference of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_MULTIPLY\"] = \"Return the product of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_POWER\"] = \"Return the first number raised to the power of the second number.\";\nBlockly.Msg[\"MATH_ATAN2_HELPURL\"] = \"https://en.wikipedia.org/wiki/Atan2\";\nBlockly.Msg[\"MATH_ATAN2_TITLE\"] = \"atan2 of X:%1 Y:%2\";\nBlockly.Msg[\"MATH_ATAN2_TOOLTIP\"] = \"Return the arctangent of point (X, Y) in degrees from -180 to 180.\";\nBlockly.Msg[\"MATH_CHANGE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter\";\nBlockly.Msg[\"MATH_CHANGE_TITLE\"] = \"change %1 by %2\";\nBlockly.Msg[\"MATH_CHANGE_TOOLTIP\"] = \"Add a number to variable '%1'.\";\nBlockly.Msg[\"MATH_CONSTANT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Mathematical_constant\";\nBlockly.Msg[\"MATH_CONSTANT_TOOLTIP\"] = \"Return one of the common constants: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (infinity).\";\nBlockly.Msg[\"MATH_CONSTRAIN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Clamping_(graphics)\";\nBlockly.Msg[\"MATH_CONSTRAIN_TITLE\"] = \"constrain %1 low %2 high %3\";\nBlockly.Msg[\"MATH_CONSTRAIN_TOOLTIP\"] = \"Constrain a number to be between the specified limits (inclusive).\";\nBlockly.Msg[\"MATH_DIVISION_SYMBOL\"] = \"÷\";\nBlockly.Msg[\"MATH_IS_DIVISIBLE_BY\"] = \"is divisible by\";\nBlockly.Msg[\"MATH_IS_EVEN\"] = \"is even\";\nBlockly.Msg[\"MATH_IS_NEGATIVE\"] = \"is negative\";\nBlockly.Msg[\"MATH_IS_ODD\"] = \"is odd\";\nBlockly.Msg[\"MATH_IS_POSITIVE\"] = \"is positive\";\nBlockly.Msg[\"MATH_IS_PRIME\"] = \"is prime\";\nBlockly.Msg[\"MATH_IS_TOOLTIP\"] = \"Check if a number is an even, odd, prime, whole, positive, negative, or if it is divisible by certain number. Returns true or false.\";\nBlockly.Msg[\"MATH_IS_WHOLE\"] = \"is whole\";\nBlockly.Msg[\"MATH_MODULO_HELPURL\"] = \"https://en.wikipedia.org/wiki/Modulo_operation\";\nBlockly.Msg[\"MATH_MODULO_TITLE\"] = \"remainder of %1 ÷ %2\";\nBlockly.Msg[\"MATH_MODULO_TOOLTIP\"] = \"Return the remainder from dividing the two numbers.\";\nBlockly.Msg[\"MATH_MULTIPLICATION_SYMBOL\"] = \"×\";\nBlockly.Msg[\"MATH_NUMBER_HELPURL\"] = \"https://en.wikipedia.org/wiki/Number\";\nBlockly.Msg[\"MATH_NUMBER_TOOLTIP\"] = \"A number.\";\nBlockly.Msg[\"MATH_ONLIST_HELPURL\"] = \"\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_AVERAGE\"] = \"average of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MAX\"] = \"max of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MEDIAN\"] = \"median of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MIN\"] = \"min of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MODE\"] = \"modes of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_RANDOM\"] = \"random item of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_STD_DEV\"] = \"standard deviation of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_SUM\"] = \"sum of list\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_AVERAGE\"] = \"Return the average (arithmetic mean) of the numeric values in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MAX\"] = \"Return the largest number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MEDIAN\"] = \"Return the median number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MIN\"] = \"Return the smallest number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MODE\"] = \"Return a list of the most common item(s) in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_RANDOM\"] = \"Return a random element from the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_STD_DEV\"] = \"Return the standard deviation of the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_SUM\"] = \"Return the sum of all the numbers in the list.\";\nBlockly.Msg[\"MATH_POWER_SYMBOL\"] = \"^\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Random_number_generation\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_TITLE_RANDOM\"] = \"random fraction\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_TOOLTIP\"] = \"Return a random fraction between 0.0 (inclusive) and 1.0 (exclusive).\";\nBlockly.Msg[\"MATH_RANDOM_INT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Random_number_generation\";\nBlockly.Msg[\"MATH_RANDOM_INT_TITLE\"] = \"random integer from %1 to %2\";\nBlockly.Msg[\"MATH_RANDOM_INT_TOOLTIP\"] = \"Return a random integer between the two specified limits, inclusive.\";\nBlockly.Msg[\"MATH_ROUND_HELPURL\"] = \"https://en.wikipedia.org/wiki/Rounding\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUND\"] = \"round\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUNDDOWN\"] = \"round down\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUNDUP\"] = \"round up\";\nBlockly.Msg[\"MATH_ROUND_TOOLTIP\"] = \"Round a number up or down.\";\nBlockly.Msg[\"MATH_SINGLE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Square_root\";\nBlockly.Msg[\"MATH_SINGLE_OP_ABSOLUTE\"] = \"absolute\";\nBlockly.Msg[\"MATH_SINGLE_OP_ROOT\"] = \"square root\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_ABS\"] = \"Return the absolute value of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_EXP\"] = \"Return e to the power of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_LN\"] = \"Return the natural logarithm of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_LOG10\"] = \"Return the base 10 logarithm of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_NEG\"] = \"Return the negation of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_POW10\"] = \"Return 10 to the power of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_ROOT\"] = \"Return the square root of a number.\";\nBlockly.Msg[\"MATH_SUBTRACTION_SYMBOL\"] = \"-\";\nBlockly.Msg[\"MATH_TRIG_ACOS\"] = \"acos\";\nBlockly.Msg[\"MATH_TRIG_ASIN\"] = \"asin\";\nBlockly.Msg[\"MATH_TRIG_ATAN\"] = \"atan\";\nBlockly.Msg[\"MATH_TRIG_COS\"] = \"cos\";\nBlockly.Msg[\"MATH_TRIG_HELPURL\"] = \"https://en.wikipedia.org/wiki/Trigonometric_functions\";\nBlockly.Msg[\"MATH_TRIG_SIN\"] = \"sin\";\nBlockly.Msg[\"MATH_TRIG_TAN\"] = \"tan\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ACOS\"] = \"Return the arccosine of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ASIN\"] = \"Return the arcsine of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ATAN\"] = \"Return the arctangent of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_COS\"] = \"Return the cosine of a degree (not radian).\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_SIN\"] = \"Return the sine of a degree (not radian).\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_TAN\"] = \"Return the tangent of a degree (not radian).\";\nBlockly.Msg[\"MOVE_BLOCK\"] = \"Move Block\";\nBlockly.Msg[\"NEW_COLOUR_VARIABLE\"] = \"Create colour variable...\";\nBlockly.Msg[\"NEW_NUMBER_VARIABLE\"] = \"Create number variable...\";\nBlockly.Msg[\"NEW_STRING_VARIABLE\"] = \"Create string variable...\";\nBlockly.Msg[\"NEW_VARIABLE\"] = \"Create variable...\";\nBlockly.Msg[\"NEW_VARIABLE_TITLE\"] = \"New variable name:\";\nBlockly.Msg[\"NEW_VARIABLE_TYPE_TITLE\"] = \"New variable type:\";\nBlockly.Msg[\"OPTION_KEY\"] = \"⌥ Option\";\nBlockly.Msg[\"ORDINAL_NUMBER_SUFFIX\"] = \"\";\nBlockly.Msg[\"PASTE_SHORTCUT\"] = \"Paste\";\nBlockly.Msg[\"PROCEDURES_ALLOW_STATEMENTS\"] = \"allow statements\";\nBlockly.Msg[\"PROCEDURES_BEFORE_PARAMS\"] = \"with:\";\nBlockly.Msg[\"PROCEDURES_CALLNORETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_CALLNORETURN_TOOLTIP\"] = \"Run the user-defined function '%1'.\";\nBlockly.Msg[\"PROCEDURES_CALLRETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_CALLRETURN_TOOLTIP\"] = \"Run the user-defined function '%1' and use its output.\";\nBlockly.Msg[\"PROCEDURES_CALL_BEFORE_PARAMS\"] = \"with:\";\nBlockly.Msg[\"PROCEDURES_CALL_DISABLED_DEF_WARNING\"] = \"Can't run the user-defined function '%1' because the definition block is disabled.\";\nBlockly.Msg[\"PROCEDURES_CREATE_DO\"] = \"Create '%1'\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_COMMENT\"] = \"Describe this function...\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_DO\"] = \"\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_PROCEDURE\"] = \"do something\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_TITLE\"] = \"to\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_TOOLTIP\"] = \"Creates a function with no output.\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_RETURN\"] = \"return\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_TOOLTIP\"] = \"Creates a function with an output.\";\nBlockly.Msg[\"PROCEDURES_DEF_DUPLICATE_WARNING\"] = \"Warning: This function has duplicate parameters.\";\nBlockly.Msg[\"PROCEDURES_HIGHLIGHT_DEF\"] = \"Highlight function definition\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_HELPURL\"] = \"https://c2.com/cgi/wiki?GuardClause\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_TOOLTIP\"] = \"If a value is true, then return a second value.\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_WARNING\"] = \"Warning: This block may be used only within a function definition.\";\nBlockly.Msg[\"PROCEDURES_MUTATORARG_TITLE\"] = \"input name:\";\nBlockly.Msg[\"PROCEDURES_MUTATORARG_TOOLTIP\"] = \"Add an input to the function.\";\nBlockly.Msg[\"PROCEDURES_MUTATORCONTAINER_TITLE\"] = \"inputs\";\nBlockly.Msg[\"PROCEDURES_MUTATORCONTAINER_TOOLTIP\"] = \"Add, remove, or reorder inputs to this function.\";\nBlockly.Msg[\"REDO\"] = \"Redo\";\nBlockly.Msg[\"REMOVE_COMMENT\"] = \"Remove Comment\";\nBlockly.Msg[\"RENAME_VARIABLE\"] = \"Rename variable...\";\nBlockly.Msg[\"RENAME_VARIABLE_TITLE\"] = \"Rename all '%1' variables to:\";\nBlockly.Msg[\"SHORTCUTS_CODE_NAVIGATION\"] = \"Code navigation\";\nBlockly.Msg[\"SHORTCUTS_EDITING\"] = \"Editing\";\nBlockly.Msg[\"SHORTCUTS_GENERAL\"] = \"General\";\nBlockly.Msg[\"TEXT_APPEND_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-modification\";\nBlockly.Msg[\"TEXT_APPEND_TITLE\"] = \"to %1 append text %2\";\nBlockly.Msg[\"TEXT_APPEND_TOOLTIP\"] = \"Append some text to variable '%1'.\";\nBlockly.Msg[\"TEXT_CHANGECASE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#adjusting-text-case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_LOWERCASE\"] = \"to lower case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_TITLECASE\"] = \"to Title Case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_UPPERCASE\"] = \"to UPPER CASE\";\nBlockly.Msg[\"TEXT_CHANGECASE_TOOLTIP\"] = \"Return a copy of the text in a different case.\";\nBlockly.Msg[\"TEXT_CHARAT_FIRST\"] = \"get first letter\";\nBlockly.Msg[\"TEXT_CHARAT_FROM_END\"] = \"get letter # from end\";\nBlockly.Msg[\"TEXT_CHARAT_FROM_START\"] = \"get letter #\";\nBlockly.Msg[\"TEXT_CHARAT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#extracting-text\";\nBlockly.Msg[\"TEXT_CHARAT_LAST\"] = \"get last letter\";\nBlockly.Msg[\"TEXT_CHARAT_RANDOM\"] = \"get random letter\";\nBlockly.Msg[\"TEXT_CHARAT_TAIL\"] = \"\";\nBlockly.Msg[\"TEXT_CHARAT_TITLE\"] = \"in text %1 %2\";\nBlockly.Msg[\"TEXT_CHARAT_TOOLTIP\"] = \"Returns the letter at the specified position.\";\nBlockly.Msg[\"TEXT_COUNT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#counting-substrings\";\nBlockly.Msg[\"TEXT_COUNT_MESSAGE0\"] = \"count %1 in %2\";\nBlockly.Msg[\"TEXT_COUNT_TOOLTIP\"] = \"Count how many times some text occurs within some other text.\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_ITEM_TOOLTIP\"] = \"Add an item to the text.\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_TITLE_JOIN\"] = \"join\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this text block.\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_FROM_END\"] = \"to letter # from end\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_FROM_START\"] = \"to letter #\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_LAST\"] = \"to last letter\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_INPUT_IN_TEXT\"] = \"in text\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FIRST\"] = \"get substring from first letter\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FROM_END\"] = \"get substring from letter # from end\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FROM_START\"] = \"get substring from letter #\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_TAIL\"] = \"\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_TOOLTIP\"] = \"Returns a specified portion of the text.\";\nBlockly.Msg[\"TEXT_INDEXOF_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#finding-text\";\nBlockly.Msg[\"TEXT_INDEXOF_OPERATOR_FIRST\"] = \"find first occurrence of text\";\nBlockly.Msg[\"TEXT_INDEXOF_OPERATOR_LAST\"] = \"find last occurrence of text\";\nBlockly.Msg[\"TEXT_INDEXOF_TITLE\"] = \"in text %1 %2 %3\";\nBlockly.Msg[\"TEXT_INDEXOF_TOOLTIP\"] = \"Returns the index of the first/last occurrence of the first text in the second text. Returns %1 if text is not found.\";\nBlockly.Msg[\"TEXT_ISEMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#checking-for-empty-text\";\nBlockly.Msg[\"TEXT_ISEMPTY_TITLE\"] = \"%1 is empty\";\nBlockly.Msg[\"TEXT_ISEMPTY_TOOLTIP\"] = \"Returns true if the provided text is empty.\";\nBlockly.Msg[\"TEXT_JOIN_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-creation\";\nBlockly.Msg[\"TEXT_JOIN_TITLE_CREATEWITH\"] = \"create text with\";\nBlockly.Msg[\"TEXT_JOIN_TOOLTIP\"] = \"Create a piece of text by joining together any number of items.\";\nBlockly.Msg[\"TEXT_LENGTH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-modification\";\nBlockly.Msg[\"TEXT_LENGTH_TITLE\"] = \"length of %1\";\nBlockly.Msg[\"TEXT_LENGTH_TOOLTIP\"] = \"Returns the number of letters (including spaces) in the provided text.\";\nBlockly.Msg[\"TEXT_PRINT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#printing-text\";\nBlockly.Msg[\"TEXT_PRINT_TITLE\"] = \"print %1\";\nBlockly.Msg[\"TEXT_PRINT_TOOLTIP\"] = \"Print the specified text, number or other value.\";\nBlockly.Msg[\"TEXT_PROMPT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#getting-input-from-the-user\";\nBlockly.Msg[\"TEXT_PROMPT_TOOLTIP_NUMBER\"] = \"Prompt for user for a number.\";\nBlockly.Msg[\"TEXT_PROMPT_TOOLTIP_TEXT\"] = \"Prompt for user for some text.\";\nBlockly.Msg[\"TEXT_PROMPT_TYPE_NUMBER\"] = \"prompt for number with message\";\nBlockly.Msg[\"TEXT_PROMPT_TYPE_TEXT\"] = \"prompt for text with message\";\nBlockly.Msg[\"TEXT_REPLACE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#replacing-substrings\";\nBlockly.Msg[\"TEXT_REPLACE_MESSAGE0\"] = \"replace %1 with %2 in %3\";\nBlockly.Msg[\"TEXT_REPLACE_TOOLTIP\"] = \"Replace all occurances of some text within some other text.\";\nBlockly.Msg[\"TEXT_REVERSE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#reversing-text\";\nBlockly.Msg[\"TEXT_REVERSE_MESSAGE0\"] = \"reverse %1\";\nBlockly.Msg[\"TEXT_REVERSE_TOOLTIP\"] = \"Reverses the order of the characters in the text.\";\nBlockly.Msg[\"TEXT_TEXT_HELPURL\"] = \"https://en.wikipedia.org/wiki/String_(computer_science)\";\nBlockly.Msg[\"TEXT_TEXT_TOOLTIP\"] = \"A letter, word, or line of text.\";\nBlockly.Msg[\"TEXT_TRIM_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#trimming-removing-spaces\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_BOTH\"] = \"trim spaces from both sides of\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_LEFT\"] = \"trim spaces from left side of\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_RIGHT\"] = \"trim spaces from right side of\";\nBlockly.Msg[\"TEXT_TRIM_TOOLTIP\"] = \"Return a copy of the text with spaces removed from one or both ends.\";\nBlockly.Msg[\"TODAY\"] = \"Today\";\nBlockly.Msg[\"UNDO\"] = \"Undo\";\nBlockly.Msg[\"UNKNOWN\"] = \"Unknown\";\nBlockly.Msg[\"UNNAMED_KEY\"] = \"unnamed\";\nBlockly.Msg[\"VARIABLES_DEFAULT_NAME\"] = \"item\";\nBlockly.Msg[\"VARIABLES_GET_CREATE_SET\"] = \"Create 'set %1'\";\nBlockly.Msg[\"VARIABLES_GET_HELPURL\"] = \"https://github.com/google/blockly/wiki/Variables#get\";\nBlockly.Msg[\"VARIABLES_GET_TOOLTIP\"] = \"Returns the value of this variable.\";\nBlockly.Msg[\"VARIABLES_SET\"] = \"set %1 to %2\";\nBlockly.Msg[\"VARIABLES_SET_CREATE_GET\"] = \"Create 'get %1'\";\nBlockly.Msg[\"VARIABLES_SET_HELPURL\"] = \"https://github.com/google/blockly/wiki/Variables#set\";\nBlockly.Msg[\"VARIABLES_SET_TOOLTIP\"] = \"Sets this variable to be equal to the input.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS\"] = \"A variable named '%1' already exists.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE\"] = \"A variable named '%1' already exists for another type: '%2'.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS_FOR_A_PARAMETER\"] = \"A variable named '%1' already exists as a parameter in the procedure '%2'.\";\nBlockly.Msg[\"WINDOWS\"] = \"Windows\";\nBlockly.Msg[\"WORKSPACE_ARIA_LABEL\"] = \"Blockly Workspace\";\nBlockly.Msg[\"WORKSPACE_COMMENT_DEFAULT_TEXT\"] = \"Say something...\";\nBlockly.Msg[\"CONTROLS_FOREACH_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_FOR_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_IF_ELSEIF_TITLE_ELSEIF\"] = Blockly.Msg[\"CONTROLS_IF_MSG_ELSEIF\"];\nBlockly.Msg[\"CONTROLS_IF_ELSE_TITLE_ELSE\"] = Blockly.Msg[\"CONTROLS_IF_MSG_ELSE\"];\nBlockly.Msg[\"CONTROLS_IF_IF_TITLE_IF\"] = Blockly.Msg[\"CONTROLS_IF_MSG_IF\"];\nBlockly.Msg[\"CONTROLS_IF_MSG_THEN\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"LISTS_CREATE_WITH_ITEM_TITLE\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"LISTS_GET_INDEX_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_GET_SUBLIST_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_INDEX_OF_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_SET_INDEX_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"MATH_CHANGE_TITLE_ITEM\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_COMMENT\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_COMMENT\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_DO\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_DO\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_PROCEDURE\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_PROCEDURE\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_TITLE\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_TITLE\"];\nBlockly.Msg[\"TEXT_APPEND_VARIABLE\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"TEXT_CREATE_JOIN_ITEM_TITLE_ITEM\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\n\nBlockly.Msg[\"COLOUR_HUE\"] = \"20\";\nBlockly.Msg[\"LISTS_HUE\"] = \"260\";\nBlockly.Msg[\"LOGIC_HUE\"] = \"210\";\nBlockly.Msg[\"LOOPS_HUE\"] = \"120\";\nBlockly.Msg[\"MATH_HUE\"] = \"230\";\nBlockly.Msg[\"PROCEDURES_HUE\"] = \"290\";\nBlockly.Msg[\"TEXTS_HUE\"] = \"160\";\nBlockly.Msg[\"VARIABLES_DYNAMIC_HUE\"] = \"310\";\nBlockly.Msg[\"VARIABLES_HUE\"] = \"330\";\nreturn Blockly.Msg;\n}));\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/msg/en.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/python.mjs": +/*!*****************************************!*\ + !*** ./node_modules/blockly/python.mjs ***! + \*****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Order: () => (/* binding */ Order),\n/* harmony export */ PythonGenerator: () => (/* binding */ PythonGenerator),\n/* harmony export */ pythonGenerator: () => (/* binding */ pythonGenerator)\n/* harmony export */ });\n/* harmony import */ var _python_compressed_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./python_compressed.js */ \"./node_modules/blockly/python_compressed.js\");\n\nconst {\n Order,\n PythonGenerator,\n pythonGenerator,\n} = _python_compressed_js__WEBPACK_IMPORTED_MODULE_0__;\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/python.mjs?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/python_compressed.js": +/*!***************************************************!*\ + !*** ./node_modules/blockly/python_compressed.js ***! + \***************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Do not edit this file; automatically generated.\n\n/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ./blockly_compressed.js */ \"./node_modules/blockly/blockly_compressed.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function(__parent__) {\nvar $=__parent__.__namespace__;\nvar lists_create_empty$$module$build$src$generators$python$lists=function(a,b){return[\"[]\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},lists_create_with$$module$build$src$generators$python$lists=function(a,b){const c=Array(a.itemCount_);for(let d=0;d\",GTE:\">=\"}[a.getFieldValue(\"OP\")],d=Order$$module$build$src$generators$python$python_generator.RELATIONAL,e=b.valueToCode(a,\"A\",d)||\"0\";a=b.valueToCode(a,\"B\",d)||\"0\";return[e+\" \"+c+\" \"+a,d]},logic_operation$$module$build$src$generators$python$logic=function(a,\nb){const c=a.getFieldValue(\"OP\")===\"AND\"?\"and\":\"or\",d=c===\"and\"?Order$$module$build$src$generators$python$python_generator.LOGICAL_AND:Order$$module$build$src$generators$python$python_generator.LOGICAL_OR;let e=b.valueToCode(a,\"A\",d);a=b.valueToCode(a,\"B\",d);e||a?(b=c===\"and\"?\"True\":\"False\",e||(e=b),a||(a=b)):a=e=\"False\";return[e+\" \"+c+\" \"+a,d]},logic_negate$$module$build$src$generators$python$logic=function(a,b){return[\"not \"+(b.valueToCode(a,\"BOOL\",Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT)||\n\"True\"),Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT]},logic_boolean$$module$build$src$generators$python$logic=function(a,b){return[a.getFieldValue(\"BOOL\")===\"TRUE\"?\"True\":\"False\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},logic_null$$module$build$src$generators$python$logic=function(a,b){return[\"None\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},logic_ternary$$module$build$src$generators$python$logic=function(a,b){const c=\nb.valueToCode(a,\"IF\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"False\",d=b.valueToCode(a,\"THEN\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"None\";a=b.valueToCode(a,\"ELSE\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"None\";return[d+\" if \"+c+\" else \"+a,Order$$module$build$src$generators$python$python_generator.CONDITIONAL]},controls_repeat_ext$$module$build$src$generators$python$loops=function(a,b){let c;c=a.getField(\"TIMES\")?\nString(parseInt(a.getFieldValue(\"TIMES\"),10)):b.valueToCode(a,\"TIMES\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";c=$.isNumber$$module$build$src$core$utils$string(c)?parseInt(c,10):\"int(\"+c+\")\";let d=b.statementToCode(a,\"DO\");d=b.addLoopTrap(d,a)||b.PASS;return\"for \"+b.nameDB_.getDistinctName(\"count\",$.NameType$$module$build$src$core$names.VARIABLE)+\" in range(\"+c+\"):\\n\"+d},controls_whileUntil$$module$build$src$generators$python$loops=function(a,b){const c=a.getFieldValue(\"MODE\")===\n\"UNTIL\";let d=b.valueToCode(a,\"BOOL\",c?Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT:Order$$module$build$src$generators$python$python_generator.NONE)||\"False\",e=b.statementToCode(a,\"DO\");e=b.addLoopTrap(e,a)||b.PASS;c&&(d=\"not \"+d);return\"while \"+d+\":\\n\"+e},controls_for$$module$build$src$generators$python$loops=function(a,b){const c=b.getVariableName(a.getFieldValue(\"VAR\"));var d=b.valueToCode(a,\"FROM\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",\ne=b.valueToCode(a,\"TO\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",f=b.valueToCode(a,\"BY\",Order$$module$build$src$generators$python$python_generator.NONE)||\"1\";let g=b.statementToCode(a,\"DO\");g=b.addLoopTrap(g,a)||b.PASS;let h=\"\";a=function(){return b.provideFunction_(\"upRange\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):\n while start <= stop:\n yield start\n start += abs(step)\n`)};const k=function(){return b.provideFunction_(\"downRange\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):\n while start >= stop:\n yield start\n start -= abs(step)\n`)};if($.isNumber$$module$build$src$core$utils$string(d)&&$.isNumber$$module$build$src$core$utils$string(e)&&$.isNumber$$module$build$src$core$utils$string(f))d=Number(d),e=Number(e),f=Math.abs(Number(f)),d%1===0&&e%1===0&&f%1===0?(d<=e?(e++,a=d===0&&f===1?e:d+\", \"+e,f!==1&&(a+=\", \"+f)):(e--,a=d+\", \"+e+\", -\"+f),a=\"range(\"+a+\")\"):(a=d 0\",Order$$module$build$src$generators$python$python_generator.RELATIONAL,Order$$module$build$src$generators$python$python_generator.RELATIONAL],NEGATIVE:[\" < 0\",\nOrder$$module$build$src$generators$python$python_generator.RELATIONAL,Order$$module$build$src$generators$python$python_generator.RELATIONAL],DIVISIBLE_BY:[null,Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE,Order$$module$build$src$generators$python$python_generator.RELATIONAL],PRIME:[null,Order$$module$build$src$generators$python$python_generator.NONE,Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]};const d=a.getFieldValue(\"PROPERTY\"),[e,f,g]=c[d];\nc=b.valueToCode(a,\"NUMBER_TO_CHECK\",f)||\"0\";if(d===\"PRIME\")b.definitions_.import_math=\"import math\",b.definitions_.from_numbers_import_Number=\"from numbers import Number\",a=b.provideFunction_(\"math_isPrime\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(n):\n # https://en.wikipedia.org/wiki/Primality_test#Naive_methods\n # If n is not a number but a string, try parsing it.\n if not isinstance(n, Number):\n try:\n n = float(n)\n except:\n return False\n if n == 2 or n == 3:\n return True\n # False if n is negative, is 1, or not whole, or if n is divisible by 2 or 3.\n if n <= 1 or n % 1 != 0 or n % 2 == 0 or n % 3 == 0:\n return False\n # Check all the numbers of form 6k +/- 1, up to sqrt(n).\n for x in range(6, int(math.sqrt(n)) + 2, 6):\n if n % (x - 1) == 0 or n % (x + 1) == 0:\n return False\n return True\n`)+\"(\"+c+\")\";else if(d===\"DIVISIBLE_BY\"){a=b.valueToCode(a,\"DIVISOR\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\"0\";if(a===\"0\")return[\"False\",Order$$module$build$src$generators$python$python_generator.ATOMIC];a=c+\" % \"+a+\" == 0\"}else a=c+e;return[a,g]},math_change$$module$build$src$generators$python$math=function(a,b){b.definitions_.from_numbers_import_Number=\"from numbers import Number\";const c=b.valueToCode(a,\"DELTA\",Order$$module$build$src$generators$python$python_generator.ADDITIVE)||\n\"0\";a=b.getVariableName(a.getFieldValue(\"VAR\"));return a+\" = (\"+a+\" if isinstance(\"+a+\", Number) else 0) + \"+c+\"\\n\"},math_on_list$$module$build$src$generators$python$math=function(a,b){const c=a.getFieldValue(\"OP\");a=b.valueToCode(a,\"LIST\",Order$$module$build$src$generators$python$python_generator.NONE)||\"[]\";switch(c){case \"SUM\":b=\"sum(\"+a+\")\";break;case \"MIN\":b=\"min(\"+a+\")\";break;case \"MAX\":b=\"max(\"+a+\")\";break;case \"AVERAGE\":b.definitions_.from_numbers_import_Number=\"from numbers import Number\";\nb=b.provideFunction_(\"math_mean\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(myList):\n localList = [e for e in myList if isinstance(e, Number)]\n if not localList: return\n return float(sum(localList)) / len(localList)\n`)+\"(\"+a+\")\";break;case \"MEDIAN\":b.definitions_.from_numbers_import_Number=\"from numbers import Number\";b=b.provideFunction_(\"math_median\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(myList):\n localList = sorted([e for e in myList if isinstance(e, Number)])\n if not localList: return\n if len(localList) % 2 == 0:\n return (localList[len(localList) // 2 - 1] + localList[len(localList) // 2]) / 2.0\n else:\n return localList[(len(localList) - 1) // 2]\n`)+\"(\"+a+\")\";break;case \"MODE\":b=b.provideFunction_(\"math_modes\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(some_list):\n modes = []\n # Using a lists of [item, count] to keep count rather than dict\n # to avoid \"unhashable\" errors when the counted item is itself a list or dict.\n counts = []\n maxCount = 1\n for item in some_list:\n found = False\n for count in counts:\n if count[0] == item:\n count[1] += 1\n maxCount = max(maxCount, count[1])\n found = True\n if not found:\n counts.append([item, 1])\n for counted_item, item_count in counts:\n if item_count == maxCount:\n modes.append(counted_item)\n return modes\n`)+\"(\"+a+\")\";break;case \"STD_DEV\":b.definitions_.import_math=\"import math\";b=b.provideFunction_(\"math_standard_deviation\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(numbers):\n n = len(numbers)\n if n == 0: return\n mean = float(sum(numbers)) / n\n variance = sum((x - mean) ** 2 for x in numbers) / n\n return math.sqrt(variance)\n`)+\"(\"+a+\")\";break;case \"RANDOM\":b.definitions_.import_random=\"import random\";b=\"random.choice(\"+a+\")\";break;default:throw Error(\"Unknown operator: \"+c);}return[b,Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_modulo$$module$build$src$generators$python$math=function(a,b){const c=b.valueToCode(a,\"DIVIDEND\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\"0\";a=b.valueToCode(a,\"DIVISOR\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\n\"0\";return[c+\" % \"+a,Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE]},math_constrain$$module$build$src$generators$python$math=function(a,b){const c=b.valueToCode(a,\"VALUE\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",d=b.valueToCode(a,\"LOW\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";a=b.valueToCode(a,\"HIGH\",Order$$module$build$src$generators$python$python_generator.NONE)||\"float('inf')\";return[\"min(max(\"+c+\", \"+d+\"), \"+\na+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_random_int$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_random=\"import random\";const c=b.valueToCode(a,\"FROM\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";a=b.valueToCode(a,\"TO\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";return[\"random.randint(\"+c+\", \"+a+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},\nmath_random_float$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_random=\"import random\";return[\"random.random()\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_atan2$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_math=\"import math\";const c=b.valueToCode(a,\"X\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";return[\"math.atan2(\"+(b.valueToCode(a,\"Y\",Order$$module$build$src$generators$python$python_generator.NONE)||\n\"0\")+\", \"+c+\") / math.pi * 180\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE]},procedures_defreturn$$module$build$src$generators$python$procedures=function(a,b){var c=[],d=a.workspace,e=$.allUsedVarModels$$module$build$src$core$variables(d)||[];for(var f of e)e=f.getName(),a.getVars().includes(e)||c.push(b.getVariableName(e));d=$.allDeveloperVariables$$module$build$src$core$variables(d);for(f=0;f0?\"int(\"+a+\" + \"+c+\")\":c<0?\"int(\"+a+\" - \"+-c+\")\":\"int(\"+a+\")\",d&&(a=\"-\"+a));return a}},module$build$src$generators$python$python_generator={};module$build$src$generators$python$python_generator.Order=Order$$module$build$src$generators$python$python_generator;module$build$src$generators$python$python_generator.PythonGenerator=PythonGenerator$$module$build$src$generators$python$python_generator;var module$build$src$generators$python$lists={};module$build$src$generators$python$lists.lists_create_empty=lists_create_empty$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_create_with=lists_create_with$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_getIndex=lists_getIndex$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_getSublist=lists_getSublist$$module$build$src$generators$python$lists;\nmodule$build$src$generators$python$lists.lists_indexOf=lists_indexOf$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_isEmpty=lists_isEmpty$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_length=lists_length$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_repeat=lists_repeat$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_reverse=lists_reverse$$module$build$src$generators$python$lists;\nmodule$build$src$generators$python$lists.lists_setIndex=lists_setIndex$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_sort=lists_sort$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_split=lists_split$$module$build$src$generators$python$lists;var controls_ifelse$$module$build$src$generators$python$logic=controls_if$$module$build$src$generators$python$logic,module$build$src$generators$python$logic={};module$build$src$generators$python$logic.controls_if=controls_if$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.controls_ifelse=controls_if$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_boolean=logic_boolean$$module$build$src$generators$python$logic;\nmodule$build$src$generators$python$logic.logic_compare=logic_compare$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_negate=logic_negate$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_null=logic_null$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_operation=logic_operation$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_ternary=logic_ternary$$module$build$src$generators$python$logic;var controls_repeat$$module$build$src$generators$python$loops=controls_repeat_ext$$module$build$src$generators$python$loops,module$build$src$generators$python$loops={};module$build$src$generators$python$loops.controls_flow_statements=controls_flow_statements$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_for=controls_for$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_forEach=controls_forEach$$module$build$src$generators$python$loops;\nmodule$build$src$generators$python$loops.controls_repeat=controls_repeat_ext$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_repeat_ext=controls_repeat_ext$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_whileUntil=controls_whileUntil$$module$build$src$generators$python$loops;var math_round$$module$build$src$generators$python$math=math_single$$module$build$src$generators$python$math,math_trig$$module$build$src$generators$python$math=math_single$$module$build$src$generators$python$math,module$build$src$generators$python$math={};module$build$src$generators$python$math.math_arithmetic=math_arithmetic$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_atan2=math_atan2$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_change=math_change$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_constant=math_constant$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_constrain=math_constrain$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_modulo=math_modulo$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_number=math_number$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_number_property=math_number_property$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_on_list=math_on_list$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_random_float=math_random_float$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_random_int=math_random_int$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_round=math_single$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_single=math_single$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_trig=math_single$$module$build$src$generators$python$math;var procedures_defnoreturn$$module$build$src$generators$python$procedures=procedures_defreturn$$module$build$src$generators$python$procedures,module$build$src$generators$python$procedures={};module$build$src$generators$python$procedures.procedures_callnoreturn=procedures_callnoreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_callreturn=procedures_callreturn$$module$build$src$generators$python$procedures;\nmodule$build$src$generators$python$procedures.procedures_defnoreturn=procedures_defreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_defreturn=procedures_defreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_ifreturn=procedures_ifreturn$$module$build$src$generators$python$procedures;var strRegExp$$module$build$src$generators$python$text=/^\\s*'([^']|\\\\')*'\\s*$/,forceString$$module$build$src$generators$python$text=function(a){return strRegExp$$module$build$src$generators$python$text.test(a)?[a,Order$$module$build$src$generators$python$python_generator.ATOMIC]:[\"str(\"+a+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},text_prompt$$module$build$src$generators$python$text=text_prompt_ext$$module$build$src$generators$python$text,module$build$src$generators$python$text=\n{};module$build$src$generators$python$text.text=text$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_append=text_append$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_changeCase=text_changeCase$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_charAt=text_charAt$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_count=text_count$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_getSubstring=text_getSubstring$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_indexOf=text_indexOf$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_isEmpty=text_isEmpty$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_join=text_join$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_length=text_length$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_print=text_print$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_prompt=text_prompt_ext$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_prompt_ext=text_prompt_ext$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_replace=text_replace$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_reverse=text_reverse$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_trim=text_trim$$module$build$src$generators$python$text;var module$build$src$generators$python$variables={};module$build$src$generators$python$variables.variables_get=variables_get$$module$build$src$generators$python$variables;module$build$src$generators$python$variables.variables_set=variables_set$$module$build$src$generators$python$variables;var module$build$src$generators$python$variables_dynamic={};module$build$src$generators$python$variables_dynamic.variables_get_dynamic=variables_get$$module$build$src$generators$python$variables;module$build$src$generators$python$variables_dynamic.variables_set_dynamic=variables_set$$module$build$src$generators$python$variables;var pythonGenerator$$module$build$src$generators$python=new PythonGenerator$$module$build$src$generators$python$python_generator;pythonGenerator$$module$build$src$generators$python.addReservedWords(\"math,random,Number\");\nvar generators$$module$build$src$generators$python=Object.assign({},module$build$src$generators$python$lists,module$build$src$generators$python$logic,module$build$src$generators$python$loops,module$build$src$generators$python$math,module$build$src$generators$python$procedures,module$build$src$generators$python$text,module$build$src$generators$python$variables,module$build$src$generators$python$variables_dynamic);\nfor(const a in generators$$module$build$src$generators$python)pythonGenerator$$module$build$src$generators$python.forBlock[a]=generators$$module$build$src$generators$python[a];var module$build$src$generators$python={};module$build$src$generators$python.Order=Order$$module$build$src$generators$python$python_generator;module$build$src$generators$python.PythonGenerator=PythonGenerator$$module$build$src$generators$python$python_generator;module$build$src$generators$python.pythonGenerator=pythonGenerator$$module$build$src$generators$python;\nmodule$build$src$generators$python.__namespace__=$;\nreturn module$build$src$generators$python;\n}));\n\n\n//# sourceMappingURL=python_compressed.js.map\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/python_compressed.js?\n}"); + +/***/ }), + +/***/ "./src/steps/step2.js": +/*!****************************!*\ + !*** ./src/steps/step2.js ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var blockly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly */ \"./node_modules/blockly/index.mjs\");\n/* harmony import */ var blockly_python__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! blockly/python */ \"./node_modules/blockly/python.mjs\");\n/**\n * Blockly OT-2 Integration Application\n * \n * This application demonstrates real Blockly installation with custom blocks\n * for OT-2 liquid handler functions from OT2mqtt.py\n */\n\n\n\n\n// Define custom block: OT-2 Home\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_home'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('🏠 OT-2: Home Robot');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Home the OT-2 robot to its initial position');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_home'] = function(block, generator) {\n const code = 'protocol.home()\\n';\n return code;\n};\n\n// Define custom block: OT-2 Mix Color\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_mix_color'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('🎨 OT-2: Mix Color');\n this.appendValueInput('R')\n .setCheck('Number')\n .appendField('Red (µL)');\n this.appendValueInput('Y')\n .setCheck('Number')\n .appendField('Yellow (µL)');\n this.appendValueInput('B')\n .setCheck('Number')\n .appendField('Blue (µL)');\n this.appendValueInput('WELL')\n .setCheck('String')\n .appendField('Well');\n this.appendValueInput('SESSION_ID')\n .setCheck('String')\n .appendField('Session ID');\n this.appendValueInput('EXPERIMENT_ID')\n .setCheck('String')\n .appendField('Experiment ID');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Mix RGB colors in a well using the OT-2 pipette');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_mix_color'] = function(block, generator) {\n const value_r = generator.valueToCode(block, 'R', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_y = generator.valueToCode(block, 'Y', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_b = generator.valueToCode(block, 'B', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_well = generator.valueToCode(block, 'WELL', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"A1\"';\n const value_session_id = generator.valueToCode(block, 'SESSION_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"session_001\"';\n const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"exp_001\"';\n \n const code = `payload = {\n \"command\": {\n \"R\": ${value_r},\n \"Y\": ${value_y},\n \"B\": ${value_b},\n \"well\": ${value_well}\n },\n \"session_id\": ${value_session_id},\n \"experiment_id\": ${value_experiment_id}\n}\nmix_color(payload)\n`;\n return code;\n};\n\n// Define custom block: OT-2 Move Sensor Back\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_move_sensor_back'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('↩️ OT-2: Move Sensor Back');\n this.appendValueInput('SENSOR_STATUS')\n .setCheck('String')\n .appendField('Sensor Status');\n this.appendValueInput('SESSION_ID')\n .setCheck('String')\n .appendField('Session ID');\n this.appendValueInput('EXPERIMENT_ID')\n .setCheck('String')\n .appendField('Experiment ID');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Move the sensor back to charging position');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_move_sensor_back'] = function(block, generator) {\n const value_sensor_status = generator.valueToCode(block, 'SENSOR_STATUS', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"complete\"';\n const value_session_id = generator.valueToCode(block, 'SESSION_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"session_001\"';\n const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"exp_001\"';\n \n const code = `payload = {\n \"command\": {\n \"sensor_status\": ${value_sensor_status}\n },\n \"session_id\": ${value_session_id},\n \"experiment_id\": ${value_experiment_id}\n}\nmove_sensor_back(payload)\n`;\n return code;\n};\n\n// Create toolbox\nconst toolbox = {\n \"kind\": \"categoryToolbox\",\n \"contents\": [\n {\n \"kind\": \"category\",\n \"name\": \"OT-2 Commands\",\n \"colour\": \"#5C81A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"ot2_home\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"ot2_mix_color\",\n \"inputs\": {\n \"R\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 100\n }\n }\n },\n \"Y\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 50\n }\n }\n },\n \"B\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 75\n }\n }\n },\n \"WELL\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"A1\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n },\n {\n \"kind\": \"block\",\n \"type\": \"ot2_move_sensor_back\",\n \"inputs\": {\n \"SENSOR_STATUS\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"complete\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Logic\",\n \"colour\": \"#5C68A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"controls_if\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"logic_compare\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Loops\",\n \"colour\": \"#5CA65C\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"controls_repeat_ext\",\n \"inputs\": {\n \"TIMES\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 3\n }\n }\n }\n }\n },\n {\n \"kind\": \"block\",\n \"type\": \"controls_whileUntil\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Math\",\n \"colour\": \"#5C68A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"math_number\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"math_arithmetic\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Text\",\n \"colour\": \"#5CA68A\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"text\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"text_print\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Variables\",\n \"colour\": \"#A65C81\",\n \"custom\": \"VARIABLE\"\n }\n ]\n};\n\n// Initialize Blockly workspace\nconst workspace = blockly__WEBPACK_IMPORTED_MODULE_0__.inject('blocklyDiv', {\n toolbox: toolbox,\n grid: {\n spacing: 20,\n length: 3,\n colour: '#ccc',\n snap: true\n },\n zoom: {\n controls: true,\n wheel: true,\n startScale: 1.0,\n maxScale: 3,\n minScale: 0.3,\n scaleSpeed: 1.2\n },\n trashcan: true\n});\n\n// Load initial workspace\n\n// Load initial workspace - Step 2: Home block only\nconst startBlocks = {\n \"blocks\": {\n \"languageVersion\": 0,\n \"blocks\": [\n {\n \"type\": \"ot2_home\",\n \"id\": \"start_home\",\n \"x\": 50,\n \"y\": 50\n }\n ]\n }\n};\n\nblockly__WEBPACK_IMPORTED_MODULE_0__.serialization.workspaces.load(startBlocks, workspace);\n\n// Generate code function\nfunction generateCode() {\n const code = blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.workspaceToCode(workspace);\n const fullCode = `# Generated from Blockly visual programming\n# This code uses functions from OT2mqtt.py\n\nfrom OT2mqtt import mix_color, move_sensor_back, protocol\n\n# Main workflow\n${code}`;\n \n document.getElementById('codeOutput').textContent = fullCode;\n}\n\n// Update code on workspace change\nworkspace.addChangeListener(generateCode);\n\n// Generate initial code\ngenerateCode();\n\n// Expose generate function to button\nwindow.generateCode = generateCode;\n\n\n//# sourceURL=webpack://blockly_app/./src/steps/step2.js?\n}"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./src/steps/step2.js"); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/scripts/blockly_app/dist/step3.html b/scripts/blockly_app/dist/step3.html new file mode 100644 index 00000000..0d432213 --- /dev/null +++ b/scripts/blockly_app/dist/step3.html @@ -0,0 +1,84 @@ + + + + + Blockly OT-2 - Step 3 + + + +

Blockly OT-2 Custom Functions - Building Workflow Step by Step

+
Step 3
+
+
+
+

Generated Python Code

+
+ Watch as we build the workflow block by block +
+
# Waiting for blocks...
+
+
+ + + diff --git a/scripts/blockly_app/dist/step3.js b/scripts/blockly_app/dist/step3.js new file mode 100644 index 00000000..41f248ff --- /dev/null +++ b/scripts/blockly_app/dist/step3.js @@ -0,0 +1,170 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/blockly/blockly_compressed.js": +/*!****************************************************!*\ + !*** ./node_modules/blockly/blockly_compressed.js ***! + \****************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Do not edit this file; automatically generated.\n\n/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function() {\nvar $={};\nvar register$$module$build$src$core$registry,validate$$module$build$src$core$registry,unregister$$module$build$src$core$registry,getItem$$module$build$src$core$registry,hasItem$$module$build$src$core$registry,getClass$$module$build$src$core$registry,getObject$$module$build$src$core$registry,getAllItems$$module$build$src$core$registry,getClassFromOptions$$module$build$src$core$registry,longStart$$module$build$src$core$touch,longStop$$module$build$src$core$touch,clearTouchIdentifier$$module$build$src$core$touch,\nshouldHandleEvent$$module$build$src$core$touch,getTouchIdentifierFromEvent$$module$build$src$core$touch,checkTouchIdentifier$$module$build$src$core$touch,conditionalBind$$module$build$src$core$browser_events,bind$$module$build$src$core$browser_events,unbind$$module$build$src$core$browser_events,isTargetInput$$module$build$src$core$browser_events,isRightButton$$module$build$src$core$browser_events,mouseToSvg$$module$build$src$core$browser_events,getScrollDeltaPixels$$module$build$src$core$browser_events,\ngetNextUniqueId$$module$build$src$core$utils$idgenerator,genUid$$module$build$src$core$utils$idgenerator,isBlockCreate$$module$build$src$core$events$predicates,isBlockDelete$$module$build$src$core$events$predicates,isBlockChange$$module$build$src$core$events$predicates,isBlockFieldIntermediateChange$$module$build$src$core$events$predicates,isBlockMove$$module$build$src$core$events$predicates,isVarCreate$$module$build$src$core$events$predicates,isVarDelete$$module$build$src$core$events$predicates,\nisVarRename$$module$build$src$core$events$predicates,isBlockDrag$$module$build$src$core$events$predicates,isSelected$$module$build$src$core$events$predicates,isClick$$module$build$src$core$events$predicates,isBubbleOpen$$module$build$src$core$events$predicates,isTrashcanOpen$$module$build$src$core$events$predicates,isToolboxItemSelect$$module$build$src$core$events$predicates,isThemeChange$$module$build$src$core$events$predicates,isViewportChange$$module$build$src$core$events$predicates,isCommentCreate$$module$build$src$core$events$predicates,\nisCommentDelete$$module$build$src$core$events$predicates,isCommentChange$$module$build$src$core$events$predicates,isCommentMove$$module$build$src$core$events$predicates,isCommentResize$$module$build$src$core$events$predicates,isCommentDrag$$module$build$src$core$events$predicates,isCommentCollapse$$module$build$src$core$events$predicates,isFinishedLoading$$module$build$src$core$events$predicates,getRecordUndo$$module$build$src$core$events$utils,fire$$module$build$src$core$events$utils,fireInternal$$module$build$src$core$events$utils,\nfireNow$$module$build$src$core$events$utils,enqueueEvent$$module$build$src$core$events$utils,filter$$module$build$src$core$events$utils,clearPendingUndo$$module$build$src$core$events$utils,isEnabled$$module$build$src$core$events$utils,setGroupInternal$$module$build$src$core$events$utils,getDescendantIds$$module$build$src$core$events$utils,fromJson$$module$build$src$core$events$utils,get$$module$build$src$core$events$utils,disableOrphans$$module$build$src$core$events$utils,createSvgElement$$module$build$src$core$utils$dom,\naddClass$$module$build$src$core$utils$dom,removeClasses$$module$build$src$core$utils$dom,removeClass$$module$build$src$core$utils$dom,hasClass$$module$build$src$core$utils$dom,removeNode$$module$build$src$core$utils$dom,insertAfter$$module$build$src$core$utils$dom,setCssTransform$$module$build$src$core$utils$dom,startTextWidthCache$$module$build$src$core$utils$dom,stopTextWidthCache$$module$build$src$core$utils$dom,getTextWidth$$module$build$src$core$utils$dom,getFastTextWidth$$module$build$src$core$utils$dom,\ngetFastTextWidthWithSizeString$$module$build$src$core$utils$dom,measureFontMetrics$$module$build$src$core$utils$dom,isFocusableNode$$module$build$src$core$interfaces$i_focusable_node,isSelectable$$module$build$src$core$interfaces$i_selectable,deepMerge$$module$build$src$core$utils$object,getWorkspaceById$$module$build$src$core$common,getAllWorkspaces$$module$build$src$core$common,registerWorkspace$$module$build$src$core$common,unregisterWorkpace$$module$build$src$core$common,getMainWorkspace$$module$build$src$core$common,\nsetMainWorkspace$$module$build$src$core$common,getSelected$$module$build$src$core$common,setSelected$$module$build$src$core$common,fireSelectedEvent$$module$build$src$core$common,getParentContainer$$module$build$src$core$common,setParentContainer$$module$build$src$core$common,svgResize$$module$build$src$core$common,getBlockTypeCounts$$module$build$src$core$common,jsonInitFactory$$module$build$src$core$common,defineBlocksWithJsonArray$$module$build$src$core$common,defineBlocksWithJsonArrayInternal$$module$build$src$core$common,\nglobalShortcutHandler$$module$build$src$core$common,removeElem$$module$build$src$core$utils$array,register$$module$build$src$core$css,inject$$module$build$src$core$css,getSize$$module$build$src$core$utils$style,getSizeInternal$$module$build$src$core$utils$style,getSizeWithDisplay$$module$build$src$core$utils$style,getComputedStyle$$module$build$src$core$utils$style,getPageOffset$$module$build$src$core$utils$style,getViewportPageOffset$$module$build$src$core$utils$style,getBorderBox$$module$build$src$core$utils$style,\nscrollIntoContainerView$$module$build$src$core$utils$style,getContainerOffsetToScrollInto$$module$build$src$core$utils$style,getRelativeXY$$module$build$src$core$utils$svg_math,getInjectionDivXY$$module$build$src$core$utils$svg_math,getViewportBBox$$module$build$src$core$utils$svg_math,getDocumentScroll$$module$build$src$core$utils$svg_math,screenToWsCoordinates$$module$build$src$core$utils$svg_math,wsToScreenCoordinates$$module$build$src$core$utils$svg_math,injectDependencies$$module$build$src$core$utils$xml,\ndomToText$$module$build$src$core$utils$xml,sanitizeText$$module$build$src$core$utils$xml,convertToolboxDefToJson$$module$build$src$core$utils$toolbox,validateToolbox$$module$build$src$core$utils$toolbox,convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox,hasCategories$$module$build$src$core$utils$toolbox,hasCategoriesInternal$$module$build$src$core$utils$toolbox,isCategoryCollapsible$$module$build$src$core$utils$toolbox,convertToToolboxJson$$module$build$src$core$utils$toolbox,xmlToJsonArray$$module$build$src$core$utils$toolbox,\naddAttributes$$module$build$src$core$utils$toolbox,parseToolboxTree$$module$build$src$core$utils$toolbox,getStartPositionRect$$module$build$src$core$positionable_helpers,getCornerOppositeToolbox$$module$build$src$core$positionable_helpers,bumpPositionRect$$module$build$src$core$positionable_helpers,register$$module$build$src$core$serialization$registry,unregister$$module$build$src$core$serialization$registry,save$$module$build$src$core$serialization$workspace_comments,append$$module$build$src$core$serialization$workspace_comments,\nregister$$module$build$src$core$clipboard$registry,unregister$$module$build$src$core$clipboard$registry,moveCommentToNotConflict$$module$build$src$core$clipboard$workspace_comment_paster,commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster,setRole$$module$build$src$core$utils$aria,setState$$module$build$src$core$utils$aria,isSerializable$$module$build$src$core$interfaces$i_serializable,queueRender$$module$build$src$core$render_management,finishQueuedRenders$$module$build$src$core$render_management,\ntriggerQueuedRenders$$module$build$src$core$render_management,alwaysImmediatelyRender$$module$build$src$core$render_management,queueBlock$$module$build$src$core$render_management,doRenders$$module$build$src$core$render_management,dequeueBlock$$module$build$src$core$render_management,shouldRenderRootBlock$$module$build$src$core$render_management,renderBlock$$module$build$src$core$render_management,alert$$module$build$src$core$dialog,setAlert$$module$build$src$core$dialog,confirm$$module$build$src$core$dialog,\nsetConfirm$$module$build$src$core$dialog,prompt$$module$build$src$core$dialog,setPrompt$$module$build$src$core$dialog,toast$$module$build$src$core$dialog,setToast$$module$build$src$core$dialog,isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks,isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks,isVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model,warn$$module$build$src$core$utils$deprecation,\ninternalFlyoutCategory$$module$build$src$core$variables,flyoutCategory$$module$build$src$core$variables,generateVariableFieldJson$$module$build$src$core$variables,jsonFlyoutCategoryBlocks$$module$build$src$core$variables,xmlFlyoutCategory$$module$build$src$core$variables,flyoutCategoryBlocks$$module$build$src$core$variables,generateUniqueName$$module$build$src$core$variables,generateUniqueNameInternal$$module$build$src$core$variables,generateUniqueNameFromOptions$$module$build$src$core$variables,\ncreateVariableButtonHandler$$module$build$src$core$variables,promptName$$module$build$src$core$variables,nameUsedWithOtherType$$module$build$src$core$variables,nameUsedWithAnyType$$module$build$src$core$variables,nameUsedWithConflictingParam$$module$build$src$core$variables,checkForConflictingParamWithProcedureModels$$module$build$src$core$variables,checkForConflictingParamWithLegacyProcedures$$module$build$src$core$variables,generateVariableFieldDom$$module$build$src$core$variables,createVariable$$module$build$src$core$variables,\ngetAddedVariables$$module$build$src$core$variables,compareByName$$module$build$src$core$variables,getVariableUsesById$$module$build$src$core$variables,save$$module$build$src$core$serialization$blocks,saveAttributes$$module$build$src$core$serialization$blocks,saveCoords$$module$build$src$core$serialization$blocks,saveExtraState$$module$build$src$core$serialization$blocks,saveIcons$$module$build$src$core$serialization$blocks,saveFields$$module$build$src$core$serialization$blocks,saveInputBlocks$$module$build$src$core$serialization$blocks,\nsaveNextBlocks$$module$build$src$core$serialization$blocks,saveConnection$$module$build$src$core$serialization$blocks,append$$module$build$src$core$serialization$blocks,appendInternal$$module$build$src$core$serialization$blocks,appendPrivate$$module$build$src$core$serialization$blocks,checkNewVariables$$module$build$src$core$serialization$blocks,loadCoords$$module$build$src$core$serialization$blocks,loadAttributes$$module$build$src$core$serialization$blocks,loadExtraState$$module$build$src$core$serialization$blocks,\ntryToConnectParent$$module$build$src$core$serialization$blocks,loadIcons$$module$build$src$core$serialization$blocks,loadFields$$module$build$src$core$serialization$blocks,loadInputBlocks$$module$build$src$core$serialization$blocks,loadNextBlocks$$module$build$src$core$serialization$blocks,loadConnection$$module$build$src$core$serialization$blocks,initBlock$$module$build$src$core$serialization$blocks,hasBubble$$module$build$src$core$interfaces$i_has_bubble,toRadians$$module$build$src$core$utils$math,\ntoDegrees$$module$build$src$core$utils$math,clamp$$module$build$src$core$utils$math,createDom$$module$build$src$core$dropdowndiv,setBoundsElement$$module$build$src$core$dropdowndiv,getOwner$$module$build$src$core$dropdowndiv,getContentDiv$$module$build$src$core$dropdowndiv,clearContent$$module$build$src$core$dropdowndiv,setColour$$module$build$src$core$dropdowndiv,showPositionedByBlock$$module$build$src$core$dropdowndiv,showPositionedByField$$module$build$src$core$dropdowndiv,getScaledBboxOfBlock$$module$build$src$core$dropdowndiv,\ngetScaledBboxOfField$$module$build$src$core$dropdowndiv,showPositionedByRect$$module$build$src$core$dropdowndiv,show$$module$build$src$core$dropdowndiv,getPositionBelowMetrics$$module$build$src$core$dropdowndiv,getPositionAboveMetrics$$module$build$src$core$dropdowndiv,getPositionTopOfPageMetrics$$module$build$src$core$dropdowndiv,getPositionX$$module$build$src$core$dropdowndiv,isVisible$$module$build$src$core$dropdowndiv,hideIfOwner$$module$build$src$core$dropdowndiv,hide$$module$build$src$core$dropdowndiv,\nhideWithoutAnimation$$module$build$src$core$dropdowndiv,positionInternal$$module$build$src$core$dropdowndiv,repositionForWindowResize$$module$build$src$core$dropdowndiv,shortestStringLength$$module$build$src$core$utils$string,commonWordPrefix$$module$build$src$core$utils$string,commonWordSuffix$$module$build$src$core$utils$string,wrapLine$$module$build$src$core$utils$string,wrapScore$$module$build$src$core$utils$string,wrapMutate$$module$build$src$core$utils$string,wrapToText$$module$build$src$core$utils$string,\nsetCustomTooltip$$module$build$src$core$tooltip,getCustomTooltip$$module$build$src$core$tooltip,isVisible$$module$build$src$core$tooltip,getDiv$$module$build$src$core$tooltip,getTooltipOfObject$$module$build$src$core$tooltip,getTargetObject$$module$build$src$core$tooltip,createDom$$module$build$src$core$tooltip,bindMouseEvents$$module$build$src$core$tooltip,unbindMouseEvents$$module$build$src$core$tooltip,onMouseOver$$module$build$src$core$tooltip,onMouseOut$$module$build$src$core$tooltip,onMouseMove$$module$build$src$core$tooltip,\ndispose$$module$build$src$core$tooltip,hide$$module$build$src$core$tooltip,block$$module$build$src$core$tooltip,unblock$$module$build$src$core$tooltip,renderContent$$module$build$src$core$tooltip,renderDefaultContent$$module$build$src$core$tooltip,getPosition$$module$build$src$core$tooltip,show$$module$build$src$core$tooltip,getHsvSaturation$$module$build$src$core$utils$colour,setHsvSaturation$$module$build$src$core$utils$colour,getHsvValue$$module$build$src$core$utils$colour,setHsvValue$$module$build$src$core$utils$colour,\nparse$$module$build$src$core$utils$colour,rgbToHex$$module$build$src$core$utils$colour,hexToRgb$$module$build$src$core$utils$colour,hsvToHex$$module$build$src$core$utils$colour,blend$$module$build$src$core$utils$colour,hueToHex$$module$build$src$core$utils$colour,tokenizeInterpolationInternal$$module$build$src$core$utils$parsing,tokenizeInterpolation$$module$build$src$core$utils$parsing,replaceMessageReferences$$module$build$src$core$utils$parsing,checkMessageReferences$$module$build$src$core$utils$parsing,\nparseBlockColour$$module$build$src$core$utils$parsing,getDiv$$module$build$src$core$widgetdiv,testOnly_setDiv$$module$build$src$core$widgetdiv,createDom$$module$build$src$core$widgetdiv,show$$module$build$src$core$widgetdiv,hide$$module$build$src$core$widgetdiv,isVisible$$module$build$src$core$widgetdiv,hideIfOwner$$module$build$src$core$widgetdiv,hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv,positionInternal$$module$build$src$core$widgetdiv,positionWithAnchor$$module$build$src$core$widgetdiv,\ncalculateX$$module$build$src$core$widgetdiv,calculateY$$module$build$src$core$widgetdiv,isRepositionable$$module$build$src$core$widgetdiv,repositionForWindowResize$$module$build$src$core$widgetdiv,getCurrentBlock$$module$build$src$core$contextmenu,setCurrentBlock$$module$build$src$core$contextmenu,show$$module$build$src$core$contextmenu,populate_$$module$build$src$core$contextmenu,position_$$module$build$src$core$contextmenu,createWidget_$$module$build$src$core$contextmenu,haltPropagation$$module$build$src$core$contextmenu,\nhide$$module$build$src$core$contextmenu,dispose$$module$build$src$core$contextmenu,mouseToWorkspacePoint$$module$build$src$core$utils$drag,start$$module$build$src$core$utils$drag,move$$module$build$src$core$utils$drag,workspaceToDom$$module$build$src$core$xml,saveWorkspaceComment$$module$build$src$core$xml,variablesToDom$$module$build$src$core$xml,blockToDomWithXY$$module$build$src$core$xml,fieldToDom$$module$build$src$core$xml,allFieldsToDom$$module$build$src$core$xml,blockToDom$$module$build$src$core$xml,\ncloneShadow$$module$build$src$core$xml,domToText$$module$build$src$core$xml,domToPrettyText$$module$build$src$core$xml,clearWorkspaceAndLoadFromXml$$module$build$src$core$xml,loadWorkspaceComment$$module$build$src$core$xml,appendDomToWorkspace$$module$build$src$core$xml,domToBlockInternal$$module$build$src$core$xml,domToVariables$$module$build$src$core$xml,mapSupportedXmlTags$$module$build$src$core$xml,applyMutationTagNodes$$module$build$src$core$xml,applyCommentTagNodes$$module$build$src$core$xml,\napplyDataTagNodes$$module$build$src$core$xml,applyFieldTagNodes$$module$build$src$core$xml,findChildBlocks$$module$build$src$core$xml,applyInputTagNodes$$module$build$src$core$xml,applyNextTagNodes$$module$build$src$core$xml,domToBlockHeadless$$module$build$src$core$xml,domToField$$module$build$src$core$xml,deleteNext$$module$build$src$core$xml,isElement$$module$build$src$core$xml,register$$module$build$src$core$field_registry,unregister$$module$build$src$core$field_registry,fromJsonInternal$$module$build$src$core$field_registry,\nisImageProperties$$module$build$src$core$field_dropdown,unregister$$module$build$src$core$extensions,isRegistered$$module$build$src$core$extensions,apply$$module$build$src$core$extensions,checkNoMutatorProperties$$module$build$src$core$extensions,checkXmlHooks$$module$build$src$core$extensions,checkJsonHooks$$module$build$src$core$extensions,checkMutatorDialog$$module$build$src$core$extensions,checkHasFunctionPair$$module$build$src$core$extensions,checkHasMutatorProperties$$module$build$src$core$extensions,\ngetMutatorProperties$$module$build$src$core$extensions,mutatorPropertiesMatch$$module$build$src$core$extensions,runAfterPageLoad$$module$build$src$core$extensions,checkDropdownOptionsInTable$$module$build$src$core$extensions,extensionParentTooltip$$module$build$src$core$extensions,point$$module$build$src$core$utils$svg_paths,curve$$module$build$src$core$utils$svg_paths,moveTo$$module$build$src$core$utils$svg_paths,moveBy$$module$build$src$core$utils$svg_paths,lineTo$$module$build$src$core$utils$svg_paths,\nline$$module$build$src$core$utils$svg_paths,lineOnAxis$$module$build$src$core$utils$svg_paths,arc$$module$build$src$core$utils$svg_paths,connectReciprocally$$module$build$src$core$connection,getSingleConnection$$module$build$src$core$connection,getConnectionForOrphanedOutput$$module$build$src$core$connection,isIcon$$module$build$src$core$interfaces$i_icon,isCommentIcon$$module$build$src$core$interfaces$i_comment_icon,disposeUiEffect$$module$build$src$core$block_animations,disposeUiStep$$module$build$src$core$block_animations,\nconnectionUiEffect$$module$build$src$core$block_animations,disconnectUiEffect$$module$build$src$core$block_animations,disconnectUiStep$$module$build$src$core$block_animations,disconnectUiStop$$module$build$src$core$block_animations,moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster,blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster,blockIsInSnapRadius$$module$build$src$core$clipboard$block_paster,bumpObjectIntoBounds$$module$build$src$core$bump_objects,bumpIntoBoundsHandler$$module$build$src$core$bump_objects,\nextractObjectFromEvent$$module$build$src$core$bump_objects,bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects,isDeletable$$module$build$src$core$interfaces$i_deletable,getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy,navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy,navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy,register$$module$build$src$core$icons$registry,unregister$$module$build$src$core$icons$registry,\nisDraggable$$module$build$src$core$interfaces$i_draggable,isAutoHideable$$module$build$src$core$interfaces$i_autohideable,isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block,isObservable$$module$build$src$core$interfaces$i_observable,allProcedures$$module$build$src$core$procedures,procTupleComparator$$module$build$src$core$procedures,isLegalName$$module$build$src$core$procedures,isNameUsed$$module$build$src$core$procedures,xmlFlyoutCategory$$module$build$src$core$procedures,internalFlyoutCategory$$module$build$src$core$procedures,\nflyoutCategory$$module$build$src$core$procedures,updateMutatorFlyout$$module$build$src$core$procedures,mutatorOpenListener$$module$build$src$core$procedures,mutatorChangeListener$$module$build$src$core$procedures,getCallers$$module$build$src$core$procedures,blockIsModernCallerFor$$module$build$src$core$procedures,isDynamicShape$$module$build$src$core$renderers$common$constants,isPuzzleTab$$module$build$src$core$renderers$common$constants,isNotch$$module$build$src$core$renderers$common$constants,register$$module$build$src$core$renderers$common$block_rendering,\nunregister$$module$build$src$core$renderers$common$block_rendering,init$$module$build$src$core$renderers$common$block_rendering,stringButtonClickHandler$$module$build$src$core$variables_dynamic,numberButtonClickHandler$$module$build$src$core$variables_dynamic,colourButtonClickHandler$$module$build$src$core$variables_dynamic,internalFlyoutCategory$$module$build$src$core$variables_dynamic,flyoutCategory$$module$build$src$core$variables_dynamic,xmlFlyoutCategory$$module$build$src$core$variables_dynamic,\nflyoutCategoryBlocks$$module$build$src$core$variables_dynamic,resizeSvgContents$$module$build$src$core$workspace_svg,copy$$module$build$src$core$clipboard,getLastCopiedData$$module$build$src$core$clipboard,setLastCopiedData$$module$build$src$core$clipboard,getLastCopiedWorkspace$$module$build$src$core$clipboard,setLastCopiedWorkspace$$module$build$src$core$clipboard,getLastCopiedLocation$$module$build$src$core$clipboard,setLastCopiedLocation$$module$build$src$core$clipboard,paste$$module$build$src$core$clipboard,\npasteFromData$$module$build$src$core$clipboard,isCopyable$$module$build$src$core$interfaces$i_copyable,registerEscape$$module$build$src$core$shortcut_items,registerDelete$$module$build$src$core$shortcut_items,isCopyable$$module$build$src$core$shortcut_items,isCuttable$$module$build$src$core$shortcut_items,registerCopy$$module$build$src$core$shortcut_items,registerCut$$module$build$src$core$shortcut_items,registerPaste$$module$build$src$core$shortcut_items,registerUndo$$module$build$src$core$shortcut_items,\nregisterRedo$$module$build$src$core$shortcut_items,registerDefaultShortcuts$$module$build$src$core$shortcut_items,saveProcedure$$module$build$src$core$serialization$procedures,loadProcedure$$module$build$src$core$serialization$procedures,save$$module$build$src$core$serialization$workspaces,load$$module$build$src$core$serialization$workspaces,inject$$module$build$src$core$inject,createDom$$module$build$src$core$inject,createMainWorkspace$$module$build$src$core$inject,init$$module$build$src$core$inject,\nbindDocumentEvents$$module$build$src$core$inject,loadSounds$$module$build$src$core$inject,isFullBlockField$$module$build$src$core$contextmenu_items,registerUndo$$module$build$src$core$contextmenu_items,registerRedo$$module$build$src$core$contextmenu_items,registerCleanup$$module$build$src$core$contextmenu_items,toggleOption_$$module$build$src$core$contextmenu_items,registerCollapse$$module$build$src$core$contextmenu_items,registerExpand$$module$build$src$core$contextmenu_items,addDeletableBlocks_$$module$build$src$core$contextmenu_items,\ngetDeletableBlocks_$$module$build$src$core$contextmenu_items,deleteNext_$$module$build$src$core$contextmenu_items,registerDeleteAll$$module$build$src$core$contextmenu_items,registerWorkspaceOptions_$$module$build$src$core$contextmenu_items,registerDuplicate$$module$build$src$core$contextmenu_items,registerComment$$module$build$src$core$contextmenu_items,registerInline$$module$build$src$core$contextmenu_items,registerCollapseExpandBlock$$module$build$src$core$contextmenu_items,registerDisable$$module$build$src$core$contextmenu_items,\nregisterDelete$$module$build$src$core$contextmenu_items,registerHelp$$module$build$src$core$contextmenu_items,registerCommentDelete$$module$build$src$core$contextmenu_items,registerCommentDuplicate$$module$build$src$core$contextmenu_items,registerCommentCreate$$module$build$src$core$contextmenu_items,registerBlockOptions_$$module$build$src$core$contextmenu_items,registerCommentOptions$$module$build$src$core$contextmenu_items,registerDefaultOptions$$module$build$src$core$contextmenu_items,isPaster$$module$build$src$core$interfaces$i_paster,\nisRenderedElement$$module$build$src$core$interfaces$i_rendered_element,isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item,hideChaff$$module$build$src$core$blockly,isFocusableTree$$module$build$src$core$interfaces$i_focusable_tree,$jscomp;\nregister$$module$build$src$core$registry=function(a,b,c,d){if(!(a instanceof Type$$module$build$src$core$registry)&&typeof a!==\"string\"||`${a}`.trim()===\"\")throw Error('Invalid type \"'+a+'\". The type must be a non-empty string or a Blockly.registry.Type.');a=`${a}`.toLowerCase();if(typeof b!==\"string\"||b.trim()===\"\")throw Error('Invalid name \"'+b+'\". The name must be a non-empty string.');const e=b.toLowerCase();if(!c)throw Error(\"Can not register a null value\");let f=typeMap$$module$build$src$core$registry[a],\ng=nameMap$$module$build$src$core$registry[a];f||(f=typeMap$$module$build$src$core$registry[a]=Object.create(null),g=nameMap$$module$build$src$core$registry[a]=Object.create(null));validate$$module$build$src$core$registry(a,c);if(!d&&f[e]&&f[e]!==c)throw Error('Name \"'+e+'\" with type \"'+a+'\" already registered.');f[e]=c;g[e]=b};\nvalidate$$module$build$src$core$registry=function(a,b){switch(a){case String(Type$$module$build$src$core$registry.FIELD):if(typeof b.fromJson!==\"function\")throw Error('Type \"'+a+'\" must have a fromJson function');}};\nunregister$$module$build$src$core$registry=function(a,b){a=`${a}`.toLowerCase();b=b.toLowerCase();const c=typeMap$$module$build$src$core$registry[a];c&&c[b]?(delete typeMap$$module$build$src$core$registry[a][b],delete nameMap$$module$build$src$core$registry[a][b]):console.warn(\"Unable to unregister [\"+b+\"][\"+a+\"] from the registry.\")};\ngetItem$$module$build$src$core$registry=function(a,b,c){a=`${a}`.toLowerCase();b=b.toLowerCase();const d=typeMap$$module$build$src$core$registry[a];if(!d||!d[b]){b=\"Unable to find [\"+b+\"][\"+a+\"] in the registry.\";if(c)throw Error(b+\" You must require or register a \"+a+\" plugin.\");console.warn(b);return null}return d[b]};hasItem$$module$build$src$core$registry=function(a,b){a=`${a}`.toLowerCase();b=b.toLowerCase();return(a=typeMap$$module$build$src$core$registry[a])?!!a[b]:!1};\ngetClass$$module$build$src$core$registry=function(a,b,c){return getItem$$module$build$src$core$registry(a,b,c)};getObject$$module$build$src$core$registry=function(a,b,c){return getItem$$module$build$src$core$registry(a,b,c)};\ngetAllItems$$module$build$src$core$registry=function(a,b,c){a=`${a}`.toLowerCase();var d=typeMap$$module$build$src$core$registry[a];if(!d){d=`Unable to find [${a}] in the registry.`;if(c)throw Error(`${d} You must require or register a ${a} plugin.`);console.warn(d);return null}if(!b)return d;a=nameMap$$module$build$src$core$registry[a];c=Object.create(null);for(const e of Object.keys(d))c[a[e]]=d[e];return c};\ngetClassFromOptions$$module$build$src$core$registry=function(a,b,c){b=b.plugins[String(a)]||DEFAULT$$module$build$src$core$registry;return typeof b===\"function\"?b:getClass$$module$build$src$core$registry(a,b,c)};longStart$$module$build$src$core$touch=function(a,b){longStop$$module$build$src$core$touch();longPid_$$module$build$src$core$touch=setTimeout(function(){b&&b.handleRightClick(a)},LONGPRESS$$module$build$src$core$touch)};\nlongStop$$module$build$src$core$touch=function(){longPid_$$module$build$src$core$touch&&(clearTimeout(longPid_$$module$build$src$core$touch),longPid_$$module$build$src$core$touch=0)};clearTouchIdentifier$$module$build$src$core$touch=function(){touchIdentifier_$$module$build$src$core$touch=null};shouldHandleEvent$$module$build$src$core$touch=function(a){return!a.type.startsWith(\"pointer\")||a instanceof PointerEvent&&checkTouchIdentifier$$module$build$src$core$touch(a)};\ngetTouchIdentifierFromEvent$$module$build$src$core$touch=function(a){return`${a.pointerId}`};checkTouchIdentifier$$module$build$src$core$touch=function(a){const b=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);return touchIdentifier_$$module$build$src$core$touch?touchIdentifier_$$module$build$src$core$touch===b:a.type===\"pointerdown\"?(touchIdentifier_$$module$build$src$core$touch=b,!0):!1};\nconditionalBind$$module$build$src$core$browser_events=function(a,b,c,d,e){function f(h){if(e||shouldHandleEvent$$module$build$src$core$touch(h))c?d.call(c,h):d(h)}const g=[];if(b in TOUCH_MAP$$module$build$src$core$touch)for(let h=0;h{setTimeout(fireNow$$module$build$src$core$events$utils,0)})}catch(b){setTimeout(fireNow$$module$build$src$core$events$utils,0)}enqueueEvent$$module$build$src$core$events$utils(a)}};\nfireNow$$module$build$src$core$events$utils=function(){const a=filter$$module$build$src$core$events$utils(FIRE_QUEUE$$module$build$src$core$events$utils);FIRE_QUEUE$$module$build$src$core$events$utils.length=0;for(const b of a){if(!b.workspaceId)continue;let c;(c=getWorkspaceById$$module$build$src$core$common(b.workspaceId))==null||c.fireChangeListener(b)}};\nenqueueEvent$$module$build$src$core$events$utils=function(a){if(isBlockChange$$module$build$src$core$events$predicates(a)&&a.element===\"mutation\"){let b;for(b=FIRE_QUEUE$$module$build$src$core$events$utils.length;b>0;b--){const c=FIRE_QUEUE$$module$build$src$core$events$utils[b-1];if(c.group!==a.group||c.workspaceId!==a.workspaceId||!isBlockMove$$module$build$src$core$events$predicates(c)||c.newParentId!==a.blockId)break}FIRE_QUEUE$$module$build$src$core$events$utils.splice(b,0,a)}else FIRE_QUEUE$$module$build$src$core$events$utils.push(a)};\nfilter$$module$build$src$core$events$utils=function(a){const b=[];for(const c of a)if(a=b[b.length-1],!c.isNull())if(a&&a.workspaceId===c.workspaceId&&a.group===c.group)if(isBlockMove$$module$build$src$core$events$predicates(c)&&isBlockMove$$module$build$src$core$events$predicates(a)&&c.blockId===a.blockId){if(a.newParentId=c.newParentId,a.newInputName=c.newInputName,a.newCoordinate=c.newCoordinate,a.reason||c.reason){let d,e;a.reason=Array.from(new Set(((d=a.reason)!=null?d:[]).concat((e=c.reason)!=\nnull?e:[])))}}else isBlockChange$$module$build$src$core$events$predicates(c)&&isBlockChange$$module$build$src$core$events$predicates(a)&&c.blockId===a.blockId&&c.element===a.element&&c.name===a.name?a.newValue=c.newValue:isViewportChange$$module$build$src$core$events$predicates(c)&&isViewportChange$$module$build$src$core$events$predicates(a)?(a.viewTop=c.viewTop,a.viewLeft=c.viewLeft,a.scale=c.scale,a.oldScale=c.oldScale):isClick$$module$build$src$core$events$predicates(c)&&isBubbleOpen$$module$build$src$core$events$predicates(a)||\nb.push(c);else b.push(c);return a=b.filter(c=>!c.isNull())};clearPendingUndo$$module$build$src$core$events$utils=function(){for(let a=0,b;b=FIRE_QUEUE$$module$build$src$core$events$utils[a];a++)b.recordUndo=!1};$.disable$$module$build$src$core$events$utils=function(){disabled$$module$build$src$core$events$utils++};$.enable$$module$build$src$core$events$utils=function(){disabled$$module$build$src$core$events$utils--};\nisEnabled$$module$build$src$core$events$utils=function(){return disabled$$module$build$src$core$events$utils===0};$.getGroup$$module$build$src$core$events$utils=function(){return group$$module$build$src$core$events$utils};$.setGroup$$module$build$src$core$events$utils=function(a){TEST_ONLY$$module$build$src$core$events$utils.setGroupInternal(a)};\nsetGroupInternal$$module$build$src$core$events$utils=function(a){group$$module$build$src$core$events$utils=typeof a===\"boolean\"?a?genUid$$module$build$src$core$utils$idgenerator():\"\":a};getDescendantIds$$module$build$src$core$events$utils=function(a){const b=[];a=a.getDescendants(!1);for(let c=0,d;d=a[c];c++)b[c]=d.id;return b};\nfromJson$$module$build$src$core$events$utils=function(a,b){const c=get$$module$build$src$core$events$utils(a.type);if(!c)throw Error(\"Unknown event type.\");return c.fromJson(a,b)};get$$module$build$src$core$events$utils=function(a){const b=getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,a);if(!b)throw Error(`Event type ${a} not found in registry.`);return b};\ndisableOrphans$$module$build$src$core$events$utils=function(a){if((isBlockMove$$module$build$src$core$events$predicates(a)||isBlockCreate$$module$build$src$core$events$predicates(a))&&a.workspaceId){var b=getWorkspaceById$$module$build$src$core$common(a.workspaceId);if(!a.blockId)throw Error(\"Encountered a blockEvent without a proper blockId\");if(a=b.getBlockById(a.blockId)){const c=recordUndo$$module$build$src$core$events$utils;try{recordUndo$$module$build$src$core$events$utils=!1;const d=a.getParent();\nif(d&&!d.hasDisabledReason(ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils)){const e=a.getDescendants(!1);for(let f=0,g;g=e[f];f++)g.setDisabledReason(!1,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils)}else if((a.outputConnection||a.previousConnection)&&!b.isDragging()){do a.setDisabledReason(!0,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils),a=a.getNextBlock();while(a)}}finally{recordUndo$$module$build$src$core$events$utils=c}}}};\ncreateSvgElement$$module$build$src$core$utils$dom=function(a,b,c){a=document.createElementNS(SVG_NS$$module$build$src$core$utils$dom,`${a}`);for(const d in b)a.setAttribute(d,`${b[d]}`);c&&c.appendChild(a);return a};addClass$$module$build$src$core$utils$dom=function(a,b){b=b.split(\" \");if(b.every(c=>a.classList.contains(c)))return!1;a.classList.add(...b);return!0};removeClasses$$module$build$src$core$utils$dom=function(a,b){a.classList.remove(...b.split(\" \"))};\nremoveClass$$module$build$src$core$utils$dom=function(a,b){b=b.split(\" \");if(b.every(c=>!a.classList.contains(c)))return!1;a.classList.remove(...b);return!0};hasClass$$module$build$src$core$utils$dom=function(a,b){return a.classList.contains(b)};removeNode$$module$build$src$core$utils$dom=function(a){return a&&a.parentNode?a.parentNode.removeChild(a):null};\ninsertAfter$$module$build$src$core$utils$dom=function(a,b){const c=b.nextSibling;b=b.parentNode;if(!b)throw Error(\"Reference node has no parent.\");c?b.insertBefore(a,c):b.appendChild(a)};setCssTransform$$module$build$src$core$utils$dom=function(a,b){a.style.transform=b;a.style[\"-webkit-transform\"]=b};\nstartTextWidthCache$$module$build$src$core$utils$dom=function(){cacheReference$$module$build$src$core$utils$dom++;cacheWidths$$module$build$src$core$utils$dom||(cacheWidths$$module$build$src$core$utils$dom=Object.create(null))};stopTextWidthCache$$module$build$src$core$utils$dom=function(){cacheReference$$module$build$src$core$utils$dom--;cacheReference$$module$build$src$core$utils$dom||(cacheWidths$$module$build$src$core$utils$dom=null)};\ngetTextWidth$$module$build$src$core$utils$dom=function(a){const b=a.textContent+\"\\n\"+a.className.baseVal;var c;if(cacheWidths$$module$build$src$core$utils$dom&&(c=cacheWidths$$module$build$src$core$utils$dom[b]))return c;c=window.getComputedStyle(a);c=getFastTextWidthWithSizeString$$module$build$src$core$utils$dom(a,c.fontSize,c.fontWeight,c.fontFamily);cacheWidths$$module$build$src$core$utils$dom&&(cacheWidths$$module$build$src$core$utils$dom[b]=c);return c};\ngetFastTextWidth$$module$build$src$core$utils$dom=function(a,b,c,d){return getFastTextWidthWithSizeString$$module$build$src$core$utils$dom(a,b+\"pt\",c,d)};\ngetFastTextWidthWithSizeString$$module$build$src$core$utils$dom=function(a,b,c,d){const e=a.textContent;a=e+\"\\n\"+a.className.baseVal;var f;if(cacheWidths$$module$build$src$core$utils$dom&&(f=cacheWidths$$module$build$src$core$utils$dom[a]))return f;canvasContext$$module$build$src$core$utils$dom||(f=document.createElement(\"canvas\"),f.className=\"blocklyComputeCanvas\",document.body.appendChild(f),canvasContext$$module$build$src$core$utils$dom=f.getContext(\"2d\"));e&&canvasContext$$module$build$src$core$utils$dom?\n(canvasContext$$module$build$src$core$utils$dom.font=c+\" \"+b+\" \"+d,f=canvasContext$$module$build$src$core$utils$dom.measureText(e).width):f=0;cacheWidths$$module$build$src$core$utils$dom&&(cacheWidths$$module$build$src$core$utils$dom[a]=f);return f};\nmeasureFontMetrics$$module$build$src$core$utils$dom=function(a,b,c,d){const e=document.createElement(\"span\");e.style.font=c+\" \"+b+\" \"+d;e.textContent=a;a=document.createElement(\"div\");a.style.width=\"1px\";a.style.height=\"0\";b=document.createElement(\"div\");b.style.display=\"flex\";b.style.position=\"fixed\";b.style.top=\"0\";b.style.left=\"0\";b.appendChild(e);b.appendChild(a);document.body.appendChild(b);c={height:0,baseline:0};try{b.style.alignItems=\"baseline\",c.baseline=a.offsetTop-e.offsetTop,b.style.alignItems=\n\"flex-end\",c.height=a.offsetTop-e.offsetTop}finally{document.body.removeChild(b)}return c};$.getFocusManager$$module$build$src$core$focus_manager=function(){return FocusManager$$module$build$src$core$focus_manager.getFocusManager()};isFocusableNode$$module$build$src$core$interfaces$i_focusable_node=function(a){return a&&typeof a.getFocusableElement===\"function\"&&typeof a.getFocusableTree===\"function\"&&typeof a.onNodeFocus===\"function\"&&typeof a.onNodeBlur===\"function\"&&typeof a.canBeFocused===\"function\"};\nisSelectable$$module$build$src$core$interfaces$i_selectable=function(a){return isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(a)&&typeof a.id===\"string\"&&typeof a.workspace===\"object\"&&typeof a.select===\"function\"&&typeof a.unselect===\"function\"};\ndeepMerge$$module$build$src$core$utils$object=function(a,b){for(const c in b)b[c]!==null&&Array.isArray(b[c])?a[c]=deepMerge$$module$build$src$core$utils$object(a[c]||[],b[c]):a[c]=b[c]!==null&&typeof b[c]===\"object\"?deepMerge$$module$build$src$core$utils$object(a[c]||Object.create(null),b[c]):b[c];return a};getWorkspaceById$$module$build$src$core$common=function(a){return WorkspaceDB_$$module$build$src$core$common[a]||null};\ngetAllWorkspaces$$module$build$src$core$common=function(){const a=[];for(const b in WorkspaceDB_$$module$build$src$core$common)a.push(WorkspaceDB_$$module$build$src$core$common[b]);return a};registerWorkspace$$module$build$src$core$common=function(a){WorkspaceDB_$$module$build$src$core$common[a.id]=a};unregisterWorkpace$$module$build$src$core$common=function(a){delete WorkspaceDB_$$module$build$src$core$common[a.id]};getMainWorkspace$$module$build$src$core$common=function(){return mainWorkspace$$module$build$src$core$common};\nsetMainWorkspace$$module$build$src$core$common=function(a){mainWorkspace$$module$build$src$core$common=a};getSelected$$module$build$src$core$common=function(){const a=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode();return a&&isSelectable$$module$build$src$core$interfaces$i_selectable(a)?a:null};setSelected$$module$build$src$core$common=function(a){$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)};\nfireSelectedEvent$$module$build$src$core$common=function(a){const b=getSelected$$module$build$src$core$common();let c,d,e,f;const g=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.SELECTED))((c=b==null?void 0:b.id)!=null?c:null,(d=a==null?void 0:a.id)!=null?d:null,(f=(e=a==null?void 0:a.workspace.id)!=null?e:b==null?void 0:b.workspace.id)!=null?f:\"\");fire$$module$build$src$core$events$utils(g)};getParentContainer$$module$build$src$core$common=function(){return parentContainer$$module$build$src$core$common};\nsetParentContainer$$module$build$src$core$common=function(a){parentContainer$$module$build$src$core$common=a};\nsvgResize$$module$build$src$core$common=function(a){for(;a.options.parentWorkspace;)a=a.options.parentWorkspace;const b=a.getParentSvg(),c=a.getCachedParentSvgSize();var d=b.parentElement;if(d instanceof HTMLElement){var e=d.offsetWidth;d=d.offsetHeight;c.width!==e&&(b.setAttribute(\"width\",e+\"px\"),a.setCachedParentSvgSize(e,null));c.height!==d&&(b.setAttribute(\"height\",d+\"px\"),a.setCachedParentSvgSize(null,d));a.resize()}};\ngetBlockTypeCounts$$module$build$src$core$common=function(a,b){const c=Object.create(null),d=a.getDescendants(!0);b&&(a=a.getNextBlock())&&(a=d.indexOf(a),d.splice(a,d.length-a));for(let e=0,f;f=d[e];e++)c[f.type]?c[f.type]++:c[f.type]=1;return c};jsonInitFactory$$module$build$src$core$common=function(a){return function(){this.jsonInit(a)}};defineBlocksWithJsonArray$$module$build$src$core$common=function(a){TEST_ONLY$$module$build$src$core$common.defineBlocksWithJsonArrayInternal(a)};\ndefineBlocksWithJsonArrayInternal$$module$build$src$core$common=function(a){$.defineBlocks$$module$build$src$core$common($.createBlockDefinitionsFromJsonArray$$module$build$src$core$common(a))};\n$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common=function(a){const b={};for(let c=0;c>>/g,a),content$$module$build$src$core$css=\"\",a=document.createElement(\"style\"),a.id=\"blockly-common-style\",b=document.createTextNode(b),a.appendChild(b),document.head.insertBefore(a,document.head.firstChild)))};getSize$$module$build$src$core$utils$style=function(a){return TEST_ONLY$$module$build$src$core$utils$style.getSizeInternal(a)};\ngetSizeInternal$$module$build$src$core$utils$style=function(a){if(getComputedStyle$$module$build$src$core$utils$style(a,\"display\")!==\"none\")return getSizeWithDisplay$$module$build$src$core$utils$style(a);const b=a.style,c=b.display,d=b.visibility,e=b.position;b.visibility=\"hidden\";b.position=\"absolute\";b.display=\"inline\";const f=a.offsetWidth;a=a.offsetHeight;b.display=c;b.position=e;b.visibility=d;return new Size$$module$build$src$core$utils$size(f,a)};\ngetSizeWithDisplay$$module$build$src$core$utils$style=function(a){return new Size$$module$build$src$core$utils$size(a.offsetWidth,a.offsetHeight)};getComputedStyle$$module$build$src$core$utils$style=function(a,b){a=window.getComputedStyle(a);return a[b]||a.getPropertyValue(b)};\ngetPageOffset$$module$build$src$core$utils$style=function(a){const b=new Coordinate$$module$build$src$core$utils$coordinate(0,0);a=a.getBoundingClientRect();var c=document.documentElement;c=new Coordinate$$module$build$src$core$utils$coordinate(window.pageXOffset||c.scrollLeft,window.pageYOffset||c.scrollTop);b.x=a.left+c.x;b.y=a.top+c.y;return b};\ngetViewportPageOffset$$module$build$src$core$utils$style=function(){const a=document.body,b=document.documentElement;return new Coordinate$$module$build$src$core$utils$coordinate(a.scrollLeft||b.scrollLeft,a.scrollTop||b.scrollTop)};\ngetBorderBox$$module$build$src$core$utils$style=function(a){const b=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderLeftWidth\")),c=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderRightWidth\")),d=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderTopWidth\"));a=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderBottomWidth\"));return new Rect$$module$build$src$core$utils$rect(d,a,b,c)};\nscrollIntoContainerView$$module$build$src$core$utils$style=function(a,b,c){a=getContainerOffsetToScrollInto$$module$build$src$core$utils$style(a,b,c);b.scrollLeft=a.x;b.scrollTop=a.y};\ngetContainerOffsetToScrollInto$$module$build$src$core$utils$style=function(a,b,c){var d=getPageOffset$$module$build$src$core$utils$style(a),e=getPageOffset$$module$build$src$core$utils$style(b),f=getBorderBox$$module$build$src$core$utils$style(b);const g=d.x-e.x-f.left;d=d.y-e.y-f.top;e=getSizeWithDisplay$$module$build$src$core$utils$style(a);a=b.clientWidth-e.width;e=b.clientHeight-e.height;f=b.scrollLeft;b=b.scrollTop;c?(f+=g-a/2,b+=d-e/2):(f+=Math.min(g,Math.max(g-a,0)),b+=Math.min(d,Math.max(d-\ne,0)));return new Coordinate$$module$build$src$core$utils$coordinate(f,b)};\ngetRelativeXY$$module$build$src$core$utils$svg_math=function(a){const b=new Coordinate$$module$build$src$core$utils$coordinate(0,0);var c=a.x&&a.getAttribute(\"x\");const d=a.y&&a.getAttribute(\"y\");c&&(b.x=parseInt(c));d&&(b.y=parseInt(d));if(c=(c=a.getAttribute(\"transform\"))&&c.match(XY_REGEX$$module$build$src$core$utils$svg_math))b.x+=Number(c[1]),c[3]&&(b.y+=Number(c[3]));(a=a.getAttribute(\"style\"))&&a.includes(\"translate\")&&(a=a.match(XY_STYLE_REGEX$$module$build$src$core$utils$svg_math))&&(b.x+=\nNumber(a[1]),a[3]&&(b.y+=Number(a[3])));return b};getInjectionDivXY$$module$build$src$core$utils$svg_math=function(a){let b=0,c=0;for(;a;){const d=getRelativeXY$$module$build$src$core$utils$svg_math(a);b+=d.x;c+=d.y;if((\" \"+(a.getAttribute(\"class\")||\"\")+\" \").includes(\" injectionDiv \"))break;a=a.parentNode}return new Coordinate$$module$build$src$core$utils$coordinate(b,c)};\ngetViewportBBox$$module$build$src$core$utils$svg_math=function(){const a=getViewportPageOffset$$module$build$src$core$utils$style();return new Rect$$module$build$src$core$utils$rect(a.y,document.documentElement.clientHeight+a.y,a.x,document.documentElement.clientWidth+a.x)};getDocumentScroll$$module$build$src$core$utils$svg_math=function(){const a=document.documentElement,b=window;return new Coordinate$$module$build$src$core$utils$coordinate(b.pageXOffset||a.scrollLeft,b.pageYOffset||a.scrollTop)};\nscreenToWsCoordinates$$module$build$src$core$utils$svg_math=function(a,b){var c=b.x;b=b.y;const d=a.getInjectionDiv().getBoundingClientRect();c=new Coordinate$$module$build$src$core$utils$coordinate(c-d.left,b-d.top);b=a.getOriginOffsetInPixels();return Coordinate$$module$build$src$core$utils$coordinate.difference(c,b).scale(1/a.scale)};\nwsToScreenCoordinates$$module$build$src$core$utils$svg_math=function(a,b){var c=b.scale(a.scale);b=c.x;c=c.y;const d=a.getInjectionDiv().getBoundingClientRect();a=a.getOriginOffsetInPixels();return new Coordinate$$module$build$src$core$utils$coordinate(b+d.left+a.x,c+d.top+a.y)};\ninjectDependencies$$module$build$src$core$utils$xml=function(a){({document:document$$module$build$src$core$utils$xml=document$$module$build$src$core$utils$xml,DOMParser:DOMParser$$module$build$src$core$utils$xml=DOMParser$$module$build$src$core$utils$xml,XMLSerializer:XMLSerializer$$module$build$src$core$utils$xml=XMLSerializer$$module$build$src$core$utils$xml}=a);domParser$$module$build$src$core$utils$xml=new DOMParser$$module$build$src$core$utils$xml;xmlSerializer$$module$build$src$core$utils$xml=\nnew XMLSerializer$$module$build$src$core$utils$xml};$.createElement$$module$build$src$core$utils$xml=function(a){return document$$module$build$src$core$utils$xml.createElementNS(NAME_SPACE$$module$build$src$core$utils$xml,a)};$.createTextNode$$module$build$src$core$utils$xml=function(a){return document$$module$build$src$core$utils$xml.createTextNode(a)};\n$.textToDom$$module$build$src$core$utils$xml=function(a){let b=domParser$$module$build$src$core$utils$xml.parseFromString(a,\"text/xml\");if(b&&b.documentElement&&!b.getElementsByTagName(\"parsererror\").length)return b.documentElement;if((b=domParser$$module$build$src$core$utils$xml.parseFromString(a,\"text/html\"))&&b.body.firstChild&&b.body.firstChild.nodeName.toLowerCase()===\"xml\")return b.body.firstChild;throw Error(`DOMParser was unable to parse: ${a}`);};\ndomToText$$module$build$src$core$utils$xml=function(a){return sanitizeText$$module$build$src$core$utils$xml(xmlSerializer$$module$build$src$core$utils$xml.serializeToString(a))};sanitizeText$$module$build$src$core$utils$xml=function(a){return a.replace(INVALID_CONTROL_CHARS$$module$build$src$core$utils$xml,b=>`&#${b.charCodeAt(0)};`)};\nconvertToolboxDefToJson$$module$build$src$core$utils$toolbox=function(a){if(!a)return null;if(a instanceof Element||typeof a===\"string\")a=parseToolboxTree$$module$build$src$core$utils$toolbox(a),a=convertToToolboxJson$$module$build$src$core$utils$toolbox(a);validateToolbox$$module$build$src$core$utils$toolbox(a);return a};\nvalidateToolbox$$module$build$src$core$utils$toolbox=function(a){const b=a.kind;a=a.contents;if(b&&b!==FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox&&b!==CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox)throw Error(\"Invalid toolbox kind \"+b+\". Please supply either \"+FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox+\" or \"+CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox);if(!a)throw Error(\"Toolbox must have a contents attribute.\");};\nconvertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox=function(a){return a?a.contents?a.contents:Array.isArray(a)&&a.length>0&&!a[0].nodeType?a:xmlToJsonArray$$module$build$src$core$utils$toolbox(a):[]};hasCategories$$module$build$src$core$utils$toolbox=function(a){return TEST_ONLY$$module$build$src$core$utils$toolbox.hasCategoriesInternal(a)};\nhasCategoriesInternal$$module$build$src$core$utils$toolbox=function(a){if(!a)return!1;const b=a.kind;return b?b===CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox:!!a.contents.filter(c=>c.kind.toUpperCase()===\"CATEGORY\").length};isCategoryCollapsible$$module$build$src$core$utils$toolbox=function(a){return a&&a.contents?!!a.contents.filter(function(b){return b.kind.toUpperCase()===\"CATEGORY\"}).length:!1};\nconvertToToolboxJson$$module$build$src$core$utils$toolbox=function(a){const b={contents:xmlToJsonArray$$module$build$src$core$utils$toolbox(a)};a instanceof Node&&addAttributes$$module$build$src$core$utils$toolbox(a,b);return b};\nxmlToJsonArray$$module$build$src$core$utils$toolbox=function(a){const b=[];let c=a.childNodes;c||(c=a);for(let d=0,e;e=c[d];d++){if(!e.tagName)continue;a={};const f=e.tagName.toUpperCase();a.kind=f;f===\"BLOCK\"?a.blockxml=e:e.childNodes&&e.childNodes.length>0&&(a.contents=xmlToJsonArray$$module$build$src$core$utils$toolbox(e));addAttributes$$module$build$src$core$utils$toolbox(e,a);b.push(a)}return b};\naddAttributes$$module$build$src$core$utils$toolbox=function(a,b){for(let c=0;c document.\");}else a instanceof Element&&(b=a);return b};\ngetStartPositionRect$$module$build$src$core$positionable_helpers=function(a,b,c,d,e,f){const g=f.scrollbar&&f.scrollbar.canScrollVertically();a.horizontal===horizontalPosition$$module$build$src$core$positionable_helpers.LEFT?(c=e.absoluteMetrics.left+c,g&&f.RTL&&(c+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness)):(c=e.absoluteMetrics.left+e.viewMetrics.width-b.width-c,g&&!f.RTL&&(c-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness));a.vertical===verticalPosition$$module$build$src$core$positionable_helpers.TOP?\na=e.absoluteMetrics.top+d:(a=e.absoluteMetrics.top+e.viewMetrics.height-b.height-d,f.scrollbar&&f.scrollbar.canScrollHorizontally()&&(a-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness));return new Rect$$module$build$src$core$utils$rect(a,a+b.height,c,c+b.width)};\ngetCornerOppositeToolbox$$module$build$src$core$positionable_helpers=function(a,b){return{horizontal:b.toolboxMetrics.position===Position$$module$build$src$core$utils$toolbox.LEFT||a.horizontalLayout&&!a.RTL?horizontalPosition$$module$build$src$core$positionable_helpers.RIGHT:horizontalPosition$$module$build$src$core$positionable_helpers.LEFT,vertical:b.toolboxMetrics.position===Position$$module$build$src$core$utils$toolbox.BOTTOM?verticalPosition$$module$build$src$core$positionable_helpers.TOP:verticalPosition$$module$build$src$core$positionable_helpers.BOTTOM}};\nbumpPositionRect$$module$build$src$core$positionable_helpers=function(a,b,c,d){const e=a.left,f=a.right-a.left,g=a.bottom-a.top;for(let h=0;hf.id!==a.id).map(f=>f.getRelativeToSurfaceXY());for(;commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster(Coordinate$$module$build$src$core$utils$coordinate.sum(c,d),e);)d.translate(b.RTL?-30:30,30);a.moveTo(Coordinate$$module$build$src$core$utils$coordinate.sum(c,\nd))};commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster=function(a,b){return b.some(c=>Math.abs(c.x-a.x)<=1&&Math.abs(c.y-a.y)<=1)};setRole$$module$build$src$core$utils$aria=function(a,b){a.setAttribute(ROLE_ATTRIBUTE$$module$build$src$core$utils$aria,b)};setState$$module$build$src$core$utils$aria=function(a,b,c){Array.isArray(c)&&(c=c.join(\" \"));a.setAttribute(ARIA_PREFIX$$module$build$src$core$utils$aria+b,`${c}`)};\nisSerializable$$module$build$src$core$interfaces$i_serializable=function(a){return a&&typeof a.saveState===\"function\"&&typeof a.loadState===\"function\"};\nqueueRender$$module$build$src$core$render_management=function(a){queueBlock$$module$build$src$core$render_management(a);if(alwaysImmediatelyRender$$module$build$src$core$render_management())return doRenders$$module$build$src$core$render_management(),Promise.resolve();afterRendersPromise$$module$build$src$core$render_management||(afterRendersPromise$$module$build$src$core$render_management=new Promise(b=>{afterRendersResolver$$module$build$src$core$render_management=b;animationRequestId$$module$build$src$core$render_management=\nwindow.requestAnimationFrame(()=>{doRenders$$module$build$src$core$render_management();b()})}));return afterRendersPromise$$module$build$src$core$render_management};finishQueuedRenders$$module$build$src$core$render_management=function(){return afterRendersPromise$$module$build$src$core$render_management?afterRendersPromise$$module$build$src$core$render_management:Promise.resolve()};\ntriggerQueuedRenders$$module$build$src$core$render_management=function(a){a||window.cancelAnimationFrame(animationRequestId$$module$build$src$core$render_management);doRenders$$module$build$src$core$render_management(a);!a&&afterRendersResolver$$module$build$src$core$render_management&&afterRendersResolver$$module$build$src$core$render_management()};alwaysImmediatelyRender$$module$build$src$core$render_management=function(){return JavaFx$$module$build$src$core$utils$useragent};\nqueueBlock$$module$build$src$core$render_management=function(a){dirtyBlocks$$module$build$src$core$render_management.add(a);eventGroups$$module$build$src$core$render_management.set(a,$.getGroup$$module$build$src$core$events$utils());const b=a.getParent();b?queueBlock$$module$build$src$core$render_management(b):rootBlocks$$module$build$src$core$render_management.add(a)};\ndoRenders$$module$build$src$core$render_management=function(a){const b=a?new Set([a]):new Set([...rootBlocks$$module$build$src$core$render_management].map(f=>f.workspace)),c=[...rootBlocks$$module$build$src$core$render_management].filter(shouldRenderRootBlock$$module$build$src$core$render_management).filter(f=>b.has(f.workspace));for(var d of c)renderBlock$$module$build$src$core$render_management(d);for(const f of b)f.resizeContents();for(var e of c)d=e.getRelativeToSurfaceXY(),e.updateComponentLocations(d);\nfor(const f of c)e=$.getGroup$$module$build$src$core$events$utils(),(d=eventGroups$$module$build$src$core$render_management.get(f))&&$.setGroup$$module$build$src$core$events$utils(d),f.bumpNeighbours(),$.setGroup$$module$build$src$core$events$utils(e);for(const f of c)dequeueBlock$$module$build$src$core$render_management(f);a||(afterRendersPromise$$module$build$src$core$render_management=null)};\ndequeueBlock$$module$build$src$core$render_management=function(a){rootBlocks$$module$build$src$core$render_management.delete(a);dirtyBlocks$$module$build$src$core$render_management.delete(a);eventGroups$$module$build$src$core$render_management.delete(a);for(const b of a.getChildren(!1))dequeueBlock$$module$build$src$core$render_management(b)};shouldRenderRootBlock$$module$build$src$core$render_management=function(a){return!a.isDisposed()&&!a.getParent()};\nrenderBlock$$module$build$src$core$render_management=function(a){if(dirtyBlocks$$module$build$src$core$render_management.has(a)&&a.initialized){for(const b of a.getChildren(!1))renderBlock$$module$build$src$core$render_management(b);a.renderEfficiently()}};alert$$module$build$src$core$dialog=function(a,b){alertImplementation$$module$build$src$core$dialog(a,b)};\nsetAlert$$module$build$src$core$dialog=function(a=defaultAlert$$module$build$src$core$dialog){alertImplementation$$module$build$src$core$dialog=a};confirm$$module$build$src$core$dialog=function(a,b){confirmImplementation$$module$build$src$core$dialog(a,b)};setConfirm$$module$build$src$core$dialog=function(a=defaultConfirm$$module$build$src$core$dialog){confirmImplementation$$module$build$src$core$dialog=a};\nprompt$$module$build$src$core$dialog=function(a,b,c){promptImplementation$$module$build$src$core$dialog(a,b,c)};setPrompt$$module$build$src$core$dialog=function(a=defaultPrompt$$module$build$src$core$dialog){promptImplementation$$module$build$src$core$dialog=a};toast$$module$build$src$core$dialog=function(a,b){toastImplementation$$module$build$src$core$dialog(a,b)};\nsetToast$$module$build$src$core$dialog=function(a=defaultToast$$module$build$src$core$dialog){toastImplementation$$module$build$src$core$dialog=a};isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks=function(a){return a&&typeof a.getProcedureDef===\"function\"};isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks=function(a){return a&&typeof a.getProcedureCall===\"function\"&&typeof a.renameProcedure===\"function\"};\nisVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model=function(a){return a.getVariableModel!==void 0};warn$$module$build$src$core$utils$deprecation=function(a,b,c,d){a=a+\" was deprecated in \"+b+\" and will be deleted in \"+c+\".\";d&&(a+=\"\\nUse \"+d+\" instead.\");previousWarnings$$module$build$src$core$utils$deprecation.has(a)||(previousWarnings$$module$build$src$core$utils$deprecation.add(a),console.warn(a))};\n$.allUsedVarModels$$module$build$src$core$variables=function(a){a=a.getAllBlocks(!1);const b=new Set;for(let c=0;c({kind:\"block\",type:d,gap:8,fields:generateVariableFieldJson$$module$build$src$core$variables(g)})));return a};\nxmlFlyoutCategory$$module$build$src$core$variables=function(a){let b=[];const c=document.createElement(\"button\");c.setAttribute(\"text\",\"%{BKY_NEW_VARIABLE}\");c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE\");a.registerButtonCallback(\"CREATE_VARIABLE\",function(d){createVariableButtonHandler$$module$build$src$core$variables(d.getTargetWorkspace())});b.push(c);a=flyoutCategoryBlocks$$module$build$src$core$variables(a);return b=b.concat(a)};\nflyoutCategoryBlocks$$module$build$src$core$variables=function(a){a=a.getVariableMap().getVariablesOfType(\"\");const b=[];if(a.length>0){var c=a[a.length-1];if(Blocks$$module$build$src$core$blocks.variables_set){var d=$.createElement$$module$build$src$core$utils$xml(\"block\");d.setAttribute(\"type\",\"variables_set\");d.setAttribute(\"gap\",Blocks$$module$build$src$core$blocks.math_change?\"8\":\"24\");d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c));b.push(d)}Blocks$$module$build$src$core$blocks.math_change&&\n(d=$.createElement$$module$build$src$core$utils$xml(\"block\"),d.setAttribute(\"type\",\"math_change\"),d.setAttribute(\"gap\",Blocks$$module$build$src$core$blocks.variables_get?\"20\":\"8\"),d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c)),c=$.textToDom$$module$build$src$core$utils$xml('1'),d.appendChild(c),b.push(d));if(Blocks$$module$build$src$core$blocks.variables_get){a.sort(compareByName$$module$build$src$core$variables);\nfor(let e=0,f;f=a[e];e++)c=$.createElement$$module$build$src$core$utils$xml(\"block\"),c.setAttribute(\"type\",\"variables_get\"),c.setAttribute(\"gap\",\"8\"),c.appendChild(generateVariableFieldDom$$module$build$src$core$variables(f)),b.push(c)}}return b};generateUniqueName$$module$build$src$core$variables=function(a){return TEST_ONLY$$module$build$src$core$variables.generateUniqueNameInternal(a)};\ngenerateUniqueNameInternal$$module$build$src$core$variables=function(a){return generateUniqueNameFromOptions$$module$build$src$core$variables(VAR_LETTER_OPTIONS$$module$build$src$core$variables.charAt(0),a.getVariableMap().getAllVariables().map(b=>b.getName()))};\ngenerateUniqueNameFromOptions$$module$build$src$core$variables=function(a,b){if(!b.length)return a;const c=VAR_LETTER_OPTIONS$$module$build$src$core$variables;let d=\"\",e=c.indexOf(a);for(;;){let f=!1;for(let g=0;gf.getVariableModel().getName());if(d&&(c=d.some(f=>f.toLowerCase()===a),d=d.some(f=>f.toLowerCase()===b),c&&d))return e.getName()}return null};\ncheckForConflictingParamWithLegacyProcedures$$module$build$src$core$variables=function(a,b,c){a=a.toLowerCase();b=b.toLowerCase();c=c.getAllBlocks(!1);for(const e of c){if(!isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(e))continue;c=e.getProcedureDef();var d=c[1];const f=d.some(g=>g.toLowerCase()===a);d=d.some(g=>g.toLowerCase()===b);if(f&&d)return c[0]}return null};\ngenerateVariableFieldDom$$module$build$src$core$variables=function(a){const b=$.createElement$$module$build$src$core$utils$xml(\"field\");b.setAttribute(\"name\",\"VAR\");b.setAttribute(\"id\",a.getId());b.setAttribute(\"variabletype\",a.getType());a=$.createTextNode$$module$build$src$core$utils$xml(a.getName());b.appendChild(a);return b};\n$.getOrCreateVariablePackage$$module$build$src$core$variables=function(a,b,c,d){let e=$.getVariable$$module$build$src$core$variables(a,b,c,d);e||(e=createVariable$$module$build$src$core$variables(a,b,c,d));return e};\n$.getVariable$$module$build$src$core$variables=function(a,b,c,d){const e=a.getPotentialVariableMap();let f=null;if(b&&(f=a.getVariableById(b),!f&&e&&(f=e.getVariableById(b)),f))return f;if(c){if(d===void 0)throw Error(\"Tried to look up a variable by name without a type\");f=a.getVariable(c,d);!f&&e&&(f=e.getVariable(c,d))}return f};\ncreateVariable$$module$build$src$core$variables=function(a,b,c,d){const e=a.getVariableMap(),f=a.getPotentialVariableMap();c||(c=generateUniqueName$$module$build$src$core$variables(a.isFlyout?a.targetWorkspace:a));return f?f.createVariable(c,d,b!=null?b:void 0):e.createVariable(c,d,b)};getAddedVariables$$module$build$src$core$variables=function(a,b){a=a.getAllVariables();const c=[];if(b.length!==a.length)for(let d=0;d=0;f--){const g=e[f];if(g.type===\"procedures_defnoreturn\"||g.type===\"procedures_defreturn\"){c=String(g.getFieldValue(\"NAME\"));d=$.Msg$$module$build$src$core$msg.CANNOT_DELETE_VARIABLE_PROCEDURE.replace(\"%1\",d).replace(\"%2\",c);alert$$module$build$src$core$dialog(d);return}g===c&&e.splice(f,1)}c&&e.length||e.length>1?(d=\n$.Msg$$module$build$src$core$msg.DELETE_VARIABLE_CONFIRMATION.replace(\"%1\",String(e.length+(c&&!c.workspace.isFlyout?1:0))).replace(\"%2\",d),confirm$$module$build$src$core$dialog(d,f=>{f&&b&&a.getVariableMap().deleteVariable(b)})):a.getVariableMap().deleteVariable(b)};\nsave$$module$build$src$core$serialization$blocks=function(a,{addCoordinates:b=!1,addInputBlocks:c=!0,addNextBlocks:d=!0,doFullSerialization:e=!0,saveIds:f=!0}={}){if(a.isInsertionMarker())return null;const g={type:a.type,id:f?a.id:void 0};b&&saveCoords$$module$build$src$core$serialization$blocks(a,g);saveAttributes$$module$build$src$core$serialization$blocks(a,g);saveExtraState$$module$build$src$core$serialization$blocks(a,g,e);saveIcons$$module$build$src$core$serialization$blocks(a,g,e);saveFields$$module$build$src$core$serialization$blocks(a,\ng,e);c&&saveInputBlocks$$module$build$src$core$serialization$blocks(a,g,e,f);d&&saveNextBlocks$$module$build$src$core$serialization$blocks(a,g,e,f);return g};\nsaveAttributes$$module$build$src$core$serialization$blocks=function(a,b){a.isCollapsed()&&(b.collapsed=!0);a.isEnabled()||(b.disabledReasons=Array.from(a.getDisabledReasons()));a.isOwnDeletable()||(b.deletable=!1);a.isOwnMovable()||(b.movable=!1);a.isOwnEditable()||(b.editable=!1);a.inputsInline!==void 0&&a.inputsInline!==a.inputsInlineDefault&&(b.inline=a.inputsInline);a.data&&(b.data=a.data)};\nsaveCoords$$module$build$src$core$serialization$blocks=function(a,b){const c=a.workspace;a=a.getRelativeToSurfaceXY();b.x=Math.round(c.RTL?c.getWidth()-a.x:a.x);b.y=Math.round(a.y)};saveExtraState$$module$build$src$core$serialization$blocks=function(a,b,c){a.saveExtraState?(a=a.saveExtraState(c),a!==null&&(b.extraState=a)):a.mutationToDom&&(a=a.mutationToDom(),a!==null&&(b.extraState=domToText$$module$build$src$core$xml(a).replace(' xmlns=\"https://developers.google.com/blockly/xml\"',\"\")))};\nsaveIcons$$module$build$src$core$serialization$blocks=function(a,b,c){const d=Object.create(null);for(const e of a.getIcons())isSerializable$$module$build$src$core$interfaces$i_serializable(e)&&(a=e.saveState(c))&&(d[e.getType().toString()]=a);Object.keys(d).length&&(b.icons=d)};saveFields$$module$build$src$core$serialization$blocks=function(a,b,c){const d=Object.create(null);for(const e of a.getFields())e.isSerializable()&&(d[e.name]=e.saveState(c));Object.keys(d).length&&(b.fields=d)};\nsaveInputBlocks$$module$build$src$core$serialization$blocks=function(a,b,c,d){const e=Object.create(null);for(let f=0;f{k.disposed||k.setConnectionTracking(!0)},\n1)}return h};\nappendPrivate$$module$build$src$core$serialization$blocks=function(a,b,{parentConnection:c,isShadow:d=!1}={}){if(!a.type)throw new MissingBlockType$$module$build$src$core$serialization$exceptions(a);const e=b.newBlock(a.type,a.id);e.setShadow(d);loadCoords$$module$build$src$core$serialization$blocks(e,a);loadAttributes$$module$build$src$core$serialization$blocks(e,a);loadExtraState$$module$build$src$core$serialization$blocks(e,a);tryToConnectParent$$module$build$src$core$serialization$blocks(c,e,\na);loadIcons$$module$build$src$core$serialization$blocks(e,a);loadFields$$module$build$src$core$serialization$blocks(e,a);loadInputBlocks$$module$build$src$core$serialization$blocks(e,a);loadNextBlocks$$module$build$src$core$serialization$blocks(e,a);initBlock$$module$build$src$core$serialization$blocks(e,b.rendered);return e};\ncheckNewVariables$$module$build$src$core$serialization$blocks=function(a,b){if(isEnabled$$module$build$src$core$events$utils())for(a=getAddedVariables$$module$build$src$core$variables(a,b),b=0;bb&&(b=c[d].length);var e=-Infinity;let f,g=1;do{d=e;f=a;a=[];e=c.length/g;let h=1;for(let k=0;kd);return f};\nwrapScore$$module$build$src$core$utils$string=function(a,b,c){const d=[0],e=[];for(var f=0;f1&&d[d.length-1]<=d[d.length-2]&&(b+=.5);return b};\nwrapMutate$$module$build$src$core$utils$string=function(a,b,c){let d=wrapScore$$module$build$src$core$utils$string(a,b,c),e;for(let f=0;fd&&(d=h,e=g)}return e?wrapMutate$$module$build$src$core$utils$string(a,e,c):b};\nwrapToText$$module$build$src$core$utils$string=function(a,b){const c=[];for(let d=0;dRADIUS_OK$$module$build$src$core$tooltip&&hide$$module$build$src$core$tooltip()}else poisonedElement$$module$build$src$core$tooltip!==element$$module$build$src$core$tooltip&&\n(clearTimeout(showPid$$module$build$src$core$tooltip),lastX$$module$build$src$core$tooltip=a.pageX,lastY$$module$build$src$core$tooltip=a.pageY,showPid$$module$build$src$core$tooltip=setTimeout(show$$module$build$src$core$tooltip,HOVER_MS$$module$build$src$core$tooltip))};dispose$$module$build$src$core$tooltip=function(){poisonedElement$$module$build$src$core$tooltip=element$$module$build$src$core$tooltip=null;hide$$module$build$src$core$tooltip()};\nhide$$module$build$src$core$tooltip=function(){visible$$module$build$src$core$tooltip&&(visible$$module$build$src$core$tooltip=!1,containerDiv$$module$build$src$core$tooltip&&(containerDiv$$module$build$src$core$tooltip.style.display=\"none\"));showPid$$module$build$src$core$tooltip&&(clearTimeout(showPid$$module$build$src$core$tooltip),showPid$$module$build$src$core$tooltip=0)};\nblock$$module$build$src$core$tooltip=function(){hide$$module$build$src$core$tooltip();blocked$$module$build$src$core$tooltip=!0};unblock$$module$build$src$core$tooltip=function(){blocked$$module$build$src$core$tooltip=!1};\nrenderContent$$module$build$src$core$tooltip=function(){containerDiv$$module$build$src$core$tooltip&&element$$module$build$src$core$tooltip&&(typeof customTooltip$$module$build$src$core$tooltip===\"function\"?customTooltip$$module$build$src$core$tooltip(containerDiv$$module$build$src$core$tooltip,element$$module$build$src$core$tooltip):renderDefaultContent$$module$build$src$core$tooltip())};\nrenderDefaultContent$$module$build$src$core$tooltip=function(){var a=getTooltipOfObject$$module$build$src$core$tooltip(element$$module$build$src$core$tooltip);a=$.wrap$$module$build$src$core$utils$string(a,LIMIT$$module$build$src$core$tooltip);a=a.split(\"\\n\");for(let b=0;bc+window.scrollY&&(e-=containerDiv$$module$build$src$core$tooltip.offsetHeight+\n2*OFFSET_Y$$module$build$src$core$tooltip);a?d=Math.max(MARGINS$$module$build$src$core$tooltip-window.scrollX,d):d+containerDiv$$module$build$src$core$tooltip.offsetWidth>b+window.scrollX-2*MARGINS$$module$build$src$core$tooltip&&(d=b-containerDiv$$module$build$src$core$tooltip.offsetWidth-2*MARGINS$$module$build$src$core$tooltip);return{x:d,y:e}};\nshow$$module$build$src$core$tooltip=function(){if(!blocked$$module$build$src$core$tooltip&&(poisonedElement$$module$build$src$core$tooltip=element$$module$build$src$core$tooltip,containerDiv$$module$build$src$core$tooltip)){containerDiv$$module$build$src$core$tooltip.textContent=\"\";renderContent$$module$build$src$core$tooltip();var a=element$$module$build$src$core$tooltip.RTL;containerDiv$$module$build$src$core$tooltip.style.direction=a?\"rtl\":\"ltr\";containerDiv$$module$build$src$core$tooltip.style.display=\n\"block\";visible$$module$build$src$core$tooltip=!0;var {x:b,y:c}=getPosition$$module$build$src$core$tooltip(a);containerDiv$$module$build$src$core$tooltip.style.left=b+\"px\";containerDiv$$module$build$src$core$tooltip.style.top=c+\"px\"}};getHsvSaturation$$module$build$src$core$utils$colour=function(){return hsvSaturation$$module$build$src$core$utils$colour};setHsvSaturation$$module$build$src$core$utils$colour=function(a){hsvSaturation$$module$build$src$core$utils$colour=a};\ngetHsvValue$$module$build$src$core$utils$colour=function(){return hsvValue$$module$build$src$core$utils$colour};setHsvValue$$module$build$src$core$utils$colour=function(a){hsvValue$$module$build$src$core$utils$colour=a};\nparse$$module$build$src$core$utils$colour=function(a){a=`${a}`.toLowerCase().trim();var b=names$$module$build$src$core$utils$colour[a];if(b)return b;b=a.substring(0,2)===\"0x\"?\"#\"+a.substring(2):a;b=b[0]===\"#\"?b:\"#\"+b;if(/^#[0-9a-f]{6}$/.test(b))return b;if(/^#[0-9a-f]{3}$/.test(b))return[\"#\",b[1],b[1],b[2],b[2],b[3],b[3]].join(\"\");var c=a.match(/^(?:rgb)?\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/);return c&&(a=Number(c[1]),b=Number(c[2]),c=Number(c[3]),a>=0&&a<256&&b>=0&&b<256&&c>=0&&c<256)?rgbToHex$$module$build$src$core$utils$colour(a,\nb,c):null};rgbToHex$$module$build$src$core$utils$colour=function(a,b,c){b=a<<16|b<<8|c;return a<16?\"#\"+(16777216|b).toString(16).substr(1):\"#\"+b.toString(16)};hexToRgb$$module$build$src$core$utils$colour=function(a){a=parse$$module$build$src$core$utils$colour(a);if(!a)return[0,0,0];a=parseInt(a.substr(1),16);return[a>>16,a>>8&255,a&255]};\nhsvToHex$$module$build$src$core$utils$colour=function(a,b,c){let d=0,e=0,f=0;if(b===0)f=e=d=c;else{const g=Math.floor(a/60),h=a/60-g;a=c*(1-b);const k=c*(1-b*h);b=c*(1-b*(1-h));switch(g){case 1:d=k;e=c;f=a;break;case 2:d=a;e=c;f=b;break;case 3:d=a;e=k;f=c;break;case 4:d=b;e=a;f=c;break;case 5:d=c;e=a;f=k;break;case 6:case 0:d=c,e=b,f=a}}return rgbToHex$$module$build$src$core$utils$colour(Math.floor(d),Math.floor(e),Math.floor(f))};\nblend$$module$build$src$core$utils$colour=function(a,b,c){a=parse$$module$build$src$core$utils$colour(a);if(!a)return null;b=parse$$module$build$src$core$utils$colour(b);if(!b)return null;a=hexToRgb$$module$build$src$core$utils$colour(a);b=hexToRgb$$module$build$src$core$utils$colour(b);return rgbToHex$$module$build$src$core$utils$colour(Math.round(b[0]+c*(a[0]-b[0])),Math.round(b[1]+c*(a[1]-b[1])),Math.round(b[2]+c*(a[2]-b[2])))};\nhueToHex$$module$build$src$core$utils$colour=function(a){return hsvToHex$$module$build$src$core$utils$colour(a,hsvSaturation$$module$build$src$core$utils$colour,hsvValue$$module$build$src$core$utils$colour*255)};\ntokenizeInterpolationInternal$$module$build$src$core$utils$parsing=function(a,b,c){const d=[];var e=a.split(\"\");e.push(\"\");var f=0;a=[];let g=null;for(let l=0;l=a.bottom?b.top-c.height:b.bottom};isRepositionable$$module$build$src$core$widgetdiv=function(a){return!(a==null||!a.repositionForWindowResize)};repositionForWindowResize$$module$build$src$core$widgetdiv=function(){isRepositionable$$module$build$src$core$widgetdiv(owner$$module$build$src$core$widgetdiv)&&owner$$module$build$src$core$widgetdiv.repositionForWindowResize()||hide$$module$build$src$core$widgetdiv()};\ngetCurrentBlock$$module$build$src$core$contextmenu=function(){return currentBlock$$module$build$src$core$contextmenu};setCurrentBlock$$module$build$src$core$contextmenu=function(a){currentBlock$$module$build$src$core$contextmenu=a};\nshow$$module$build$src$core$contextmenu=function(a,b,c,d,e){show$$module$build$src$core$widgetdiv(dummyOwner$$module$build$src$core$contextmenu,c,dispose$$module$build$src$core$contextmenu,d);if(b.length){e||(a instanceof PointerEvent?e=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):(console.warn(\"Context menu opened with keyboard but no location given\"),e=new Coordinate$$module$build$src$core$utils$coordinate(0,0)));var f=populate_$$module$build$src$core$contextmenu(b,\nc,a,e);menu_$$module$build$src$core$contextmenu=f;position_$$module$build$src$core$contextmenu(f,c,e);setTimeout(function(){f.focus()},1);currentBlock$$module$build$src$core$contextmenu=null}else hide$$module$build$src$core$contextmenu()};\npopulate_$$module$build$src$core$contextmenu=function(a,b,c,d){const e=new Menu$$module$build$src$core$menu;e.setRole(Role$$module$build$src$core$utils$aria.MENU);for(let f=0;f{setTimeout(()=>{g.callback(g.scope,c,l,d)},0)})},{})}return e};\nposition_$$module$build$src$core$contextmenu=function(a,b,c){const d=getViewportBBox$$module$build$src$core$utils$svg_math();c=new Rect$$module$build$src$core$utils$rect(c.y+d.top,c.y+d.top,c.x+d.left,c.x+d.left);createWidget_$$module$build$src$core$contextmenu(a);const e=a.getSize();b&&(c.left+=e.width,c.right+=e.width,d.left+=e.width,d.right+=e.width);positionWithAnchor$$module$build$src$core$widgetdiv(d,c,e,b);a.focus()};\ncreateWidget_$$module$build$src$core$contextmenu=function(a){var b=getDiv$$module$build$src$core$widgetdiv();if(!b)throw Error(\"Attempting to create a context menu when widget div is null\");b=a.render(b);addClass$$module$build$src$core$utils$dom(b,\"blocklyContextMenu\");conditionalBind$$module$build$src$core$browser_events(b,\"contextmenu\",null,haltPropagation$$module$build$src$core$contextmenu);a.focus()};haltPropagation$$module$build$src$core$contextmenu=function(a){a.preventDefault();a.stopPropagation()};\nhide$$module$build$src$core$contextmenu=function(){hideIfOwner$$module$build$src$core$widgetdiv(dummyOwner$$module$build$src$core$contextmenu);currentBlock$$module$build$src$core$contextmenu=null};dispose$$module$build$src$core$contextmenu=function(){menu_$$module$build$src$core$contextmenu&&(menu_$$module$build$src$core$contextmenu.dispose(),menu_$$module$build$src$core$contextmenu=null)};\n$.callbackFactory$$module$build$src$core$contextmenu=function(a,b){return()=>{$.disable$$module$build$src$core$events$utils();let c;try{c=b instanceof Element?domToBlockInternal$$module$build$src$core$xml(b,a.workspace):appendInternal$$module$build$src$core$serialization$blocks(b,a.workspace);const d=a.getRelativeToSurfaceXY();d.x=a.RTL?d.x-$.config$$module$build$src$core$config.snapRadius:d.x+$.config$$module$build$src$core$config.snapRadius;d.y+=$.config$$module$build$src$core$config.snapRadius*\n2;c.moveBy(d.x,d.y)}finally{$.enable$$module$build$src$core$events$utils()}isEnabled$$module$build$src$core$events$utils()&&!c.isShadow()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(c));$.getFocusManager$$module$build$src$core$focus_manager().focusNode(c);return c}};\nmouseToWorkspacePoint$$module$build$src$core$utils$drag=function(a,b){b=mouseToSvg$$module$build$src$core$browser_events(b,a.getParentSvg(),a.getInverseScreenCTM());b.x/=a.scale;b.y/=a.scale;return b};start$$module$build$src$core$utils$drag=function(a,b,c){b=mouseToWorkspacePoint$$module$build$src$core$utils$drag(a,b);workspaceToDragDelta$$module$build$src$core$utils$drag.set(a,Coordinate$$module$build$src$core$utils$coordinate.difference(c,b))};\nmove$$module$build$src$core$utils$drag=function(a,b){b=mouseToWorkspacePoint$$module$build$src$core$utils$drag(a,b);a=workspaceToDragDelta$$module$build$src$core$utils$drag.get(a);if(!a)throw Error(\"Drag not initialized\");return Coordinate$$module$build$src$core$utils$coordinate.sum(a,b)};\nworkspaceToDom$$module$build$src$core$xml=function(a,b=!1){const c=$.createElement$$module$build$src$core$utils$xml(\"xml\");var d=variablesToDom$$module$build$src$core$xml($.allUsedVarModels$$module$build$src$core$variables(a));d.hasChildNodes()&&c.appendChild(d);for(const e of a.getTopComments())c.appendChild(saveWorkspaceComment$$module$build$src$core$xml(e,b));a=a.getTopBlocks(!0);for(d=0;d/g,\"<$1$2>\")};\ndomToPrettyText$$module$build$src$core$xml=function(a){a=domToText$$module$build$src$core$xml(a).split(\"<\");let b=\"\";for(let c=1;c\"&&(b+=\" \")}a=a.join(\"\\n\");a=a.replace(/(<(\\w+)\\b[^>]*>[^\\n]*)\\n *<\\/\\2>/g,\"$1\");return a.replace(/^\\n/,\"\")};\nclearWorkspaceAndLoadFromXml$$module$build$src$core$xml=function(a,b){b.setResizesEnabled(!1);b.clear();a=$.domToWorkspace$$module$build$src$core$xml(a,b);b.setResizesEnabled(!0);return a};\n$.domToWorkspace$$module$build$src$core$xml=function(a,b){let c=0;b.RTL&&(c=b.getWidth());const d=[];startTextWidthCache$$module$build$src$core$utils$dom();const e=$.getGroup$$module$build$src$core$events$utils();e||$.setGroup$$module$build$src$core$events$utils(!0);b.setResizesEnabled&&b.setResizesEnabled(!1);let f=!0;try{for(let g=0,h;h=a.childNodes[g];g++){const k=h.nodeName.toLowerCase(),l=h;if(k===\"block\"||k===\"shadow\"&&!getRecordUndo$$module$build$src$core$events$utils()){const m=domToBlockInternal$$module$build$src$core$xml(l,\nb);d.push(m.id);let n;const p=parseInt((n=l.getAttribute(\"x\"))!=null?n:\"10\",10);let r;const q=parseInt((r=l.getAttribute(\"y\"))!=null?r:\"10\",10);isNaN(p)||isNaN(q)||m.moveBy(b.RTL?c-p:p,q,[\"create\"]);f=!1}else{if(k===\"shadow\")throw TypeError(\"Shadow block cannot be a top-level block.\");if(k===\"comment\")loadWorkspaceComment$$module$build$src$core$xml(l,b);else if(k===\"variables\"){if(f)domToVariables$$module$build$src$core$xml(l,b);else throw Error(\"'variables' tag must exist once before block and shadow tag elements in the workspace XML, but it was found in another location.\");\nf=!1}}}}finally{$.setGroup$$module$build$src$core$events$utils(e),b.setResizesEnabled&&b.setResizesEnabled(!0),b.rendered&&triggerQueuedRenders$$module$build$src$core$render_management(),stopTextWidthCache$$module$build$src$core$utils$dom()}fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.FINISHED_LOADING))(b));return d};\nloadWorkspaceComment$$module$build$src$core$xml=function(a,b){var c;const d=(c=a.getAttribute(\"id\"))!=null?c:void 0;c=b.rendered?new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(b,d):new WorkspaceComment$$module$build$src$core$comments$workspace_comment(b,d);var e;c.setText((e=a.textContent)!=null?e:\"\");var f;e=parseInt((f=a.getAttribute(\"x\"))!=null?f:\"\",10);let g;f=parseInt((g=a.getAttribute(\"y\"))!=null?g:\"\",10);isNaN(e)||isNaN(f)||(e=b.RTL?b.getWidth()-e:e,\nc.moveTo(new Coordinate$$module$build$src$core$utils$coordinate(e,f)));var h;b=parseInt((h=a.getAttribute(\"w\"))!=null?h:\"\",10);let k;h=parseInt((k=a.getAttribute(\"h\"))!=null?k:\"\",10);isNaN(b)||isNaN(h)||c.setSize(new Size$$module$build$src$core$utils$size(b,h));a.getAttribute(\"collapsed\")===\"true\"&&c.setCollapsed(!0);a.getAttribute(\"editable\")===\"false\"&&c.setEditable(!1);a.getAttribute(\"movable\")===\"false\"&&c.setMovable(!1);a.getAttribute(\"deletable\")===\"false\"&&c.setDeletable(!1);return c};\nappendDomToWorkspace$$module$build$src$core$xml=function(a,b){if(!b.getBlocksBoundingBox)return $.domToWorkspace$$module$build$src$core$xml(a,b);var c=b.getBlocksBoundingBox();a=$.domToWorkspace$$module$build$src$core$xml(a,b);if(c&&c.top!==c.bottom){var d=c.bottom;c=b.RTL?c.right:c.left;var e=Infinity;let f=-Infinity,g=Infinity;for(let h=0;hf&&(f=k.x)}d=d-g+10;c=b.RTL?c-f:c-e;for(e=0;e=0;g--)f[g].initSvg();for(let g=f.length-1;g>=0;g--)f[g].queueRender();setTimeout(function(){e.disposed||e.setConnectionTracking(!0)},1);b.resizeContents()}else{const e=d.getDescendants(!1);for(let f=e.length-\n1;f>=0;f--)e[f].initModel()}}finally{$.enable$$module$build$src$core$events$utils()}if(isEnabled$$module$build$src$core$events$utils()){a=getAddedVariables$$module$build$src$core$variables(b,c);for(b=0;b{isNaN(n)||isNaN(r)||(n=b.workspace.RTL?b.workspace.getWidth()-(n+h):n,q.setBubbleLocation(new Coordinate$$module$build$src$core$utils$coordinate(n,r)));q.setBubbleVisible(f)},1)}};applyDataTagNodes$$module$build$src$core$xml=function(a,b){for(let c=0;c100)){var b=a.workspace,c=a.getSvgRoot();b.getAudioManager().play(\"delete\");var d=a.getRelativeToSurfaceXY(),e=c.cloneNode(!0);e.setAttribute(\"transform\",\"translate(\"+d.x+\",\"+d.y+\")\");var f;(f=b.getLayerManager())==null||f.appendToAnimationLayer({getSvgRoot:()=>e});disposeUiStep$$module$build$src$core$block_animations(e,{x:d.x,y:d.y,width:a.width,height:a.height},b.RTL,new Date)}};\ndisposeUiStep$$module$build$src$core$block_animations=function(a,b,c,d){const e=((new Date).getTime()-d.getTime())/150;e>1?removeNode$$module$build$src$core$utils$dom(a):(a.setAttribute(\"transform\",\"translate(\"+(b.x+(c?-1:1)*b.width/2*e)+\",\"+(b.y+b.height/2*e)+\") scale(\"+(1-e)+\")\"),setTimeout(disposeUiStep$$module$build$src$core$block_animations,10,a,b,c,d))};\nconnectionUiEffect$$module$build$src$core$block_animations=function(a){var b=a.workspace;const c=b.scale;b.getAudioManager().play(\"click\");if(!(c<1)){var d=b.getSvgXY(a.getSvgRoot());a.outputConnection?(d.x+=(a.RTL?3:-3)*c,d.y+=13*c):a.previousConnection&&(d.x+=(a.RTL?-23:23)*c,d.y+=3*c);var e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CIRCLE,{cx:d.x,cy:d.y,r:0,fill:\"none\",stroke:\"#888\",\"stroke-width\":10},b.getParentSvg());a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.ANIMATE,\n{id:\"animationCircle\",begin:\"indefinite\",attributeName:\"r\",dur:\"150ms\",from:0,to:25*c},e);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.ANIMATE,{id:\"animationOpacity\",begin:\"indefinite\",attributeName:\"opacity\",dur:\"150ms\",from:1,to:0},e);a.beginElement();b.beginElement();setTimeout(()=>void removeNode$$module$build$src$core$utils$dom(e),150)}};\ndisconnectUiEffect$$module$build$src$core$block_animations=function(a){disconnectUiStop$$module$build$src$core$block_animations();a.workspace.getAudioManager().play(\"disconnect\");if(!(a.workspace.scale<1)){var b=a.getHeightWidth().height;b=Math.atan(10/b)/Math.PI*180;a.RTL||(b*=-1);wobblingBlock$$module$build$src$core$block_animations=a;disconnectUiStep$$module$build$src$core$block_animations(a,b,new Date,0)}};\ndisconnectUiStep$$module$build$src$core$block_animations=function(a,b,c,d){const e=[.66,1,.66,0,-.66,-1,-.66,0];let f=\"\";c.getTime()+200>(new Date).getTime()&&(f=`skewX(${Math.round(e[d%e.length]*b)})`,disconnectPid$$module$build$src$core$block_animations=setTimeout(disconnectUiStep$$module$build$src$core$block_animations,15,a,b,c,d+1));a.getSvgRoot().setAttribute(\"transform\",`${a.getTranslation()} ${f}`)};\ndisconnectUiStop$$module$build$src$core$block_animations=function(){wobblingBlock$$module$build$src$core$block_animations&&(disconnectPid$$module$build$src$core$block_animations&&(clearTimeout(disconnectPid$$module$build$src$core$block_animations),disconnectPid$$module$build$src$core$block_animations=null),wobblingBlock$$module$build$src$core$block_animations.getSvgRoot().setAttribute(\"transform\",wobblingBlock$$module$build$src$core$block_animations.getTranslation()),wobblingBlock$$module$build$src$core$block_animations=\nnull)};\nmoveBlockToNotConflict$$module$build$src$core$clipboard$block_paster=function(a,b){a.workspace.RTL&&(b.x=a.workspace.getWidth()-b.x);const c=a.workspace,d=$.config$$module$build$src$core$config.snapRadius,e=Coordinate$$module$build$src$core$utils$coordinate.difference(b,a.getRelativeToSurfaceXY()),f=new Coordinate$$module$build$src$core$utils$coordinate(0,0),g=c.getAllBlocks(!1).filter(h=>h.id!=a.id).map(h=>h.getRelativeToSurfaceXY());for(;blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster(Coordinate$$module$build$src$core$utils$coordinate.sum(b,f),\ng)||blockIsInSnapRadius$$module$build$src$core$clipboard$block_paster(a,Coordinate$$module$build$src$core$utils$coordinate.sum(e,f),d);)c.RTL?f.translate(-d,d*2):f.translate(d,d*2);a.moveTo(Coordinate$$module$build$src$core$utils$coordinate.sum(b,f))};blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster=function(a,b){return b.some(c=>Math.abs(c.x-a.x)<=1&&Math.abs(c.y-a.y)<=1)};\nblockIsInSnapRadius$$module$build$src$core$clipboard$block_paster=function(a,b,c){return a.getConnections_(!1).some(d=>!!d.closest(c,b).connection)};\nbumpObjectIntoBounds$$module$build$src$core$bump_objects=function(a,b,c){const d=c.getBoundingRectangle(),e=d.right-d.left,f=clamp$$module$build$src$core$utils$math(b.top,d.top,b.top+b.height-(d.bottom-d.top))-d.top;let g=b.left;b=b.left+b.width-e;a.RTL?g=Math.min(b,g):b=Math.max(g,b);return(a=clamp$$module$build$src$core$utils$math(g,d.left,b)-d.left)||f?(c.moveBy(a,f,[\"inbounds\"]),!0):!1};\nbumpIntoBoundsHandler$$module$build$src$core$bump_objects=function(a){return b=>{var c=a.getMetricsManager();if(c.hasFixedEdges()&&!a.isDragging()){var d;if(BUMP_EVENTS$$module$build$src$core$events$type.includes((d=b.type)!=null?d:\"\")){d=c.getScrollMetrics(!0);const e=extractObjectFromEvent$$module$build$src$core$bump_objects(a,b);e&&(c=$.getGroup$$module$build$src$core$events$utils()||!1,$.setGroup$$module$build$src$core$events$utils(b.group),bumpObjectIntoBounds$$module$build$src$core$bump_objects(a,\nd,e)&&!b.group&&console.warn(\"Moved object in bounds but there was no event group. This may break undo.\"),$.setGroup$$module$build$src$core$events$utils(c))}else isViewportChange$$module$build$src$core$events$predicates(b)&&b.scale&&b.oldScale&&b.scale>b.oldScale&&bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects(a)}}};\nextractObjectFromEvent$$module$build$src$core$bump_objects=function(a,b){let c=null;switch(b.type){case EventType$$module$build$src$core$events$type.BLOCK_CREATE:case EventType$$module$build$src$core$events$type.BLOCK_MOVE:(c=a.getBlockById(b.blockId))&&(c=c.getRootBlock());break;case EventType$$module$build$src$core$events$type.COMMENT_CREATE:case EventType$$module$build$src$core$events$type.COMMENT_MOVE:case EventType$$module$build$src$core$events$type.COMMENT_RESIZE:c=a.getCommentById(b.commentId)}return c};\nbumpTopObjectsIntoBounds$$module$build$src$core$bump_objects=function(a){var b=a.getMetricsManager();if(b.hasFixedEdges()&&!a.isDragging()){b=b.getScrollMetrics(!0);var c=a.getTopBoundedElements();for(let d=0,e;e=c[d];d++)bumpObjectIntoBounds$$module$build$src$core$bump_objects(a,b,e)}};isDeletable$$module$build$src$core$interfaces$i_deletable=function(a){return a&&typeof a.isDeletable===\"function\"&&typeof a.dispose===\"function\"&&typeof a.setDeleteStyle===\"function\"};\ngetBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){const c=a.getIcons();for(const d of a.inputList){if(!d.isVisible())continue;c.push(...d.fieldRow);let e;if((e=d.connection)==null?0:e.targetBlock())if(a=d.connection.targetBlock(),d.connection.type!==ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||b)c.push(a);else{let f;(a=(f=a.lastConnectionInStack(!1))==null?void 0:f.getSourceBlock())&&c.push(a)}else{let f;((f=d.connection)==\nnull?void 0:f.type)===ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE&&c.push(d.connection)}}return c};\nnavigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){const c=a.workspace.getTopBoundedElements(!0).filter(e=>isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(e));a=c.indexOf(a instanceof BlockSvg$$module$build$src$core$block_svg?a.getRootBlock():a)+b;let d=null;a>=0&&a=c.length&&(d=c[0]);if(b<0&&d instanceof BlockSvg$$module$build$src$core$block_svg){let e,f;return(f=(e=d.lastConnectionInStack(!1))==null?\nvoid 0:e.getSourceBlock())!=null?f:d}return d};\nnavigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){var c;let d;const e=a instanceof BlockSvg$$module$build$src$core$block_svg?(d=(c=a.outputConnection)==null?void 0:c.targetBlock())!=null?d:a.getSurroundParent():a.getSourceBlock();if(!(e instanceof BlockSvg$$module$build$src$core$block_svg))return null;c=getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy(e,b>0);a=c.indexOf(a);if(a===-1)return null;b=a+b;return b>=0&&b!d.getReturnTypes()).map(d=>[d.getName(),d.getParameters().map(e=>e.getName()),!1]);a.getBlocksByType(\"procedures_defnoreturn\",!1).forEach(d=>{!isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(d)&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&b.push(d.getProcedureDef())});const c=a.getProcedureMap().getProcedures().filter(d=>\n!!d.getReturnTypes()).map(d=>[d.getName(),d.getParameters().map(e=>e.getName()),!0]);a.getBlocksByType(\"procedures_defreturn\",!1).forEach(d=>{!isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(d)&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&c.push(d.getProcedureDef())});b.sort(procTupleComparator$$module$build$src$core$procedures);c.sort(procTupleComparator$$module$build$src$core$procedures);return[b,c]};\nprocTupleComparator$$module$build$src$core$procedures=function(a,b){return a[0].localeCompare(b[0],void 0,{sensitivity:\"base\"})};$.findLegalName$$module$build$src$core$procedures=function(a,b){if(b.isInFlyout)return a;for(a=a||$.Msg$$module$build$src$core$msg.UNNAMED_KEY||\"unnamed\";!isLegalName$$module$build$src$core$procedures(a,b.workspace,b);){const c=a.match(/^(.*?)(\\d+)$/);a=c?c[1]+(parseInt(c[2])+1):a+\"2\"}return a};\nisLegalName$$module$build$src$core$procedures=function(a,b,c){return!isNameUsed$$module$build$src$core$procedures(a,b,c)};\nisNameUsed$$module$build$src$core$procedures=function(a,b,c){for(const d of b.getAllBlocks(!1))if(d!==c&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&$.Names$$module$build$src$core$names.equals(d.getProcedureDef()[0],a))return!0;c=c&&isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(c)?c==null?void 0:c.getProcedureModel():void 0;for(const d of b.getProcedureMap().getProcedures())if(d!==c&&$.Names$$module$build$src$core$names.equals(d.getName(),\na))return!0;return!1};\n$.rename$$module$build$src$core$procedures=function(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;a=a.trim();const c=$.findLegalName$$module$build$src$core$procedures(a,b);isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(b)&&!b.isInsertionMarker()&&b.getProcedureModel().setName(c);const d=this.getValue();if(d!==a&&d!==c)for(a=b.workspace.getAllBlocks(!1),b=0;bblockIsModernCallerFor$$module$build$src$core$procedures(c,a)||isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(c)&&$.Names$$module$build$src$core$names.equals(c.getProcedureCall(),a))};\nblockIsModernCallerFor$$module$build$src$core$procedures=function(a,b){return isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(a)&&!a.isProcedureDef()&&a.getProcedureModel()&&$.Names$$module$build$src$core$names.equals(a.getProcedureModel().getName(),b)};\n$.mutateCallers$$module$build$src$core$procedures=function(a){const b=getRecordUndo$$module$build$src$core$events$utils();var c=a.getProcedureDef()[0];const d=a.mutationToDom(!0);a=getCallers$$module$build$src$core$procedures(c,a.workspace);for(let f=0,g;g=a[f];f++){c=(c=g.mutationToDom())&&domToText$$module$build$src$core$utils$xml(c);g.domToMutation&&g.domToMutation(d);var e=g.mutationToDom();e=e&&domToText$$module$build$src$core$utils$xml(e);c!==e&&($.setRecordUndo$$module$build$src$core$events$utils(!1),\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(g,\"mutation\",null,c,e)),$.setRecordUndo$$module$build$src$core$events$utils(b))}};\n$.getDefinition$$module$build$src$core$procedures=function(a,b){for(const c of b.getAllBlocks(!1))if(isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(c)&&c.isProcedureDef()&&$.Names$$module$build$src$core$names.equals(c.getProcedureModel().getName(),a)||isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(c)&&$.Names$$module$build$src$core$names.equals(c.getProcedureDef()[0],a))return c;return null};\nisDynamicShape$$module$build$src$core$renderers$common$constants=function(a){return a.isDynamic};isPuzzleTab$$module$build$src$core$renderers$common$constants=function(a){return a.pathDown!==void 0&&a.pathUp!==void 0};isNotch$$module$build$src$core$renderers$common$constants=function(a){return a.pathLeft!==void 0&&a.pathRight!==void 0};\nregister$$module$build$src$core$renderers$common$block_rendering=function(a,b){register$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a,b)};unregister$$module$build$src$core$renderers$common$block_rendering=function(a){unregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a)};\ninit$$module$build$src$core$renderers$common$block_rendering=function(a,b,c){a=new (getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a))(a);a.init(b,c);return a};stringButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"String\")};\nnumberButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"Number\")};colourButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"Colour\")};\ninternalFlyoutCategory$$module$build$src$core$variables_dynamic=function(a){return flyoutCategory$$module$build$src$core$variables_dynamic(a,!1)};\nflyoutCategory$$module$build$src$core$variables_dynamic=function(a,b=!0){Blocks$$module$build$src$core$blocks.variables_set_dynamic||Blocks$$module$build$src$core$blocks.variables_get_dynamic||console.warn(\"There are no dynamic variable blocks, but there is a dynamic variable category.\");if(b)return warn$$module$build$src$core$utils$deprecation(\"The XML return value of Blockly.VariablesDynamic.flyoutCategory()\",\"v12\",\"v13\",\"the same method, but handle a return type of FlyoutItemInfo[] (JSON) instead.\"),\nxmlFlyoutCategory$$module$build$src$core$variables_dynamic(a);a.registerButtonCallback(\"CREATE_VARIABLE_STRING\",stringButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_NUMBER\",numberButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_COLOUR\",colourButtonClickHandler$$module$build$src$core$variables_dynamic);return[{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_STRING_VARIABLE,callbackkey:\"CREATE_VARIABLE_STRING\"},\n{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_NUMBER_VARIABLE,callbackkey:\"CREATE_VARIABLE_NUMBER\"},{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_COLOUR_VARIABLE,callbackkey:\"CREATE_VARIABLE_COLOUR\"},...jsonFlyoutCategoryBlocks$$module$build$src$core$variables(a,a.getVariableMap().getAllVariables(),!1,\"variables_get_dynamic\",\"variables_set_dynamic\")]};\nxmlFlyoutCategory$$module$build$src$core$variables_dynamic=function(a){let b=[],c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_STRING_VARIABLE);c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_STRING\");b.push(c);c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_NUMBER_VARIABLE);c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_NUMBER\");b.push(c);c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_COLOUR_VARIABLE);\nc.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_COLOUR\");b.push(c);a.registerButtonCallback(\"CREATE_VARIABLE_STRING\",stringButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_NUMBER\",numberButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_COLOUR\",colourButtonClickHandler$$module$build$src$core$variables_dynamic);a=flyoutCategoryBlocks$$module$build$src$core$variables_dynamic(a);return b=b.concat(a)};\nflyoutCategoryBlocks$$module$build$src$core$variables_dynamic=function(a){a=a.getVariableMap().getAllVariables();const b=[];if(a.length>0){if(Blocks$$module$build$src$core$blocks.variables_set_dynamic){var c=a[a.length-1];const d=$.createElement$$module$build$src$core$utils$xml(\"block\");d.setAttribute(\"type\",\"variables_set_dynamic\");d.setAttribute(\"gap\",\"24\");d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c));b.push(d)}if(Blocks$$module$build$src$core$blocks.variables_get_dynamic){a.sort(compareByName$$module$build$src$core$variables);\nfor(let d=0,e;e=a[d];d++)c=$.createElement$$module$build$src$core$utils$xml(\"block\"),c.setAttribute(\"type\",\"variables_get_dynamic\"),c.setAttribute(\"gap\",\"8\"),c.appendChild(generateVariableFieldDom$$module$build$src$core$variables(e)),b.push(c)}}return b};resizeSvgContents$$module$build$src$core$workspace_svg=function(a){a.resizeContents()};\ncopy$$module$build$src$core$clipboard=function(a,b){const c=a.toCopyData();stashedCopyData$$module$build$src$core$clipboard=c;stashedWorkspace$$module$build$src$core$clipboard=isSelectable$$module$build$src$core$interfaces$i_selectable(a)&&a.workspace instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?a.workspace:null;stashedCoordinates$$module$build$src$core$clipboard=b;return c};getLastCopiedData$$module$build$src$core$clipboard=function(){return stashedCopyData$$module$build$src$core$clipboard};\nsetLastCopiedData$$module$build$src$core$clipboard=function(a){stashedCopyData$$module$build$src$core$clipboard=a};getLastCopiedWorkspace$$module$build$src$core$clipboard=function(){return stashedWorkspace$$module$build$src$core$clipboard};setLastCopiedWorkspace$$module$build$src$core$clipboard=function(a){stashedWorkspace$$module$build$src$core$clipboard=a};getLastCopiedLocation$$module$build$src$core$clipboard=function(){return stashedCoordinates$$module$build$src$core$clipboard};\nsetLastCopiedLocation$$module$build$src$core$clipboard=function(a){stashedCoordinates$$module$build$src$core$clipboard=a};\npaste$$module$build$src$core$clipboard=function(a,b,c){return a&&b?pasteFromData$$module$build$src$core$clipboard(a,b,c):stashedCopyData$$module$build$src$core$clipboard&&stashedWorkspace$$module$build$src$core$clipboard?pasteFromData$$module$build$src$core$clipboard(stashedCopyData$$module$build$src$core$clipboard,stashedWorkspace$$module$build$src$core$clipboard,stashedCoordinates$$module$build$src$core$clipboard):null};\npasteFromData$$module$build$src$core$clipboard=function(a,b,c){let d;b=b.isMutator?b:(d=b.options.parentWorkspace)!=null?d:b;let e,f;return(f=(e=getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.PASTER,a.paster,!1))==null?void 0:e.paste(a,b,c))!=null?f:null};isCopyable$$module$build$src$core$interfaces$i_copyable=function(a){return a&&typeof a.toCopyData===\"function\"};\nregisterEscape$$module$build$src$core$shortcut_items=function(){ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.ESCAPE,preconditionFn(a){return!a.isReadOnly()},callback(a){a.hideChaff();return!0},keyCodes:[KeyCodes$$module$build$src$core$utils$keycodes.ESC]})};\nregisterDelete$$module$build$src$core$shortcut_items=function(){ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.DELETE,preconditionFn(a,b){b=b.focusedNode;return!a.isReadOnly()&&b!=null&&isDeletable$$module$build$src$core$interfaces$i_deletable(b)&&b.isDeletable()&&!a.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(a,b,c,d){b.preventDefault();a=d.focusedNode;a instanceof\nBlockSvg$$module$build$src$core$block_svg?a.checkAndDelete():isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&a.isDeletable()&&($.setGroup$$module$build$src$core$events$utils(!0),a.dispose(),$.setGroup$$module$build$src$core$events$utils(!1));return!0},keyCodes:[KeyCodes$$module$build$src$core$utils$keycodes.DELETE,KeyCodes$$module$build$src$core$utils$keycodes.BACKSPACE]})};\nisCopyable$$module$build$src$core$shortcut_items=function(a){return isCopyable$$module$build$src$core$interfaces$i_copyable(a)&&isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&isDraggable$$module$build$src$core$interfaces$i_draggable(a)?a.isCopyable?a.isCopyable():a instanceof BlockSvg$$module$build$src$core$block_svg||a instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment?a.isOwnDeletable()&&a.isOwnMovable():a.isDeletable()&&a.isMovable():!1};\nisCuttable$$module$build$src$core$shortcut_items=function(a){return isCopyable$$module$build$src$core$shortcut_items(a)&&isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&a.isDeletable()};\nregisterCopy$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.C,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.C,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.COPY,\npreconditionFn(c,d){d=d.focusedNode;c=c.isFlyout?c.targetWorkspace:c;return!!d&&!!c&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()&&isCopyable$$module$build$src$core$shortcut_items(d)},callback(c,d,e,f){d.preventDefault();d=f.focusedNode;if(!d||!isCopyable$$module$build$src$core$interfaces$i_copyable(d)||!isCopyable$$module$build$src$core$shortcut_items(d))return!1;c=c.isFlyout?c.targetWorkspace:c;if(!c)return!1;d.workspace.isFlyout||c.hideChaff();\nc=isDraggable$$module$build$src$core$interfaces$i_draggable(d)&&d.workspace==c?d.getRelativeToSurfaceXY():void 0;return!!copy$$module$build$src$core$clipboard(d,c)},keyCodes:[a,b]})};\nregisterCut$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.X,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.X,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.CUT,\npreconditionFn(c,d){d=d.focusedNode;return!!d&&!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()&&isCuttable$$module$build$src$core$shortcut_items(d)},callback(c,d,e,f){c=f.focusedNode;if(!c||!isCuttable$$module$build$src$core$shortcut_items(c)||!isCopyable$$module$build$src$core$interfaces$i_copyable(c))return!1;d=isDraggable$$module$build$src$core$interfaces$i_draggable(c)?c.getRelativeToSurfaceXY():void 0;d=copy$$module$build$src$core$clipboard(c,\nd);c instanceof BlockSvg$$module$build$src$core$block_svg?c.checkAndDelete():isDeletable$$module$build$src$core$interfaces$i_deletable(c)&&c.dispose();return!!d},keyCodes:[a,b]})};\nregisterPaste$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.V,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.V,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.PASTE,\npreconditionFn(){var c=getLastCopiedWorkspace$$module$build$src$core$clipboard();if(!c||!c.rendered)return!1;c=c.isFlyout?c.targetWorkspace:c;return!!getLastCopiedData$$module$build$src$core$clipboard()&&!!c&&!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(c,d){c=getLastCopiedData$$module$build$src$core$clipboard();if(!c)return!1;var e=getLastCopiedWorkspace$$module$build$src$core$clipboard();if(!e)return!1;e=e.isFlyout?e.targetWorkspace:\ne;if(!e||e.isReadOnly())return!1;if(d instanceof PointerEvent)return d=screenToWsCoordinates$$module$build$src$core$utils$svg_math(e,new Coordinate$$module$build$src$core$utils$coordinate(d.clientX,d.clientY)),!!paste$$module$build$src$core$clipboard(c,e,d);d=getLastCopiedLocation$$module$build$src$core$clipboard();if(!d)return!!paste$$module$build$src$core$clipboard(c,e);const {left:f,top:g,width:h,height:k}=e.getMetricsManager().getViewMetrics(!0);if((new Rect$$module$build$src$core$utils$rect(g,\ng+k,f,f+h)).contains(d.x,d.y))return!!paste$$module$build$src$core$clipboard(c,e);d=new Coordinate$$module$build$src$core$utils$coordinate(f+h/2,g+k/2);return!!paste$$module$build$src$core$clipboard(c,e,d)},keyCodes:[a,b]})};\nregisterUndo$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.UNDO,\npreconditionFn(c){return!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(c,d){c.hideChaff();c.undo(!1);d.preventDefault();return!0},keyCodes:[a,b]})};\nregisterRedo$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL,KeyCodes$$module$build$src$core$utils$keycodes.SHIFT]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.META,\nKeyCodes$$module$build$src$core$utils$keycodes.SHIFT]),c=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Y,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.REDO,preconditionFn(d){return!d.isDragging()&&!d.isReadOnly()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},\ncallback(d,e){d.hideChaff();d.undo(!0);e.preventDefault();return!0},keyCodes:[a,b,c]})};registerDefaultShortcuts$$module$build$src$core$shortcut_items=function(){registerEscape$$module$build$src$core$shortcut_items();registerDelete$$module$build$src$core$shortcut_items();registerCopy$$module$build$src$core$shortcut_items();registerCut$$module$build$src$core$shortcut_items();registerPaste$$module$build$src$core$shortcut_items();registerUndo$$module$build$src$core$shortcut_items();registerRedo$$module$build$src$core$shortcut_items()};\nsaveProcedure$$module$build$src$core$serialization$procedures=function(a){const b=a.saveState();if(!a.getParameters().length)return b;b.parameters=a.getParameters().map(c=>c.saveState());return b};loadProcedure$$module$build$src$core$serialization$procedures=function(a,b,c,d){a=a.loadState(c,d);if(!c.parameters)return a;for(const [e,f]of c.parameters.entries())a.insertParameter(b.loadState(f,d),e);return a};\nsave$$module$build$src$core$serialization$workspaces=function(a){const b=Object.create(null),c=getAllItems$$module$build$src$core$registry(Type$$module$build$src$core$registry.SERIALIZER,!0);for(const d in c){let e;const f=(e=c[d])==null?void 0:e.save(a);f&&(b[d]=f)}return b};\nload$$module$build$src$core$serialization$workspaces=function(a,b,{recordUndo:c=!1}={}){var d=getAllItems$$module$build$src$core$registry(Type$$module$build$src$core$registry.SERIALIZER,!0);if(d){d=Object.entries(d).sort((f,g)=>g[1].priority-f[1].priority);var e=getRecordUndo$$module$build$src$core$events$utils();$.setRecordUndo$$module$build$src$core$events$utils(c);(c=$.getGroup$$module$build$src$core$events$utils())||$.setGroup$$module$build$src$core$events$utils(!0);startTextWidthCache$$module$build$src$core$utils$dom();\nb instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&b.setResizesEnabled(!1);for(const [,f]of d.reverse()){let g;(g=f)==null||g.clear(b)}for(const [f,g]of d.reverse())if(a[f]){let h;(h=g)==null||h.load(a[f],b)}b instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&b.setResizesEnabled(!0);stopTextWidthCache$$module$build$src$core$utils$dom();fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.FINISHED_LOADING))(b));\n$.setGroup$$module$build$src$core$events$utils(c);$.setRecordUndo$$module$build$src$core$events$utils(e)}};\ninject$$module$build$src$core$inject=function(a,b){let c=null;c=typeof a===\"string\"?document.getElementById(a)||document.querySelector(a):a;var d;if(!document.contains(c)&&document!==((d=c)==null?void 0:d.ownerDocument))throw Error(\"Error: container is not in current document\");a=new Options$$module$build$src$core$options(b||{});d=document.createElement(\"div\");addClass$$module$build$src$core$utils$dom(d,\"injectionDiv\");(b==null?0:b.rtl)&&addClass$$module$build$src$core$utils$dom(d,\"blocklyRTL\");c.appendChild(d);\nb=createDom$$module$build$src$core$inject(d,a);const e=createMainWorkspace$$module$build$src$core$inject(d,b,a);init$$module$build$src$core$inject(e);setMainWorkspace$$module$build$src$core$common(e);svgResize$$module$build$src$core$common(e);d.addEventListener(\"focusin\",function(){setMainWorkspace$$module$build$src$core$common(e)});conditionalBind$$module$build$src$core$browser_events(d,\"keydown\",null,globalShortcutHandler$$module$build$src$core$common);return e};\ncreateDom$$module$build$src$core$inject=function(a,b){a.setAttribute(\"dir\",\"LTR\");inject$$module$build$src$core$css(b.hasCss,b.pathToMedia);const c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{xmlns:SVG_NS$$module$build$src$core$utils$dom,\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\",\"class\":\"blocklySvg\"},a),d=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.DEFS,\n{},c),e=String(Math.random()).substring(2);b.gridPattern=Grid$$module$build$src$core$grid.createDom(e,b.gridOptions,d,a);return c};\ncreateMainWorkspace$$module$build$src$core$inject=function(a,b,c){c.parentWorkspace=null;c=new WorkspaceSvg$$module$build$src$core$workspace_svg(c);const d=c.options;c.scale=d.zoomOptions.startScale;b.appendChild(c.createDom(\"blocklyMainBackground\",a));var e=c.getRenderer().getClassName();e&&addClass$$module$build$src$core$utils$dom(a,e);(e=c.getTheme().getClassName())&&addClass$$module$build$src$core$utils$dom(a,e);!d.hasCategories&&d.languageTree&&(a=c.addFlyout(Svg$$module$build$src$core$utils$svg.SVG),\ninsertAfter$$module$build$src$core$utils$dom(a,b));d.hasTrashcan&&c.addTrashcan();d.zoomOptions&&d.zoomOptions.controls&&c.addZoomControls();c.getThemeManager().subscribe(b,\"workspaceBackgroundColour\",\"background-color\");c.translate(0,0);c.addChangeListener(bumpIntoBoundsHandler$$module$build$src$core$bump_objects(c));svgResize$$module$build$src$core$common(c);createDom$$module$build$src$core$widgetdiv();createDom$$module$build$src$core$dropdowndiv();createDom$$module$build$src$core$tooltip();return c};\ninit$$module$build$src$core$inject=function(a){const b=a.options;var c=a.getParentSvg();conditionalBind$$module$build$src$core$browser_events(c.parentNode,\"contextmenu\",null,function(d){isTargetInput$$module$build$src$core$browser_events(d)||d.preventDefault()});c=conditionalBind$$module$build$src$core$browser_events(window,\"resize\",null,function(){hide$$module$build$src$core$tooltip();a.hideComponents(!0);repositionForWindowResize$$module$build$src$core$dropdowndiv();repositionForWindowResize$$module$build$src$core$widgetdiv();\nsvgResize$$module$build$src$core$common(a);bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects(a)});a.setResizeHandlerWrapper(c);bindDocumentEvents$$module$build$src$core$inject();if(b.languageTree){c=a.getToolbox();const d=a.getFlyout(!0);c?c.init():d&&(d.init(a),d.show(b.languageTree),typeof d.scrollToStart===\"function\"&&d.scrollToStart())}b.hasTrashcan&&a.trashcan.init();b.zoomOptions&&b.zoomOptions.controls&&a.zoomControls_.init();b.moveOptions&&b.moveOptions.scrollbars?(a.scrollbar=\nnew ScrollbarPair$$module$build$src$core$scrollbar_pair(a,b.moveOptions.scrollbars===!0||!!b.moveOptions.scrollbars.horizontal,b.moveOptions.scrollbars===!0||!!b.moveOptions.scrollbars.vertical,\"blocklyMainWorkspaceScrollbar\"),a.scrollbar.resize()):a.setMetrics({x:.5,y:.5});b.hasSounds&&loadSounds$$module$build$src$core$inject(b.pathToMedia,a)};\nbindDocumentEvents$$module$build$src$core$inject=function(){documentEventsBound$$module$build$src$core$inject||(conditionalBind$$module$build$src$core$browser_events(document,\"scroll\",null,function(){const a=getAllWorkspaces$$module$build$src$core$common();for(let b=0,c;c=a[b];b++)c instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&c.updateInverseScreenCTM()}),bind$$module$build$src$core$browser_events(document,\"touchend\",null,longStop$$module$build$src$core$touch),bind$$module$build$src$core$browser_events(document,\n\"touchcancel\",null,longStop$$module$build$src$core$touch));documentEventsBound$$module$build$src$core$inject=!0};\nloadSounds$$module$build$src$core$inject=function(a,b){function c(){for(;e.length;){const f=e.pop();f&&unbind$$module$build$src$core$browser_events(f)}d.preload()}const d=b.getAudioManager();d.load([a+\"click.mp3\",a+\"click.wav\",a+\"click.ogg\"],\"click\");d.load([a+\"disconnect.wav\",a+\"disconnect.mp3\",a+\"disconnect.ogg\"],\"disconnect\");d.load([a+\"delete.mp3\",a+\"delete.ogg\",a+\"delete.wav\"],\"delete\");const e=[];e.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",null,c,!0));\ne.push(conditionalBind$$module$build$src$core$browser_events(document,\"touchstart\",null,c,!0))};isFullBlockField$$module$build$src$core$contextmenu_items=function(a){if(!a||!a.isSimpleReporter())return!1;let b;return(b=a.getFields().next().value)==null?void 0:b.isFullBlockField()};\nregisterUndo$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.UNDO},preconditionFn(a){return a.workspace.getUndoStack().length>0?\"enabled\":\"disabled\"},callback(a){a.workspace.undo(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"undoWorkspace\",weight:1})};\nregisterRedo$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.REDO},preconditionFn(a){return a.workspace.getRedoStack().length>0?\"enabled\":\"disabled\"},callback(a){a.workspace.undo(!0)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"redoWorkspace\",weight:2})};\nregisterCleanup$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.CLEAN_UP},preconditionFn(a){return a.workspace.isMovable()?a.workspace.getTopBlocks(!1).length>1?\"enabled\":\"disabled\":\"hidden\"},callback(a){a.workspace.cleanUp()},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"cleanWorkspace\",weight:3})};\ntoggleOption_$$module$build$src$core$contextmenu_items=function(a,b){function c(f){e--;f.setCollapsed(a);e===0&&$.setGroup$$module$build$src$core$events$utils(!1)}let d=0,e=0;$.setGroup$$module$build$src$core$events$utils(!0);for(let f=0;f\n0?\"enabled\":\"disabled\":\"disabled\"},callback(a){if(a.workspace){a.workspace.cancelCurrentGesture();var b=getDeletableBlocks_$$module$build$src$core$contextmenu_items(a.workspace);b.length<2?deleteNext_$$module$build$src$core$contextmenu_items(b):confirm$$module$build$src$core$dialog($.Msg$$module$build$src$core$msg.DELETE_ALL_BLOCKS.replace(\"%1\",String(b.length)),function(c){c&&deleteNext_$$module$build$src$core$contextmenu_items(b)})}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,\nid:\"workspaceDelete\",weight:6})};registerWorkspaceOptions_$$module$build$src$core$contextmenu_items=function(){registerUndo$$module$build$src$core$contextmenu_items();registerRedo$$module$build$src$core$contextmenu_items();registerCleanup$$module$build$src$core$contextmenu_items();registerCollapse$$module$build$src$core$contextmenu_items();registerExpand$$module$build$src$core$contextmenu_items();registerDeleteAll$$module$build$src$core$contextmenu_items()};\nregisterDuplicate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.DUPLICATE_BLOCK},preconditionFn(a){a=a.block;return!a.isInFlyout&&a.isDeletable()&&a.isMovable()?a.isDuplicatable()?\"enabled\":\"disabled\":\"hidden\"},callback(a){if(a.block){var b=a.block.toCopyData();b&&paste$$module$build$src$core$clipboard(b,a.block.workspace)}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,\nid:\"blockDuplicate\",weight:1})};\nregisterComment$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){return a.block.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)?$.Msg$$module$build$src$core$msg.REMOVE_COMMENT:$.Msg$$module$build$src$core$msg.ADD_COMMENT},preconditionFn(a){a=a.block;return!a||a.isInFlyout||!a.workspace.options.comments||a.isCollapsed()||!a.isEditable()||!a.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)&&isFullBlockField$$module$build$src$core$contextmenu_items(a)?\n\"hidden\":\"enabled\"},callback(a){(a=a.block)&&a.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)?a.setCommentText(null):a.setCommentText(\"\")},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockComment\",weight:2})};\nregisterInline$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){return a.block.getInputsInline()?$.Msg$$module$build$src$core$msg.EXTERNAL_INPUTS:$.Msg$$module$build$src$core$msg.INLINE_INPUTS},preconditionFn(a){a=a.block;if(!a.isInFlyout&&a.isMovable()&&!a.isCollapsed())for(let b=1;b(b.has(MANUALLY_DISABLED$$module$build$src$core$constants)?\n1:0);return a.getInheritedDisabled()||b?\"disabled\":\"enabled\"}return\"hidden\"},callback(a){a=a.block;const b=$.getGroup$$module$build$src$core$events$utils();b||$.setGroup$$module$build$src$core$events$utils(!0);a.setDisabledReason(!a.hasDisabledReason(MANUALLY_DISABLED$$module$build$src$core$constants),MANUALLY_DISABLED$$module$build$src$core$constants);$.setGroup$$module$build$src$core$events$utils(b)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockDisable\",\nweight:5})};\nregisterDelete$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){var b=a.block;a=b.getDescendants(!1).length;(b=b.getNextBlock())&&(a-=b.getDescendants(!1).length);return a===1?$.Msg$$module$build$src$core$msg.DELETE_BLOCK:$.Msg$$module$build$src$core$msg.DELETE_X_BLOCKS.replace(\"%1\",`${a}`)},preconditionFn(a){return!a.block.isInFlyout&&a.block.isDeletable()?\"enabled\":\"hidden\"},callback(a){a.block&&a.block.checkAndDelete()},\nscopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockDelete\",weight:6})};\nregisterHelp$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.HELP},preconditionFn(a){a=a.block;return(typeof a.helpUrl===\"function\"?a.helpUrl():a.helpUrl)?\"enabled\":\"hidden\"},callback(a){a.block.showHelp()},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockHelp\",weight:7})};\nregisterCommentDelete$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.REMOVE_COMMENT,preconditionFn(a){let b;return((b=a.comment)==null?0:b.isDeletable())?\"enabled\":\"hidden\"},callback(a){$.setGroup$$module$build$src$core$events$utils(!0);let b;(b=a.comment)==null||b.dispose();$.setGroup$$module$build$src$core$events$utils(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.COMMENT,\nid:\"commentDelete\",weight:6})};\nregisterCommentDuplicate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.DUPLICATE_COMMENT,preconditionFn(a){let b;return((b=a.comment)==null?0:b.isMovable())?\"enabled\":\"hidden\"},callback(a){if(a.comment){var b=a.comment.toCopyData();b&&paste$$module$build$src$core$clipboard(b,a.comment.workspace)}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.COMMENT,id:\"commentDuplicate\",\nweight:1})};\nregisterCommentCreate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.ADD_COMMENT,preconditionFn:a=>{let b;return((b=a.workspace)==null?0:b.isMutator)?\"hidden\":\"enabled\"},callback:(a,b,c,d)=>{if(a=a.workspace)$.setGroup$$module$build$src$core$events$utils(!0),b=new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(a),b.setPlaceholderText($.Msg$$module$build$src$core$msg.WORKSPACE_COMMENT_DEFAULT_TEXT),\nb.moveTo(screenToWsCoordinates$$module$build$src$core$utils$svg_math(a,new Coordinate$$module$build$src$core$utils$coordinate(d.x,d.y))),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b),$.setGroup$$module$build$src$core$events$utils(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"commentCreate\",weight:8})};\nregisterBlockOptions_$$module$build$src$core$contextmenu_items=function(){registerDuplicate$$module$build$src$core$contextmenu_items();registerComment$$module$build$src$core$contextmenu_items();registerInline$$module$build$src$core$contextmenu_items();registerCollapseExpandBlock$$module$build$src$core$contextmenu_items();registerDisable$$module$build$src$core$contextmenu_items();registerDelete$$module$build$src$core$contextmenu_items();registerHelp$$module$build$src$core$contextmenu_items()};\nregisterCommentOptions$$module$build$src$core$contextmenu_items=function(){registerCommentDuplicate$$module$build$src$core$contextmenu_items();registerCommentDelete$$module$build$src$core$contextmenu_items();registerCommentCreate$$module$build$src$core$contextmenu_items()};registerDefaultOptions$$module$build$src$core$contextmenu_items=function(){registerWorkspaceOptions_$$module$build$src$core$contextmenu_items();registerBlockOptions_$$module$build$src$core$contextmenu_items()};\nisPaster$$module$build$src$core$interfaces$i_paster=function(a){return a&&typeof a.paste===\"function\"};isRenderedElement$$module$build$src$core$interfaces$i_rendered_element=function(a){return a&&typeof a.getSvgRoot===\"function\"};isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item=function(a){return a.isSelectable()};hideChaff$$module$build$src$core$blockly=function(a){getMainWorkspace$$module$build$src$core$common().hideChaff(a)};\nisFocusableTree$$module$build$src$core$interfaces$i_focusable_tree=function(a){return a&&typeof a.getRootFocusableNode===\"function\"&&typeof a.getRestoredFocusableNode===\"function\"&&typeof a.getNestedTrees===\"function\"&&typeof a.lookUpFocusableNode===\"function\"&&typeof a.onTreeFocus===\"function\"&&typeof a.onTreeBlur===\"function\"};$jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_ES6=!1;$jscomp.ASSUME_ES2020=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;\n$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.INSTRUMENT_ASYNC_CONTEXT=!0;$jscomp.objectCreate=$jscomp.ASSUME_ES5||typeof Object.create==\"function\"?Object.create:function(a){var b=function(){};b.prototype=a;return new b};$jscomp.defineProperty=$jscomp.ASSUME_ES5||typeof Object.defineProperties==\"function\"?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};\n$jscomp.getGlobal=function(a){a=[\"object\"==typeof globalThis&&globalThis,a,\"object\"==typeof window&&window,\"object\"==typeof self&&self,\"object\"==typeof __webpack_require__.g&&__webpack_require__.g];for(var b=0;b>>0,$jscomp.propertyToPolyfillSymbol[e]=$jscomp.IS_SYMBOL_NATIVE?\n$jscomp.global.Symbol(e):$jscomp.POLYFILL_PREFIX+c+\"$\"+e),$jscomp.defineProperty(d,$jscomp.propertyToPolyfillSymbol[e],{configurable:!0,writable:!0,value:b})))};\n$jscomp.getConstructImplementation=function(){function a(){function c(){}new c;Reflect.construct(c,[],function(){});return new c instanceof c}if($jscomp.TRUST_ES6_POLYFILLS&&typeof Reflect!=\"undefined\"&&Reflect.construct){if(a())return Reflect.construct;var b=Reflect.construct;return function(c,d,e){c=b(c,d);e&&Reflect.setPrototypeOf(c,e.prototype);return c}}return function(c,d,e){e===void 0&&(e=c);e=$jscomp.objectCreate(e.prototype||Object.prototype);return Function.prototype.apply.call(c,e,d)||\ne}};$jscomp.construct={valueOf:$jscomp.getConstructImplementation}.valueOf();$jscomp.underscoreProtoCanBeSet=function(){var a={a:!0},b={};try{return b.__proto__=a,b.a}catch(c){}return!1};$jscomp.setPrototypeOf=$jscomp.ASSUME_ES6||$jscomp.TRUST_ES6_POLYFILLS&&typeof Object.setPrototypeOf==\"function\"?Object.setPrototypeOf:$jscomp.underscoreProtoCanBeSet()?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+\" is not extensible\");return a}:null;\n$jscomp.inherits=function(a,b){a.prototype=$jscomp.objectCreate(b.prototype);a.prototype.constructor=a;if($jscomp.ASSUME_ES6||$jscomp.setPrototypeOf){var c=$jscomp.setPrototypeOf;c(a,b)}else for(c in b)if(c!=\"prototype\")if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.superClass_=b.prototype};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b0;){var a=this.properties_.pop();if(a in this.object_)return a}return null};$jscomp.generator.Engine_=function(a){this.context_=new $jscomp.generator.Context;this.program_=a};\n$jscomp.generator.Engine_.prototype.next_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,a,this.context_.next_);this.context_.next_(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.return_=function(a){this.context_.start_();var b=this.context_.yieldAllIterator_;if(b)return this.yieldAllStep_(\"return\"in b?b[\"return\"]:function(c){return{value:c,done:!0}},a,this.context_.return);this.context_.return(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.throw_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_[\"throw\"],a,this.context_.next_);this.context_.throw_(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.yieldAllStep_=function(a,b,c){try{var d=a.call(this.context_.yieldAllIterator_,b);$jscomp.generator.ensureIteratorResultIsObject_(d);if(!d.done)return this.context_.stop_(),d;var e=d.value}catch(f){return this.context_.yieldAllIterator_=null,this.context_.throw_(f),this.nextStep_()}this.context_.yieldAllIterator_=null;c.call(this.context_,e);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var a=this.program_(this.context_);if(a)return this.context_.stop_(),{value:a.value,done:!1}}catch(b){this.context_.yieldResult=void 0,this.context_.throw_(b)}this.context_.stop_();if(this.context_.abruptCompletion_){a=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(a.isException)throw a.exception;return{value:a.return,done:!0}}return{value:void 0,done:!0}};\n$jscomp.generator.Generator_=function(a){this.next=function(b){return a.next_(b)};this.throw=function(b){return a.throw_(b)};this.return=function(b){return a.return_(b)};this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(a,b){b=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(b));$jscomp.setPrototypeOf&&a.prototype&&$jscomp.setPrototypeOf(b,a.prototype);return b};\n$jscomp.asyncExecutePromiseGenerator=function(a){function b(d){return a.next(d)}function c(d){return a.throw(d)}return new Promise(function(d,e){function f(g){g.done?d(g.value):Promise.resolve(g.value).then(b,c).then(f,e)}f(a.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(a){return $jscomp.asyncExecutePromiseGenerator(a())};$jscomp.asyncExecutePromiseGeneratorProgram=function(a){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(a)))};\n$jscomp.polyfill(\"globalThis\",function(a){return a||$jscomp.global},\"es_2020\",\"es3\");$jscomp.polyfill(\"Array.prototype.includes\",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var e=d.length;c=c||0;for(c<0&&(c=Math.max(c+e,0));c0?(d=Array.prototype.flat.call(d,b-1),c.push.apply(c,d)):c.push(d)});return c}},\"es9\",\"es5\");\n$jscomp.polyfill(\"Object.entries\",function(a){return a?a:function(b){var c=[],d;for(d in b)$jscomp.owns(b,d)&&c.push([d,b[d]]);return c}},\"es8\",\"es3\");$jscomp.polyfill(\"Object.values\",function(a){return a?a:function(b){var c=[],d;for(d in b)$jscomp.owns(b,d)&&c.push(b[d]);return c}},\"es8\",\"es3\");\nvar typeMap$$module$build$src$core$registry=Object.create(null),TEST_ONLY$$module$build$src$core$registry={typeMap:typeMap$$module$build$src$core$registry},nameMap$$module$build$src$core$registry=Object.create(null),DEFAULT$$module$build$src$core$registry=\"default\",Type$$module$build$src$core$registry=class{constructor(a){this.name=a}toString(){return this.name}};Type$$module$build$src$core$registry.CONNECTION_CHECKER=new Type$$module$build$src$core$registry(\"connectionChecker\");\nType$$module$build$src$core$registry.CONNECTION_PREVIEWER=new Type$$module$build$src$core$registry(\"connectionPreviewer\");Type$$module$build$src$core$registry.CURSOR=new Type$$module$build$src$core$registry(\"cursor\");Type$$module$build$src$core$registry.EVENT=new Type$$module$build$src$core$registry(\"event\");Type$$module$build$src$core$registry.FIELD=new Type$$module$build$src$core$registry(\"field\");Type$$module$build$src$core$registry.INPUT=new Type$$module$build$src$core$registry(\"input\");\nType$$module$build$src$core$registry.RENDERER=new Type$$module$build$src$core$registry(\"renderer\");Type$$module$build$src$core$registry.TOOLBOX=new Type$$module$build$src$core$registry(\"toolbox\");Type$$module$build$src$core$registry.THEME=new Type$$module$build$src$core$registry(\"theme\");Type$$module$build$src$core$registry.TOOLBOX_ITEM=new Type$$module$build$src$core$registry(\"toolboxItem\");Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX=new Type$$module$build$src$core$registry(\"flyoutsVerticalToolbox\");\nType$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX=new Type$$module$build$src$core$registry(\"flyoutsHorizontalToolbox\");Type$$module$build$src$core$registry.FLYOUT_INFLATER=new Type$$module$build$src$core$registry(\"flyoutInflater\");Type$$module$build$src$core$registry.METRICS_MANAGER=new Type$$module$build$src$core$registry(\"metricsManager\");Type$$module$build$src$core$registry.BLOCK_DRAGGER=new Type$$module$build$src$core$registry(\"blockDragger\");\nType$$module$build$src$core$registry.SERIALIZER=new Type$$module$build$src$core$registry(\"serializer\");Type$$module$build$src$core$registry.ICON=new Type$$module$build$src$core$registry(\"icon\");Type$$module$build$src$core$registry.PASTER=new Type$$module$build$src$core$registry(\"paster\");Type$$module$build$src$core$registry.VARIABLE_MODEL=new Type$$module$build$src$core$registry(\"variableModel\");Type$$module$build$src$core$registry.VARIABLE_MAP=new Type$$module$build$src$core$registry(\"variableMap\");\nvar module$build$src$core$registry={DEFAULT:DEFAULT$$module$build$src$core$registry,TEST_ONLY:TEST_ONLY$$module$build$src$core$registry};module$build$src$core$registry.Type=Type$$module$build$src$core$registry;module$build$src$core$registry.getAllItems=getAllItems$$module$build$src$core$registry;module$build$src$core$registry.getClass=getClass$$module$build$src$core$registry;module$build$src$core$registry.getClassFromOptions=getClassFromOptions$$module$build$src$core$registry;\nmodule$build$src$core$registry.getObject=getObject$$module$build$src$core$registry;module$build$src$core$registry.hasItem=hasItem$$module$build$src$core$registry;module$build$src$core$registry.register=register$$module$build$src$core$registry;module$build$src$core$registry.unregister=unregister$$module$build$src$core$registry;var Blocks$$module$build$src$core$blocks=Object.create(null),module$build$src$core$blocks={Blocks:Blocks$$module$build$src$core$blocks};var LONGPRESS$$module$build$src$core$touch=750,TOUCH_ENABLED$$module$build$src$core$touch=\"ontouchstart\"in globalThis||!!(globalThis.document&&document.documentElement&&\"ontouchstart\"in document.documentElement)||!(!globalThis.navigator||!globalThis.navigator.maxTouchPoints&&!globalThis.navigator.msMaxTouchPoints),touchIdentifier_$$module$build$src$core$touch=null,TOUCH_MAP$$module$build$src$core$touch={mousedown:[\"pointerdown\"],mouseenter:[\"pointerenter\"],mouseleave:[\"pointerleave\"],mousemove:[\"pointermove\"],\nmouseout:[\"pointerout\"],mouseover:[\"pointerover\"],mouseup:[\"pointerup\",\"pointercancel\"],touchend:[\"pointerup\"],touchcancel:[\"pointercancel\"]},longPid_$$module$build$src$core$touch=0,module$build$src$core$touch={TOUCH_ENABLED:TOUCH_ENABLED$$module$build$src$core$touch,TOUCH_MAP:TOUCH_MAP$$module$build$src$core$touch};module$build$src$core$touch.checkTouchIdentifier=checkTouchIdentifier$$module$build$src$core$touch;module$build$src$core$touch.clearTouchIdentifier=clearTouchIdentifier$$module$build$src$core$touch;\nmodule$build$src$core$touch.getTouchIdentifierFromEvent=getTouchIdentifierFromEvent$$module$build$src$core$touch;module$build$src$core$touch.longStart=longStart$$module$build$src$core$touch;module$build$src$core$touch.longStop=longStop$$module$build$src$core$touch;module$build$src$core$touch.shouldHandleEvent=shouldHandleEvent$$module$build$src$core$touch;var rawUserAgent$$module$build$src$core$utils$useragent,isJavaFx$$module$build$src$core$utils$useragent,isWebKit$$module$build$src$core$utils$useragent,isGecko$$module$build$src$core$utils$useragent,isAndroid$$module$build$src$core$utils$useragent,isIPad$$module$build$src$core$utils$useragent,isIPhone$$module$build$src$core$utils$useragent,isMac$$module$build$src$core$utils$useragent,isTablet$$module$build$src$core$utils$useragent,isMobile$$module$build$src$core$utils$useragent;\n(function(a){function b(d){return c.includes(d.toUpperCase())}rawUserAgent$$module$build$src$core$utils$useragent=a;const c=rawUserAgent$$module$build$src$core$utils$useragent.toUpperCase();isJavaFx$$module$build$src$core$utils$useragent=b(\"JavaFX\");isWebKit$$module$build$src$core$utils$useragent=b(\"WebKit\");isGecko$$module$build$src$core$utils$useragent=b(\"Gecko\")&&!isWebKit$$module$build$src$core$utils$useragent;isAndroid$$module$build$src$core$utils$useragent=b(\"Android\");a=globalThis.navigator&&\nglobalThis.navigator.maxTouchPoints;isIPad$$module$build$src$core$utils$useragent=b(\"iPad\")||b(\"Macintosh\")&&a>0;isIPhone$$module$build$src$core$utils$useragent=b(\"iPhone\")&&!isIPad$$module$build$src$core$utils$useragent;isMac$$module$build$src$core$utils$useragent=b(\"Macintosh\");isTablet$$module$build$src$core$utils$useragent=isIPad$$module$build$src$core$utils$useragent||isAndroid$$module$build$src$core$utils$useragent&&!b(\"Mobile\")||b(\"Silk\");isMobile$$module$build$src$core$utils$useragent=!isTablet$$module$build$src$core$utils$useragent&&\n(isIPhone$$module$build$src$core$utils$useragent||isAndroid$$module$build$src$core$utils$useragent)})(globalThis.navigator&&globalThis.navigator.userAgent||\"\");\nvar raw$$module$build$src$core$utils$useragent=rawUserAgent$$module$build$src$core$utils$useragent,JavaFx$$module$build$src$core$utils$useragent=isJavaFx$$module$build$src$core$utils$useragent,GECKO$$module$build$src$core$utils$useragent=isGecko$$module$build$src$core$utils$useragent,ANDROID$$module$build$src$core$utils$useragent=isAndroid$$module$build$src$core$utils$useragent,IPAD$$module$build$src$core$utils$useragent=isIPad$$module$build$src$core$utils$useragent,IPHONE$$module$build$src$core$utils$useragent=\nisIPhone$$module$build$src$core$utils$useragent,MAC$$module$build$src$core$utils$useragent=isMac$$module$build$src$core$utils$useragent,MOBILE$$module$build$src$core$utils$useragent=isMobile$$module$build$src$core$utils$useragent,module$build$src$core$utils$useragent={ANDROID:ANDROID$$module$build$src$core$utils$useragent,GECKO:GECKO$$module$build$src$core$utils$useragent,IPAD:IPAD$$module$build$src$core$utils$useragent,IPHONE:IPHONE$$module$build$src$core$utils$useragent,JavaFx:JavaFx$$module$build$src$core$utils$useragent,\nMAC:MAC$$module$build$src$core$utils$useragent,MOBILE:MOBILE$$module$build$src$core$utils$useragent,raw:raw$$module$build$src$core$utils$useragent};var LINE_MODE_MULTIPLIER$$module$build$src$core$browser_events=40,PAGE_MODE_MULTIPLIER$$module$build$src$core$browser_events=125,module$build$src$core$browser_events={};module$build$src$core$browser_events.bind=bind$$module$build$src$core$browser_events;module$build$src$core$browser_events.conditionalBind=conditionalBind$$module$build$src$core$browser_events;module$build$src$core$browser_events.getScrollDeltaPixels=getScrollDeltaPixels$$module$build$src$core$browser_events;\nmodule$build$src$core$browser_events.isRightButton=isRightButton$$module$build$src$core$browser_events;module$build$src$core$browser_events.isTargetInput=isTargetInput$$module$build$src$core$browser_events;module$build$src$core$browser_events.mouseToSvg=mouseToSvg$$module$build$src$core$browser_events;module$build$src$core$browser_events.unbind=unbind$$module$build$src$core$browser_events;var EventType$$module$build$src$core$events$type;\n(function(a){a.BLOCK_CREATE=\"create\";a.BLOCK_DELETE=\"delete\";a.BLOCK_CHANGE=\"change\";a.BLOCK_FIELD_INTERMEDIATE_CHANGE=\"block_field_intermediate_change\";a.BLOCK_MOVE=\"move\";a.VAR_CREATE=\"var_create\";a.VAR_DELETE=\"var_delete\";a.VAR_RENAME=\"var_rename\";a.VAR_TYPE_CHANGE=\"var_type_change\";a.UI=\"ui\";a.BLOCK_DRAG=\"drag\";a.SELECTED=\"selected\";a.CLICK=\"click\";a.MARKER_MOVE=\"marker_move\";a.BUBBLE_OPEN=\"bubble_open\";a.TRASHCAN_OPEN=\"trashcan_open\";a.TOOLBOX_ITEM_SELECT=\"toolbox_item_select\";a.THEME_CHANGE=\n\"theme_change\";a.VIEWPORT_CHANGE=\"viewport_change\";a.COMMENT_CREATE=\"comment_create\";a.COMMENT_DELETE=\"comment_delete\";a.COMMENT_CHANGE=\"comment_change\";a.COMMENT_MOVE=\"comment_move\";a.COMMENT_RESIZE=\"comment_resize\";a.COMMENT_DRAG=\"comment_drag\";a.COMMENT_COLLAPSE=\"comment_collapse\";a.FINISHED_LOADING=\"finished_loading\"})(EventType$$module$build$src$core$events$type||(EventType$$module$build$src$core$events$type={}));\nvar BUMP_EVENTS$$module$build$src$core$events$type=[EventType$$module$build$src$core$events$type.BLOCK_CREATE,EventType$$module$build$src$core$events$type.BLOCK_MOVE,EventType$$module$build$src$core$events$type.COMMENT_CREATE,EventType$$module$build$src$core$events$type.COMMENT_MOVE],module$build$src$core$events$type={BUMP_EVENTS:BUMP_EVENTS$$module$build$src$core$events$type};module$build$src$core$events$type.EventType=EventType$$module$build$src$core$events$type;var soup$$module$build$src$core$utils$idgenerator=\"!#$%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",internal$$module$build$src$core$utils$idgenerator={genUid:()=>{const a=soup$$module$build$src$core$utils$idgenerator.length,b=[];for(let c=0;c<20;c++)b[c]=soup$$module$build$src$core$utils$idgenerator.charAt(Math.random()*a);return b.join(\"\")}},TEST_ONLY$$module$build$src$core$utils$idgenerator=internal$$module$build$src$core$utils$idgenerator,nextId$$module$build$src$core$utils$idgenerator=\n0,module$build$src$core$utils$idgenerator={TEST_ONLY:internal$$module$build$src$core$utils$idgenerator};module$build$src$core$utils$idgenerator.genUid=genUid$$module$build$src$core$utils$idgenerator;module$build$src$core$utils$idgenerator.getNextUniqueId=getNextUniqueId$$module$build$src$core$utils$idgenerator;var module$build$src$core$events$predicates={};module$build$src$core$events$predicates.isBlockChange=isBlockChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockCreate=isBlockCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockDelete=isBlockDelete$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockDrag=isBlockDrag$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isBlockFieldIntermediateChange=isBlockFieldIntermediateChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockMove=isBlockMove$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBubbleOpen=isBubbleOpen$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isClick=isClick$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isCommentChange=isCommentChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentCollapse=isCommentCollapse$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentCreate=isCommentCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentDelete=isCommentDelete$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isCommentDrag=isCommentDrag$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentMove=isCommentMove$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentResize=isCommentResize$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isFinishedLoading=isFinishedLoading$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isSelected=isSelected$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isThemeChange=isThemeChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isToolboxItemSelect=isToolboxItemSelect$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isTrashcanOpen=isTrashcanOpen$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isVarCreate=isVarCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isVarDelete=isVarDelete$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isVarRename=isVarRename$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isViewportChange=isViewportChange$$module$build$src$core$events$predicates;var group$$module$build$src$core$events$utils=\"\",recordUndo$$module$build$src$core$events$utils=!0,disabled$$module$build$src$core$events$utils=0,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils=\"ORPHANED_BLOCK\",FIRE_QUEUE$$module$build$src$core$events$utils=[],TEST_ONLY$$module$build$src$core$events$utils={FIRE_QUEUE:FIRE_QUEUE$$module$build$src$core$events$utils,enqueueEvent:enqueueEvent$$module$build$src$core$events$utils,fireNow:fireNow$$module$build$src$core$events$utils,fireInternal:fireInternal$$module$build$src$core$events$utils,\nsetGroupInternal:setGroupInternal$$module$build$src$core$events$utils},module$build$src$core$events$utils={TEST_ONLY:TEST_ONLY$$module$build$src$core$events$utils};module$build$src$core$events$utils.clearPendingUndo=clearPendingUndo$$module$build$src$core$events$utils;module$build$src$core$events$utils.disable=$.disable$$module$build$src$core$events$utils;module$build$src$core$events$utils.disableOrphans=disableOrphans$$module$build$src$core$events$utils;\nmodule$build$src$core$events$utils.enable=$.enable$$module$build$src$core$events$utils;module$build$src$core$events$utils.filter=filter$$module$build$src$core$events$utils;module$build$src$core$events$utils.fire=fire$$module$build$src$core$events$utils;module$build$src$core$events$utils.fromJson=fromJson$$module$build$src$core$events$utils;module$build$src$core$events$utils.get=get$$module$build$src$core$events$utils;module$build$src$core$events$utils.getDescendantIds=getDescendantIds$$module$build$src$core$events$utils;\nmodule$build$src$core$events$utils.getGroup=$.getGroup$$module$build$src$core$events$utils;module$build$src$core$events$utils.getRecordUndo=getRecordUndo$$module$build$src$core$events$utils;module$build$src$core$events$utils.isEnabled=isEnabled$$module$build$src$core$events$utils;module$build$src$core$events$utils.setGroup=$.setGroup$$module$build$src$core$events$utils;module$build$src$core$events$utils.setRecordUndo=$.setRecordUndo$$module$build$src$core$events$utils;var SVG_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/2000/svg\",HTML_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/1999/xhtml\",XLINK_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/1999/xlink\",NodeType$$module$build$src$core$utils$dom;(function(a){a[a.ELEMENT_NODE=1]=\"ELEMENT_NODE\";a[a.TEXT_NODE=3]=\"TEXT_NODE\";a[a.COMMENT_NODE=8]=\"COMMENT_NODE\"})(NodeType$$module$build$src$core$utils$dom||(NodeType$$module$build$src$core$utils$dom={}));\nvar cacheWidths$$module$build$src$core$utils$dom=null,cacheReference$$module$build$src$core$utils$dom=0,canvasContext$$module$build$src$core$utils$dom=null,module$build$src$core$utils$dom={HTML_NS:HTML_NS$$module$build$src$core$utils$dom};module$build$src$core$utils$dom.NodeType=NodeType$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.SVG_NS=SVG_NS$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.XLINK_NS=XLINK_NS$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.addClass=addClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.createSvgElement=createSvgElement$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getFastTextWidth=getFastTextWidth$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getFastTextWidthWithSizeString=getFastTextWidthWithSizeString$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getTextWidth=getTextWidth$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.hasClass=hasClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.insertAfter=insertAfter$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.measureFontMetrics=measureFontMetrics$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeClass=removeClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeClasses=removeClasses$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeNode=removeNode$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.setCssTransform=setCssTransform$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.startTextWidthCache=startTextWidthCache$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.stopTextWidthCache=stopTextWidthCache$$module$build$src$core$utils$dom;var FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser=class{static findFocusedNode(a){var b=a.getRootFocusableNode();if(!b.canBeFocused())return null;var c=b.getFocusableElement();if(hasClass$$module$build$src$core$utils$dom(c,FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME)||hasClass$$module$build$src$core$utils$dom(c,FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME))return b;\nb=c.querySelector(this.ACTIVE_FOCUS_NODE_CSS_SELECTOR);if(b instanceof HTMLElement||b instanceof SVGElement)if(b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(b,a))return b;c=c.querySelector(this.PASSIVE_FOCUS_NODE_CSS_SELECTOR);if(c instanceof HTMLElement||c instanceof SVGElement)if(a=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(c,a))return a;return null}static findFocusableNodeFor(a,b){if(!a.id||\na.id===\"null\"||b.getNestedTrees().map(e=>FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(a,e)).findIndex(e=>!!e)!==-1)return null;var c=b.getRootFocusableNode();if(c.canBeFocused()&&a===c.getFocusableElement())return c;var d;if(c=(d=b.lookUpFocusableNode(a.id))!=null?d:null)return c;d=a.parentElement;return!c&&d?FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(d,b):null}};\nFocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME=\"blocklyActiveFocus\";FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME=\"blocklyPassiveFocus\";FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_FOCUS_NODE_CSS_SELECTOR=`.${FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME}`;\nFocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_FOCUS_NODE_CSS_SELECTOR=`.${FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME}`;var module$build$src$core$utils$focusable_tree_traverser={};module$build$src$core$utils$focusable_tree_traverser.FocusableTreeTraverser=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser;var TreeRegistration$$module$build$src$core$focus_manager=class{constructor(a,b){this.tree=a;this.rootShouldBeAutoTabbable=b}},FocusManager$$module$build$src$core$focus_manager=class{constructor(a){this.previouslyFocusedNode=this.focusedNode=null;this.registeredTrees=[];this.isUpdatingFocusedNode=this.recentlyLostAllFocus=this.lockFocusStateChanges=this.currentlyHoldsEphemeralFocus=!1;const b=c=>{if(!this.isUpdatingFocusedNode){this.recentlyLostAllFocus=!c;var d=null;if(c instanceof HTMLElement||\nc instanceof SVGElement)for(var e of this.registeredTrees)if(d=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(c,e.tree))break;if(d&&d.canBeFocused()){c=d.getFocusableTree();let f;e=(f=this.focusedNode)==null?void 0:f.getFocusableTree();d===c.getRootFocusableNode()&&c!==e?this.focusTree(c):this.focusNode(d)}else this.defocusCurrentFocusedNode()}};a(\"focusin\",c=>{c instanceof FocusEvent&&b(document.activeElement)});a(\"focusout\",c=>{c instanceof FocusEvent&&\nb(c.relatedTarget)})}registerTree(a,b=!1){this.ensureManagerIsUnlocked();if(this.isRegistered(a))throw Error(`Attempted to re-register already registered tree: ${a}.`);this.registeredTrees.push(new TreeRegistration$$module$build$src$core$focus_manager(a,b));const c=a.getRootFocusableNode().getFocusableElement();if(!c.id||c.id===\"null\")throw Error(\"Attempting to register a tree with a root element that has an \"+`invalid ID: ${a}.`);b&&(c.tabIndex=0)}isRegistered(a){return!!this.lookUpRegistration(a)}lookUpRegistration(a){let b;\nreturn(b=this.registeredTrees.find(c=>c.tree===a))!=null?b:null}unregisterTree(a){this.ensureManagerIsUnlocked();if(!this.isRegistered(a))throw Error(`Attempted to unregister not registered tree: ${a}.`);var b=this.registeredTrees.findIndex(e=>e.tree===a);const c=this.registeredTrees[b];this.registeredTrees.splice(b,1);b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(a);const d=a.getRootFocusableNode();b&&this.removeHighlight(b);this.focusedNode!==b&&\nthis.focusedNode!==d||this.updateFocusedNode(null);this.removeHighlight(d);c.rootShouldBeAutoTabbable&&a.getRootFocusableNode().getFocusableElement().removeAttribute(\"tabindex\")}getFocusedTree(){let a,b;return(b=(a=this.focusedNode)==null?void 0:a.getFocusableTree())!=null?b:null}getFocusedNode(){return this.focusedNode}focusTree(a){this.ensureManagerIsUnlocked();if(!this.isRegistered(a))throw Error(`Attempted to focus unregistered tree: ${a}.`);const b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(a),\nc=a.getRestoredFocusableNode(b);a=a.getRootFocusableNode();let d;this.focusNode((d=c!=null?c:b)!=null?d:a)}focusNode(a){this.ensureManagerIsUnlocked();const b=!this.currentlyHoldsEphemeralFocus;b&&(this.isUpdatingFocusedNode=!0);var c,d=((c=this.focusedNode)==null?void 0:c.getFocusableElement())!==document.activeElement;if(this.focusedNode!==a||d)if(a.canBeFocused()){c=a.getFocusableTree();if(!this.isRegistered(c))throw Error(`Attempted to focus unregistered node: ${a}.`);d=a.getFocusableElement();\nd.id&&d.id!==\"null\"||console.warn(\"Trying to focus a node that has an invalid ID.\");var e=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(d,c);d=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(c);var f=a;if(e!==a){f=c.getRestoredFocusableNode(d);a=c.getRootFocusableNode();var g;f=(g=f!=null?f:d)!=null?g:a}a=this.focusedNode;g=a==null?void 0:a.getFocusableTree();a&&this.passivelyFocusNode(a,c);c=c.getRootFocusableNode();\nd&&this.removeHighlight(d);c!==f&&this.removeHighlight(c);this.currentlyHoldsEphemeralFocus||this.activelyFocusNode(f,g!=null?g:null);this.updateFocusedNode(f)}else console.warn(\"Trying to focus a node that can't be focused.\");b&&(this.isUpdatingFocusedNode=!1)}takeEphemeralFocus(a){this.ensureManagerIsUnlocked();if(this.currentlyHoldsEphemeralFocus)throw Error(\"Attempted to take ephemeral focus when it's already held, \"+`with new element: ${a}.`);this.currentlyHoldsEphemeralFocus=!0;this.focusedNode&&\nthis.passivelyFocusNode(this.focusedNode,null);a.focus({preventScroll:!0});let b=!1;return()=>{if(b)throw Error(\"Attempted to finish ephemeral focus twice for element: \"+`${a}.`);b=!0;this.currentlyHoldsEphemeralFocus=!1;if(this.focusedNode){this.activelyFocusNode(this.focusedNode,null);const c=this.focusedNode;setTimeout(()=>{!this.focusedNode&&this.previouslyFocusedNode===c&&this.recentlyLostAllFocus&&this.focusNode(c)},0)}}}ephemeralFocusTaken(){return this.currentlyHoldsEphemeralFocus}ensureManagerIsUnlocked(){if(this.lockFocusStateChanges)throw Error(\"FocusManager state changes cannot happen in a tree/node focus/blur callback.\");\n}updateFocusedNode(a){this.previouslyFocusedNode=this.focusedNode;this.focusedNode=a}defocusCurrentFocusedNode(){this.focusedNode&&!this.currentlyHoldsEphemeralFocus&&(this.passivelyFocusNode(this.focusedNode,null),this.updateFocusedNode(null))}activelyFocusNode(a,b){this.lockFocusStateChanges=!0;const c=a.getFocusableTree(),d=a.getFocusableElement();let e;const f=(e=this.lookUpRegistration(c))==null?void 0:e.rootShouldBeAutoTabbable;c!==b&&(c.onTreeFocus(a,b),f&&(c.getRootFocusableNode().getFocusableElement().tabIndex=\n-1));a.onNodeFocus();this.lockFocusStateChanges=!1;f&&a===c.getRootFocusableNode()||d.hasAttribute(\"tabindex\")||(d.tabIndex=-1);this.setNodeToVisualActiveFocus(a);d.focus({preventScroll:!0})}passivelyFocusNode(a,b){this.lockFocusStateChanges=!0;const c=a.getFocusableTree();if(c!==b){c.onTreeBlur(b);let d;if((d=this.lookUpRegistration(c))==null?0:d.rootShouldBeAutoTabbable)c.getRootFocusableNode().getFocusableElement().tabIndex=0}a.onNodeBlur();this.lockFocusStateChanges=!1;c!==b&&this.setNodeToVisualPassiveFocus(a)}setNodeToVisualActiveFocus(a){a=\na.getFocusableElement();addClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}setNodeToVisualPassiveFocus(a){a=a.getFocusableElement();removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);addClass$$module$build$src$core$utils$dom(a,\nFocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}removeHighlight(a){a=a.getFocusableElement();removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}static getFocusManager(){FocusManager$$module$build$src$core$focus_manager.focusManager||(FocusManager$$module$build$src$core$focus_manager.focusManager=\nnew FocusManager$$module$build$src$core$focus_manager(document.addEventListener));return FocusManager$$module$build$src$core$focus_manager.focusManager}};FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME=\"blocklyActiveFocus\";FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME=\"blocklyPassiveFocus\";FocusManager$$module$build$src$core$focus_manager.focusManager=null;var module$build$src$core$focus_manager={};\nmodule$build$src$core$focus_manager.FocusManager=FocusManager$$module$build$src$core$focus_manager;module$build$src$core$focus_manager.getFocusManager=$.getFocusManager$$module$build$src$core$focus_manager;var module$build$src$core$interfaces$i_focusable_node={};module$build$src$core$interfaces$i_focusable_node.isFocusableNode=isFocusableNode$$module$build$src$core$interfaces$i_focusable_node;var module$build$src$core$interfaces$i_selectable={};module$build$src$core$interfaces$i_selectable.isSelectable=isSelectable$$module$build$src$core$interfaces$i_selectable;var module$build$src$core$utils$object={};module$build$src$core$utils$object.deepMerge=deepMerge$$module$build$src$core$utils$object;var ShortcutRegistry$$module$build$src$core$shortcut_registry=class{constructor(){this.shortcuts=new Map;this.keyMap=new Map;this.reset()}reset(){this.shortcuts.clear();this.keyMap.clear()}register(a,b){if(this.shortcuts.get(a.name)&&!b)throw Error(`Shortcut named \"${a.name}\" already exists.`);this.shortcuts.set(a.name,a);b=a.keyCodes;if(b==null?0:b.length)for(const c of b)this.addKeyMapping(c,a.name,!!a.allowCollision)}unregister(a){if(!this.shortcuts.get(a))return console.warn(`Keyboard shortcut named \"${a}\" not found.`),\n!1;this.removeAllKeyMappings(a);this.shortcuts.delete(a);return!0}addKeyMapping(a,b,c){a=`${a}`;const d=this.keyMap.get(a);if(d&&!c)throw Error(`Shortcut named \"${b}\" collides with shortcuts \"${d}\"`);d&&c?d.unshift(b):this.keyMap.set(a,[b])}removeKeyMapping(a,b,c){const d=this.keyMap.get(a);if(!d)return c||console.warn(`No keyboard shortcut named \"${b}\" registered with key code \"${a}\"`),!1;const e=d.indexOf(b);if(e>-1)return d.splice(e,1),d.length===0&&this.keyMap.delete(a),!0;c||console.warn(`No keyboard shortcut named \"${b}\" registered with key code \"${a}\"`);\nreturn!1}removeAllKeyMappings(a){for(const b of this.keyMap.keys())this.removeKeyMapping(b,a,!0)}setKeyMap(a){this.keyMap.clear();for(const b in a)this.keyMap.set(b,a[b])}getKeyMap(){const a=Object.create(null);for(const [b,c]of this.keyMap)a[b]=c;return a}getRegistry(){const a=Object.create(null);for(const [b,c]of this.shortcuts)a[b]=c;return deepMerge$$module$build$src$core$utils$object(Object.create(null),a)}onKeyDown(a,b){var c=this.serializeKeyEvent(b);c=this.getShortcutNamesByKeyCode(c);if(!c)return!1;\nfor(const d of c){c=this.shortcuts.get(d);let e;if(!c||c.preconditionFn&&!c.preconditionFn(a,{focusedNode:(e=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode())!=null?e:void 0}))continue;let f,g,h;if((g=(f=c).callback)==null?0:g.call(f,a,b,c,{focusedNode:(h=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode())!=null?h:void 0}))return!0}return!1}getShortcutNamesByKeyCode(a){let b;return((b=this.keyMap.get(a))==null?void 0:b.slice())||[]}getKeyCodesByShortcutName(a){const b=\n[];for(const [c,d]of this.keyMap)d.indexOf(a)>-1&&b.push(c);return b}serializeKeyEvent(a){let b=\"\";for(const c in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys)a.getModifierState(c)&&(b!==\"\"&&(b+=\"+\"),b+=c);b!==\"\"&&a.keyCode?b+=\"+\"+a.keyCode:a.keyCode&&(b=String(a.keyCode));return b}checkModifiers(a){for(const b of a)if(!(b in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys))throw Error(b+\" is not a valid modifier key.\");}createSerializedKey(a,b){let c=\n\"\";if(b){this.checkModifiers(b);for(const d in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys)b.includes(ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys[d])&&(c!==\"\"&&(c+=\"+\"),c+=d)}c!==\"\"&&a?c+=\"+\"+a:a&&(c=`${a}`);return c}};ShortcutRegistry$$module$build$src$core$shortcut_registry.registry=new ShortcutRegistry$$module$build$src$core$shortcut_registry;\n(function(a){a=a.modifierKeys||(a.modifierKeys={});a[a.Shift=16]=\"Shift\";a[a.Control=17]=\"Control\";a[a.Alt=18]=\"Alt\";a[a.Meta=91]=\"Meta\"})(ShortcutRegistry$$module$build$src$core$shortcut_registry||(ShortcutRegistry$$module$build$src$core$shortcut_registry={}));var module$build$src$core$shortcut_registry={};module$build$src$core$shortcut_registry.ShortcutRegistry=ShortcutRegistry$$module$build$src$core$shortcut_registry;var WorkspaceDB_$$module$build$src$core$common=Object.create(null),mainWorkspace$$module$build$src$core$common,parentContainer$$module$build$src$core$common,draggingConnections$$module$build$src$core$common=[],TEST_ONLY$$module$build$src$core$common={defineBlocksWithJsonArrayInternal:defineBlocksWithJsonArrayInternal$$module$build$src$core$common},module$build$src$core$common={TEST_ONLY:TEST_ONLY$$module$build$src$core$common};module$build$src$core$common.createBlockDefinitionsFromJsonArray=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common;\nmodule$build$src$core$common.defineBlocks=$.defineBlocks$$module$build$src$core$common;module$build$src$core$common.defineBlocksWithJsonArray=defineBlocksWithJsonArray$$module$build$src$core$common;module$build$src$core$common.draggingConnections=draggingConnections$$module$build$src$core$common;module$build$src$core$common.fireSelectedEvent=fireSelectedEvent$$module$build$src$core$common;module$build$src$core$common.getAllWorkspaces=getAllWorkspaces$$module$build$src$core$common;\nmodule$build$src$core$common.getBlockTypeCounts=getBlockTypeCounts$$module$build$src$core$common;module$build$src$core$common.getMainWorkspace=getMainWorkspace$$module$build$src$core$common;module$build$src$core$common.getParentContainer=getParentContainer$$module$build$src$core$common;module$build$src$core$common.getSelected=getSelected$$module$build$src$core$common;module$build$src$core$common.getWorkspaceById=getWorkspaceById$$module$build$src$core$common;\nmodule$build$src$core$common.globalShortcutHandler=globalShortcutHandler$$module$build$src$core$common;module$build$src$core$common.registerWorkspace=registerWorkspace$$module$build$src$core$common;module$build$src$core$common.setMainWorkspace=setMainWorkspace$$module$build$src$core$common;module$build$src$core$common.setParentContainer=setParentContainer$$module$build$src$core$common;module$build$src$core$common.setSelected=setSelected$$module$build$src$core$common;\nmodule$build$src$core$common.svgResize=svgResize$$module$build$src$core$common;module$build$src$core$common.unregisterWorkpace=unregisterWorkpace$$module$build$src$core$common;var Abstract$$module$build$src$core$events$events_abstract=class{constructor(){this.workspaceId=void 0;this.isUiEvent=!1;this.type=\"\";this.group=$.getGroup$$module$build$src$core$events$utils();this.recordUndo=getRecordUndo$$module$build$src$core$events$utils()}toJson(){return{type:this.type,group:this.group}}static fromJson(a,b,c){c.isBlank=!1;c.group=a.group||\"\";c.workspaceId=b.id;return c}isNull(){return!1}run(a){}getEventWorkspace_(){let a;this.workspaceId&&(a=getWorkspaceById$$module$build$src$core$common(this.workspaceId));\nif(!a)throw Error(\"Workspace is null. Event must have been generated from real Blockly events.\");return a}},module$build$src$core$events$events_abstract={};module$build$src$core$events$events_abstract.Abstract=Abstract$$module$build$src$core$events$events_abstract;var UiBase$$module$build$src$core$events$events_ui_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.recordUndo=!1;this.isUiEvent=!0;this.isBlank=typeof a===\"undefined\";this.workspaceId=a?a:\"\"}},module$build$src$core$events$events_ui_base={};module$build$src$core$events$events_ui_base.UiBase=UiBase$$module$build$src$core$events$events_ui_base;var Click$$module$build$src$core$events$events_click=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b,c){b=a?a.workspace.id:b;b===null&&(b=void 0);super(b);this.type=EventType$$module$build$src$core$events$type.CLICK;this.blockId=a?a.id:void 0;this.targetType=c}toJson(){const a=super.toJson();if(!this.targetType)throw Error(\"The click target type is undefined. Either pass a block to the constructor, or call fromJson\");a.targetType=this.targetType;a.blockId=this.blockId;\nreturn a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new Click$$module$build$src$core$events$events_click);b.targetType=a.targetType;b.blockId=a.blockId;return b}},ClickTarget$$module$build$src$core$events$events_click;(function(a){a.BLOCK=\"block\";a.WORKSPACE=\"workspace\";a.ZOOM_CONTROLS=\"zoom_controls\"})(ClickTarget$$module$build$src$core$events$events_click||(ClickTarget$$module$build$src$core$events$events_click={}));\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.CLICK,Click$$module$build$src$core$events$events_click);var module$build$src$core$events$events_click={};module$build$src$core$events$events_click.Click=Click$$module$build$src$core$events$events_click;module$build$src$core$events$events_click.ClickTarget=ClickTarget$$module$build$src$core$events$events_click;var module$build$src$core$utils$array={};module$build$src$core$utils$array.removeElem=removeElem$$module$build$src$core$utils$array;var Capability$$module$build$src$core$component_manager=class{constructor(a){this.name=a}toString(){return this.name}};Capability$$module$build$src$core$component_manager.POSITIONABLE=new Capability$$module$build$src$core$component_manager(\"positionable\");Capability$$module$build$src$core$component_manager.DRAG_TARGET=new Capability$$module$build$src$core$component_manager(\"drag_target\");Capability$$module$build$src$core$component_manager.DELETE_AREA=new Capability$$module$build$src$core$component_manager(\"delete_area\");\nCapability$$module$build$src$core$component_manager.AUTOHIDEABLE=new Capability$$module$build$src$core$component_manager(\"autohideable\");\nvar ComponentManager$$module$build$src$core$component_manager=class{constructor(){this.componentData=new Map;this.capabilityToComponentIds=new Map}addComponent(a,b){const c=a.component.id;if(!b&&this.componentData.has(c)){var d;throw Error('Plugin \"'+c+'\" with capabilities \"'+((d=this.componentData.get(c))==null?void 0:d.capabilities)+'\" already added.');}this.componentData.set(c,a);b=[];for(d=0;d\n{d.push(this.componentData.get(e))});d.sort(function(e,f){return e.weight-f.weight});d.forEach(function(e){c.push(e.component)})}else a.forEach(d=>{c.push(this.componentData.get(d).component)});return c}};ComponentManager$$module$build$src$core$component_manager.Capability=Capability$$module$build$src$core$component_manager;\n(function(a){a=a.ComponentWeight||(a.ComponentWeight={});a[a.TOOLBOX_WEIGHT=0]=\"TOOLBOX_WEIGHT\";a[a.FLYOUT_WEIGHT=1]=\"FLYOUT_WEIGHT\";a[a.TRASHCAN_WEIGHT=2]=\"TRASHCAN_WEIGHT\";a[a.ZOOM_CONTROLS_WEIGHT=3]=\"ZOOM_CONTROLS_WEIGHT\"})(ComponentManager$$module$build$src$core$component_manager||(ComponentManager$$module$build$src$core$component_manager={}));\nvar ComponentWeight$$module$build$src$core$component_manager=ComponentManager$$module$build$src$core$component_manager.ComponentWeight,module$build$src$core$component_manager={};module$build$src$core$component_manager.ComponentManager=ComponentManager$$module$build$src$core$component_manager;module$build$src$core$component_manager.ComponentWeight=ComponentWeight$$module$build$src$core$component_manager;var injected$$module$build$src$core$css=!1,content$$module$build$src$core$css='\\n.blocklySvg {\\n background-color: #fff;\\n outline: none;\\n overflow: hidden; /* IE overflows by default. */\\n position: absolute;\\n display: block;\\n}\\n\\n.blocklyWidgetDiv {\\n display: none;\\n position: absolute;\\n z-index: 99999; /* big value for bootstrap3 compatibility */\\n}\\n\\n.injectionDiv {\\n height: 100%;\\n position: relative;\\n overflow: hidden; /* So blocks in drag surface disappear at edges */\\n touch-action: none;\\n user-select: none;\\n -webkit-user-select: none;\\n}\\n\\n.blocklyBlockCanvas.blocklyCanvasTransitioning,\\n.blocklyBubbleCanvas.blocklyCanvasTransitioning {\\n transition: transform .5s;\\n}\\n\\n.blocklyEmboss {\\n filter: var(--blocklyEmbossFilter);\\n}\\n\\n.blocklyTooltipDiv {\\n background-color: #ffffc7;\\n border: 1px solid #ddc;\\n box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15);\\n color: #000;\\n display: none;\\n font: 9pt sans-serif;\\n opacity: .9;\\n padding: 2px;\\n position: absolute;\\n z-index: 100000; /* big value for bootstrap3 compatibility */\\n}\\n\\n.blocklyDropDownDiv {\\n position: absolute;\\n left: 0;\\n top: 0;\\n z-index: 1000;\\n display: none;\\n border: 1px solid;\\n border-color: #dadce0;\\n background-color: #fff;\\n border-radius: 2px;\\n padding: 4px;\\n box-shadow: 0 0 3px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownDiv:focus {\\n box-shadow: 0 0 6px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownContent {\\n max-height: 300px; /* @todo: spec for maximum height. */\\n}\\n\\n.blocklyDropDownArrow {\\n position: absolute;\\n left: 0;\\n top: 0;\\n width: 16px;\\n height: 16px;\\n z-index: -1;\\n background-color: inherit;\\n border-color: inherit;\\n border-top: 1px solid;\\n border-left: 1px solid;\\n border-top-left-radius: 4px;\\n border-color: inherit;\\n}\\n\\n.blocklyHighlighted>.blocklyPath {\\n filter: var(--blocklyEmbossFilter);\\n}\\n\\n.blocklyHighlightedConnectionPath {\\n fill: none;\\n stroke: #fc3;\\n stroke-width: 4px;\\n}\\n\\n.blocklyPathLight {\\n fill: none;\\n stroke-linecap: round;\\n stroke-width: 1;\\n}\\n\\n.blocklySelected>.blocklyPathLight {\\n display: none;\\n}\\n\\n.blocklyDraggable {\\n cursor: grab;\\n cursor: -webkit-grab;\\n}\\n\\n.blocklyDragging {\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n /* Drag surface disables events to not block the toolbox, so we have to\\n * reenable them here for the cursor values to work. */\\n pointer-events: auto;\\n}\\n\\n /* Changes cursor on mouse down. Not effective in Firefox because of\\n https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */\\n.blocklyDraggable:active {\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n}\\n\\n.blocklyDragging.blocklyDraggingDelete,\\n.blocklyDragging.blocklyDraggingDelete .blocklyField {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyDragging>.blocklyPath,\\n.blocklyDragging>.blocklyPathLight {\\n fill-opacity: .8;\\n stroke-opacity: .8;\\n}\\n\\n.blocklyDragging>.blocklyPathDark {\\n display: none;\\n}\\n\\n.blocklyDisabledPattern>.blocklyPath {\\n fill: var(--blocklyDisabledPattern);\\n fill-opacity: .5;\\n stroke-opacity: .5;\\n}\\n\\n.blocklyDisabled>.blocklyPathLight,\\n.blocklyDisabled>.blocklyPathDark {\\n display: none;\\n}\\n\\n.blocklyInsertionMarker>.blocklyPath,\\n.blocklyInsertionMarker>.blocklyPathLight,\\n.blocklyInsertionMarker>.blocklyPathDark {\\n fill-opacity: .2;\\n stroke: none;\\n}\\n\\n.blocklyNonEditableField>text {\\n pointer-events: none;\\n}\\n\\n.blocklyFlyout {\\n position: absolute;\\n z-index: 20;\\n}\\n\\n.blocklyText text {\\n cursor: default;\\n}\\n\\n/*\\n Don\\'t allow users to select text. It gets annoying when trying to\\n drag a block and selected text moves instead.\\n*/\\n.blocklySvg text {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n cursor: inherit;\\n}\\n\\n.blocklyIconGroup {\\n cursor: default;\\n}\\n\\n.blocklyIconGroup:not(:hover):not(:focus),\\n.blocklyIconGroupReadonly {\\n opacity: .6;\\n}\\n\\n.blocklyIconShape {\\n fill: #00f;\\n stroke: #fff;\\n stroke-width: 1px;\\n}\\n\\n.blocklyIconSymbol {\\n fill: #fff;\\n}\\n\\n.blocklyMinimalBody {\\n margin: 0;\\n padding: 0;\\n height: 100%;\\n}\\n\\n.blocklyHtmlInput {\\n border: none;\\n border-radius: 4px;\\n height: 100%;\\n margin: 0;\\n outline: none;\\n padding: 0;\\n width: 100%;\\n text-align: center;\\n display: block;\\n box-sizing: border-box;\\n}\\n\\n/* Remove the increase and decrease arrows on the field number editor */\\ninput.blocklyHtmlInput[type=number]::-webkit-inner-spin-button,\\ninput.blocklyHtmlInput[type=number]::-webkit-outer-spin-button {\\n -webkit-appearance: none;\\n margin: 0;\\n}\\n\\ninput[type=number] {\\n -moz-appearance: textfield;\\n}\\n\\n.blocklyMainBackground {\\n stroke-width: 1;\\n stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */\\n}\\n\\n.blocklyMutatorBackground {\\n fill: #fff;\\n stroke: #ddd;\\n stroke-width: 1;\\n}\\n\\n.blocklyFlyoutBackground {\\n fill: #ddd;\\n fill-opacity: .8;\\n}\\n\\n.blocklyMainWorkspaceScrollbar {\\n z-index: 20;\\n}\\n\\n.blocklyFlyoutScrollbar {\\n z-index: 30;\\n}\\n\\n.blocklyScrollbarHorizontal,\\n.blocklyScrollbarVertical {\\n position: absolute;\\n outline: none;\\n}\\n\\n.blocklyScrollbarBackground {\\n opacity: 0;\\n pointer-events: none;\\n}\\n\\n.blocklyScrollbarHandle {\\n fill: #ccc;\\n}\\n\\n.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,\\n.blocklyScrollbarHandle:hover {\\n fill: #bbb;\\n}\\n\\n/* Darken flyout scrollbars due to being on a grey background. */\\n/* By contrast, workspace scrollbars are on a white background. */\\n.blocklyFlyout .blocklyScrollbarHandle {\\n fill: #bbb;\\n}\\n\\n.blocklyFlyout .blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,\\n.blocklyFlyout .blocklyScrollbarHandle:hover {\\n fill: #aaa;\\n}\\n\\n.blocklyInvalidInput {\\n background: #faa;\\n}\\n\\n.blocklyVerticalMarker {\\n stroke-width: 3px;\\n fill: rgba(255,255,255,.5);\\n pointer-events: none;\\n}\\n\\n.blocklyComputeCanvas {\\n position: absolute;\\n width: 0;\\n height: 0;\\n}\\n\\n.blocklyNoPointerEvents {\\n pointer-events: none;\\n}\\n\\n.blocklyContextMenu {\\n border-radius: 4px;\\n max-height: 100%;\\n}\\n\\n.blocklyDropdownMenu {\\n border-radius: 2px;\\n padding: 0 !important;\\n}\\n\\n.blocklyDropdownMenu .blocklyMenuItem {\\n /* 28px on the left for icon or checkbox. */\\n padding-left: 28px;\\n}\\n\\n/* BiDi override for the resting state. */\\n.blocklyDropdownMenu .blocklyMenuItemRtl {\\n /* Flip left/right padding for BiDi. */\\n padding-left: 5px;\\n padding-right: 28px;\\n}\\n\\n.blocklyWidgetDiv .blocklyMenu {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background: #fff;\\n border: 1px solid transparent;\\n box-shadow: 0 0 3px 1px rgba(0,0,0,.3);\\n font: normal 13px Arial, sans-serif;\\n margin: 0;\\n outline: none;\\n padding: 4px 0;\\n position: absolute;\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 100%;\\n z-index: 20000; /* Arbitrary, but some apps depend on it... */\\n}\\n\\n.blocklyWidgetDiv .blocklyMenu:focus {\\n box-shadow: 0 0 6px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownDiv .blocklyMenu {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background: inherit; /* Compatibility with gapi, reset from goog-menu */\\n border: inherit; /* Compatibility with gapi, reset from goog-menu */\\n font: normal 13px \"Helvetica Neue\", Helvetica, sans-serif;\\n outline: none;\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 100%;\\n z-index: 20000; /* Arbitrary, but some apps depend on it... */\\n}\\n\\n/* State: resting. */\\n.blocklyMenuItem {\\n border: none;\\n color: #000;\\n cursor: pointer;\\n list-style: none;\\n margin: 0;\\n /* 7em on the right for shortcut. */\\n min-width: 7em;\\n padding: 6px 15px;\\n white-space: nowrap;\\n}\\n\\n/* State: disabled. */\\n.blocklyMenuItemDisabled {\\n color: #ccc;\\n cursor: inherit;\\n}\\n\\n/* State: hover. */\\n.blocklyMenuItemHighlight {\\n background-color: rgba(0,0,0,.1);\\n}\\n\\n/* State: selected/checked. */\\n.blocklyMenuItemCheckbox {\\n height: 16px;\\n position: absolute;\\n width: 16px;\\n}\\n\\n.blocklyMenuItemSelected .blocklyMenuItemCheckbox {\\n background: url(<<>>/sprites.png) no-repeat -48px -16px;\\n float: left;\\n margin-left: -24px;\\n position: static; /* Scroll with the menu. */\\n}\\n\\n.blocklyMenuItemRtl .blocklyMenuItemCheckbox {\\n float: right;\\n margin-right: -24px;\\n}\\n\\n.blocklyMenuSeparator {\\n background-color: #ccc;\\n height: 1px;\\n border: 0;\\n margin-left: 4px;\\n margin-right: 4px;\\n}\\n\\n.blocklyBlockDragSurface, .blocklyAnimationLayer {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n overflow: visible !important;\\n z-index: 80;\\n pointer-events: none;\\n}\\n\\n.blocklyField {\\n cursor: default;\\n}\\n\\n.blocklyInputField {\\n cursor: text;\\n}\\n\\n.blocklyDragging .blocklyField,\\n.blocklyDragging .blocklyIconGroup {\\n cursor: grabbing;\\n}\\n\\n.blocklyActiveFocus:is(\\n .blocklyFlyout,\\n .blocklyWorkspace,\\n .blocklyField,\\n .blocklyPath,\\n .blocklyHighlightedConnectionPath,\\n .blocklyComment,\\n .blocklyBubble,\\n .blocklyIconGroup,\\n .blocklyTextarea\\n) {\\n outline: none;\\n}\\n',\nmodule$build$src$core$css={};module$build$src$core$css.inject=inject$$module$build$src$core$css;module$build$src$core$css.register=register$$module$build$src$core$css;var Coordinate$$module$build$src$core$utils$coordinate=class{constructor(a,b){this.x=a;this.y=b}clone(){return new Coordinate$$module$build$src$core$utils$coordinate(this.x,this.y)}scale(a){this.x*=a;this.y*=a;return this}translate(a,b){this.x+=a;this.y+=b;return this}static equals(a,b){return a===b?!0:a&&b?a.x===b.x&&a.y===b.y:!1}static distance(a,b){const c=a.x-b.x;a=a.y-b.y;return Math.sqrt(c*c+a*a)}static magnitude(a){return Math.sqrt(a.x*a.x+a.y*a.y)}static difference(a,b){return new Coordinate$$module$build$src$core$utils$coordinate(a.x-\nb.x,a.y-b.y)}static sum(a,b){return new Coordinate$$module$build$src$core$utils$coordinate(a.x+b.x,a.y+b.y)}},module$build$src$core$utils$coordinate={};module$build$src$core$utils$coordinate.Coordinate=Coordinate$$module$build$src$core$utils$coordinate;var Svg$$module$build$src$core$utils$svg=class{constructor(a){this.tagName=a}toString(){return this.tagName}};Svg$$module$build$src$core$utils$svg.ANIMATE=new Svg$$module$build$src$core$utils$svg(\"animate\");Svg$$module$build$src$core$utils$svg.CIRCLE=new Svg$$module$build$src$core$utils$svg(\"circle\");Svg$$module$build$src$core$utils$svg.CLIPPATH=new Svg$$module$build$src$core$utils$svg(\"clipPath\");Svg$$module$build$src$core$utils$svg.DEFS=new Svg$$module$build$src$core$utils$svg(\"defs\");\nSvg$$module$build$src$core$utils$svg.FECOMPOSITE=new Svg$$module$build$src$core$utils$svg(\"feComposite\");Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER=new Svg$$module$build$src$core$utils$svg(\"feComponentTransfer\");Svg$$module$build$src$core$utils$svg.FEFLOOD=new Svg$$module$build$src$core$utils$svg(\"feFlood\");Svg$$module$build$src$core$utils$svg.FEFUNCA=new Svg$$module$build$src$core$utils$svg(\"feFuncA\");Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR=new Svg$$module$build$src$core$utils$svg(\"feGaussianBlur\");\nSvg$$module$build$src$core$utils$svg.FEPOINTLIGHT=new Svg$$module$build$src$core$utils$svg(\"fePointLight\");Svg$$module$build$src$core$utils$svg.FESPECULARLIGHTING=new Svg$$module$build$src$core$utils$svg(\"feSpecularLighting\");Svg$$module$build$src$core$utils$svg.FILTER=new Svg$$module$build$src$core$utils$svg(\"filter\");Svg$$module$build$src$core$utils$svg.FOREIGNOBJECT=new Svg$$module$build$src$core$utils$svg(\"foreignObject\");Svg$$module$build$src$core$utils$svg.G=new Svg$$module$build$src$core$utils$svg(\"g\");\nSvg$$module$build$src$core$utils$svg.IMAGE=new Svg$$module$build$src$core$utils$svg(\"image\");Svg$$module$build$src$core$utils$svg.LINE=new Svg$$module$build$src$core$utils$svg(\"line\");Svg$$module$build$src$core$utils$svg.PATH=new Svg$$module$build$src$core$utils$svg(\"path\");Svg$$module$build$src$core$utils$svg.PATTERN=new Svg$$module$build$src$core$utils$svg(\"pattern\");Svg$$module$build$src$core$utils$svg.POLYGON=new Svg$$module$build$src$core$utils$svg(\"polygon\");\nSvg$$module$build$src$core$utils$svg.RECT=new Svg$$module$build$src$core$utils$svg(\"rect\");Svg$$module$build$src$core$utils$svg.SVG=new Svg$$module$build$src$core$utils$svg(\"svg\");Svg$$module$build$src$core$utils$svg.TEXT=new Svg$$module$build$src$core$utils$svg(\"text\");Svg$$module$build$src$core$utils$svg.TSPAN=new Svg$$module$build$src$core$utils$svg(\"tspan\");var module$build$src$core$utils$svg={};module$build$src$core$utils$svg.Svg=Svg$$module$build$src$core$utils$svg;var Rect$$module$build$src$core$utils$rect=class{constructor(a,b,c,d){this.top=a;this.bottom=b;this.left=c;this.right=d}static from(a){return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}clone(){return new Rect$$module$build$src$core$utils$rect(this.top,this.bottom,this.left,this.right)}getHeight(){return this.bottom-this.top}getWidth(){return this.right-this.left}getOrigin(){return new Coordinate$$module$build$src$core$utils$coordinate(this.left,this.top)}contains(a,\nb){return a>=this.left&&a<=this.right&&b>=this.top&&b<=this.bottom}intersects(a){return this.left<=a.right&&this.right>=a.left&&this.bottom>=a.top&&this.top<=a.bottom}static equals(a,b){return a===b?!0:a&&b?a.top===b.top&&a.bottom===b.bottom&&a.left===b.left&&a.right===b.right:!1}static createFromPoint(a,b,c){const d=a.x;a=a.y;return new Rect$$module$build$src$core$utils$rect(a,a+c,d,d+b)}},module$build$src$core$utils$rect={};module$build$src$core$utils$rect.Rect=Rect$$module$build$src$core$utils$rect;var Size$$module$build$src$core$utils$size=class{constructor(a,b){this.width=a;this.height=b}static equals(a,b){return a===b?!0:a&&b?a.width===b.width&&a.height===b.height:!1}static max(a,b){return new Size$$module$build$src$core$utils$size(Math.max(a.width,b.width),Math.max(a.height,b.height))}static min(a,b){return new Size$$module$build$src$core$utils$size(Math.min(a.width,b.width),Math.min(a.height,b.height))}},module$build$src$core$utils$size={};module$build$src$core$utils$size.Size=Size$$module$build$src$core$utils$size;var TEST_ONLY$$module$build$src$core$utils$style={getSizeInternal:getSizeInternal$$module$build$src$core$utils$style},module$build$src$core$utils$style={TEST_ONLY:TEST_ONLY$$module$build$src$core$utils$style};module$build$src$core$utils$style.getBorderBox=getBorderBox$$module$build$src$core$utils$style;module$build$src$core$utils$style.getComputedStyle=getComputedStyle$$module$build$src$core$utils$style;module$build$src$core$utils$style.getContainerOffsetToScrollInto=getContainerOffsetToScrollInto$$module$build$src$core$utils$style;\nmodule$build$src$core$utils$style.getPageOffset=getPageOffset$$module$build$src$core$utils$style;module$build$src$core$utils$style.getSize=getSize$$module$build$src$core$utils$style;module$build$src$core$utils$style.getViewportPageOffset=getViewportPageOffset$$module$build$src$core$utils$style;module$build$src$core$utils$style.scrollIntoContainerView=scrollIntoContainerView$$module$build$src$core$utils$style;var XY_REGEX$$module$build$src$core$utils$svg_math=/translate\\(\\s*([-+\\d.e]+)([ ,]\\s*([-+\\d.e]+)\\s*)?/,XY_STYLE_REGEX$$module$build$src$core$utils$svg_math=/transform:\\s*translate(?:3d)?\\(\\s*([-+\\d.e]+)\\s*px([ ,]\\s*([-+\\d.e]+)\\s*px)?/,TEST_ONLY$$module$build$src$core$utils$svg_math={XY_REGEX:XY_REGEX$$module$build$src$core$utils$svg_math,XY_STYLE_REGEX:XY_STYLE_REGEX$$module$build$src$core$utils$svg_math},module$build$src$core$utils$svg_math={TEST_ONLY:TEST_ONLY$$module$build$src$core$utils$svg_math};\nmodule$build$src$core$utils$svg_math.getDocumentScroll=getDocumentScroll$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getInjectionDivXY=getInjectionDivXY$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getRelativeXY=getRelativeXY$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getViewportBBox=getViewportBBox$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.screenToWsCoordinates=screenToWsCoordinates$$module$build$src$core$utils$svg_math;\nmodule$build$src$core$utils$svg_math.wsToScreenCoordinates=wsToScreenCoordinates$$module$build$src$core$utils$svg_math;var Scrollbar$$module$build$src$core$scrollbar=class{constructor(a,b,c,d,e){this.workspace=a;this.horizontal=b;this.oldHostMetrics=null;this.ratio=1;this.origin=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.startDragHandle=this.handlePosition=this.handleLength=this.scrollbarLength=this.startDragMouse=0;this.containerVisible=this.isHandleVisible=!0;this.position=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.onMouseMoveWrapper_=this.onMouseUpWrapper_=null;this.pair=\nc||!1;this.margin=e!==void 0?e:Scrollbar$$module$build$src$core$scrollbar.DEFAULT_SCROLLBAR_MARGIN;a=\"blocklyScrollbar\"+(this.horizontal?\"Horizontal\":\"Vertical\");d&&(a+=\" \"+d);this.outerSvg=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{\"class\":a});d=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},this.outerSvg);this.svgBackground=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{\"class\":\"blocklyScrollbarBackground\"},d);a=Math.floor((Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-5)/2);this.svgHandle=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyScrollbarHandle\",rx:a,ry:a},d);this.workspace.getThemeManager().subscribe(this.svgHandle,\"scrollbarColour\",\"fill\");this.workspace.getThemeManager().subscribe(this.svgHandle,\"scrollbarOpacity\",\"fill-opacity\");insertAfter$$module$build$src$core$utils$dom(this.outerSvg,\nthis.workspace.getParentSvg());this.setInitialThickness();b?(this.lengthAttribute_=\"width\",this.positionAttribute_=\"x\"):(this.lengthAttribute_=\"height\",this.positionAttribute_=\"y\");this.onMouseDownBarWrapper_=conditionalBind$$module$build$src$core$browser_events(this.svgBackground,\"pointerdown\",this,this.onMouseDownBar);this.onMouseDownHandleWrapper_=conditionalBind$$module$build$src$core$browser_events(this.svgHandle,\"pointerdown\",this,this.onMouseDownHandle)}setInitialThickness(){const a=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;\nthis.horizontal?(this.svgBackground.setAttribute(\"height\",String(a)),this.outerSvg.setAttribute(\"height\",String(a)),this.svgHandle.setAttribute(\"height\",String(a-5)),this.svgHandle.setAttribute(\"y\",\"2.5\")):(this.svgBackground.setAttribute(\"width\",String(a)),this.outerSvg.setAttribute(\"width\",String(a)),this.svgHandle.setAttribute(\"width\",String(a-5)),this.svgHandle.setAttribute(\"x\",\"2.5\"))}dispose(){this.cleanUp();unbind$$module$build$src$core$browser_events(this.onMouseDownBarWrapper_);unbind$$module$build$src$core$browser_events(this.onMouseDownHandleWrapper_);\nremoveNode$$module$build$src$core$utils$dom(this.outerSvg);this.workspace.getThemeManager().unsubscribe(this.svgHandle)}constrainHandleLength(a){return a=a<=0||isNaN(a)?0:Math.min(a,this.scrollbarLength)}setHandleLength(a){this.handleLength=a;this.svgHandle.setAttribute(this.lengthAttribute_,String(this.handleLength))}constrainHandlePosition(a){return a=a<=0||isNaN(a)?0:Math.min(a,this.scrollbarLength-this.handleLength)}setHandlePosition(a){this.handlePosition=a;this.svgHandle.setAttribute(this.positionAttribute_,\nString(this.handlePosition))}setScrollbarLength(a){this.scrollbarLength=a;this.outerSvg.setAttribute(this.lengthAttribute_,String(this.scrollbarLength));this.svgBackground.setAttribute(this.lengthAttribute_,String(this.scrollbarLength))}setPosition(a,b){this.position.x=a;this.position.y=b;setCssTransform$$module$build$src$core$utils$dom(this.outerSvg,\"translate(\"+(this.position.x+this.origin.x)+\"px,\"+(this.position.y+this.origin.y)+\"px)\")}resize(a){if(!a&&(a=this.workspace.getMetrics(),!a))return;\nthis.oldHostMetrics&&Scrollbar$$module$build$src$core$scrollbar.metricsAreEquivalent(a,this.oldHostMetrics)||(this.horizontal?this.resizeHorizontal(a):this.resizeVertical(a),this.oldHostMetrics=a,this.updateMetrics())}requiresViewResize(a){return this.oldHostMetrics?this.oldHostMetrics.viewWidth!==a.viewWidth||this.oldHostMetrics.viewHeight!==a.viewHeight||this.oldHostMetrics.absoluteLeft!==a.absoluteLeft||this.oldHostMetrics.absoluteTop!==a.absoluteTop:!0}resizeHorizontal(a){this.requiresViewResize(a)?\nthis.resizeViewHorizontal(a):this.resizeContentHorizontal(a)}resizeViewHorizontal(a){var b=a.viewWidth-this.margin*2;this.pair&&(b-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setScrollbarLength(Math.max(0,b));b=a.absoluteLeft+this.margin;this.pair&&this.workspace.RTL&&(b+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setPosition(b,a.absoluteTop+a.viewHeight-Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-this.margin);this.resizeContentHorizontal(a)}resizeContentHorizontal(a){if(a.viewWidth>=\na.scrollWidth)this.setHandleLength(this.scrollbarLength),this.setHandlePosition(0),this.pair||this.setVisible(!1);else{this.pair||this.setVisible(!0);var b=this.scrollbarLength*a.viewWidth/a.scrollWidth;b=this.constrainHandleLength(b);this.setHandleLength(b);b=a.scrollWidth-a.viewWidth;var c=this.scrollbarLength-this.handleLength;a=(a.viewLeft-a.scrollLeft)/b*c;a=this.constrainHandlePosition(a);this.setHandlePosition(a);this.ratio=c/b}}resizeVertical(a){this.requiresViewResize(a)?this.resizeViewVertical(a):\nthis.resizeContentVertical(a)}resizeViewVertical(a){let b=a.viewHeight-this.margin*2;this.pair&&(b-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setScrollbarLength(Math.max(0,b));this.setPosition(this.workspace.RTL?a.absoluteLeft+this.margin:a.absoluteLeft+a.viewWidth-Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-this.margin,a.absoluteTop+this.margin);this.resizeContentVertical(a)}resizeContentVertical(a){if(a.viewHeight>=a.scrollHeight)this.setHandleLength(this.scrollbarLength),\nthis.setHandlePosition(0),this.pair||this.setVisible(!1);else{this.pair||this.setVisible(!0);var b=this.scrollbarLength*a.viewHeight/a.scrollHeight;b=this.constrainHandleLength(b);this.setHandleLength(b);b=a.scrollHeight-a.viewHeight;var c=this.scrollbarLength-this.handleLength;a=(a.viewTop-a.scrollTop)/b*c;a=this.constrainHandlePosition(a);this.setHandlePosition(a);this.ratio=c/b}}isVisible(){return this.isHandleVisible}setContainerVisible(a){const b=a!==this.containerVisible;this.containerVisible=\na;b&&this.updateDisplay_()}setVisible(a){if(this.pair)throw Error(\"Unable to toggle visibility of paired scrollbars.\");this.setVisibleInternal(a)}setVisibleInternal(a){const b=a!==this.isVisible();this.isHandleVisible=a;b&&this.updateDisplay_()}updateDisplay_(){this.containerVisible&&this.isVisible()?this.outerSvg.setAttribute(\"display\",\"block\"):this.outerSvg.setAttribute(\"display\",\"none\")}onMouseDownBar(a){this.workspace.markFocused();clearTouchIdentifier$$module$build$src$core$touch();this.cleanUp();\nif(isRightButton$$module$build$src$core$browser_events(a))a.stopPropagation();else{var b=mouseToSvg$$module$build$src$core$browser_events(a,this.workspace.getParentSvg(),this.workspace.getInverseScreenCTM());b=this.horizontal?b.x:b.y;var c=getInjectionDivXY$$module$build$src$core$utils$svg_math(this.svgHandle);c=this.horizontal?c.x:c.y;var d=this.handlePosition,e=this.handleLength*.95;b<=c?d-=e:b>=c+this.handleLength&&(d+=e);this.setHandlePosition(this.constrainHandlePosition(d));this.updateMetrics();\na.stopPropagation();a.preventDefault()}}onMouseDownHandle(a){this.workspace.markFocused();this.cleanUp();isRightButton$$module$build$src$core$browser_events(a)?a.stopPropagation():(this.startDragHandle=this.handlePosition,this.startDragMouse=this.horizontal?a.clientX:a.clientY,this.onMouseUpWrapper_=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onMouseUpHandle),this.onMouseMoveWrapper_=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",\nthis,this.onMouseMoveHandle),a.stopPropagation(),a.preventDefault())}onMouseMoveHandle(a){this.setHandlePosition(this.constrainHandlePosition(this.startDragHandle+((this.horizontal?a.clientX:a.clientY)-this.startDragMouse)));this.updateMetrics()}onMouseUpHandle(){clearTouchIdentifier$$module$build$src$core$touch();this.cleanUp()}cleanUp(){this.workspace.hideChaff(!0);this.onMouseUpWrapper_&&(unbind$$module$build$src$core$browser_events(this.onMouseUpWrapper_),this.onMouseUpWrapper_=null);this.onMouseMoveWrapper_&&\n(unbind$$module$build$src$core$browser_events(this.onMouseMoveWrapper_),this.onMouseMoveWrapper_=null)}getRatio_(){let a=this.handlePosition/(this.scrollbarLength-this.handleLength);isNaN(a)&&(a=0);return a}updateMetrics(){const a=this.getRatio_();this.horizontal?this.workspace.setMetrics({x:a}):this.workspace.setMetrics({y:a})}set(a,b){this.setHandlePosition(this.constrainHandlePosition(a*this.ratio));(b||b===void 0)&&this.updateMetrics()}setOrigin(a,b){this.origin=new Coordinate$$module$build$src$core$utils$coordinate(a,\nb)}static metricsAreEquivalent(a,b){return a.viewWidth===b.viewWidth&&a.viewHeight===b.viewHeight&&a.viewLeft===b.viewLeft&&a.viewTop===b.viewTop&&a.absoluteTop===b.absoluteTop&&a.absoluteLeft===b.absoluteLeft&&a.scrollWidth===b.scrollWidth&&a.scrollHeight===b.scrollHeight&&a.scrollLeft===b.scrollLeft&&a.scrollTop===b.scrollTop}};Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness=TOUCH_ENABLED$$module$build$src$core$touch?25:15;\nScrollbar$$module$build$src$core$scrollbar.DEFAULT_SCROLLBAR_MARGIN=.5;var module$build$src$core$scrollbar={};module$build$src$core$scrollbar.Scrollbar=Scrollbar$$module$build$src$core$scrollbar;var domParser$$module$build$src$core$utils$xml={parseFromString:function(){throw Error(\"DOMParser was not found in the global scope and was not properly injected using injectDependencies\");}},xmlSerializer$$module$build$src$core$utils$xml={serializeToString:function(){throw Error(\"XMLSerializer was not foundin the global scope and was not properly injected using injectDependencies\");}},{document:document$$module$build$src$core$utils$xml,DOMParser:DOMParser$$module$build$src$core$utils$xml,XMLSerializer:XMLSerializer$$module$build$src$core$utils$xml}=\nglobalThis;DOMParser$$module$build$src$core$utils$xml&&(domParser$$module$build$src$core$utils$xml=new DOMParser$$module$build$src$core$utils$xml);XMLSerializer$$module$build$src$core$utils$xml&&(xmlSerializer$$module$build$src$core$utils$xml=new XMLSerializer$$module$build$src$core$utils$xml);\nvar NAME_SPACE$$module$build$src$core$utils$xml=\"https://developers.google.com/blockly/xml\",INVALID_CONTROL_CHARS$$module$build$src$core$utils$xml=/[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F]/g,module$build$src$core$utils$xml={NAME_SPACE:NAME_SPACE$$module$build$src$core$utils$xml};module$build$src$core$utils$xml.createElement=$.createElement$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.createTextNode=$.createTextNode$$module$build$src$core$utils$xml;\nmodule$build$src$core$utils$xml.domToText=domToText$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.injectDependencies=injectDependencies$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.textToDom=$.textToDom$$module$build$src$core$utils$xml;var CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox=\"categoryToolbox\",FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox=\"flyoutToolbox\",Position$$module$build$src$core$utils$toolbox;(function(a){a[a.TOP=0]=\"TOP\";a[a.BOTTOM=1]=\"BOTTOM\";a[a.LEFT=2]=\"LEFT\";a[a.RIGHT=3]=\"RIGHT\"})(Position$$module$build$src$core$utils$toolbox||(Position$$module$build$src$core$utils$toolbox={}));\nvar TEST_ONLY$$module$build$src$core$utils$toolbox={hasCategoriesInternal:hasCategoriesInternal$$module$build$src$core$utils$toolbox},module$build$src$core$utils$toolbox={};module$build$src$core$utils$toolbox.Position=Position$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.TEST_ONLY=TEST_ONLY$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.convertFlyoutDefToJsonArray=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox;\nmodule$build$src$core$utils$toolbox.convertToolboxDefToJson=convertToolboxDefToJson$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.hasCategories=hasCategories$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.isCategoryCollapsible=isCategoryCollapsible$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.parseToolboxTree=parseToolboxTree$$module$build$src$core$utils$toolbox;var verticalPosition$$module$build$src$core$positionable_helpers;(function(a){a[a.TOP=0]=\"TOP\";a[a.BOTTOM=1]=\"BOTTOM\"})(verticalPosition$$module$build$src$core$positionable_helpers||(verticalPosition$$module$build$src$core$positionable_helpers={}));var horizontalPosition$$module$build$src$core$positionable_helpers;(function(a){a[a.LEFT=0]=\"LEFT\";a[a.RIGHT=1]=\"RIGHT\"})(horizontalPosition$$module$build$src$core$positionable_helpers||(horizontalPosition$$module$build$src$core$positionable_helpers={}));\nvar bumpDirection$$module$build$src$core$positionable_helpers;(function(a){a[a.UP=0]=\"UP\";a[a.DOWN=1]=\"DOWN\"})(bumpDirection$$module$build$src$core$positionable_helpers||(bumpDirection$$module$build$src$core$positionable_helpers={}));var module$build$src$core$positionable_helpers={};module$build$src$core$positionable_helpers.bumpDirection=bumpDirection$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.bumpPositionRect=bumpPositionRect$$module$build$src$core$positionable_helpers;\nmodule$build$src$core$positionable_helpers.getCornerOppositeToolbox=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.getStartPositionRect=getStartPositionRect$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.horizontalPosition=horizontalPosition$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.verticalPosition=verticalPosition$$module$build$src$core$positionable_helpers;var SPRITE$$module$build$src$core$sprites={width:96,height:124,url:\"sprites.png\"},module$build$src$core$sprites={SPRITE:SPRITE$$module$build$src$core$sprites};var ZoomControls$$module$build$src$core$zoom_controls=class{constructor(a){this.workspace=a;this.id=\"zoomControls\";this.boundEvents=[];this.zoomResetGroup=this.zoomOutGroup=this.zoomInGroup=null;this.HEIGHT=this.WIDTH=32;this.SMALL_SPACING=2;this.LARGE_SPACING=11;this.MARGIN_HORIZONTAL=this.MARGIN_VERTICAL=20;this.svgGroup=null;this.top=this.left=0;this.initialized=!1}createDom(){this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});const a=String(Math.random()).substring(2);\nthis.createZoomOutSvg(a);this.createZoomInSvg(a);this.workspace.isMovable()&&this.createZoomResetSvg(a);return this.svgGroup}init(){this.workspace.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.ZOOM_CONTROLS_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE]});this.initialized=!0}dispose(){this.workspace.getComponentManager().removeComponent(\"zoomControls\");this.svgGroup&&\nremoveNode$$module$build$src$core$utils$dom(this.svgGroup);for(const a of this.boundEvents)unbind$$module$build$src$core$browser_events(a);this.boundEvents.length=0}getBoundingRectangle(){let a=this.SMALL_SPACING+2*this.HEIGHT;this.zoomResetGroup&&(a+=this.LARGE_SPACING+this.HEIGHT);return new Rect$$module$build$src$core$utils$rect(this.top,this.top+a,this.left,this.left+this.WIDTH)}position(a,b){if(this.initialized){var c=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers(this.workspace,\na),d=this.SMALL_SPACING+2*this.HEIGHT;this.zoomResetGroup&&(d+=this.LARGE_SPACING+this.HEIGHT);a=getStartPositionRect$$module$build$src$core$positionable_helpers(c,new Size$$module$build$src$core$utils$size(this.WIDTH,d),this.MARGIN_HORIZONTAL,this.MARGIN_VERTICAL,a,this.workspace);c=c.vertical;b=bumpPositionRect$$module$build$src$core$positionable_helpers(a,this.MARGIN_VERTICAL,c===verticalPosition$$module$build$src$core$positionable_helpers.TOP?bumpDirection$$module$build$src$core$positionable_helpers.DOWN:\nbumpDirection$$module$build$src$core$positionable_helpers.UP,b);if(c===verticalPosition$$module$build$src$core$positionable_helpers.TOP){var e=this.SMALL_SPACING+this.HEIGHT,f;(f=this.zoomInGroup)==null||f.setAttribute(\"transform\",\"translate(0, \"+e+\")\");this.zoomResetGroup&&this.zoomResetGroup.setAttribute(\"transform\",\"translate(0, \"+(e+this.LARGE_SPACING+this.HEIGHT)+\")\")}else{f=this.zoomResetGroup?this.LARGE_SPACING+this.HEIGHT:0;let h;(h=this.zoomInGroup)==null||h.setAttribute(\"transform\",\"translate(0, \"+\nf+\")\");f=f+this.SMALL_SPACING+this.HEIGHT;(e=this.zoomOutGroup)==null||e.setAttribute(\"transform\",\"translate(0, \"+f+\")\")}this.top=b.top;this.left=b.left;var g;(g=this.svgGroup)==null||g.setAttribute(\"transform\",\"translate(\"+this.left+\",\"+this.top+\")\")}}createZoomOutSvg(a){this.zoomOutGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomOut\"},this.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,\n{id:\"blocklyZoomoutClipPath\"+a},this.zoomOutGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,x:-64,y:-92,\"clip-path\":\"url(#blocklyZoomoutClipPath\"+a+\")\"},this.zoomOutGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomOutGroup,\"pointerdown\",null,this.zoom.bind(this,-1)))}createZoomInSvg(a){this.zoomInGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomIn\"},this.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyZoominClipPath\"+\na},this.zoomInGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,x:-32,y:-92,\"clip-path\":\"url(#blocklyZoominClipPath\"+a+\")\"},this.zoomInGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+\nSPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomInGroup,\"pointerdown\",null,this.zoom.bind(this,1)))}zoom(a,b){this.workspace.markFocused();this.workspace.zoomCenter(a);this.fireZoomEvent();clearTouchIdentifier$$module$build$src$core$touch();b.stopPropagation();b.preventDefault()}createZoomResetSvg(a){this.zoomResetGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomReset\"},\nthis.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyZoomresetClipPath\"+a},this.zoomResetGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,y:-92,\"clip-path\":\"url(#blocklyZoomresetClipPath\"+\na+\")\"},this.zoomResetGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomResetGroup,\"pointerdown\",null,this.resetZoom.bind(this)))}resetZoom(a){this.workspace.markFocused();const b=Math.log(this.workspace.options.zoomOptions.startScale/this.workspace.scale)/Math.log(this.workspace.options.zoomOptions.scaleSpeed);\nthis.workspace.beginCanvasTransition();this.workspace.zoomCenter(b);this.workspace.scrollCenter();setTimeout(this.workspace.endCanvasTransition.bind(this.workspace),500);this.fireZoomEvent();clearTouchIdentifier$$module$build$src$core$touch();a.stopPropagation();a.preventDefault()}fireZoomEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(null,this.workspace.id,\"zoom_controls\");fire$$module$build$src$core$events$utils(a)}};register$$module$build$src$core$css(\"\\n.blocklyZoom>image, .blocklyZoom>svg>image {\\n opacity: .4;\\n}\\n\\n.blocklyZoom>image:hover, .blocklyZoom>svg>image:hover {\\n opacity: .6;\\n}\\n\\n.blocklyZoom>image:active, .blocklyZoom>svg>image:active {\\n opacity: .8;\\n}\\n\");\nvar module$build$src$core$zoom_controls={};module$build$src$core$zoom_controls.ZoomControls=ZoomControls$$module$build$src$core$zoom_controls;var VARIABLES$$module$build$src$core$serialization$priorities=100,PROCEDURES$$module$build$src$core$serialization$priorities=75,BLOCKS$$module$build$src$core$serialization$priorities=50,WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities=25,module$build$src$core$serialization$priorities={BLOCKS:BLOCKS$$module$build$src$core$serialization$priorities,PROCEDURES:PROCEDURES$$module$build$src$core$serialization$priorities,VARIABLES:VARIABLES$$module$build$src$core$serialization$priorities,\nWORKSPACE_COMMENTS:WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities};var module$build$src$core$serialization$registry={};module$build$src$core$serialization$registry.register=register$$module$build$src$core$serialization$registry;module$build$src$core$serialization$registry.unregister=unregister$$module$build$src$core$serialization$registry;var saveComment$$module$build$src$core$serialization$workspace_comments=save$$module$build$src$core$serialization$workspace_comments,WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments=class{constructor(){this.priority=WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities}save(a){const b=[];for(const c of a.getTopComments())(a=save$$module$build$src$core$serialization$workspace_comments(c,{addCoordinates:!0,saveIds:!0}))&&b.push(a);return b.length?b:null}load(a,\nb){for(const c of a)append$$module$build$src$core$serialization$workspace_comments(c,b,{recordUndo:getRecordUndo$$module$build$src$core$events$utils()})}clear(a){for(const b of a.getTopComments())b.dispose()}};register$$module$build$src$core$serialization$registry(\"workspaceComments\",new WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments);var module$build$src$core$serialization$workspace_comments={};\nmodule$build$src$core$serialization$workspace_comments.WorkspaceCommentSerializer=WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments;module$build$src$core$serialization$workspace_comments.append=append$$module$build$src$core$serialization$workspace_comments;module$build$src$core$serialization$workspace_comments.save=save$$module$build$src$core$serialization$workspace_comments;var module$build$src$core$clipboard$registry={};module$build$src$core$clipboard$registry.register=register$$module$build$src$core$clipboard$registry;module$build$src$core$clipboard$registry.unregister=unregister$$module$build$src$core$clipboard$registry;var WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster=class{paste(a,b,c){a=a.commentState;c&&(a.x=c.x,a.y=c.y);$.disable$$module$build$src$core$events$utils();let d;try{d=append$$module$build$src$core$serialization$workspace_comments(a,b),moveCommentToNotConflict$$module$build$src$core$clipboard$workspace_comment_paster(d)}finally{$.enable$$module$build$src$core$events$utils()}if(!d)return null;isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CREATE))(d));\n$.getFocusManager$$module$build$src$core$focus_manager().focusNode(d);return d}};WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE=\"workspace-comment\";register$$module$build$src$core$clipboard$registry(WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE,new WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster);var module$build$src$core$clipboard$workspace_comment_paster={};\nmodule$build$src$core$clipboard$workspace_comment_paster.WorkspaceCommentPaster=WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster;var DEFAULT_SNAP_RADIUS$$module$build$src$core$config,module$build$src$core$config;DEFAULT_SNAP_RADIUS$$module$build$src$core$config=28;$.config$$module$build$src$core$config={dragRadius:5,flyoutDragRadius:10,snapRadius:DEFAULT_SNAP_RADIUS$$module$build$src$core$config,connectingSnapRadius:DEFAULT_SNAP_RADIUS$$module$build$src$core$config,currentConnectionPreference:8,bumpDelay:250};module$build$src$core$config={config:$.config$$module$build$src$core$config};var ARIA_PREFIX$$module$build$src$core$utils$aria=\"aria-\",ROLE_ATTRIBUTE$$module$build$src$core$utils$aria=\"role\",Role$$module$build$src$core$utils$aria;\n(function(a){a.GRID=\"grid\";a.GRIDCELL=\"gridcell\";a.GROUP=\"group\";a.LISTBOX=\"listbox\";a.MENU=\"menu\";a.MENUITEM=\"menuitem\";a.MENUITEMCHECKBOX=\"menuitemcheckbox\";a.OPTION=\"option\";a.PRESENTATION=\"presentation\";a.ROW=\"row\";a.TREE=\"tree\";a.TREEITEM=\"treeitem\";a.SEPARATOR=\"separator\";a.STATUS=\"status\"})(Role$$module$build$src$core$utils$aria||(Role$$module$build$src$core$utils$aria={}));var State$$module$build$src$core$utils$aria;\n(function(a){a.ACTIVEDESCENDANT=\"activedescendant\";a.COLCOUNT=\"colcount\";a.DISABLED=\"disabled\";a.EXPANDED=\"expanded\";a.INVALID=\"invalid\";a.LABEL=\"label\";a.LABELLEDBY=\"labelledby\";a.LEVEL=\"level\";a.ORIENTATION=\"orientation\";a.POSINSET=\"posinset\";a.ROWCOUNT=\"rowcount\";a.SELECTED=\"selected\";a.SETSIZE=\"setsize\";a.VALUEMAX=\"valuemax\";a.VALUEMIN=\"valuemin\";a.LIVE=\"live\";a.HIDDEN=\"hidden\"})(State$$module$build$src$core$utils$aria||(State$$module$build$src$core$utils$aria={}));\nvar module$build$src$core$utils$aria={};module$build$src$core$utils$aria.Role=Role$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.State=State$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.setRole=setRole$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.setState=setState$$module$build$src$core$utils$aria;var MenuItem$$module$build$src$core$menuitem=class{constructor(a,b){this.content=a;this.opt_value=b;this.enabled=!0;this.element=null;this.rightToLeft=!1;this.roleName=null;this.highlight=this.checked=this.checkable=!1;this.actionHandler=null}createDom(){const a=document.createElement(\"div\");a.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();this.element=a;a.className=\"blocklyMenuItem \"+(this.enabled?\"\":\"blocklyMenuItemDisabled \")+(this.checked?\"blocklyMenuItemSelected \":\"\")+(this.highlight?\n\"blocklyMenuItemHighlight \":\"\")+(this.rightToLeft?\"blocklyMenuItemRtl \":\"\");const b=document.createElement(\"div\");b.className=\"blocklyMenuItemContent\";if(this.checkable){var c=document.createElement(\"div\");c.className=\"blocklyMenuItemCheckbox \";b.appendChild(c)}c=this.content;typeof this.content===\"string\"&&(c=document.createTextNode(this.content));b.appendChild(c);a.appendChild(b);this.roleName&&setRole$$module$build$src$core$utils$aria(a,this.roleName);setState$$module$build$src$core$utils$aria(a,\nState$$module$build$src$core$utils$aria.SELECTED,this.checkable&&this.checked||!1);setState$$module$build$src$core$utils$aria(a,State$$module$build$src$core$utils$aria.DISABLED,!this.enabled);return a}dispose(){this.element=null}getElement(){return this.element}getId(){return this.element.id}getValue(){let a;return(a=this.opt_value)!=null?a:null}setRightToLeft(a){this.rightToLeft=a}setRole(a){this.roleName=a}setCheckable(a){this.checkable=a}setChecked(a){this.checked=a}setHighlighted(a){this.highlight=\na;const b=this.getElement();b&&this.isEnabled()&&(a?addClass$$module$build$src$core$utils$dom(b,\"blocklyMenuItemHighlight\"):removeClass$$module$build$src$core$utils$dom(b,\"blocklyMenuItemHighlight\"))}isEnabled(){return this.enabled}setEnabled(a){this.enabled=a}performAction(a){this.isEnabled()&&this.actionHandler&&this.actionHandler(this,a)}onAction(a,b){this.actionHandler=a.bind(b)}},module$build$src$core$menuitem={};module$build$src$core$menuitem.MenuItem=MenuItem$$module$build$src$core$menuitem;var Menu$$module$build$src$core$menu=class{constructor(){this.menuItems=[];this.roleName=this.element=this.onKeyDownHandler=this.pointerLeaveHandler=this.pointerEnterHandler=this.clickHandler=this.pointerMoveHandler=this.highlightedItem=this.openingCoords=null}addChild(a){this.menuItems.push(a)}render(a){const b=document.createElement(\"div\");b.className=\"blocklyMenu\";b.tabIndex=0;this.roleName&&setRole$$module$build$src$core$utils$aria(b,this.roleName);this.element=b;for(let c=0,d;d=this.menuItems[c];c++)b.appendChild(d.createDom());\nthis.pointerMoveHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointermove\",this,this.handlePointerMove,!0);this.clickHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerup\",this,this.handleClick,!0);this.pointerEnterHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerenter\",this,this.handlePointerEnter,!0);this.pointerLeaveHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerleave\",this,this.handlePointerLeave,!0);this.onKeyDownHandler=\nconditionalBind$$module$build$src$core$browser_events(b,\"keydown\",this,this.handleKeyEvent);a.appendChild(b);return b}getElement(){return this.element}focus(){const a=this.getElement();a&&a.focus({preventScroll:!0})}blur(){const a=this.getElement();a&&a.blur()}setRole(a){this.roleName=a}dispose(){this.pointerMoveHandler&&(unbind$$module$build$src$core$browser_events(this.pointerMoveHandler),this.pointerMoveHandler=null);this.clickHandler&&(unbind$$module$build$src$core$browser_events(this.clickHandler),\nthis.clickHandler=null);this.pointerEnterHandler&&(unbind$$module$build$src$core$browser_events(this.pointerEnterHandler),this.pointerEnterHandler=null);this.pointerLeaveHandler&&(unbind$$module$build$src$core$browser_events(this.pointerLeaveHandler),this.pointerLeaveHandler=null);this.onKeyDownHandler&&(unbind$$module$build$src$core$browser_events(this.onKeyDownHandler),this.onKeyDownHandler=null);for(let a=0,b;b=this.menuItems[a];a++)b.dispose();this.element=null}getMenuItem(a){const b=this.getElement();\nfor(;a&&a!==b;){if(a.classList.contains(\"blocklyMenuItem\")){const c=this.getMenuItems();for(let d=0,e;e=c[d];d++)if(e.getElement()===a)return e}a=a.parentElement}return null}setHighlighted(a){var b=this.highlightedItem;b&&(b.setHighlighted(!1),this.highlightedItem=null);if(a){a.setHighlighted(!0);this.highlightedItem=a;b=this.getElement();const c=a.getElement();b&&c&&(scrollIntoContainerView$$module$build$src$core$utils$style(c,b),setState$$module$build$src$core$utils$aria(b,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,\na.getId()))}}highlightNext(){const a=this.highlightedItem?this.menuItems.indexOf(this.highlightedItem):-1;this.highlightHelper(a,1)}highlightPrevious(){const a=this.highlightedItem?this.menuItems.indexOf(this.highlightedItem):-1;this.highlightHelper(a<0?this.menuItems.length:a,-1)}highlightFirst(){this.highlightHelper(-1,1)}highlightLast(){this.highlightHelper(this.menuItems.length,-1)}highlightHelper(a,b){a+=b;let c;const d=this.getMenuItems();for(;c=d[a];){if(c.isEnabled()){this.setHighlighted(c);\nbreak}a+=b}}handlePointerMove(a){Math.max(Math.abs(a.movementX),Math.abs(a.movementY))!==0&&(a=this.getMenuItem(a.target))&&(a.isEnabled()?this.highlightedItem!==a&&this.setHighlighted(a):this.setHighlighted(null))}handleClick(a){var b=this.openingCoords;this.openingCoords=null;if(b&&typeof a.clientX===\"number\"){const c=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY);if(Coordinate$$module$build$src$core$utils$coordinate.distance(b,c)<1)return}(b=this.getMenuItem(a.target))&&\nb.performAction(a)}handlePointerEnter(a){this.focus()}handlePointerLeave(a){this.getElement()&&this.setHighlighted(null)}handleKeyEvent(a){if(this.menuItems.length&&!(a.shiftKey||a.ctrlKey||a.metaKey||a.altKey)){var b=this.highlightedItem;switch(a.key){case \"Enter\":case \" \":b&&b.performAction(a);break;case \"ArrowUp\":this.highlightPrevious();break;case \"ArrowDown\":this.highlightNext();break;case \"PageUp\":case \"Home\":this.highlightFirst();break;case \"PageDown\":case \"End\":this.highlightLast();break;\ndefault:return}a.preventDefault();a.stopPropagation()}}getSize(){const a=this.getElement(),b=getSize$$module$build$src$core$utils$style(a);b.height=a.scrollHeight;return b}getMenuItems(){return this.menuItems.filter(a=>a instanceof MenuItem$$module$build$src$core$menuitem)}},module$build$src$core$menu={};module$build$src$core$menu.Menu=Menu$$module$build$src$core$menu;var MenuSeparator$$module$build$src$core$menu_separator=class{constructor(){this.element=null}createDom(){this.element=document.createElement(\"hr\");this.element.className=\"blocklyMenuSeparator\";setRole$$module$build$src$core$utils$aria(this.element,Role$$module$build$src$core$utils$aria.SEPARATOR);return this.element}dispose(){let a;(a=this.element)==null||a.remove();this.element=null}},module$build$src$core$menu_separator={};module$build$src$core$menu_separator.MenuSeparator=MenuSeparator$$module$build$src$core$menu_separator;var COLLAPSED_INPUT_NAME$$module$build$src$core$constants=\"_TEMP_COLLAPSED_INPUT\",COLLAPSED_FIELD_NAME$$module$build$src$core$constants=\"_TEMP_COLLAPSED_FIELD\",MANUALLY_DISABLED$$module$build$src$core$constants=\"MANUALLY_DISABLED\",module$build$src$core$constants={COLLAPSED_FIELD_NAME:COLLAPSED_FIELD_NAME$$module$build$src$core$constants,COLLAPSED_INPUT_NAME:COLLAPSED_INPUT_NAME$$module$build$src$core$constants,MANUALLY_DISABLED:MANUALLY_DISABLED$$module$build$src$core$constants};(function(a){a[a.VALUE=1]=\"VALUE\";a[a.STATEMENT=3]=\"STATEMENT\";a[a.DUMMY=5]=\"DUMMY\";a[a.CUSTOM=6]=\"CUSTOM\";a[a.END_ROW=7]=\"END_ROW\"})($.inputTypes$$module$build$src$core$inputs$input_types||($.inputTypes$$module$build$src$core$inputs$input_types={}));var module$build$src$core$inputs$input_types={};module$build$src$core$inputs$input_types.inputTypes=$.inputTypes$$module$build$src$core$inputs$input_types;var module$build$src$core$interfaces$i_serializable={};module$build$src$core$interfaces$i_serializable.isSerializable=isSerializable$$module$build$src$core$interfaces$i_serializable;var rootBlocks$$module$build$src$core$render_management=new Set,dirtyBlocks$$module$build$src$core$render_management=new WeakSet,eventGroups$$module$build$src$core$render_management=new WeakMap,afterRendersPromise$$module$build$src$core$render_management=null,afterRendersResolver$$module$build$src$core$render_management=null,animationRequestId$$module$build$src$core$render_management=0,module$build$src$core$render_management={};module$build$src$core$render_management.finishQueuedRenders=finishQueuedRenders$$module$build$src$core$render_management;\nmodule$build$src$core$render_management.queueRender=queueRender$$module$build$src$core$render_management;module$build$src$core$render_management.triggerQueuedRenders=triggerQueuedRenders$$module$build$src$core$render_management;var setLocale$$module$build$src$core$msg,module$build$src$core$msg;$.Msg$$module$build$src$core$msg=Object.create(null);setLocale$$module$build$src$core$msg=function(a){Object.keys(a).forEach(function(b){$.Msg$$module$build$src$core$msg[b]=a[b]})};module$build$src$core$msg={Msg:$.Msg$$module$build$src$core$msg,setLocale:setLocale$$module$build$src$core$msg};var CLASS_NAME$$module$build$src$core$toast=\"blocklyToast\",MESSAGE_CLASS_NAME$$module$build$src$core$toast=\"blocklyToastMessage\",CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast=\"blocklyToastCloseButton\",Toast$$module$build$src$core$toast=class{static show(a,b){if(b.oncePerSession&&b.id){if(this.shownIds.has(b.id))return;this.shownIds.add(b.id)}this.hide(a);const c=this.createDom(a,b);requestAnimationFrame(()=>{c.style.bottom=\"2rem\"})}static createDom(a,b){const {message:c,duration:d=5,assertiveness:e=\nToast$$module$build$src$core$toast.Assertiveness.POLITE}=b,f=document.createElement(\"div\");a.getInjectionDiv().appendChild(f);f.dataset.toastId=b.id;f.className=CLASS_NAME$$module$build$src$core$toast;setRole$$module$build$src$core$utils$aria(f,Role$$module$build$src$core$utils$aria.STATUS);setState$$module$build$src$core$utils$aria(f,State$$module$build$src$core$utils$aria.LIVE,e);b=f.appendChild(document.createElement(\"div\"));b.className=MESSAGE_CLASS_NAME$$module$build$src$core$toast;b.innerText=\nc;b=f.appendChild(document.createElement(\"button\"));b.className=CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast;setState$$module$build$src$core$utils$aria(b,State$$module$build$src$core$utils$aria.LABEL,$.Msg$$module$build$src$core$msg.CLOSE);var g=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{width:24,height:24,viewBox:\"0 0 24 24\",fill:\"none\"},b);setState$$module$build$src$core$utils$aria(g,State$$module$build$src$core$utils$aria.HIDDEN,!0);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{x:19.7782,y:2.80762,width:2,height:24,transform:\"rotate(45, 19.7782, 2.80762)\",fill:\"black\"},g);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{x:2.80762,y:4.22183,width:2,height:24,transform:\"rotate(-45, 2.80762, 4.22183)\",fill:\"black\"},g);b.addEventListener(\"click\",()=>{f.remove();a.markFocused()});let h;b=()=>{h=setTimeout(()=>f.remove(),d*1E3)};g=()=>clearTimeout(h);f.addEventListener(\"focusin\",g);f.addEventListener(\"focusout\",b);f.addEventListener(\"mouseenter\",\ng);f.addEventListener(\"mousemove\",g);f.addEventListener(\"mouseleave\",b);b();return f}static hide(a,b){a=a.getInjectionDiv().querySelector(`.${CLASS_NAME$$module$build$src$core$toast}`);a instanceof HTMLElement&&(!b||b===a.dataset.toastId)&&a.remove()}};Toast$$module$build$src$core$toast.shownIds=new Set;(function(a){a=a.Assertiveness||(a.Assertiveness={});a.ASSERTIVE=\"assertive\";a.POLITE=\"polite\"})(Toast$$module$build$src$core$toast||(Toast$$module$build$src$core$toast={}));register$$module$build$src$core$css(`\n.${CLASS_NAME$$module$build$src$core$toast} {\n font-size: 1.2rem;\n position: absolute;\n bottom: -10rem;\n right: 2rem;\n padding: 1rem;\n color: black;\n background-color: white;\n border: 2px solid black;\n border-radius: 0.4rem;\n z-index: 999;\n display: flex;\n align-items: center;\n gap: 0.8rem;\n line-height: 1.5;\n transition: bottom 0.3s ease-out;\n}\n\n.${CLASS_NAME$$module$build$src$core$toast} .${MESSAGE_CLASS_NAME$$module$build$src$core$toast} {\n maxWidth: 18rem;\n}\n\n.${CLASS_NAME$$module$build$src$core$toast} .${CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast} {\n margin: 0;\n padding: 0.2rem;\n background-color: transparent;\n color: black;\n border: none;\n cursor: pointer;\n}\n`);var module$build$src$core$toast={};module$build$src$core$toast.Toast=Toast$$module$build$src$core$toast;var defaultAlert$$module$build$src$core$dialog=function(a,b){window.alert(a);b&&b()},alertImplementation$$module$build$src$core$dialog=defaultAlert$$module$build$src$core$dialog,defaultConfirm$$module$build$src$core$dialog=function(a,b){b(window.confirm(a))},confirmImplementation$$module$build$src$core$dialog=defaultConfirm$$module$build$src$core$dialog,defaultPrompt$$module$build$src$core$dialog=function(a,b,c){c(window.prompt(a,b))},promptImplementation$$module$build$src$core$dialog=defaultPrompt$$module$build$src$core$dialog,\ndefaultToast$$module$build$src$core$dialog=Toast$$module$build$src$core$toast.show.bind(Toast$$module$build$src$core$toast),toastImplementation$$module$build$src$core$dialog=defaultToast$$module$build$src$core$dialog,module$build$src$core$dialog={};module$build$src$core$dialog.alert=alert$$module$build$src$core$dialog;module$build$src$core$dialog.confirm=confirm$$module$build$src$core$dialog;module$build$src$core$dialog.prompt=prompt$$module$build$src$core$dialog;\nmodule$build$src$core$dialog.setAlert=setAlert$$module$build$src$core$dialog;module$build$src$core$dialog.setConfirm=setConfirm$$module$build$src$core$dialog;module$build$src$core$dialog.setPrompt=setPrompt$$module$build$src$core$dialog;module$build$src$core$dialog.setToast=setToast$$module$build$src$core$dialog;module$build$src$core$dialog.toast=toast$$module$build$src$core$dialog;var module$build$src$core$interfaces$i_legacy_procedure_blocks={};module$build$src$core$interfaces$i_legacy_procedure_blocks.isLegacyProcedureCallBlock=isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks;module$build$src$core$interfaces$i_legacy_procedure_blocks.isLegacyProcedureDefBlock=isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks;var module$build$src$core$interfaces$i_variable_backed_parameter_model={};module$build$src$core$interfaces$i_variable_backed_parameter_model.isVariableBackedParameterModel=isVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model;var previousWarnings$$module$build$src$core$utils$deprecation=new Set,module$build$src$core$utils$deprecation={};module$build$src$core$utils$deprecation.warn=warn$$module$build$src$core$utils$deprecation;var CATEGORY_NAME$$module$build$src$core$variables=\"VARIABLE\",VAR_LETTER_OPTIONS$$module$build$src$core$variables=\"ijkmnopqrstuvwxyzabcdefgh\",TEST_ONLY$$module$build$src$core$variables={generateUniqueNameInternal:generateUniqueNameInternal$$module$build$src$core$variables},module$build$src$core$variables={CATEGORY_NAME:CATEGORY_NAME$$module$build$src$core$variables,TEST_ONLY:TEST_ONLY$$module$build$src$core$variables,VAR_LETTER_OPTIONS:VAR_LETTER_OPTIONS$$module$build$src$core$variables};\nmodule$build$src$core$variables.allDeveloperVariables=$.allDeveloperVariables$$module$build$src$core$variables;module$build$src$core$variables.allUsedVarModels=$.allUsedVarModels$$module$build$src$core$variables;module$build$src$core$variables.compareByName=compareByName$$module$build$src$core$variables;module$build$src$core$variables.createVariableButtonHandler=createVariableButtonHandler$$module$build$src$core$variables;module$build$src$core$variables.deleteVariable=$.deleteVariable$$module$build$src$core$variables;\nmodule$build$src$core$variables.flyoutCategory=flyoutCategory$$module$build$src$core$variables;module$build$src$core$variables.flyoutCategoryBlocks=flyoutCategoryBlocks$$module$build$src$core$variables;module$build$src$core$variables.generateUniqueName=generateUniqueName$$module$build$src$core$variables;module$build$src$core$variables.generateUniqueNameFromOptions=generateUniqueNameFromOptions$$module$build$src$core$variables;module$build$src$core$variables.generateVariableFieldDom=generateVariableFieldDom$$module$build$src$core$variables;\nmodule$build$src$core$variables.getAddedVariables=getAddedVariables$$module$build$src$core$variables;module$build$src$core$variables.getOrCreateVariablePackage=$.getOrCreateVariablePackage$$module$build$src$core$variables;module$build$src$core$variables.getVariable=$.getVariable$$module$build$src$core$variables;module$build$src$core$variables.getVariableUsesById=getVariableUsesById$$module$build$src$core$variables;module$build$src$core$variables.internalFlyoutCategory=internalFlyoutCategory$$module$build$src$core$variables;\nmodule$build$src$core$variables.jsonFlyoutCategoryBlocks=jsonFlyoutCategoryBlocks$$module$build$src$core$variables;module$build$src$core$variables.nameUsedWithAnyType=nameUsedWithAnyType$$module$build$src$core$variables;module$build$src$core$variables.nameUsedWithConflictingParam=nameUsedWithConflictingParam$$module$build$src$core$variables;module$build$src$core$variables.promptName=promptName$$module$build$src$core$variables;module$build$src$core$variables.renameVariable=$.renameVariable$$module$build$src$core$variables;var DeserializationError$$module$build$src$core$serialization$exceptions=class extends Error{},MissingBlockType$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a){super(\"Expected to find a 'type' property, defining the block type\");this.state=a}},MissingConnection$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,\nb,c){super(`The block ${b.toDevString()} is missing a(n) ${a}\nconnection`);this.block=b;this.state=c}},BadConnectionCheck$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,b,c,d){super(`The block ${c.toDevString()} could not connect its\n${b} to its parent, because: ${a}`);this.childBlock=c;this.childState=d}},RealChildOfShadow$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a){super(\"Encountered a real block which is defined as a child of a shadow\\nblock. It is an invariant of Blockly that shadow blocks only have shadow\\nchildren\");this.state=a}},UnregisteredIcon$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,\nb,c){super(`Cannot add an icon of type '${a}' to the block `+`${b.toDevString()}, because there is no icon registered with `+`type '${a}'. Make sure that all of your icons have been `+\"registered.\");this.block=b;this.state=c}},module$build$src$core$serialization$exceptions={};module$build$src$core$serialization$exceptions.BadConnectionCheck=BadConnectionCheck$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.DeserializationError=DeserializationError$$module$build$src$core$serialization$exceptions;\nmodule$build$src$core$serialization$exceptions.MissingBlockType=MissingBlockType$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.MissingConnection=MissingConnection$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.RealChildOfShadow=RealChildOfShadow$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.UnregisteredIcon=UnregisteredIcon$$module$build$src$core$serialization$exceptions;var saveBlock$$module$build$src$core$serialization$blocks=save$$module$build$src$core$serialization$blocks,BlockSerializer$$module$build$src$core$serialization$blocks=class{constructor(){this.priority=BLOCKS$$module$build$src$core$serialization$priorities}save(a){const b=[];for(const c of a.getTopBlocks(!1))(a=save$$module$build$src$core$serialization$blocks(c,{addCoordinates:!0,doFullSerialization:!1}))&&b.push(a);return b.length?{languageVersion:0,blocks:b}:null}load(a,b){a=a.blocks;for(const c of a)append$$module$build$src$core$serialization$blocks(c,\nb,{recordUndo:getRecordUndo$$module$build$src$core$events$utils()})}clear(a){for(const b of a.getTopBlocks(!1))b.dispose(!1)}};register$$module$build$src$core$serialization$registry(\"blocks\",new BlockSerializer$$module$build$src$core$serialization$blocks);var module$build$src$core$serialization$blocks={};module$build$src$core$serialization$blocks.BlockSerializer=BlockSerializer$$module$build$src$core$serialization$blocks;module$build$src$core$serialization$blocks.append=append$$module$build$src$core$serialization$blocks;\nmodule$build$src$core$serialization$blocks.appendInternal=appendInternal$$module$build$src$core$serialization$blocks;module$build$src$core$serialization$blocks.save=save$$module$build$src$core$serialization$blocks;var IconType$$module$build$src$core$icons$icon_types=class{constructor(a){this.name=a}toString(){return this.name}equals(a){return this.name===a.toString()}};IconType$$module$build$src$core$icons$icon_types.MUTATOR=new IconType$$module$build$src$core$icons$icon_types(\"mutator\");IconType$$module$build$src$core$icons$icon_types.WARNING=new IconType$$module$build$src$core$icons$icon_types(\"warning\");IconType$$module$build$src$core$icons$icon_types.COMMENT=new IconType$$module$build$src$core$icons$icon_types(\"comment\");\nvar module$build$src$core$icons$icon_types={};module$build$src$core$icons$icon_types.IconType=IconType$$module$build$src$core$icons$icon_types;var module$build$src$core$interfaces$i_has_bubble={};module$build$src$core$interfaces$i_has_bubble.hasBubble=hasBubble$$module$build$src$core$interfaces$i_has_bubble;var BlockBase$$module$build$src$core$events$events_block_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.isBlank=!a;a&&(this.blockId=a.id,this.workspaceId=a.workspace.id)}toJson(){const a=super.toJson();if(!this.blockId)throw Error(\"The block ID is undefined. Either pass a block to the constructor, or call fromJson\");a.blockId=this.blockId;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new BlockBase$$module$build$src$core$events$events_block_base);\nb.blockId=a.blockId;return b}},module$build$src$core$events$events_block_base={};module$build$src$core$events$events_block_base.BlockBase=BlockBase$$module$build$src$core$events$events_block_base;var BlockChange$$module$build$src$core$events$events_block_change=class extends BlockBase$$module$build$src$core$events$events_block_base{constructor(a,b,c,d,e){super(a);this.type=EventType$$module$build$src$core$events$type.BLOCK_CHANGE;a&&(this.element=b,this.name=c||void 0,this.oldValue=d,this.newValue=e)}toJson(){const a=super.toJson();if(!this.element)throw Error(\"The changed element is undefined. Either pass an element to the constructor, or call fromJson\");a.element=this.element;a.name=this.name;\na.oldValue=this.oldValue;a.newValue=this.newValue;this.disabledReason&&(a.disabledReason=this.disabledReason);return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new BlockChange$$module$build$src$core$events$events_block_change);b.element=a.element;b.name=a.name;b.oldValue=a.oldValue;b.newValue=a.newValue;a.disabledReason!==void 0&&(b.disabledReason=a.disabledReason);return b}setDisabledReason(a){if(this.element!==\"disabled\")throw Error('Cannot set the disabled reason for a BlockChange event if the element is not \"disabled\".');\nthis.disabledReason=a}isNull(){return this.oldValue===this.newValue}run(a){var b=this.getEventWorkspace_();if(!this.blockId)throw Error(\"The block ID is undefined. Either pass a block to the constructor, or call fromJson\");b=b.getBlockById(this.blockId);if(!b)throw Error(\"The associated block is undefined. Either pass a block to the constructor, or call fromJson\");const c=b.getIcon(IconType$$module$build$src$core$icons$icon_types.MUTATOR);c&&hasBubble$$module$build$src$core$interfaces$i_has_bubble(c)&&\nc.bubbleIsVisible()&&c.setBubbleVisible(!1);a=a?this.newValue:this.oldValue;switch(this.element){case \"field\":(b=b.getField(this.name))?b.setValue(a):console.warn(\"Can't set non-existent field: \"+this.name);break;case \"comment\":b.setCommentText(a||null);break;case \"collapsed\":b.setCollapsed(!!a);break;case \"disabled\":var d;b.setDisabledReason(!!a,(d=this.disabledReason)!=null?d:MANUALLY_DISABLED$$module$build$src$core$constants);break;case \"inline\":b.setInputsInline(!!a);break;case \"mutation\":d=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(b);\nb.loadExtraState?b.loadExtraState(JSON.parse(a||\"{}\")):b.domToMutation&&b.domToMutation($.textToDom$$module$build$src$core$utils$xml(a||\"\"));fire$$module$build$src$core$events$utils(new BlockChange$$module$build$src$core$events$events_block_change(b,\"mutation\",null,d,a));break;default:console.warn(\"Unknown change type: \"+this.element)}}static getExtraBlockState_(a){return a.saveExtraState?(a=a.saveExtraState(!0))?JSON.stringify(a):\"\":a.mutationToDom?(a=a.mutationToDom())?domToText$$module$build$src$core$xml(a):\n\"\":\"\"}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.BLOCK_CHANGE,BlockChange$$module$build$src$core$events$events_block_change);var module$build$src$core$events$events_block_change={};module$build$src$core$events$events_block_change.BlockChange=BlockChange$$module$build$src$core$events$events_block_change;var module$build$src$core$utils$math={};module$build$src$core$utils$math.clamp=clamp$$module$build$src$core$utils$math;module$build$src$core$utils$math.toDegrees=toDegrees$$module$build$src$core$utils$math;module$build$src$core$utils$math.toRadians=toRadians$$module$build$src$core$utils$math;var ARROW_SIZE$$module$build$src$core$dropdowndiv=16,BORDER_SIZE$$module$build$src$core$dropdowndiv=1,ARROW_HORIZONTAL_PADDING$$module$build$src$core$dropdowndiv=12,PADDING_Y$$module$build$src$core$dropdowndiv=16,ANIMATION_TIME$$module$build$src$core$dropdowndiv=.25,animateOutTimer$$module$build$src$core$dropdowndiv=null,onHide$$module$build$src$core$dropdowndiv=null,renderedClassName$$module$build$src$core$dropdowndiv=\"\",themeClassName$$module$build$src$core$dropdowndiv=\"\",div$$module$build$src$core$dropdowndiv,\ncontent$$module$build$src$core$dropdowndiv,arrow$$module$build$src$core$dropdowndiv,boundsElement$$module$build$src$core$dropdowndiv=null,owner$$module$build$src$core$dropdowndiv=null,positionToField$$module$build$src$core$dropdowndiv=null,returnEphemeralFocus$$module$build$src$core$dropdowndiv=null,keydownListener$$module$build$src$core$dropdowndiv=null,internal$$module$build$src$core$dropdowndiv={getBoundsInfo:function(){const a=getPageOffset$$module$build$src$core$utils$style(boundsElement$$module$build$src$core$dropdowndiv),\nb=getSize$$module$build$src$core$utils$style(boundsElement$$module$build$src$core$dropdowndiv);return{left:a.x,right:a.x+b.width,top:a.y,bottom:a.y+b.height,width:b.width,height:b.height}},getPositionMetrics:function(a,b,c,d){const e=internal$$module$build$src$core$dropdowndiv.getBoundsInfo(),f=getSize$$module$build$src$core$utils$style(div$$module$build$src$core$dropdowndiv);return b+f.heighte.top?getPositionAboveMetrics$$module$build$src$core$dropdowndiv(c,\nd,e,f):b+f.heightdocument.documentElement.clientTop?getPositionAboveMetrics$$module$build$src$core$dropdowndiv(c,d,e,f):getPositionTopOfPageMetrics$$module$build$src$core$dropdowndiv(a,e,f)}},TEST_ONLY$$module$build$src$core$dropdowndiv=internal$$module$build$src$core$dropdowndiv,module$build$src$core$dropdowndiv={ANIMATION_TIME:ANIMATION_TIME$$module$build$src$core$dropdowndiv,ARROW_HORIZONTAL_PADDING:ARROW_HORIZONTAL_PADDING$$module$build$src$core$dropdowndiv,\nARROW_SIZE:ARROW_SIZE$$module$build$src$core$dropdowndiv,BORDER_SIZE:BORDER_SIZE$$module$build$src$core$dropdowndiv,PADDING_Y:PADDING_Y$$module$build$src$core$dropdowndiv,TEST_ONLY:internal$$module$build$src$core$dropdowndiv};module$build$src$core$dropdowndiv.clearContent=clearContent$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.createDom=createDom$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.getContentDiv=getContentDiv$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.getOwner=getOwner$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.getPositionX=getPositionX$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hide=hide$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hideIfOwner=hideIfOwner$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hideWithoutAnimation=hideWithoutAnimation$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.isVisible=isVisible$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.repositionForWindowResize=repositionForWindowResize$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.setBoundsElement=setBoundsElement$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.setColour=setColour$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.show=show$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.showPositionedByBlock=showPositionedByBlock$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.showPositionedByField=showPositionedByField$$module$build$src$core$dropdowndiv;var module$build$src$core$utils$string={};module$build$src$core$utils$string.commonWordPrefix=commonWordPrefix$$module$build$src$core$utils$string;module$build$src$core$utils$string.commonWordSuffix=commonWordSuffix$$module$build$src$core$utils$string;module$build$src$core$utils$string.isNumber=$.isNumber$$module$build$src$core$utils$string;module$build$src$core$utils$string.shortestStringLength=shortestStringLength$$module$build$src$core$utils$string;module$build$src$core$utils$string.wrap=$.wrap$$module$build$src$core$utils$string;var customTooltip$$module$build$src$core$tooltip=void 0,visible$$module$build$src$core$tooltip=!1,blocked$$module$build$src$core$tooltip=!1,LIMIT$$module$build$src$core$tooltip=50,mouseOutPid$$module$build$src$core$tooltip=0,showPid$$module$build$src$core$tooltip=0,lastX$$module$build$src$core$tooltip=0,lastY$$module$build$src$core$tooltip=0,element$$module$build$src$core$tooltip=null,poisonedElement$$module$build$src$core$tooltip=null,OFFSET_X$$module$build$src$core$tooltip=0,OFFSET_Y$$module$build$src$core$tooltip=\n10,RADIUS_OK$$module$build$src$core$tooltip=10,HOVER_MS$$module$build$src$core$tooltip=750,MARGINS$$module$build$src$core$tooltip=5,containerDiv$$module$build$src$core$tooltip=null,module$build$src$core$tooltip={HOVER_MS:HOVER_MS$$module$build$src$core$tooltip,LIMIT:LIMIT$$module$build$src$core$tooltip,MARGINS:MARGINS$$module$build$src$core$tooltip,OFFSET_X:OFFSET_X$$module$build$src$core$tooltip,OFFSET_Y:OFFSET_Y$$module$build$src$core$tooltip,RADIUS_OK:RADIUS_OK$$module$build$src$core$tooltip};\nmodule$build$src$core$tooltip.bindMouseEvents=bindMouseEvents$$module$build$src$core$tooltip;module$build$src$core$tooltip.block=block$$module$build$src$core$tooltip;module$build$src$core$tooltip.createDom=createDom$$module$build$src$core$tooltip;module$build$src$core$tooltip.dispose=dispose$$module$build$src$core$tooltip;module$build$src$core$tooltip.getCustomTooltip=getCustomTooltip$$module$build$src$core$tooltip;module$build$src$core$tooltip.getDiv=getDiv$$module$build$src$core$tooltip;\nmodule$build$src$core$tooltip.getTooltipOfObject=getTooltipOfObject$$module$build$src$core$tooltip;module$build$src$core$tooltip.hide=hide$$module$build$src$core$tooltip;module$build$src$core$tooltip.isVisible=isVisible$$module$build$src$core$tooltip;module$build$src$core$tooltip.setCustomTooltip=setCustomTooltip$$module$build$src$core$tooltip;module$build$src$core$tooltip.unbindMouseEvents=unbindMouseEvents$$module$build$src$core$tooltip;module$build$src$core$tooltip.unblock=unblock$$module$build$src$core$tooltip;var hsvSaturation$$module$build$src$core$utils$colour=.45,hsvValue$$module$build$src$core$utils$colour=.65,names$$module$build$src$core$utils$colour={aqua:\"#00ffff\",black:\"#000000\",blue:\"#0000ff\",fuchsia:\"#ff00ff\",gray:\"#808080\",green:\"#008000\",lime:\"#00ff00\",maroon:\"#800000\",navy:\"#000080\",olive:\"#808000\",purple:\"#800080\",red:\"#ff0000\",silver:\"#c0c0c0\",teal:\"#008080\",white:\"#ffffff\",yellow:\"#ffff00\"},module$build$src$core$utils$colour={};module$build$src$core$utils$colour.blend=blend$$module$build$src$core$utils$colour;\nmodule$build$src$core$utils$colour.getHsvSaturation=getHsvSaturation$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.getHsvValue=getHsvValue$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hexToRgb=hexToRgb$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hsvToHex=hsvToHex$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hueToHex=hueToHex$$module$build$src$core$utils$colour;\nmodule$build$src$core$utils$colour.names=names$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.parse=parse$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.rgbToHex=rgbToHex$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.setHsvSaturation=setHsvSaturation$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.setHsvValue=setHsvValue$$module$build$src$core$utils$colour;var module$build$src$core$utils$parsing={};module$build$src$core$utils$parsing.checkMessageReferences=checkMessageReferences$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.parseBlockColour=parseBlockColour$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.replaceMessageReferences=replaceMessageReferences$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.tokenizeInterpolation=tokenizeInterpolation$$module$build$src$core$utils$parsing;var Field$$module$build$src$core$field=class{get size_(){return this.size}set size_(a){this.size=a}constructor(a,b,c){this.DEFAULT_VALUE=null;this.name=void 0;this.tooltip=this.validator_=null;this.size=new Size$$module$build$src$core$utils$size(0,0);this.constants_=this.mouseDownWrapper=this.textContent_=this.textElement_=this.borderRect_=this.fieldGroup_=null;this.disposed=!1;this.maxDisplayLength=50;this.sourceBlock_=null;this.enabled_=this.visible_=this.isDirty_=!0;this.suffixField=this.prefixField=\nthis.clickTarget_=null;this.EDITABLE=!0;this.SERIALIZABLE=!1;this.id_=null;this.value_=\"DEFAULT_VALUE\"in new.target.prototype?new.target.prototype.DEFAULT_VALUE:this.DEFAULT_VALUE;this.size_=new Size$$module$build$src$core$utils$size(0,0);a!==Field$$module$build$src$core$field.SKIP_SETUP&&(c&&this.configure_(c),this.setValue(a),b&&this.setValidator(b))}configure_(a){a.tooltip&&this.setTooltip(replaceMessageReferences$$module$build$src$core$utils$parsing(a.tooltip))}setSourceBlock(a){if(this.sourceBlock_)throw Error(\"Field already bound to a block\");\nthis.sourceBlock_=a;if(a.id.includes(\"_field\"))throw Error(\"Field ID indicator is contained in block ID. This may cause \"+`problems with focus: ${a.id}.`);this.id_=`${a.id}_field_${getNextUniqueId$$module$build$src$core$utils$idgenerator()}`}getConstants(){!this.constants_&&this.sourceBlock_&&!this.sourceBlock_.isDeadOrDying()&&this.sourceBlock_.workspace.rendered&&(this.constants_=this.sourceBlock_.workspace.getRenderer().getConstants());return this.constants_}getSourceBlock(){return this.sourceBlock_}init(){if(!this.fieldGroup_){var a=\nthis.id_;if(!a)throw Error(\"Expected ID to be defined prior to init.\");this.fieldGroup_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{id:a});this.isVisible()||(this.fieldGroup_.style.display=\"none\");this.sourceBlock_.getSvgRoot().appendChild(this.fieldGroup_);this.initView();this.updateEditable();this.setTooltip(this.tooltip);this.bindEvents_();this.initModel();this.applyColour()}}initView(){this.createBorderRect_();this.createTextElement_();this.fieldGroup_&&\naddClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyField\")}initModel(){}isFullBlockField(){return!this.borderRect_}createBorderRect_(){this.borderRect_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{rx:this.getConstants().FIELD_BORDER_RECT_RADIUS,ry:this.getConstants().FIELD_BORDER_RECT_RADIUS,x:0,y:0,height:this.size_.height,width:this.size_.width,\"class\":\"blocklyFieldRect\"},this.fieldGroup_)}createTextElement_(){this.textElement_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,\n{\"class\":\"blocklyText blocklyFieldText\"},this.fieldGroup_);this.getConstants().FIELD_TEXT_BASELINE_CENTER&&this.textElement_.setAttribute(\"dominant-baseline\",\"central\");this.textContent_=document.createTextNode(\"\");this.textElement_.appendChild(this.textContent_)}bindEvents_(){const a=this.getClickTarget_();if(!a)throw Error(\"A click target has not been set.\");bindMouseEvents$$module$build$src$core$tooltip(a);this.mouseDownWrapper=conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",\nthis,this.onMouseDown_)}fromXml(a){this.setValue(a.textContent)}toXml(a){a.textContent=this.getValue();return a}saveState(a){a=this.saveLegacyState(Field$$module$build$src$core$field);return a!==null?a:this.getValue()}loadState(a){this.loadLegacyState(Field$$module$build$src$core$field,a)||this.setValue(a)}saveLegacyState(a){return a.prototype.saveState===this.saveState&&a.prototype.toXml!==this.toXml?(a=$.createElement$$module$build$src$core$utils$xml(\"field\"),a.setAttribute(\"name\",this.name||\"\"),\ndomToText$$module$build$src$core$utils$xml(this.toXml(a)).replace(' xmlns=\"https://developers.google.com/blockly/xml\"',\"\")):null}loadLegacyState(a,b){return a.prototype.loadState===this.loadState&&a.prototype.fromXml!==this.fromXml?(this.fromXml($.textToDom$$module$build$src$core$utils$xml(b)),!0):!1}dispose(){hideIfOwner$$module$build$src$core$dropdowndiv(this);hideIfOwner$$module$build$src$core$widgetdiv(this);let a;((a=this.getSourceBlock())==null?0:a.isDeadOrDying())||removeNode$$module$build$src$core$utils$dom(this.fieldGroup_);\nthis.disposed=!0}updateEditable(){const a=this.fieldGroup_,b=this.getSourceBlock();this.EDITABLE&&a&&b&&(this.enabled_&&b.isEditable()?(addClass$$module$build$src$core$utils$dom(a,\"blocklyEditableField\"),removeClass$$module$build$src$core$utils$dom(a,\"blocklyNonEditableField\")):(addClass$$module$build$src$core$utils$dom(a,\"blocklyNonEditableField\"),removeClass$$module$build$src$core$utils$dom(a,\"blocklyEditableField\")))}setEnabled(a){this.enabled_=a;this.updateEditable()}isEnabled(){return this.enabled_}isClickable(){return this.enabled_&&\n!!this.sourceBlock_&&this.sourceBlock_.isEditable()&&this.showEditor_!==Field$$module$build$src$core$field.prototype.showEditor_}isClickableInFlyout(a){return!a}isCurrentlyEditable(){return this.enabled_&&this.EDITABLE&&!!this.sourceBlock_&&this.sourceBlock_.isEditable()}isSerializable(){let a=!1;this.name&&(this.SERIALIZABLE?a=!0:this.EDITABLE&&(console.warn(\"Detected an editable field that was not serializable. Please define SERIALIZABLE property as true on all editable custom fields. Proceeding with serialization.\"),\na=!0));return a}isVisible(){return this.visible_}setVisible(a){if(this.visible_!==a){this.visible_=a;var b=this.fieldGroup_;b&&(b.style.display=a?\"block\":\"none\")}}setValidator(a){this.validator_=a}getValidator(){return this.validator_}getSvgRoot(){return this.fieldGroup_}getBorderRect(){if(!this.borderRect_)throw Error(`The border rectangle is ${this.borderRect_}.`);return this.borderRect_}getTextElement(){if(!this.textElement_)throw Error(`The text element is ${this.textElement_}.`);return this.textElement_}getTextContent(){if(!this.textContent_)throw Error(`The text content is ${this.textContent_}.`);\nreturn this.textContent_}applyColour(){}render_(){this.textContent_&&(this.textContent_.nodeValue=this.getDisplayText_());this.updateSize_()}showEditor(a){this.isClickable()&&this.showEditor_(a)}showEditor_(a){}repositionForWindowResize(){return!1}updateSize_(a){const b=this.getConstants();a=a!==void 0?a:this.isFullBlockField()?0:this.getConstants().FIELD_BORDER_RECT_X_PADDING;let c=a*2,d=b.FIELD_TEXT_HEIGHT,e=0;this.textElement_&&(e=getTextWidth$$module$build$src$core$utils$dom(this.textElement_),\nc+=e);this.isFullBlockField()||(d=Math.max(d,b.FIELD_BORDER_RECT_HEIGHT));this.size_=new Size$$module$build$src$core$utils$size(c,d);this.positionTextElement_(a,e);this.positionBorderRect_()}positionTextElement_(a,b){if(this.textElement_){var c=this.getConstants(),d=this.size_.height/2,e;this.textElement_.setAttribute(\"x\",String(((e=this.getSourceBlock())==null?0:e.RTL)?this.size_.width-b-a:a));this.textElement_.setAttribute(\"y\",String(c.FIELD_TEXT_BASELINE_CENTER?d:d-c.FIELD_TEXT_HEIGHT/2+c.FIELD_TEXT_BASELINE))}}positionBorderRect_(){this.borderRect_&&\n(this.borderRect_.setAttribute(\"width\",String(this.size_.width)),this.borderRect_.setAttribute(\"height\",String(this.size_.height)),this.borderRect_.setAttribute(\"rx\",String(this.getConstants().FIELD_BORDER_RECT_RADIUS)),this.borderRect_.setAttribute(\"ry\",String(this.getConstants().FIELD_BORDER_RECT_RADIUS)))}getSize(){if(!this.isVisible())return new Size$$module$build$src$core$utils$size(0,0);this.isDirty_&&(this.render_(),this.isDirty_=!1);return this.size_}getScaledBBox(){let a;var b=this.getSourceBlock();\nif(!b)throw new UnattachedFieldError$$module$build$src$core$field;if(this.isFullBlockField()){var c=this.sourceBlock_.getHeightWidth();const d=b.workspace.scale;a=this.getAbsoluteXY_();b=(c.width+1)*d;c=(c.height+1)*d;GECKO$$module$build$src$core$utils$useragent?(a.x+=1.5*d,a.y+=1.5*d):(a.x-=.5*d,a.y-=.5*d)}else c=this.borderRect_.getBoundingClientRect(),a=getPageOffset$$module$build$src$core$utils$style(this.borderRect_),b=c.width,c=c.height;return new Rect$$module$build$src$core$utils$rect(a.y,\na.y+c,a.x,a.x+b)}onLocationChange(a){}getDisplayText_(){let a=this.getText();a.length>this.maxDisplayLength&&(a=a.substring(0,this.maxDisplayLength-2)+\"\\u2026\");a=a.replace(/\\s/g,Field$$module$build$src$core$field.NBSP);this.sourceBlock_&&this.sourceBlock_.RTL&&(a+=\"\\u200f\");return a}getText(){const a=this.getText_();return a!==null?String(a):String(this.getValue())}getText_(){return null}markDirty(){this.isDirty_=!0;this.constants_=null}forceRerender(){this.isDirty_=!0;this.sourceBlock_&&this.sourceBlock_.rendered&&\nthis.sourceBlock_.queueRender()}setValue(a,b=!0){if(a!==null){var c=$.getGroup$$module$build$src$core$events$utils();c||$.setGroup$$module$build$src$core$events$utils(!0);try{const k=this.doClassValidation_(a),l=this.processValidation(a,k,b);if(!(l instanceof Error)){var d,e=(d=this.getValidator())==null?void 0:d.call(this,l),f=this.processValidation(l,e,b);if(!(f instanceof Error)){var g=this.sourceBlock_;if(!g||!g.disposed){var h=this.getValue();h===f?this.doValueUpdate_(f):(this.doValueUpdate_(f),\nb&&g&&isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(g,\"field\",this.name||null,h,f)),this.isDirty_&&this.forceRerender())}}}}finally{$.setGroup$$module$build$src$core$events$utils(c)}}}processValidation(a,b,c){return b===null?(this.doValueInvalid_(a,c),this.isDirty_&&this.forceRerender(),Error()):b===void 0?a:b}getValue(){return this.value_}doClassValidation_(a){return a===\nnull||a===void 0?null:a}doValueUpdate_(a){this.value_=a;this.isDirty_=!0}doValueInvalid_(a,b){}onMouseDown_(a){this.sourceBlock_&&!this.sourceBlock_.isDeadOrDying()&&(a=this.sourceBlock_.workspace.getGesture(a))&&a.setStartField(this)}setTooltip(a){a||a===\"\"||(a=this.sourceBlock_);const b=this.getClickTarget_();b?b.tooltip=a:this.tooltip=a}getTooltip(){const a=this.getClickTarget_();return a?getTooltipOfObject$$module$build$src$core$tooltip(a):getTooltipOfObject$$module$build$src$core$tooltip({tooltip:this.tooltip})}getClickTarget_(){return this.clickTarget_||\nthis.getSvgRoot()}getAbsoluteXY_(){return getPageOffset$$module$build$src$core$utils$style(this.getClickTarget_())}referencesVariables(){return!1}refreshVariableName(){}getParentInput(){let a=null;const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;const c=b.inputList;for(let d=0;d{d.stopPropagation();$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this);clearTouchIdentifier$$module$build$src$core$touch()});\nconditionalBind$$module$build$src$core$browser_events(this.textArea,\"wheel\",this,d=>{d.stopPropagation()});conditionalBind$$module$build$src$core$browser_events(this.textArea,\"keydown\",this,this.handleKeyDown)}getDom(){return this.foreignObject}getText(){return this.text}setText(a){this.textArea.value=a;this.onTextChange()}onTextChange(){const a=this.text;this.text=this.textArea.value;for(let b=this.textChangeListeners.length-1;b>=0;b--)this.textChangeListeners[b](a,this.text)}handleKeyDown(a){if(a.key===\n\"Escape\"||a.key===\"Enter\"&&(a.ctrlKey||a.metaKey)){if(this.onFinishEditing)this.onFinishEditing();a.stopPropagation()}}addTextChangeListener(a){this.textChangeListeners.push(a)}removeTextChangeListener(a){this.textChangeListeners.splice(this.textChangeListeners.indexOf(a),1)}setPlaceholderText(a){this.textArea.placeholder=a}setEditable(a){a?this.textArea.removeAttribute(\"readonly\"):this.textArea.setAttribute(\"readonly\",\"true\")}updateSize(a,b){this.foreignObject.setAttribute(\"height\",`${a.height-b.height}`);\nthis.foreignObject.setAttribute(\"width\",`${a.width}`);this.foreignObject.setAttribute(\"y\",`${b.height}`);this.workspace.RTL&&this.foreignObject.setAttribute(\"x\",`${-a.width}`)}getFocusableElement(){return this.textArea}getFocusableTree(){return this.workspace}onNodeFocus(){const a=Rect$$module$build$src$core$utils$rect.from(this.foreignObject.getBoundingClientRect());this.workspace.scrollBoundsIntoView(Rect$$module$build$src$core$utils$rect.createFromPoint(screenToWsCoordinates$$module$build$src$core$utils$svg_math(this.workspace,\na.getOrigin()),a.getWidth(),a.getHeight()))}onNodeBlur(){}canBeFocused(){return this.id?!0:!1}},module$build$src$core$comments$comment_editor={COMMENT_EDITOR_FOCUS_IDENTIFIER:COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor};module$build$src$core$comments$comment_editor.CommentEditor=CommentEditor$$module$build$src$core$comments$comment_editor;var COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button=\"_delete_bar_button\",DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button=class extends CommentBarButton$$module$build$src$core$comments$comment_bar_button{constructor(a,b,c,d){super(a,b,c,d);this.id=a;this.workspace=b;this.container=c;this.commentView=d;this.icon=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{\"class\":\"blocklyDeleteIcon\",\nhref:`${this.workspace.options.pathToMedia}delete-icon.svg`,id:`${this.id}${COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button}`},c);this.bindId=conditionalBind$$module$build$src$core$browser_events(this.icon,\"pointerdown\",this,this.performAction.bind(this))}dispose(){unbind$$module$build$src$core$browser_events(this.bindId)}reposition(){const a=this.getMargin();this.icon.setAttribute(\"x\",\"0\");const b=this.container.getBBox();this.icon.setAttribute(\"y\",\n`${a}`);this.icon.setAttribute(\"x\",`${b.width-this.getSize(!0).getWidth()}`)}performAction(a){clearTouchIdentifier$$module$build$src$core$touch();a&&a instanceof PointerEvent&&isRightButton$$module$build$src$core$browser_events(a)?a.stopPropagation():(this.getCommentView().dispose(),a==null||a.stopPropagation(),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.workspace))}},module$build$src$core$comments$delete_comment_bar_button={COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER:COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button};\nmodule$build$src$core$comments$delete_comment_bar_button.DeleteCommentBarButton=DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button;var CommentView$$module$build$src$core$comments$comment_view=class{constructor(a,b){this.workspace=a;this.commentId=b;this.collapsed=!1;this.editable=!0;this.location=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.sizeChangeListeners=[];this.disposeListeners=[];this.collapseChangeListeners=[];this.resizePointerMoveListener=this.resizePointerUpListener=null;this.disposed=this.disposing=!1;this.svgRoot=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,\n{\"class\":\"blocklyComment blocklyEditable blocklyDraggable\"});this.highlightRect=this.createHighlightRect(this.svgRoot);({topBarGroup:this.topBarGroup,topBarBackground:this.topBarBackground,deleteButton:this.deleteButton,foldoutButton:this.foldoutButton,textPreview:this.textPreview,textPreviewNode:this.textPreviewNode}=this.createTopBar(this.svgRoot));this.commentEditor=this.createTextArea();this.resizeHandle=this.createResizeHandle(this.svgRoot,a);let c;(c=a.getLayerManager())==null||c.append(this,\nBLOCK$$module$build$src$core$layers);this.size=CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize;this.setSizeWithoutFiringEvents(this.size);this.moveTo(new Coordinate$$module$build$src$core$utils$coordinate(0,0))}createHighlightRect(a){return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyCommentHighlight\"},a)}createTopBar(a){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,\n{\"class\":\"blocklyCommentTopbar\"},a);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyCommentTopbarBackground\"},a),c=new DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button(this.commentId,this.workspace,a,this),d=new CollapseCommentBarButton$$module$build$src$core$comments$collapse_comment_bar_button(this.commentId,this.workspace,a,this);this.addDisposeListener(()=>{c.dispose();d.dispose()});const e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,\n{\"class\":\"blocklyCommentPreview blocklyCommentText blocklyText\"},a),f=document.createTextNode(\"\");e.appendChild(f);return{topBarGroup:a,topBarBackground:b,deleteButton:c,foldoutButton:d,textPreview:e,textPreviewNode:f}}createTextArea(){const a=new CommentEditor$$module$build$src$core$comments$comment_editor(this.workspace,this.commentId,()=>this.svgRoot.focus());this.svgRoot.appendChild(a.getDom());a.addTextChangeListener((b,c)=>{this.updateTextPreview(c);this.setSize(this.size)});return a}getEditorFocusableNode(){return this.commentEditor}createResizeHandle(a,\nb){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{\"class\":\"blocklyResizeHandle\",href:`${b.options.pathToMedia}resize-handle.svg`},a);conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onResizePointerDown);return a}getSvgRoot(){return this.svgRoot}getSize(){return this.collapsed?this.topBarBackground.getBBox():this.size}setSizeWithoutFiringEvents(a){const b=this.topBarBackground.getBBox(),c=this.textPreview.getBBox(),d=this.resizeHandle.getBBox();\nthis.size=a=Size$$module$build$src$core$utils$size.max(a,this.calcMinSize(b));this.svgRoot.setAttribute(\"height\",`${a.height}`);this.svgRoot.setAttribute(\"width\",`${a.width}`);this.updateHighlightRect(a);this.updateTopBarSize(a);this.commentEditor.updateSize(a,b);this.deleteButton.reposition();this.foldoutButton.reposition();this.updateTextPreviewSize(a,b,c);this.updateResizeHandlePosition(a,d)}setSize(a){const b=this.preResizeSize||this.size;this.setSizeWithoutFiringEvents(a);this.onSizeChange(b,\nthis.size)}calcMinSize(a){var b;this.updateTextPreview((b=this.commentEditor.getText())!=null?b:\"\");let c=b=getTextWidth$$module$build$src$core$utils$dom(this.textPreview);this.foldoutButton.isVisible()?c+=this.foldoutButton.getSize(!0).getWidth():b&&(c+=4);this.deleteButton.isVisible()?c+=this.deleteButton.getSize(!0).getWidth():b&&(c+=4);return new Size$$module$build$src$core$utils$size(c,a.height+20)}updateHighlightRect(a){this.highlightRect.setAttribute(\"height\",`${a.height}`);this.highlightRect.setAttribute(\"width\",\n`${a.width}`);this.workspace.RTL&&this.highlightRect.setAttribute(\"x\",`${-a.width}`)}updateTopBarSize(a){this.topBarBackground.setAttribute(\"width\",`${a.width}`)}updateTextPreviewSize(a,b,c){b=(b.height-c.height)/2;const d=this.foldoutButton.getSize(!0),e=this.deleteButton.getSize(!0);a=a.width-d.getWidth()-e.getWidth();this.textPreview.setAttribute(\"x\",`${(this.workspace.RTL?-1:1)*d.getWidth()}`);this.textPreview.setAttribute(\"y\",`${b+c.height/2}`);this.textPreview.setAttribute(\"width\",`${a}`)}updateResizeHandlePosition(a,\nb){this.resizeHandle.setAttribute(\"y\",`${a.height-b.height}`);this.resizeHandle.setAttribute(\"x\",`${a.width-b.width}`)}onSizeChange(a,b){for(let c=this.sizeChangeListeners.length-1;c>=0;c--)this.sizeChangeListeners[c](a,b)}addSizeChangeListener(a){this.sizeChangeListeners.push(a)}removeSizeChangeListener(a){this.sizeChangeListeners.splice(this.sizeChangeListeners.indexOf(a),1)}onResizePointerDown(a){this.isEditable()&&(this.bringToFront(),isRightButton$$module$build$src$core$browser_events(a)||(this.preResizeSize=\nthis.getSize(),start$$module$build$src$core$utils$drag(this.workspace,a,new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.getSize().width:this.getSize().width,this.getSize().height)),this.resizePointerUpListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onResizePointerUp),this.resizePointerMoveListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",this,this.onResizePointerMove),this.workspace.hideChaff()),\na.stopPropagation())}onResizePointerUp(a){clearTouchIdentifier$$module$build$src$core$touch();this.resizePointerUpListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerUpListener),this.resizePointerUpListener=null);this.resizePointerMoveListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerMoveListener),this.resizePointerMoveListener=null);this.setSize(this.size);this.preResizeSize=void 0}onResizePointerMove(a){a=move$$module$build$src$core$utils$drag(this.workspace,\na);this.setSizeWithoutFiringEvents(new Size$$module$build$src$core$utils$size(this.workspace.RTL?-a.x:a.x,a.y))}isCollapsed(){return this.collapsed}setCollapsed(a){(this.collapsed=a)?addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCollapsed\"):removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCollapsed\");this.setSizeWithoutFiringEvents(this.size);this.onCollapse()}onCollapse(){for(let a=this.collapseChangeListeners.length-1;a>=0;a--)this.collapseChangeListeners[a](this.collapsed)}addOnCollapseListener(a){this.collapseChangeListeners.push(a)}removeOnCollapseListener(a){this.collapseChangeListeners.splice(this.collapseChangeListeners.indexOf(a),\n1)}isEditable(){return this.editable}setEditable(a){(this.editable=a)?(addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyEditable\"),removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyReadonly\")):(removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyEditable\"),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyReadonly\"));this.commentEditor.setEditable(a)}getRelativeToSurfaceXY(){return this.location}moveTo(a){this.location=a;this.svgRoot.setAttribute(\"transform\",\n`translate(${a.x}, ${a.y})`)}getText(){return this.commentEditor.getText()}setText(a){this.commentEditor.setText(a)}setPlaceholderText(a){this.commentEditor.setPlaceholderText(a)}addTextChangeListener(a){this.commentEditor.addTextChangeListener(a)}removeTextChangeListener(a){this.commentEditor.removeTextChangeListener(a)}updateTextPreview(a){this.textPreviewNode.textContent=this.truncateText(a)}truncateText(a){return a.length>=12?`${a.substring(0,9)}...`:a}bringToFront(){const a=this.svgRoot.parentNode,\nb=a.childNodes;b[b.length-1]!==this.svgRoot&&a.appendChild(this.svgRoot)}onDeleteDown(a){clearTouchIdentifier$$module$build$src$core$touch();isRightButton$$module$build$src$core$browser_events(a)||this.dispose();a.stopPropagation()}dispose(){this.disposing=!0;removeNode$$module$build$src$core$utils$dom(this.svgRoot);for(let a=this.disposeListeners.length-1;a>=0;a--)this.disposeListeners[a]();this.disposeListeners.length=0;this.disposed=!0}isDisposed(){return this.disposed}isDeadOrDying(){return this.disposing||\nthis.disposed}addDisposeListener(a){this.disposeListeners.push(a)}removeDisposeListener(a){this.disposeListeners.splice(this.disposeListeners.indexOf(a),1)}getCommentBarButtons(){return[this.foldoutButton,this.deleteButton]}};CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize=new Size$$module$build$src$core$utils$size(120,100);register$$module$build$src$core$css(\"\\n.injectionDiv {\\n --commentFillColour: #FFFCC7;\\n --commentBorderColour: #F2E49B;\\n}\\n\\n.blocklyComment .blocklyTextarea {\\n background-color: var(--commentFillColour);\\n border: 1px solid var(--commentBorderColour);\\n box-sizing: border-box;\\n display: block;\\n outline: 0;\\n padding: 5px;\\n resize: none;\\n width: 100%;\\n height: 100%;\\n}\\n\\n.blocklyReadonly.blocklyComment .blocklyTextarea {\\n cursor: inherit;\\n}\\n\\n.blocklyDeleteIcon {\\n width: 20px;\\n height: 20px;\\n display: none;\\n cursor: pointer;\\n}\\n\\n.blocklyFoldoutIcon {\\n width: 20px;\\n height: 20px;\\n transform-origin: 12px 12px;\\n cursor: pointer;\\n}\\n.blocklyResizeHandle {\\n width: 12px;\\n height: 12px;\\n cursor: se-resize;\\n}\\n.blocklyReadonly.blocklyComment .blocklyResizeHandle {\\n cursor: inherit;\\n}\\n\\n.blocklyCommentTopbarBackground {\\n fill: var(--commentBorderColour);\\n height: 24px;\\n}\\n\\n.blocklyComment .blocklyCommentPreview.blocklyText {\\n fill: #000;\\n dominant-baseline: middle;\\n visibility: hidden;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyCommentPreview {\\n visibility: visible;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyCommentForeignObject,\\n.blocklyCollapsed.blocklyComment .blocklyResizeHandle {\\n display: none;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyFoldoutIcon {\\n transform: rotate(-90deg);\\n}\\n\\n.blocklyRTL .blocklyCommentTopbar {\\n transform: scale(-1, 1);\\n}\\n\\n.blocklyRTL .blocklyCommentForeignObject {\\n direction: rtl;\\n}\\n\\n.blocklyRTL .blocklyCommentPreview {\\n /* Revert the scale and control RTL using direction instead. */\\n transform: scale(-1, 1);\\n direction: rtl;\\n}\\n\\n.blocklyRTL .blocklyResizeHandle {\\n transform: scale(-1, 1);\\n cursor: sw-resize;\\n}\\n\\n.blocklyCommentHighlight {\\n fill: none;\\n}\\n\\n.blocklyCommentText.blocklyActiveFocus {\\n border-color: #fc3;\\n border-width: 2px;\\n}\\n\\n.blocklySelected .blocklyCommentHighlight {\\n stroke: #fc3;\\n stroke-width: 3px;\\n}\\n\\n.blocklyCollapsed.blocklySelected .blocklyCommentHighlight {\\n stroke: none;\\n}\\n\\n.blocklyCollapsed.blocklySelected .blocklyCommentTopbarBackground {\\n stroke: #fc3;\\n stroke-width: 3px;\\n}\\n\");\nvar module$build$src$core$comments$comment_view={};module$build$src$core$comments$comment_view.CommentView=CommentView$$module$build$src$core$comments$comment_view;var WorkspaceComment$$module$build$src$core$comments$workspace_comment=class{constructor(a,b){this.workspace=a;this.text=\"\";this.collapsed=!1;this.deletable=this.movable=this.editable=!0;this.location=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.disposing=this.disposed=!1;this.id=b&&!a.getCommentById(b)?b:genUid$$module$build$src$core$utils$idgenerator();this.size=CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize;a.addTopComment(this);this.fireCreateEvent()}fireCreateEvent(){isEnabled$$module$build$src$core$events$utils()&&\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CREATE))(this))}fireDeleteEvent(){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_DELETE))(this))}fireChangeEvent(a,b){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CHANGE))(this,\na,b))}fireCollapseEvent(a){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_COLLAPSE))(this,a))}setText(a){const b=this.text;this.text=a;this.fireChangeEvent(b,a)}getText(){return this.text}setSize(a){const b=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_RESIZE))(this);this.size=a;b.recordCurrentSizeAsNewSize();\nfire$$module$build$src$core$events$utils(b)}getSize(){return this.size}setCollapsed(a){this.collapsed=a;this.fireCollapseEvent(a)}isCollapsed(){return this.collapsed}setEditable(a){this.editable=a}isEditable(){return this.isOwnEditable()&&!this.workspace.isReadOnly()}isOwnEditable(){return this.editable}setMovable(a){this.movable=a}isMovable(){return this.isOwnMovable()&&!this.workspace.isReadOnly()&&!this.workspace.isFlyout}isOwnMovable(){return this.movable}setDeletable(a){this.deletable=a}isDeletable(){return this.isOwnDeletable()&&\n!this.isDeadOrDying()&&!this.workspace.isReadOnly()&&!this.workspace.isFlyout}isOwnDeletable(){return this.deletable}moveTo(a,b){const c=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_MOVE))(this);b&&c.setReason(b);this.location=a;c.recordNew();fire$$module$build$src$core$events$utils(c)}getRelativeToSurfaceXY(){return this.location}dispose(){this.disposing=!0;this.fireDeleteEvent();this.workspace.removeTopComment(this);this.disposed=!0}isDisposed(){return this.disposed}isDeadOrDying(){return this.disposing||\nthis.disposed}},module$build$src$core$comments$workspace_comment={};module$build$src$core$comments$workspace_comment.WorkspaceComment=WorkspaceComment$$module$build$src$core$comments$workspace_comment;var RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment=class extends WorkspaceComment$$module$build$src$core$comments$workspace_comment{constructor(a,b){super(a,b);this.dragStrategy=new CommentDragStrategy$$module$build$src$core$dragging$comment_drag_strategy(this);this.workspace=a;this.view=new CommentView$$module$build$src$core$comments$comment_view(a,this.id);this.view.setSize(this.getSize());this.view.setEditable(this.isEditable());this.view.getSvgRoot().setAttribute(\"data-id\",\nthis.id);this.view.getSvgRoot().setAttribute(\"id\",this.id);this.addModelUpdateBindings();conditionalBind$$module$build$src$core$browser_events(this.view.getSvgRoot(),\"pointerdown\",this,this.startGesture)}addModelUpdateBindings(){this.view.addTextChangeListener((a,b)=>void super.setText(b));this.view.addSizeChangeListener((a,b)=>void super.setSize(b));this.view.addOnCollapseListener(()=>void super.setCollapsed(this.view.isCollapsed()));this.view.addDisposeListener(()=>{this.isDeadOrDying()||this.dispose()})}setText(a){this.view.setText(a)}setPlaceholderText(a){this.view.setPlaceholderText(a)}setSize(a){this.view.setSize(a)}setCollapsed(a){this.view.setCollapsed(a)}setEditable(a){super.setEditable(a);\nthis.view.setEditable(this.isEditable())}getSvgRoot(){return this.view.getSvgRoot()}getSize(){return super.getSize()}getBoundingRectangle(){const a=this.getRelativeToSurfaceXY();var b,c;const d=(c=(b=this.view)==null?void 0:b.getSize())!=null?c:this.getSize();this.workspace.RTL?(b=a.x-d.width,c=a.x):(b=a.x,c=a.x+d.width);return new Rect$$module$build$src$core$utils$rect(a.y,a.y+d.height,b,c)}moveBy(a,b,c){const d=this.getRelativeToSurfaceXY();a=new Coordinate$$module$build$src$core$utils$coordinate(d.x+\na,d.y+b);this.moveTo(a,c)}moveTo(a,b){super.moveTo(a,b);this.view.moveTo(a)}moveDuringDrag(a){this.location=a;this.view.moveTo(a)}setDragging(a){a?addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDragging\"):removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDragging\")}dispose(){this.disposing=!0;const a=$.getFocusManager$$module$build$src$core$focus_manager();a.getFocusedNode()===this&&setTimeout(()=>a.focusTree(this.workspace),0);this.view.isDeadOrDying()||\nthis.view.dispose();super.dispose()}startGesture(a){const b=this.workspace.getGesture(a);b&&(b.handleCommentStart(a,this),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this))}setDeleteStyle(a){a?addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDraggingDelete\"):removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDraggingDelete\")}isCopyable(){return this.isOwnMovable()&&this.isOwnDeletable()}isMovable(){return this.dragStrategy.isMovable()}startDrag(){this.dragStrategy.startDrag()}drag(a){this.dragStrategy.drag(a)}endDrag(){this.dragStrategy.endDrag()}revertDrag(){this.dragStrategy.revertDrag()}select(){addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\n\"blocklySelected\");fireSelectedEvent$$module$build$src$core$common(this)}unselect(){removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklySelected\");fireSelectedEvent$$module$build$src$core$common(null)}toCopyData(){return{paster:WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE,commentState:save$$module$build$src$core$serialization$workspace_comments(this,{addCoordinates:!0,saveIds:!1})}}showContextMenu(a){const b=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({comment:this,\nfocusedNode:this},a);let c;c=a instanceof PointerEvent?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this.workspace,this.getRelativeToSurfaceXY()).translate(10,10);show$$module$build$src$core$contextmenu(a,b,this.workspace.RTL,this.workspace,c)}snapToGrid(){if(!this.isDeadOrDying()){var a=this.workspace.getGrid();if(a!=null&&a.shouldSnap()){var b=this.getRelativeToSurfaceXY();a=a.alignXY(b);a!==b&&this.moveTo(a,\n[\"snap\"])}}}getEditorFocusableNode(){return this.view.getEditorFocusableNode()}getFocusableElement(){return this.getSvgRoot()}getFocusableTree(){return this.workspace}onNodeFocus(){this.select();let a;(a=this.workspace.getLayerManager())==null||a.append(this,BLOCK$$module$build$src$core$layers);this.workspace.scrollBoundsIntoView(this.getBoundingRectangle())}onNodeBlur(){this.unselect()}canBeFocused(){return!0}},module$build$src$core$comments$rendered_workspace_comment={};\nmodule$build$src$core$comments$rendered_workspace_comment.RenderedWorkspaceComment=RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment;var module$build$src$core$xml={};module$build$src$core$xml.appendDomToWorkspace=appendDomToWorkspace$$module$build$src$core$xml;module$build$src$core$xml.blockToDom=blockToDom$$module$build$src$core$xml;module$build$src$core$xml.blockToDomWithXY=blockToDomWithXY$$module$build$src$core$xml;module$build$src$core$xml.clearWorkspaceAndLoadFromXml=clearWorkspaceAndLoadFromXml$$module$build$src$core$xml;module$build$src$core$xml.deleteNext=deleteNext$$module$build$src$core$xml;\nmodule$build$src$core$xml.domToBlock=$.domToBlock$$module$build$src$core$xml;module$build$src$core$xml.domToBlockInternal=domToBlockInternal$$module$build$src$core$xml;module$build$src$core$xml.domToPrettyText=domToPrettyText$$module$build$src$core$xml;module$build$src$core$xml.domToText=domToText$$module$build$src$core$xml;module$build$src$core$xml.domToVariables=domToVariables$$module$build$src$core$xml;module$build$src$core$xml.domToWorkspace=$.domToWorkspace$$module$build$src$core$xml;\nmodule$build$src$core$xml.loadWorkspaceComment=loadWorkspaceComment$$module$build$src$core$xml;module$build$src$core$xml.saveWorkspaceComment=saveWorkspaceComment$$module$build$src$core$xml;module$build$src$core$xml.variablesToDom=variablesToDom$$module$build$src$core$xml;module$build$src$core$xml.workspaceToDom=workspaceToDom$$module$build$src$core$xml;var BlockCreate$$module$build$src$core$events$events_block_create=class extends BlockBase$$module$build$src$core$events$events_block_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.BLOCK_CREATE;a&&(a.isShadow()&&(this.recordUndo=!1),this.xml=blockToDomWithXY$$module$build$src$core$xml(a),this.ids=getDescendantIds$$module$build$src$core$events$utils(a),this.json=save$$module$build$src$core$serialization$blocks(a,{addCoordinates:!0}))}toJson(){const a=super.toJson();\nif(!this.xml)throw Error(\"The block XML is undefined. Either pass a block to the constructor, or call fromJson\");if(!this.ids)throw Error(\"The block IDs are undefined. Either pass a block to the constructor, or call fromJson\");if(!this.json)throw Error(\"The block JSON is undefined. Either pass a block to the constructor, or call fromJson\");a.xml=domToText$$module$build$src$core$xml(this.xml);a.ids=this.ids;a.json=this.json;this.recordUndo||(a.recordUndo=this.recordUndo);return a}static fromJson(a,\nb,c){b=super.fromJson(a,b,c!=null?c:new BlockCreate$$module$build$src$core$events$events_block_create);b.xml=$.textToDom$$module$build$src$core$utils$xml(a.xml);b.ids=a.ids;b.json=a.json;a.recordUndo!==void 0&&(b.recordUndo=a.recordUndo);return b}run(a){const b=this.getEventWorkspace_();if(!this.json)throw Error(\"The block JSON is undefined. Either pass a block to the constructor, or call fromJson\");if(!this.ids)throw Error(\"The block IDs are undefined. Either pass a block to the constructor, or call fromJson\");\nif(!allShadowBlocks$$module$build$src$core$events$events_block_create(b,this.ids))if(a)append$$module$build$src$core$serialization$blocks(this.json,b);else for(a=0;aa.getBlockById(c)).filter(c=>c&&c.isShadow()).length===b.length};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.BLOCK_CREATE,BlockCreate$$module$build$src$core$events$events_block_create);var module$build$src$core$events$events_block_create={};module$build$src$core$events$events_block_create.BlockCreate=BlockCreate$$module$build$src$core$events$events_block_create;var ThemeChange$$module$build$src$core$events$events_theme_change=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b){super(b);this.type=EventType$$module$build$src$core$events$type.THEME_CHANGE;this.themeName=a}toJson(){const a=super.toJson();if(!this.themeName)throw Error(\"The theme name is undefined. Either pass a theme name to the constructor, or call fromJson\");a.themeName=this.themeName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new ThemeChange$$module$build$src$core$events$events_theme_change);\nb.themeName=a.themeName;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.THEME_CHANGE,ThemeChange$$module$build$src$core$events$events_theme_change);var module$build$src$core$events$events_theme_change={};module$build$src$core$events$events_theme_change.ThemeChange=ThemeChange$$module$build$src$core$events$events_theme_change;var ViewportChange$$module$build$src$core$events$events_viewport=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b,c,d,e){super(d);this.type=EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE;this.viewTop=a;this.viewLeft=b;this.scale=c;this.oldScale=e}toJson(){const a=super.toJson();if(this.viewTop===void 0)throw Error(\"The view top is undefined. Either pass a value to the constructor, or call fromJson\");if(this.viewLeft===void 0)throw Error(\"The view left is undefined. Either pass a value to the constructor, or call fromJson\");\nif(this.scale===void 0)throw Error(\"The scale is undefined. Either pass a value to the constructor, or call fromJson\");if(this.oldScale===void 0)throw Error(\"The old scale is undefined. Either pass a value to the constructor, or call fromJson\");a.viewTop=this.viewTop;a.viewLeft=this.viewLeft;a.scale=this.scale;a.oldScale=this.oldScale;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new ViewportChange$$module$build$src$core$events$events_viewport);b.viewTop=a.viewTop;b.viewLeft=a.viewLeft;\nb.scale=a.scale;b.oldScale=a.oldScale;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE,ViewportChange$$module$build$src$core$events$events_viewport);var module$build$src$core$events$events_viewport={};module$build$src$core$events$events_viewport.ViewportChange=ViewportChange$$module$build$src$core$events$events_viewport;var TEST_ONLY$$module$build$src$core$field_registry={fromJsonInternal:fromJsonInternal$$module$build$src$core$field_registry},module$build$src$core$field_registry={TEST_ONLY:TEST_ONLY$$module$build$src$core$field_registry};module$build$src$core$field_registry.fromJson=$.fromJson$$module$build$src$core$field_registry;module$build$src$core$field_registry.register=register$$module$build$src$core$field_registry;module$build$src$core$field_registry.unregister=unregister$$module$build$src$core$field_registry;var FieldDropdown$$module$build$src$core$field_dropdown=class extends Field$$module$build$src$core$field{constructor(a,b,c){super(Field$$module$build$src$core$field.SKIP_SETUP);this.svgArrow=this.arrow=this.imageElement=this.menu_=this.selectedMenuItem=null;this.SERIALIZABLE=!0;this.clickTarget_=this.suffixField=this.prefixField=this.generatedOptions=null;a!==Field$$module$build$src$core$field.SKIP_SETUP&&(this.setOptions(a),c&&this.configure_(c),b&&this.setValidator(b))}fromXml(a){this.isOptionListDynamic()&&\nthis.getOptions(!1);this.setValue(a.textContent)}loadState(a){this.loadLegacyState(FieldDropdown$$module$build$src$core$field_dropdown,a)||(this.isOptionListDynamic()&&this.getOptions(!1),this.setValue(a))}initView(){this.shouldAddBorderRect_()?this.createBorderRect_():this.clickTarget_=this.sourceBlock_.getSvgRoot();this.createTextElement_();this.imageElement=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{},this.fieldGroup_);this.getConstants().FIELD_DROPDOWN_SVG_ARROW?\nthis.createSVGArrow_():this.createTextArrow_();this.borderRect_&&addClass$$module$build$src$core$utils$dom(this.borderRect_,\"blocklyDropdownRect\");this.fieldGroup_&&(addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyField\"),addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyDropdownField\"))}shouldAddBorderRect_(){let a;return!this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW||this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW&&!((a=this.getSourceBlock())==\nnull?0:a.isShadow())}createTextArrow_(){this.arrow=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TSPAN,{},this.textElement_);let a;this.arrow.appendChild(document.createTextNode(((a=this.getSourceBlock())==null?0:a.RTL)?FieldDropdown$$module$build$src$core$field_dropdown.ARROW_CHAR+\" \":\" \"+FieldDropdown$$module$build$src$core$field_dropdown.ARROW_CHAR));this.getConstants().FIELD_TEXT_BASELINE_CENTER&&this.arrow.setAttribute(\"dominant-baseline\",\"central\");let b;\n((b=this.getSourceBlock())==null?0:b.RTL)?this.getTextElement().insertBefore(this.arrow,this.textContent_):this.getTextElement().appendChild(this.arrow)}createSVGArrow_(){this.svgArrow=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{height:this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE+\"px\",width:this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE+\"px\"},this.fieldGroup_);this.svgArrow.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.getConstants().FIELD_DROPDOWN_SVG_ARROW_DATAURI)}showEditor_(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.dropdownCreate();this.menu_&&(this.menu_.openingCoords=a&&typeof a.clientX===\"number\"?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):null,clearContent$$module$build$src$core$dropdowndiv(),a=this.menu_.render(getContentDiv$$module$build$src$core$dropdowndiv()),addClass$$module$build$src$core$utils$dom(a,\n\"blocklyDropdownMenu\"),this.getConstants().FIELD_DROPDOWN_COLOURED_DIV&&(b=b.getColour(),a=this.sourceBlock_.getColourTertiary(),setColour$$module$build$src$core$dropdowndiv(b,a)),showPositionedByField$$module$build$src$core$dropdowndiv(this,this.dropdownDispose_.bind(this)),getContentDiv$$module$build$src$core$dropdowndiv().style.height=`${this.menu_.getSize().height}px`,this.menu_.focus(),this.selectedMenuItem&&this.menu_.setHighlighted(this.selectedMenuItem),this.applyColour())}dropdownCreate(){const a=\nthis.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;const b=new Menu$$module$build$src$core$menu;b.setRole(Role$$module$build$src$core$utils$aria.LISTBOX);this.menu_=b;const c=this.getOptions(!1);this.selectedMenuItem=null;for(let e=0;eb[1]===a)?a:(this.sourceBlock_&&console.warn(\"Cannot set the dropdown's value to an unavailable option. Block type: \"+this.sourceBlock_.type+\", Field name: \"+this.name+\", Value: \"+a),null)}doValueUpdate_(a){super.doValueUpdate_(a);\na=this.getOptions(!0);for(let b=0,c;c=a[b];b++)c[1]===this.value_&&(this.selectedOption=c)}applyColour(){const a=this.sourceBlock_;this.borderRect_&&(this.borderRect_.setAttribute(\"stroke\",a.getColourTertiary()),this.menu_?this.borderRect_.setAttribute(\"fill\",a.getColourTertiary()):this.borderRect_.setAttribute(\"fill\",\"transparent\"));a&&this.arrow&&(a.isShadow()?this.arrow.style.fill=a.getColourSecondary():this.arrow.style.fill=a.getColour())}render_(){this.getTextContent().nodeValue=\"\";this.imageElement.style.display=\n\"none\";const a=this.selectedOption&&this.selectedOption[0];isImageProperties$$module$build$src$core$field_dropdown(a)?this.renderSelectedImage(a):this.renderSelectedText();this.positionBorderRect_()}renderSelectedImage(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.imageElement.style.display=\"\";this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",a.src);this.imageElement.setAttribute(\"height\",String(a.height));\nthis.imageElement.setAttribute(\"width\",String(a.width));const c=Number(a.height);a=Number(a.width);var d=!!this.borderRect_;const e=Math.max(d?this.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT:0,c+FieldDropdown$$module$build$src$core$field_dropdown.IMAGE_Y_PADDING);d=d?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0;let f;f=this.svgArrow?this.positionSVGArrow(a+d,e/2-this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE/2):getTextWidth$$module$build$src$core$utils$dom(this.arrow);this.size_=new Size$$module$build$src$core$utils$size(a+\nf+d*2,e);let g=0;b.RTL?this.imageElement.setAttribute(\"x\",`${d+f}`):(g=a+f,this.getTextElement().setAttribute(\"text-anchor\",\"end\"),this.imageElement.setAttribute(\"x\",`${d}`));this.imageElement.setAttribute(\"y\",String(e/2-c/2));this.positionTextElement_(g+d,a+f)}renderSelectedText(){this.getTextContent().nodeValue=this.getDisplayText_();var a=this.getTextElement();addClass$$module$build$src$core$utils$dom(a,\"blocklyDropdownText\");a.setAttribute(\"text-anchor\",\"start\");var b=!!this.borderRect_;a=Math.max(b?\nthis.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT:0,this.getConstants().FIELD_TEXT_HEIGHT);const c=getTextWidth$$module$build$src$core$utils$dom(this.getTextElement());b=b?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0;let d=0;this.svgArrow&&(d=this.positionSVGArrow(c+b,a/2-this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE/2));this.size_=new Size$$module$build$src$core$utils$size(c+d+b*2,a);this.positionTextElement_(b,c)}positionSVGArrow(a,b){if(!this.svgArrow)return 0;const c=this.getSourceBlock();\nif(!c)throw new UnattachedFieldError$$module$build$src$core$field;const d=this.borderRect_?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0,e=this.getConstants().FIELD_DROPDOWN_SVG_ARROW_PADDING,f=this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE;this.svgArrow.setAttribute(\"transform\",\"translate(\"+(c.RTL?d:a+e)+\",\"+b+\")\");return f+e}getText_(){if(!this.selectedOption)return null;const a=this.selectedOption[0];if(isImageProperties$$module$build$src$core$field_dropdown(a))return a.alt;if(typeof HTMLElement!==\n\"undefined\"&&a instanceof HTMLElement){let b,c;return(c=(b=a.title)!=null?b:a.ariaLabel)!=null?c:a.innerText}if(typeof a===\"string\")return a;console.warn(\"Can't get text for existing dropdown option. If you're using HTMLElement dropdown options in node, ensure you're using jsdom-global or similar.\");return null}static fromJson(a){if(!a.options)throw Error(\"options are required for the dropdown field. The options property must be assigned an array of [humanReadableValue, languageNeutralValue] tuples.\");\nreturn new this(a.options,void 0,a)}trimOptions(a){let b=!1;const c=a.map(g=>{if(g===FieldDropdown$$module$build$src$core$field_dropdown.SEPARATOR)return b=!0,g;const [h,k]=g;if(typeof h===\"string\")return[replaceMessageReferences$$module$build$src$core$utils$parsing(h),k];b=!0;return[isImageProperties$$module$build$src$core$field_dropdown(h)?Object.assign({},h,{alt:replaceMessageReferences$$module$build$src$core$utils$parsing(h.alt)}):h,k]});if(b||a.length<2)return{options:c};var d=c.map(([g])=>g),\ne=shortestStringLength$$module$build$src$core$utils$string(d);a=commonWordPrefix$$module$build$src$core$utils$string(d,e);const f=commonWordSuffix$$module$build$src$core$utils$string(d,e);if(!a&&!f||e<=a+f)return{options:c};e=a?d[0].substring(0,a-1):void 0;d=f?d[0].substr(1-f):void 0;return{options:this.applyTrim(c,a,f),prefix:e,suffix:d}}applyTrim(a,b,c){return a.map(([d,e])=>[d.substring(b,d.length-c),e])}validateOptions(a){if(!Array.isArray(a))throw TypeError(\"FieldDropdown options must be an array.\");\nif(!a.length)throw TypeError(\"FieldDropdown options must not be an empty array.\");let b=!1;for(let c=0;c0&&!!a.snap;return b}static parseThemeOptions(a){a=a.theme||Classic$$module$build$src$core$theme$classic;return typeof a===\"string\"?getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.THEME,a):a instanceof Theme$$module$build$src$core$theme?a:Theme$$module$build$src$core$theme.defineTheme(a.name||\"builtin\"+getNextUniqueId$$module$build$src$core$utils$idgenerator(),a)}},module$build$src$core$options=\n{};module$build$src$core$options.Options=Options$$module$build$src$core$options;var BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy=class{constructor(a,b){this.bubble=a;this.workspace=b;this.startLoc=null}isMovable(){return!0}startDrag(){this.startLoc=this.bubble.getRelativeToSurfaceXY();this.workspace.setResizesEnabled(!1);let a;(a=this.workspace.getLayerManager())==null||a.moveToDragLayer(this.bubble);this.bubble.setDragging&&this.bubble.setDragging(!0)}drag(a){this.bubble.moveDuringDrag(a)}endDrag(){this.workspace.setResizesEnabled(!0);let a;(a=this.workspace.getLayerManager())==\nnull||a.moveOffDragLayer(this.bubble,BUBBLE$$module$build$src$core$layers);this.bubble.setDragging(!1)}revertDrag(){this.startLoc&&this.bubble.moveDuringDrag(this.startLoc)}},module$build$src$core$dragging$bubble_drag_strategy={};module$build$src$core$dragging$bubble_drag_strategy.BubbleDragStrategy=BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy;var _a$$module$build$src$core$bubbles$bubble,Bubble$$module$build$src$core$bubbles$bubble=class{constructor(a,b,c,d,e){this.workspace=a;this.anchor=b;this.ownerRect=c;this.owner=e;this.size=new Size$$module$build$src$core$utils$size(0,0);this.colour=\"#ffffff\";this.disposed=!1;this.relativeLeft=this.relativeTop=0;this.dragStrategy=new BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy(this,this.workspace);this.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();this.svgRoot=\ncreateSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyBubble\"},a.getBubbleCanvas());a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyEmboss\"},this.svgRoot);this.tail=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyBubbleTail\"},a);this.background=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{\"class\":\"blocklyDraggable\",x:0,y:0,rx:_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH,ry:_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},a);this.contentContainer=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},this.svgRoot);this.focusableElement=d!=null?d:this.svgRoot;this.focusableElement.setAttribute(\"id\",this.id);conditionalBind$$module$build$src$core$browser_events(this.background,\"pointerdown\",this,this.onMouseDown);conditionalBind$$module$build$src$core$browser_events(this.focusableElement,\n\"keydown\",this,this.onKeyDown)}dispose(){removeNode$$module$build$src$core$utils$dom(this.svgRoot);this.disposed=!0}setAnchorLocation(a,b=!1){this.anchor=a;b?this.positionByRect(this.ownerRect):this.positionRelativeToAnchor();this.renderTail()}setPositionRelativeToAnchor(a,b){this.relativeLeft=a;this.relativeTop=b;this.positionRelativeToAnchor();this.renderTail()}getSize(){return this.size}setSize(a,b=!1){a.width=Math.max(a.width,_a$$module$build$src$core$bubbles$bubble.MIN_SIZE);a.height=Math.max(a.height,\n_a$$module$build$src$core$bubbles$bubble.MIN_SIZE);this.size=a;this.background.setAttribute(\"width\",`${a.width}`);this.background.setAttribute(\"height\",`${a.height}`);b?this.positionByRect(this.ownerRect):this.positionRelativeToAnchor();this.renderTail()}getColour(){return this.colour}setColour(a){this.colour=a;this.tail.setAttribute(\"fill\",a);this.background.setAttribute(\"fill\",a)}onMouseDown(a){let b;(b=this.workspace.getGesture(a))==null||b.handleBubbleStart(a,this);$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this)}onKeyDown(a){a.key===\n\"Escape\"&&this.owner&&(this.owner.setBubbleVisible(!1),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.owner))}positionRelativeToAnchor(){let a=this.anchor.x;a=this.workspace.RTL?a-(this.relativeLeft+this.size.width):a+this.relativeLeft;this.moveTo(a,this.relativeTop+this.anchor.y)}moveTo(a,b){this.svgRoot.setAttribute(\"transform\",`translate(${a}, ${b})`)}positionByRect(a=new Rect$$module$build$src$core$utils$rect(0,0,0,0)){var b=this.workspace.getMetricsManager().getViewMetrics(!0),\nc=this.getOptimalRelativeLeft(b),d=this.getOptimalRelativeTop(b);const e={x:c,y:-this.size.height-this.workspace.getRenderer().getConstants().MIN_BLOCK_HEIGHT},f={x:-this.size.width-30,y:d};d={x:a.getWidth(),y:d};var g={x:c,y:a.getHeight()};c=a.getWidth()a.width)return b;a=this.getWorkspaceViewRect(a);if(this.workspace.RTL){var c=this.anchor.x-b;c-this.size.widtha.right&&(b=-(a.right-this.anchor.x))}else{c=b+this.anchor.x;const d=c+this.size.width;ca.right&&(b=a.right-this.anchor.x-this.size.width)}return b}getOptimalRelativeTop(a){let b=-this.size.height/4;if(this.size.height>a.height)return b;const c=this.anchor.y+b,d=c+this.size.height;a=this.getWorkspaceViewRect(a);\nca.bottom&&(b=a.bottom-this.anchor.y-this.size.height);return b}getWorkspaceViewRect(a){const b=a.top;let c=a.top+a.height,d=a.left;a=a.left+a.width;c-=this.getScrollbarThickness();this.workspace.RTL?d-=this.getScrollbarThickness():a-=this.getScrollbarThickness();return new Rect$$module$build$src$core$utils$rect(b,c,d,a)}getScrollbarThickness(){return Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness/this.workspace.scale}renderTail(){const a=[];var b=this.size.width/\n2,c=this.size.height/2,d=-this.relativeLeft,e=-this.relativeTop;if(b===d&&c===e)a.push(\"M \"+b+\",\"+c);else{e-=c;d-=b;this.workspace.RTL&&(d*=-1);var f=Math.sqrt(e*e+d*d),g=Math.acos(d/f);e<0&&(g=2*Math.PI-g);var h=g+Math.PI/2;h>Math.PI*2&&(h-=Math.PI*2);var k=Math.sin(h);const m=Math.cos(h);let n=(this.size.width+this.size.height)/_a$$module$build$src$core$bubbles$bubble.TAIL_THICKNESS;n=Math.min(n,this.size.width,this.size.height)/4;h=1-_a$$module$build$src$core$bubbles$bubble.ANCHOR_RADIUS/f;d=b+\nh*d;e=c+h*e;h=b+n*m;const p=c+n*k;b-=n*m;c-=n*k;k=toRadians$$module$build$src$core$utils$math(this.workspace.RTL?-_a$$module$build$src$core$bubbles$bubble.TAIL_ANGLE:_a$$module$build$src$core$bubbles$bubble.TAIL_ANGLE);k=g+k;k>Math.PI*2&&(k-=Math.PI*2);g=Math.sin(k)*f/_a$$module$build$src$core$bubbles$bubble.TAIL_BEND;f=Math.cos(k)*f/_a$$module$build$src$core$bubbles$bubble.TAIL_BEND;a.push(\"M\"+h+\",\"+p);a.push(\"C\"+(h+f)+\",\"+(p+g)+\" \"+d+\",\"+e+\" \"+d+\",\"+e);a.push(\"C\"+d+\",\"+e+\" \"+(b+f)+\",\"+(c+g)+\" \"+\nb+\",\"+c)}a.push(\"z\");let l;(l=this.tail)==null||l.setAttribute(\"d\",a.join(\" \"))}bringToFront(){let a;const b=(a=this.svgRoot)==null?void 0:a.parentNode;return this.svgRoot&&(b==null?void 0:b.lastChild)!==this.svgRoot?(b==null||b.appendChild(this.svgRoot),!0):!1}getRelativeToSurfaceXY(){return new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.relativeLeft+this.anchor.x-this.size.width:this.anchor.x+this.relativeLeft,this.anchor.y+this.relativeTop)}getSvgRoot(){return this.svgRoot}moveDuringDrag(a){this.moveTo(a.x,\na.y);this.relativeLeft=this.workspace.RTL?this.anchor.x-a.x-this.size.width:a.x-this.anchor.x;this.relativeTop=a.y-this.anchor.y;this.renderTail()}setDragging(a){}setDeleteStyle(a){}isDeletable(){return!1}showContextMenu(a){}isMovable(){return!0}startDrag(){this.dragStrategy.startDrag()}drag(a){this.dragStrategy.drag(a)}endDrag(){this.dragStrategy.endDrag()}revertDrag(){this.dragStrategy.revertDrag()}select(){fireSelectedEvent$$module$build$src$core$common(this)}unselect(){fireSelectedEvent$$module$build$src$core$common(null)}getFocusableElement(){return this.focusableElement}getFocusableTree(){return this.workspace}onNodeFocus(){this.select();\nthis.bringToFront();var a=this.getRelativeToSurfaceXY();const b=this.getSize();a=new Rect$$module$build$src$core$utils$rect(a.y,a.y+b.height,a.x,a.x+b.width);this.workspace.scrollBoundsIntoView(a)}onNodeBlur(){this.unselect()}canBeFocused(){return!0}getOwner(){return this.owner}};_a$$module$build$src$core$bubbles$bubble=Bubble$$module$build$src$core$bubbles$bubble;Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH=6;\nBubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER=_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2;Bubble$$module$build$src$core$bubbles$bubble.MIN_SIZE=_a$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER;Bubble$$module$build$src$core$bubbles$bubble.TAIL_THICKNESS=1;Bubble$$module$build$src$core$bubbles$bubble.TAIL_ANGLE=20;Bubble$$module$build$src$core$bubbles$bubble.TAIL_BEND=4;Bubble$$module$build$src$core$bubbles$bubble.ANCHOR_RADIUS=8;\nvar module$build$src$core$bubbles$bubble={};module$build$src$core$bubbles$bubble.Bubble=Bubble$$module$build$src$core$bubbles$bubble;var MiniWorkspaceBubble$$module$build$src$core$bubbles$mini_workspace_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(b,c,d);this.workspace=b;this.anchor=c;this.ownerRect=d;this.autoLayout=!0;b=new Options$$module$build$src$core$options(a);this.validateWorkspaceOptions(b);this.svgDialog=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{x:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH,y:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},\nthis.contentContainer);a.parentWorkspace=this.workspace;this.miniWorkspace=this.newWorkspaceSvg(new Options$$module$build$src$core$options(a));this.miniWorkspace.internalIsMutator=!0;a=this.miniWorkspace.createDom(\"blocklyMutatorBackground\");this.svgDialog.appendChild(a);b.languageTree&&(a.insertBefore(this.miniWorkspace.addFlyout(Svg$$module$build$src$core$utils$svg.G),this.miniWorkspace.getCanvas()),a=this.miniWorkspace.getFlyout(),a==null||a.init(this.miniWorkspace),a==null||a.show(b.languageTree));\naddClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyMiniWorkspaceBubble\");this.miniWorkspace.addChangeListener(this.onWorkspaceChange.bind(this));let e,f;(e=this.miniWorkspace.getFlyout())==null||(f=e.getWorkspace())==null||f.addChangeListener(this.onWorkspaceChange.bind(this));this.updateBubbleSize()}dispose(){this.miniWorkspace.dispose();super.dispose()}getWorkspace(){return this.miniWorkspace}addWorkspaceChangeListener(a){this.miniWorkspace.addChangeListener(a)}validateWorkspaceOptions(a){if(a.hasCategories)throw Error(\"The miniworkspace bubble does not support toolboxes with categories\");\nif(a.hasTrashcan)throw Error(\"The miniworkspace bubble does not support trashcans\");if(a.zoomOptions.controls||a.zoomOptions.wheel||a.zoomOptions.pinch)throw Error(\"The miniworkspace bubble does not support zooming\");if(a.moveOptions.scrollbars||a.moveOptions.wheel||a.moveOptions.drag)throw Error(\"The miniworkspace bubble does not scrolling/moving the workspace\");if(a.horizontalLayout)throw Error(\"The miniworkspace bubble does not support horizontal layouts\");}onWorkspaceChange(){this.bumpBlocksIntoBounds();\nthis.updateBubbleSize()}bumpBlocksIntoBounds(){if(!this.miniWorkspace.isDragging()||this.miniWorkspace.keyboardMoveInProgress)for(const a of this.miniWorkspace.getTopBlocks(!1)){const b=a.getRelativeToSurfaceXY();b.y<20&&a.moveBy(0,20-b.y);if(a.RTL){let c=-20;const d=this.miniWorkspace.getFlyout();d&&(c-=d.getWidth());b.x>c&&a.moveBy(c-b.x,0)}else b.x<20&&a.moveBy(20-b.x,0)}}updateBubbleSize(){if(!this.miniWorkspace.isDragging()||this.miniWorkspace.keyboardMoveInProgress){this.autoLayout&&(this.autoLayout=\n!this.miniWorkspace.keyboardMoveInProgress);var a=this.getSize(),b=this.calculateWorkspaceSize();Math.abs(a.width-b.width)({kind:\"block\",type:c}))});return b}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$mutator_icon/\n2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,new Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){const a=this.sourceBlock.getSvgRoot().getBBox();return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}createRootBlock(){if(!this.sourceBlock.decompose)throw Error(\"Blocks with mutator icons must include a decompose method\");this.rootBlock=this.sourceBlock.decompose(this.miniWorkspaceBubble.getWorkspace());\nfor(var a of this.rootBlock.getDescendants(!1))a.queueRender();this.rootBlock.setMovable(!1);this.rootBlock.setDeletable(!1);let b,c,d,e;a=(e=(b=this.miniWorkspaceBubble)==null?void 0:(c=b.getWorkspace())==null?void 0:(d=c.getFlyout())==null?void 0:d.getWidth())!=null?e:0;this.rootBlock.moveBy(this.rootBlock.RTL?-(a+WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon):WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon,WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon)}addSaveConnectionsListener(){this.sourceBlock.saveConnections&&\nthis.rootBlock&&(this.saveConnectionsListener=()=>{this.sourceBlock.saveConnections&&this.rootBlock&&this.sourceBlock.saveConnections(this.rootBlock)},this.saveConnectionsListener(),this.sourceBlock.workspace.addChangeListener(this.saveConnectionsListener))}createMiniWorkspaceChangeListener(){return a=>{$.MutatorIcon$$module$build$src$core$icons$mutator_icon.isIgnorableMutatorEvent(a)||this.updateWorkspacePid||(this.updateWorkspacePid=setTimeout(()=>{this.updateWorkspacePid=null;this.recomposeSourceBlock()},\n0))}}static isIgnorableMutatorEvent(a){return a.isUiEvent||isBlockCreate$$module$build$src$core$events$predicates(a)||isBlockChange$$module$build$src$core$events$predicates(a)&&a.element===\"disabled\"}recomposeSourceBlock(){if(this.rootBlock){if(!this.sourceBlock.compose)throw Error(\"Blocks with mutator icons must include a compose method\");var a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);var b=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(this.sourceBlock);\nthis.sourceBlock.compose(this.rootBlock);var c=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(this.sourceBlock);b!==c&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\"mutation\",null,b,c));$.setGroup$$module$build$src$core$events$utils(a)}}getWorkspace(){let a;return(a=this.miniWorkspaceBubble)==null?void 0:a.getWorkspace()}};\n$.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.MUTATOR;$.MutatorIcon$$module$build$src$core$icons$mutator_icon.WEIGHT=1;var module$build$src$core$icons$mutator_icon={};module$build$src$core$icons$mutator_icon.MutatorIcon=$.MutatorIcon$$module$build$src$core$icons$mutator_icon;var allExtensions$$module$build$src$core$extensions=Object.create(null),TEST_ONLY$$module$build$src$core$extensions={allExtensions:allExtensions$$module$build$src$core$extensions};$.register$$module$build$src$core$extensions(\"parent_tooltip_when_inline\",extensionParentTooltip$$module$build$src$core$extensions);var module$build$src$core$extensions={TEST_ONLY:TEST_ONLY$$module$build$src$core$extensions};module$build$src$core$extensions.apply=apply$$module$build$src$core$extensions;\nmodule$build$src$core$extensions.buildTooltipForDropdown=$.buildTooltipForDropdown$$module$build$src$core$extensions;module$build$src$core$extensions.buildTooltipWithFieldText=$.buildTooltipWithFieldText$$module$build$src$core$extensions;module$build$src$core$extensions.isRegistered=isRegistered$$module$build$src$core$extensions;module$build$src$core$extensions.register=$.register$$module$build$src$core$extensions;module$build$src$core$extensions.registerMixin=$.registerMixin$$module$build$src$core$extensions;\nmodule$build$src$core$extensions.registerMutator=$.registerMutator$$module$build$src$core$extensions;module$build$src$core$extensions.runAfterPageLoad=runAfterPageLoad$$module$build$src$core$extensions;module$build$src$core$extensions.unregister=unregister$$module$build$src$core$extensions;var KeyCodes$$module$build$src$core$utils$keycodes;\n(function(a){a[a.WIN_KEY_FF_LINUX=0]=\"WIN_KEY_FF_LINUX\";a[a.MAC_ENTER=3]=\"MAC_ENTER\";a[a.BACKSPACE=8]=\"BACKSPACE\";a[a.TAB=9]=\"TAB\";a[a.NUM_CENTER=12]=\"NUM_CENTER\";a[a.ENTER=13]=\"ENTER\";a[a.SHIFT=16]=\"SHIFT\";a[a.CTRL=17]=\"CTRL\";a[a.ALT=18]=\"ALT\";a[a.PAUSE=19]=\"PAUSE\";a[a.CAPS_LOCK=20]=\"CAPS_LOCK\";a[a.ESC=27]=\"ESC\";a[a.SPACE=32]=\"SPACE\";a[a.PAGE_UP=33]=\"PAGE_UP\";a[a.PAGE_DOWN=34]=\"PAGE_DOWN\";a[a.END=35]=\"END\";a[a.HOME=36]=\"HOME\";a[a.LEFT=37]=\"LEFT\";a[a.UP=38]=\"UP\";a[a.RIGHT=39]=\"RIGHT\";a[a.DOWN=40]=\n\"DOWN\";a[a.PLUS_SIGN=43]=\"PLUS_SIGN\";a[a.PRINT_SCREEN=44]=\"PRINT_SCREEN\";a[a.INSERT=45]=\"INSERT\";a[a.DELETE=46]=\"DELETE\";a[a.ZERO=48]=\"ZERO\";a[a.ONE=49]=\"ONE\";a[a.TWO=50]=\"TWO\";a[a.THREE=51]=\"THREE\";a[a.FOUR=52]=\"FOUR\";a[a.FIVE=53]=\"FIVE\";a[a.SIX=54]=\"SIX\";a[a.SEVEN=55]=\"SEVEN\";a[a.EIGHT=56]=\"EIGHT\";a[a.NINE=57]=\"NINE\";a[a.FF_SEMICOLON=59]=\"FF_SEMICOLON\";a[a.FF_EQUALS=61]=\"FF_EQUALS\";a[a.FF_DASH=173]=\"FF_DASH\";a[a.FF_HASH=163]=\"FF_HASH\";a[a.QUESTION_MARK=63]=\"QUESTION_MARK\";a[a.AT_SIGN=64]=\"AT_SIGN\";\na[a.A=65]=\"A\";a[a.B=66]=\"B\";a[a.C=67]=\"C\";a[a.D=68]=\"D\";a[a.E=69]=\"E\";a[a.F=70]=\"F\";a[a.G=71]=\"G\";a[a.H=72]=\"H\";a[a.I=73]=\"I\";a[a.J=74]=\"J\";a[a.K=75]=\"K\";a[a.L=76]=\"L\";a[a.M=77]=\"M\";a[a.N=78]=\"N\";a[a.O=79]=\"O\";a[a.P=80]=\"P\";a[a.Q=81]=\"Q\";a[a.R=82]=\"R\";a[a.S=83]=\"S\";a[a.T=84]=\"T\";a[a.U=85]=\"U\";a[a.V=86]=\"V\";a[a.W=87]=\"W\";a[a.X=88]=\"X\";a[a.Y=89]=\"Y\";a[a.Z=90]=\"Z\";a[a.META=91]=\"META\";a[a.WIN_KEY_RIGHT=92]=\"WIN_KEY_RIGHT\";a[a.CONTEXT_MENU=93]=\"CONTEXT_MENU\";a[a.NUM_ZERO=96]=\"NUM_ZERO\";a[a.NUM_ONE=97]=\n\"NUM_ONE\";a[a.NUM_TWO=98]=\"NUM_TWO\";a[a.NUM_THREE=99]=\"NUM_THREE\";a[a.NUM_FOUR=100]=\"NUM_FOUR\";a[a.NUM_FIVE=101]=\"NUM_FIVE\";a[a.NUM_SIX=102]=\"NUM_SIX\";a[a.NUM_SEVEN=103]=\"NUM_SEVEN\";a[a.NUM_EIGHT=104]=\"NUM_EIGHT\";a[a.NUM_NINE=105]=\"NUM_NINE\";a[a.NUM_MULTIPLY=106]=\"NUM_MULTIPLY\";a[a.NUM_PLUS=107]=\"NUM_PLUS\";a[a.NUM_MINUS=109]=\"NUM_MINUS\";a[a.NUM_PERIOD=110]=\"NUM_PERIOD\";a[a.NUM_DIVISION=111]=\"NUM_DIVISION\";a[a.F1=112]=\"F1\";a[a.F2=113]=\"F2\";a[a.F3=114]=\"F3\";a[a.F4=115]=\"F4\";a[a.F5=116]=\"F5\";a[a.F6=\n117]=\"F6\";a[a.F7=118]=\"F7\";a[a.F8=119]=\"F8\";a[a.F9=120]=\"F9\";a[a.F10=121]=\"F10\";a[a.F11=122]=\"F11\";a[a.F12=123]=\"F12\";a[a.NUMLOCK=144]=\"NUMLOCK\";a[a.SCROLL_LOCK=145]=\"SCROLL_LOCK\";a[a.FIRST_MEDIA_KEY=166]=\"FIRST_MEDIA_KEY\";a[a.LAST_MEDIA_KEY=183]=\"LAST_MEDIA_KEY\";a[a.SEMICOLON=186]=\"SEMICOLON\";a[a.DASH=189]=\"DASH\";a[a.EQUALS=187]=\"EQUALS\";a[a.COMMA=188]=\"COMMA\";a[a.PERIOD=190]=\"PERIOD\";a[a.SLASH=191]=\"SLASH\";a[a.APOSTROPHE=192]=\"APOSTROPHE\";a[a.TILDE=192]=\"TILDE\";a[a.SINGLE_QUOTE=222]=\"SINGLE_QUOTE\";\na[a.OPEN_SQUARE_BRACKET=219]=\"OPEN_SQUARE_BRACKET\";a[a.BACKSLASH=220]=\"BACKSLASH\";a[a.CLOSE_SQUARE_BRACKET=221]=\"CLOSE_SQUARE_BRACKET\";a[a.WIN_KEY=224]=\"WIN_KEY\";a[a.MAC_FF_META=224]=\"MAC_FF_META\";a[a.MAC_WK_CMD_LEFT=91]=\"MAC_WK_CMD_LEFT\";a[a.MAC_WK_CMD_RIGHT=93]=\"MAC_WK_CMD_RIGHT\";a[a.WIN_IME=229]=\"WIN_IME\";a[a.VK_NONAME=252]=\"VK_NONAME\";a[a.PHANTOM=255]=\"PHANTOM\"})(KeyCodes$$module$build$src$core$utils$keycodes||(KeyCodes$$module$build$src$core$utils$keycodes={}));\nvar module$build$src$core$utils$keycodes={};module$build$src$core$utils$keycodes.KeyCodes=KeyCodes$$module$build$src$core$utils$keycodes;var module$build$src$core$utils$svg_paths={};module$build$src$core$utils$svg_paths.arc=arc$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.curve=curve$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.line=line$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.lineOnAxis=lineOnAxis$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.lineTo=lineTo$$module$build$src$core$utils$svg_paths;\nmodule$build$src$core$utils$svg_paths.moveBy=moveBy$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.moveTo=moveTo$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.point=point$$module$build$src$core$utils$svg_paths;var module$build$src$core$utils={};module$build$src$core$utils.Coordinate=Coordinate$$module$build$src$core$utils$coordinate;module$build$src$core$utils.KeyCodes=KeyCodes$$module$build$src$core$utils$keycodes;module$build$src$core$utils.Rect=Rect$$module$build$src$core$utils$rect;module$build$src$core$utils.Size=Size$$module$build$src$core$utils$size;module$build$src$core$utils.Svg=Svg$$module$build$src$core$utils$svg;module$build$src$core$utils.aria=module$build$src$core$utils$aria;\nmodule$build$src$core$utils.array=module$build$src$core$utils$array;module$build$src$core$utils.browserEvents=module$build$src$core$browser_events;module$build$src$core$utils.colour=module$build$src$core$utils$colour;module$build$src$core$utils.deprecation=module$build$src$core$utils$deprecation;module$build$src$core$utils.dom=module$build$src$core$utils$dom;module$build$src$core$utils.extensions=module$build$src$core$extensions;module$build$src$core$utils.idGenerator=module$build$src$core$utils$idgenerator;\nmodule$build$src$core$utils.math=module$build$src$core$utils$math;module$build$src$core$utils.object=module$build$src$core$utils$object;module$build$src$core$utils.parsing=module$build$src$core$utils$parsing;module$build$src$core$utils.string=module$build$src$core$utils$string;module$build$src$core$utils.style=module$build$src$core$utils$style;module$build$src$core$utils.svgMath=module$build$src$core$utils$svg_math;module$build$src$core$utils.svgPaths=module$build$src$core$utils$svg_paths;\nmodule$build$src$core$utils.toolbox=module$build$src$core$utils$toolbox;module$build$src$core$utils.userAgent=module$build$src$core$utils$useragent;module$build$src$core$utils.xml=module$build$src$core$utils$xml;var TextInputBubble$$module$build$src$core$bubbles$textinput_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(a,b,c,void 0,d);this.workspace=a;this.anchor=b;this.ownerRect=c;this.owner=d;this.resizePointerMoveListener=this.resizePointerUpListener=null;this.sizeChangeListeners=[];this.locationChangeListeners=[];this.DEFAULT_SIZE=new Size$$module$build$src$core$utils$size(160+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,80+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER);\nthis.MIN_SIZE=new Size$$module$build$src$core$utils$size(45+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,20+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER);this.editable=!0;addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyTextInputBubble\");this.editor=new CommentEditor$$module$build$src$core$comments$comment_editor(a,this.id,()=>{$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this)});this.contentContainer.appendChild(this.editor.getDom());\nthis.resizeGroup=this.createResizeHandle(this.svgRoot,a);this.setSize(this.DEFAULT_SIZE,!0)}getText(){return this.editor.getText()}setText(a){this.editor.setText(a)}setEditable(a){this.editable=a;this.editor.setEditable(a)}isEditable(){return this.editable}addTextChangeListener(a){this.editor.addTextChangeListener(a)}addSizeChangeListener(a){this.sizeChangeListeners.push(a)}addLocationChangeListener(a){this.locationChangeListeners.push(a)}createResizeHandle(a,b){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,\n{\"class\":\"blocklyResizeHandle\",href:`${b.options.pathToMedia}resize-handle.svg`},a);conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onResizePointerDown);return a}setSize(a,b=!1){a.width=Math.max(a.width,this.MIN_SIZE.width);a.height=Math.max(a.height,this.MIN_SIZE.height);const c=a.width-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,d=a.height-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER;this.editor.updateSize(new Size$$module$build$src$core$utils$size(c,\nd),new Size$$module$build$src$core$utils$size(0,0));this.editor.getDom().setAttribute(\"x\",`${Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER/2}`);this.editor.getDom().setAttribute(\"y\",`${Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER/2}`);this.resizeGroup.setAttribute(\"y\",`${d}`);this.workspace.RTL?this.resizeGroup.setAttribute(\"x\",`${-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER}`):this.resizeGroup.setAttribute(\"x\",`${c}`);super.setSize(a,b);this.onSizeChange()}getSize(){return super.getSize()}moveDuringDrag(a){super.moveDuringDrag(a);\nthis.onLocationChange()}setPositionRelativeToAnchor(a,b){super.setPositionRelativeToAnchor(a,b);this.onLocationChange()}positionByRect(a=new Rect$$module$build$src$core$utils$rect(0,0,0,0)){super.positionByRect(a);this.onLocationChange()}onResizePointerDown(a){this.bringToFront();isRightButton$$module$build$src$core$browser_events(a)||(start$$module$build$src$core$utils$drag(this.workspace,a,new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.getSize().width:this.getSize().width,\nthis.getSize().height)),this.resizePointerUpListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onResizePointerUp),this.resizePointerMoveListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",this,this.onResizePointerMove),this.workspace.hideChaff());a.stopPropagation()}onResizePointerUp(a){clearTouchIdentifier$$module$build$src$core$touch();this.resizePointerUpListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerUpListener),\nthis.resizePointerUpListener=null);this.resizePointerMoveListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerMoveListener),this.resizePointerMoveListener=null)}onResizePointerMove(a){a=move$$module$build$src$core$utils$drag(this.workspace,a);this.setSize(new Size$$module$build$src$core$utils$size(this.workspace.RTL?-a.x:a.x,a.y),!1);this.onSizeChange()}onSizeChange(){for(const a of this.sizeChangeListeners)a()}onLocationChange(){for(const a of this.locationChangeListeners)a()}getEditor(){return this.editor}};\nregister$$module$build$src$core$css(\"\\n.blocklyTextInputBubble .blocklyTextarea {\\n background-color: var(--commentFillColour);\\n border: 0;\\n box-sizing: border-box;\\n display: block;\\n outline: 0;\\n padding: 5px;\\n resize: none;\\n width: 100%;\\n height: 100%;\\n}\\n\");var module$build$src$core$bubbles$textinput_bubble={};module$build$src$core$bubbles$textinput_bubble.TextInputBubble=TextInputBubble$$module$build$src$core$bubbles$textinput_bubble;var ConnectionType$$module$build$src$core$connection_type;(function(a){a[a.INPUT_VALUE=1]=\"INPUT_VALUE\";a[a.OUTPUT_VALUE=2]=\"OUTPUT_VALUE\";a[a.NEXT_STATEMENT=3]=\"NEXT_STATEMENT\";a[a.PREVIOUS_STATEMENT=4]=\"PREVIOUS_STATEMENT\"})(ConnectionType$$module$build$src$core$connection_type||(ConnectionType$$module$build$src$core$connection_type={}));var module$build$src$core$connection_type={};module$build$src$core$connection_type.ConnectionType=ConnectionType$$module$build$src$core$connection_type;var ConnectionDB$$module$build$src$core$connection_db=class{constructor(a){this.connectionChecker=a;this.connections=[]}addConnection(a,b){b=this.calculateIndexForYPos(b);this.connections.splice(b,0,a)}findIndexOfConnection(a,b){if(!this.connections.length)return-1;const c=this.calculateIndexForYPos(b);if(c>=this.connections.length)return-1;b=a.y;let d=c;for(;d>=0&&this.connections[d].y===b;){if(this.connections[d]===a)return d;d--}for(d=c;da)c=d;else{b=d;break}}return b}removeConnection(a,b){a=this.findIndexOfConnection(a,b);if(a===-1)throw Error(\"Unable to find connection in connectionDB.\");this.connections.splice(a,1)}getNeighbours(a,b){function c(l){const m=e-d[l].x,n=f-d[l].y;Math.sqrt(m*m+n*n)<=b&&k.push(d[l]);\nreturn n=0&&c(a);)a--;do g++;while(g=0&&this.isInYRange(k,a.y,b);)h=this.connections[k],\nthis.connectionChecker.canConnect(a,h,!0,g)&&(c=h,g=h.distanceFrom(a)),k--;for(;fthis.fieldRow.length)throw Error(\"index \"+a+\" out of bounds.\");if(!(b||\nb===\"\"&&c))return a;typeof b===\"string\"&&(b=$.fromJson$$module$build$src$core$field_registry({type:\"field_label\",text:b}));b.setSourceBlock(this.sourceBlock);this.sourceBlock.initialized&&this.initField(b);b.name=c;b.setVisible(this.isVisible());b.prefixField&&(a=this.insertFieldAt(a,b.prefixField));this.fieldRow.splice(a,0,b);a++;b.suffixField&&(a=this.insertFieldAt(a,b.suffixField));this.sourceBlock.rendered&&this.sourceBlock.queueRender();return a}removeField(a,b){for(let c=0,d;d=this.fieldRow[c];c++)if(d.name===\na)return d.dispose(),this.fieldRow.splice(c,1),this.sourceBlock.rendered&&this.sourceBlock.queueRender(),!0;if(b)return!1;throw Error('Field \"'+a+'\" not found.');}isVisible(){return this.visible}setVisible(a){let b=[];if(this.visible===a)return b;this.visible=a;for(let c=0,d;d=this.fieldRow[c];c++)d.setVisible(a);if(this.connection&&this.connection instanceof RenderedConnection$$module$build$src$core$rendered_connection){a?b=this.connection.startTrackingAll():this.connection.stopTrackingAll();const c=\nthis.connection.targetBlock();c&&(c.getSvgRoot().style.display=a?\"block\":\"none\")}return b}markDirty(){for(let a=0,b;b=this.fieldRow[a];a++)b.markDirty()}setCheck(a){if(!this.connection)throw Error(\"This input does not have a connection.\");this.connection.setCheck(a);return this}setAlign(a){this.align=a;this.sourceBlock.rendered&&this.sourceBlock.queueRender();return this}setShadowDom(a){if(!this.connection)throw Error(\"This input does not have a connection.\");this.connection.setShadowDom(a);return this}getShadowDom(){if(!this.connection)throw Error(\"This input does not have a connection.\");\nreturn this.connection.getShadowDom()}init(){for(const a of this.fieldRow)a.init()}initModel(){for(const a of this.fieldRow)a.initModel()}initField(a){this.sourceBlock.rendered?a.init():a.initModel()}dispose(){for(let a=0,b;b=this.fieldRow[a];a++)b.dispose();this.connection&&this.connection.dispose()}makeConnection(a){return this.sourceBlock.makeConnection_(a)}},module$build$src$core$inputs$input={};module$build$src$core$inputs$input.Input=Input$$module$build$src$core$inputs$input;var DummyInput$$module$build$src$core$inputs$dummy_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.DUMMY}},module$build$src$core$inputs$dummy_input={};module$build$src$core$inputs$dummy_input.DummyInput=DummyInput$$module$build$src$core$inputs$dummy_input;var EndRowInput$$module$build$src$core$inputs$end_row_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.END_ROW}},module$build$src$core$inputs$end_row_input={};module$build$src$core$inputs$end_row_input.EndRowInput=EndRowInput$$module$build$src$core$inputs$end_row_input;var StatementInput$$module$build$src$core$inputs$statement_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){if(!a)throw Error(\"Statement inputs must have a non-empty name\");super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.STATEMENT;this.connection=this.makeConnection(ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT)}},module$build$src$core$inputs$statement_input={};\nmodule$build$src$core$inputs$statement_input.StatementInput=StatementInput$$module$build$src$core$inputs$statement_input;var module$build$src$core$inputs$value_input;$.ValueInput$$module$build$src$core$inputs$value_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){if(!a)throw Error(\"Value inputs must have a non-empty name\");super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.VALUE;this.connection=this.makeConnection(ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE)}};module$build$src$core$inputs$value_input={};\nmodule$build$src$core$inputs$value_input.ValueInput=$.ValueInput$$module$build$src$core$inputs$value_input;var module$build$src$core$interfaces$i_icon={};module$build$src$core$interfaces$i_icon.isIcon=isIcon$$module$build$src$core$interfaces$i_icon;var module$build$src$core$interfaces$i_comment_icon={};module$build$src$core$interfaces$i_comment_icon.isCommentIcon=isCommentIcon$$module$build$src$core$interfaces$i_comment_icon;var Block$$module$build$src$core$block=class{constructor(a,b,c){this.data=null;this.disposed=!1;this.hue=null;this.colour_=\"#000000\";this.styleName_=\"\";this.suppressPrefixSuffix=!1;this.previousConnection=this.nextConnection=this.outputConnection=null;this.inputList=[];this.icons=[];this.disabledReasons=new Set;this.tooltip=\"\";this.contextMenu=!0;this.parentBlock_=null;this.childBlocks_=[];this.editable=this.movable=this.deletable=!0;this.collapsed_=this.shadow=!1;this.outputShape_=null;this.rendered=\nthis.isInsertionMarker_=this.initialized=this.disposing=!1;this.onchangeWrapper=this.helpUrl=null;this.statementInputCount=0;this.workspace=a;this.id=c&&!a.getBlockById(c)?c:genUid$$module$build$src$core$utils$idgenerator();a.setBlockById(this.id,this);this.xy=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.isInFlyout=a.isFlyout;this.isInMutator=a.isMutator;this.RTL=a.RTL;if(b){this.type=b;c=Blocks$$module$build$src$core$blocks[b];if(!c||typeof c!==\"object\")throw TypeError(\"Invalid block definition for type: \"+\nb);Object.assign(this,c)}a.addTopBlock(this);a.addTypedBlock(this);new.target===Block$$module$build$src$core$block&&this.doInit_()}doInit_(){const a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);const b=getRecordUndo$$module$build$src$core$events$utils();try{typeof this.init===\"function\"&&($.setRecordUndo$$module$build$src$core$events$utils(!1),this.init(),$.setRecordUndo$$module$build$src$core$events$utils(b)),isEnabled$$module$build$src$core$events$utils()&&\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(this))}finally{$.setGroup$$module$build$src$core$events$utils(a),$.setRecordUndo$$module$build$src$core$events$utils(b)}this.inputsInlineDefault=this.inputsInline;typeof this.onchange===\"function\"&&this.setOnChange(this.onchange)}dispose(a=!1){this.disposing=!0;this.onchangeWrapper&&this.workspace.removeChangeListener(this.onchangeWrapper);this.unplug(a);\nisEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DELETE))(this));this.workspace.removeTopBlock(this);this.disposeInternal()}disposeInternal(){this.disposing=!0;this.onchangeWrapper&&this.workspace.removeChangeListener(this.onchangeWrapper);this.workspace.removeTypedBlock(this);this.workspace.removeBlockById(this.id);typeof this.destroy===\"function\"&&this.destroy();\nthis.childBlocks_.forEach(a=>a.disposeInternal());this.inputList.forEach(a=>a.dispose());this.inputList.length=0;this.getConnections_(!0).forEach(a=>a.dispose());this.disposed=!0}isDeadOrDying(){return this.disposing||this.disposed}initModel(){if(!this.initialized){for(const a of this.inputList)a.initModel();this.initialized=!0}}unplug(a){this.outputConnection&&this.unplugFromRow(a);this.previousConnection&&this.unplugFromStack(a)}unplugFromRow(a){let b=null,c;if((c=this.outputConnection)==null?0:\nc.isConnected())b=this.outputConnection.targetConnection,this.outputConnection.disconnect();b&&a&&(a=this.getOnlyValueConnection())&&a.isConnected()&&!a.targetBlock().isShadow()&&(a=a.targetConnection,a==null||a.disconnect(),this.workspace.connectionChecker.canConnect(a,b,!1)?b.connect(a):a==null||a.onFailedConnect(b))}getOnlyValueConnection(){let a=null;for(let b=0;b1)return!1;return!0}getMatchingConnection(a,\nb){const c=this.getConnections_(!0);a=a.getConnections_(!0);if(c.length!==a.length)throw Error(\"Connection lists did not match in length.\");for(let d=0;d{d=d+(c===\"(\"||e===\")\"?\"\":\" \")+e;c=e[e.length-1];return d},\"\");b=b.trim()||\"???\";a&&b.length>a&&(b=b.substring(0,a-3)+\"...\");return b}toTokens(a=\"?\"){const b=[];for(const d of this.inputList)if(d.name!=COLLAPSED_INPUT_NAME$$module$build$src$core$constants){for(const e of d.fieldRow)b.push(e.getText());if(d.connection){const e=d.connection.targetBlock();if(e){var c=d.connection;let f=c.getCheck();\n!f&&c.targetConnection&&(f=c.targetConnection.getCheck());(c=!!f&&(f.includes(\"Boolean\")||f.includes(\"Number\")))&&b.push(\"(\");b.push(...e.toTokens(a));c&&b.push(\")\")}else b.push(a)}}return b}appendValueInput(a){return this.appendInput(new $.ValueInput$$module$build$src$core$inputs$value_input(a,this))}appendStatementInput(a){this.statementInputCount++;return this.appendInput(new StatementInput$$module$build$src$core$inputs$statement_input(a,this))}appendDummyInput(a=\"\"){return this.appendInput(new DummyInput$$module$build$src$core$inputs$dummy_input(a,\nthis))}appendEndRowInput(a=\"\"){return this.appendInput(new EndRowInput$$module$build$src$core$inputs$end_row_input(a,this))}appendInput(a){this.inputList.push(a);return a}appendInputFromRegistry(a,b){return(a=getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.INPUT,a,!1))?this.appendInput(new a(b,this)):null}jsonInit(a){var b=a.type?'Block \"'+a.type+'\": ':\"\";if(a.output&&a.previousStatement)throw Error(b+\"Must not have both an output and a previousStatement.\");for(var c=\n0;a[\"args\"+c];){if(a[\"message\"+c]===void 0)throw Error(b+`args${c} must have a corresponding message (message${c}).`);c++}a.style&&a.style.hat&&(this.hat=a.style.hat,a.style=null);if(a.style&&a.colour)throw Error(b+\"Must not have both a colour and a style.\");a.style?this.jsonInitStyle(a,b):this.jsonInitColour(a,b);for(c=0;a[\"message\"+c]!==void 0;)this.interpolate(a[\"message\"+c],a[\"args\"+c]||[],a[\"implicitAlign\"+c]||a[\"lastDummyAlign\"+c],b),c++;a.inputsInline!==void 0&&($.disable$$module$build$src$core$events$utils(),\nthis.setInputsInline(a.inputsInline),$.enable$$module$build$src$core$events$utils());a.output!==void 0&&this.setOutput(!0,a.output);a.outputShape!==void 0&&this.setOutputShape(a.outputShape);a.previousStatement!==void 0&&this.setPreviousStatement(!0,a.previousStatement);a.nextStatement!==void 0&&this.setNextStatement(!0,a.nextStatement);a.tooltip!==void 0&&(c=replaceMessageReferences$$module$build$src$core$utils$parsing(a.tooltip),this.setTooltip(c));a.enableContextMenu!==void 0&&(this.contextMenu=\n!!a.enableContextMenu);a.suppressPrefixSuffix!==void 0&&(this.suppressPrefixSuffix=!!a.suppressPrefixSuffix);a.helpUrl!==void 0&&(c=replaceMessageReferences$$module$build$src$core$utils$parsing(a.helpUrl),this.setHelpUrl(c));typeof a.extensions===\"string\"&&(console.warn(b+\"JSON attribute 'extensions' should be an array of strings. Found raw string in JSON for '\"+a.type+\"' block.\"),a.extensions=[a.extensions]);a.mutator!==void 0&&apply$$module$build$src$core$extensions(a.mutator,this,!0);a=a.extensions;\nif(Array.isArray(a))for(b=0;bb)throw Error('Block \"'+this.type+'\": Message index %'+f+\" out of range.\");if(c[f])throw Error('Block \"'+this.type+'\": Message index %'+f+\" duplicated.\");c[f]=!0;d++}}if(d!==b)throw Error('Block \"'+this.type+'\": Message does not reference all '+b+\" arg(s).\");}interpolateArguments(a,b,c){const d=[];for(let f=0;f=this.inputList.length)throw RangeError(\"Input index \"+a+\" out of bounds.\");if(b>this.inputList.length)throw RangeError(\"Reference input \"+b+\" out of bounds.\");const c=this.inputList[a];this.inputList.splice(a,1);ab.getWeight()-c.getWeight());return a}removeIcon(a){if(!this.hasIcon(a))return!1;let b;(b=this.getIcon(a))==null||b.dispose();this.icons=this.icons.filter(c=>!c.getType().equals(a));return!0}hasIcon(a){return this.icons.some(b=>b.getType().equals(a))}getIcon(a){return a instanceof IconType$$module$build$src$core$icons$icon_types?\nthis.icons.find(b=>b.getType().equals(a)):this.icons.find(b=>b.getType().toString()===a)}getIcons(){return[...this.icons]}getRelativeToSurfaceXY(){return this.xy}moveBy(a,b,c){if(this.parentBlock_)throw Error(\"Block has parent\");const d=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this);c&&d.setReason(c);this.xy.translate(a,b);d.recordNew();fire$$module$build$src$core$events$utils(d)}makeConnection_(a){return new Connection$$module$build$src$core$connection(this,\na)}allInputsFilled(a){a===void 0&&(a=!0);if(!a&&this.isShadow())return!1;for(let c=0,d;d=this.inputList[c];c++)if(d.connection){var b=d.connection.targetBlock();if(!b||!b.allInputsFilled(a))return!1}return(b=this.getNextBlock())?b.allInputsFilled(a):!0}toDevString(){let a=this.type?'\"'+this.type+'\" block':\"Block\";this.id&&(a+=' (id=\"'+this.id+'\")');return a}};Block$$module$build$src$core$block.COLLAPSED_INPUT_NAME=COLLAPSED_INPUT_NAME$$module$build$src$core$constants;\nBlock$$module$build$src$core$block.COLLAPSED_FIELD_NAME=COLLAPSED_FIELD_NAME$$module$build$src$core$constants;var module$build$src$core$block={};module$build$src$core$block.Block=Block$$module$build$src$core$block;var disconnectPid$$module$build$src$core$block_animations=null,wobblingBlock$$module$build$src$core$block_animations=null,module$build$src$core$block_animations={};module$build$src$core$block_animations.connectionUiEffect=connectionUiEffect$$module$build$src$core$block_animations;module$build$src$core$block_animations.disconnectUiEffect=disconnectUiEffect$$module$build$src$core$block_animations;module$build$src$core$block_animations.disconnectUiStop=disconnectUiStop$$module$build$src$core$block_animations;\nmodule$build$src$core$block_animations.disposeUiEffect=disposeUiEffect$$module$build$src$core$block_animations;var BlockPaster$$module$build$src$core$clipboard$block_paster=class{paste(a,b,c){if(!b.isCapacityAvailable(a.typeCounts))return null;c&&(a.blockState.x=c.x,a.blockState.y=c.y);c=c||new Coordinate$$module$build$src$core$utils$coordinate(a.blockState.x||0,a.blockState.y||0);$.disable$$module$build$src$core$events$utils();let d;try{d=append$$module$build$src$core$serialization$blocks(a.blockState,b),moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster(d,c)}finally{$.enable$$module$build$src$core$events$utils()}if(!d)return d;\nisEnabled$$module$build$src$core$events$utils()&&!d.isShadow()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(d));const e=d;finishQueuedRenders$$module$build$src$core$render_management().then(()=>$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e));return d}};BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE=\"block\";\nregister$$module$build$src$core$clipboard$registry(BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE,new BlockPaster$$module$build$src$core$clipboard$block_paster);var module$build$src$core$clipboard$block_paster={};module$build$src$core$clipboard$block_paster.BlockPaster=BlockPaster$$module$build$src$core$clipboard$block_paster;module$build$src$core$clipboard$block_paster.moveBlockToNotConflict=moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster;var bumpIntoBounds$$module$build$src$core$bump_objects=bumpObjectIntoBounds$$module$build$src$core$bump_objects,module$build$src$core$bump_objects={};module$build$src$core$bump_objects.bumpIntoBounds=bumpObjectIntoBounds$$module$build$src$core$bump_objects;module$build$src$core$bump_objects.bumpIntoBoundsHandler=bumpIntoBoundsHandler$$module$build$src$core$bump_objects;module$build$src$core$bump_objects.bumpTopObjectsIntoBounds=bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects;var BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy=class{constructor(a){this.block=a;this.connectionPreviewer=this.connectionCandidate=this.startLoc=this.startChildConn=this.startParentConn=null;this.dragging=!1;this.dragOffset=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.originalEventGroup=\"\";this.workspace=a.workspace}isMovable(){if(this.block.isShadow()){let a,b;return(b=(a=this.block.getParent())==null?void 0:a.isMovable())!=null?b:!1}return this.block.isOwnMovable()&&\n!this.block.isDeadOrDying()&&!this.workspace.isReadOnly()&&!this.block.isInFlyout}startDrag(a){if(this.block.isShadow())this.startDraggingShadow(a);else{this.dragging=!0;this.fireDragStartEvent();this.startLoc=this.block.getRelativeToSurfaceXY();this.connectionCandidate=null;this.connectionPreviewer=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_PREVIEWER,this.workspace.options))(this.block);startTextWidthCache$$module$build$src$core$utils$dom();\nthis.workspace.setResizesEnabled(!1);disconnectUiStop$$module$build$src$core$block_animations();a=this.shouldHealStack(a);this.shouldDisconnect(a)&&this.disconnectBlock(a);this.block.setDragging(!0);var b;(b=this.workspace.getLayerManager())==null||b.moveToDragLayer(this.block)}}shouldHealStack(a){return!!a&&(a.altKey||a.ctrlKey||a.metaKey)}startDraggingShadow(a){const b=this.block.getParent();if(!b)throw Error(\"Tried to drag a shadow block with no parent. Shadow blocks should always have parents.\");\nthis.dragOffset=Coordinate$$module$build$src$core$utils$coordinate.difference(b.getRelativeToSurfaceXY(),this.block.getRelativeToSurfaceXY());b.startDrag(a)}shouldDisconnect(a){return!!(this.block.getParent()||a&&this.block.nextConnection&&this.block.nextConnection.targetBlock())}disconnectBlock(a){let b,c,d;this.startParentConn=(d=(b=this.block.outputConnection)==null?void 0:b.targetConnection)!=null?d:(c=this.block.previousConnection)==null?void 0:c.targetConnection;if(a){let e;this.startChildConn=\n(e=this.block.nextConnection)==null?void 0:e.targetConnection}this.block.unplug(a);disconnectUiEffect$$module$build$src$core$block_animations(this.block)}fireDragStartEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DRAG))(this.block,!0,this.block.getDescendants(!1));fire$$module$build$src$core$events$utils(a)}fireDragEndEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DRAG))(this.block,\n!1,this.block.getDescendants(!1));fire$$module$build$src$core$events$utils(a)}fireMoveEvent(){if(!this.block.isDeadOrDying()){var a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this.block);a.setReason([\"drag\"]);a.oldCoordinate=this.startLoc;a.recordNew();fire$$module$build$src$core$events$utils(a)}}drag(a){if(this.block.isShadow()){let b;(b=this.block.getParent())==null||b.drag(Coordinate$$module$build$src$core$utils$coordinate.sum(a,this.dragOffset))}else this.block.moveDuringDrag(a),\nthis.updateConnectionPreview(this.block,Coordinate$$module$build$src$core$utils$coordinate.difference(a,this.startLoc))}updateConnectionPreview(a,b){var c=this.connectionCandidate;const d=this.getConnectionCandidate(a,b);if(d){this.connectionCandidate=b=c&&this.currCandidateIsBetter(c,b,d)?c:d;var {local:e,neighbour:f}=b;b=e.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE||e.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT;var g;c=f.isConnected()&&\n!((g=f.targetBlock())==null?0:g.isInsertionMarker());if(b&&c&&!this.orphanCanConnectAtEnd(a,f.targetBlock(),e.type)){let k;(k=this.connectionPreviewer)==null||k.previewReplacement(e,f,f.targetBlock())}else{var h;(h=this.connectionPreviewer)==null||h.previewConnection(e,f)}}else{let k;(k=this.connectionPreviewer)==null||k.hidePreview();this.connectionCandidate=null}}orphanCanConnectAtEnd(a,b,c){return!!Connection$$module$build$src$core$connection.getConnectionForOrphanedConnection(a,c===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE?\nb.outputConnection:b.previousConnection)}currCandidateIsBetter(a,b,c){const {local:d,neighbour:e}=a;a=new Coordinate$$module$build$src$core$utils$coordinate(d.x,d.y);const f=new Coordinate$$module$build$src$core$utils$coordinate(e.x,e.y);b=Coordinate$$module$build$src$core$utils$coordinate.distance(Coordinate$$module$build$src$core$utils$coordinate.sum(a,b),f);return c.distance>b-$.config$$module$build$src$core$config.currentConnectionPreference}getConnectionCandidate(a,b){a=this.getLocalConnections(a);\nlet c=this.getSearchRadius(),d=null;for(const e of a){const {connection:f,radius:g}=e.closest(c,b);f&&(d={local:e,neighbour:f,distance:g},c=g)}return d}getSearchRadius(){return this.connectionCandidate?$.config$$module$build$src$core$config.connectingSnapRadius:$.config$$module$build$src$core$config.snapRadius}getLocalConnections(a){const b=a.getConnections_(!1),c=a.lastConnectionInStack(!0);c&&c!==a.nextConnection&&b.push(c);return b}endDrag(a){if(this.block.isShadow()){let c;(c=this.block.getParent())==\nnull||c.endDrag(a)}else{this.originalEventGroup=$.getGroup$$module$build$src$core$events$utils();this.fireDragEndEvent();this.fireMoveEvent();stopTextWidthCache$$module$build$src$core$utils$dom();disconnectUiStop$$module$build$src$core$block_animations();var b;(b=this.connectionPreviewer)==null||b.hidePreview();if(!this.block.isDeadOrDying()&&this.dragging){let c;(c=this.workspace.getLayerManager())==null||c.moveOffDragLayer(this.block,BLOCK$$module$build$src$core$layers);this.block.setDragging(!1)}this.connectionCandidate?\n(this.applyConnections(this.connectionCandidate),this.disposeStep()):this.block.queueRender().then(()=>this.disposeStep())}}disposeStep(){const a=$.getGroup$$module$build$src$core$events$utils();$.setGroup$$module$build$src$core$events$utils(this.originalEventGroup);this.block.snapToGrid();let b;(b=this.connectionPreviewer)==null||b.dispose();this.workspace.setResizesEnabled(!0);$.setGroup$$module$build$src$core$events$utils(a)}applyConnections(a){const {local:b,neighbour:c}=a;b.connect(c);const d=\nb.isSuperior()?c:b,e=this.block.getRootBlock();finishQueuedRenders$$module$build$src$core$render_management().then(()=>{connectionUiEffect$$module$build$src$core$block_animations(d.getSourceBlock());setTimeout(()=>{e.bringToFront()},0)})}revertDrag(){if(this.block.isShadow()){let c;(c=this.block.getParent())==null||c.revertDrag()}else{var a;(a=this.connectionPreviewer)==null||a.hidePreview();this.connectionCandidate=null;var b;(b=this.startChildConn)==null||b.connect(this.block.nextConnection);if(this.startParentConn)switch(this.startParentConn.type){case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:this.startParentConn.connect(this.block.outputConnection);\nbreak;case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:this.startParentConn.connect(this.block.previousConnection)}else{this.block.moveTo(this.startLoc,[\"drag\"]);let c;(c=this.workspace.getLayerManager())==null||c.moveOffDragLayer(this.block,BLOCK$$module$build$src$core$layers);bumpObjectIntoBounds$$module$build$src$core$bump_objects(this.workspace,this.workspace.getMetricsManager().getScrollMetrics(!0),this.block)}this.startParentConn=this.startChildConn=null;this.block.setDragging(!1);\nthis.dragging=!1}}},module$build$src$core$dragging$block_drag_strategy={};module$build$src$core$dragging$block_drag_strategy.BlockDragStrategy=BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy;var TextBubble$$module$build$src$core$bubbles$text_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(b,c,d);this.text=a;this.workspace=b;this.anchor=c;this.ownerRect=d;this.paragraph=this.stringToSvg(a,this.contentContainer);this.updateBubbleSize();addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyTextBubble\")}getText(){return this.text}setText(a){this.text=a;removeNode$$module$build$src$core$utils$dom(this.paragraph);this.paragraph=this.stringToSvg(a,\nthis.contentContainer);this.updateBubbleSize()}stringToSvg(a,b){b=this.createParagraph(b);a=this.createTextFragments(b,a);this.workspace.RTL&&this.rightAlignTextFragments(b.getBBox().width,a);return b}createParagraph(a){return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyText blocklyBubbleText blocklyNoPointerEvents\",transform:`translate(0,${Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH})`,style:`direction: ${this.workspace.RTL?\n\"rtl\":\"ltr\"}`},a)}createTextFragments(a,b){let c=1;return b.split(\"\\n\").map(d=>{const e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,{y:`${c}em`,x:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},a);d=document.createTextNode(d);e.appendChild(d);c+=1;return e})}rightAlignTextFragments(a,b){for(const c of b)c.setAttribute(\"text-anchor\",\"start\"),c.setAttribute(\"x\",`${a+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH}`)}updateBubbleSize(){const a=\nthis.paragraph.getBBox();this.setSize(new Size$$module$build$src$core$utils$size(a.width+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2,a.height+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2),!0)}},module$build$src$core$bubbles$text_bubble={};module$build$src$core$bubbles$text_bubble.TextBubble=TextBubble$$module$build$src$core$bubbles$text_bubble;var SIZE$$module$build$src$core$icons$warning_icon=17,WarningIcon$$module$build$src$core$icons$warning_icon=class extends Icon$$module$build$src$core$icons$icon{constructor(a){super(a);this.sourceBlock=a;this.textMap=new Map;this.textBubble=null}getType(){return WarningIcon$$module$build$src$core$icons$warning_icon.TYPE}initView(a){this.svgRoot||(super.initView(a),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconShape\",d:\"M2,15Q-1,15 0.5,12L6.5,1.7Q8,-1 9.5,1.7L15.5,12Q17,15 14,15z\"},\nthis.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconSymbol\",d:\"m7,4.8v3.16l0.27,2.27h1.46l0.27,-2.27v-3.16z\"},this.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyIconSymbol\",x:\"7\",y:\"11\",height:\"2\",width:\"2\"},this.svgRoot),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyWarningIcon\"))}dispose(){super.dispose();let a;(a=this.textBubble)==null||\na.dispose()}getWeight(){return WarningIcon$$module$build$src$core$icons$warning_icon.WEIGHT}getSize(){return new Size$$module$build$src$core$utils$size(SIZE$$module$build$src$core$icons$warning_icon,SIZE$$module$build$src$core$icons$warning_icon)}applyColour(){super.applyColour();let a;(a=this.textBubble)==null||a.setColour(this.sourceBlock.getColour())}updateCollapsed(){}isShownWhenCollapsed(){return!0}onLocationChange(a){super.onLocationChange(a);let b;(b=this.textBubble)==null||b.setAnchorLocation(this.getAnchorLocation())}addMessage(a,\nb){if(this.textMap.get(b)===a)return this;a?this.textMap.set(b,a):this.textMap.delete(b);let c;(c=this.textBubble)==null||c.setText(this.getText());return this}getText(){return[...this.textMap.values()].join(\"\\n\")}onClick(){super.onClick();this.setBubbleVisible(!this.bubbleIsVisible())}isClickableInFlyout(){return!1}bubbleIsVisible(){return!!this.textBubble}setBubbleVisible(a){const b=this;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){if(b.bubbleIsVisible()!==a){yield finishQueuedRenders$$module$build$src$core$render_management();\nif(a)b.textBubble=new TextBubble$$module$build$src$core$bubbles$text_bubble(b.getText(),b.sourceBlock.workspace,b.getAnchorLocation(),b.getBubbleOwnerRect()),b.applyColour();else{let c;(c=b.textBubble)==null||c.dispose();b.textBubble=null}fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BUBBLE_OPEN))(b.sourceBlock,a,\"warning\"))}})}getBubble(){return this.textBubble}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$warning_icon/\n2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,new Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){const a=this.sourceBlock.getSvgRoot().getBBox();return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}};WarningIcon$$module$build$src$core$icons$warning_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.WARNING;WarningIcon$$module$build$src$core$icons$warning_icon.WEIGHT=2;\nvar module$build$src$core$icons$warning_icon={};module$build$src$core$icons$warning_icon.WarningIcon=WarningIcon$$module$build$src$core$icons$warning_icon;var BlockSvg$$module$build$src$core$block_svg=class extends Block$$module$build$src$core$block{constructor(a,b,c){super(a,b,c);this.childlessWidth=this.width=this.height=0;this.warningTextDb=new Map;this.mutator=null;this.rendered=!0;this.visuallyDisabled=!1;this.translation=\"\";this.dragging=!1;this.relativeCoords=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.dragStrategy=new BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy(this);if(!a.rendered)throw TypeError(\"Cannot create a rendered block in a headless workspace\");\nthis.workspace=a;this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});b&&addClass$$module$build$src$core$utils$dom(this.svgGroup,b);this.style=a.getRenderer().getConstants().getBlockStyle(null);this.pathObject=a.getRenderer().makePathObject(this.svgGroup,this.style);a=this.pathObject.svgPath;a.tooltip=this;bindMouseEvents$$module$build$src$core$tooltip(a);this.svgGroup.setAttribute(\"data-id\",this.id);a.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();\nthis.doInit_()}initSvg(){if(!this.initialized){for(var a of this.inputList)a.init();for(const b of this.getIcons())b.initView(this.createIconPointerDownListener(b)),b.updateEditable();this.applyColour();this.pathObject.updateMovable(this.isMovable()||this.isInFlyout);(a=this.getSvgRoot())&&conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onMouseDown);a.parentNode||this.workspace.getCanvas().appendChild(a);this.initialized=!0}}getColourSecondary(){return this.style.colourSecondary}getColourTertiary(){return this.style.colourTertiary}select(){this.addSelect();\nfireSelectedEvent$$module$build$src$core$common(this)}unselect(){this.removeSelect();fireSelectedEvent$$module$build$src$core$common(null)}setParent(a){var b=this.parentBlock_;if(a!==b){startTextWidthCache$$module$build$src$core$utils$dom();super.setParent(a);stopTextWidthCache$$module$build$src$core$utils$dom();var c=this.getSvgRoot();if(!this.workspace.isClearing&&c){var d=this.getRelativeToSurfaceXY(),e=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode(),f,g=this.getSvgRoot().contains((f=\ne==null?void 0:e.getFocusableElement())!=null?f:null);a?(a.getSvgRoot().appendChild(c),g&&e&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e)):b&&(a=this.workspace.getCanvas().querySelector(\".blocklyDragging\"),b=a==null?void 0:a.parentElement,f=this.workspace.getCanvas(),b===f?f.insertBefore(c,a):(f.appendChild(c),g&&e&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e)),this.translate(d.x,d.y));this.applyColour()}}}getRelativeToSurfaceXY(){const a=this.workspace.getLayerManager();\nif(!a)throw Error(\"Cannot calculate position because the workspace has not been appended\");let b=0,c=0,d=this.getSvgRoot();if(d){do{const e=getRelativeXY$$module$build$src$core$utils$svg_math(d);b+=e.x;c+=e.y;d=d.parentNode}while(d&&!a.hasLayer(d))}return new Coordinate$$module$build$src$core$utils$coordinate(b,c)}moveBy(a,b,c){if(this.parentBlock_)throw Error(\"Block has parent\");const d=isEnabled$$module$build$src$core$events$utils();let e=null;d&&(e=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this),\nc&&e.setReason(c));a=new Coordinate$$module$build$src$core$utils$coordinate(a,b);b=this.getRelativeToSurfaceXY();a=Coordinate$$module$build$src$core$utils$coordinate.sum(b,a);this.translate(a.x,a.y);this.updateComponentLocations(a);d&&e&&(e.recordNew(),fire$$module$build$src$core$events$utils(e));this.workspace.resizeContents()}translate(a,b){this.translation=`translate(${a}, ${b})`;this.relativeCoords=new Coordinate$$module$build$src$core$utils$coordinate(a,b);this.getSvgRoot().setAttribute(\"transform\",\nthis.getTranslation())}getTranslation(){return this.translation}moveTo(a,b){const c=this.getRelativeToSurfaceXY();this.moveBy(a.x-c.x,a.y-c.y,b)}moveDuringDrag(a){this.translate(a.x,a.y);this.getSvgRoot().setAttribute(\"transform\",this.getTranslation());this.updateComponentLocations(a)}snapToGrid(){if(!this.isDeadOrDying()&&!this.getParent()&&!this.isInFlyout){var a=this.workspace.getGrid();if(a!=null&&a.shouldSnap()){var b=this.getRelativeToSurfaceXY();a=a.alignXY(b);a!==b&&this.moveTo(a,[\"snap\"])}}}getBoundingRectangle(){return this.getBoundingRectangleWithDimensions(this.getHeightWidth())}getBoundingRectangleWithoutChildren(){return this.getBoundingRectangleWithDimensions({height:this.height,\nwidth:this.childlessWidth})}getBoundingRectangleWithDimensions(a){const b=this.getRelativeToSurfaceXY();let c,d;this.RTL?(c=b.x-a.width,d=b.x):(c=b.x,d=b.x+a.width);return new Rect$$module$build$src$core$utils$rect(b.y,b.y+a.height,c,d)}markDirty(){this.pathObject.constants=this.workspace.getRenderer().getConstants();for(let a=0,b;b=this.inputList[a];a++)b.markDirty()}setCollapsed(a){this.collapsed_!==a&&(super.setCollapsed(a),this.updateCollapsed())}childHasWarning(){const a=this.getChildren(!1);\nfor(const b of a)if(b.getIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE)||b.childHasWarning())return!0;return!1}updateCollapsed(){var a=this.isCollapsed();const b=COLLAPSED_INPUT_NAME$$module$build$src$core$constants,c=COLLAPSED_FIELD_NAME$$module$build$src$core$constants;for(let e=0,f;f=this.inputList[e];e++)f.name!==b&&f.setVisible(!a);for(var d of this.getIcons())d.updateCollapsed();a?(addClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyCollapsed\"),this.childHasWarning()&&\nthis.setWarningText($.Msg$$module$build$src$core$msg.COLLAPSED_WARNINGS_WARNING,BlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID),a=this.toString(COLLAPSE_CHARS$$module$build$src$core$internal_constants),(d=this.getField(c))?d.setValue(a):(this.getInput(b)||this.appendDummyInput(b)).appendField(new FieldLabel$$module$build$src$core$field_label(a),c)):(this.updateDisabled(),this.removeInput(b),removeClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyCollapsed\"),this.setWarningText(null,\nBlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID))}onMouseDown(a){if(!this.workspace.isReadOnly()){var b=this.workspace.getGesture(a);b&&b.handleBlockStart(a,this)}}showHelp(){const a=typeof this.helpUrl===\"function\"?this.helpUrl():this.helpUrl;a&&window.open(a)}generateContextMenu(a){if(this.workspace.isReadOnly()||!this.contextMenu)return null;a=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({block:this,focusedNode:this},a);this.customContextMenu&&\nthis.customContextMenu(a);return a}calculateContextMenuLocation(a){if(a instanceof PointerEvent)return new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY);a=wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this.workspace,this.getRelativeToSurfaceXY());let b,c;const d=(b=this.inputList.filter(e=>e.isVisible()).flatMap(e=>e.fieldRow).find(e=>e.isVisible()))==null?void 0:(c=b.getSvgRoot())==null?void 0:c.getBoundingClientRect();return new Coordinate$$module$build$src$core$utils$coordinate(this.RTL?\na.x-5:a.x+5,(d&&d.height?d.y+d.height:a.y+this.height)+5)}showContextMenu(a){const b=this.generateContextMenu(a),c=this.calculateContextMenuLocation(a);b&&b.length&&(show$$module$build$src$core$contextmenu(a,b,this.RTL,this.workspace,c),setCurrentBlock$$module$build$src$core$contextmenu(this))}updateComponentLocations(a){this.dragging||this.updateConnectionLocations(a);this.updateIconLocations(a);this.updateFieldLocations(a);for(const b of this.getChildren(!1))b.updateComponentLocations(Coordinate$$module$build$src$core$utils$coordinate.sum(a,\nb.relativeCoords))}updateConnectionLocations(a){for(const b of this.getConnections_(!1))b.moveToOffset(a)}updateIconLocations(a){for(const b of this.getIcons())b.onLocationChange(a)}updateFieldLocations(a){for(const b of this.inputList)for(const c of b.fieldRow)c.onLocationChange(a)}addClass(a){addClass$$module$build$src$core$utils$dom(this.svgGroup,a)}removeClass(a){removeClass$$module$build$src$core$utils$dom(this.svgGroup,a)}setDragging(a){(this.dragging=a)?(this.translation=\"\",draggingConnections$$module$build$src$core$common.push(...this.getConnections_(!0)),\nthis.addClass(\"blocklyDragging\")):(draggingConnections$$module$build$src$core$common.length=0,this.removeClass(\"blocklyDragging\"));for(let b=0;bc.focusTree(this.workspace),0)}b&&(this.unplug(a),disposeUiEffect$$module$build$src$core$block_animations(this));super.dispose(!!a);\nremoveNode$$module$build$src$core$utils$dom(this.svgGroup)}disposeInternal(){this.disposing=!0;super.disposeInternal();$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===this&&this.workspace.cancelCurrentGesture();[...this.warningTextDb.values()].forEach(a=>clearTimeout(a));this.warningTextDb.clear();this.getIcons().forEach(a=>a.dispose())}checkAndDelete(){this.workspace.isFlyout||($.setGroup$$module$build$src$core$events$utils(!0),this.workspace.hideChaff(),this.outputConnection?\nthis.dispose(!1,!0):this.dispose(!0,!0),$.setGroup$$module$build$src$core$events$utils(!1))}toCopyData(a=!1){return this.isInsertionMarker_?null:{paster:BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE,blockState:save$$module$build$src$core$serialization$blocks(this,{addCoordinates:!0,addNextBlocks:a,saveIds:!1}),typeCounts:getBlockTypeCounts$$module$build$src$core$common(this,!0)}}applyColour(){var a,b;(b=(a=this.pathObject).applyColour)==null||b.call(a,this);a=this.getIcons();for(b=\n0;b{this.isDeadOrDying()||(this.warningTextDb.delete(b),this.setWarningText(a,b))},100));else if(this.isInFlyout&&(a=null),c=this.getIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE),a){let d=this.getSurroundParent(),e=null;for(;d;)d.isCollapsed()&&(e=d),d=d.getSurroundParent();e&&e.setWarningText($.Msg$$module$build$src$core$msg.COLLAPSED_WARNINGS_WARNING,BlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID);\nc?c.addMessage(a,b):this.addIcon((new WarningIcon$$module$build$src$core$icons$warning_icon(this)).addMessage(a,b))}else c&&(b?(c.addMessage(\"\",b),c.getText()||this.removeIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE)):this.removeIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE))}setMutator(a){this.removeIcon($.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE);a&&this.addIcon(a)}addIcon(a){super.addIcon(a);a instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&\n(this.mutator=a);a.initView(this.createIconPointerDownListener(a));a.applyColour();a.updateEditable();this.queueRender();return a}createIconPointerDownListener(a){return b=>{this.isDeadOrDying()||(b=this.workspace.getGesture(b))&&b.setStartIcon(a)}}removeIcon(a){const b=super.removeIcon(a);a.equals($.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE)&&(this.mutator=null);this.queueRender();return b}setDisabledReason(a,b){const c=this.isEnabled();super.setDisabledReason(a,b);this.isEnabled()===\nc||this.getInheritedDisabled()||this.updateDisabled()}setDeletable(a){super.setDeletable(a);a?removeClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyNotDeletable\"):addClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyNotDeletable\")}setHighlighted(a){this.pathObject.updateHighlighted(a)}addSelect(){this.pathObject.updateSelected(!0)}removeSelect(){this.pathObject.updateSelected(!1)}setDeleteStyle(a){this.pathObject.updateDraggingDelete(a)}getColour(){return this.style.colourPrimary}setColour(a){super.setColour(a);\na=this.workspace.getRenderer().getConstants().getBlockStyleForColour(this.colour_);let b,c;(c=(b=this.pathObject).setStyle)==null||c.call(b,a.style);this.style=a.style;this.styleName_=a.name;this.applyColour()}setStyle(a){const b=this.workspace.getRenderer().getConstants().getBlockStyle(a);this.styleName_&&removeClass$$module$build$src$core$utils$dom(this.svgGroup,this.styleName_);if(b){this.hat=b.hat;let c,d;(d=(c=this.pathObject).setStyle)==null||d.call(c,b);this.colour_=b.colourPrimary;this.style=\nb;this.applyColour();addClass$$module$build$src$core$utils$dom(this.svgGroup,a);this.styleName_=a}else throw Error(\"Invalid style name: \"+a);}getStyle(){return this.style}bringToFront(a=!1){const b=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode();let c=this;if(!c.isDeadOrDying()){do{const d=c.getSvgRoot(),e=d.parentNode,f=e.childNodes;f[f.length-1]!==d&&e.appendChild(d);if(a)break;c=c.getParent()}while(c);b&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b)}}setPreviousStatement(a,\nb){super.setPreviousStatement(a,b);this.queueRender()}setNextStatement(a,b){super.setNextStatement(a,b);this.queueRender()}setOutput(a,b){super.setOutput(a,b);this.queueRender()}setInputsInline(a){super.setInputsInline(a);this.queueRender()}removeInput(a,b){a=super.removeInput(a,b);this.queueRender();return a}moveNumberedInputBefore(a,b){super.moveNumberedInputBefore(a,b);this.queueRender()}appendInput(a){super.appendInput(a);this.queueRender();return a}setConnectionTracking(a){this.previousConnection&&\nthis.previousConnection.setTracking(a);this.outputConnection&&this.outputConnection.setTracking(a);if(this.nextConnection){this.nextConnection.setTracking(a);var b=this.nextConnection.targetBlock();b&&b.setConnectionTracking(a)}if(!this.collapsed_)for(b=0;bd.getElement()===a);if(c===-1)return null;c++;c>=b.length&&(c=0);return b[c].getElement()}getPreviousSibling(a){const b=this.flyout.getContents();if(!b)return null;let c=b.findIndex(d=>d.getElement()===\na);if(c===-1)return null;c--;c<0&&(c=b.length-1);return b[c].getElement()}isNavigable(a){return this.policy.isNavigable(a)}isApplicable(a){return this.policy.isApplicable(a)}},module$build$src$core$keyboard_nav$flyout_navigation_policy={};module$build$src$core$keyboard_nav$flyout_navigation_policy.FlyoutNavigationPolicy=FlyoutNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_navigation_policy;var FlyoutSeparator$$module$build$src$core$flyout_separator=class{constructor(a,b){this.gap=a;this.axis=b;this.y=this.x=0}getBoundingRectangle(){switch(this.axis){case \"x\":return new Rect$$module$build$src$core$utils$rect(this.y,this.y,this.x,this.x+this.gap);case \"y\":return new Rect$$module$build$src$core$utils$rect(this.y,this.y+this.gap,this.x,this.x)}}moveBy(a,b,c){this.x+=a;this.y+=b}isNavigable(){return!1}getFocusableElement(){throw Error(\"Cannot be focused\");}getFocusableTree(){throw Error(\"Cannot be focused\");\n}onNodeFocus(){}onNodeBlur(){}canBeFocused(){return!1}},module$build$src$core$flyout_separator={};module$build$src$core$flyout_separator.FlyoutSeparator=FlyoutSeparator$$module$build$src$core$flyout_separator;var FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy=class{getFirstChild(a){return null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return!1}isApplicable(a){return a instanceof FlyoutSeparator$$module$build$src$core$flyout_separator}},module$build$src$core$keyboard_nav$flyout_separator_navigation_policy={};\nmodule$build$src$core$keyboard_nav$flyout_separator_navigation_policy.FlyoutSeparatorNavigationPolicy=FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy;var BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy=class{getFirstChild(a){return a.getEditor()}getParent(a){let b;return(b=a.getOwner())!=null?b:null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof TextInputBubble$$module$build$src$core$bubbles$textinput_bubble}},module$build$src$core$keyboard_nav$block_comment_navigation_policy={};\nmodule$build$src$core$keyboard_nav$block_comment_navigation_policy.BlockCommentNavigationPolicy=BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy;var BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy=class{getFirstChild(a){return getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy(a,!0)[0]}getParent(a){var b;if((b=a.previousConnection)==null?0:b.targetBlock()){if(b=a.getSurroundParent())return b}else{let c;if((c=a.outputConnection)==null?0:c.targetBlock())return a.outputConnection.targetBlock()}return a.workspace}getNextSibling(a){let b;if((b=a.nextConnection)==null?0:b.targetBlock()){let d;\nreturn(d=a.nextConnection)==null?void 0:d.targetBlock()}let c;return((c=a.outputConnection)==null?0:c.targetBlock())?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1):a.getSurroundParent()?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a.getTopStackBlock(),1):this.getParent(a)instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1):null}getPreviousSibling(a){let b;\nif((b=a.previousConnection)==null?0:b.targetBlock()){let d;return(d=a.previousConnection)==null?void 0:d.targetBlock()}let c;return((c=a.outputConnection)==null?0:c.targetBlock())?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1):this.getParent(a)instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1):null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof BlockSvg$$module$build$src$core$block_svg}},\nmodule$build$src$core$keyboard_nav$block_navigation_policy={};module$build$src$core$keyboard_nav$block_navigation_policy.BlockNavigationPolicy=BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy;module$build$src$core$keyboard_nav$block_navigation_policy.navigateBlock=navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy;module$build$src$core$keyboard_nav$block_navigation_policy.navigateStacks=navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy;var CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy=class{getFirstChild(a){return null}getParent(a){return a.getCommentView().workspace.getCommentById(a.getCommentView().commentId)}getNextSibling(a){const b=a.getCommentView().getCommentBarButtons();a=b.indexOf(a);return a>=0&&a+10?b[a-1]:null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof\nCommentBarButton$$module$build$src$core$comments$comment_bar_button}},module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy={};module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy.CommentBarButtonNavigationPolicy=CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy;var CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy=class{getFirstChild(a){return null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof CommentEditor$$module$build$src$core$comments$comment_editor}},module$build$src$core$keyboard_nav$comment_editor_navigation_policy={};\nmodule$build$src$core$keyboard_nav$comment_editor_navigation_policy.CommentEditorNavigationPolicy=CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy;var ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy=class{getFirstChild(a){return a.getParentInput()?a.targetConnection:null}getParent(a){return a.getSourceBlock()}getNextSibling(a){if(a.getParentInput())return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1);if(a.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT){const c=a.targetConnection;var b=a.getSourceBlock();if(!c&&b.getRootBlock().lastConnectionInStack(!1)===\na){a=b.workspace.getTopBlocks(!0);b=a.indexOf(b.getRootBlock())+1;b>=a.length&&(b=0);b=a[b];let d;return(d=this.getParentConnection(b))!=null?d:b}return c}return a.getSourceBlock()}getPreviousSibling(a){if(a.getParentInput())return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1);if(a.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||a.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE){const c=a.targetConnection&&\n!a.targetConnection.getParentInput()?a.targetConnection:null;var b=a.getSourceBlock();if(!c&&this.getParentConnection(b.getRootBlock())===a){a=b.workspace.getTopBlocks(!0);b=a.indexOf(b.getRootBlock())-1;b<0&&(b=a.length-1);b=a[b];let d;return(d=b.lastConnectionInStack(!1))!=null?d:b}return c}return a.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT?a.getSourceBlock():null}getParentConnection(a){let b;return!a.outputConnection||((b=a.previousConnection)==null?0:b.isConnected())?\na.previousConnection:a.outputConnection}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof RenderedConnection$$module$build$src$core$rendered_connection}},module$build$src$core$keyboard_nav$connection_navigation_policy={};module$build$src$core$keyboard_nav$connection_navigation_policy.ConnectionNavigationPolicy=ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy;var FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy=class{getFirstChild(a){return null}getParent(a){return a.getSourceBlock()}getNextSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){let b;return a.canBeFocused()&&a.isVisible()&&(a.isClickable()||a.isCurrentlyEditable())&&!(((b=a.getSourceBlock())==\nnull?0:b.isSimpleReporter())&&a.isFullBlockField())&&a.getParentInput().isVisible()}isApplicable(a){return a instanceof Field$$module$build$src$core$field}},module$build$src$core$keyboard_nav$field_navigation_policy={};module$build$src$core$keyboard_nav$field_navigation_policy.FieldNavigationPolicy=FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy;var module$build$src$core$icons$registry={};module$build$src$core$icons$registry.register=register$$module$build$src$core$icons$registry;module$build$src$core$icons$registry.unregister=unregister$$module$build$src$core$icons$registry;var SIZE$$module$build$src$core$icons$comment_icon=17,DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon=160,DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon=80,CommentIcon$$module$build$src$core$icons$comment_icon=class extends Icon$$module$build$src$core$icons$icon{constructor(a){super(a);this.sourceBlock=a;this.textInputBubble=null;this.text=\"\";this.bubbleSize=new Size$$module$build$src$core$utils$size(DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon,DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon);\nthis.bubbleVisiblity=!1}getType(){return CommentIcon$$module$build$src$core$icons$comment_icon.TYPE}initView(a){this.svgRoot||(super.initView(a),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CIRCLE,{\"class\":\"blocklyIconShape\",r:\"8\",cx:\"8\",cy:\"8\"},this.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconSymbol\",d:\"m6.8,10h2c0.003,-0.617 0.271,-0.962 0.633,-1.266 2.875,-2.4050.607,-5.534 -3.765,-3.874v1.7c3.12,-1.657 3.698,0.118 2.336,1.25-1.201,0.998 -1.201,1.528 -1.204,2.19z\"},\nthis.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyIconSymbol\",x:\"6.8\",y:\"10.78\",height:\"2\",width:\"2\"},this.svgRoot),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCommentIcon\"))}dispose(){super.dispose();let a;(a=this.textInputBubble)==null||a.dispose()}getWeight(){return CommentIcon$$module$build$src$core$icons$comment_icon.WEIGHT}getSize(){return new Size$$module$build$src$core$utils$size(SIZE$$module$build$src$core$icons$comment_icon,\nSIZE$$module$build$src$core$icons$comment_icon)}applyColour(){super.applyColour();const a=this.sourceBlock.getColour();let b;(b=this.textInputBubble)==null||b.setColour(a)}updateEditable(){const a=this,b=()=>super.updateEditable;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){b().call(a);a.bubbleIsVisible()&&(yield a.setBubbleVisible(!1),yield a.setBubbleVisible(!0))})}onLocationChange(a){const b=this.workspaceLocation;super.onLocationChange(a);this.bubbleLocation&&(a=Coordinate$$module$build$src$core$utils$coordinate.difference(this.workspaceLocation,\nb),this.bubbleLocation=Coordinate$$module$build$src$core$utils$coordinate.sum(this.bubbleLocation,a));a=this.getAnchorLocation();let c;(c=this.textInputBubble)==null||c.setAnchorLocation(a)}setText(a){const b=this.text;fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\"comment\",null,b,a));this.text=a;let c;(c=this.textInputBubble)==null||c.setText(this.text)}getText(){return this.text}setBubbleSize(a){this.bubbleSize=\na;let b;(b=this.textInputBubble)==null||b.setSize(this.bubbleSize,!0)}getBubbleSize(){return this.bubbleSize}setBubbleLocation(a){this.bubbleLocation=a;let b;(b=this.textInputBubble)==null||b.moveDuringDrag(a)}getBubbleLocation(){return this.bubbleLocation}saveState(){if(this.text){const a={text:this.text,pinned:this.bubbleIsVisible(),height:this.bubbleSize.height,width:this.bubbleSize.width},b=this.getBubbleLocation();b&&(a.x=this.sourceBlock.workspace.RTL?this.sourceBlock.workspace.getWidth()-(b.x+\nthis.bubbleSize.width):b.x,a.y=b.y);return a}return null}loadState(a){let b;this.text=(b=a.text)!=null?b:\"\";let c,d;this.bubbleSize=new Size$$module$build$src$core$utils$size((c=a.width)!=null?c:DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon,(d=a.height)!=null?d:DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon);let e;this.bubbleVisiblity=(e=a.pinned)!=null?e:!1;this.setBubbleVisible(this.bubbleVisiblity);let f=a.x;const g=a.y;finishQueuedRenders$$module$build$src$core$render_management().then(()=>\n{f&&g&&(f=this.sourceBlock.workspace.RTL?this.sourceBlock.workspace.getWidth()-(f+this.bubbleSize.width):f,this.setBubbleLocation(new Coordinate$$module$build$src$core$utils$coordinate(f,g)))})}onClick(){super.onClick();this.setBubbleVisible(!this.bubbleIsVisible())}isClickableInFlyout(){return!1}onTextChange(){if(this.textInputBubble){var a=this.textInputBubble.getText();this.text!==a&&(fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\n\"comment\",null,this.text,a)),this.text=a)}}onSizeChange(){this.textInputBubble&&(this.bubbleSize=this.textInputBubble.getSize())}onBubbleLocationChange(){this.textInputBubble&&(this.bubbleLocation=this.textInputBubble.getRelativeToSurfaceXY())}bubbleIsVisible(){return this.bubbleVisiblity}setBubbleVisible(a){const b=this;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){b.bubbleVisiblity!==a&&(b.bubbleVisiblity=a,yield finishQueuedRenders$$module$build$src$core$render_management(),\n!b.sourceBlock.rendered||b.sourceBlock.isInFlyout||b.sourceBlock.isInsertionMarker()||(a?(b.sourceBlock.isEditable()?b.showEditableBubble():b.showNonEditableBubble(),b.applyColour()):b.hideBubble(),fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BUBBLE_OPEN))(b.sourceBlock,a,\"comment\"))))})}getBubble(){return this.textInputBubble}showEditableBubble(){this.createBubble();let a;(a=this.textInputBubble)==null||a.addTextChangeListener(()=>\nthis.onTextChange());let b;(b=this.textInputBubble)==null||b.addSizeChangeListener(()=>this.onSizeChange())}showNonEditableBubble(){this.createBubble();let a;(a=this.textInputBubble)==null||a.setEditable(!1)}createBubble(){this.textInputBubble=new TextInputBubble$$module$build$src$core$bubbles$textinput_bubble(this.sourceBlock.workspace,this.getAnchorLocation(),this.getBubbleOwnerRect(),this);this.textInputBubble.setText(this.getText());this.textInputBubble.setSize(this.bubbleSize,!0);this.bubbleLocation&&\nthis.textInputBubble.moveDuringDrag(this.bubbleLocation);this.textInputBubble.addTextChangeListener(()=>this.onTextChange());this.textInputBubble.addSizeChangeListener(()=>this.onSizeChange());this.textInputBubble.addLocationChangeListener(()=>this.onBubbleLocationChange())}hideBubble(){let a;(a=this.textInputBubble)==null||a.dispose();this.textInputBubble=null}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$comment_icon/2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,\nnew Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){return this.sourceBlock.getBoundingRectangleWithoutChildren()}};CommentIcon$$module$build$src$core$icons$comment_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.COMMENT;CommentIcon$$module$build$src$core$icons$comment_icon.WEIGHT=3;register$$module$build$src$core$icons$registry(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE,CommentIcon$$module$build$src$core$icons$comment_icon);\nvar module$build$src$core$icons$comment_icon={};module$build$src$core$icons$comment_icon.CommentIcon=CommentIcon$$module$build$src$core$icons$comment_icon;var IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy=class{getFirstChild(a){if(a instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&a.bubbleIsVisible()&&$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===a){let b,c;return(c=(b=a.getBubble())==null?void 0:b.getWorkspace())!=null?c:null}if(a instanceof CommentIcon$$module$build$src$core$icons$comment_icon&&a.bubbleIsVisible()&&$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===\na){let b,c;return(c=(b=a.getBubble())==null?void 0:b.getEditor())!=null?c:null}return null}getParent(a){return a.getSourceBlock()}getNextSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof Icon$$module$build$src$core$icons$icon}},module$build$src$core$keyboard_nav$icon_navigation_policy=\n{};module$build$src$core$keyboard_nav$icon_navigation_policy.IconNavigationPolicy=IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy;var WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy=class{getFirstChild(a){return a.view.getCommentBarButtons()[0]}getParent(a){return a.workspace}getNextSibling(a){return navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment}},\nmodule$build$src$core$keyboard_nav$workspace_comment_navigation_policy={};module$build$src$core$keyboard_nav$workspace_comment_navigation_policy.WorkspaceCommentNavigationPolicy=WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy;var WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy=class{getFirstChild(a){a=a.getTopBlocks(!0);return a.length?a[0]:null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()&&!a.isMutator}isApplicable(a){return a instanceof WorkspaceSvg$$module$build$src$core$workspace_svg}},module$build$src$core$keyboard_nav$workspace_navigation_policy={};\nmodule$build$src$core$keyboard_nav$workspace_navigation_policy.WorkspaceNavigationPolicy=WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy;var Navigator$$module$build$src$core$navigator=class{constructor(){this.rules=[new BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy,new FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy,new ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy,new WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy,new IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy,\nnew WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy,new CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy,new BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy,new CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy]}addNavigationPolicy(a){this.rules.push(a)}get(a){return this.rules.find(b=>b.isApplicable(a))}getFirstChild(a){let b;\nconst c=(b=this.get(a))==null?void 0:b.getFirstChild(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getFirstChild(c)||this.getNextSibling(c)}getParent(a){let b;const c=(b=this.get(a))==null?void 0:b.getParent(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getParent(c)}getNextSibling(a){let b;const c=(b=this.get(a))==null?void 0:b.getNextSibling(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getNextSibling(c)}getPreviousSibling(a){let b;\nconst c=(b=this.get(a))==null?void 0:b.getPreviousSibling(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getPreviousSibling(c)}},module$build$src$core$navigator={};module$build$src$core$navigator.Navigator=Navigator$$module$build$src$core$navigator;var FlyoutNavigator$$module$build$src$core$flyout_navigator=class extends Navigator$$module$build$src$core$navigator{constructor(a){super();this.rules.push(new FlyoutButtonNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_button_navigation_policy,new FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy);this.rules=this.rules.map(b=>new FlyoutNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_navigation_policy(b,a))}},module$build$src$core$flyout_navigator=\n{};module$build$src$core$flyout_navigator.FlyoutNavigator=FlyoutNavigator$$module$build$src$core$flyout_navigator;var ScrollbarPair$$module$build$src$core$scrollbar_pair=class{constructor(a,b,c,d,e){this.workspace=a;this.oldHostMetrics=this.corner_=this.vScroll=this.hScroll=null;b=b===void 0?!0:b;c=c===void 0?!0:c;const f=b&&c;b&&(this.hScroll=new Scrollbar$$module$build$src$core$scrollbar(a,!0,f,d,e));c&&(this.vScroll=new Scrollbar$$module$build$src$core$scrollbar(a,!1,f,d,e));f&&(this.corner_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{height:Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness,\nwidth:Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness,\"class\":\"blocklyScrollbarBackground\"}),insertAfter$$module$build$src$core$utils$dom(this.corner_,a.getBubbleCanvas()))}dispose(){removeNode$$module$build$src$core$utils$dom(this.corner_);this.oldHostMetrics=this.corner_=null;this.hScroll&&(this.hScroll.dispose(),this.hScroll=null);this.vScroll&&(this.vScroll.dispose(),this.vScroll=null)}resize(){const a=this.workspace.getMetrics();if(a){var b=!1,c=!1;this.oldHostMetrics&&this.oldHostMetrics.viewWidth===\na.viewWidth&&this.oldHostMetrics.viewHeight===a.viewHeight&&this.oldHostMetrics.absoluteTop===a.absoluteTop&&this.oldHostMetrics.absoluteLeft===a.absoluteLeft?(this.oldHostMetrics&&this.oldHostMetrics.scrollWidth===a.scrollWidth&&this.oldHostMetrics.viewLeft===a.viewLeft&&this.oldHostMetrics.scrollLeft===a.scrollLeft||(b=!0),this.oldHostMetrics&&this.oldHostMetrics.scrollHeight===a.scrollHeight&&this.oldHostMetrics.viewTop===a.viewTop&&this.oldHostMetrics.scrollTop===a.scrollTop||(c=!0)):c=b=!0;if(b||\nc){try{$.disable$$module$build$src$core$events$utils(),this.hScroll&&b&&this.hScroll.resize(a),this.vScroll&&c&&this.vScroll.resize(a)}finally{$.enable$$module$build$src$core$events$utils()}this.workspace.maybeFireViewportChangeEvent()}if(this.hScroll&&this.vScroll){if(!this.oldHostMetrics||this.oldHostMetrics.viewWidth!==a.viewWidth||this.oldHostMetrics.absoluteLeft!==a.absoluteLeft){let d;(d=this.corner_)==null||d.setAttribute(\"x\",String(this.vScroll.position.x))}if(!this.oldHostMetrics||this.oldHostMetrics.viewHeight!==\na.viewHeight||this.oldHostMetrics.absoluteTop!==a.absoluteTop){let d;(d=this.corner_)==null||d.setAttribute(\"y\",String(this.hScroll.position.y))}}this.oldHostMetrics=a}}canScrollHorizontally(){return!!this.hScroll}canScrollVertically(){return!!this.vScroll}setOrigin(a,b){this.hScroll&&this.hScroll.setOrigin(a,b);this.vScroll&&this.vScroll.setOrigin(a,b)}set(a,b,c){this.hScroll&&this.hScroll.set(a,!1);this.vScroll&&this.vScroll.set(b,!1);if(c||c===void 0)a={},this.hScroll&&(a.x=this.hScroll.getRatio_()),\nthis.vScroll&&(a.y=this.vScroll.getRatio_()),this.workspace.setMetrics(a)}setX(a){this.hScroll&&this.hScroll.set(a,!0)}setY(a){this.vScroll&&this.vScroll.set(a,!0)}setContainerVisible(a){this.hScroll&&this.hScroll.setContainerVisible(a);this.vScroll&&this.vScroll.setContainerVisible(a)}isVisible(){let a=!1;this.hScroll&&(a=this.hScroll.isVisible());this.vScroll&&(a=a||this.vScroll.isVisible());return a}setVisible(a){this.hScroll&&this.hScroll.setVisibleInternal(a);this.vScroll&&this.vScroll.setVisibleInternal(a)}resizeContent(a){this.hScroll&&\nthis.hScroll.resizeContentHorizontal(a);this.vScroll&&this.vScroll.resizeContentVertical(a)}resizeView(a){this.hScroll&&this.hScroll.resizeViewHorizontal(a);this.vScroll&&this.vScroll.resizeViewVertical(a)}},module$build$src$core$scrollbar_pair={};module$build$src$core$scrollbar_pair.ScrollbarPair=ScrollbarPair$$module$build$src$core$scrollbar_pair;var SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater=\"sep\",SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater=class{load(a,b){a=new FlyoutSeparator$$module$build$src$core$flyout_separator(0,b.horizontalLayout?\"x\":\"y\");return new FlyoutItem$$module$build$src$core$flyout_item(a,SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater)}gapForItem(a,b){let c;return(c=parseInt(String(a.gap)))!=null?c:b}disposeItem(a){}getType(){return SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater}};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater,SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater);var module$build$src$core$separator_flyout_inflater={SEPARATOR_TYPE:SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater};module$build$src$core$separator_flyout_inflater.SeparatorFlyoutInflater=SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater;var Flyout$$module$build$src$core$flyout_base=class extends DeleteArea$$module$build$src$core$delete_area{constructor(a){super();this.horizontalLayout=!1;this.boundEvents=[];this.reflowWrapper=null;this.contents=[];this.autoClose=!0;this.visible=!1;this.containerVisible=!0;this.CORNER_RADIUS=8;this.SCROLLBAR_MARGIN=2.5;this.height_=this.width_=0;this.dragAngleRange_=70;this.svgGroup_=this.svgBackground_=null;this.inflaters=new Map;a.setMetrics=this.setMetrics_.bind(this);this.workspace_=new WorkspaceSvg$$module$build$src$core$workspace_svg(a);\nthis.workspace_.setMetricsManager(new FlyoutMetricsManager$$module$build$src$core$flyout_metrics_manager(this.workspace_,this));this.workspace_.internalIsFlyout=!0;this.workspace_.setVisible(this.visible);this.workspace_.setNavigator(new FlyoutNavigator$$module$build$src$core$flyout_navigator(this));this.id=genUid$$module$build$src$core$utils$idgenerator();this.RTL=!!a.RTL;this.toolboxPosition_=a.toolboxPosition;this.tabWidth_=this.workspace_.getRenderer().getConstants().TAB_WIDTH;this.MARGIN=this.CORNER_RADIUS;\nthis.GAP_X=this.MARGIN*3;this.GAP_Y=this.MARGIN*3}createDom(a){this.svgGroup_=createSvgElement$$module$build$src$core$utils$dom(a,{\"class\":\"blocklyFlyout\"});this.svgGroup_.style.display=\"none\";this.svgBackground_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyFlyoutBackground\"},this.svgGroup_);this.svgGroup_.appendChild(this.workspace_.createDom());this.workspace_.getThemeManager().subscribe(this.svgBackground_,\"flyoutBackgroundColour\",\n\"fill\");this.workspace_.getThemeManager().subscribe(this.svgBackground_,\"flyoutOpacity\",\"fill-opacity\");return this.svgGroup_}init(a){this.targetWorkspace=a;this.workspace_.targetWorkspace=a;this.workspace_.scrollbar=new ScrollbarPair$$module$build$src$core$scrollbar_pair(this.workspace_,this.horizontalLayout,!this.horizontalLayout,\"blocklyFlyoutScrollbar\",this.SCROLLBAR_MARGIN);this.hide();this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"wheel\",this,this.wheel_));\nthis.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.svgBackground_,\"pointerdown\",this,this.onMouseDown));this.workspace_.getGesture=this.targetWorkspace.getGesture.bind(this.targetWorkspace);this.workspace_.setVariableMap(this.targetWorkspace.getVariableMap());this.workspace_.createPotentialVariableMap();a.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.FLYOUT_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,\nComponentManager$$module$build$src$core$component_manager.Capability.DELETE_AREA,ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET]})}dispose(){this.hide();this.targetWorkspace.getComponentManager().removeComponent(this.id);for(const a of this.boundEvents)unbind$$module$build$src$core$browser_events(a);this.boundEvents.length=0;this.workspace_&&(this.workspace_.getThemeManager().unsubscribe(this.svgBackground_),this.workspace_.dispose());this.svgGroup_&&removeNode$$module$build$src$core$utils$dom(this.svgGroup_)}getWidth(){return this.width_}getHeight(){return this.height_}getFlyoutScale(){return this.targetWorkspace.scale}getWorkspace(){return this.workspace_}setAutoClose(a){this.autoClose=\na;this.targetWorkspace.recordDragTargets();this.targetWorkspace.resizeContents()}autoHide(a){!a&&this.targetWorkspace.getFlyout(!0)===this&&this.autoClose&&this.hide()}getTargetWorkspace(){return this.targetWorkspace}isVisible(){return this.visible}setVisible(a){const b=a!==this.isVisible();this.visible=a;b&&(this.autoClose||this.targetWorkspace.recordDragTargets(),this.updateDisplay())}setContainerVisible(a){const b=a!==this.containerVisible;this.containerVisible=a;b&&this.updateDisplay()}getContents(){return this.contents}setContents(a){this.contents=\na}updateDisplay(){let a;a=this.containerVisible?this.isVisible():!1;this.svgGroup_&&(this.svgGroup_.style.display=a?\"block\":\"none\");let b;(b=this.workspace_.scrollbar)==null||b.setContainerVisible(a)}positionAt_(a,b,c,d){let e;(e=this.svgGroup_)==null||e.setAttribute(\"width\",`${a}`);let f;(f=this.svgGroup_)==null||f.setAttribute(\"height\",`${b}`);this.workspace_.setCachedParentSvgSize(a,b);this.svgGroup_&&setCssTransform$$module$build$src$core$utils$dom(this.svgGroup_,\"translate(\"+c+\"px,\"+d+\"px)\");\nif(a=this.workspace_.scrollbar)a.setOrigin(c,d),a.resize(),a.hScroll&&a.hScroll.setPosition(a.hScroll.position.x,a.hScroll.position.y),a.vScroll&&a.vScroll.setPosition(a.vScroll.position.x,a.vScroll.position.y)}hide(){this.isVisible()&&(this.setVisible(!1),this.reflowWrapper&&(this.workspace_.removeChangeListener(this.reflowWrapper),this.reflowWrapper=null))}show(a){this.workspace_.setResizesEnabled(!1);this.hide();this.clearOldBlocks();typeof a===\"string\"&&(a=this.getDynamicCategoryContents(a));\nthis.setVisible(!0);a=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox(a);a=this.createFlyoutInfo(a);triggerQueuedRenders$$module$build$src$core$render_management(this.workspace_);this.setContents(a);this.layout_(a);this.horizontalLayout?this.height_=0:this.width_=0;this.reflow();this.workspace_.setResizesEnabled(!0);this.reflowWrapper=b=>{b.type!==EventType$$module$build$src$core$events$type.BLOCK_CHANGE&&b.type!==EventType$$module$build$src$core$events$type.BLOCK_FIELD_INTERMEDIATE_CHANGE||\nthis.reflow()};this.workspace_.addChangeListener(this.reflowWrapper)}createFlyoutInfo(a){const b=[],c=this.horizontalLayout?this.GAP_X:this.GAP_Y;for(const d of a)if(\"custom\"in d&&(a=this.getDynamicCategoryContents(d.custom),a=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox(a),b.push(...this.createFlyoutInfo(a))),a=d.kind.toLowerCase(),a=this.getInflaterForType(a))b.push(a.load(d,this)),(a=a.gapForItem(d,c))&&b.push(new FlyoutItem$$module$build$src$core$flyout_item(new FlyoutSeparator$$module$build$src$core$flyout_separator(a,\nthis.horizontalLayout?\"x\":\"y\"),SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater));return this.normalizeSeparators(b)}normalizeSeparators(a){for(let b=a.length-1;b>0;b--){const c=a[b].getType().toLowerCase(),d=a[b-1].getType().toLowerCase();c===SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater&&d===SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater&&a.splice(b-1,1)}return a}getDynamicCategoryContents(a){a=this.workspace_.targetWorkspace.getToolboxCategoryCallback(a);\nif(typeof a!==\"function\")throw TypeError(\"Couldn't find a callback function when opening a toolbox category.\");return a(this.workspace_.targetWorkspace)}clearOldBlocks(){this.getContents().forEach(b=>{let c;(c=this.getInflaterForType(b.getType()))==null||c.disposeItem(b)});let a;(a=this.workspace_.getPotentialVariableMap())==null||a.clear()}onMouseDown(a){const b=this.targetWorkspace.getGesture(a);b&&b.handleFlyoutStart(a,this)}isBlockCreatable(a){return a.isEnabled()&&!this.getTargetWorkspace().isReadOnly()}createBlock(a){let b=\nnull;$.disable$$module$build$src$core$events$utils();var c=this.targetWorkspace.getAllVariables();this.targetWorkspace.setResizesEnabled(!1);try{b=this.placeNewBlock(a)}finally{$.enable$$module$build$src$core$events$utils()}this.targetWorkspace.hideChaff();a=getAddedVariables$$module$build$src$core$variables(this.targetWorkspace,c);if(isEnabled$$module$build$src$core$events$utils()){$.setGroup$$module$build$src$core$events$utils(!0);for(c=0;c\n(this.flyout?$.config$$module$build$src$core$config.flyoutDragRadius:$.config$$module$build$src$core$config.dragRadius)}updateIsDraggingFromFlyout(){let a;if(!this.targetBlock||(a=this.flyout)==null||!a.isBlockCreatable(this.targetBlock))return!1;if(!this.flyout.targetWorkspace)throw Error(\"Cannot update dragging from the flyout because the ' +\\n 'flyout's target workspace is undefined\");return!this.flyout.isScrollable()||this.flyout.isDragTowardWorkspace(this.currentDragDeltaXY)?(this.startWorkspace_=\nthis.flyout.targetWorkspace,this.startWorkspace_.updateScreenCalculationsIfScrolled(),$.getGroup$$module$build$src$core$events$utils()||$.setGroup$$module$build$src$core$events$utils(!0),this.startBlock=null,this.targetBlock=this.flyout.createBlock(this.targetBlock),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.targetBlock),!0):!1}updateIsDraggingWorkspace(){if(!this.startWorkspace_)throw Error(\"Cannot update dragging the workspace because the start workspace is undefined\");\nif(this.flyout?this.flyout.isScrollable():this.startWorkspace_&&this.startWorkspace_.isDraggable())this.dragging=!0,this.workspaceDragger=new WorkspaceDragger$$module$build$src$core$workspace_dragger(this.startWorkspace_),this.workspaceDragger.startDrag()}updateIsDragging(a){if(!this.startWorkspace_)throw Error(\"Cannot update dragging because the start workspace is undefined\");if(this.calledUpdateIsDragging)throw Error(\"updateIsDragging_ should only be called once per gesture.\");this.calledUpdateIsDragging=\n!0;this.flyout&&this.updateIsDraggingFromFlyout();const b=getSelected$$module$build$src$core$common();b&&isDraggable$$module$build$src$core$interfaces$i_draggable(b)&&b.isMovable()?(this.dragging=!0,this.dragger=this.createDragger(b,this.startWorkspace_),this.dragger.onDragStart(a),this.dragger.onDrag(a,this.currentDragDeltaXY)):this.updateIsDraggingWorkspace()}createDragger(a,b){return new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.BLOCK_DRAGGER,this.creatorWorkspace.options,\n!0))(a,b)}doStart(a){if(!this.startWorkspace_)throw Error(\"Cannot start the touch gesture becauase the start workspace is undefined\");this.isPinchZoomEnabled=this.startWorkspace_.options.zoomOptions&&this.startWorkspace_.options.zoomOptions.pinch;isTargetInput$$module$build$src$core$browser_events(a)?this.cancel():(this.gestureHasStarted=!0,disconnectUiStop$$module$build$src$core$block_animations(),this.startWorkspace_.updateScreenCalculationsIfScrolled(),this.startWorkspace_.isMutator&&this.startWorkspace_.resize(),\nthis.currentDropdownOwner=getOwner$$module$build$src$core$dropdowndiv(),this.startWorkspace_.hideChaff(!!this.flyout),this.startWorkspace_.markFocused(),this.mostRecentEvent=a,block$$module$build$src$core$tooltip(),isRightButton$$module$build$src$core$browser_events(a)?this.handleRightClick(a):(a.type.toLowerCase()===\"pointerdown\"&&a.pointerType!==\"mouse\"&&longStart$$module$build$src$core$touch(a,this),this.mouseDownXY=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY),this.bindMouseEvents(a),\nthis.isEnding_||this.handleTouchStart(a)))}bindMouseEvents(a){this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointerdown\",null,this.handleStart.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",null,this.handleMove.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",null,this.handleUp.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\n\"pointercancel\",null,this.handleUp.bind(this),!0));a.preventDefault();a.stopPropagation()}handleStart(a){this.isDragging()||(this.handleTouchStart(a),this.isMultiTouch()&&longStop$$module$build$src$core$touch())}handleMove(a){if(this.isDragging()&&shouldHandleEvent$$module$build$src$core$touch(a)||!this.isMultiTouch()){this.updateFromEvent(a);if(this.workspaceDragger)this.workspaceDragger.drag(this.currentDragDeltaXY);else if(this.dragger)this.dragger.onDrag(this.mostRecentEvent,this.currentDragDeltaXY);\na.preventDefault();a.stopPropagation()}else this.isMultiTouch()&&(this.handleTouchMove(a),longStop$$module$build$src$core$touch())}handleUp(a){this.isDragging()||this.handleTouchEnd(a);if(!this.isMultiTouch()||this.isDragging()){if(!shouldHandleEvent$$module$build$src$core$touch(a))return;this.updateFromEvent(a);longStop$$module$build$src$core$touch();if(this.isEnding_){console.log(\"Trying to end a gesture recursively.\");return}this.isEnding_=!0;this.dragger?(keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1),\nthis.dragger.onDragEnd(a,this.currentDragDeltaXY)):this.workspaceDragger?(keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1),this.workspaceDragger.endDrag(this.currentDragDeltaXY)):this.isBubbleClick()||this.isCommentClick()||(this.isFieldClick()?this.doFieldClick():this.isIconClick()?this.doIconClick():this.isBlockClick()?this.doBlockClick():this.isWorkspaceClick()&&this.doWorkspaceClick(a))}a.preventDefault();a.stopPropagation();this.dispose()}handleTouchStart(a){var b=\ngetTouchIdentifierFromEvent$$module$build$src$core$touch(a);this.cachedPoints.set(b,this.getTouchPoint(a));var c=Array.from(this.cachedPoints.keys());c.length===2&&(b=this.cachedPoints.get(c[0]),c=this.cachedPoints.get(c[1]),this.startDistance=Coordinate$$module$build$src$core$utils$coordinate.distance(b,c),this.multiTouch=!0,a.preventDefault())}handleTouchMove(a){const b=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);this.cachedPoints.set(b,this.getTouchPoint(a));if(this.isPinchZoomEnabled&&\nthis.cachedPoints.size===2)this.handlePinch(a);else{this.updateFromEvent(a);if(this.workspaceDragger)this.workspaceDragger.drag(this.currentDragDeltaXY);else if(this.dragger)this.dragger.onDrag(this.mostRecentEvent,this.currentDragDeltaXY);a.preventDefault();a.stopPropagation()}}handlePinch(a){var b=Array.from(this.cachedPoints.keys()),c=this.cachedPoints.get(b[0]);b=this.cachedPoints.get(b[1]);c=Coordinate$$module$build$src$core$utils$coordinate.distance(c,b)/this.startDistance;if(this.previousScale>\n0&&this.previousScale0?b*ZOOM_IN_MULTIPLIER$$module$build$src$core$gesture:b*ZOOM_OUT_MULTIPLIER$$module$build$src$core$gesture;if(!this.startWorkspace_)throw Error(\"Cannot handle a pinch because the start workspace is undefined\");const d=this.startWorkspace_,e=mouseToSvg$$module$build$src$core$browser_events(a,d.getParentSvg(),d.getInverseScreenCTM());d.zoom(e.x,e.y,b)}this.previousScale=c;a.preventDefault()}handleTouchEnd(a){a=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);\nthis.cachedPoints.has(a)&&this.cachedPoints.delete(a);this.cachedPoints.size<2&&(this.cachedPoints.clear(),this.previousScale=0)}getTouchPoint(a){return this.startWorkspace_?new Coordinate$$module$build$src$core$utils$coordinate(a.pageX,a.pageY):null}isMultiTouch(){return this.multiTouch}cancel(){if(!this.isEnding_){longStop$$module$build$src$core$touch();if(this.dragger)this.dragger.onDragEnd(this.mostRecentEvent,this.currentDragDeltaXY);else this.workspaceDragger&&this.workspaceDragger.endDrag(this.currentDragDeltaXY);\nthis.dispose()}}handleRightClick(a){this.targetBlock?(this.bringBlockToFront(),this.targetBlock.workspace.hideChaff(!!this.flyout),this.targetBlock.showContextMenu(a)):this.startBubble?this.startBubble.showContextMenu(a):this.startComment?(this.startComment.workspace.hideChaff(),this.startComment.showContextMenu(a)):this.startWorkspace_&&!this.flyout&&(this.startWorkspace_.hideChaff(),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.startWorkspace_),this.startWorkspace_.showContextMenu(a));\na.preventDefault();a.stopPropagation();keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1);this.dispose()}handleWsStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleWsStart, but the gesture had already been started.\");this.setStartWorkspace(b);this.mostRecentEvent=a;this.startBlock||this.startBubble||this.startComment?this.startBlock&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.startBlock):$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b);\nthis.doStart(a)}fireWorkspaceClick(a){fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(null,a.id,\"workspace\"))}handleFlyoutStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleFlyoutStart, but the gesture had already been started.\");this.setStartFlyout(b);this.handleWsStart(a,b.getWorkspace())}handleBlockStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleBlockStart, but the gesture had already been started.\");\nthis.setStartBlock(b);this.mostRecentEvent=a}handleBubbleStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleBubbleStart, but the gesture had already been started.\");this.setStartBubble(b);this.mostRecentEvent=a}handleCommentStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleCommentStart, but the gesture had already been started.\");this.setStartComment(b);this.mostRecentEvent=a}doFieldClick(){if(!this.startField)throw Error(\"Cannot do a field click because the start field is undefined\");\nthis.bringBlockToFront();this.currentDropdownOwner!==this.startField&&this.startField.showEditor(this.mostRecentEvent)}doIconClick(){if(!this.startIcon)throw Error(\"Cannot do an icon click because the start icon is undefined\");this.bringBlockToFront();this.startIcon.onClick()}doBlockClick(){if(this.flyout&&this.flyout.autoClose){if(!this.targetBlock)throw Error(\"Cannot do a block click because the target block is undefined\");if(this.flyout.isBlockCreatable(this.targetBlock)){$.getGroup$$module$build$src$core$events$utils()||\n$.setGroup$$module$build$src$core$events$utils(!0);var a=this.flyout.createBlock(this.targetBlock);a.snapToGrid();a.bumpNeighbours();$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}}else{if(!this.startWorkspace_)throw Error(\"Cannot do a block click because the start workspace is undefined\");a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(this.startBlock,this.startWorkspace_.id,\"block\");fire$$module$build$src$core$events$utils(a)}this.bringBlockToFront();\n$.setGroup$$module$build$src$core$events$utils(!1)}doWorkspaceClick(a){this.fireWorkspaceClick(this.startWorkspace_||this.creatorWorkspace)}bringBlockToFront(){this.targetBlock&&!this.flyout&&($.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.targetBlock),this.targetBlock.bringToFront())}setStartField(a){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.setStartField, but the gesture had already been started.\");this.startField||(this.startField=a)}setStartIcon(a){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.setStartIcon, but the gesture had already been started.\");\nthis.startIcon||(this.startIcon=a)}setStartBubble(a){this.startBubble||(this.startBubble=a)}setStartComment(a){this.startComment||(this.startComment=a)}setStartBlock(a){this.startBlock||this.startBubble||(this.startBlock=a,a.isInFlyout&&a!==a.getRootBlock()?this.setTargetBlock(a.getRootBlock()):this.setTargetBlock(a))}setTargetBlock(a){a.isShadow()?this.setTargetBlock(a.getParent()):(this.targetBlock=a,$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a))}setStartWorkspace(a){this.startWorkspace_||\n(this.startWorkspace_=a)}setStartFlyout(a){this.flyout||(this.flyout=a)}isBubbleClick(){return!!this.startBubble&&!this.hasExceededDragRadius}isCommentClick(){return!!this.startComment&&!this.hasExceededDragRadius}isBlockClick(){return!!this.startBlock&&!this.hasExceededDragRadius&&!this.isFieldClick()&&!this.isIconClick()}isFieldClick(){return this.startField?this.startField.isClickable()&&!this.hasExceededDragRadius&&(!this.flyout||this.startField.isClickableInFlyout(this.flyout.autoClose)):!1}isIconClick(){if(!this.startIcon)return!1;\nconst a=!this.flyout||!this.startIcon.isClickableInFlyout||this.startIcon.isClickableInFlyout(this.flyout.autoClose);return!this.hasExceededDragRadius&&a}isWorkspaceClick(){return!this.startBlock&&!this.startBubble&&!this.startField&&!this.hasExceededDragRadius}getCurrentDragger(){let a,b;return(b=(a=this.workspaceDragger)!=null?a:this.dragger)!=null?b:null}isDragging(){return this.dragging}hasStarted(){return this.gestureHasStarted}static inProgress(){const a=getAllWorkspaces$$module$build$src$core$common();\nfor(let b=0,c;c=a[b];b++)if(c.currentGesture_)return!0;return!1}},module$build$src$core$gesture={};module$build$src$core$gesture.Gesture=Gesture$$module$build$src$core$gesture;var Grid$$module$build$src$core$grid=class{constructor(a,b){this.pattern=a;this.scale=1;let c;this.spacing=(c=b.spacing)!=null?c:0;let d;this.length=(d=b.length)!=null?d:1;this.line2=(this.line1=a.firstChild)&&this.line1.nextSibling;let e;this.snapToGrid=(e=b.snap)!=null?e:!1}setSpacing(a){this.spacing=a;this.update(this.scale)}getSpacing(){return this.spacing}setLength(a){this.length=a;this.update(this.scale)}getLength(){return this.length}setSnapToGrid(a){this.snapToGrid=a}shouldSnap(){return this.snapToGrid}getPatternId(){return this.pattern.id}update(a){this.scale=\na;var b=this.spacing*a;this.pattern.setAttribute(\"width\",`${b}`);this.pattern.setAttribute(\"height\",`${b}`);b=Math.floor(this.spacing/2)+.5;let c=b-this.length/2,d=b+this.length/2;b*=a;c*=a;d*=a;this.setLineAttributes(this.line1,a,c,d,b,b);this.setLineAttributes(this.line2,a,b,b,c,d)}setLineAttributes(a,b,c,d,e,f){a&&(a.setAttribute(\"stroke-width\",`${b}`),a.setAttribute(\"x1\",`${c}`),a.setAttribute(\"y1\",`${e}`),a.setAttribute(\"x2\",`${d}`),a.setAttribute(\"y2\",`${f}`))}moveTo(a,b){this.pattern.setAttribute(\"x\",\n`${a}`);this.pattern.setAttribute(\"y\",`${b}`)}alignXY(a){var b=this.getSpacing();const c=b/2,d=Math.round(Math.round((a.x-c)/b)*b+c);b=Math.round(Math.round((a.y-c)/b)*b+c);return d===a.x&&b===a.y?a:new Coordinate$$module$build$src$core$utils$coordinate(d,b)}static createDom(a,b,c,d){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATTERN,{id:\"blocklyGridPattern\"+a,patternUnits:\"userSpaceOnUse\"},c);let e,f;if(((e=b.length)!=null?e:1)>0&&((f=b.spacing)!=null?\nf:0)>0){createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{stroke:b.colour},a);let g;(g=b.length)!=null&&g&&createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{stroke:b.colour},a)}else createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{},a);d&&d.style.setProperty(\"--blocklyGridPattern\",`url(#${a.id})`);return a}},module$build$src$core$grid={};\nmodule$build$src$core$grid.Grid=Grid$$module$build$src$core$grid;var module$build$src$core$interfaces$i_autohideable={};module$build$src$core$interfaces$i_autohideable.isAutoHideable=isAutoHideable$$module$build$src$core$interfaces$i_autohideable;var LayerManager$$module$build$src$core$layer_manager=class{constructor(a){this.workspace=a;this.layers=new Map;if(a=a.getInjectionDiv())this.dragLayer=this.createDragLayer(a),this.animationLayer=this.createAnimationLayer(a);a=this.createLayer(BLOCK$$module$build$src$core$layers);addClass$$module$build$src$core$utils$dom(a,\"blocklyBlockCanvas\");a=this.createLayer(BUBBLE$$module$build$src$core$layers);addClass$$module$build$src$core$utils$dom(a,\"blocklyBubbleCanvas\")}createDragLayer(a){const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,\n{\"class\":\"blocklyBlockDragSurface\",xmlns:SVG_NS$$module$build$src$core$utils$dom,\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\"});a.append(b);return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},b)}createAnimationLayer(a){const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{\"class\":\"blocklyAnimationLayer\",xmlns:SVG_NS$$module$build$src$core$utils$dom,\n\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\"});a.append(b);return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},b)}appendToAnimationLayer(a){let b;const c=(b=this.dragLayer)==null?void 0:b.getAttribute(\"transform\");if(c){let e;(e=this.animationLayer)==null||e.setAttribute(\"transform\",c)}let d;(d=this.animationLayer)==null||d.appendChild(a.getSvgRoot())}translateLayers(a,b){a=\n`translate(${a.x}, ${a.y}) scale(${b})`;let c;(c=this.dragLayer)==null||c.setAttribute(\"transform\",a);for(const [,d]of this.layers)d.setAttribute(\"transform\",a)}moveToDragLayer(a){let b;(b=this.dragLayer)==null||b.appendChild(a.getSvgRoot());a.canBeFocused()&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}moveOffDragLayer(a,b){this.append(a,b);a.canBeFocused()&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}append(a,b){this.layers.has(b)||this.createLayer(b);\na=a.getSvgRoot();let c;if(((c=this.layers.get(b))==null?void 0:c.lastChild)!==a){let d;(d=this.layers.get(b))==null||d.appendChild(a)}}createLayer(a){const b=this.workspace.getSvgGroup(),c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});let d=!1;const e=[...this.layers].sort((f,g)=>f[0]-g[0]);for(const [f,g]of e)if(a{let c;return b instanceof BlockSvg$$module$build$src$core$block_svg&&!((c=b.outputConnection)==null?0:c.targetBlock())||b instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment},\n!0))&&this.setCurNode(a);return a}in(){var a=this.getCurNode();if(!a)return null;(a=this.getNextNode(a,()=>!0,!0))&&this.setCurNode(a);return a}prev(){var a=this.getCurNode();if(!a)return null;(a=this.getPreviousNode(a,b=>{let c;return b instanceof BlockSvg$$module$build$src$core$block_svg&&!((c=b.outputConnection)==null?0:c.targetBlock())||b instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment},!0))&&this.setCurNode(a);return a}out(){var a=this.getCurNode();\nif(!a)return null;(a=this.getPreviousNode(a,()=>!0,!0))&&this.setCurNode(a);return a}atEndOfLine(){var a=this.getCurNode();if(!a)return!1;const b=this.getNextNode(a,()=>!0,!0);a=this.getNextNode(a,c=>{let d;return c instanceof BlockSvg$$module$build$src$core$block_svg&&!((d=c.outputConnection)==null?0:d.targetBlock())},!0);return b===a}getNextNodeImpl(a,b,c=new Set){if(!a||c.has(a))return null;let d=this.workspace.getNavigator().getFirstChild(a)||this.workspace.getNavigator().getNextSibling(a);for(var e=\na;e&&!d;){e=this.workspace.getNavigator().getParent(e);if(!e)break;d=this.workspace.getNavigator().getNextSibling(e)}return b(d)?d:d?(c.add(a),this.getNextNodeImpl(d,b,c)):null}getNextNode(a,b,c){return!a||!c&&this.getLastNode()===a?null:this.getNextNodeImpl(a,b)}getPreviousNodeImpl(a,b,c=new Set){if(!a||c.has(a))return null;const d=this.getRightMostChild(this.workspace.getNavigator().getPreviousSibling(a),a)||this.workspace.getNavigator().getParent(a);return b(d)?d:d?(c.add(a),this.getPreviousNodeImpl(d,\nb,c)):null}getPreviousNode(a,b,c){return!a||!c&&this.getFirstNode()===a?null:this.getPreviousNodeImpl(a,b)}getRightMostChild(a,b){if(!a)return a;let c=this.workspace.getNavigator().getFirstChild(a);if(!c||c===b)return a;for(a=c;a&&a!==b;a=this.workspace.getNavigator().getNextSibling(c))c=a;return this.getRightMostChild(c,b)}preDelete(a){var b=this.getCurNode();b=b?[b]:[];var c;let d,e;const f=(e=(c=a.previousConnection)==null?void 0:c.targetConnection)!=null?e:(d=a.outputConnection)==null?void 0:\nd.targetConnection;f&&b.push(f);(c=a.getNextBlock())&&b.push(c);(a=a.getParent())&&b.push(a);b.push(this.workspace);this.potentialNodes=b}postDelete(){const a=this.potentialNodes;this.potentialNodes=null;if(!a)throw Error(\"must call preDelete first\");for(const b of a){let c;if((c=this.getSourceBlockFromNode(b))==null||!c.disposed){this.setCurNode(b);return}}throw Error(\"no valid nodes in this.potentialNodes\");}getCurNode(){return $.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()}setCurNode(a){$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}getFirstNode(){return this.workspace.getNavigator().getFirstChild(this.workspace)}getLastNode(){const a=\nthis.getFirstNode();return this.getPreviousNode(a,()=>!0,!0)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.CURSOR,DEFAULT$$module$build$src$core$registry,LineCursor$$module$build$src$core$keyboard_nav$line_cursor);var module$build$src$core$keyboard_nav$line_cursor={};module$build$src$core$keyboard_nav$line_cursor.LineCursor=LineCursor$$module$build$src$core$keyboard_nav$line_cursor;var MarkerManager$$module$build$src$core$marker_manager=class{constructor(a){this.workspace=a;this.markers=new Map;this.cursor=new LineCursor$$module$build$src$core$keyboard_nav$line_cursor(this.workspace)}registerMarker(a,b){this.markers.has(a)&&this.unregisterMarker(a);this.markers.set(a,b)}unregisterMarker(a){const b=this.markers.get(a);if(b)b.dispose(),this.markers.delete(a);else throw Error(\"Marker with ID \"+a+\" does not exist. Can only unregister markers that exist.\");}getCursor(){return this.cursor}getMarker(a){return this.markers.get(a)||\nnull}setCursor(a){this.cursor=a}dispose(){const a=Object.keys(this.markers);for(let b=0,c;c=a[b];b++)this.unregisterMarker(c);this.markers.clear();this.cursor.dispose()}};MarkerManager$$module$build$src$core$marker_manager.LOCAL_MARKER=\"local_marker_1\";var module$build$src$core$marker_manager={};module$build$src$core$marker_manager.MarkerManager=MarkerManager$$module$build$src$core$marker_manager;var module$build$src$core$icons={};module$build$src$core$icons.CommentIcon=CommentIcon$$module$build$src$core$icons$comment_icon;module$build$src$core$icons.Icon=Icon$$module$build$src$core$icons$icon;module$build$src$core$icons.IconType=IconType$$module$build$src$core$icons$icon_types;module$build$src$core$icons.MutatorIcon=$.MutatorIcon$$module$build$src$core$icons$mutator_icon;module$build$src$core$icons.WarningIcon=WarningIcon$$module$build$src$core$icons$warning_icon;\nmodule$build$src$core$icons.exceptions=module$build$src$core$icons$exceptions;module$build$src$core$icons.registry=module$build$src$core$icons$registry;var module$build$src$core$interfaces$i_procedure_block={};module$build$src$core$interfaces$i_procedure_block.isProcedureBlock=isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block;$.Names$$module$build$src$core$names=class{constructor(a,b){this.db=new Map;this.dbReverse=new Set;this.variableMap=null;this.variablePrefix=b||\"\";this.reservedWords=new Set(a?a.split(\",\"):[])}reset(){this.db.clear();this.dbReverse.clear();this.variableMap=null}setVariableMap(a){this.variableMap=a}getNameForUserVariable(a){return this.variableMap?(a=this.variableMap.getVariableById(a))?a.getName():null:(console.warn(\"Deprecated call to Names.prototype.getName without defining a variable map. To fix, add the following code in your generator's init() function:\\nBlockly.YourGeneratorName.nameDB_.setVariableMap(workspace.getVariableMap());\"),\nnull)}populateVariables(a){a=$.allUsedVarModels$$module$build$src$core$variables(a);for(let b=0;b=1}isHat(a){return(a.type&this.HAT)>=1}isIcon(a){return(a.type&\nthis.ICON)>=1}isSpacer(a){return(a.type&this.SPACER)>=1}isInRowSpacer(a){return(a.type&this.IN_ROW_SPACER)>=1}isSpacerRow(a){return(a.type&this.BETWEEN_ROW_SPACER)>=1}isInput(a){return(a.type&this.INPUT)>=1}isExternalInput(a){return(a.type&this.EXTERNAL_VALUE_INPUT)>=1}isInlineInput(a){return(a.type&this.INLINE_INPUT)>=1}isStatementInput(a){return(a.type&this.STATEMENT_INPUT)>=1}isPreviousConnection(a){return(a.type&this.PREVIOUS_CONNECTION)>=1}isNextConnection(a){return(a.type&this.NEXT_CONNECTION)>=\n1}isPreviousOrNextConnection(a){return this.isPreviousConnection(a)||this.isNextConnection(a)}isRoundCorner(a){return(a.type&this.LEFT_ROUND_CORNER)>=1||(a.type&this.RIGHT_ROUND_CORNER)>=1}isLeftRoundedCorner(a){return this.isRoundCorner(a)&&(a.type&this.LEFT_ROUND_CORNER)>=1}isRightRoundedCorner(a){return this.isRoundCorner(a)&&(a.type&this.RIGHT_ROUND_CORNER)>=1}isLeftSquareCorner(a){return(a.type&this.LEFT_SQUARE_CORNER)>=1}isRightSquareCorner(a){return(a.type&this.RIGHT_SQUARE_CORNER)>=1}isCorner(a){return(a.type&\nthis.CORNER)>=1}isJaggedEdge(a){return(a.type&this.JAGGED_EDGE)>=1}isRow(a){return(a.type&this.ROW)>=1}isBetweenRowSpacer(a){return(a.type&this.BETWEEN_ROW_SPACER)>=1}isTopRow(a){return(a.type&this.TOP_ROW)>=1}isBottomRow(a){return(a.type&this.BOTTOM_ROW)>=1}isTopOrBottomRow(a){return this.isTopRow(a)||this.isBottomRow(a)}isInputRow(a){return(a.type&this.INPUT_ROW)>=1}},Types$$module$build$src$core$renderers$measurables$types=new TypesContainer$$module$build$src$core$renderers$measurables$types,module$build$src$core$renderers$measurables$types=\n{Types:Types$$module$build$src$core$renderers$measurables$types};var Measurable$$module$build$src$core$renderers$measurables$base=class{constructor(a){this.centerline=this.xPos=this.height=this.width=0;this.constants_=a;this.type=Types$$module$build$src$core$renderers$measurables$types.NONE;this.notchOffset=this.constants_.NOTCH_OFFSET_LEFT}},module$build$src$core$renderers$measurables$base={};module$build$src$core$renderers$measurables$base.Measurable=Measurable$$module$build$src$core$renderers$measurables$base;var Row$$module$build$src$core$renderers$measurables$row=class{constructor(a){this.elements=[];this.xPos=this.yPos=this.widthWithConnectedBlocks=this.minWidth=this.minHeight=this.width=this.height=0;this.hasStatement=this.hasExternalInput=!1;this.statementEdge=0;this.hasJaggedEdge=this.hasDummyInput=this.hasInlineInput=!1;this.align=null;this.constants_=a;this.type=Types$$module$build$src$core$renderers$measurables$types.ROW;this.notchOffset=this.constants_.NOTCH_OFFSET_LEFT}getLastInput(){for(let a=\nthis.elements.length-1;a>=0;a--){const b=this.elements[a];if(Types$$module$build$src$core$renderers$measurables$types.isInput(b))return b}return null}measure(){throw Error(\"Unexpected attempt to measure a base Row.\");}startsWithElemSpacer(){return!0}endsWithElemSpacer(){return!0}getFirstSpacer(){for(let a=0;a=0;a--){const b=this.elements[a];if(Types$$module$build$src$core$renderers$measurables$types.isInRowSpacer(b))return b}return null}},module$build$src$core$renderers$measurables$row={};module$build$src$core$renderers$measurables$row.Row=Row$$module$build$src$core$renderers$measurables$row;var BottomRow$$module$build$src$core$renderers$measurables$bottom_row=class extends Row$$module$build$src$core$renderers$measurables$row{constructor(a){super(a);this.hasNextConnection=!1;this.connection=null;this.baseline=this.descenderHeight=0;this.type|=Types$$module$build$src$core$renderers$measurables$types.BOTTOM_ROW}hasLeftSquareCorner(a){return!!a.outputConnection||!!a.getNextBlock()}hasRightSquareCorner(a){return!0}measure(){let a=0,b=0,c=0;for(let d=0;drect,`,`${a} .blocklyEditableField>rect {`,`fill: ${this.FIELD_BORDER_RECT_COLOUR};`,\"fill-opacity: .6;\",\"stroke: none;\",\"}\",`${a} .blocklyNonEditableField>text,`,`${a} .blocklyEditableField>text {`,\n\"fill: #000;\",\"}\",`${a} .blocklyFlyoutLabelText {`,\"fill: #000;\",\"}\",`${a} .blocklyText.blocklyBubbleText {`,\"fill: #000;\",\"}\",`${a} .blocklyEditableField:not(.blocklyEditing):hover>rect {`,\"stroke: #fff;\",\"stroke-width: 2;\",\"}\",`${a} .blocklyHtmlInput {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,`font-weight: ${this.FIELD_TEXT_FONTWEIGHT};`,\"}\",`${a} .blocklySelected>.blocklyPath {`,\"stroke: #fc3;\",\"stroke-width: 3px;\",\"}\",`${a} .blocklyHighlightedConnectionPath {`,\"stroke: #fc3;\",\"}\",`${a} .blocklyReplaceable .blocklyPath {`,\n\"fill-opacity: .5;\",\"}\",`${a} .blocklyReplaceable .blocklyPathLight,`,`${a} .blocklyReplaceable .blocklyPathDark {`,\"display: none;\",\"}\",`${a} .blocklyInsertionMarker>.blocklyPath {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\"stroke: none;\",\"}\"]}},module$build$src$core$renderers$common$constants={};module$build$src$core$renderers$common$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$common$constants;\nmodule$build$src$core$renderers$common$constants.isDynamicShape=isDynamicShape$$module$build$src$core$renderers$common$constants;module$build$src$core$renderers$common$constants.isNotch=isNotch$$module$build$src$core$renderers$common$constants;module$build$src$core$renderers$common$constants.isPuzzleTab=isPuzzleTab$$module$build$src$core$renderers$common$constants;var Drawer$$module$build$src$core$renderers$common$drawer=class{constructor(a,b){this.inlinePath_=this.outlinePath_=\"\";this.block_=a;this.info_=b;this.topLeft_=a.getRelativeToSurfaceXY();this.constants_=b.getRenderer().getConstants()}draw(){this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();this.block_.pathObject.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);this.info_.RTL&&this.block_.pathObject.flipRTL();this.recordSizeOnBlock_()}recordSizeOnBlock_(){this.block_.height=\nthis.info_.height;this.block_.width=this.info_.widthWithChildren;this.block_.childlessWidth=this.info_.width}drawOutline_(){this.drawTop_();for(let a=1;a0&&this.addAlignmentPadding_(c,a);Types$$module$build$src$core$renderers$measurables$types.isTopOrBottomRow(c)&&(c.widthWithConnectedBlocks=c.width)}}getDesiredRowWidth_(a){return this.width-this.startX}addAlignmentPadding_(a,\nb){const c=a.getFirstSpacer(),d=a.getLastSpacer();if(a.hasExternalInput||a.hasStatement)a.widthWithConnectedBlocks+=b;if(a.align===$.Align$$module$build$src$core$inputs$align.LEFT&&d)d.width+=b;else if(a.align===$.Align$$module$build$src$core$inputs$align.CENTRE&&c&&d)c.width+=b/2,d.width+=b/2;else if(a.align===$.Align$$module$build$src$core$inputs$align.RIGHT&&c)c.width+=b;else if(d)d.width+=b;else return;a.width+=b}alignStatementRow_(a){const b=a.getLastInput();if(b){var c=a.width-b.width,d=this.statementEdge;\nc=d-c;c>0&&this.addAlignmentPadding_(a,c);c=a.width;d=this.getDesiredRowWidth_(a);b.width+=d-c;b.height=Math.max(b.height,a.height);a.width+=d-c;a.widthWithConnectedBlocks=Math.max(a.width,this.statementEdge+a.connectedBlockWidths)}}addRowSpacing_(){const a=this.rows;this.rows=[];for(let b=0;b=0;d--)c[d].element===a&&c.splice(d,1);c.length||this.componentDB.delete(b)}}dispose(){this.subscribedWorkspaces.length=0;this.componentDB.clear()}},module$build$src$core$theme_manager={};module$build$src$core$theme_manager.ThemeManager=ThemeManager$$module$build$src$core$theme_manager;var CATEGORY_NAME$$module$build$src$core$variables_dynamic=\"VARIABLE_DYNAMIC\",onCreateVariableButtonClick_String$$module$build$src$core$variables_dynamic=stringButtonClickHandler$$module$build$src$core$variables_dynamic,onCreateVariableButtonClick_Number$$module$build$src$core$variables_dynamic=numberButtonClickHandler$$module$build$src$core$variables_dynamic,onCreateVariableButtonClick_Colour$$module$build$src$core$variables_dynamic=colourButtonClickHandler$$module$build$src$core$variables_dynamic,\nmodule$build$src$core$variables_dynamic={CATEGORY_NAME:CATEGORY_NAME$$module$build$src$core$variables_dynamic};module$build$src$core$variables_dynamic.flyoutCategory=flyoutCategory$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.flyoutCategoryBlocks=flyoutCategoryBlocks$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.internalFlyoutCategory=internalFlyoutCategory$$module$build$src$core$variables_dynamic;\nmodule$build$src$core$variables_dynamic.onCreateVariableButtonClick_Colour=colourButtonClickHandler$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.onCreateVariableButtonClick_Number=numberButtonClickHandler$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.onCreateVariableButtonClick_String=stringButtonClickHandler$$module$build$src$core$variables_dynamic;var ConnectionChecker$$module$build$src$core$connection_checker=class{canConnect(a,b,c,d){return this.canConnectWithReason(a,b,c,d)===Connection$$module$build$src$core$connection.CAN_CONNECT}canConnectWithReason(a,b,c,d){const e=this.doSafetyChecks(a,b);return e!==Connection$$module$build$src$core$connection.CAN_CONNECT?e:this.doTypeChecks(a,b)?c&&!this.doDragChecks(a,b,d||0)?Connection$$module$build$src$core$connection.REASON_DRAG_CHECKS_FAILED:Connection$$module$build$src$core$connection.CAN_CONNECT:\nConnection$$module$build$src$core$connection.REASON_CHECKS_FAILED}getErrorMessage(a,b,c){switch(a){case Connection$$module$build$src$core$connection.REASON_SELF_CONNECTION:return\"Attempted to connect a block to itself.\";case Connection$$module$build$src$core$connection.REASON_DIFFERENT_WORKSPACES:return\"Blocks not on same workspace.\";case Connection$$module$build$src$core$connection.REASON_WRONG_TYPE:return\"Attempt to connect incompatible types.\";case Connection$$module$build$src$core$connection.REASON_TARGET_NULL:return\"Target connection is null.\";\ncase Connection$$module$build$src$core$connection.REASON_CHECKS_FAILED:return\"Connection checks failed. \"+(b+\" expected \"+b.getCheck()+\", found \"+c.getCheck());case Connection$$module$build$src$core$connection.REASON_SHADOW_PARENT:return\"Connecting non-shadow to shadow block.\";case Connection$$module$build$src$core$connection.REASON_DRAG_CHECKS_FAILED:return\"Drag checks failed.\";case Connection$$module$build$src$core$connection.REASON_PREVIOUS_AND_OUTPUT:return\"Block would have an output and a previous connection.\";\ndefault:return\"Unknown connection failure: this should never happen!\"}}doSafetyChecks(a,b){if(!a||!b)return Connection$$module$build$src$core$connection.REASON_TARGET_NULL;let c,d,e;a.isSuperior()?(c=a.getSourceBlock(),d=b.getSourceBlock(),e=b):(d=a.getSourceBlock(),c=b.getSourceBlock(),e=a,a=b);return c===d?Connection$$module$build$src$core$connection.REASON_SELF_CONNECTION:e.type!==OPPOSITE_TYPE$$module$build$src$core$internal_constants[a.type]?Connection$$module$build$src$core$connection.REASON_WRONG_TYPE:\nc.workspace!==d.workspace?Connection$$module$build$src$core$connection.REASON_DIFFERENT_WORKSPACES:c.isShadow()&&!d.isShadow()?Connection$$module$build$src$core$connection.REASON_SHADOW_PARENT:e.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE&&d.previousConnection&&d.previousConnection.isConnected()||e.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT&&d.outputConnection&&d.outputConnection.isConnected()?Connection$$module$build$src$core$connection.REASON_PREVIOUS_AND_OUTPUT:\nConnection$$module$build$src$core$connection.CAN_CONNECT}doTypeChecks(a,b){a=a.getCheck();b=b.getCheck();if(!a||!b)return!0;for(let c=0;cc||b.getSourceBlock().isInsertionMarker())return!1;switch(b.type){case ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT:return this.canConnectToPrevious_(a,b);case ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE:if(b.isConnected()&&\n!b.targetBlock().isInsertionMarker()||a.isConnected())return!1;break;case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:if(b.isConnected()&&!b.targetBlock().isMovable()&&!b.targetBlock().isShadow())return!1;break;case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:if(b.isConnected()&&!a.getSourceBlock().nextConnection&&!b.targetBlock().isShadow()&&b.targetBlock().nextConnection||b.targetBlock()&&!b.targetBlock().isMovable()&&!b.targetBlock().isShadow())return!1;\nbreak;default:return!1}return draggingConnections$$module$build$src$core$common.includes(b)?!1:!0}canConnectToPrevious_(a,b){if(a.targetConnection||draggingConnections$$module$build$src$core$common.includes(b))return!1;if(!b.targetConnection)return!0;a=b.targetBlock();return a.isInsertionMarker()?!a.getPreviousBlock():!1}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_CHECKER,DEFAULT$$module$build$src$core$registry,ConnectionChecker$$module$build$src$core$connection_checker);\nvar module$build$src$core$connection_checker={};module$build$src$core$connection_checker.ConnectionChecker=ConnectionChecker$$module$build$src$core$connection_checker;var Workspace$$module$build$src$core$workspace=class{get isFlyout(){return this.internalIsFlyout}get isMutator(){return this.internalIsMutator}constructor(a){this.isClearing=this.internalIsMutator=this.internalIsFlyout=this.rendered=!1;this.MAX_UNDO=1024;this.connectionDBList=[];this.topBlocks=[];this.topComments=[];this.commentDB=new Map;this.listeners=[];this.undoStack_=[];this.redoStack_=[];this.blockDB=new Map;this.typedBlocksDB=new Map;this.procedureMap=new ObservableProcedureMap$$module$build$src$core$observable_procedure_map;\nthis.readOnly=!1;this.potentialVariableMap=null;this.id=genUid$$module$build$src$core$utils$idgenerator();registerWorkspace$$module$build$src$core$common(this);this.options=a||new Options$$module$build$src$core$options({});this.RTL=!!this.options.RTL;this.horizontalLayout=!!this.options.horizontalLayout;this.toolboxPosition=this.options.toolboxPosition;this.connectionChecker=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_CHECKER,this.options,\n!0))(this);this.variableMap=new (this.getVariableMapClass())(this);this.setIsReadOnly(this.options.readOnly)}dispose(){this.listeners.length=0;this.clear();unregisterWorkpace$$module$build$src$core$common(this)}sortObjects(a,b){const c=d=>({getBoundingRectangle:()=>{const e=d.getRelativeToSurfaceXY();return new Rect$$module$build$src$core$utils$rect(e.y,e.y,e.x,e.x)},moveBy:()=>{}});return this.sortByOrigin(c(a),c(b))}sortByOrigin(a,b){const c=Math.sin(toRadians$$module$build$src$core$utils$math(Workspace$$module$build$src$core$workspace.SCAN_ANGLE))*\n(this.RTL?-1:1);a=a.getBoundingRectangle().getOrigin();b=b.getBoundingRectangle().getOrigin();return a.y+c*a.x-(b.y+c*b.x)}addTopBlock(a){this.topBlocks.push(a)}removeTopBlock(a){if(!removeElem$$module$build$src$core$utils$array(this.topBlocks,a))throw Error(\"Block not present in workspace's list of top-most blocks.\");}getTopBlocks(a=!1){const b=[].concat(this.topBlocks);a&&b.length>1&&b.sort(this.sortObjects.bind(this));return b}addTypedBlock(a){this.typedBlocksDB.has(a.type)||this.typedBlocksDB.set(a.type,\n[]);this.typedBlocksDB.get(a.type).push(a)}removeTypedBlock(a){removeElem$$module$build$src$core$utils$array(this.typedBlocksDB.get(a.type),a);this.typedBlocksDB.get(a.type).length||this.typedBlocksDB.delete(a.type)}getBlocksByType(a,b=!1){if(!this.typedBlocksDB.has(a))return[];a=this.typedBlocksDB.get(a).slice(0);b&&a&&a.length>1&&a.sort(this.sortObjects.bind(this));return a.filter(c=>!c.isInsertionMarker())}addTopComment(a){this.topComments.push(a);this.commentDB.has(a.id)&&console.warn('Overriding an existing comment on this workspace, with id \"'+\na.id+'\"');this.commentDB.set(a.id,a)}removeTopComment(a){if(!removeElem$$module$build$src$core$utils$array(this.topComments,a))throw Error(\"Comment not present in workspace's list of top-most comments.\");this.commentDB.delete(a.id)}getTopComments(a=!1){const b=[].concat(this.topComments);a&&b.length>1&&b.sort(this.sortObjects.bind(this));return b}getAllBlocks(a=!1){if(a){var b=this.getTopBlocks(!0);a=[];for(let c=0;c!c.isInsertionMarker())}clear(){this.isClearing=!0;try{const a=$.getGroup$$module$build$src$core$events$utils();for(a||$.setGroup$$module$build$src$core$events$utils(!0);this.topBlocks.length;)this.topBlocks[0].dispose(!1);for(;this.topComments.length;)this.topComments[this.topComments.length-1].dispose();$.setGroup$$module$build$src$core$events$utils(a);this.isFlyout||this.variableMap.clear();this.potentialVariableMap&&this.potentialVariableMap.clear()}finally{this.isClearing=\n!1}}renameVariableById(a,b){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.renameVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().renameVariable\");(a=this.variableMap.getVariableById(a))&&this.variableMap.renameVariable(a,b)}createVariable(a,b,c){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.createVariable\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().createVariable\");return this.variableMap.createVariable(a,b!=null?b:void 0,c!=null?c:void 0)}getVariableUsesById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariableUsesById\",\n\"v12\",\"v13\",\"Blockly.Variables.getVariableUsesById\");return getVariableUsesById$$module$build$src$core$variables(this,a)}deleteVariableById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.deleteVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().deleteVariable\");const b=this.variableMap.getVariableById(a);b?$.deleteVariable$$module$build$src$core$variables(this,b):console.warn(`Can't delete non-existent variable: ${a}`)}getVariable(a,b){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariable\",\n\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariable\");return this.variableMap.getVariable(a,b)}getVariableById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariableById\");return this.variableMap.getVariableById(a)}getVariablesOfType(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariablesOfType\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariablesOfType\");return this.variableMap.getVariablesOfType(a!=\nnull?a:\"\")}getAllVariables(){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getAllVariables\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getAllVariables\");return this.variableMap.getAllVariables()}getAllVariableNames(){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getAllVariableNames\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getAllVariables\");return this.variableMap.getAllVariables().map(a=>a.getName())}getWidth(){return 0}newBlock(a,b){throw Error(\"The implementation of newBlock should be monkey-patched in by blockly.ts\");\n}newComment(a){throw Error(\"The implementation of newComment should be monkey-patched in by blockly.ts\");}remainingCapacity(){return isNaN(this.options.maxBlocks)?Infinity:this.options.maxBlocks-this.getAllBlocks(!1).length}remainingCapacityOfType(a){return this.options.maxInstances?(this.options.maxInstances[a]!==void 0?this.options.maxInstances[a]:Infinity)-this.getBlocksByType(a,!1).length:Infinity}isCapacityAvailable(a){if(!this.hasBlockLimits())return!0;let b=0;for(const c in a){if(a[c]>this.remainingCapacityOfType(c))return!1;\nb+=a[c]}return b>this.remainingCapacity()?!1:!0}hasBlockLimits(){return this.options.maxBlocks!==Infinity||!!this.options.maxInstances}getUndoStack(){return this.undoStack_}getRedoStack(){return this.redoStack_}undo(a){var b=a?this.redoStack_:this.undoStack_,c=a?this.undoStack_:this.redoStack_;const d=b.pop();if(d){for(var e=[d];b.length&&d.group&&d.group===b[b.length-1].group;){const f=b.pop();f&&e.push(f)}for(b=0;bthis.MAX_UNDO&&this.MAX_UNDO>=\n0;)this.undoStack_.shift();for(let b=0;b!!b.getStyleName()));this.refreshToolboxSelection();this.toolbox&&this.toolbox.refreshTheme();this.isVisible()&&this.setVisible(!0);a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.THEME_CHANGE))(this.getTheme().name,this.id);fire$$module$build$src$core$events$utils(a)}updateBlockStyles(a){for(let b=0,c;c=a[b];b++){const d=\nc.getStyleName();d&&c.setStyle(d)}}getInverseScreenCTM(){if(this.inverseScreenCTMDirty){const a=this.getParentSvg().getScreenCTM();a&&(this.inverseScreenCTM=a.inverse(),this.inverseScreenCTMDirty=!1)}return this.inverseScreenCTM}updateInverseScreenCTM(){this.inverseScreenCTMDirty=!0}isVisible(){return this.visible}getSvgXY(a){let b=0,c=0,d=1;if(this.getCanvas().contains(a)||this.getBubbleCanvas().contains(a))d=this.scale;do{const e=getRelativeXY$$module$build$src$core$utils$svg_math(a);if(a===this.getCanvas()||\na===this.getBubbleCanvas())d=1;b+=e.x*d;c+=e.y*d;a=a.parentNode}while(a&&a!==this.getParentSvg()&&a!==this.getInjectionDiv());return new Coordinate$$module$build$src$core$utils$coordinate(b,c)}getCachedParentSvgSize(){const a=this.cachedParentSvgSize;return new Size$$module$build$src$core$utils$size(a.width,a.height)}getOriginOffsetInPixels(){return getInjectionDivXY$$module$build$src$core$utils$svg_math(this.getCanvas())}getInjectionDiv(){if(!this.injectionDiv){let a=this.svgGroup_;for(;a;){if((\" \"+\n(a.getAttribute(\"class\")||\"\")+\" \").includes(\" injectionDiv \")){this.injectionDiv=a;break}a=a.parentNode}}return this.injectionDiv}getSvgGroup(){return this.svgGroup_}getBlockCanvas(){return this.getCanvas()}setResizeHandlerWrapper(a){this.resizeHandlerWrapper=a}createDom(a,b){this.injectionDiv||(this.injectionDiv=b!=null?b:null);this.svgGroup_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyWorkspace\",id:this.id});b&&setState$$module$build$src$core$utils$aria(this.svgGroup_,\nState$$module$build$src$core$utils$aria.LABEL,$.Msg$$module$build$src$core$msg.WORKSPACE_ARIA_LABEL);a&&(this.svgBackground_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{height:\"100%\",width:\"100%\",\"class\":a},this.svgGroup_),a===\"blocklyMainBackground\"&&this.grid?this.svgBackground_.style.fill=\"var(--blocklyGridPattern)\":this.themeManager_.subscribe(this.svgBackground_,\"workspaceBackgroundColour\",\"fill\"));this.layerManager=new LayerManager$$module$build$src$core$layer_manager(this);\nthis.svgBlockCanvas_=this.layerManager.getBlockLayer();this.svgBubbleCanvas_=this.layerManager.getBubbleLayer();this.isFlyout||(conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"pointerdown\",this,this.onMouseDown,!1),this.dummyWheelListener=()=>{},document.body.addEventListener(\"wheel\",this.dummyWheelListener),conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"wheel\",this,this.onMouseWheel));this.options.hasCategories&&(this.toolbox=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX,\nthis.options,!0))(this));this.grid&&this.grid.update(this.scale);this.recordDragTargets();(a=getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CURSOR,this.options))&&this.markerManager.setCursor(new a(this));a=this.options.parentWorkspace===null;this.renderer.createDom(this.svgGroup_,this.getTheme(),a?this.getInjectionDiv():void 0);$.getFocusManager$$module$build$src$core$focus_manager().registerTree(this,!!this.injectionDiv||this.isFlyout);return this.svgGroup_}dispose(){this.rendered=\n!1;this.currentGesture_&&this.currentGesture_.cancel();this.svgGroup_&&removeNode$$module$build$src$core$utils$dom(this.svgGroup_);this.toolbox&&(this.toolbox.dispose(),this.toolbox=null);this.flyout&&(this.flyout.dispose(),this.flyout=null);this.trashcan&&(this.trashcan.dispose(),this.trashcan=null);this.scrollbar&&(this.scrollbar.dispose(),this.scrollbar=null);this.zoomControls_&&this.zoomControls_.dispose();this.audioManager&&this.audioManager.dispose();this.grid&&(this.grid=null);this.renderer.dispose();\nthis.markerManager.dispose();super.dispose();this.themeManager_&&(this.themeManager_.unsubscribeWorkspace(this),this.themeManager_.unsubscribe(this.svgBackground_),this.options.parentWorkspace||this.themeManager_.dispose());this.connectionDBList.length=0;this.toolboxCategoryCallbacks.clear();this.flyoutButtonCallbacks.clear();if(!this.options.parentWorkspace){const a=this.getParentSvg();a&&a.parentNode&&removeNode$$module$build$src$core$utils$dom(a.parentNode)}this.resizeHandlerWrapper&&(unbind$$module$build$src$core$browser_events(this.resizeHandlerWrapper),\nthis.resizeHandlerWrapper=null);this.dummyWheelListener&&(document.body.removeEventListener(\"wheel\",this.dummyWheelListener),this.dummyWheelListener=null);$.getFocusManager$$module$build$src$core$focus_manager().isRegistered(this)&&$.getFocusManager$$module$build$src$core$focus_manager().unregisterTree(this)}addTrashcan(){this.trashcan=WorkspaceSvg$$module$build$src$core$workspace_svg.newTrashcan(this);const a=this.trashcan.createDom();this.svgGroup_.insertBefore(a,this.getCanvas())}static newTrashcan(a){throw Error(\"The implementation of newTrashcan should be monkey-patched in by blockly.ts\");\n}addZoomControls(){this.zoomControls_=new ZoomControls$$module$build$src$core$zoom_controls(this);const a=this.zoomControls_.createDom();this.svgGroup_.appendChild(a)}copyOptionsForFlyout(){return new Options$$module$build$src$core$options({parentWorkspace:this,rtl:this.RTL,oneBasedIndex:this.options.oneBasedIndex,horizontalLayout:this.horizontalLayout,renderer:this.options.renderer,rendererOverrides:this.options.rendererOverrides,plugins:this.options.plugins,modalInputs:this.options.modalInputs,\nmove:{scrollbars:!0}})}addFlyout(a){const b=this.copyOptionsForFlyout();b.toolboxPosition=this.options.toolboxPosition;this.flyout=this.horizontalLayout?new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,this.options,!0))(b):new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,this.options,!0))(b);this.flyout.autoClose=!1;this.flyout.getWorkspace().setVisible(!0);\nreturn this.flyout.createDom(a)}getFlyout(a){return this.flyout||a?this.flyout:this.toolbox?this.toolbox.getFlyout():null}getToolbox(){return this.toolbox}updateScreenCalculations(){this.updateInverseScreenCTM();this.recordDragTargets()}resizeContents(){this.resizesEnabled&&this.rendered&&(this.scrollbar&&this.scrollbar.resize(),this.updateInverseScreenCTM())}resize(){this.toolbox?this.toolbox.position():this.flyout&&this.flyout.position();const a=this.componentManager.getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE,\n!0),b=this.getMetricsManager().getUiMetrics(),c=[];for(let d=0,e;e=a[d];d++){e.position(b,c);const f=e.getBoundingRectangle();f&&c.push(f)}this.scrollbar&&this.scrollbar.resize();this.updateScreenCalculations()}updateScreenCalculationsIfScrolled(){const a=getDocumentScroll$$module$build$src$core$utils$svg_math();Coordinate$$module$build$src$core$utils$coordinate.equals(this.lastRecordedPageScroll,a)||(this.lastRecordedPageScroll=a,this.updateScreenCalculations())}getLayerManager(){return this.layerManager}getCanvas(){return this.layerManager.getBlockLayer()}setCachedParentSvgSize(a,\nb){const c=this.getParentSvg();a!=null&&(this.cachedParentSvgSize.width=a,c.setAttribute(\"data-cached-width\",`${a}`));b!=null&&(this.cachedParentSvgSize.height=b,c.setAttribute(\"data-cached-height\",`${b}`))}getBubbleCanvas(){return this.layerManager.getBubbleLayer()}getParentSvg(){if(!this.cachedParentSvg){let a=this.svgGroup_;for(;a;){if(a.tagName===\"svg\"){this.cachedParentSvg=a;break}a=a.parentNode}}return this.cachedParentSvg}maybeFireViewportChangeEvent(){if(isEnabled$$module$build$src$core$events$utils()){var a=\nthis.scale,b=-this.scrollY,c=-this.scrollX;if(!(a===this.oldScale&&Math.abs(b-this.oldTop)<1&&Math.abs(c-this.oldLeft)<1)){var d=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE))(b,c,a,this.id,this.oldScale);this.oldScale=a;this.oldTop=b;this.oldLeft=c;fire$$module$build$src$core$events$utils(d)}}}translate(a,b){let c;(c=this.layerManager)==null||c.translateLayers(new Coordinate$$module$build$src$core$utils$coordinate(a,b),this.scale);let d;\n(d=this.grid)==null||d.moveTo(a,b);this.maybeFireViewportChangeEvent()}getWidth(){const a=this.getMetrics();return a?a.viewWidth/this.scale:0}setVisible(a){this.visible=a;this.svgGroup_&&(this.scrollbar&&this.scrollbar.setContainerVisible(a),this.getFlyout()&&this.getFlyout().setContainerVisible(a),this.getParentSvg().style.display=a?\"block\":\"none\",this.toolbox&&this.toolbox.setVisible(a),a||this.hideChaff(!0))}render(){const a=this.getAllBlocks(!1);for(let b=a.length-1;b>=0;b--)a[b].queueRender();\nthis.getTopBlocks().flatMap(b=>b.getDescendants(!1)).filter(b=>b.isInsertionMarker()).forEach(b=>b.queueRender())}highlightBlock(a,b){if(b===void 0){for(let c=0,d;d=this.highlightedBlocks[c];c++)d.setHighlighted(!1);this.highlightedBlocks.length=0}if(a=a?this.getBlockById(a):null)(b=b===void 0||b)?this.highlightedBlocks.includes(a)||this.highlightedBlocks.push(a):removeElem$$module$build$src$core$utils$array(this.highlightedBlocks,a),a.setHighlighted(b)}variableChangeCallback(a){switch(a.type){case EventType$$module$build$src$core$events$type.VAR_CREATE:case EventType$$module$build$src$core$events$type.VAR_DELETE:case EventType$$module$build$src$core$events$type.VAR_RENAME:case EventType$$module$build$src$core$events$type.VAR_TYPE_CHANGE:this.refreshToolboxSelection()}}refreshToolboxSelection(){const a=\nthis.isFlyout?this.targetWorkspace:this;a&&!a.currentGesture_&&a.toolbox&&a.toolbox.getFlyout()&&a.toolbox.refreshSelection()}recordDragTargets(){const a=this.componentManager.getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET,!0);this.dragTargetAreas=[];for(let b=0,c;c=a[b];b++){const d=c.getClientRect();d&&this.dragTargetAreas.push({component:c,clientRect:d})}}newBlock(a,b){throw Error(\"The implementation of newBlock should be monkey-patched in by blockly.ts\");\n}newComment(a){throw Error(\"The implementation of newComment should be monkey-patched in by blockly.ts\");}getDragTarget(a){for(let b=0,c;c=this.dragTargetAreas[b];b++)if(c.clientRect.contains(a.clientX,a.clientY))return c.component;return null}onMouseDown(a){const b=this.getGesture(a);b&&b.handleWsStart(a,this)}startDrag(a,b){start$$module$build$src$core$utils$drag(this,a,b)}moveDrag(a){return move$$module$build$src$core$utils$drag(this,a)}setKeyboardMoveInProgress(a){this.keyboardMoveInProgress=\na}isDragging(){return this.keyboardMoveInProgress||this.currentGesture_!==null&&this.currentGesture_.isDragging()}isDraggable(){return this.options.moveOptions&&this.options.moveOptions.drag}isMovable(){return this.options.moveOptions&&!!this.options.moveOptions.scrollbars||this.options.moveOptions&&this.options.moveOptions.wheel||this.options.moveOptions&&this.options.moveOptions.drag||this.options.zoomOptions&&this.options.zoomOptions.wheel||this.options.zoomOptions&&this.options.zoomOptions.pinch}isMovableHorizontally(){const a=\n!!this.scrollbar;return this.isMovable()&&(!a||a&&this.scrollbar.canScrollHorizontally())}isMovableVertically(){const a=!!this.scrollbar;return this.isMovable()&&(!a||a&&this.scrollbar.canScrollVertically())}onMouseWheel(a){if(Gesture$$module$build$src$core$gesture.inProgress())a.preventDefault(),a.stopPropagation();else{var b=this.options.zoomOptions&&this.options.zoomOptions.wheel,c=this.options.moveOptions&&this.options.moveOptions.wheel;if(b||c){var d=getScrollDeltaPixels$$module$build$src$core$browser_events(a);\nif(MAC$$module$build$src$core$utils$useragent)var e=a.metaKey;b&&(a.ctrlKey||e||!c)?(d=-d.y/50,b=mouseToSvg$$module$build$src$core$browser_events(a,this.getParentSvg(),this.getInverseScreenCTM()),this.zoom(b.x,b.y,d)):(b=this.scrollX-d.x,c=this.scrollY-d.y,a.shiftKey&&!d.x&&(b=this.scrollX-d.y,c=this.scrollY),this.scroll(b,c));a.preventDefault()}}}getBlocksBoundingBox(){const a=this.getTopBoundedElements();if(!a.length)return new Rect$$module$build$src$core$utils$rect(0,0,0,0);const b=a[0].getBoundingRectangle();\nfor(let d=1;db.bottom&&(b.bottom=c.bottom),c.leftb.right&&(b.right=c.right))}return b}cleanUp(){this.setResizesEnabled(!1);const a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);var b=this.getTopBlocks(!0),c=b.filter(g=>g.isMovable());const d=b.filter(g=>!g.isMovable()).map(g=>\ng.getBoundingRectangle());b=function(g){for(const h of d)if(g.intersects(h))return h;return null};var e=0;const f=this.renderer.getConstants().MIN_BLOCK_HEIGHT;for(const g of c){c=g.getBoundingRectangle();g.moveBy(-c.left,e-c.top,[\"cleanup\"]);g.snapToGrid();c=g.getBoundingRectangle();for(e=b(c);e!=null;)e=e.top+e.getHeight()+f,g.moveBy(0,e-c.top,[\"cleanup\"]),g.snapToGrid(),c=g.getBoundingRectangle(),e=b(c);e=g.getRelativeToSurfaceXY().y+g.getHeightWidth().height+f}$.setGroup$$module$build$src$core$events$utils(a);\nthis.setResizesEnabled(!0)}showContextMenu(a){if(!this.isReadOnly()&&!this.isFlyout){var b=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({workspace:this,focusedNode:this},a);this.configureContextMenu&&this.configureContextMenu(b,a);var c=a instanceof PointerEvent?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this,new Coordinate$$module$build$src$core$utils$coordinate(5,\n5));show$$module$build$src$core$contextmenu(a,b,this.RTL,this,c)}}updateToolbox(a){if(a=convertToolboxDefToJson$$module$build$src$core$utils$toolbox(a)){if(!this.options.languageTree)throw Error(\"Existing toolbox is null. Can't create new toolbox.\");if(hasCategories$$module$build$src$core$utils$toolbox(a)){if(!this.toolbox)throw Error(\"Existing toolbox has no categories. Can't change mode.\");this.options.languageTree=a;this.toolbox.render(a)}else{if(!this.flyout)throw Error(\"Existing toolbox has categories. Can't change mode.\");\nthis.options.languageTree=a;this.flyout.show(a)}}else if(this.options.languageTree)throw Error(\"Can't nullify an existing toolbox.\");}markFocused(){this.options.parentWorkspace?this.options.parentWorkspace.markFocused():(setMainWorkspace$$module$build$src$core$common(this),this.getParentSvg().focus({preventScroll:!0}))}zoom(a,b,c){c=Math.pow(this.options.zoomOptions.scaleSpeed,c);const d=this.scale*c;if(this.scale!==d){d>this.options.zoomOptions.maxScale?c=this.options.zoomOptions.maxScale/this.scale:\ndthis.options.zoomOptions.maxScale?a=this.options.zoomOptions.maxScale:this.options.zoomOptions.minScale&&a{if(c.isFlyout){let d;const e=(d=c.targetWorkspace)==null?void 0:d.getFlyout();if(e instanceof Flyout$$module$build$src$core$flyout_base)return e.getFlyoutScale()}return c.getScale()},b=(c,d)=>c.options.parentWorkspace&&c.options.parentWorkspace.getSvgGroup().contains(c.getSvgGroup())?b(c.options.parentWorkspace,d*a(c)):d*a(c);return b(this,1)}scroll(a,b){this.hideChaff(!0);\nconst c=this.getMetrics();a=Math.min(a,-c.scrollLeft);b=Math.min(b,-c.scrollTop);const d=c.scrollTop+Math.max(0,c.scrollHeight-c.viewHeight);a=Math.max(a,-(c.scrollLeft+Math.max(0,c.scrollWidth-c.viewWidth)));b=Math.max(b,-d);this.scrollX=a;this.scrollY=b;this.scrollbar&&this.scrollbar.set(-(a+c.scrollLeft),-(b+c.scrollTop),!1);a+=c.absoluteLeft;b+=c.absoluteTop;this.translate(a,b)}getBlockById(a){return super.getBlockById(a)}getAllBlocks(a=!1){return super.getAllBlocks(a)}getTopBlocks(a=!1){return super.getTopBlocks(a)}addTopBlock(a){this.addTopBoundedElement(a);\nsuper.addTopBlock(a)}removeTopBlock(a){this.removeTopBoundedElement(a);super.removeTopBlock(a)}addTopComment(a){this.addTopBoundedElement(a);super.addTopComment(a)}removeTopComment(a){this.removeTopBoundedElement(a);super.removeTopComment(a)}getTopComments(a=!1){return super.getTopComments(a)}getCommentById(a){return super.getCommentById(a)}getRootWorkspace(){return super.getRootWorkspace()}addTopBoundedElement(a){this.topBoundedElements.push(a)}removeTopBoundedElement(a){removeElem$$module$build$src$core$utils$array(this.topBoundedElements,\na)}getTopBoundedElements(a=!1){const b=[].concat(this.topBoundedElements);a&&b.sort(this.sortByOrigin.bind(this));return b}setResizesEnabled(a){const b=!this.resizesEnabled&&a;this.resizesEnabled=a;b&&this.resizeContents()}clear(){this.setResizesEnabled(!1);super.clear();this.topBoundedElements=[];this.setResizesEnabled(!0)}registerButtonCallback(a,b){if(typeof b!==\"function\")throw TypeError(\"Button callbacks must be functions.\");this.flyoutButtonCallbacks.set(a,b)}getButtonCallback(a){let b;return(b=\nthis.flyoutButtonCallbacks.get(a))!=null?b:null}removeButtonCallback(a){this.flyoutButtonCallbacks.delete(a)}registerToolboxCategoryCallback(a,b){if(typeof b!==\"function\")throw TypeError(\"Toolbox category callbacks must be functions.\");this.toolboxCategoryCallbacks.set(a,b)}getToolboxCategoryCallback(a){return this.toolboxCategoryCallbacks.get(a)||null}removeToolboxCategoryCallback(a){this.toolboxCategoryCallbacks.delete(a)}getGesture(a){if(this.keyboardMoveInProgress)return a.preventDefault(),a.stopPropagation(),\nnull;const b=a.type===\"pointerdown\";let c;b&&((c=this.currentGesture_)==null?0:c.hasStarted())&&(console.warn(\"Tried to start the same gesture twice.\"),this.currentGesture_.cancel());!this.currentGesture_&&b&&(this.currentGesture_=new Gesture$$module$build$src$core$gesture(a,this));return this.currentGesture_}clearGesture(){this.currentGesture_=null}cancelCurrentGesture(){this.currentGesture_&&this.currentGesture_.cancel()}getAudioManager(){return this.audioManager}getGrid(){return this.grid}hideChaff(a=\n!1){hide$$module$build$src$core$tooltip();hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv(this);hideWithoutAnimation$$module$build$src$core$dropdowndiv();this.hideComponents(a)}hideComponents(a=!1){this.getComponentManager().getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,!0).forEach(b=>b.autoHide(a))}static setTopLevelWorkspaceMetrics(a){const b=this.getMetrics();typeof a.x===\"number\"&&(this.scrollX=-(b.scrollLeft+(b.scrollWidth-b.viewWidth)*\na.x));typeof a.y===\"number\"&&(this.scrollY=-(b.scrollTop+(b.scrollHeight-b.viewHeight)*a.y));this.translate(this.scrollX+b.absoluteLeft,this.scrollY+b.absoluteTop)}addClass(a){this.injectionDiv&&addClass$$module$build$src$core$utils$dom(this.injectionDiv,a)}removeClass(a){this.injectionDiv&&removeClass$$module$build$src$core$utils$dom(this.injectionDiv,a)}setIsReadOnly(a){super.setIsReadOnly(a);a?this.addClass(\"blocklyReadOnly\"):this.removeClass(\"blocklyReadOnly\")}scrollBoundsIntoView(a,b=10){if(!Gesture$$module$build$src$core$gesture.inProgress()){var c=\nthis.getScale(),d=this.getMetricsManager().getViewMetrics(!0);d=new Rect$$module$build$src$core$utils$rect(d.top,d.top+d.height,d.left,d.left+d.width);if(!(a.left>=d.left&&a.top>=d.top&&a.right<=d.right&&a.bottom<=d.bottom)){a=a.clone();a.top-=b;a.bottom+=b;a.left-=b;a.right+=b;var e=b=0;a.leftd.right&&(b=this.RTL?d.right-a.right:Math.max(d.right-a.right,d.left-a.left));a.topd.bottom&&(e=\nMath.max(d.bottom-a.bottom,d.top-a.top));this.scroll(this.scrollX+b*c,this.scrollY+e*c)}}}getFocusableElement(){return this.svgGroup_}getFocusableTree(){return this.isMutator&&this.options.parentWorkspace||this}onNodeFocus(){}onNodeBlur(){}canBeFocused(){return!0}getRootFocusableNode(){return this}getRestoredFocusableNode(a){if(a)return null;let b;a=(b=this.targetWorkspace)==null?void 0:b.getFlyout();if(this.isFlyout&&a){let d,e;return(e=(d=a.getContents().find(f=>{f=f.getElement();return isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(f)&&\nf.canBeFocused()}))==null?void 0:d.getElement())!=null?e:null}let c;return(c=this.getTopBlocks(!0)[0])!=null?c:null}getNestedTrees(){const a=this.getAllBlocks().map(c=>c.getIcons()).flat().filter(c=>c instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&c.bubbleIsVisible()).map(c=>{let d;return(d=c.getBubble())==null?void 0:d.getWorkspace()}).filter(c=>!!c),b=this.getFlyout(!0);b&&a.push(b.getWorkspace());return a}searchForWorkspaceComment(a){for(const b of this.getTopComments())if(b instanceof\nRenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment&&b.canBeFocused()&&b.getFocusableElement().id===a)return b}lookUpFocusableNode(a){var b;const c=(b=this.targetWorkspace)==null?void 0:b.getFlyout();if(this.isFlyout&&c)for(var d of c.getContents())if(b=d.getElement(),isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(b)&&b.canBeFocused()&&b.getFocusableElement().id===a)return b;d=a.indexOf(\"_field_\");b=a.indexOf(\"_connection_\");if(d!==-1){var e=a.substring(0,\nd);if(e=this.getBlockById(e))for(var f of e.getFields())if(f.canBeFocused()&&f.getFocusableElement().id===a)return f;return null}if(b!==-1){e=a.substring(0,b);if(e=this.getBlockById(e))for(const h of e.getConnections_(!0))if(h.id===a)return h;return null}f=Math.max(a.indexOf(COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor),a.indexOf(COMMENT_COLLAPSE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$collapse_comment_bar_button),a.indexOf(COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button));\nif(f!==-1&&(f=a.substring(0,f),f=this.searchForWorkspaceComment(f))){if(a.indexOf(COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor)>-1)return f.getEditorFocusableNode();var g;return(g=f.view.getCommentBarButtons().find(h=>h.getFocusableElement().id.includes(a)))!=null?g:null}if((g=this.getAllBlocks(!1).find(h=>h.getFocusableElement().id===a))||(g=this.searchForWorkspaceComment(a)))return g;g=this.getAllBlocks().map(h=>h.getIcons()).flat();for(e of g){if(e.canBeFocused()&&\ne.getFocusableElement().id===a)return e;if(hasBubble$$module$build$src$core$interfaces$i_has_bubble(e)){if((g=e.getBubble())&&g.canBeFocused()&&g.getFocusableElement().id===a)return g;if(g instanceof TextInputBubble$$module$build$src$core$bubbles$textinput_bubble&&g.getEditor().getFocusableElement().id===a)return g.getEditor()}}return null}onTreeFocus(a,b){}onTreeBlur(a){if(this.isFlyout&&this.targetWorkspace&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()){var b=\nthis.targetWorkspace.getToolbox();b&&a===b||isAutoHideable$$module$build$src$core$interfaces$i_autohideable(b)&&b.autoHide(!1)}}getNavigator(){return this.navigator}setNavigator(a){this.navigator=a}},module$build$src$core$workspace_svg={};module$build$src$core$workspace_svg.WorkspaceSvg=WorkspaceSvg$$module$build$src$core$workspace_svg;module$build$src$core$workspace_svg.resizeSvgContents=resizeSvgContents$$module$build$src$core$workspace_svg;var VarBase$$module$build$src$core$events$events_var_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.isBlank=typeof a===\"undefined\";a&&(this.varId=a.getId(),this.workspaceId=a.getWorkspace().id)}toJson(){const a=super.toJson();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");a.varId=this.varId;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarBase$$module$build$src$core$events$events_var_base);\nb.varId=a.varId;return b}},module$build$src$core$events$events_var_base={};module$build$src$core$events$events_var_base.VarBase=VarBase$$module$build$src$core$events$events_var_base;var VarCreate$$module$build$src$core$events$events_var_create=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_CREATE;a&&(this.varType=a.getType(),this.varName=a.getName())}toJson(){const a=super.toJson();if(this.varType===void 0)throw Error(\"The var type is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");\na.varType=this.varType;a.varName=this.varName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarCreate$$module$build$src$core$events$events_var_create);b.varType=a.varType;b.varName=a.varName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");b=b.getVariableMap();\na?b.createVariable(this.varName,this.varType,this.varId):(a=b.getVariableById(this.varId))&&b.deleteVariable(a)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_CREATE,VarCreate$$module$build$src$core$events$events_var_create);var module$build$src$core$events$events_var_create={};module$build$src$core$events$events_var_create.VarCreate=VarCreate$$module$build$src$core$events$events_var_create;var VariableModel$$module$build$src$core$variable_model=class{constructor(a,b,c,d){this.workspace=a;this.name=b;this.type=c||\"\";this.id=d||genUid$$module$build$src$core$utils$idgenerator()}getId(){return this.id}getName(){return this.name}setName(a){this.name=a;return this}getType(){return this.type}setType(a){this.type=a;return this}getWorkspace(){return this.workspace}save(){const a={name:this.getName(),id:this.getId()},b=this.getType();b&&(a.type=b);return a}static load(a,b){a=new this(b,a.name,\na.type,a.id);b.getVariableMap().addVariable(a);fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_CREATE))(a))}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MODEL,DEFAULT$$module$build$src$core$registry,VariableModel$$module$build$src$core$variable_model);var module$build$src$core$variable_model={};module$build$src$core$variable_model.VariableModel=VariableModel$$module$build$src$core$variable_model;var VarDelete$$module$build$src$core$events$events_var_delete=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_DELETE;a&&(this.varType=a.getType(),this.varName=a.getName())}toJson(){const a=super.toJson();if(this.varType===void 0)throw Error(\"The var type is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");\na.varType=this.varType;a.varName=this.varName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarDelete$$module$build$src$core$events$events_var_delete);b.varType=a.varType;b.varName=a.varName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");b=b.getVariableMap();\na?(a=b.getVariableById(this.varId))&&b.deleteVariable(a):b.createVariable(this.varName,this.varType,this.varId)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_DELETE,VarDelete$$module$build$src$core$events$events_var_delete);var module$build$src$core$events$events_var_delete={};module$build$src$core$events$events_var_delete.VarDelete=VarDelete$$module$build$src$core$events$events_var_delete;var VarRename$$module$build$src$core$events$events_var_rename=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a,b){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_RENAME;a&&(this.oldName=a.getName(),this.newName=typeof b===\"undefined\"?\"\":b)}toJson(){const a=super.toJson();if(!this.oldName)throw Error(\"The old var name is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.newName)throw Error(\"The new var name is undefined. Either pass a value to the constructor, or call fromJson\");\na.oldName=this.oldName;a.newName=this.newName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarRename$$module$build$src$core$events$events_var_rename);b.oldName=a.oldName;b.newName=a.newName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.oldName)throw Error(\"The old var name is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.newName)throw Error(\"The new var name is undefined. Either pass a value to the constructor, or call fromJson\");\nb=b.getVariableMap();const c=b.getVariableById(this.varId);a?c&&b.renameVariable(c,this.newName):c&&b.renameVariable(c,this.oldName)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_RENAME,VarRename$$module$build$src$core$events$events_var_rename);var module$build$src$core$events$events_var_rename={};module$build$src$core$events$events_var_rename.VarRename=VarRename$$module$build$src$core$events$events_var_rename;var VariableMap$$module$build$src$core$variable_map=class{constructor(a,b=!1){this.workspace=a;this.potentialMap=b;this.variableMap=new Map}clear(){for(const a of this.variableMap.values())for(const b of a.values())this.deleteVariable(b);if(this.variableMap.size!==0)throw Error(\"Non-empty variable map\");}renameVariable(a,b){if(a.getName()===b)return a;var c=a.getType();c=this.getVariable(b,c);const d=this.workspace.getAllBlocks(!1);let e=\"\";this.potentialMap||(e=$.getGroup$$module$build$src$core$events$utils())||\n$.setGroup$$module$build$src$core$events$utils(!0);try{c&&c.getId()!==a.getId()?this.renameVariableWithConflict(a,b,c,d):this.renameVariableAndUses(a,b,d)}finally{this.potentialMap||$.setGroup$$module$build$src$core$events$utils(e)}return a}changeVariableType(a,b){const c=a.getType();if(c===b)return a;var d=this.variableMap.get(c);d==null||d.delete(a.getId());(d==null?void 0:d.size)===0&&this.variableMap.delete(c);a.setType(b);let e;d=(e=this.variableMap.get(b))!=null?e:new Map;d.set(a.getId(),a);\nthis.variableMap.has(b)||this.variableMap.set(b,d);fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_TYPE_CHANGE))(a,c,b));return a}renameVariableById(a,b){warn$$module$build$src$core$utils$deprecation(\"VariableMap.renameVariableById\",\"v12\",\"v13\",\"VariableMap.renameVariable\");const c=this.getVariableById(a);if(!c)throw Error(\"Tried to rename a variable that didn't exist. ID: \"+a);this.renameVariable(c,b)}renameVariableAndUses(a,\nb,c){this.potentialMap||fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_RENAME))(a,b));a.setName(b);for(b=0;b$.Names$$module$build$src$core$names.equals(d.getName(),\na)))!=null?c:null}getVariableById(a){for(const b of this.variableMap.values())if(b.has(a)){let c;return(c=b.get(a))!=null?c:null}return null}getVariablesOfType(a){return(a=this.variableMap.get(a||\"\"))?[...a.values()]:[]}getTypes(){return[...this.variableMap.keys()]}getAllVariables(){let a=[];for(const b of this.variableMap.values())a=a.concat(...b.values());return a}getAllVariableNames(){warn$$module$build$src$core$utils$deprecation(\"VariableMap.getAllVariableNames\",\"v12\",\"v13\",\"Blockly.Variables.getAllVariables\");\nconst a=[];for(const b of this.variableMap.values())for(const c of b.values())a.push(c.getName());return a}getVariableUsesById(a){warn$$module$build$src$core$utils$deprecation(\"VariableMap.getVariableUsesById\",\"v12\",\"v13\",\"Blockly.Variables.getVariableUsesById\");return getVariableUsesById$$module$build$src$core$variables(this.workspace,a)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MAP,DEFAULT$$module$build$src$core$registry,VariableMap$$module$build$src$core$variable_map);\nvar module$build$src$core$variable_map={};module$build$src$core$variable_map.VariableMap=VariableMap$$module$build$src$core$variable_map;var TrashcanOpen$$module$build$src$core$events$events_trashcan_open=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b){super(b);this.type=EventType$$module$build$src$core$events$type.TRASHCAN_OPEN;this.isOpen=a}toJson(){const a=super.toJson();if(this.isOpen===void 0)throw Error(\"Whether this is already open or not is undefined. Either pass a value to the constructor, or call fromJson\");a.isOpen=this.isOpen;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?\nc:new TrashcanOpen$$module$build$src$core$events$events_trashcan_open);b.isOpen=a.isOpen;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.TRASHCAN_OPEN,TrashcanOpen$$module$build$src$core$events$events_trashcan_open);var module$build$src$core$events$events_trashcan_open={};module$build$src$core$events$events_trashcan_open.TrashcanOpen=TrashcanOpen$$module$build$src$core$events$events_trashcan_open;var Trashcan$$module$build$src$core$trashcan=class extends DeleteArea$$module$build$src$core$delete_area{constructor(a){super();this.workspace=a;this.id=\"trashcan\";this.contents=[];this.flyout=null;this.isLidOpen=!1;this.minOpenness=0;this.lidTask=this.svgLid=this.svgGroup=null;this.top=this.left=this.lidOpen=0;this.initialized=!1;this.workspace.options.maxTrashcanContents<=0||(a=this.workspace.copyOptionsForFlyout(),this.workspace.horizontalLayout?(a.toolboxPosition=this.workspace.toolboxPosition===\nPosition$$module$build$src$core$utils$toolbox.TOP?Position$$module$build$src$core$utils$toolbox.BOTTOM:Position$$module$build$src$core$utils$toolbox.TOP,this.flyout=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,this.workspace.options,!0))(a)):(a.toolboxPosition=this.workspace.toolboxPosition===Position$$module$build$src$core$utils$toolbox.RIGHT?Position$$module$build$src$core$utils$toolbox.LEFT:Position$$module$build$src$core$utils$toolbox.RIGHT,\nthis.flyout=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,this.workspace.options,!0))(a)),this.workspace.addChangeListener(this.onDelete.bind(this)))}createDom(){this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyTrash\"});let a;const b=String(Math.random()).substring(2);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,\n{id:\"blocklyTrashBodyClipPath\"+b},this.svgGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:WIDTH$$module$build$src$core$trashcan,height:BODY_HEIGHT$$module$build$src$core$trashcan,y:LID_HEIGHT$$module$build$src$core$trashcan},a);const c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,x:-SPRITE_LEFT$$module$build$src$core$trashcan,height:SPRITE$$module$build$src$core$sprites.height,\ny:-SPRITE_TOP$$module$build$src$core$trashcan,\"clip-path\":\"url(#blocklyTrashBodyClipPath\"+b+\")\"},this.svgGroup);c.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyTrashLidClipPath\"+b},this.svgGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:WIDTH$$module$build$src$core$trashcan,\nheight:LID_HEIGHT$$module$build$src$core$trashcan},a);this.svgLid=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,x:-SPRITE_LEFT$$module$build$src$core$trashcan,height:SPRITE$$module$build$src$core$sprites.height,y:-SPRITE_TOP$$module$build$src$core$trashcan,\"clip-path\":\"url(#blocklyTrashLidClipPath\"+b+\")\"},this.svgGroup);this.svgLid.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);bind$$module$build$src$core$browser_events(this.svgGroup,\"pointerdown\",this,this.blockMouseDownWhenOpenable);bind$$module$build$src$core$browser_events(this.svgGroup,\"pointerup\",this,this.click);bind$$module$build$src$core$browser_events(c,\"pointerover\",this,this.mouseOver);bind$$module$build$src$core$browser_events(c,\"pointerout\",this,this.mouseOut);this.animateLid();return this.svgGroup}init(){if(this.workspace.options.maxTrashcanContents>\n0){const a=this.flyout.createDom(Svg$$module$build$src$core$utils$svg.SVG);addClass$$module$build$src$core$utils$dom(a,\"blocklyTrashcanFlyout\");insertAfter$$module$build$src$core$utils$dom(a,this.workspace.getParentSvg());this.flyout.init(this.workspace)}this.workspace.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.TRASHCAN_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,\nComponentManager$$module$build$src$core$component_manager.Capability.DELETE_AREA,ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET,ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE]});this.initialized=!0;this.setLidOpen(!1)}dispose(){this.workspace.getComponentManager().removeComponent(\"trashcan\");this.svgGroup&&removeNode$$module$build$src$core$utils$dom(this.svgGroup);this.lidTask&&clearTimeout(this.lidTask)}hasContents(){return!!this.contents.length}contentsIsOpen(){return!!this.flyout&&\nthis.flyout.isVisible()}openFlyout(){if(!this.contentsIsOpen()){var a=this.contents.map(function(c){return JSON.parse(c)}),b=this.workspace.getParentSvg().style;b.cursor=\"wait\";setTimeout(()=>{let c;(c=this.flyout)==null||c.show(a);b.cursor=\"\";let d;(d=this.workspace.scrollbar)==null||d.setVisible(!1)},10);this.fireUiEvent(!0)}}closeFlyout(){if(this.contentsIsOpen()){var a;(a=this.flyout)==null||a.hide();var b;(b=this.workspace.scrollbar)==null||b.setVisible(!0);this.fireUiEvent(!1);this.workspace.recordDragTargets()}}autoHide(a){!a&&\nthis.flyout&&this.closeFlyout()}emptyContents(){this.hasContents()&&(this.contents.length=0,this.setMinOpenness(0),this.closeFlyout())}position(a,b){if(this.initialized){var c=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers(this.workspace,a);a=getStartPositionRect$$module$build$src$core$positionable_helpers(c,new Size$$module$build$src$core$utils$size(WIDTH$$module$build$src$core$trashcan,BODY_HEIGHT$$module$build$src$core$trashcan+LID_HEIGHT$$module$build$src$core$trashcan),\nMARGIN_HORIZONTAL$$module$build$src$core$trashcan,MARGIN_VERTICAL$$module$build$src$core$trashcan,a,this.workspace);b=bumpPositionRect$$module$build$src$core$positionable_helpers(a,MARGIN_VERTICAL$$module$build$src$core$trashcan,c.vertical===verticalPosition$$module$build$src$core$positionable_helpers.TOP?bumpDirection$$module$build$src$core$positionable_helpers.DOWN:bumpDirection$$module$build$src$core$positionable_helpers.UP,b);this.top=b.top;this.left=b.left;var d;(d=this.svgGroup)==null||d.setAttribute(\"transform\",\n\"translate(\"+this.left+\",\"+this.top+\")\");var e;(e=this.flyout)==null||e.position()}}getBoundingRectangle(){return new Rect$$module$build$src$core$utils$rect(this.top,this.top+BODY_HEIGHT$$module$build$src$core$trashcan+LID_HEIGHT$$module$build$src$core$trashcan,this.left,this.left+WIDTH$$module$build$src$core$trashcan)}getClientRect(){if(!this.svgGroup)return null;var a=this.svgGroup.getBoundingClientRect();const b=a.top+SPRITE_TOP$$module$build$src$core$trashcan-MARGIN_HOTSPOT$$module$build$src$core$trashcan;\na=a.left+SPRITE_LEFT$$module$build$src$core$trashcan-MARGIN_HOTSPOT$$module$build$src$core$trashcan;return new Rect$$module$build$src$core$utils$rect(b,b+LID_HEIGHT$$module$build$src$core$trashcan+BODY_HEIGHT$$module$build$src$core$trashcan+2*MARGIN_HOTSPOT$$module$build$src$core$trashcan,a,a+WIDTH$$module$build$src$core$trashcan+2*MARGIN_HOTSPOT$$module$build$src$core$trashcan)}onDragOver(a){this.setLidOpen(this.wouldDelete_)}onDragExit(a){this.setLidOpen(!1)}onDrop(a){setTimeout(this.setLidOpen.bind(this,\n!1),100)}setLidOpen(a){this.isLidOpen!==a&&(this.lidTask&&clearTimeout(this.lidTask),this.isLidOpen=a,this.animateLid())}animateLid(){const a=ANIMATION_FRAMES$$module$build$src$core$trashcan;var b=1/(a+1);this.lidOpen+=this.isLidOpen?b:-b;this.lidOpen=Math.min(Math.max(this.lidOpen,this.minOpenness),1);this.setLidAngle(this.lidOpen*MAX_LID_ANGLE$$module$build$src$core$trashcan);b=OPACITY_MIN$$module$build$src$core$trashcan+this.lidOpen*(OPACITY_MAX$$module$build$src$core$trashcan-OPACITY_MIN$$module$build$src$core$trashcan);\nthis.svgGroup&&(this.svgGroup.style.opacity=`${b}`);this.lidOpen>this.minOpenness&&this.lidOpen<1&&(this.lidTask=setTimeout(this.animateLid.bind(this),ANIMATION_LENGTH$$module$build$src$core$trashcan/a))}setLidAngle(a){const b=this.workspace.toolboxPosition===Position$$module$build$src$core$utils$toolbox.RIGHT||this.workspace.horizontalLayout&&this.workspace.RTL;let c;(c=this.svgLid)==null||c.setAttribute(\"transform\",\"rotate(\"+(b?-a:a)+\",\"+(b?4:WIDTH$$module$build$src$core$trashcan-4)+\",\"+(LID_HEIGHT$$module$build$src$core$trashcan-\n2)+\")\")}setMinOpenness(a){this.minOpenness=a;this.isLidOpen||this.setLidAngle(a*MAX_LID_ANGLE$$module$build$src$core$trashcan)}closeLid(){this.setLidOpen(!1)}click(){this.hasContents()&&!this.workspace.isDragging()&&this.openFlyout()}fireUiEvent(a){a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.TRASHCAN_OPEN))(a,this.workspace.id);fire$$module$build$src$core$events$utils(a)}blockMouseDownWhenOpenable(a){!this.contentsIsOpen()&&this.hasContents()&&a.stopPropagation()}mouseOver(){this.hasContents()&&\nthis.setLidOpen(!0)}mouseOut(){this.setLidOpen(!1)}onDelete(a){if(!(this.workspace.options.maxTrashcanContents<=0||!isBlockDelete$$module$build$src$core$events$predicates(a)||a.wasShadow)){if(!a.oldJson)throw Error(\"Encountered a delete event without proper oldJson\");a=JSON.stringify(this.cleanBlockJson(a.oldJson));if(!this.contents.includes(a)){for(this.contents.unshift(a);this.contents.length>this.workspace.options.maxTrashcanContents;)this.contents.pop();this.setMinOpenness(HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan)}}}cleanBlockJson(a){function b(c){if(c){delete c.id;\ndelete c.x;delete c.y;delete c.enabled;delete c.disabledReasons;if(c.icons&&c.icons.comment){var d=c.icons.comment;delete d.height;delete d.width;delete d.pinned}d=c.inputs;for(var e in d){var f=d[e];const g=f.block;f=f.shadow;g&&b(g);f&&b(f)}c.next&&(e=c.next,c=e.block,e=e.shadow,c&&b(c),e&&b(e))}}a=JSON.parse(JSON.stringify(a));b(a);return Object.assign({},{kind:\"BLOCK\"},a)}},WIDTH$$module$build$src$core$trashcan=47,BODY_HEIGHT$$module$build$src$core$trashcan=44,LID_HEIGHT$$module$build$src$core$trashcan=\n16,MARGIN_VERTICAL$$module$build$src$core$trashcan=20,MARGIN_HORIZONTAL$$module$build$src$core$trashcan=20,MARGIN_HOTSPOT$$module$build$src$core$trashcan=10,SPRITE_LEFT$$module$build$src$core$trashcan=0,SPRITE_TOP$$module$build$src$core$trashcan=32,HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan=.1,ANIMATION_LENGTH$$module$build$src$core$trashcan=80,ANIMATION_FRAMES$$module$build$src$core$trashcan=4,OPACITY_MIN$$module$build$src$core$trashcan=.4,OPACITY_MAX$$module$build$src$core$trashcan=.8,\nMAX_LID_ANGLE$$module$build$src$core$trashcan=45,module$build$src$core$trashcan={};module$build$src$core$trashcan.Trashcan=Trashcan$$module$build$src$core$trashcan;var stashedCopyData$$module$build$src$core$clipboard=null,stashedWorkspace$$module$build$src$core$clipboard=null,stashedCoordinates$$module$build$src$core$clipboard=void 0,module$build$src$core$clipboard={};module$build$src$core$clipboard.BlockPaster=BlockPaster$$module$build$src$core$clipboard$block_paster;module$build$src$core$clipboard.copy=copy$$module$build$src$core$clipboard;module$build$src$core$clipboard.getLastCopiedData=getLastCopiedData$$module$build$src$core$clipboard;\nmodule$build$src$core$clipboard.getLastCopiedLocation=getLastCopiedLocation$$module$build$src$core$clipboard;module$build$src$core$clipboard.getLastCopiedWorkspace=getLastCopiedWorkspace$$module$build$src$core$clipboard;module$build$src$core$clipboard.paste=paste$$module$build$src$core$clipboard;module$build$src$core$clipboard.registry=module$build$src$core$clipboard$registry;module$build$src$core$clipboard.setLastCopiedData=setLastCopiedData$$module$build$src$core$clipboard;\nmodule$build$src$core$clipboard.setLastCopiedLocation=setLastCopiedLocation$$module$build$src$core$clipboard;module$build$src$core$clipboard.setLastCopiedWorkspace=setLastCopiedWorkspace$$module$build$src$core$clipboard;var module$build$src$core$comments={};module$build$src$core$comments.CollapseCommentBarButton=CollapseCommentBarButton$$module$build$src$core$comments$collapse_comment_bar_button;module$build$src$core$comments.CommentBarButton=CommentBarButton$$module$build$src$core$comments$comment_bar_button;module$build$src$core$comments.CommentEditor=CommentEditor$$module$build$src$core$comments$comment_editor;module$build$src$core$comments.CommentView=CommentView$$module$build$src$core$comments$comment_view;\nmodule$build$src$core$comments.DeleteCommentBarButton=DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button;module$build$src$core$comments.RenderedWorkspaceComment=RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment;module$build$src$core$comments.WorkspaceComment=WorkspaceComment$$module$build$src$core$comments$workspace_comment;var module$build$src$core$interfaces$i_copyable={};module$build$src$core$interfaces$i_copyable.isCopyable=isCopyable$$module$build$src$core$interfaces$i_copyable;var names$$module$build$src$core$shortcut_items;(function(a){a.ESCAPE=\"escape\";a.DELETE=\"delete\";a.COPY=\"copy\";a.CUT=\"cut\";a.PASTE=\"paste\";a.UNDO=\"undo\";a.REDO=\"redo\"})(names$$module$build$src$core$shortcut_items||(names$$module$build$src$core$shortcut_items={}));registerDefaultShortcuts$$module$build$src$core$shortcut_items();var module$build$src$core$shortcut_items={};module$build$src$core$shortcut_items.names=names$$module$build$src$core$shortcut_items;\nmodule$build$src$core$shortcut_items.registerCopy=registerCopy$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerCut=registerCut$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerDefaultShortcuts=registerDefaultShortcuts$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerDelete=registerDelete$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerEscape=registerEscape$$module$build$src$core$shortcut_items;\nmodule$build$src$core$shortcut_items.registerPaste=registerPaste$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerRedo=registerRedo$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerUndo=registerUndo$$module$build$src$core$shortcut_items;var ProcedureSerializer$$module$build$src$core$serialization$procedures=class{constructor(a,b){this.procedureModelClass=a;this.parameterModelClass=b;this.priority=PROCEDURES$$module$build$src$core$serialization$priorities}save(a){a=a.getProcedureMap().getProcedures().map(b=>saveProcedure$$module$build$src$core$serialization$procedures(b));return a.length?a:null}load(a,b){const c=b.getProcedureMap();for(const d of a)c.add(loadProcedure$$module$build$src$core$serialization$procedures(this.procedureModelClass,\nthis.parameterModelClass,d,b))}clear(a){a.getProcedureMap().clear()}},module$build$src$core$serialization$procedures={};module$build$src$core$serialization$procedures.ProcedureSerializer=ProcedureSerializer$$module$build$src$core$serialization$procedures;module$build$src$core$serialization$procedures.loadProcedure=loadProcedure$$module$build$src$core$serialization$procedures;module$build$src$core$serialization$procedures.saveProcedure=saveProcedure$$module$build$src$core$serialization$procedures;var VariableSerializer$$module$build$src$core$serialization$variables=class{constructor(){this.priority=VARIABLES$$module$build$src$core$serialization$priorities}save(a){a=a.getAllVariables().map(b=>b.save());return a.length?a:null}load(a,b){const c=getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MODEL,DEFAULT$$module$build$src$core$registry);a.forEach(d=>{c==null||c.load(d,b)})}clear(a){a.getVariableMap().clear()}};\nregister$$module$build$src$core$serialization$registry(\"variables\",new VariableSerializer$$module$build$src$core$serialization$variables);var module$build$src$core$serialization$variables={};module$build$src$core$serialization$variables.VariableSerializer=VariableSerializer$$module$build$src$core$serialization$variables;var module$build$src$core$serialization$workspaces={};module$build$src$core$serialization$workspaces.load=load$$module$build$src$core$serialization$workspaces;module$build$src$core$serialization$workspaces.save=save$$module$build$src$core$serialization$workspaces;var module$build$src$core$serialization={blocks:module$build$src$core$serialization$blocks,exceptions:module$build$src$core$serialization$exceptions,priorities:module$build$src$core$serialization$priorities,procedures:module$build$src$core$serialization$procedures,registry:module$build$src$core$serialization$registry,variables:module$build$src$core$serialization$variables,workspaceComments:module$build$src$core$serialization$workspace_comments,workspaces:module$build$src$core$serialization$workspaces};\"Blockly\"in globalThis||(globalThis.Blockly={Msg:module$build$src$core$msg});var module$build$src$core$main={};var LABEL_TYPE$$module$build$src$core$label_flyout_inflater=\"label\",LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater=class{load(a,b){a=new FlyoutButton$$module$build$src$core$flyout_button(b.getWorkspace(),b.targetWorkspace,a,!0);a.show();return new FlyoutItem$$module$build$src$core$flyout_item(a,LABEL_TYPE$$module$build$src$core$label_flyout_inflater)}gapForItem(a,b){return b}disposeItem(a){a=a.getElement();a instanceof FlyoutButton$$module$build$src$core$flyout_button&&a.dispose()}getType(){return LABEL_TYPE$$module$build$src$core$label_flyout_inflater}};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,LABEL_TYPE$$module$build$src$core$label_flyout_inflater,LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater);var module$build$src$core$label_flyout_inflater={};module$build$src$core$label_flyout_inflater.LabelFlyoutInflater=LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater;var ConstantProvider$$module$build$src$core$renderers$zelos$constants=class extends ConstantProvider$$module$build$src$core$renderers$common$constants{constructor(a){super();this.GRID_UNIT=4;this.CURSOR_COLOUR=\"#ffa200\";this.CURSOR_RADIUS=5;this.JAGGED_TEETH_WIDTH=this.JAGGED_TEETH_HEIGHT=0;this.START_HAT_HEIGHT=22;this.START_HAT_WIDTH=96;this.SHAPES={HEXAGONAL:1,ROUND:2,SQUARE:3,PUZZLE:4,NOTCH:5};this.SHAPE_IN_SHAPE_PADDING={1:{0:5*this.GRID_UNIT,1:2*this.GRID_UNIT,2:5*this.GRID_UNIT,3:5*this.GRID_UNIT},\n2:{0:3*this.GRID_UNIT,1:3*this.GRID_UNIT,2:1*this.GRID_UNIT,3:2*this.GRID_UNIT},3:{0:2*this.GRID_UNIT,1:2*this.GRID_UNIT,2:2*this.GRID_UNIT,3:2*this.GRID_UNIT}};this.FULL_BLOCK_FIELDS=!0;this.FIELD_TEXT_FONTWEIGHT=\"bold\";this.FIELD_TEXT_FONTFAMILY='\"Helvetica Neue\", \"Segoe UI\", Helvetica, sans-serif';this.FIELD_COLOUR_FULL_BLOCK=this.FIELD_TEXTINPUT_BOX_SHADOW=this.FIELD_DROPDOWN_SVG_ARROW=this.FIELD_DROPDOWN_COLOURED_DIV=this.FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW=!0;this.SELECTED_GLOW_COLOUR=\"#fff200\";\nthis.SELECTED_GLOW_SIZE=.5;this.REPLACEMENT_GLOW_COLOUR=\"#fff200\";this.REPLACEMENT_GLOW_SIZE=2;this.selectedGlowFilterId=\"\";this.selectedGlowFilter=null;this.replacementGlowFilterId=\"\";this.SQUARED=this.ROUNDED=this.HEXAGONAL=this.replacementGlowFilter=null;a&&(this.GRID_UNIT=a);this.SMALL_PADDING=this.GRID_UNIT;this.MEDIUM_PADDING=2*this.GRID_UNIT;this.MEDIUM_LARGE_PADDING=3*this.GRID_UNIT;this.LARGE_PADDING=4*this.GRID_UNIT;this.CORNER_RADIUS=1*this.GRID_UNIT;this.NOTCH_WIDTH=9*this.GRID_UNIT;this.NOTCH_HEIGHT=\n2*this.GRID_UNIT;this.STATEMENT_INPUT_NOTCH_OFFSET=this.NOTCH_OFFSET_LEFT=3*this.GRID_UNIT;this.MIN_BLOCK_WIDTH=2*this.GRID_UNIT;this.MIN_BLOCK_HEIGHT=12*this.GRID_UNIT;this.EMPTY_STATEMENT_INPUT_HEIGHT=6*this.GRID_UNIT;this.TOP_ROW_MIN_HEIGHT=this.CORNER_RADIUS;this.TOP_ROW_PRECEDES_STATEMENT_MIN_HEIGHT=this.LARGE_PADDING;this.BOTTOM_ROW_MIN_HEIGHT=this.CORNER_RADIUS;this.BOTTOM_ROW_AFTER_STATEMENT_MIN_HEIGHT=6*this.GRID_UNIT;this.STATEMENT_BOTTOM_SPACER=-this.NOTCH_HEIGHT;this.STATEMENT_INPUT_SPACER_MIN_WIDTH=\n40*this.GRID_UNIT;this.STATEMENT_INPUT_PADDING_LEFT=4*this.GRID_UNIT;this.EMPTY_INLINE_INPUT_PADDING=4*this.GRID_UNIT;this.EMPTY_INLINE_INPUT_HEIGHT=8*this.GRID_UNIT;this.DUMMY_INPUT_MIN_HEIGHT=8*this.GRID_UNIT;this.DUMMY_INPUT_SHADOW_MIN_HEIGHT=6*this.GRID_UNIT;this.CURSOR_WS_WIDTH=20*this.GRID_UNIT;this.FIELD_TEXT_FONTSIZE=3*this.GRID_UNIT;this.FIELD_BORDER_RECT_RADIUS=this.CORNER_RADIUS;this.FIELD_BORDER_RECT_X_PADDING=2*this.GRID_UNIT;this.FIELD_BORDER_RECT_Y_PADDING=1.625*this.GRID_UNIT;this.FIELD_BORDER_RECT_HEIGHT=\n8*this.GRID_UNIT;this.FIELD_DROPDOWN_BORDER_RECT_HEIGHT=8*this.GRID_UNIT;this.FIELD_DROPDOWN_SVG_ARROW_PADDING=this.FIELD_BORDER_RECT_X_PADDING;this.FIELD_COLOUR_DEFAULT_WIDTH=6*this.GRID_UNIT;this.FIELD_COLOUR_DEFAULT_HEIGHT=8*this.GRID_UNIT;this.FIELD_CHECKBOX_X_OFFSET=1*this.GRID_UNIT;this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH=12*this.GRID_UNIT}setFontConstants_(a){super.setFontConstants_(a);this.FIELD_DROPDOWN_BORDER_RECT_HEIGHT=this.FIELD_BORDER_RECT_HEIGHT=this.FIELD_TEXT_HEIGHT+this.FIELD_BORDER_RECT_Y_PADDING*\n2}init(){super.init();this.HEXAGONAL=this.makeHexagonal();this.ROUNDED=this.makeRounded();this.SQUARED=this.makeSquared();this.STATEMENT_INPUT_NOTCH_OFFSET=this.NOTCH_OFFSET_LEFT+this.INSIDE_CORNERS.rightWidth}setDynamicProperties_(a){super.setDynamicProperties_(a);this.SELECTED_GLOW_COLOUR=a.getComponentStyle(\"selectedGlowColour\")||this.SELECTED_GLOW_COLOUR;const b=Number(a.getComponentStyle(\"selectedGlowSize\"));this.SELECTED_GLOW_SIZE=b&&!isNaN(b)?b:this.SELECTED_GLOW_SIZE;this.REPLACEMENT_GLOW_COLOUR=\na.getComponentStyle(\"replacementGlowColour\")||this.REPLACEMENT_GLOW_COLOUR;this.REPLACEMENT_GLOW_SIZE=(a=Number(a.getComponentStyle(\"replacementGlowSize\")))&&!isNaN(a)?a:this.REPLACEMENT_GLOW_SIZE}dispose(){super.dispose();this.selectedGlowFilter&&removeNode$$module$build$src$core$utils$dom(this.selectedGlowFilter);this.replacementGlowFilter&&removeNode$$module$build$src$core$utils$dom(this.replacementGlowFilter)}makeStartHat(){const a=this.START_HAT_HEIGHT,b=this.START_HAT_WIDTH,c=curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(25,-a),point$$module$build$src$core$utils$svg_paths(71,-a),point$$module$build$src$core$utils$svg_paths(b,0)]);return{height:a*.75,width:b,path:c}}makeHexagonal(){function a(c,d,e){var f=c/2;f=f>b?b:f;e=e?-1:1;c=(d?-1:1)*c/2;return lineTo$$module$build$src$core$utils$svg_paths(-e*f,c)+lineTo$$module$build$src$core$utils$svg_paths(e*f,c)}const b=this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH;return{type:this.SHAPES.HEXAGONAL,isDynamic:!0,width(c){c/=2;return c>\nb?b:c},height(c){return c},connectionOffsetY(c){return c/2},connectionOffsetX(c){return-c},pathDown(c){return a(c,!1,!1)},pathUp(c){return a(c,!0,!1)},pathRightDown(c){return a(c,!1,!0)},pathRightUp(c){return a(c,!1,!0)}}}makeRounded(){function a(d,e,f){const g=d>c?d-c:0;d=(d>c?c:d)/2;const h=f===e?\"0\":\"1\";return arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+h,d,point$$module$build$src$core$utils$svg_paths((f?1:-1)*d,(e?-1:1)*d))+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",(e?-1:\n1)*g)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+h,d,point$$module$build$src$core$utils$svg_paths((f?-1:1)*d,(e?-1:1)*d))}const b=this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH,c=b*2;return{type:this.SHAPES.ROUND,isDynamic:!0,width(d){d/=2;return d>b?b:d},height(d){return d},connectionOffsetY(d){return d/2},connectionOffsetX(d){return-d},pathDown(d){return a(d,!1,!1)},pathUp(d){return a(d,!0,!1)},pathRightDown(d){return a(d,!1,!0)},pathRightUp(d){return a(d,!1,!0)}}}makeSquared(){function a(c,\nd,e){c-=b*2;const f=e===d?\"0\":\"1\";return arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+f,b,point$$module$build$src$core$utils$svg_paths((e?1:-1)*b,(d?-1:1)*b))+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",(d?-1:1)*c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+f,b,point$$module$build$src$core$utils$svg_paths((e?-1:1)*b,(d?-1:1)*b))}const b=this.CORNER_RADIUS;return{type:this.SHAPES.SQUARE,isDynamic:!0,width(c){return b},height(c){return c},connectionOffsetY(c){return c/\n2},connectionOffsetX(c){return-c},pathDown(c){return a(c,!1,!1)},pathUp(c){return a(c,!0,!1)},pathRightDown(c){return a(c,!1,!0)},pathRightUp(c){return a(c,!1,!0)}}}shapeFor(a){let b=a.getCheck();!b&&a.targetConnection&&(b=a.targetConnection.getCheck());switch(a.type){case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:case ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE:a=a.getSourceBlock().getOutputShape();if(a!==null)switch(a){case this.SHAPES.HEXAGONAL:return this.HEXAGONAL;\ncase this.SHAPES.ROUND:return this.ROUNDED;case this.SHAPES.SQUARE:return this.SQUARED}if(b&&b.includes(\"Boolean\"))return this.HEXAGONAL;if(b&&b.includes(\"Number\"))return this.ROUNDED;b&&b.includes(\"String\");return this.ROUNDED;case ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT:case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:return this.NOTCH;default:throw Error(\"Unknown type\");}}makeNotch(){function a(l){return curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(l*e/2,0),point$$module$build$src$core$utils$svg_paths(l*e*3/4,g/2),point$$module$build$src$core$utils$svg_paths(l*e,g)])+line$$module$build$src$core$utils$svg_paths([point$$module$build$src$core$utils$svg_paths(l*e,f)])+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/4,g/2),point$$module$build$src$core$utils$svg_paths(l*e/2,g),point$$module$build$src$core$utils$svg_paths(l*e,g)])+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",\nl*d)+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/2,0),point$$module$build$src$core$utils$svg_paths(l*e*3/4,-(g/2)),point$$module$build$src$core$utils$svg_paths(l*e,-g)])+line$$module$build$src$core$utils$svg_paths([point$$module$build$src$core$utils$svg_paths(l*e,-f)])+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/4,-(g/2)),point$$module$build$src$core$utils$svg_paths(l*e/2,-g),point$$module$build$src$core$utils$svg_paths(l*\ne,-g)])}const b=this.NOTCH_WIDTH,c=this.NOTCH_HEIGHT,d=b/3,e=d/3,f=c/2,g=f/2,h=a(1),k=a(-1);return{type:this.SHAPES.NOTCH,width:b,height:c,pathLeft:h,pathRight:k}}makeInsideCorners(){const a=this.CORNER_RADIUS,b=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(-a,a)),c=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a,point$$module$build$src$core$utils$svg_paths(-a,a)),d=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(a,\na)),e=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a,point$$module$build$src$core$utils$svg_paths(a,a));return{width:a,height:a,pathTop:b,pathBottom:d,rightWidth:a,rightHeight:a,pathTopRight:c,pathBottomRight:e}}generateSecondaryColour_(a){return blend$$module$build$src$core$utils$colour(\"#000\",a,.15)||a}generateTertiaryColour_(a){return blend$$module$build$src$core$utils$colour(\"#000\",a,.25)||a}createDom(a,b,c,d){super.createDom(a,b,c,d);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.DEFS,\n{},a);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FILTER,{id:\"blocklySelectedGlowFilter\"+this.randomIdentifier,height:\"160%\",width:\"180%\",y:\"-30%\",x:\"-40%\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR,{\"in\":\"SourceGraphic\",stdDeviation:this.SELECTED_GLOW_SIZE},b);c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER,{result:\"outBlur\"},b);\ncreateSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFUNCA,{type:\"table\",tableValues:\"0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\"},c);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFLOOD,{\"flood-color\":this.SELECTED_GLOW_COLOUR,\"flood-opacity\":1,result:\"outColor\"},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"outColor\",in2:\"outBlur\",operator:\"in\",result:\"outGlow\"},b);\nthis.selectedGlowFilterId=b.id;this.selectedGlowFilter=b;a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FILTER,{id:\"blocklyReplacementGlowFilter\"+this.randomIdentifier,height:\"160%\",width:\"180%\",y:\"-30%\",x:\"-40%\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR,{\"in\":\"SourceGraphic\",stdDeviation:this.REPLACEMENT_GLOW_SIZE},a);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER,\n{result:\"outBlur\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFUNCA,{type:\"table\",tableValues:\"0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\"},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFLOOD,{\"flood-color\":this.REPLACEMENT_GLOW_COLOUR,\"flood-opacity\":1,result:\"outColor\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"outColor\",in2:\"outBlur\",operator:\"in\",\nresult:\"outGlow\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"SourceGraphic\",in2:\"outGlow\",operator:\"over\"},a);this.replacementGlowFilterId=a.id;this.replacementGlowFilter=a;d&&(d.style.setProperty(\"--blocklySelectedGlowFilter\",`url(#${this.selectedGlowFilterId})`),d.style.setProperty(\"--blocklyReplacementGlowFilter\",`url(#${this.replacementGlowFilterId})`))}getCSS_(a){return[`${a} .blocklyText,`,`${a} .blocklyFlyoutLabelText {`,`font: ${this.FIELD_TEXT_FONTWEIGHT} ${this.FIELD_TEXT_FONTSIZE}`+\n`pt ${this.FIELD_TEXT_FONTFAMILY};`,\"}\",`${a} .blocklyTextInputBubble textarea {`,\"font-weight: normal;\",\"}\",`${a} .blocklyText {`,\"fill: #fff;\",\"}\",`${a} .blocklyNonEditableField>rect:not(.blocklyDropdownRect),`,`${a} .blocklyEditableField>rect:not(.blocklyDropdownRect) {`,`fill: ${this.FIELD_BORDER_RECT_COLOUR};`,\"}\",`${a} .blocklyNonEditableField>text,`,`${a} .blocklyEditableField>text,`,`${a} .blocklyNonEditableField>g>text,`,`${a} .blocklyEditableField>g>text {`,\"fill: #575E75;\",\"}\",`${a} .blocklyFlyoutLabelText {`,\n\"fill: #575E75;\",\"}\",`${a} .blocklyText.blocklyBubbleText {`,\"fill: #575E75;\",\"}\",`${a} .blocklyDraggable:not(.blocklyDisabled)`,\" .blocklyEditableField:not(.blocklyEditing):hover>rect,\",`${a} .blocklyDraggable:not(.blocklyDisabled)`,\" .blocklyEditableField:not(.blocklyEditing):hover>.blocklyPath {\",\"stroke: #fff;\",\"stroke-width: 2;\",\"}\",`${a} .blocklyHtmlInput {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,`font-weight: ${this.FIELD_TEXT_FONTWEIGHT};`,\"color: #575E75;\",\"}\",`${a} .blocklyDropdownText {`,\n\"fill: #fff !important;\",\"}\",`${a}.blocklyWidgetDiv .blocklyMenuItem,`,`${a}.blocklyDropDownDiv .blocklyMenuItem {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,\"}\",`${a}.blocklyDropDownDiv .blocklyMenuItemContent {`,\"color: #fff;\",\"}\",`${a} .blocklyHighlightedConnectionPath {`,`stroke: ${this.SELECTED_GLOW_COLOUR};`,\"}\",`${a} .blocklyDisabledPattern > .blocklyOutlinePath {`,\"fill: var(--blocklyDisabledPattern)\",\"}\",`${a} .blocklyInsertionMarker>.blocklyPath {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\n\"stroke: none;\",\"}\",`${a} .blocklySelected>.blocklyPath.blocklyPathSelected {`,\"fill: none;\",\"filter: var(--blocklySelectedGlowFilter);\",\"}\",`${a} .blocklyReplaceable>.blocklyPath {`,\"filter: var(--blocklyReplacementGlowFilter);\",\"}\"]}},module$build$src$core$renderers$zelos$constants={};module$build$src$core$renderers$zelos$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$zelos$constants;var Drawer$$module$build$src$core$renderers$zelos$drawer=class extends Drawer$$module$build$src$core$renderers$common$drawer{constructor(a,b){super(a,b)}draw(){const a=this.block_.pathObject;a.beginDrawing();this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();a.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);this.info_.RTL&&a.flipRTL();this.recordSizeOnBlock_();this.info_.outputConnection&&(a.outputShapeType=this.info_.outputConnection.shape.type);a.endDrawing()}drawOutline_(){this.info_.outputConnection&&\nthis.info_.outputConnection.isDynamicShape&&!this.info_.hasStatementInput&&!this.info_.bottomRow.hasNextConnection?(this.drawFlatTop_(),this.drawRightDynamicConnection_(),this.drawFlatBottom_(),this.drawLeftDynamicConnection_()):super.drawOutline_()}drawLeft_(){this.info_.outputConnection&&this.info_.outputConnection.isDynamicShape?this.drawLeftDynamicConnection_():super.drawLeft_()}drawRightSideRow_(a){if(!(a.height<=0)){if(Types$$module$build$src$core$renderers$measurables$types.isSpacer(a)){const d=\na.precedesStatement;var b=a.followsStatement;if(d||b){const e=this.constants_.INSIDE_CORNERS;var c=e.rightHeight;c=a.height-(d?c:0);b=b?e.pathBottomRight:\"\";a=c>0?lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+c):\"\";this.outlinePath_+=b+a+(d?e.pathTopRight:\"\");return}}this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+a.height)}}drawRightDynamicConnection_(){if(!this.info_.outputConnection)throw Error(\"Cannot draw the output connection of a block that doesn't have one\");\nthis.outlinePath_+=this.info_.outputConnection.shape.pathRightDown(this.info_.outputConnection.height)}drawLeftDynamicConnection_(){if(!this.info_.outputConnection)throw Error(\"Cannot draw the output connection of a block that doesn't have one\");this.positionOutputConnection_();this.outlinePath_+=this.info_.outputConnection.shape.pathUp(this.info_.outputConnection.height);this.outlinePath_+=\"z\"}drawFlatTop_(){const a=this.info_.topRow;this.positionPreviousConnection_();this.outlinePath_+=moveBy$$module$build$src$core$utils$svg_paths(a.xPos,\nthis.info_.startY);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",a.width)}drawFlatBottom_(){const a=this.info_.bottomRow;this.positionNextConnection_();this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.baseline);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-a.width)}drawInlineInput_(a){this.positionInlineInputConnection_(a);const b=a.input.name;a.connectedBlock||this.info_.isInsertionMarker||(a=moveTo$$module$build$src$core$utils$svg_paths(a.xPos+\na.connectionWidth,a.centerline-a.height/2)+this.getInlineInputPath(a),this.block_.pathObject.setOutlinePath(b,a))}getInlineInputPath(a){const b=a.width-a.connectionWidth*2,c=a.height;return lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",b)+a.shape.pathRightDown(c)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-b)+a.shape.pathUp(c)+\"z\"}drawStatementInput_(a){var b=a.getLastInput();const c=b.xPos+b.notchOffset+b.shape.width,d=this.constants_.INSIDE_CORNERS,e=b.shape.pathRight+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",\n-(b.notchOffset-d.width))+d.pathTop,f=a.height-2*d.height;b=d.pathBottom+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",b.notchOffset-d.width)+(b.connectedBottomNextConnection?\"\":b.shape.pathLeft);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",c)+e+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",f)+b+lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",a.xPos+a.width);this.positionStatementInputConnection_(a)}drawConnectionHighlightPath(a){const b=a.connectionModel;\nif(b.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE&&!a.isDynamicShape)return super.drawConnectionHighlightPath(a);a=b.type===ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE?moveTo$$module$build$src$core$utils$svg_paths(a.connectionWidth,-a.height/2)+this.getInlineInputPath(a):moveTo$$module$build$src$core$utils$svg_paths(a.width,\n-a.height/2)+a.shape.pathDown(a.height);const c=b.getSourceBlock();let d,e;return(e=(d=c.pathObject).addConnectionHighlight)==null?void 0:e.call(d,b,a,b.getOffsetInBlock(),c.RTL)}},module$build$src$core$renderers$zelos$drawer={};module$build$src$core$renderers$zelos$drawer.Drawer=Drawer$$module$build$src$core$renderers$zelos$drawer;var FieldImage$$module$build$src$core$field_image=class extends Field$$module$build$src$core$field{constructor(a,b,c,d,e,f,g){super(Field$$module$build$src$core$field.SKIP_SETUP);this.imageElement=this.clickHandler=null;this.flipRtl=this.isDirty_=this.EDITABLE=!1;this.altText=\"\";c=Number(replaceMessageReferences$$module$build$src$core$utils$parsing(c));b=Number(replaceMessageReferences$$module$build$src$core$utils$parsing(b));if(isNaN(c)||isNaN(b))throw Error(\"Height and width values of an image field must cast to numbers.\");\nif(c<=0||b<=0)throw Error(\"Height and width values of an image field must be greater than 0.\");this.size_=new Size$$module$build$src$core$utils$size(b,c+FieldImage$$module$build$src$core$field_image.Y_PADDING);this.imageHeight=c;typeof e===\"function\"&&(this.clickHandler=e);a!==Field$$module$build$src$core$field.SKIP_SETUP&&(g?this.configure_(g):(this.flipRtl=!!f,this.altText=replaceMessageReferences$$module$build$src$core$utils$parsing(d)||\"\"),this.setValue(replaceMessageReferences$$module$build$src$core$utils$parsing(a)))}configure_(a){super.configure_(a);\na.flipRtl&&(this.flipRtl=a.flipRtl);a.alt&&(this.altText=replaceMessageReferences$$module$build$src$core$utils$parsing(a.alt))}initView(){this.imageElement=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{height:this.imageHeight+\"px\",width:this.size_.width+\"px\",alt:this.altText},this.fieldGroup_);this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.value_);this.fieldGroup_&&addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\n\"blocklyImageField\");this.clickHandler&&(this.imageElement.style.cursor=\"pointer\")}updateSize_(){}doClassValidation_(a){return typeof a!==\"string\"?null:a}doValueUpdate_(a){this.value_=a;this.imageElement&&this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.value_)}getFlipRtl(){return this.flipRtl}setAlt(a){a!==this.altText&&(this.altText=a||\"\",this.imageElement&&this.imageElement.setAttribute(\"alt\",this.altText))}isClickable(){return super.isClickable()&&!!this.clickHandler}showEditor_(){this.clickHandler&&\nthis.clickHandler(this)}setOnClickHandler(a){this.clickHandler=a}getText_(){return this.altText}static fromJson(a){if(!a.src||!a.width||!a.height)throw Error(\"src, width, and height values for an image field arerequired. The width and height must be non-zero.\");return new this(a.src,a.width,a.height,void 0,void 0,void 0,a)}};FieldImage$$module$build$src$core$field_image.Y_PADDING=1;register$$module$build$src$core$field_registry(\"field_image\",FieldImage$$module$build$src$core$field_image);\nFieldImage$$module$build$src$core$field_image.prototype.DEFAULT_VALUE=\"\";var module$build$src$core$field_image={};module$build$src$core$field_image.FieldImage=FieldImage$$module$build$src$core$field_image;var MINIMUM_WIDTH$$module$build$src$core$field_input=14,FieldInput$$module$build$src$core$field_input=class extends Field$$module$build$src$core$field{set size_(a){super.size_=a}get size_(){const a=super.size_;a.width{a!==null&&this.setValue(this.getValueFromEditorText_(a));this.onFinishEditing_(this.value_)})}showInlineEditor(a,b){const c=this.getSourceBlock();if(!c)throw new UnattachedFieldError$$module$build$src$core$field;show$$module$build$src$core$widgetdiv(this,c.RTL,this.widgetDispose_.bind(this),this.workspace_,b);this.htmlInput_=this.widgetCreate_();this.isBeingEdited_=!0;this.valueWhenEditorWasOpened_=this.value_;a||(this.htmlInput_.focus({preventScroll:!0}),this.htmlInput_.select())}widgetCreate_(){var a=\nthis.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;$.setGroup$$module$build$src$core$events$utils(!0);const b=getDiv$$module$build$src$core$widgetdiv();var c=this.getClickTarget_();if(!c)throw Error(\"A click target has not been set.\");addClass$$module$build$src$core$utils$dom(c,\"blocklyEditing\");c=document.createElement(\"input\");c.className=\"blocklyHtmlInput\";c.setAttribute(\"spellcheck\",this.spellcheck_);const d=this.workspace_.getAbsoluteScale();var e=this.getConstants().FIELD_TEXT_FONTSIZE*\nd+\"pt\";b.style.fontSize=e;c.style.fontSize=e;e=FieldInput$$module$build$src$core$field_input.BORDERRADIUS*d+\"px\";this.isFullBlockField()&&(e=this.getScaledBBox(),e=(e.bottom-e.top)/2+\"px\",a=a.getParent()?a.getParent().getColourTertiary():this.sourceBlock_.getColourTertiary(),c.style.border=1*d+\"px solid \"+a,b.style.borderRadius=e,b.style.transition=\"box-shadow 0.25s ease 0s\",this.getConstants().FIELD_TEXTINPUT_BOX_SHADOW&&(b.style.boxShadow=\"rgba(255, 255, 255, 0.3) 0 0 0 \"+4*d+\"px\"));c.style.borderRadius=\ne;b.appendChild(c);c.value=c.defaultValue=this.getEditorText_(this.value_);c.setAttribute(\"data-untyped-default-value\",String(this.value_));this.resizeEditor_();this.bindInputEvents_(c);return c}widgetDispose_(){this.isBeingEdited_=!1;this.isTextValid_=!0;this.forceRerender();this.onFinishEditing_(this.value_);this.sourceBlock_&&isEnabled$$module$build$src$core$events$utils()&&this.valueWhenEditorWasOpened_!==null&&this.valueWhenEditorWasOpened_!==this.value_&&(fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock_,\n\"field\",this.name||null,this.valueWhenEditorWasOpened_,this.value_)),this.valueWhenEditorWasOpened_=null);$.setGroup$$module$build$src$core$events$utils(!1);this.unbindInputEvents_();var a=getDiv$$module$build$src$core$widgetdiv().style;a.width=\"auto\";a.height=\"auto\";a.fontSize=\"\";a.transition=\"\";a.boxShadow=\"\";this.htmlInput_=null;a=this.getClickTarget_();if(!a)throw Error(\"A click target has not been set.\");removeClass$$module$build$src$core$utils$dom(a,\"blocklyEditing\")}onFinishEditing_(a){}bindInputEvents_(a){this.onKeyDownWrapper=\nconditionalBind$$module$build$src$core$browser_events(a,\"keydown\",this,this.onHtmlInputKeyDown_);this.onInputWrapper=conditionalBind$$module$build$src$core$browser_events(a,\"input\",this,this.onHtmlInputChange)}unbindInputEvents_(){this.onKeyDownWrapper&&(unbind$$module$build$src$core$browser_events(this.onKeyDownWrapper),this.onKeyDownWrapper=null);this.onInputWrapper&&(unbind$$module$build$src$core$browser_events(this.onInputWrapper),this.onInputWrapper=null)}onHtmlInputKeyDown_(a){if(a.key===\"Enter\")hideIfOwner$$module$build$src$core$widgetdiv(this),\nhideWithoutAnimation$$module$build$src$core$dropdowndiv();else if(a.key===\"Escape\")this.setValue(this.htmlInput_.getAttribute(\"data-untyped-default-value\"),!1),hideIfOwner$$module$build$src$core$widgetdiv(this),hideWithoutAnimation$$module$build$src$core$dropdowndiv();else if(a.key===\"Tab\"){a.preventDefault();var b,c=(b=this.workspace_)==null?void 0:b.getCursor();b=d=>(d instanceof FieldInput$$module$build$src$core$field_input||d instanceof BlockSvg$$module$build$src$core$block_svg&&d.isSimpleReporter())&&\nd!==this.getSourceBlock();a=a.shiftKey?c==null?void 0:c.getPreviousNode(this,b,!1):c==null?void 0:c.getNextNode(this,b,!1);a=a instanceof BlockSvg$$module$build$src$core$block_svg&&a.isSimpleReporter()?a.getFields().next().value:a;a instanceof FieldInput$$module$build$src$core$field_input&&(hideIfOwner$$module$build$src$core$widgetdiv(this),hideWithoutAnimation$$module$build$src$core$dropdowndiv(),c=a.getSourceBlock(),a.isFullBlockField()&&c&&c instanceof BlockSvg$$module$build$src$core$block_svg?\n$.getFocusManager$$module$build$src$core$focus_manager().focusNode(c):$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a),a.showEditor())}}onHtmlInputChange(a){a=this.value_;this.setValue(this.getValueFromEditorText_(this.htmlInput_.value),!1);this.sourceBlock_&&isEnabled$$module$build$src$core$events$utils()&&this.value_!==a&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_FIELD_INTERMEDIATE_CHANGE))(this.sourceBlock_,\nthis.name||null,a,this.value_))}setEditorValue_(a,b=!0){this.isDirty_=!0;this.isBeingEdited_&&(this.htmlInput_.value=this.getEditorText_(a));this.setValue(a,b)}resizeEditor_(){finishQueuedRenders$$module$build$src$core$render_management().then(()=>{const a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;const b=getDiv$$module$build$src$core$widgetdiv(),c=this.getScaledBBox();b.style.width=c.right-c.left+\"px\";b.style.height=c.bottom-c.top+\"px\";const d=c.top;\nb.style.left=`${a.RTL?c.right-b.offsetWidth:c.left}px`;b.style.top=`${d}px`})}repositionForWindowResize(){let a;const b=(a=this.getSourceBlock())==null?void 0:a.getRootBlock();if(!(b instanceof BlockSvg$$module$build$src$core$block_svg))return!1;bumpObjectIntoBounds$$module$build$src$core$bump_objects(this.workspace_,this.workspace_.getMetricsManager().getViewMetrics(!0),b)||this.resizeEditor_();return!0}positionTextElement_(a,b){const c=a*2+b;super.positionTextElement_(a+(c0;this.rightSide=this.outputConnection?new RightConnectionShape$$module$build$src$core$renderers$zelos$measurables$row_elements(this.constants_):null;this.rightAlignedDummyInputs=new WeakMap}getRenderer(){return this.renderer_}measure(){this.createRows_();this.addElemSpacing_();this.addRowSpacing_();this.adjustXPosition_();this.computeBounds_();this.alignRowElements_();this.finalize_()}shouldStartNewRow_(a,b){return b?b instanceof EndRowInput$$module$build$src$core$inputs$end_row_input||\na instanceof StatementInput$$module$build$src$core$inputs$statement_input||b instanceof StatementInput$$module$build$src$core$inputs$statement_input?!0:a instanceof $.ValueInput$$module$build$src$core$inputs$value_input||a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input?!this.isInline||this.isMultiRow:!1:!1}getDesiredRowWidth_(a){return a.hasStatement?this.width-this.startX-(this.constants_.INSIDE_CORNERS.rightWidth||\n0):super.getDesiredRowWidth_(a)}getInRowSpacing_(a,b){return a&&b||!this.outputConnection||!this.outputConnection.isDynamicShape||this.hasStatementInput||this.bottomRow.hasNextConnection?!a&&b&&Types$$module$build$src$core$renderers$measurables$types.isStatementInput(b)?this.constants_.STATEMENT_INPUT_PADDING_LEFT:a&&Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(a)&&b&&(Types$$module$build$src$core$renderers$measurables$types.isPreviousConnection(b)||Types$$module$build$src$core$renderers$measurables$types.isNextConnection(b))?\nb.notchOffset-this.constants_.CORNER_RADIUS:a&&Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(a)&&b&&Types$$module$build$src$core$renderers$measurables$types.isHat(b)||a&&Types$$module$build$src$core$renderers$measurables$types.isField(a)&&a.width===0?this.constants_.NO_PADDING:this.constants_.MEDIUM_PADDING:this.constants_.NO_PADDING}getSpacerRowHeight_(a,b){if(Types$$module$build$src$core$renderers$measurables$types.isTopRow(a)&&Types$$module$build$src$core$renderers$measurables$types.isBottomRow(b))return this.constants_.EMPTY_BLOCK_SPACER_HEIGHT;\nconst c=Types$$module$build$src$core$renderers$measurables$types.isInputRow(a)&&a.hasStatement,d=Types$$module$build$src$core$renderers$measurables$types.isInputRow(b)&&b.hasStatement;return d||c?(a=Math.max(this.constants_.NOTCH_HEIGHT,this.constants_.INSIDE_CORNERS.rightHeight||0),d&&c?Math.max(a,this.constants_.DUMMY_INPUT_MIN_HEIGHT):a):Types$$module$build$src$core$renderers$measurables$types.isTopRow(a)?a.hasPreviousConnection||this.outputConnection&&!this.hasStatementInput?this.constants_.NO_PADDING:\nMath.abs(this.constants_.NOTCH_HEIGHT-this.constants_.CORNER_RADIUS):Types$$module$build$src$core$renderers$measurables$types.isBottomRow(b)?this.outputConnection?!b.hasNextConnection&&this.hasStatementInput?Math.abs(this.constants_.NOTCH_HEIGHT-this.constants_.CORNER_RADIUS):this.constants_.NO_PADDING:Math.max(this.topRow.minHeight,Math.max(this.constants_.NOTCH_HEIGHT,this.constants_.CORNER_RADIUS))-this.constants_.CORNER_RADIUS:this.constants_.MEDIUM_PADDING}getSpacerRowWidth_(a,b){const c=this.width-\nthis.startX;return Types$$module$build$src$core$renderers$measurables$types.isInputRow(a)&&a.hasStatement||Types$$module$build$src$core$renderers$measurables$types.isInputRow(b)&&b.hasStatement?Math.max(c,this.constants_.STATEMENT_INPUT_SPACER_MIN_WIDTH):c}getElemCenterline_(a,b){if(a.hasStatement&&!Types$$module$build$src$core$renderers$measurables$types.isSpacer(b)&&!Types$$module$build$src$core$renderers$measurables$types.isStatementInput(b))return a.yPos+this.constants_.EMPTY_STATEMENT_INPUT_HEIGHT/\n2;if(Types$$module$build$src$core$renderers$measurables$types.isInlineInput(b)){const c=b.connectedBlock;if(c&&c.outputConnection&&c.nextConnection)return a.yPos+c.height/2}return super.getElemCenterline_(a,b)}addInput_(a,b){if((a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input)&&b.hasDummyInput&&b.align===$.Align$$module$build$src$core$inputs$align.LEFT&&a.align===$.Align$$module$build$src$core$inputs$align.RIGHT)this.rightAlignedDummyInputs.set(b,\na);else if(a instanceof StatementInput$$module$build$src$core$inputs$statement_input){b.elements.push(new StatementInput$$module$build$src$core$renderers$zelos$measurables$inputs(this.constants_,a));b.hasStatement=!0;b.align===null&&(b.align=a.align);return}super.addInput_(a,b)}addAlignmentPadding_(a,b){if(this.rightAlignedDummyInputs.get(a)){let c;for(let d=0;d=this.rows.length-1?!!this.bottomRow.hasNextConnection:!!d.precedesStatement;if(Types$$module$build$src$core$renderers$measurables$types.isInputRow(f)&&\nf.hasStatement){f.measure();let g,h;b=f.width-((h=(g=f.getLastInput())==null?void 0:g.width)!=null?h:0)+a}else if(c&&(e===2||d)&&Types$$module$build$src$core$renderers$measurables$types.isInputRow(f)&&!f.hasStatement){d=f.xPos;c=null;for(let g=0;g1)switch(c){case d.SHAPES.ROUND:return c=this.constants_.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH,c=this.height/2>c?c:this.height/2,b-c*(1-Math.sin(Math.acos((c-this.constants_.SMALL_PADDING)/c)));default:return 0}if(Types$$module$build$src$core$renderers$measurables$types.isInlineInput(a)){const e=a.connectedBlock;a=\ne?e.pathObject.outputShapeType:a.shape.type;return a==null||e&&e.outputConnection&&(e.statementInputCount||e.nextConnection)||c===d.SHAPES.HEXAGONAL&&c!==a?0:b-this.constants_.SHAPE_IN_SHAPE_PADDING[c][a]}return Types$$module$build$src$core$renderers$measurables$types.isField(a)?c===d.SHAPES.ROUND&&a.field instanceof $.FieldTextInput$$module$build$src$core$field_textinput?b-2.75*d.GRID_UNIT:b-this.constants_.SHAPE_IN_SHAPE_PADDING[c][0]:Types$$module$build$src$core$renderers$measurables$types.isIcon(a)?\nthis.constants_.SMALL_PADDING:0}finalizeVerticalAlignment_(){if(!this.outputConnection)for(let d=2;d=this.rows.length-1?!!this.bottomRow.hasNextConnection:!!g.precedesStatement;if(a?this.topRow.hasPreviousConnection:e.followsStatement){var c=f.elements[1];c=f.elements.length===3&&c instanceof Field$$module$build$src$core$renderers$measurables$field&&(c.field instanceof FieldLabel$$module$build$src$core$field_label||\nc.field instanceof FieldImage$$module$build$src$core$field_image);if(!a&&c)e.height-=this.constants_.SMALL_PADDING,g.height-=this.constants_.SMALL_PADDING,f.height-=this.constants_.MEDIUM_PADDING;else if(!a&&!b)e.height+=this.constants_.SMALL_PADDING;else if(b){a=!1;for(b=0;b=40){a=!0;break}a&&\n(e.height-=this.constants_.SMALL_PADDING,g.height-=this.constants_.SMALL_PADDING)}}}}finalize_(){this.finalizeOutputConnection_();this.finalizeHorizontalAlignment_();this.finalizeVerticalAlignment_();super.finalize_();this.rightSide&&(this.widthWithChildren+=this.rightSide.width)}},module$build$src$core$renderers$zelos$info={};module$build$src$core$renderers$zelos$info.RenderInfo=RenderInfo$$module$build$src$core$renderers$zelos$info;var PathObject$$module$build$src$core$renderers$zelos$path_object=class extends PathObject$$module$build$src$core$renderers$common$path_object{constructor(a,b,c){super(a,b,c);this.svgPathSelected=null;this.outlines=new Map;this.remainingOutlines=new Set;this.outputShapeType=null;this.constants=c}setPath(a){super.setPath(a);this.svgPathSelected&&this.svgPathSelected.setAttribute(\"d\",a)}applyColour(a){super.applyColour(a);const b=a.getParent();a.isShadow()&&b&&this.svgPath.setAttribute(\"stroke\",b.getColourTertiary());\nfor(const c of this.outlines.values())c.setAttribute(\"fill\",this.style.colourTertiary)}flipRTL(){super.flipRTL();for(const a of this.outlines.values())a.setAttribute(\"transform\",\"scale(-1 1)\")}updateSelected(a){this.setClass_(\"blocklySelected\",a);a?this.svgPathSelected||(this.svgPathSelected=this.svgPath.cloneNode(!0),this.svgPathSelected.classList.add(\"blocklyPathSelected\"),removeClass$$module$build$src$core$utils$dom(this.svgPathSelected,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME),\nremoveClass$$module$build$src$core$utils$dom(this.svgPathSelected,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME),this.svgPathSelected.removeAttribute(\"tabindex\"),this.svgPathSelected.removeAttribute(\"id\"),this.svgRoot.appendChild(this.svgPathSelected)):this.svgPathSelected&&(this.svgRoot.removeChild(this.svgPathSelected),this.svgPathSelected=null)}updateReplacementFade(a){this.setClass_(\"blocklyReplaceable\",a)}updateShapeForInputHighlight(a,b){a=a.getParentInput().name;\n(a=this.getOutlinePath(a))&&(b?a.setAttribute(\"filter\",\"url(#\"+this.constants.replacementGlowFilterId+\")\"):a.removeAttribute(\"filter\"))}beginDrawing(){this.remainingOutlines.clear();for(const a of this.outlines.keys())this.remainingOutlines.add(a)}endDrawing(){if(this.remainingOutlines.size)for(const a of this.remainingOutlines)this.removeOutlinePath(a);this.remainingOutlines.clear()}setOutlinePath(a,b){a=this.getOutlinePath(a);a.setAttribute(\"d\",b);a.setAttribute(\"fill\",this.style.colourTertiary)}getOutlinePath(a){this.outlines.has(a)||\nthis.outlines.set(a,createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyOutlinePath\",d:\"\"},this.svgRoot));this.remainingOutlines.delete(a);return this.outlines.get(a)}removeOutlinePath(a){let b,c;(b=this.outlines.get(a))==null||(c=b.parentNode)==null||c.removeChild(this.outlines.get(a));this.outlines.delete(a)}},module$build$src$core$renderers$zelos$path_object={};module$build$src$core$renderers$zelos$path_object.PathObject=PathObject$$module$build$src$core$renderers$zelos$path_object;var Renderer$$module$build$src$core$renderers$zelos$renderer=class extends Renderer$$module$build$src$core$renderers$common$renderer{constructor(a){super(a)}makeConstants_(){return new ConstantProvider$$module$build$src$core$renderers$zelos$constants}makeRenderInfo_(a){return new RenderInfo$$module$build$src$core$renderers$zelos$info(this,a)}makeDrawer_(a,b){return new Drawer$$module$build$src$core$renderers$zelos$drawer(a,b)}makePathObject(a,b){return new PathObject$$module$build$src$core$renderers$zelos$path_object(a,\nb,this.getConstants())}getConstants(){return this.constants_}};register$$module$build$src$core$renderers$common$block_rendering(\"zelos\",Renderer$$module$build$src$core$renderers$zelos$renderer);var module$build$src$core$renderers$zelos$renderer={};module$build$src$core$renderers$zelos$renderer.Renderer=Renderer$$module$build$src$core$renderers$zelos$renderer;var InsertionMarkerPreviewer$$module$build$src$core$insertion_marker_previewer=class{constructor(a){this.staticConn=this.draggedConn=this.markerConn=this.fadedBlock=null;this.workspace=a.workspace}previewReplacement(a,b,c){$.disable$$module$build$src$core$events$utils();try{this.hidePreview(),this.fadedBlock=c,c.fadeForReplacement(!0),this.workspace.getRenderer().shouldHighlightConnection(b)&&(b.highlight(),this.staticConn=b)}finally{$.enable$$module$build$src$core$events$utils()}}previewConnection(a,\nb){if(a!==this.draggedConn||b!==this.staticConn){$.disable$$module$build$src$core$events$utils();try{this.hidePreview(),this.shouldUseMarkerPreview(a,b)&&(this.markerConn=this.previewMarker(a,b)),this.workspace.getRenderer().shouldHighlightConnection(b)&&b.highlight(),this.draggedConn=a,this.staticConn=b}finally{$.enable$$module$build$src$core$events$utils()}}}shouldUseMarkerPreview(a,b){return b.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||\n!(this.workspace.getRenderer()instanceof Renderer$$module$build$src$core$renderers$zelos$renderer)}previewMarker(a,b){const c=a.getSourceBlock(),d=this.createInsertionMarker(c),e=this.getMatchingConnection(c,d,a);if(!e)return null;d.queueRender();triggerQueuedRenders$$module$build$src$core$render_management();e.connect(b);const f={x:b.x-e.x,y:b.y-e.y},g=e.getOffsetInBlock().clone();finishQueuedRenders$$module$build$src$core$render_management().then(()=>{if(!d.isDeadOrDying()){$.disable$$module$build$src$core$events$utils();\ntry{d==null||d.positionNearConnection(e,f,g),d==null||d.getSvgRoot().setAttribute(\"visibility\",\"visible\")}finally{$.enable$$module$build$src$core$events$utils()}}});return e}serializeBlockToInsertionMarker(a){const b=save$$module$build$src$core$serialization$blocks(a,{addCoordinates:!1,addInputBlocks:!1,addNextBlocks:!1,doFullSerialization:!1});if(!b)throw Error(`Failed to serialize source block. ${a.toDevString()}`);return b}createInsertionMarker(a){a=this.serializeBlockToInsertionMarker(a);a=append$$module$build$src$core$serialization$blocks(a,\nthis.workspace);for(const b of a.getDescendants(!1))b.setInsertionMarker(!0);a.initSvg();a.getSvgRoot().setAttribute(\"visibility\",\"hidden\");return a}getMatchingConnection(a,b,c){a=a.getConnections_(!0);b=b.getConnections_(!0);if(a.length!==b.length)return null;for(let d=0;d-b||a<-180+b||a>180-b?!0:!1}getClientRect(){if(!this.svgGroup_||this.autoClose||!this.isVisible())return null;const a=this.svgGroup_.getBoundingClientRect(),b=a.left;return this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.LEFT?new Rect$$module$build$src$core$utils$rect(-1E9,1E9,-1E9,b+a.width):new Rect$$module$build$src$core$utils$rect(-1E9,1E9,b,1E9)}reflowInternal_(){this.workspace_.scale=this.getFlyoutScale();\nlet a=this.getContents().reduce((b,c)=>Math.max(b,c.getElement().getBoundingRectangle().getWidth()),0);a+=this.MARGIN*1.5+this.tabWidth_;a*=this.workspace_.scale;a+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;if(this.getWidth()!==a){if(this.RTL)for(const b of this.getContents()){const c=b.getElement().getBoundingRectangle().left,d=a/this.workspace_.scale-b.getElement().getBoundingRectangle().getWidth()-this.MARGIN-this.tabWidth_;b.getElement().moveBy(d-c,0)}this.targetWorkspace.scrollbar||\nthis.autoClose||this.targetWorkspace.getFlyout()!==this||this.toolboxPosition_!==Position$$module$build$src$core$utils$toolbox.LEFT||this.targetWorkspace.translate(this.targetWorkspace.scrollX+a,this.targetWorkspace.scrollY);this.width_=a;this.position();this.targetWorkspace.resizeContents();this.targetWorkspace.recordDragTargets()}}};VerticalFlyout$$module$build$src$core$flyout_vertical.registryName=\"verticalFlyout\";\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,DEFAULT$$module$build$src$core$registry,VerticalFlyout$$module$build$src$core$flyout_vertical);var module$build$src$core$flyout_vertical={};module$build$src$core$flyout_vertical.VerticalFlyout=VerticalFlyout$$module$build$src$core$flyout_vertical;var HorizontalFlyout$$module$build$src$core$flyout_horizontal=class extends Flyout$$module$build$src$core$flyout_base{constructor(a){super(a);this.horizontalLayout=!0}setMetrics_(a){if(this.isVisible()){var b=this.workspace_.getMetricsManager(),c=b.getScrollMetrics(),d=b.getViewMetrics();b=b.getAbsoluteMetrics();typeof a.x===\"number\"&&(this.workspace_.scrollX=-(c.left+(c.width-d.width)*a.x));this.workspace_.translate(this.workspace_.scrollX+b.left,this.workspace_.scrollY+b.top)}}getX(){return 0}getY(){if(!this.isVisible())return 0;\nvar a=this.targetWorkspace.getMetricsManager();const b=a.getAbsoluteMetrics(),c=a.getViewMetrics();a=a.getToolboxMetrics();const d=this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.TOP;return this.targetWorkspace.toolboxPosition===this.toolboxPosition_?this.targetWorkspace.getToolbox()?d?a.height:c.height-this.getHeight():d?0:c.height:d?0:c.height+b.top-this.getHeight()}position(){if(this.isVisible()&&this.targetWorkspace.isVisible()){var a=this.targetWorkspace.getMetricsManager().getViewMetrics();\nthis.width_=a.width;a=a.width-2*this.CORNER_RADIUS;var b=this.getHeight()-this.CORNER_RADIUS;this.setBackgroundPath(a,b);a=this.getX();b=this.getY();this.positionAt_(this.getWidth(),this.getHeight(),a,b)}}setBackgroundPath(a,b){const c=this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.TOP,d=[\"M 0,\"+(c?0:this.CORNER_RADIUS)];c?(d.push(\"h\",a+2*this.CORNER_RADIUS),d.push(\"v\",b),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,-this.CORNER_RADIUS,this.CORNER_RADIUS),d.push(\"h\",\n-a),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,-this.CORNER_RADIUS,-this.CORNER_RADIUS)):(d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,this.CORNER_RADIUS,-this.CORNER_RADIUS),d.push(\"h\",a),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,this.CORNER_RADIUS,this.CORNER_RADIUS),d.push(\"v\",b),d.push(\"h\",-a-2*this.CORNER_RADIUS));d.push(\"z\");this.svgBackground_.setAttribute(\"d\",d.join(\" \"))}scrollToStart(){let a;(a=this.workspace_.scrollbar)==null||a.setX(this.RTL?Infinity:\n0)}wheel_(a){var b=getScrollDeltaPixels$$module$build$src$core$browser_events(a);if(b=b.x||b.y){const c=this.workspace_.getMetricsManager(),d=c.getScrollMetrics();b=c.getViewMetrics().left-d.left+b;let e;(e=this.workspace_.scrollbar)==null||e.setX(b);hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv(this.workspace_);hideWithoutAnimation$$module$build$src$core$dropdowndiv()}a.preventDefault();a.stopPropagation()}layout_(a){this.workspace_.scale=this.targetWorkspace.scale;const b=this.MARGIN;\nlet c=b+this.tabWidth_;this.RTL&&(a=a.reverse());for(const d of a)a=d.getElement().getBoundingRectangle(),a=this.RTL?c+a.getWidth():c,d.getElement().moveBy(a,b),c+=d.getElement().getBoundingRectangle().getWidth()}isDragTowardWorkspace(a){a=Math.atan2(a.y,a.x)/Math.PI*180;const b=this.dragAngleRange_;return a<90+b&&a>90-b||a>-90-b&&a<-90+b?!0:!1}getClientRect(){if(!this.svgGroup_||this.autoClose||!this.isVisible())return null;const a=this.svgGroup_.getBoundingClientRect(),b=a.top;return this.toolboxPosition_===\nPosition$$module$build$src$core$utils$toolbox.TOP?new Rect$$module$build$src$core$utils$rect(-1E9,b+a.height,-1E9,1E9):new Rect$$module$build$src$core$utils$rect(b,1E9,-1E9,1E9)}reflowInternal_(){this.workspace_.scale=this.getFlyoutScale();let a=this.getContents().reduce((b,c)=>Math.max(b,c.getElement().getBoundingRectangle().getHeight()),0);a+=this.MARGIN*1.5;a*=this.workspace_.scale;a+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;this.getHeight()!==a&&(this.targetWorkspace.scrollbar||\nthis.autoClose||this.targetWorkspace.getFlyout()!==this||this.toolboxPosition_!==Position$$module$build$src$core$utils$toolbox.TOP||this.targetWorkspace.translate(this.targetWorkspace.scrollX,this.targetWorkspace.scrollY+a),this.height_=a,this.position(),this.targetWorkspace.resizeContents(),this.targetWorkspace.recordDragTargets())}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,DEFAULT$$module$build$src$core$registry,HorizontalFlyout$$module$build$src$core$flyout_horizontal);\nvar module$build$src$core$flyout_horizontal={};module$build$src$core$flyout_horizontal.HorizontalFlyout=HorizontalFlyout$$module$build$src$core$flyout_horizontal;var FieldVariable$$module$build$src$core$field_variable=class extends FieldDropdown$$module$build$src$core$field_dropdown{constructor(a,b,c,d,e){super(Field$$module$build$src$core$field.SKIP_SETUP);this.defaultType=\"\";this.variableTypes=[];this.variable=null;this.SERIALIZABLE=!0;this.menuGenerator_=FieldVariable$$module$build$src$core$field_variable.dropdownCreate;this.defaultVariableName=typeof a===\"string\"?a:\"\";this.size_=new Size$$module$build$src$core$utils$size(0,0);a!==Field$$module$build$src$core$field.SKIP_SETUP&&\n(e?this.configure_(e):this.setTypes(c,d),b&&this.setValidator(b))}configure_(a){super.configure_(a);this.setTypes(a.variableTypes,a.defaultType)}initModel(){var a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;this.variable||(a=$.getOrCreateVariablePackage$$module$build$src$core$variables(a.workspace,null,this.defaultVariableName,this.defaultType),this.doValueUpdate_(a.getId()))}initView(){super.initView();addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\n\"blocklyVariableField\")}shouldAddBorderRect_(){const a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;return super.shouldAddBorderRect_()&&(!this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW||a.type!==\"variables_get\")}fromXml(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;const c=a.getAttribute(\"id\"),d=a.textContent,e=a.getAttribute(\"variabletype\")||a.getAttribute(\"variableType\")||\"\";b=$.getOrCreateVariablePackage$$module$build$src$core$variables(b.workspace,\nc,d,e);if(e!==null&&e!==b.getType())throw Error(\"Serialized variable type with id '\"+b.getId()+\"' had type \"+b.getType()+\", and does not match variable field that references it: \"+domToText$$module$build$src$core$xml(a)+\".\");this.setValue(b.getId())}toXml(a){this.initModel();a.id=this.variable.getId();a.textContent=this.variable.getName();this.variable.getType()&&a.setAttribute(\"variabletype\",this.variable.getType());return a}saveState(a){var b=this.saveLegacyState(FieldVariable$$module$build$src$core$field_variable);\nif(b!==null)return b;this.initModel();b={id:this.variable.getId()};a&&(b.name=this.variable.getName(),b.type=this.variable.getType());return b}loadState(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.loadLegacyState(FieldVariable$$module$build$src$core$field_variable,a)||(a=$.getOrCreateVariablePackage$$module$build$src$core$variables(b.workspace,a.id||null,a.name,a.type||\"\"),this.setValue(a.getId()))}setSourceBlock(a){if(a.isShadow())throw Error(\"Variable fields are not allowed to exist on shadow blocks.\");\nsuper.setSourceBlock(a)}getValue(){return this.variable?this.variable.getId():null}getText(){return this.variable?this.variable.getName():\"\"}getVariable(){return this.variable}getDefaultType(){return this.defaultType}getValidator(){return this.variable?this.validator_:null}doClassValidation_(a){if(a===null)return null;var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;b=$.getVariable$$module$build$src$core$variables(b.workspace,a);if(!b)return console.warn(\"Variable id doesn't point to a real variable! ID was \"+\na),null;b=b.getType();return this.typeIsAllowed(b)?a:(console.warn(\"Variable type doesn't match this field! Type was \"+b),null)}doValueUpdate_(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.variable=$.getVariable$$module$build$src$core$variables(b.workspace,a);super.doValueUpdate_(a)}typeIsAllowed(a){const b=this.getVariableTypes();if(!b)return!0;for(let c=0;c-Infinity&&(a.min=`${this.min_}`,setState$$module$build$src$core$utils$aria(a,State$$module$build$src$core$utils$aria.VALUEMIN,this.min_));this.max_c.isInFlyout=!0);this.addBlockListeners(a);return new FlyoutItem$$module$build$src$core$flyout_item(a,BLOCK_TYPE$$module$build$src$core$block_flyout_inflater)}createBlock(a,b){a.blockxml?(a=typeof a.blockxml===\"string\"?$.textToDom$$module$build$src$core$utils$xml(a.blockxml):a.blockxml,b=domToBlockInternal$$module$build$src$core$xml(a,b)):(a.enabled===void 0&&(a.enabled=a.disabled!==\"true\"&&a.disabled!==!0),a.disabledReasons===\nvoid 0&&a.enabled===!1&&(a.disabledReasons=[MANUALLY_DISABLED$$module$build$src$core$constants]),\"x\"in a&&delete a.x,\"y\"in a&&delete a.y,b=appendInternal$$module$build$src$core$serialization$blocks(a,b));return b}gapForItem(a,b){let c;a.gap?c=parseInt(String(a.gap)):a.blockxml&&(a=typeof a.blockxml===\"string\"?$.textToDom$$module$build$src$core$utils$xml(a.blockxml):a.blockxml,c=parseInt(a.getAttribute(\"gap\")));return!c||isNaN(c)?b:c}disposeItem(a){a=a.getElement();a instanceof BlockSvg$$module$build$src$core$block_svg&&\n(this.removeListeners(a.id),a.dispose(!1,!1))}removeListeners(a){let b;((b=this.listeners.get(a))!=null?b:[]).forEach(c=>unbind$$module$build$src$core$browser_events(c));this.listeners.delete(a)}setFlyout(a){if(this.flyout!==a){if(this.flyout){let c;(c=this.flyout.targetWorkspace)==null||c.removeChangeListener(this.capacityWrapper)}this.flyout=a;var b;(b=this.flyout.targetWorkspace)==null||b.addChangeListener(this.capacityWrapper)}}updateStateBasedOnCapacity(a){let b,c;const d=(b=this.flyout)==null?\nvoid 0:(c=b.targetWorkspace)==null?void 0:c.isCapacityAvailable(getBlockTypeCounts$$module$build$src$core$common(a));for(;a;)a.setDisabledReason(!d,WORKSPACE_AT_BLOCK_CAPACITY_DISABLED_REASON$$module$build$src$core$block_flyout_inflater),a=a.getNextBlock()}addBlockListeners(a){const b=[];b.push(conditionalBind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointerdown\",a,c=>{let d,e;const f=(d=this.flyout)==null?void 0:(e=d.targetWorkspace)==null?void 0:e.getGesture(c);f&&this.flyout&&(f.setStartBlock(a),\nf.handleFlyoutStart(c,this.flyout))}));b.push(bind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointermove\",null,()=>{let c,d;((c=this.flyout)==null?0:(d=c.targetWorkspace)==null?0:d.isDragging())||a.addSelect()}));b.push(bind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointerleave\",null,()=>{let c,d;((c=this.flyout)==null?0:(d=c.targetWorkspace)==null?0:d.isDragging())||a.removeSelect()}));this.listeners.set(a.id,b)}filterFlyoutBasedOnCapacity(a){!this.flyout||a&&a.type!==EventType$$module$build$src$core$events$type.BLOCK_CREATE&&\na.type!==EventType$$module$build$src$core$events$type.BLOCK_DELETE||this.flyout.getWorkspace().getTopBlocks(!1).forEach(b=>{this.permanentlyDisabledBlocks.has(b)||this.updateStateBasedOnCapacity(b)})}getType(){return BLOCK_TYPE$$module$build$src$core$block_flyout_inflater}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,BLOCK_TYPE$$module$build$src$core$block_flyout_inflater,BlockFlyoutInflater$$module$build$src$core$block_flyout_inflater);\nvar module$build$src$core$block_flyout_inflater={};module$build$src$core$block_flyout_inflater.BlockFlyoutInflater=BlockFlyoutInflater$$module$build$src$core$block_flyout_inflater;var module$build$src$core$interfaces$i_paster={};module$build$src$core$interfaces$i_paster.isPaster=isPaster$$module$build$src$core$interfaces$i_paster;var module$build$src$core$interfaces$i_rendered_element={};module$build$src$core$interfaces$i_rendered_element.isRenderedElement=isRenderedElement$$module$build$src$core$interfaces$i_rendered_element;var ConstantProvider$$module$build$src$core$renderers$geras$constants=class extends ConstantProvider$$module$build$src$core$renderers$common$constants{constructor(){super();this.FIELD_TEXT_BASELINE_CENTER=!1;this.DARK_PATH_OFFSET=1;this.MAX_BOTTOM_WIDTH=30;this.STATEMENT_BOTTOM_SPACER=-this.NOTCH_HEIGHT/2}getCSS_(a){return super.getCSS_(a).concat([`${a} .blocklyInsertionMarker>.blocklyPathLight,`,`${a} .blocklyInsertionMarker>.blocklyPathDark {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\"stroke: none;\",\n\"}\"])}},module$build$src$core$renderers$geras$constants={};module$build$src$core$renderers$geras$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$geras$constants;var Highlighter$$module$build$src$core$renderers$geras$highlighter=class{constructor(a){this.inlineSteps_=this.steps_=\"\";this.info_=a;this.RTL_=this.info_.RTL;a=a.getRenderer();this.constants_=a.getConstants();this.highlightConstants_=a.getHighlightConstants();this.highlightOffset=this.highlightConstants_.OFFSET;this.outsideCornerPaths_=this.highlightConstants_.OUTSIDE_CORNER;this.insideCornerPaths_=this.highlightConstants_.INSIDE_CORNER;this.puzzleTabPaths_=this.highlightConstants_.PUZZLE_TAB;this.notchPaths_=\nthis.highlightConstants_.NOTCH;this.startPaths_=this.highlightConstants_.START_HAT;this.jaggedTeethPaths_=this.highlightConstants_.JAGGED_TEETH}getPath(){return this.steps_+\"\\n\"+this.inlineSteps_}drawTopCorner(a){this.steps_+=moveBy$$module$build$src$core$utils$svg_paths(a.xPos,this.info_.startY);for(let b=0,c;c=a.elements[b];b++)Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(c)?this.steps_+=this.highlightConstants_.START_POINT:Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(c)?\nthis.steps_+=this.outsideCornerPaths_.topLeft(this.RTL_):Types$$module$build$src$core$renderers$measurables$types.isPreviousConnection(c)?this.steps_+=this.notchPaths_.pathLeft:Types$$module$build$src$core$renderers$measurables$types.isHat(c)?this.steps_+=this.startPaths_.path(this.RTL_):Types$$module$build$src$core$renderers$measurables$types.isSpacer(c)&&c.width!==0&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",c.xPos+c.width-this.highlightOffset));this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",\na.xPos+a.width-this.highlightOffset)}drawJaggedEdge_(a){this.info_.RTL&&(this.steps_+=this.jaggedTeethPaths_.pathLeft+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a.height-this.jaggedTeethPaths_.height-this.highlightOffset))}drawValueInput(a){const b=a.getLastInput();if(this.RTL_){const c=a.height-b.connectionHeight;this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos+b.width-this.highlightOffset,a.yPos)+this.puzzleTabPaths_.pathDown(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",\nc)}else this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos+b.width,a.yPos)+this.puzzleTabPaths_.pathDown(this.RTL_)}drawStatementInput(a){const b=a.getLastInput();if(b)if(this.RTL_){const c=a.height-2*this.insideCornerPaths_.height;this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos,a.yPos)+this.insideCornerPaths_.pathTop(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",c)+this.insideCornerPaths_.pathBottom(this.RTL_)+lineTo$$module$build$src$core$utils$svg_paths(a.width-\nb.xPos-this.insideCornerPaths_.width,0)}else this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos,a.yPos+a.height)+this.insideCornerPaths_.pathBottom(this.RTL_)+lineTo$$module$build$src$core$utils$svg_paths(a.width-b.xPos-this.insideCornerPaths_.width,0)}drawRightSideRow(a){const b=a.xPos+a.width-this.highlightOffset;a instanceof SpacerRow$$module$build$src$core$renderers$measurables$spacer_row&&a.followsStatement&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",b));\nthis.RTL_&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",b),a.height>this.highlightOffset&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+a.height-this.highlightOffset)))}drawBottomRow(a){if(this.RTL_)this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.baseline-this.highlightOffset);else{const b=this.info_.bottomRow.elements[0];Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(b)?this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(a.xPos+\nthis.highlightOffset,a.baseline-this.highlightOffset):Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(b)&&(this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(a.xPos,a.baseline),this.steps_+=this.outsideCornerPaths_.bottomLeft())}}drawLeft(){var a=this.info_.outputConnection;a&&(a=a.connectionOffsetY+a.height,this.RTL_?this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(this.info_.startX,a):(this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(this.info_.startX+\nthis.highlightOffset,this.info_.bottomRow.baseline-this.highlightOffset),this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a)),this.steps_+=this.puzzleTabPaths_.pathUp(this.RTL_));this.RTL_||(a=this.info_.topRow,Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(a.elements[0])?this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",this.outsideCornerPaths_.height):this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.capline+this.highlightOffset))}drawInlineInput(a){const b=\nthis.highlightOffset,c=a.xPos+a.connectionWidth;var d=a.centerline-a.height/2;const e=a.width-a.connectionWidth,f=d+b;this.RTL_?(d=a.connectionOffsetY-b,a=a.height-(a.connectionOffsetY+a.connectionHeight)+b,this.inlineSteps_+=moveTo$$module$build$src$core$utils$svg_paths(c-b,f)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",d)+this.puzzleTabPaths_.pathDown(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",e)):this.inlineSteps_+=\nmoveTo$$module$build$src$core$utils$svg_paths(a.xPos+a.width+b,f)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a.height)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-e)+moveTo$$module$build$src$core$utils$svg_paths(c,d+a.connectionOffsetY)+this.puzzleTabPaths_.pathDown(this.RTL_)}},module$build$src$core$renderers$geras$highlighter={};module$build$src$core$renderers$geras$highlighter.Highlighter=Highlighter$$module$build$src$core$renderers$geras$highlighter;var Drawer$$module$build$src$core$renderers$geras$drawer=class extends Drawer$$module$build$src$core$renderers$common$drawer{constructor(a,b){super(a,b);this.highlighter_=new Highlighter$$module$build$src$core$renderers$geras$highlighter(b)}draw(){this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();const a=this.block_.pathObject;a.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);a.setHighlightPath(this.highlighter_.getPath());this.info_.RTL&&a.flipRTL();this.recordSizeOnBlock_()}drawTop_(){this.highlighter_.drawTopCorner(this.info_.topRow);\nthis.highlighter_.drawRightSideRow(this.info_.topRow);super.drawTop_()}drawJaggedEdge_(a){this.highlighter_.drawJaggedEdge_(a);super.drawJaggedEdge_(a)}drawValueInput_(a){this.highlighter_.drawValueInput(a);super.drawValueInput_(a)}drawStatementInput_(a){this.highlighter_.drawStatementInput(a);super.drawStatementInput_(a)}drawRightSideRow_(a){this.highlighter_.drawRightSideRow(a);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",a.xPos+a.width)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",\na.yPos+a.height)}drawBottom_(){this.highlighter_.drawBottomRow(this.info_.bottomRow);super.drawBottom_()}drawLeft_(){this.highlighter_.drawLeft();super.drawLeft_()}drawInlineInput_(a){this.highlighter_.drawInlineInput(a);super.drawInlineInput_(a)}positionInlineInputConnection_(a){const b=a.centerline-a.height/2;if(a.connectionModel){let c=a.xPos+a.connectionWidth+this.constants_.DARK_PATH_OFFSET;this.info_.RTL&&(c*=-1);a.connectionModel.setOffsetInBlock(c,b+a.connectionOffsetY+this.constants_.DARK_PATH_OFFSET)}}positionStatementInputConnection_(a){const b=\na.getLastInput();if(b==null?0:b.connectionModel){let c=a.xPos+a.statementEdge+b.notchOffset;c=this.info_.RTL?c*-1:c+this.constants_.DARK_PATH_OFFSET;b.connectionModel.setOffsetInBlock(c,a.yPos+this.constants_.DARK_PATH_OFFSET)}}positionExternalValueConnection_(a){const b=a.getLastInput();if(b&&b.connectionModel){let c=a.xPos+a.width+this.constants_.DARK_PATH_OFFSET;this.info_.RTL&&(c*=-1);b.connectionModel.setOffsetInBlock(c,a.yPos)}}positionNextConnection_(){const a=this.info_.bottomRow;if(a.connection){const b=\na.connection,c=b.xPos;b.connectionModel.setOffsetInBlock((this.info_.RTL?-c:c)+this.constants_.DARK_PATH_OFFSET/2,a.baseline+this.constants_.DARK_PATH_OFFSET)}}},module$build$src$core$renderers$geras$drawer={};module$build$src$core$renderers$geras$drawer.Drawer=Drawer$$module$build$src$core$renderers$geras$drawer;var HighlightConstantProvider$$module$build$src$core$renderers$geras$highlight_constants=class{constructor(a){this.OFFSET=.5;this.constantProvider=a;this.START_POINT=moveBy$$module$build$src$core$utils$svg_paths(this.OFFSET,this.OFFSET)}init(){this.INSIDE_CORNER=this.makeInsideCorner();this.OUTSIDE_CORNER=this.makeOutsideCorner();this.PUZZLE_TAB=this.makePuzzleTab();this.NOTCH=this.makeNotch();this.JAGGED_TEETH=this.makeJaggedTeeth();this.START_HAT=this.makeStartHat()}makeInsideCorner(){const a=this.constantProvider.CORNER_RADIUS,\nb=this.OFFSET,c=(1-Math.SQRT1_2)*(a+b)-b,d=moveBy$$module$build$src$core$utils$svg_paths(c,c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(-c-b,a-c)),e=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a+b,point$$module$build$src$core$utils$svg_paths(a+b,a+b)),f=moveBy$$module$build$src$core$utils$svg_paths(c,-c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a+b,point$$module$build$src$core$utils$svg_paths(a-c,c+b));return{width:a+\nb,height:a,pathTop(g){return g?d:\"\"},pathBottom(g){return g?e:f}}}makeOutsideCorner(){const a=this.constantProvider.CORNER_RADIUS,b=this.OFFSET,c=(1-Math.SQRT1_2)*(a-b)+b,d=moveBy$$module$build$src$core$utils$svg_paths(c,c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(a-c,-c+b)),e=moveBy$$module$build$src$core$utils$svg_paths(b,a)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(a,-a+\nb)),f=-c,g=moveBy$$module$build$src$core$utils$svg_paths(c,f)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(-c+b,-f-a));return{height:a,topLeft(h){return h?d:e},bottomLeft(){return g}}}makePuzzleTab(){const a=this.constantProvider.TAB_WIDTH,b=this.constantProvider.TAB_HEIGHT,c=moveBy$$module$build$src$core$utils$svg_paths(-2,-b+2.5+.9)+lineTo$$module$build$src$core$utils$svg_paths(a*-.45,-2.1),d=lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",\n2.5)+moveBy$$module$build$src$core$utils$svg_paths(-a*.97,2.5)+curve$$module$build$src$core$utils$svg_paths(\"q\",[point$$module$build$src$core$utils$svg_paths(-a*.05,10),point$$module$build$src$core$utils$svg_paths(a*.3,9.5)])+moveBy$$module$build$src$core$utils$svg_paths(a*.67,-1.9)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",2.5),e=lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",-1.5)+moveBy$$module$build$src$core$utils$svg_paths(a*-.92,-.5)+curve$$module$build$src$core$utils$svg_paths(\"q\",\n[point$$module$build$src$core$utils$svg_paths(a*-.19,-5.5),point$$module$build$src$core$utils$svg_paths(0,-11)])+moveBy$$module$build$src$core$utils$svg_paths(a*.92,1),f=moveBy$$module$build$src$core$utils$svg_paths(-5,b-.7)+lineTo$$module$build$src$core$utils$svg_paths(a*.46,-2.1);return{width:a,height:b,pathUp(g){return g?c:e},pathDown(g){return g?d:f}}}makeNotch(){return{pathLeft:lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",this.OFFSET)+this.constantProvider.NOTCH.pathLeft}}makeJaggedTeeth(){return{pathLeft:lineTo$$module$build$src$core$utils$svg_paths(5.1,\n2.6)+moveBy$$module$build$src$core$utils$svg_paths(-10.2,6.8)+lineTo$$module$build$src$core$utils$svg_paths(5.1,2.6),height:12,width:10.2}}makeStartHat(){const a=this.constantProvider.START_HAT.height,b=moveBy$$module$build$src$core$utils$svg_paths(25,-8.7)+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(29.7,-6.2),point$$module$build$src$core$utils$svg_paths(57.2,-.5),point$$module$build$src$core$utils$svg_paths(75,8.7)]),c=curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(17.8,-9.2),point$$module$build$src$core$utils$svg_paths(45.3,-14.9),point$$module$build$src$core$utils$svg_paths(75,-8.7)])+moveTo$$module$build$src$core$utils$svg_paths(100.5,a+.5);return{path(d){return d?b:c}}}},module$build$src$core$renderers$geras$highlight_constants={};module$build$src$core$renderers$geras$highlight_constants.HighlightConstantProvider=HighlightConstantProvider$$module$build$src$core$renderers$geras$highlight_constants;var InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input=class extends InlineInput$$module$build$src$core$renderers$measurables$inline_input{constructor(a,b){super(a,b);this.constants_=a;this.connectedBlock&&(this.width+=this.constants_.DARK_PATH_OFFSET,this.height+=this.constants_.DARK_PATH_OFFSET)}},module$build$src$core$renderers$geras$measurables$inline_input={};module$build$src$core$renderers$geras$measurables$inline_input.InlineInput=InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input;var StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input=class extends StatementInput$$module$build$src$core$renderers$measurables$statement_input{constructor(a,b){super(a,b);this.constants_=a;this.connectedBlock&&(this.height+=this.constants_.DARK_PATH_OFFSET)}},module$build$src$core$renderers$geras$measurables$statement_input={};module$build$src$core$renderers$geras$measurables$statement_input.StatementInput=StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input;var RenderInfo$$module$build$src$core$renderers$geras$info=class extends RenderInfo$$module$build$src$core$renderers$common$info{constructor(a,b){super(a,b);this.renderer_=a}getRenderer(){return this.renderer_}populateBottomRow_(){super.populateBottomRow_();this.block_.inputList.length&&this.block_.inputList[this.block_.inputList.length-1]instanceof StatementInput$$module$build$src$core$inputs$statement_input||(this.bottomRow.minHeight=this.constants_.MEDIUM_PADDING-this.constants_.DARK_PATH_OFFSET)}addInput_(a,\nb){if(this.isInline&&a instanceof $.ValueInput$$module$build$src$core$inputs$value_input)b.elements.push(new InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input(this.constants_,a)),b.hasInlineInput=!0;else if(a instanceof StatementInput$$module$build$src$core$inputs$statement_input)b.elements.push(new StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input(this.constants_,a)),b.hasStatement=!0;else if(a instanceof $.ValueInput$$module$build$src$core$inputs$value_input)b.elements.push(new ExternalValueInput$$module$build$src$core$renderers$measurables$external_value_input(this.constants_,\na)),b.hasExternalInput=!0;else if(a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input)b.minHeight=Math.max(b.minHeight,this.constants_.DUMMY_INPUT_MIN_HEIGHT),b.hasDummyInput=!0;this.isInline||b.align!==null||(b.align=a.align)}addElemSpacing_(){let a=!1;for(let c=0,d;d=this.rows[c];c++)d.hasExternalInput&&(a=!0);for(let c=0,d;d=this.rows[c];c++){var b=d.elements;d.elements=[];d.startsWithElemSpacer()&&d.elements.push(new InRowSpacer$$module$build$src$core$renderers$measurables$in_row_spacer(this.constants_,\nthis.getInRowSpacing_(null,b[0])));if(b.length){for(let e=0;e0&&this.addAlignmentPadding_(e,a),a=e.width)}else super.alignRowElements_()}getDesiredRowWidth_(a){return this.isInline&&a.hasStatement?this.statementEdge+\nthis.constants_.MAX_BOTTOM_WIDTH+this.startX:super.getDesiredRowWidth_(a)}finalize_(){let a=0,b=0;for(let d=0,e;e=this.rows[d];d++){e.yPos=b;e.xPos=this.startX;b+=e.height;a=Math.max(a,e.widthWithConnectedBlocks);var c=b-this.topRow.ascenderHeight;e===this.bottomRow&&c>>/sprites.png);\\n height: 16px;\\n vertical-align: middle;\\n visibility: hidden;\\n width: 16px;\\n}\\n\\n.blocklyToolboxCategoryIconClosed {\\n background-position: -32px -1px;\\n}\\n\\n.blocklyToolbox[dir=\"RTL\"] .blocklyToolboxCategoryIconClosed {\\n background-position: 0 -1px;\\n}\\n\\n.blocklyToolboxSelected>.blocklyToolboxCategoryIconClosed {\\n background-position: -32px -17px;\\n}\\n\\n.blocklyToolbox[dir=\"RTL\"] .blocklyToolboxSelected>.blocklyToolboxCategoryIconClosed {\\n background-position: 0 -17px;\\n}\\n\\n.blocklyToolboxCategoryIconOpen {\\n background-position: -16px -1px;\\n}\\n\\n.blocklyToolboxSelected>.blocklyToolboxCategoryIconOpen {\\n background-position: -16px -17px;\\n}\\n\\n.blocklyToolboxCategoryLabel {\\n cursor: default;\\n font: 16px sans-serif;\\n padding: 0 3px;\\n vertical-align: middle;\\n}\\n\\n.blocklyToolboxDelete .blocklyToolboxCategoryLabel {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyToolboxSelected .blocklyToolboxCategoryLabel {\\n color: #fff;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX_ITEM,ToolboxCategory$$module$build$src$core$toolbox$category.registrationName,ToolboxCategory$$module$build$src$core$toolbox$category);var module$build$src$core$toolbox$category={};module$build$src$core$toolbox$category.ToolboxCategory=ToolboxCategory$$module$build$src$core$toolbox$category;var ToolboxSeparator$$module$build$src$core$toolbox$separator=class extends ToolboxItem$$module$build$src$core$toolbox$toolbox_item{constructor(a,b){super(a,b);this.cssConfig_={container:\"blocklyTreeSeparator\"};this.htmlDiv=null;Object.assign(this.cssConfig_,a.cssconfig||a.cssConfig)}init(){this.createDom_()}createDom_(){const a=document.createElement(\"div\");a.tabIndex=-1;a.id=this.getId();const b=this.cssConfig_.container;b&&addClass$$module$build$src$core$utils$dom(a,b);return this.htmlDiv=a}getDiv(){return this.htmlDiv}dispose(){removeNode$$module$build$src$core$utils$dom(this.htmlDiv)}};\nToolboxSeparator$$module$build$src$core$toolbox$separator.registrationName=\"sep\";register$$module$build$src$core$css('\\n.blocklyTreeSeparator {\\n border-bottom: solid #e5e5e5 1px;\\n height: 0;\\n margin: 5px 0;\\n}\\n\\n.blocklyToolbox[layout=\"h\"] .blocklyTreeSeparator {\\n border-right: solid #e5e5e5 1px;\\n border-bottom: none;\\n height: auto;\\n margin: 0 5px 0 5px;\\n padding: 5px 0;\\n width: 0;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX_ITEM,ToolboxSeparator$$module$build$src$core$toolbox$separator.registrationName,ToolboxSeparator$$module$build$src$core$toolbox$separator);var module$build$src$core$toolbox$separator={};module$build$src$core$toolbox$separator.ToolboxSeparator=ToolboxSeparator$$module$build$src$core$toolbox$separator;var CollapsibleToolboxCategory$$module$build$src$core$toolbox$collapsible_category=class extends ToolboxCategory$$module$build$src$core$toolbox$category{constructor(a,b,c){super(a,b,c);this.subcategoriesDiv_=null;this.expanded_=!1;this.toolboxItems_=[]}makeDefaultCssConfig_(){const a=super.makeDefaultCssConfig_();a.contents=\"blocklyToolboxCategoryGroup\";return a}parseContents_(a){if(\"custom\"in a)this.flyoutItems_=a.custom;else{const b=a.contents;if(b){this.flyoutItems_=[];a=!0;for(let c=0;cb.dispose());this.contents.clear();this.renderContents_(a.contents);this.position();this.handleToolboxItemResize()}renderContents_(a){const b=document.createDocumentFragment();\nfor(let c=0;c\n{a.refreshTheme&&a.refreshTheme()})}refreshSelection(){this.selectedItem_&&this.selectedItem_.isSelectable()&&this.selectedItem_.getContents().length&&this.flyout.show(this.selectedItem_.getContents())}setVisible(a){this.isVisible_!==a&&(this.HtmlDiv.style.display=a?\"block\":\"none\",this.isVisible_=a,this.workspace_.recordDragTargets())}autoHide(a){!a&&this.flyout&&this.flyout.autoClose&&this.clearSelection()}setSelectedItem(a){const b=this.selectedItem_;!a&&!b||a&&!isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item(a)||\n(this.shouldDeselectItem_(b,a)&&b!==null&&this.deselectItem_(b),this.shouldSelectItem_(b,a)&&a!==null&&this.selectItem_(b,a),this.updateFlyout_(b,a),this.fireSelectEvent(b,a))}shouldDeselectItem_(a,b){return a!==null&&(!a.isCollapsible()||a!==b)}shouldSelectItem_(a,b){return b!==null&&b!==a}deselectItem_(a){this.selectedItem_=null;this.previouslySelectedItem_=a;a.setSelected(!1);setState$$module$build$src$core$utils$aria(this.contentsDiv_,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,\"\")}selectItem_(a,\nb){this.selectedItem_=b;this.previouslySelectedItem_=a;b.setSelected(!0);setState$$module$build$src$core$utils$aria(this.contentsDiv_,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,b.getId())}selectItemByPosition(a){(a=this.getToolboxItems()[a])&&this.setSelectedItem(a)}updateFlyout_(a,b){b&&(a!==b||b.isCollapsible())&&b.getContents().length?(this.flyout.show(b.getContents()),this.flyout.scrollToStart()):this.flyout.hide()}fireSelectEvent(a,b){const c=a&&a.getName();let d=b&&b.getName();\na===b&&(d=null);a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.TOOLBOX_ITEM_SELECT))(c,d,this.workspace_.id);fire$$module$build$src$core$events$utils(a)}selectParent(){return this.selectedItem_?this.selectedItem_.isCollapsible()&&this.selectedItem_.isExpanded()?(this.selectedItem_.toggleExpanded(),!0):this.selectedItem_.getParent()&&this.selectedItem_.getParent().isSelectable()?(this.setSelectedItem(this.selectedItem_.getParent()),!0):!1:!1}selectChild(){if(!this.selectedItem_||\n!this.selectedItem_.isCollapsible())return!1;const a=this.selectedItem_;a.isExpanded()?this.selectNext():a.toggleExpanded();return!0}selectNext(){if(!this.selectedItem_)return!1;const a=[...this.contents.values()];let b=a.indexOf(this.selectedItem_)+1;if(b>-1&&b-1&&ba.dispose());for(let a=0;ac.isSelectable()))!=null?b:null}return null}getNestedTrees(){return[]}lookUpFocusableNode(a){return this.getToolboxItemById(a)}onTreeFocus(a,\nb){a!==this?this.getSelectedItem()!==a&&this.setSelectedItem(a):this.clearSelection()}onTreeBlur(a){let b;a&&a===((b=this.flyout)==null?void 0:b.getWorkspace())||this.autoHide(!1)}};register$$module$build$src$core$css('\\n.blocklyToolboxDelete {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyToolboxGrab {\\n cursor: url(\"<<>>/handclosed.cur\"), auto;\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n}\\n\\n/* Category tree in Toolbox. */\\n.blocklyToolbox {\\n box-sizing: border-box;\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background-color: #ddd;\\n overflow-x: visible;\\n overflow-y: auto;\\n padding: 4px 0 4px 0;\\n position: absolute;\\n z-index: 70; /* so blocks go under toolbox when dragging */\\n -webkit-tap-highlight-color: transparent; /* issue #1345 */\\n}\\n\\n.blocklyToolboxCategoryGroup {\\n display: flex;\\n flex-wrap: wrap;\\n flex-direction: column;\\n}\\n\\n.blocklyToolboxCategoryGroup:focus {\\n outline: none;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX,DEFAULT$$module$build$src$core$registry,Toolbox$$module$build$src$core$toolbox$toolbox);var module$build$src$core$toolbox$toolbox={};module$build$src$core$toolbox$toolbox.Toolbox=Toolbox$$module$build$src$core$toolbox$toolbox;var module$build$src$core$interfaces$i_navigation_policy={};var VERSION$$module$build$src$core$blockly=\"12.3.1\",INPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE,OUTPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE,NEXT_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT,PREVIOUS_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT,\nTOOLBOX_AT_TOP$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.TOP,TOOLBOX_AT_BOTTOM$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.BOTTOM,TOOLBOX_AT_LEFT$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.LEFT,TOOLBOX_AT_RIGHT$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.RIGHT,svgResize$$module$build$src$core$blockly=svgResize$$module$build$src$core$common,getMainWorkspace$$module$build$src$core$blockly=\ngetMainWorkspace$$module$build$src$core$common,getSelected$$module$build$src$core$blockly=getSelected$$module$build$src$core$common,defineBlocksWithJsonArray$$module$build$src$core$blockly=defineBlocksWithJsonArray$$module$build$src$core$common,setParentContainer$$module$build$src$core$blockly=setParentContainer$$module$build$src$core$common,COLLAPSE_CHARS$$module$build$src$core$blockly=COLLAPSE_CHARS$$module$build$src$core$internal_constants,OPPOSITE_TYPE$$module$build$src$core$blockly=OPPOSITE_TYPE$$module$build$src$core$internal_constants,\nRENAME_VARIABLE_ID$$module$build$src$core$blockly=RENAME_VARIABLE_ID$$module$build$src$core$internal_constants,DELETE_VARIABLE_ID$$module$build$src$core$blockly=DELETE_VARIABLE_ID$$module$build$src$core$internal_constants,COLLAPSED_INPUT_NAME$$module$build$src$core$blockly=COLLAPSED_INPUT_NAME$$module$build$src$core$constants,COLLAPSED_FIELD_NAME$$module$build$src$core$blockly=COLLAPSED_FIELD_NAME$$module$build$src$core$constants,VARIABLE_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$variables,\nVARIABLE_DYNAMIC_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$variables_dynamic,PROCEDURE_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$procedures;Workspace$$module$build$src$core$workspace.prototype.newBlock=function(a,b){return new Block$$module$build$src$core$block(this,a,b)};WorkspaceSvg$$module$build$src$core$workspace_svg.prototype.newBlock=function(a,b){return new BlockSvg$$module$build$src$core$block_svg(this,a,b)};\nWorkspace$$module$build$src$core$workspace.prototype.newComment=function(a){return new WorkspaceComment$$module$build$src$core$comments$workspace_comment(this,a)};WorkspaceSvg$$module$build$src$core$workspace_svg.prototype.newComment=function(a){return new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(this,a)};WorkspaceSvg$$module$build$src$core$workspace_svg.newTrashcan=function(a){return new Trashcan$$module$build$src$core$trashcan(a)};\nMiniWorkspaceBubble$$module$build$src$core$bubbles$mini_workspace_bubble.prototype.newWorkspaceSvg=function(a){return new WorkspaceSvg$$module$build$src$core$workspace_svg(a)};$.Names$$module$build$src$core$names.prototype.populateProcedures=function(a){a=allProcedures$$module$build$src$core$procedures(a);a=a[0].concat(a[1]);for(let b=0;b0,text:c.replace(\"%1\",d.getText()),callback:$.callbackFactory$$module$build$src$core$contextmenu(this,b)})}else if(this.type===\"variables_get_dynamic\"||this.type===\"variables_get_reporter_dynamic\")c={text:$.Msg$$module$build$src$core$msg.RENAME_VARIABLE,\nenabled:!0,callback:renameOptionCallbackFactory$$module$build$src$blocks$variables_dynamic(this)},d=this.getField(\"VAR\").getText(),d={text:$.Msg$$module$build$src$core$msg.DELETE_VARIABLE.replace(\"%1\",d),enabled:!0,callback:deleteOptionCallbackFactory$$module$build$src$blocks$variables_dynamic(this)},a.unshift(c),a.unshift(d)},onchange:function(a){a=this.getFieldValue(\"VAR\");a=$.getVariable$$module$build$src$core$variables(this.workspace,a);this.type===\"variables_get_dynamic\"?this.outputConnection.setCheck(a.getType()):\nthis.getInput(\"VALUE\").connection.setCheck(a.getType())}},renameOptionCallbackFactory$$module$build$src$blocks$variables_dynamic=function(a){return function(){const b=a.workspace,c=a.getField(\"VAR\").getVariable();$.renameVariable$$module$build$src$core$variables(b,c)}},deleteOptionCallbackFactory$$module$build$src$blocks$variables_dynamic=function(a){return function(){const b=a.getField(\"VAR\").getVariable();b&&$.deleteVariable$$module$build$src$core$variables(b.getWorkspace(),b,a)}};\n$.registerMixin$$module$build$src$core$extensions(\"contextMenu_variableDynamicSetterGetter\",CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables_dynamic);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$variables_dynamic);var module$build$src$blocks$variables_dynamic={blocks:blocks$$module$build$src$blocks$variables_dynamic};var blocks$$module$build$src$blocks$variables=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"variables_get\",message0:\"%1\",args0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_VARIABLES_DEFAULT_NAME}\"}],output:null,style:\"variable_blocks\",helpUrl:\"%{BKY_VARIABLES_GET_HELPURL}\",tooltip:\"%{BKY_VARIABLES_GET_TOOLTIP}\",extensions:[\"contextMenu_variableSetterGetter\"]},{type:\"variables_set\",message0:\"%{BKY_VARIABLES_SET}\",args0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_VARIABLES_DEFAULT_NAME}\"},\n{type:\"input_value\",name:\"VALUE\"}],previousStatement:null,nextStatement:null,style:\"variable_blocks\",tooltip:\"%{BKY_VARIABLES_SET_TOOLTIP}\",helpUrl:\"%{BKY_VARIABLES_SET_HELPURL}\",extensions:[\"contextMenu_variableSetterGetter\"]}]),CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables={customContextMenu:function(a){if(!this.isInFlyout){if(this.type===\"variables_get\"){var b=\"variables_set\";var c=$.Msg$$module$build$src$core$msg.VARIABLES_GET_CREATE_SET}else b=\"variables_get\",\nc=$.Msg$$module$build$src$core$msg.VARIABLES_SET_CREATE_GET;var d=this.getField(\"VAR\");b={type:b,fields:{VAR:d.saveState(!0)}};a.push({enabled:this.workspace.remainingCapacity()>0,text:c.replace(\"%1\",d.getText()),callback:$.callbackFactory$$module$build$src$core$contextmenu(this,b)})}else if(this.type===\"variables_get\"||this.type===\"variables_get_reporter\")c={text:$.Msg$$module$build$src$core$msg.RENAME_VARIABLE,enabled:!0,callback:renameOptionCallbackFactory$$module$build$src$blocks$variables(this)},\nd=this.getField(\"VAR\").getText(),d={text:$.Msg$$module$build$src$core$msg.DELETE_VARIABLE.replace(\"%1\",d),enabled:!0,callback:deleteOptionCallbackFactory$$module$build$src$blocks$variables(this)},a.unshift(c),a.unshift(d)}},renameOptionCallbackFactory$$module$build$src$blocks$variables=function(a){return function(){const b=a.workspace,c=a.getField(\"VAR\").getVariable();$.renameVariable$$module$build$src$core$variables(b,c)}},deleteOptionCallbackFactory$$module$build$src$blocks$variables=function(a){return function(){const b=\na.getField(\"VAR\").getVariable();b&&$.deleteVariable$$module$build$src$core$variables(b.getWorkspace(),b,a)}};$.registerMixin$$module$build$src$core$extensions(\"contextMenu_variableSetterGetter\",CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$variables);var module$build$src$blocks$variables={blocks:blocks$$module$build$src$blocks$variables};var blocks$$module$build$src$blocks$text=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"text\",message0:\"%1\",args0:[{type:\"field_input\",name:\"TEXT\",text:\"\"}],output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_TEXT_HELPURL}\",tooltip:\"%{BKY_TEXT_TEXT_TOOLTIP}\",extensions:[\"text_quotes\",\"parent_tooltip_when_inline\"]},{type:\"text_join\",message0:\"\",output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_JOIN_HELPURL}\",tooltip:\"%{BKY_TEXT_JOIN_TOOLTIP}\",mutator:\"text_join_mutator\"},\n{type:\"text_create_join_container\",message0:\"%{BKY_TEXT_CREATE_JOIN_TITLE_JOIN} %1 %2\",args0:[{type:\"input_dummy\"},{type:\"input_statement\",name:\"STACK\"}],style:\"text_blocks\",tooltip:\"%{BKY_TEXT_CREATE_JOIN_TOOLTIP}\",enableContextMenu:!1},{type:\"text_create_join_item\",message0:\"%{BKY_TEXT_CREATE_JOIN_ITEM_TITLE_ITEM}\",previousStatement:null,nextStatement:null,style:\"text_blocks\",tooltip:\"%{BKY_TEXT_CREATE_JOIN_ITEM_TOOLTIP}\",enableContextMenu:!1},{type:\"text_append\",message0:\"%{BKY_TEXT_APPEND_TITLE}\",\nargs0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_TEXT_APPEND_VARIABLE}\"},{type:\"input_value\",name:\"TEXT\"}],previousStatement:null,nextStatement:null,style:\"text_blocks\",extensions:[\"text_append_tooltip\"]},{type:\"text_length\",message0:\"%{BKY_TEXT_LENGTH_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Number\",style:\"text_blocks\",tooltip:\"%{BKY_TEXT_LENGTH_TOOLTIP}\",helpUrl:\"%{BKY_TEXT_LENGTH_HELPURL}\"},{type:\"text_isEmpty\",message0:\"%{BKY_TEXT_ISEMPTY_TITLE}\",\nargs0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Boolean\",style:\"text_blocks\",tooltip:\"%{BKY_TEXT_ISEMPTY_TOOLTIP}\",helpUrl:\"%{BKY_TEXT_ISEMPTY_HELPURL}\"},{type:\"text_indexOf\",message0:\"%{BKY_TEXT_INDEXOF_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:\"String\"},{type:\"field_dropdown\",name:\"END\",options:[[\"%{BKY_TEXT_INDEXOF_OPERATOR_FIRST}\",\"FIRST\"],[\"%{BKY_TEXT_INDEXOF_OPERATOR_LAST}\",\"LAST\"]]},{type:\"input_value\",name:\"FIND\",check:\"String\"}],output:\"Number\",style:\"text_blocks\",\nhelpUrl:\"%{BKY_TEXT_INDEXOF_HELPURL}\",inputsInline:!0,extensions:[\"text_indexOf_tooltip\"]},{type:\"text_charAt\",message0:\"%{BKY_TEXT_CHARAT_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:\"String\"},{type:\"field_dropdown\",name:\"WHERE\",options:[[\"%{BKY_TEXT_CHARAT_FROM_START}\",\"FROM_START\"],[\"%{BKY_TEXT_CHARAT_FROM_END}\",\"FROM_END\"],[\"%{BKY_TEXT_CHARAT_FIRST}\",\"FIRST\"],[\"%{BKY_TEXT_CHARAT_LAST}\",\"LAST\"],[\"%{BKY_TEXT_CHARAT_RANDOM}\",\"RANDOM\"]]}],output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_CHARAT_HELPURL}\",\ninputsInline:!0,mutator:\"text_charAt_mutator\"}]),GET_SUBSTRING_BLOCK$$module$build$src$blocks$text={init:function(){this.WHERE_OPTIONS_1=[[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FIRST,\"FIRST\"]];this.WHERE_OPTIONS_2=[[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_FROM_END,\n\"FROM_END\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_LAST,\"LAST\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"STRING\").setCheck(\"String\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_INPUT_IN_TEXT);const a=b=>{const c=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this[\"WHERE_OPTIONS_\"+b]});c.setValidator(function(d){const e=this.getValue();d=d===\n\"FROM_START\"||d===\"FROM_END\";d!==(e===\"FROM_START\"||e===\"FROM_END\")&&this.getSourceBlock().updateAt_(b,d)});return c};this.appendDummyInput(\"WHERE1_INPUT\").appendField(a(1),\"WHERE1\");this.appendDummyInput(\"AT1\");this.appendDummyInput(\"WHERE2_INPUT\").appendField(a(2),\"WHERE2\");this.appendDummyInput(\"AT2\");$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL);this.setInputsInline(!0);this.setOutput(!0,\n\"String\");this.updateAt_(1,!0);this.updateAt_(2,!0);this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");var b=this.getInput(\"AT1\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at1\",`${b}`);b=this.getInput(\"AT2\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at2\",`${b}`);return a},domToMutation:function(a){const b=\na.getAttribute(\"at1\")===\"true\";a=a.getAttribute(\"at2\")===\"true\";this.updateAt_(1,b);this.updateAt_(2,a)},updateAt_:function(a,b){this.removeInput(\"AT\"+a);this.removeInput(\"ORDINAL\"+a,!0);b?(this.appendValueInput(\"AT\"+a).setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\"+a).appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\"+a);a===2&&$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL&&(this.removeInput(\"TAIL\",\n!0),this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL));a===1&&(this.moveInputBefore(\"AT1\",\"WHERE2_INPUT\"),this.getInput(\"ORDINAL1\")&&this.moveInputBefore(\"ORDINAL1\",\"WHERE2_INPUT\"))}};blocks$$module$build$src$blocks$text.text_getSubstring=GET_SUBSTRING_BLOCK$$module$build$src$blocks$text;\nblocks$$module$build$src$blocks$text.text_changeCase={init:function(){const a=[[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_UPPERCASE,\"UPPERCASE\"],[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_LOWERCASE,\"LOWERCASE\"],[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_TITLECASE,\"TITLECASE\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"TEXT\").setCheck(\"String\").appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",\noptions:a}),\"CASE\");this.setOutput(!0,\"String\");this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_TOOLTIP)}};\nblocks$$module$build$src$blocks$text.text_trim={init:function(){const a=[[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_BOTH,\"BOTH\"],[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_LEFT,\"LEFT\"],[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_RIGHT,\"RIGHT\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_TRIM_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"TEXT\").setCheck(\"String\").appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a}),\n\"MODE\");this.setOutput(!0,\"String\");this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_TRIM_TOOLTIP)}};blocks$$module$build$src$blocks$text.text_print={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_PRINT_TITLE,args0:[{type:\"input_value\",name:\"TEXT\"}],previousStatement:null,nextStatement:null,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_PRINT_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_PRINT_HELPURL})}};\nvar PROMPT_COMMON$$module$build$src$blocks$text={updateType_:function(a){this.outputConnection.setCheck(a===\"NUMBER\"?\"Number\":\"String\")},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"type\",this.getFieldValue(\"TYPE\"));return a},domToMutation:function(a){this.updateType_(a.getAttribute(\"type\"))}};\nblocks$$module$build$src$blocks$text.text_prompt_ext=Object.assign({},PROMPT_COMMON$$module$build$src$blocks$text,{init:function(){var a=[[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_TEXT,\"TEXT\"],[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_NUMBER,\"NUMBER\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_PROMPT_HELPURL);this.setStyle(\"text_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});a.setValidator(b=>{this.updateType_(b)});this.appendValueInput(\"TEXT\").appendField(a,\n\"TYPE\");this.setOutput(!0,\"String\");this.setTooltip(()=>this.getFieldValue(\"TYPE\")===\"TEXT\"?$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_TEXT:$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_NUMBER)}});\nblocks$$module$build$src$blocks$text.text_prompt=Object.assign({},PROMPT_COMMON$$module$build$src$blocks$text,{init:function(){this.mixin(QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);var a=[[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_TEXT,\"TEXT\"],[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_NUMBER,\"NUMBER\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_PROMPT_HELPURL);this.setStyle(\"text_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});\na.setValidator(b=>{this.updateType_(b)});this.appendDummyInput().appendField(a,\"TYPE\").appendField(this.newQuote_(!0)).appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_input\",text:\"\"}),\"TEXT\").appendField(this.newQuote_(!1));this.setOutput(!0,\"String\");this.setTooltip(()=>this.getFieldValue(\"TYPE\")===\"TEXT\"?$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_TEXT:$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_NUMBER)}});\nblocks$$module$build$src$blocks$text.text_count={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_COUNT_MESSAGE0,args0:[{type:\"input_value\",name:\"SUB\",check:\"String\"},{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"Number\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_COUNT_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_COUNT_HELPURL})}};\nblocks$$module$build$src$blocks$text.text_replace={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_MESSAGE0,args0:[{type:\"input_value\",name:\"FROM\",check:\"String\"},{type:\"input_value\",name:\"TO\",check:\"String\"},{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"String\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_HELPURL})}};\nblocks$$module$build$src$blocks$text.text_reverse={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_MESSAGE0,args0:[{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"String\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_HELPURL})}};\nvar QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text={QUOTE_IMAGE_LEFT_DATAURI:\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC\",QUOTE_IMAGE_RIGHT_DATAURI:\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==\",\nQUOTE_IMAGE_WIDTH:12,QUOTE_IMAGE_HEIGHT:12,quoteField_:function(a){for(let b=0,c;c=this.inputList[b];b++)for(let d=0,e;e=c.fieldRow[d];d++)if(a===e.name){c.insertFieldAt(d,this.newQuote_(!0));c.insertFieldAt(d+2,this.newQuote_(!1));return}console.warn('field named \"'+a+'\" not found in '+this.toDevString())},newQuote_:function(a){a=this.RTL?!a:a;return $.fromJson$$module$build$src$core$field_registry({type:\"field_image\",src:a?this.QUOTE_IMAGE_LEFT_DATAURI:this.QUOTE_IMAGE_RIGHT_DATAURI,width:this.QUOTE_IMAGE_WIDTH,\nheight:this.QUOTE_IMAGE_HEIGHT,alt:a?\"\\u201c\":\"\\u201d\"})}},QUOTES_EXTENSION$$module$build$src$blocks$text=function(){this.mixin(QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);this.quoteField_(\"TEXT\")},JOIN_MUTATOR_MIXIN$$module$build$src$blocks$text={itemCount_:0,mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"items\",`${this.itemCount_}`);return a},domToMutation:function(a){this.itemCount_=parseInt(a.getAttribute(\"items\"),10);this.updateShape_()},\nsaveExtraState:function(){return{itemCount:this.itemCount_}},loadExtraState:function(a){this.itemCount_=a.itemCount;this.updateShape_()},decompose:function(a){const b=a.newBlock(\"text_create_join_container\");b.initSvg();let c=b.getInput(\"STACK\").connection;for(let d=0;d$.Msg$$module$build$src$core$msg.TEXT_INDEXOF_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\"0\":\"-1\"))},CHARAT_MUTATOR_MIXIN$$module$build$src$blocks$text={isAt_:!1,mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"at\",`${this.isAt_}`);return a},domToMutation:function(a){a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},updateAt_:function(a){this.removeInput(\"AT\",\n!0);this.removeInput(\"ORDINAL\",!0);a&&(this.appendValueInput(\"AT\").setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX));$.Msg$$module$build$src$core$msg.TEXT_CHARAT_TAIL&&(this.removeInput(\"TAIL\",!0),this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_CHARAT_TAIL));this.isAt_=a}},CHARAT_EXTENSION$$module$build$src$blocks$text=function(){this.getField(\"WHERE\").setValidator(function(a){a=\na===\"FROM_START\"||a===\"FROM_END\";const b=this.getSourceBlock();a!==b.isAt_&&b.updateAt_(a)});this.updateAt_(!0);this.setTooltip(()=>{var a=this.getFieldValue(\"WHERE\");let b=$.Msg$$module$build$src$core$msg.TEXT_CHARAT_TOOLTIP;(a===\"FROM_START\"||a===\"FROM_END\")&&(a=a===\"FROM_START\"?$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP:$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_END_TOOLTIP)&&(b+=\" \"+a.replace(\"%1\",this.workspace.options.oneBasedIndex?\"#1\":\"#0\"));return b})};\n$.register$$module$build$src$core$extensions(\"text_indexOf_tooltip\",INDEXOF_TOOLTIP_EXTENSION$$module$build$src$blocks$text);$.register$$module$build$src$core$extensions(\"text_quotes\",QUOTES_EXTENSION$$module$build$src$blocks$text);$.registerMixin$$module$build$src$core$extensions(\"quote_image_mixin\",QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);$.registerMutator$$module$build$src$core$extensions(\"text_join_mutator\",JOIN_MUTATOR_MIXIN$$module$build$src$blocks$text,JOIN_EXTENSION$$module$build$src$blocks$text);\n$.registerMutator$$module$build$src$core$extensions(\"text_charAt_mutator\",CHARAT_MUTATOR_MIXIN$$module$build$src$blocks$text,CHARAT_EXTENSION$$module$build$src$blocks$text);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$text);var module$build$src$blocks$text={blocks:blocks$$module$build$src$blocks$text};var blocks$$module$build$src$blocks$procedures={},PROCEDURE_DEF_COMMON$$module$build$src$blocks$procedures={setStatements_:function(a){this.hasStatements_!==a&&(a?(this.appendStatementInput(\"STACK\").appendField($.Msg$$module$build$src$core$msg.PROCEDURES_DEFNORETURN_DO),this.getInput(\"RETURN\")&&this.moveInputBefore(\"STACK\",\"RETURN\")):this.removeInput(\"STACK\",!0),this.hasStatements_=a)},updateParams_:function(){let a=\"\";this.arguments_.length&&(a=$.Msg$$module$build$src$core$msg.PROCEDURES_BEFORE_PARAMS+\n\" \"+this.arguments_.join(\", \"));$.disable$$module$build$src$core$events$utils();try{this.setFieldValue(a,\"PARAMS\")}finally{$.enable$$module$build$src$core$events$utils()}},mutationToDom:function(a){const b=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a&&b.setAttribute(\"name\",this.getFieldValue(\"NAME\"));for(let c=0;c\",\"GT\"],[\"\\u200f\\u2265\",\"GTE\"]]},{type:\"input_value\",name:\"B\"}],\ninputsInline:!0,output:\"Boolean\",style:\"logic_blocks\",helpUrl:\"%{BKY_LOGIC_COMPARE_HELPURL}\",extensions:[\"logic_compare\",\"logic_op_tooltip\"]},{type:\"logic_operation\",message0:\"%1 %2 %3\",args0:[{type:\"input_value\",name:\"A\",check:\"Boolean\"},{type:\"field_dropdown\",name:\"OP\",options:[[\"%{BKY_LOGIC_OPERATION_AND}\",\"AND\"],[\"%{BKY_LOGIC_OPERATION_OR}\",\"OR\"]]},{type:\"input_value\",name:\"B\",check:\"Boolean\"}],inputsInline:!0,output:\"Boolean\",style:\"logic_blocks\",helpUrl:\"%{BKY_LOGIC_OPERATION_HELPURL}\",extensions:[\"logic_op_tooltip\"]},\n{type:\"logic_negate\",message0:\"%{BKY_LOGIC_NEGATE_TITLE}\",args0:[{type:\"input_value\",name:\"BOOL\",check:\"Boolean\"}],output:\"Boolean\",style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_NEGATE_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_NEGATE_HELPURL}\"},{type:\"logic_null\",message0:\"%{BKY_LOGIC_NULL}\",output:null,style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_NULL_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_NULL_HELPURL}\"},{type:\"logic_ternary\",message0:\"%{BKY_LOGIC_TERNARY_CONDITION} %1\",args0:[{type:\"input_value\",name:\"IF\",check:\"Boolean\"}],\nmessage1:\"%{BKY_LOGIC_TERNARY_IF_TRUE} %1\",args1:[{type:\"input_value\",name:\"THEN\"}],message2:\"%{BKY_LOGIC_TERNARY_IF_FALSE} %1\",args2:[{type:\"input_value\",name:\"ELSE\"}],output:null,style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_TERNARY_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_TERNARY_HELPURL}\",extensions:[\"logic_ternary\"]},{type:\"controls_if_if\",message0:\"%{BKY_CONTROLS_IF_IF_TITLE_IF}\",nextStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_IF_TOOLTIP}\"},{type:\"controls_if_elseif\",\nmessage0:\"%{BKY_CONTROLS_IF_ELSEIF_TITLE_ELSEIF}\",previousStatement:null,nextStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_ELSEIF_TOOLTIP}\"},{type:\"controls_if_else\",message0:\"%{BKY_CONTROLS_IF_ELSE_TITLE_ELSE}\",previousStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_ELSE_TOOLTIP}\"}]),TOOLTIPS_BY_OP$$module$build$src$blocks$logic={EQ:\"%{BKY_LOGIC_COMPARE_TOOLTIP_EQ}\",NEQ:\"%{BKY_LOGIC_COMPARE_TOOLTIP_NEQ}\",LT:\"%{BKY_LOGIC_COMPARE_TOOLTIP_LT}\",\nLTE:\"%{BKY_LOGIC_COMPARE_TOOLTIP_LTE}\",GT:\"%{BKY_LOGIC_COMPARE_TOOLTIP_GT}\",GTE:\"%{BKY_LOGIC_COMPARE_TOOLTIP_GTE}\",AND:\"%{BKY_LOGIC_OPERATION_TOOLTIP_AND}\",OR:\"%{BKY_LOGIC_OPERATION_TOOLTIP_OR}\"};$.register$$module$build$src$core$extensions(\"logic_op_tooltip\",$.buildTooltipForDropdown$$module$build$src$core$extensions(\"OP\",TOOLTIPS_BY_OP$$module$build$src$blocks$logic));\nvar CONTROLS_IF_MUTATOR_MIXIN$$module$build$src$blocks$logic={elseifCount_:0,elseCount_:0,mutationToDom:function(){if(!this.elseifCount_&&!this.elseCount_)return null;const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");this.elseifCount_&&a.setAttribute(\"elseif\",String(this.elseifCount_));this.elseCount_&&a.setAttribute(\"else\",\"1\");return a},domToMutation:function(a){this.elseifCount_=parseInt(a.getAttribute(\"elseif\"),10)||0;this.elseCount_=parseInt(a.getAttribute(\"else\"),10)||0;this.rebuildShape_()},\nsaveExtraState:function(){if(!this.elseifCount_&&!this.elseCount_)return null;const a=Object.create(null);this.elseifCount_&&(a.elseIfCount=this.elseifCount_);this.elseCount_&&(a.hasElse=!0);return a},loadExtraState:function(a){this.elseifCount_=a.elseIfCount||0;this.elseCount_=a.hasElse?1:0;this.updateShape_()},decompose:function(a){const b=a.newBlock(\"controls_if_if\");b.initSvg();let c=b.nextConnection;for(let d=1;d<=this.elseifCount_;d++){const e=a.newBlock(\"controls_if_elseif\");e.initSvg();c.connect(e.previousConnection);\nc=e.nextConnection}this.elseCount_&&(a=a.newBlock(\"controls_if_else\"),a.initSvg(),c.connect(a.previousConnection));return b},compose:function(a){a=a.nextConnection.targetBlock();this.elseCount_=this.elseifCount_=0;const b=[null],c=[null];let d=null;for(;a;){if(!a.isInsertionMarker())switch(a.type){case \"controls_if_elseif\":this.elseifCount_++;b.push(a.valueConnection_);c.push(a.statementConnection_);break;case \"controls_if_else\":this.elseCount_++;d=a.statementConnection_;break;default:throw TypeError(\"Unknown block type: \"+\na.type);}a=a.getNextBlock()}this.updateShape_();this.reconnectChildBlocks_(b,c,d)},saveConnections:function(a){a=a.nextConnection.targetBlock();let b=1;for(;a;){if(!a.isInsertionMarker())switch(a.type){case \"controls_if_elseif\":var c=this.getInput(\"IF\"+b);const d=this.getInput(\"DO\"+b);a.valueConnection_=c&&c.connection.targetConnection;a.statementConnection_=d&&d.connection.targetConnection;b++;break;case \"controls_if_else\":c=this.getInput(\"ELSE\");a.statementConnection_=c&&c.connection.targetConnection;\nbreak;default:throw TypeError(\"Unknown block type: \"+a.type);}a=a.getNextBlock()}},rebuildShape_:function(){const a=[null],b=[null];let c=null;this.getInput(\"ELSE\")&&(c=this.getInput(\"ELSE\").connection.targetConnection);for(let d=1;this.getInput(\"IF\"+d);d++){const e=this.getInput(\"IF\"+d),f=this.getInput(\"DO\"+d);a.push(e.connection.targetConnection);b.push(f.connection.targetConnection)}this.updateShape_();this.reconnectChildBlocks_(a,b,c)},updateShape_:function(){this.getInput(\"ELSE\")&&this.removeInput(\"ELSE\");\nfor(var a=1;this.getInput(\"IF\"+a);a++)this.removeInput(\"IF\"+a),this.removeInput(\"DO\"+a);for(a=1;a<=this.elseifCount_;a++)this.appendValueInput(\"IF\"+a).setCheck(\"Boolean\").appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_ELSEIF),this.appendStatementInput(\"DO\"+a).appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_THEN);this.elseCount_&&this.appendStatementInput(\"ELSE\").appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_ELSE)},reconnectChildBlocks_:function(a,b,c){for(let d=\n1;d<=this.elseifCount_;d++){let e;(e=a[d])==null||e.reconnect(this,\"IF\"+d);let f;(f=b[d])==null||f.reconnect(this,\"DO\"+d)}c==null||c.reconnect(this,\"ELSE\")}};$.registerMutator$$module$build$src$core$extensions(\"controls_if_mutator\",CONTROLS_IF_MUTATOR_MIXIN$$module$build$src$blocks$logic,null,[\"controls_if_elseif\",\"controls_if_else\"]);\nvar CONTROLS_IF_TOOLTIP_EXTENSION$$module$build$src$blocks$logic=function(){this.setTooltip(function(){if(this.elseifCount_||this.elseCount_){if(!this.elseifCount_&&this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_2;if(this.elseifCount_&&!this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_3;if(this.elseifCount_&&this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_4}else return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_1;\nreturn\"\"}.bind(this))};$.register$$module$build$src$core$extensions(\"controls_if_tooltip\",CONTROLS_IF_TOOLTIP_EXTENSION$$module$build$src$blocks$logic);\nvar LOGIC_COMPARE_ONCHANGE_MIXIN$$module$build$src$blocks$logic={onchange:function(a){this.prevBlocks_||(this.prevBlocks_=[null,null]);var b=this.getInputTargetBlock(\"A\");const c=this.getInputTargetBlock(\"B\");b&&c&&!this.workspace.connectionChecker.doTypeChecks(b.outputConnection,c.outputConnection)&&($.setGroup$$module$build$src$core$events$utils(a.group),a=this.prevBlocks_[0],a!==b&&(b.unplug(),!a||a.isDisposed()||a.isShadow()||this.getInput(\"A\").connection.connect(a.outputConnection)),b=this.prevBlocks_[1],\nb!==c&&(c.unplug(),!b||b.isDisposed()||b.isShadow()||this.getInput(\"B\").connection.connect(b.outputConnection)),this.bumpNeighbours(),$.setGroup$$module$build$src$core$events$utils(!1));this.prevBlocks_[0]=this.getInputTargetBlock(\"A\");this.prevBlocks_[1]=this.getInputTargetBlock(\"B\")}},LOGIC_COMPARE_EXTENSION$$module$build$src$blocks$logic=function(){this.mixin(LOGIC_COMPARE_ONCHANGE_MIXIN$$module$build$src$blocks$logic)};$.register$$module$build$src$core$extensions(\"logic_compare\",LOGIC_COMPARE_EXTENSION$$module$build$src$blocks$logic);\nvar LOGIC_TERNARY_ONCHANGE_MIXIN$$module$build$src$blocks$logic={prevParentConnection_:null,onchange:function(a){const b=this.getInputTargetBlock(\"THEN\"),c=this.getInputTargetBlock(\"ELSE\"),d=this.outputConnection.targetConnection;if((b||c)&&d)for(let e=0;e<2;e++){const f=e===1?b:c;f&&!f.workspace.connectionChecker.doTypeChecks(f.outputConnection,d)&&($.setGroup$$module$build$src$core$events$utils(a.group),d===this.prevParentConnection_?(this.unplug(),d.getSourceBlock().bumpNeighbours()):(f.unplug(),\nf.bumpNeighbours()),$.setGroup$$module$build$src$core$events$utils(!1))}this.prevParentConnection_=d}};$.registerMixin$$module$build$src$core$extensions(\"logic_ternary\",LOGIC_TERNARY_ONCHANGE_MIXIN$$module$build$src$blocks$logic);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$logic);var module$build$src$blocks$logic={blocks:blocks$$module$build$src$blocks$logic};var blocks$$module$build$src$blocks$lists=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"lists_create_empty\",message0:\"%{BKY_LISTS_CREATE_EMPTY_TITLE}\",output:\"Array\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_CREATE_EMPTY_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_CREATE_EMPTY_HELPURL}\"},{type:\"lists_repeat\",message0:\"%{BKY_LISTS_REPEAT_TITLE}\",args0:[{type:\"input_value\",name:\"ITEM\"},{type:\"input_value\",name:\"NUM\",check:\"Number\"}],output:\"Array\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_REPEAT_TOOLTIP}\",\nhelpUrl:\"%{BKY_LISTS_REPEAT_HELPURL}\"},{type:\"lists_reverse\",message0:\"%{BKY_LISTS_REVERSE_MESSAGE0}\",args0:[{type:\"input_value\",name:\"LIST\",check:\"Array\"}],output:\"Array\",inputsInline:!0,style:\"list_blocks\",tooltip:\"%{BKY_LISTS_REVERSE_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_REVERSE_HELPURL}\"},{type:\"lists_isEmpty\",message0:\"%{BKY_LISTS_ISEMPTY_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Boolean\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_ISEMPTY_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_ISEMPTY_HELPURL}\"},\n{type:\"lists_length\",message0:\"%{BKY_LISTS_LENGTH_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Number\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_LENGTH_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_LENGTH_HELPURL}\"}]),LISTS_CREATE_WITH$$module$build$src$blocks$lists={init:function(){this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_CREATE_WITH_HELPURL);this.setStyle(\"list_blocks\");this.itemCount_=3;this.updateShape_();this.setOutput(!0,\"Array\");this.setMutator(new $.MutatorIcon$$module$build$src$core$icons$mutator_icon([\"lists_create_with_item\"],\nthis));this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_CREATE_WITH_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"items\",String(this.itemCount_));return a},domToMutation:function(a){a=a.getAttribute(\"items\");if(!a)throw new TypeError(\"element did not have items\");this.itemCount_=parseInt(a,10);this.updateShape_()},saveExtraState:function(){return{itemCount:this.itemCount_}},loadExtraState:function(a){this.itemCount_=a.itemCount;\nthis.updateShape_()},decompose:function(a){const b=a.newBlock(\"lists_create_with_container\");b.initSvg();let c=b.getInput(\"STACK\").connection;for(let d=0;d$.Msg$$module$build$src$core$msg.LISTS_INDEX_OF_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\"0\":\"-1\"))}};blocks$$module$build$src$blocks$lists.lists_indexOf=LISTS_INDEXOF$$module$build$src$blocks$lists;\nvar LISTS_GETINDEX$$module$build$src$blocks$lists={init:function(){var a=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_GET,\"GET\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_GET_REMOVE,\"GET_REMOVE\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_REMOVE,\"REMOVE\"]];this.WHERE_OPTIONS=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FIRST,\"FIRST\"],\n[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_LAST,\"LAST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_RANDOM,\"RANDOM\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_HELPURL);this.setStyle(\"list_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});a.setValidator(function(b){b=b===\"REMOVE\";this.getSourceBlock().updateStatement_(b)});this.appendValueInput(\"VALUE\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_INPUT_IN_LIST);\nthis.appendDummyInput().appendField(a,\"MODE\").appendField(\"\",\"SPACE\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this.WHERE_OPTIONS});a.setValidator(function(b){const c=this.getValue();b=b===\"FROM_START\"||b===\"FROM_END\";b!==(c===\"FROM_START\"||c===\"FROM_END\")&&this.getSourceBlock().updateAt_(b)});this.appendDummyInput().appendField(a,\"WHERE\");this.appendDummyInput(\"AT\");$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL);\nthis.setInputsInline(!0);this.setOutput(!0);this.updateAt_(!0);this.setTooltip(()=>{const b=this.getFieldValue(\"MODE\"),c=this.getFieldValue(\"WHERE\");let d=\"\";switch(b+\" \"+c){case \"GET FROM_START\":case \"GET FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM;break;case \"GET FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_FIRST;break;case \"GET LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_LAST;break;case \"GET RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM;\nbreak;case \"GET_REMOVE FROM_START\":case \"GET_REMOVE FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM;break;case \"GET_REMOVE FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST;break;case \"GET_REMOVE LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST;break;case \"GET_REMOVE RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM;break;case \"REMOVE FROM_START\":case \"REMOVE FROM_END\":d=\n$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM;break;case \"REMOVE FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST;break;case \"REMOVE LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST;break;case \"REMOVE RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM}if(c===\"FROM_START\"||c===\"FROM_END\")d+=\" \"+(c===\"FROM_START\"?$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP:$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_END_TOOLTIP).replace(\"%1\",\nthis.workspace.options.oneBasedIndex?\"#1\":\"#0\");return d})},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"statement\",String(!this.outputConnection));const b=this.getInput(\"AT\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at\",String(b));return a},domToMutation:function(a){const b=a.getAttribute(\"statement\")===\"true\";this.updateStatement_(b);a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},saveExtraState:function(){return this.outputConnection?\nnull:{isStatement:!0}},loadExtraState:function(a){a.isStatement?this.updateStatement_(!0):typeof a===\"string\"&&this.domToMutation($.textToDom$$module$build$src$core$utils$xml(a))},updateStatement_:function(a){a!==!this.outputConnection&&(this.unplug(!0,!0),a?(this.setOutput(!1),this.setPreviousStatement(!0),this.setNextStatement(!0)):(this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0)))},updateAt_:function(a){this.removeInput(\"AT\");this.removeInput(\"ORDINAL\",!0);a?(this.appendValueInput(\"AT\").setCheck(\"Number\"),\n$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\");$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL&&this.moveInputBefore(\"TAIL\",null)}};blocks$$module$build$src$blocks$lists.lists_getIndex=LISTS_GETINDEX$$module$build$src$blocks$lists;\nvar LISTS_SETINDEX$$module$build$src$blocks$lists={init:function(){var a=[[$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_SET,\"SET\"],[$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INSERT,\"INSERT\"]];this.WHERE_OPTIONS=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FIRST,\"FIRST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_LAST,\"LAST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_RANDOM,\n\"RANDOM\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"LIST\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INPUT_IN_LIST);a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});this.appendDummyInput().appendField(a,\"MODE\").appendField(\"\",\"SPACE\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this.WHERE_OPTIONS});a.setValidator(function(b){const c=\nthis.getValue();b=b===\"FROM_START\"||b===\"FROM_END\";b!==(c===\"FROM_START\"||c===\"FROM_END\")&&this.getSourceBlock().updateAt_(b)});this.appendDummyInput().appendField(a,\"WHERE\");this.appendDummyInput(\"AT\");this.appendValueInput(\"TO\").appendField($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INPUT_TO);this.setInputsInline(!0);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP);this.updateAt_(!0);this.setTooltip(()=>{const b=\nthis.getFieldValue(\"MODE\"),c=this.getFieldValue(\"WHERE\");let d=\"\";switch(b+\" \"+c){case \"SET FROM_START\":case \"SET FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_FROM;break;case \"SET FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_FIRST;break;case \"SET LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_LAST;break;case \"SET RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_RANDOM;break;case \"INSERT FROM_START\":case \"INSERT FROM_END\":d=\n$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FROM;break;case \"INSERT FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST;break;case \"INSERT LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_LAST;break;case \"INSERT RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM}if(c===\"FROM_START\"||c===\"FROM_END\")d+=\" \"+$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\n\"#1\":\"#0\");return d})},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\"),b=this.getInput(\"AT\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at\",String(b));return a},domToMutation:function(a){a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},saveExtraState:function(){return null},loadExtraState:function(){},updateAt_:function(a){this.removeInput(\"AT\");this.removeInput(\"ORDINAL\",!0);a?(this.appendValueInput(\"AT\").setCheck(\"Number\"),\n$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\");this.moveInputBefore(\"AT\",\"TO\");this.getInput(\"ORDINAL\")&&this.moveInputBefore(\"ORDINAL\",\"TO\")}};blocks$$module$build$src$blocks$lists.lists_setIndex=LISTS_SETINDEX$$module$build$src$blocks$lists;\nvar LISTS_GETSUBLIST$$module$build$src$blocks$lists={init:function(){this.WHERE_OPTIONS_1=[[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FIRST,\"FIRST\"]];this.WHERE_OPTIONS_2=[[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_FROM_END,\"FROM_END\"],\n[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_LAST,\"LAST\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"LIST\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_INPUT_IN_LIST);const a=b=>{const c=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this[\"WHERE_OPTIONS_\"+b]});c.setValidator(function(d){const e=this.getValue();d=d===\"FROM_START\"||d===\n\"FROM_END\";d!==(e===\"FROM_START\"||e===\"FROM_END\")&&this.getSourceBlock().updateAt_(b,d)});return c};this.appendDummyInput(\"WHERE1_INPUT\").appendField(a(1),\"WHERE1\");this.appendDummyInput(\"AT1\");this.appendDummyInput(\"WHERE2_INPUT\").appendField(a(2),\"WHERE2\");this.appendDummyInput(\"AT2\");$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL);this.setInputsInline(!0);this.setOutput(!0,\"Array\");this.updateAt_(1,\n!0);this.updateAt_(2,!0);this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");var b=this.getInput(\"AT1\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at1\",String(b));b=this.getInput(\"AT2\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at2\",String(b));return a},domToMutation:function(a){const b=a.getAttribute(\"at1\")===\n\"true\";a=a.getAttribute(\"at2\")===\"true\";this.updateAt_(1,b);this.updateAt_(2,a)},saveExtraState:function(){return null},loadExtraState:function(){},updateAt_:function(a,b){this.removeInput(\"AT\"+a);this.removeInput(\"ORDINAL\"+a,!0);b?(this.appendValueInput(\"AT\"+a).setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\"+a).appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\"+a);a===1&&(this.moveInputBefore(\"AT1\",\n\"WHERE2_INPUT\"),this.getInput(\"ORDINAL1\")&&this.moveInputBefore(\"ORDINAL1\",\"WHERE2_INPUT\"));$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL&&this.moveInputBefore(\"TAIL\",null)}};blocks$$module$build$src$blocks$lists.lists_getSublist=LISTS_GETSUBLIST$$module$build$src$blocks$lists;\nblocks$$module$build$src$blocks$lists.lists_sort={init:function(){this.jsonInit({message0:\"%{BKY_LISTS_SORT_TITLE}\",args0:[{type:\"field_dropdown\",name:\"TYPE\",options:[[\"%{BKY_LISTS_SORT_TYPE_NUMERIC}\",\"NUMERIC\"],[\"%{BKY_LISTS_SORT_TYPE_TEXT}\",\"TEXT\"],[\"%{BKY_LISTS_SORT_TYPE_IGNORECASE}\",\"IGNORE_CASE\"]]},{type:\"field_dropdown\",name:\"DIRECTION\",options:[[\"%{BKY_LISTS_SORT_ORDER_ASCENDING}\",\"1\"],[\"%{BKY_LISTS_SORT_ORDER_DESCENDING}\",\"-1\"]]},{type:\"input_value\",name:\"LIST\",check:\"Array\"}],output:\"Array\",\nstyle:\"list_blocks\",tooltip:\"%{BKY_LISTS_SORT_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_SORT_HELPURL}\"})}};\nblocks$$module$build$src$blocks$lists.lists_split={init:function(){const a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:[[$.Msg$$module$build$src$core$msg.LISTS_SPLIT_LIST_FROM_TEXT,\"SPLIT\"],[$.Msg$$module$build$src$core$msg.LISTS_SPLIT_TEXT_FROM_LIST,\"JOIN\"]]});if(!a)throw Error(\"field_dropdown not found\");a.setValidator(b=>{this.updateType_(b)});this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_SPLIT_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"INPUT\").setCheck(\"String\").appendField(a,\n\"MODE\");this.appendValueInput(\"DELIM\").setCheck(\"String\").appendField($.Msg$$module$build$src$core$msg.LISTS_SPLIT_WITH_DELIMITER);this.setInputsInline(!0);this.setOutput(!0,\"Array\");this.setTooltip(()=>{const b=this.getFieldValue(\"MODE\");if(b===\"SPLIT\")return $.Msg$$module$build$src$core$msg.LISTS_SPLIT_TOOLTIP_SPLIT;if(b===\"JOIN\")return $.Msg$$module$build$src$core$msg.LISTS_SPLIT_TOOLTIP_JOIN;throw Error(\"Unknown mode: \"+b);})},updateType_:function(a){if(this.getFieldValue(\"MODE\")!==a){const b=\nthis.getInput(\"INPUT\").connection;b.setShadowDom(null);const c=b.targetBlock();c&&(b.disconnect(),c.isShadow()?c.dispose(!1):this.bumpNeighbours())}a===\"SPLIT\"?(this.outputConnection.setCheck(\"Array\"),this.getInput(\"INPUT\").setCheck(\"String\")):(this.outputConnection.setCheck(\"String\"),this.getInput(\"INPUT\").setCheck(\"Array\"))},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"mode\",this.getFieldValue(\"MODE\"));return a},domToMutation:function(a){this.updateType_(a.getAttribute(\"mode\"))},\nsaveExtraState:function(){return{mode:this.getFieldValue(\"MODE\")}},loadExtraState:function(a){this.updateType_(a.mode)}};$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$lists);var module$build$src$blocks$lists={blocks:blocks$$module$build$src$blocks$lists};var blocks$$module$build$src$blocks$blocks=Object.assign({},blocks$$module$build$src$blocks$lists,blocks$$module$build$src$blocks$logic,blocks$$module$build$src$blocks$loops,blocks$$module$build$src$blocks$math,blocks$$module$build$src$blocks$procedures,blocks$$module$build$src$blocks$text,blocks$$module$build$src$blocks$variables,blocks$$module$build$src$blocks$variables_dynamic),module$build$src$blocks$blocks={blocks:blocks$$module$build$src$blocks$blocks,lists:module$build$src$blocks$lists,logic:module$build$src$blocks$logic,\nloops:module$build$src$blocks$loops,math:module$build$src$blocks$math,procedures:module$build$src$blocks$procedures,texts:module$build$src$blocks$text,variables:module$build$src$blocks$variables,variablesDynamic:module$build$src$blocks$variables_dynamic};\nmodule$build$src$blocks$blocks.__namespace__=$;\nreturn module$build$src$blocks$blocks;\n}));\n\n\n//# sourceMappingURL=blocks_compressed.js.map\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/blocks_compressed.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/index.js": +/*!***************************************!*\ + !*** ./node_modules/blockly/index.js ***! + \***************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! blockly/core */ \"./node_modules/blockly/blockly_compressed.js\"), __webpack_require__(/*! blockly/msg/en */ \"./node_modules/blockly/msg/en.js\"), __webpack_require__(/*! blockly/blocks */ \"./node_modules/blockly/blocks_compressed.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function(Blockly, en, blocks) {\n/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Main entrypoint for blockly package. Via its UMD wrapper,\n * this module loads blockly/core, blockly/blocks and blockly/msg/en\n * and then calls setLocale(en).\n *\n * This entrypoint previously also loaded one or more generators\n * (JavaScript in browser, all five in node.js environments) but it no\n * longer makes sense to do so because of changes to generators\n * exports (they no longer have the side effect of defining\n * Blockly.JavaScript, etc., when loaded as modules).\n */\n\n/* eslint-disable */\n'use strict';\n\n// Include the EN Locale by default.\nBlockly.setLocale(en);\n\nreturn Blockly;\n}));\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/index.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/index.mjs": +/*!****************************************!*\ + !*** ./node_modules/blockly/index.mjs ***! + \****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Block: () => (/* binding */ Block),\n/* harmony export */ BlockFlyoutInflater: () => (/* binding */ BlockFlyoutInflater),\n/* harmony export */ BlockNavigationPolicy: () => (/* binding */ BlockNavigationPolicy),\n/* harmony export */ BlockSvg: () => (/* binding */ BlockSvg),\n/* harmony export */ Blocks: () => (/* binding */ Blocks),\n/* harmony export */ ButtonFlyoutInflater: () => (/* binding */ ButtonFlyoutInflater),\n/* harmony export */ COLLAPSED_FIELD_NAME: () => (/* binding */ COLLAPSED_FIELD_NAME),\n/* harmony export */ COLLAPSED_INPUT_NAME: () => (/* binding */ COLLAPSED_INPUT_NAME),\n/* harmony export */ COLLAPSE_CHARS: () => (/* binding */ COLLAPSE_CHARS),\n/* harmony export */ CodeGenerator: () => (/* binding */ CodeGenerator),\n/* harmony export */ CollapsibleToolboxCategory: () => (/* binding */ CollapsibleToolboxCategory),\n/* harmony export */ ComponentManager: () => (/* binding */ ComponentManager),\n/* harmony export */ Connection: () => (/* binding */ Connection),\n/* harmony export */ ConnectionChecker: () => (/* binding */ ConnectionChecker),\n/* harmony export */ ConnectionDB: () => (/* binding */ ConnectionDB),\n/* harmony export */ ConnectionNavigationPolicy: () => (/* binding */ ConnectionNavigationPolicy),\n/* harmony export */ ConnectionType: () => (/* binding */ ConnectionType),\n/* harmony export */ ContextMenu: () => (/* binding */ ContextMenu),\n/* harmony export */ ContextMenuItems: () => (/* binding */ ContextMenuItems),\n/* harmony export */ ContextMenuRegistry: () => (/* binding */ ContextMenuRegistry),\n/* harmony export */ Css: () => (/* binding */ Css),\n/* harmony export */ DELETE_VARIABLE_ID: () => (/* binding */ DELETE_VARIABLE_ID),\n/* harmony export */ DeleteArea: () => (/* binding */ DeleteArea),\n/* harmony export */ DragTarget: () => (/* binding */ DragTarget),\n/* harmony export */ DropDownDiv: () => (/* binding */ DropDownDiv),\n/* harmony export */ Events: () => (/* binding */ Events),\n/* harmony export */ Extensions: () => (/* binding */ Extensions),\n/* harmony export */ Field: () => (/* binding */ Field),\n/* harmony export */ FieldCheckbox: () => (/* binding */ FieldCheckbox),\n/* harmony export */ FieldDropdown: () => (/* binding */ FieldDropdown),\n/* harmony export */ FieldImage: () => (/* binding */ FieldImage),\n/* harmony export */ FieldLabel: () => (/* binding */ FieldLabel),\n/* harmony export */ FieldLabelSerializable: () => (/* binding */ FieldLabelSerializable),\n/* harmony export */ FieldNavigationPolicy: () => (/* binding */ FieldNavigationPolicy),\n/* harmony export */ FieldNumber: () => (/* binding */ FieldNumber),\n/* harmony export */ FieldTextInput: () => (/* binding */ FieldTextInput),\n/* harmony export */ FieldVariable: () => (/* binding */ FieldVariable),\n/* harmony export */ Flyout: () => (/* binding */ Flyout),\n/* harmony export */ FlyoutButton: () => (/* binding */ FlyoutButton),\n/* harmony export */ FlyoutButtonNavigationPolicy: () => (/* binding */ FlyoutButtonNavigationPolicy),\n/* harmony export */ FlyoutItem: () => (/* binding */ FlyoutItem),\n/* harmony export */ FlyoutMetricsManager: () => (/* binding */ FlyoutMetricsManager),\n/* harmony export */ FlyoutNavigationPolicy: () => (/* binding */ FlyoutNavigationPolicy),\n/* harmony export */ FlyoutNavigator: () => (/* binding */ FlyoutNavigator),\n/* harmony export */ FlyoutSeparator: () => (/* binding */ FlyoutSeparator),\n/* harmony export */ FlyoutSeparatorNavigationPolicy: () => (/* binding */ FlyoutSeparatorNavigationPolicy),\n/* harmony export */ FocusManager: () => (/* binding */ FocusManager),\n/* harmony export */ FocusableTreeTraverser: () => (/* binding */ FocusableTreeTraverser),\n/* harmony export */ Generator: () => (/* binding */ Generator),\n/* harmony export */ Gesture: () => (/* binding */ Gesture),\n/* harmony export */ Grid: () => (/* binding */ Grid),\n/* harmony export */ HorizontalFlyout: () => (/* binding */ HorizontalFlyout),\n/* harmony export */ INPUT_VALUE: () => (/* binding */ INPUT_VALUE),\n/* harmony export */ Input: () => (/* binding */ Input),\n/* harmony export */ InsertionMarkerPreviewer: () => (/* binding */ InsertionMarkerPreviewer),\n/* harmony export */ KeyboardNavigationController: () => (/* binding */ KeyboardNavigationController),\n/* harmony export */ LabelFlyoutInflater: () => (/* binding */ LabelFlyoutInflater),\n/* harmony export */ LineCursor: () => (/* binding */ LineCursor),\n/* harmony export */ Marker: () => (/* binding */ Marker),\n/* harmony export */ MarkerManager: () => (/* binding */ MarkerManager),\n/* harmony export */ Menu: () => (/* binding */ Menu),\n/* harmony export */ MenuItem: () => (/* binding */ MenuItem),\n/* harmony export */ MetricsManager: () => (/* binding */ MetricsManager),\n/* harmony export */ Msg: () => (/* binding */ Msg),\n/* harmony export */ NEXT_STATEMENT: () => (/* binding */ NEXT_STATEMENT),\n/* harmony export */ Names: () => (/* binding */ Names),\n/* harmony export */ Navigator: () => (/* binding */ Navigator),\n/* harmony export */ OPPOSITE_TYPE: () => (/* binding */ OPPOSITE_TYPE),\n/* harmony export */ OUTPUT_VALUE: () => (/* binding */ OUTPUT_VALUE),\n/* harmony export */ Options: () => (/* binding */ Options),\n/* harmony export */ PREVIOUS_STATEMENT: () => (/* binding */ PREVIOUS_STATEMENT),\n/* harmony export */ PROCEDURE_CATEGORY_NAME: () => (/* binding */ PROCEDURE_CATEGORY_NAME),\n/* harmony export */ Procedures: () => (/* binding */ Procedures),\n/* harmony export */ RENAME_VARIABLE_ID: () => (/* binding */ RENAME_VARIABLE_ID),\n/* harmony export */ RenderedConnection: () => (/* binding */ RenderedConnection),\n/* harmony export */ Scrollbar: () => (/* binding */ Scrollbar),\n/* harmony export */ ScrollbarPair: () => (/* binding */ ScrollbarPair),\n/* harmony export */ SeparatorFlyoutInflater: () => (/* binding */ SeparatorFlyoutInflater),\n/* harmony export */ ShortcutItems: () => (/* binding */ ShortcutItems),\n/* harmony export */ ShortcutRegistry: () => (/* binding */ ShortcutRegistry),\n/* harmony export */ TOOLBOX_AT_BOTTOM: () => (/* binding */ TOOLBOX_AT_BOTTOM),\n/* harmony export */ TOOLBOX_AT_LEFT: () => (/* binding */ TOOLBOX_AT_LEFT),\n/* harmony export */ TOOLBOX_AT_RIGHT: () => (/* binding */ TOOLBOX_AT_RIGHT),\n/* harmony export */ TOOLBOX_AT_TOP: () => (/* binding */ TOOLBOX_AT_TOP),\n/* harmony export */ Theme: () => (/* binding */ Theme),\n/* harmony export */ ThemeManager: () => (/* binding */ ThemeManager),\n/* harmony export */ Themes: () => (/* binding */ Themes),\n/* harmony export */ Toast: () => (/* binding */ Toast),\n/* harmony export */ Toolbox: () => (/* binding */ Toolbox),\n/* harmony export */ ToolboxCategory: () => (/* binding */ ToolboxCategory),\n/* harmony export */ ToolboxItem: () => (/* binding */ ToolboxItem),\n/* harmony export */ ToolboxSeparator: () => (/* binding */ ToolboxSeparator),\n/* harmony export */ Tooltip: () => (/* binding */ Tooltip),\n/* harmony export */ Touch: () => (/* binding */ Touch),\n/* harmony export */ Trashcan: () => (/* binding */ Trashcan),\n/* harmony export */ UnattachedFieldError: () => (/* binding */ UnattachedFieldError),\n/* harmony export */ VARIABLE_CATEGORY_NAME: () => (/* binding */ VARIABLE_CATEGORY_NAME),\n/* harmony export */ VARIABLE_DYNAMIC_CATEGORY_NAME: () => (/* binding */ VARIABLE_DYNAMIC_CATEGORY_NAME),\n/* harmony export */ VERSION: () => (/* binding */ VERSION),\n/* harmony export */ VariableMap: () => (/* binding */ VariableMap),\n/* harmony export */ VariableModel: () => (/* binding */ VariableModel),\n/* harmony export */ Variables: () => (/* binding */ Variables),\n/* harmony export */ VariablesDynamic: () => (/* binding */ VariablesDynamic),\n/* harmony export */ VerticalFlyout: () => (/* binding */ VerticalFlyout),\n/* harmony export */ WidgetDiv: () => (/* binding */ WidgetDiv),\n/* harmony export */ Workspace: () => (/* binding */ Workspace),\n/* harmony export */ WorkspaceAudio: () => (/* binding */ WorkspaceAudio),\n/* harmony export */ WorkspaceDragger: () => (/* binding */ WorkspaceDragger),\n/* harmony export */ WorkspaceNavigationPolicy: () => (/* binding */ WorkspaceNavigationPolicy),\n/* harmony export */ WorkspaceSvg: () => (/* binding */ WorkspaceSvg),\n/* harmony export */ Xml: () => (/* binding */ Xml),\n/* harmony export */ ZoomControls: () => (/* binding */ ZoomControls),\n/* harmony export */ blockAnimations: () => (/* binding */ blockAnimations),\n/* harmony export */ blockRendering: () => (/* binding */ blockRendering),\n/* harmony export */ browserEvents: () => (/* binding */ browserEvents),\n/* harmony export */ bubbles: () => (/* binding */ bubbles),\n/* harmony export */ bumpObjects: () => (/* binding */ bumpObjects),\n/* harmony export */ clipboard: () => (/* binding */ clipboard),\n/* harmony export */ comments: () => (/* binding */ comments),\n/* harmony export */ common: () => (/* binding */ common),\n/* harmony export */ config: () => (/* binding */ config),\n/* harmony export */ constants: () => (/* binding */ constants),\n/* harmony export */ defineBlocksWithJsonArray: () => (/* binding */ defineBlocksWithJsonArray),\n/* harmony export */ dialog: () => (/* binding */ dialog),\n/* harmony export */ dragging: () => (/* binding */ dragging),\n/* harmony export */ fieldRegistry: () => (/* binding */ fieldRegistry),\n/* harmony export */ geras: () => (/* binding */ geras),\n/* harmony export */ getFocusManager: () => (/* binding */ getFocusManager),\n/* harmony export */ getMainWorkspace: () => (/* binding */ getMainWorkspace),\n/* harmony export */ getSelected: () => (/* binding */ getSelected),\n/* harmony export */ hasBubble: () => (/* binding */ hasBubble),\n/* harmony export */ hideChaff: () => (/* binding */ hideChaff),\n/* harmony export */ icons: () => (/* binding */ icons),\n/* harmony export */ inject: () => (/* binding */ inject),\n/* harmony export */ inputs: () => (/* binding */ inputs),\n/* harmony export */ isCopyable: () => (/* binding */ isCopyable),\n/* harmony export */ isDeletable: () => (/* binding */ isDeletable),\n/* harmony export */ isDraggable: () => (/* binding */ isDraggable),\n/* harmony export */ isIcon: () => (/* binding */ isIcon),\n/* harmony export */ isObservable: () => (/* binding */ isObservable),\n/* harmony export */ isPaster: () => (/* binding */ isPaster),\n/* harmony export */ isRenderedElement: () => (/* binding */ isRenderedElement),\n/* harmony export */ isSelectable: () => (/* binding */ isSelectable),\n/* harmony export */ isSerializable: () => (/* binding */ isSerializable),\n/* harmony export */ isVariableBackedParameterModel: () => (/* binding */ isVariableBackedParameterModel),\n/* harmony export */ keyboardNavigationController: () => (/* binding */ keyboardNavigationController),\n/* harmony export */ layers: () => (/* binding */ layers),\n/* harmony export */ navigateBlock: () => (/* binding */ navigateBlock),\n/* harmony export */ navigateStacks: () => (/* binding */ navigateStacks),\n/* harmony export */ procedures: () => (/* binding */ procedures),\n/* harmony export */ registry: () => (/* binding */ registry),\n/* harmony export */ renderManagement: () => (/* binding */ renderManagement),\n/* harmony export */ serialization: () => (/* binding */ serialization),\n/* harmony export */ setLocale: () => (/* binding */ setLocale),\n/* harmony export */ setParentContainer: () => (/* binding */ setParentContainer),\n/* harmony export */ svgResize: () => (/* binding */ svgResize),\n/* harmony export */ thrasos: () => (/* binding */ thrasos),\n/* harmony export */ uiPosition: () => (/* binding */ uiPosition),\n/* harmony export */ utils: () => (/* binding */ utils),\n/* harmony export */ zelos: () => (/* binding */ zelos)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"./node_modules/blockly/index.js\");\n\nconst {\n Block,\n BlockFlyoutInflater,\n BlockNavigationPolicy,\n BlockSvg,\n Blocks,\n ButtonFlyoutInflater,\n COLLAPSED_FIELD_NAME,\n COLLAPSED_INPUT_NAME,\n COLLAPSE_CHARS,\n CodeGenerator,\n CollapsibleToolboxCategory,\n ComponentManager,\n Connection,\n ConnectionChecker,\n ConnectionDB,\n ConnectionNavigationPolicy,\n ConnectionType,\n ContextMenu,\n ContextMenuItems,\n ContextMenuRegistry,\n Css,\n DELETE_VARIABLE_ID,\n DeleteArea,\n DragTarget,\n DropDownDiv,\n Events,\n Extensions,\n Field,\n FieldCheckbox,\n FieldDropdown,\n FieldImage,\n FieldLabel,\n FieldLabelSerializable,\n FieldNavigationPolicy,\n FieldNumber,\n FieldTextInput,\n FieldVariable,\n Flyout,\n FlyoutButton,\n FlyoutButtonNavigationPolicy,\n FlyoutItem,\n FlyoutMetricsManager,\n FlyoutNavigationPolicy,\n FlyoutNavigator,\n FlyoutSeparator,\n FlyoutSeparatorNavigationPolicy,\n FocusManager,\n FocusableTreeTraverser,\n Generator,\n Gesture,\n Grid,\n HorizontalFlyout,\n INPUT_VALUE,\n Input,\n InsertionMarkerPreviewer,\n KeyboardNavigationController,\n LabelFlyoutInflater,\n LineCursor,\n Marker,\n MarkerManager,\n Menu,\n MenuItem,\n MetricsManager,\n Msg,\n NEXT_STATEMENT,\n Names,\n Navigator,\n OPPOSITE_TYPE,\n OUTPUT_VALUE,\n Options,\n PREVIOUS_STATEMENT,\n PROCEDURE_CATEGORY_NAME,\n Procedures,\n RENAME_VARIABLE_ID,\n RenderedConnection,\n Scrollbar,\n ScrollbarPair,\n SeparatorFlyoutInflater,\n ShortcutItems,\n ShortcutRegistry,\n TOOLBOX_AT_BOTTOM,\n TOOLBOX_AT_LEFT,\n TOOLBOX_AT_RIGHT,\n TOOLBOX_AT_TOP,\n Theme,\n ThemeManager,\n Themes,\n Toast,\n Toolbox,\n ToolboxCategory,\n ToolboxItem,\n ToolboxSeparator,\n Tooltip,\n Touch,\n Trashcan,\n UnattachedFieldError,\n VARIABLE_CATEGORY_NAME,\n VARIABLE_DYNAMIC_CATEGORY_NAME,\n VERSION,\n VariableMap,\n VariableModel,\n Variables,\n VariablesDynamic,\n VerticalFlyout,\n WidgetDiv,\n Workspace,\n WorkspaceAudio,\n WorkspaceDragger,\n WorkspaceNavigationPolicy,\n WorkspaceSvg,\n Xml,\n ZoomControls,\n blockAnimations,\n blockRendering,\n browserEvents,\n bubbles,\n bumpObjects,\n clipboard,\n comments,\n common,\n config,\n constants,\n defineBlocksWithJsonArray,\n dialog,\n dragging,\n fieldRegistry,\n geras,\n getFocusManager,\n getMainWorkspace,\n getSelected,\n hasBubble,\n hideChaff,\n icons,\n inject,\n inputs,\n isCopyable,\n isDeletable,\n isDraggable,\n isIcon,\n isObservable,\n isPaster,\n isRenderedElement,\n isSelectable,\n isSerializable,\n isVariableBackedParameterModel,\n keyboardNavigationController,\n layers,\n navigateBlock,\n navigateStacks,\n procedures,\n registry,\n renderManagement,\n serialization,\n setLocale,\n setParentContainer,\n svgResize,\n thrasos,\n uiPosition,\n utils,\n zelos,\n} = _index_js__WEBPACK_IMPORTED_MODULE_0__;\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/index.mjs?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/msg/en.js": +/*!****************************************!*\ + !*** ./node_modules/blockly/msg/en.js ***! + \****************************************/ +/***/ (function(module, exports) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{ var key, messages; }\n}(this, function() {\n// This file was automatically generated. Do not modify.\n\n'use strict';\n\nvar Blockly = Blockly || { Msg: Object.create(null) };\n\nBlockly.Msg[\"ADD_COMMENT\"] = \"Add Comment\";\nBlockly.Msg[\"ALT_KEY\"] = \"Alt\";\nBlockly.Msg[\"CANNOT_DELETE_VARIABLE_PROCEDURE\"] = \"Can't delete the variable '%1' because it's part of the definition of the function '%2'\";\nBlockly.Msg[\"CHANGE_VALUE_TITLE\"] = \"Change value:\";\nBlockly.Msg[\"CHROME_OS\"] = \"ChromeOS\";\nBlockly.Msg[\"CLEAN_UP\"] = \"Clean up Blocks\";\nBlockly.Msg[\"CLOSE\"] = \"Close\";\nBlockly.Msg[\"COLLAPSED_WARNINGS_WARNING\"] = \"Collapsed blocks contain warnings.\";\nBlockly.Msg[\"COLLAPSE_ALL\"] = \"Collapse Blocks\";\nBlockly.Msg[\"COLLAPSE_BLOCK\"] = \"Collapse Block\";\nBlockly.Msg[\"COLOUR_BLEND_COLOUR1\"] = \"colour 1\";\nBlockly.Msg[\"COLOUR_BLEND_COLOUR2\"] = \"colour 2\";\nBlockly.Msg[\"COLOUR_BLEND_HELPURL\"] = \"https://meyerweb.com/eric/tools/color-blend/#:::rgbp\";\nBlockly.Msg[\"COLOUR_BLEND_RATIO\"] = \"ratio\";\nBlockly.Msg[\"COLOUR_BLEND_TITLE\"] = \"blend\";\nBlockly.Msg[\"COLOUR_BLEND_TOOLTIP\"] = \"Blends two colours together with a given ratio (0.0 - 1.0).\";\nBlockly.Msg[\"COLOUR_PICKER_HELPURL\"] = \"https://en.wikipedia.org/wiki/Color\";\nBlockly.Msg[\"COLOUR_PICKER_TOOLTIP\"] = \"Choose a colour from the palette.\";\nBlockly.Msg[\"COLOUR_RANDOM_HELPURL\"] = \"http://randomcolour.com\";\nBlockly.Msg[\"COLOUR_RANDOM_TITLE\"] = \"random colour\";\nBlockly.Msg[\"COLOUR_RANDOM_TOOLTIP\"] = \"Choose a colour at random.\";\nBlockly.Msg[\"COLOUR_RGB_BLUE\"] = \"blue\";\nBlockly.Msg[\"COLOUR_RGB_GREEN\"] = \"green\";\nBlockly.Msg[\"COLOUR_RGB_HELPURL\"] = \"https://www.december.com/html/spec/colorpercompact.html\";\nBlockly.Msg[\"COLOUR_RGB_RED\"] = \"red\";\nBlockly.Msg[\"COLOUR_RGB_TITLE\"] = \"colour with\";\nBlockly.Msg[\"COLOUR_RGB_TOOLTIP\"] = \"Create a colour with the specified amount of red, green, and blue. All values must be between 0 and 100.\";\nBlockly.Msg[\"COMMAND_KEY\"] = \"⌘ Command\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#loop-termination-blocks\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK\"] = \"break out of loop\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE\"] = \"continue with next iteration of loop\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK\"] = \"Break out of the containing loop.\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE\"] = \"Skip the rest of this loop, and continue with the next iteration.\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_WARNING\"] = \"Warning: This block may only be used within a loop.\";\nBlockly.Msg[\"CONTROLS_FOREACH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#for-each\";\nBlockly.Msg[\"CONTROLS_FOREACH_TITLE\"] = \"for each item %1 in list %2\";\nBlockly.Msg[\"CONTROLS_FOREACH_TOOLTIP\"] = \"For each item in a list, set the variable '%1' to the item, and then do some statements.\";\nBlockly.Msg[\"CONTROLS_FOR_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#count-with\";\nBlockly.Msg[\"CONTROLS_FOR_TITLE\"] = \"count with %1 from %2 to %3 by %4\";\nBlockly.Msg[\"CONTROLS_FOR_TOOLTIP\"] = \"Have the variable '%1' take on the values from the start number to the end number, counting by the specified interval, and do the specified blocks.\";\nBlockly.Msg[\"CONTROLS_IF_ELSEIF_TOOLTIP\"] = \"Add a condition to the if block.\";\nBlockly.Msg[\"CONTROLS_IF_ELSE_TOOLTIP\"] = \"Add a final, catch-all condition to the if block.\";\nBlockly.Msg[\"CONTROLS_IF_HELPURL\"] = \"https://github.com/google/blockly/wiki/IfElse\";\nBlockly.Msg[\"CONTROLS_IF_IF_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this if block.\";\nBlockly.Msg[\"CONTROLS_IF_MSG_ELSE\"] = \"else\";\nBlockly.Msg[\"CONTROLS_IF_MSG_ELSEIF\"] = \"else if\";\nBlockly.Msg[\"CONTROLS_IF_MSG_IF\"] = \"if\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_1\"] = \"If a value is true, then do some statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_2\"] = \"If a value is true, then do the first block of statements. Otherwise, do the second block of statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_3\"] = \"If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_4\"] = \"If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements. If none of the values are true, do the last block of statements.\";\nBlockly.Msg[\"CONTROLS_REPEAT_HELPURL\"] = \"https://en.wikipedia.org/wiki/For_loop\";\nBlockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"] = \"do\";\nBlockly.Msg[\"CONTROLS_REPEAT_TITLE\"] = \"repeat %1 times\";\nBlockly.Msg[\"CONTROLS_REPEAT_TOOLTIP\"] = \"Do some statements several times.\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#repeat\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_OPERATOR_UNTIL\"] = \"repeat until\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_OPERATOR_WHILE\"] = \"repeat while\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL\"] = \"While a value is false, then do some statements.\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_TOOLTIP_WHILE\"] = \"While a value is true, then do some statements.\";\nBlockly.Msg[\"CONTROL_KEY\"] = \"Ctrl\";\nBlockly.Msg[\"COPY_SHORTCUT\"] = \"Copy\";\nBlockly.Msg[\"CUT_SHORTCUT\"] = \"Cut\";\nBlockly.Msg[\"DELETE_ALL_BLOCKS\"] = \"Delete all %1 blocks?\";\nBlockly.Msg[\"DELETE_BLOCK\"] = \"Delete Block\";\nBlockly.Msg[\"DELETE_VARIABLE\"] = \"Delete the '%1' variable\";\nBlockly.Msg[\"DELETE_VARIABLE_CONFIRMATION\"] = \"Delete %1 uses of the '%2' variable?\";\nBlockly.Msg[\"DELETE_X_BLOCKS\"] = \"Delete %1 Blocks\";\nBlockly.Msg[\"DIALOG_CANCEL\"] = \"Cancel\";\nBlockly.Msg[\"DIALOG_OK\"] = \"OK\";\nBlockly.Msg[\"DISABLE_BLOCK\"] = \"Disable Block\";\nBlockly.Msg[\"DUPLICATE_BLOCK\"] = \"Duplicate\";\nBlockly.Msg[\"DUPLICATE_COMMENT\"] = \"Duplicate Comment\";\nBlockly.Msg[\"EDIT_BLOCK_CONTENTS\"] = \"Edit Block contents\";\nBlockly.Msg[\"ENABLE_BLOCK\"] = \"Enable Block\";\nBlockly.Msg[\"EXPAND_ALL\"] = \"Expand Blocks\";\nBlockly.Msg[\"EXPAND_BLOCK\"] = \"Expand Block\";\nBlockly.Msg[\"EXTERNAL_INPUTS\"] = \"External Inputs\";\nBlockly.Msg[\"HELP\"] = \"Help\";\nBlockly.Msg[\"HELP_PROMPT\"] = \"Press %1 for help on keyboard controls\";\nBlockly.Msg[\"INLINE_INPUTS\"] = \"Inline Inputs\";\nBlockly.Msg[\"KEYBOARD_NAV_CONSTRAINED_MOVE_HINT\"] = \"Use the arrow keys to move, then %1 to accept the position\";\nBlockly.Msg[\"KEYBOARD_NAV_COPIED_HINT\"] = \"Copied. Press %1 to paste.\";\nBlockly.Msg[\"KEYBOARD_NAV_CUT_HINT\"] = \"Cut. Press %1 to paste.\";\nBlockly.Msg[\"KEYBOARD_NAV_UNCONSTRAINED_MOVE_HINT\"] = \"Hold %1 and use arrow keys to move freely, then %2 to accept the position\";\nBlockly.Msg[\"LINUX\"] = \"Linux\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-empty-list\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_TITLE\"] = \"create empty list\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_TOOLTIP\"] = \"Returns a list, of length 0, containing no data records\";\nBlockly.Msg[\"LISTS_CREATE_WITH_CONTAINER_TITLE_ADD\"] = \"list\";\nBlockly.Msg[\"LISTS_CREATE_WITH_CONTAINER_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this list block.\";\nBlockly.Msg[\"LISTS_CREATE_WITH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-list-with\";\nBlockly.Msg[\"LISTS_CREATE_WITH_INPUT_WITH\"] = \"create list with\";\nBlockly.Msg[\"LISTS_CREATE_WITH_ITEM_TOOLTIP\"] = \"Add an item to the list.\";\nBlockly.Msg[\"LISTS_CREATE_WITH_TOOLTIP\"] = \"Create a list with any number of items.\";\nBlockly.Msg[\"LISTS_GET_INDEX_FIRST\"] = \"first\";\nBlockly.Msg[\"LISTS_GET_INDEX_FROM_END\"] = \"# from end\";\nBlockly.Msg[\"LISTS_GET_INDEX_FROM_START\"] = \"#\";\nBlockly.Msg[\"LISTS_GET_INDEX_GET\"] = \"get\";\nBlockly.Msg[\"LISTS_GET_INDEX_GET_REMOVE\"] = \"get and remove\";\nBlockly.Msg[\"LISTS_GET_INDEX_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list\";\nBlockly.Msg[\"LISTS_GET_INDEX_LAST\"] = \"last\";\nBlockly.Msg[\"LISTS_GET_INDEX_RANDOM\"] = \"random\";\nBlockly.Msg[\"LISTS_GET_INDEX_REMOVE\"] = \"remove\";\nBlockly.Msg[\"LISTS_GET_INDEX_TAIL\"] = \"\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_FIRST\"] = \"Returns the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_FROM\"] = \"Returns the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_LAST\"] = \"Returns the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_RANDOM\"] = \"Returns a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST\"] = \"Removes and returns the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM\"] = \"Removes and returns the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST\"] = \"Removes and returns the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM\"] = \"Removes and returns a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST\"] = \"Removes the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM\"] = \"Removes the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST\"] = \"Removes the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM\"] = \"Removes a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_FROM_END\"] = \"to # from end\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_FROM_START\"] = \"to #\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_LAST\"] = \"to last\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#getting-a-sublist\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FIRST\"] = \"get sub-list from first\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FROM_END\"] = \"get sub-list from # from end\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FROM_START\"] = \"get sub-list from #\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_TAIL\"] = \"\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_TOOLTIP\"] = \"Creates a copy of the specified portion of a list.\";\nBlockly.Msg[\"LISTS_INDEX_FROM_END_TOOLTIP\"] = \"%1 is the last item.\";\nBlockly.Msg[\"LISTS_INDEX_FROM_START_TOOLTIP\"] = \"%1 is the first item.\";\nBlockly.Msg[\"LISTS_INDEX_OF_FIRST\"] = \"find first occurrence of item\";\nBlockly.Msg[\"LISTS_INDEX_OF_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#finding-items-in-a-list\";\nBlockly.Msg[\"LISTS_INDEX_OF_LAST\"] = \"find last occurrence of item\";\nBlockly.Msg[\"LISTS_INDEX_OF_TOOLTIP\"] = \"Returns the index of the first/last occurrence of the item in the list. Returns %1 if item is not found.\";\nBlockly.Msg[\"LISTS_INLIST\"] = \"in list\";\nBlockly.Msg[\"LISTS_ISEMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#is-empty\";\nBlockly.Msg[\"LISTS_ISEMPTY_TITLE\"] = \"%1 is empty\";\nBlockly.Msg[\"LISTS_ISEMPTY_TOOLTIP\"] = \"Returns true if the list is empty.\";\nBlockly.Msg[\"LISTS_LENGTH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#length-of\";\nBlockly.Msg[\"LISTS_LENGTH_TITLE\"] = \"length of %1\";\nBlockly.Msg[\"LISTS_LENGTH_TOOLTIP\"] = \"Returns the length of a list.\";\nBlockly.Msg[\"LISTS_REPEAT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-list-with\";\nBlockly.Msg[\"LISTS_REPEAT_TITLE\"] = \"create list with item %1 repeated %2 times\";\nBlockly.Msg[\"LISTS_REPEAT_TOOLTIP\"] = \"Creates a list consisting of the given value repeated the specified number of times.\";\nBlockly.Msg[\"LISTS_REVERSE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#reversing-a-list\";\nBlockly.Msg[\"LISTS_REVERSE_MESSAGE0\"] = \"reverse %1\";\nBlockly.Msg[\"LISTS_REVERSE_TOOLTIP\"] = \"Reverse a copy of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#in-list--set\";\nBlockly.Msg[\"LISTS_SET_INDEX_INPUT_TO\"] = \"as\";\nBlockly.Msg[\"LISTS_SET_INDEX_INSERT\"] = \"insert at\";\nBlockly.Msg[\"LISTS_SET_INDEX_SET\"] = \"set\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST\"] = \"Inserts the item at the start of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_FROM\"] = \"Inserts the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_LAST\"] = \"Append the item to the end of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM\"] = \"Inserts the item randomly in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_FIRST\"] = \"Sets the first item in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_FROM\"] = \"Sets the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_LAST\"] = \"Sets the last item in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_RANDOM\"] = \"Sets a random item in a list.\";\nBlockly.Msg[\"LISTS_SORT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#sorting-a-list\";\nBlockly.Msg[\"LISTS_SORT_ORDER_ASCENDING\"] = \"ascending\";\nBlockly.Msg[\"LISTS_SORT_ORDER_DESCENDING\"] = \"descending\";\nBlockly.Msg[\"LISTS_SORT_TITLE\"] = \"sort %1 %2 %3\";\nBlockly.Msg[\"LISTS_SORT_TOOLTIP\"] = \"Sort a copy of a list.\";\nBlockly.Msg[\"LISTS_SORT_TYPE_IGNORECASE\"] = \"alphabetic, ignore case\";\nBlockly.Msg[\"LISTS_SORT_TYPE_NUMERIC\"] = \"numeric\";\nBlockly.Msg[\"LISTS_SORT_TYPE_TEXT\"] = \"alphabetic\";\nBlockly.Msg[\"LISTS_SPLIT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists\";\nBlockly.Msg[\"LISTS_SPLIT_LIST_FROM_TEXT\"] = \"make list from text\";\nBlockly.Msg[\"LISTS_SPLIT_TEXT_FROM_LIST\"] = \"make text from list\";\nBlockly.Msg[\"LISTS_SPLIT_TOOLTIP_JOIN\"] = \"Join a list of texts into one text, separated by a delimiter.\";\nBlockly.Msg[\"LISTS_SPLIT_TOOLTIP_SPLIT\"] = \"Split text into a list of texts, breaking at each delimiter.\";\nBlockly.Msg[\"LISTS_SPLIT_WITH_DELIMITER\"] = \"with delimiter\";\nBlockly.Msg[\"LOGIC_BOOLEAN_FALSE\"] = \"false\";\nBlockly.Msg[\"LOGIC_BOOLEAN_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#values\";\nBlockly.Msg[\"LOGIC_BOOLEAN_TOOLTIP\"] = \"Returns either true or false.\";\nBlockly.Msg[\"LOGIC_BOOLEAN_TRUE\"] = \"true\";\nBlockly.Msg[\"LOGIC_COMPARE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Inequality_(mathematics)\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_EQ\"] = \"Return true if both inputs equal each other.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_GT\"] = \"Return true if the first input is greater than the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_GTE\"] = \"Return true if the first input is greater than or equal to the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_LT\"] = \"Return true if the first input is smaller than the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_LTE\"] = \"Return true if the first input is smaller than or equal to the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_NEQ\"] = \"Return true if both inputs are not equal to each other.\";\nBlockly.Msg[\"LOGIC_NEGATE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#not\";\nBlockly.Msg[\"LOGIC_NEGATE_TITLE\"] = \"not %1\";\nBlockly.Msg[\"LOGIC_NEGATE_TOOLTIP\"] = \"Returns true if the input is false. Returns false if the input is true.\";\nBlockly.Msg[\"LOGIC_NULL\"] = \"null\";\nBlockly.Msg[\"LOGIC_NULL_HELPURL\"] = \"https://en.wikipedia.org/wiki/Nullable_type\";\nBlockly.Msg[\"LOGIC_NULL_TOOLTIP\"] = \"Returns null.\";\nBlockly.Msg[\"LOGIC_OPERATION_AND\"] = \"and\";\nBlockly.Msg[\"LOGIC_OPERATION_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#logical-operations\";\nBlockly.Msg[\"LOGIC_OPERATION_OR\"] = \"or\";\nBlockly.Msg[\"LOGIC_OPERATION_TOOLTIP_AND\"] = \"Return true if both inputs are true.\";\nBlockly.Msg[\"LOGIC_OPERATION_TOOLTIP_OR\"] = \"Return true if at least one of the inputs is true.\";\nBlockly.Msg[\"LOGIC_TERNARY_CONDITION\"] = \"test\";\nBlockly.Msg[\"LOGIC_TERNARY_HELPURL\"] = \"https://en.wikipedia.org/wiki/%3F:\";\nBlockly.Msg[\"LOGIC_TERNARY_IF_FALSE\"] = \"if false\";\nBlockly.Msg[\"LOGIC_TERNARY_IF_TRUE\"] = \"if true\";\nBlockly.Msg[\"LOGIC_TERNARY_TOOLTIP\"] = \"Check the condition in 'test'. If the condition is true, returns the 'if true' value; otherwise returns the 'if false' value.\";\nBlockly.Msg[\"MAC_OS\"] = \"macOS\";\nBlockly.Msg[\"MATH_ADDITION_SYMBOL\"] = \"+\";\nBlockly.Msg[\"MATH_ARITHMETIC_HELPURL\"] = \"https://en.wikipedia.org/wiki/Arithmetic\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_ADD\"] = \"Return the sum of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_DIVIDE\"] = \"Return the quotient of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_MINUS\"] = \"Return the difference of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_MULTIPLY\"] = \"Return the product of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_POWER\"] = \"Return the first number raised to the power of the second number.\";\nBlockly.Msg[\"MATH_ATAN2_HELPURL\"] = \"https://en.wikipedia.org/wiki/Atan2\";\nBlockly.Msg[\"MATH_ATAN2_TITLE\"] = \"atan2 of X:%1 Y:%2\";\nBlockly.Msg[\"MATH_ATAN2_TOOLTIP\"] = \"Return the arctangent of point (X, Y) in degrees from -180 to 180.\";\nBlockly.Msg[\"MATH_CHANGE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter\";\nBlockly.Msg[\"MATH_CHANGE_TITLE\"] = \"change %1 by %2\";\nBlockly.Msg[\"MATH_CHANGE_TOOLTIP\"] = \"Add a number to variable '%1'.\";\nBlockly.Msg[\"MATH_CONSTANT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Mathematical_constant\";\nBlockly.Msg[\"MATH_CONSTANT_TOOLTIP\"] = \"Return one of the common constants: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (infinity).\";\nBlockly.Msg[\"MATH_CONSTRAIN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Clamping_(graphics)\";\nBlockly.Msg[\"MATH_CONSTRAIN_TITLE\"] = \"constrain %1 low %2 high %3\";\nBlockly.Msg[\"MATH_CONSTRAIN_TOOLTIP\"] = \"Constrain a number to be between the specified limits (inclusive).\";\nBlockly.Msg[\"MATH_DIVISION_SYMBOL\"] = \"÷\";\nBlockly.Msg[\"MATH_IS_DIVISIBLE_BY\"] = \"is divisible by\";\nBlockly.Msg[\"MATH_IS_EVEN\"] = \"is even\";\nBlockly.Msg[\"MATH_IS_NEGATIVE\"] = \"is negative\";\nBlockly.Msg[\"MATH_IS_ODD\"] = \"is odd\";\nBlockly.Msg[\"MATH_IS_POSITIVE\"] = \"is positive\";\nBlockly.Msg[\"MATH_IS_PRIME\"] = \"is prime\";\nBlockly.Msg[\"MATH_IS_TOOLTIP\"] = \"Check if a number is an even, odd, prime, whole, positive, negative, or if it is divisible by certain number. Returns true or false.\";\nBlockly.Msg[\"MATH_IS_WHOLE\"] = \"is whole\";\nBlockly.Msg[\"MATH_MODULO_HELPURL\"] = \"https://en.wikipedia.org/wiki/Modulo_operation\";\nBlockly.Msg[\"MATH_MODULO_TITLE\"] = \"remainder of %1 ÷ %2\";\nBlockly.Msg[\"MATH_MODULO_TOOLTIP\"] = \"Return the remainder from dividing the two numbers.\";\nBlockly.Msg[\"MATH_MULTIPLICATION_SYMBOL\"] = \"×\";\nBlockly.Msg[\"MATH_NUMBER_HELPURL\"] = \"https://en.wikipedia.org/wiki/Number\";\nBlockly.Msg[\"MATH_NUMBER_TOOLTIP\"] = \"A number.\";\nBlockly.Msg[\"MATH_ONLIST_HELPURL\"] = \"\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_AVERAGE\"] = \"average of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MAX\"] = \"max of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MEDIAN\"] = \"median of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MIN\"] = \"min of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MODE\"] = \"modes of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_RANDOM\"] = \"random item of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_STD_DEV\"] = \"standard deviation of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_SUM\"] = \"sum of list\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_AVERAGE\"] = \"Return the average (arithmetic mean) of the numeric values in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MAX\"] = \"Return the largest number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MEDIAN\"] = \"Return the median number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MIN\"] = \"Return the smallest number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MODE\"] = \"Return a list of the most common item(s) in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_RANDOM\"] = \"Return a random element from the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_STD_DEV\"] = \"Return the standard deviation of the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_SUM\"] = \"Return the sum of all the numbers in the list.\";\nBlockly.Msg[\"MATH_POWER_SYMBOL\"] = \"^\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Random_number_generation\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_TITLE_RANDOM\"] = \"random fraction\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_TOOLTIP\"] = \"Return a random fraction between 0.0 (inclusive) and 1.0 (exclusive).\";\nBlockly.Msg[\"MATH_RANDOM_INT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Random_number_generation\";\nBlockly.Msg[\"MATH_RANDOM_INT_TITLE\"] = \"random integer from %1 to %2\";\nBlockly.Msg[\"MATH_RANDOM_INT_TOOLTIP\"] = \"Return a random integer between the two specified limits, inclusive.\";\nBlockly.Msg[\"MATH_ROUND_HELPURL\"] = \"https://en.wikipedia.org/wiki/Rounding\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUND\"] = \"round\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUNDDOWN\"] = \"round down\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUNDUP\"] = \"round up\";\nBlockly.Msg[\"MATH_ROUND_TOOLTIP\"] = \"Round a number up or down.\";\nBlockly.Msg[\"MATH_SINGLE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Square_root\";\nBlockly.Msg[\"MATH_SINGLE_OP_ABSOLUTE\"] = \"absolute\";\nBlockly.Msg[\"MATH_SINGLE_OP_ROOT\"] = \"square root\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_ABS\"] = \"Return the absolute value of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_EXP\"] = \"Return e to the power of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_LN\"] = \"Return the natural logarithm of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_LOG10\"] = \"Return the base 10 logarithm of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_NEG\"] = \"Return the negation of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_POW10\"] = \"Return 10 to the power of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_ROOT\"] = \"Return the square root of a number.\";\nBlockly.Msg[\"MATH_SUBTRACTION_SYMBOL\"] = \"-\";\nBlockly.Msg[\"MATH_TRIG_ACOS\"] = \"acos\";\nBlockly.Msg[\"MATH_TRIG_ASIN\"] = \"asin\";\nBlockly.Msg[\"MATH_TRIG_ATAN\"] = \"atan\";\nBlockly.Msg[\"MATH_TRIG_COS\"] = \"cos\";\nBlockly.Msg[\"MATH_TRIG_HELPURL\"] = \"https://en.wikipedia.org/wiki/Trigonometric_functions\";\nBlockly.Msg[\"MATH_TRIG_SIN\"] = \"sin\";\nBlockly.Msg[\"MATH_TRIG_TAN\"] = \"tan\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ACOS\"] = \"Return the arccosine of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ASIN\"] = \"Return the arcsine of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ATAN\"] = \"Return the arctangent of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_COS\"] = \"Return the cosine of a degree (not radian).\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_SIN\"] = \"Return the sine of a degree (not radian).\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_TAN\"] = \"Return the tangent of a degree (not radian).\";\nBlockly.Msg[\"MOVE_BLOCK\"] = \"Move Block\";\nBlockly.Msg[\"NEW_COLOUR_VARIABLE\"] = \"Create colour variable...\";\nBlockly.Msg[\"NEW_NUMBER_VARIABLE\"] = \"Create number variable...\";\nBlockly.Msg[\"NEW_STRING_VARIABLE\"] = \"Create string variable...\";\nBlockly.Msg[\"NEW_VARIABLE\"] = \"Create variable...\";\nBlockly.Msg[\"NEW_VARIABLE_TITLE\"] = \"New variable name:\";\nBlockly.Msg[\"NEW_VARIABLE_TYPE_TITLE\"] = \"New variable type:\";\nBlockly.Msg[\"OPTION_KEY\"] = \"⌥ Option\";\nBlockly.Msg[\"ORDINAL_NUMBER_SUFFIX\"] = \"\";\nBlockly.Msg[\"PASTE_SHORTCUT\"] = \"Paste\";\nBlockly.Msg[\"PROCEDURES_ALLOW_STATEMENTS\"] = \"allow statements\";\nBlockly.Msg[\"PROCEDURES_BEFORE_PARAMS\"] = \"with:\";\nBlockly.Msg[\"PROCEDURES_CALLNORETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_CALLNORETURN_TOOLTIP\"] = \"Run the user-defined function '%1'.\";\nBlockly.Msg[\"PROCEDURES_CALLRETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_CALLRETURN_TOOLTIP\"] = \"Run the user-defined function '%1' and use its output.\";\nBlockly.Msg[\"PROCEDURES_CALL_BEFORE_PARAMS\"] = \"with:\";\nBlockly.Msg[\"PROCEDURES_CALL_DISABLED_DEF_WARNING\"] = \"Can't run the user-defined function '%1' because the definition block is disabled.\";\nBlockly.Msg[\"PROCEDURES_CREATE_DO\"] = \"Create '%1'\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_COMMENT\"] = \"Describe this function...\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_DO\"] = \"\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_PROCEDURE\"] = \"do something\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_TITLE\"] = \"to\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_TOOLTIP\"] = \"Creates a function with no output.\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_RETURN\"] = \"return\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_TOOLTIP\"] = \"Creates a function with an output.\";\nBlockly.Msg[\"PROCEDURES_DEF_DUPLICATE_WARNING\"] = \"Warning: This function has duplicate parameters.\";\nBlockly.Msg[\"PROCEDURES_HIGHLIGHT_DEF\"] = \"Highlight function definition\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_HELPURL\"] = \"https://c2.com/cgi/wiki?GuardClause\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_TOOLTIP\"] = \"If a value is true, then return a second value.\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_WARNING\"] = \"Warning: This block may be used only within a function definition.\";\nBlockly.Msg[\"PROCEDURES_MUTATORARG_TITLE\"] = \"input name:\";\nBlockly.Msg[\"PROCEDURES_MUTATORARG_TOOLTIP\"] = \"Add an input to the function.\";\nBlockly.Msg[\"PROCEDURES_MUTATORCONTAINER_TITLE\"] = \"inputs\";\nBlockly.Msg[\"PROCEDURES_MUTATORCONTAINER_TOOLTIP\"] = \"Add, remove, or reorder inputs to this function.\";\nBlockly.Msg[\"REDO\"] = \"Redo\";\nBlockly.Msg[\"REMOVE_COMMENT\"] = \"Remove Comment\";\nBlockly.Msg[\"RENAME_VARIABLE\"] = \"Rename variable...\";\nBlockly.Msg[\"RENAME_VARIABLE_TITLE\"] = \"Rename all '%1' variables to:\";\nBlockly.Msg[\"SHORTCUTS_CODE_NAVIGATION\"] = \"Code navigation\";\nBlockly.Msg[\"SHORTCUTS_EDITING\"] = \"Editing\";\nBlockly.Msg[\"SHORTCUTS_GENERAL\"] = \"General\";\nBlockly.Msg[\"TEXT_APPEND_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-modification\";\nBlockly.Msg[\"TEXT_APPEND_TITLE\"] = \"to %1 append text %2\";\nBlockly.Msg[\"TEXT_APPEND_TOOLTIP\"] = \"Append some text to variable '%1'.\";\nBlockly.Msg[\"TEXT_CHANGECASE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#adjusting-text-case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_LOWERCASE\"] = \"to lower case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_TITLECASE\"] = \"to Title Case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_UPPERCASE\"] = \"to UPPER CASE\";\nBlockly.Msg[\"TEXT_CHANGECASE_TOOLTIP\"] = \"Return a copy of the text in a different case.\";\nBlockly.Msg[\"TEXT_CHARAT_FIRST\"] = \"get first letter\";\nBlockly.Msg[\"TEXT_CHARAT_FROM_END\"] = \"get letter # from end\";\nBlockly.Msg[\"TEXT_CHARAT_FROM_START\"] = \"get letter #\";\nBlockly.Msg[\"TEXT_CHARAT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#extracting-text\";\nBlockly.Msg[\"TEXT_CHARAT_LAST\"] = \"get last letter\";\nBlockly.Msg[\"TEXT_CHARAT_RANDOM\"] = \"get random letter\";\nBlockly.Msg[\"TEXT_CHARAT_TAIL\"] = \"\";\nBlockly.Msg[\"TEXT_CHARAT_TITLE\"] = \"in text %1 %2\";\nBlockly.Msg[\"TEXT_CHARAT_TOOLTIP\"] = \"Returns the letter at the specified position.\";\nBlockly.Msg[\"TEXT_COUNT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#counting-substrings\";\nBlockly.Msg[\"TEXT_COUNT_MESSAGE0\"] = \"count %1 in %2\";\nBlockly.Msg[\"TEXT_COUNT_TOOLTIP\"] = \"Count how many times some text occurs within some other text.\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_ITEM_TOOLTIP\"] = \"Add an item to the text.\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_TITLE_JOIN\"] = \"join\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this text block.\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_FROM_END\"] = \"to letter # from end\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_FROM_START\"] = \"to letter #\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_LAST\"] = \"to last letter\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_INPUT_IN_TEXT\"] = \"in text\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FIRST\"] = \"get substring from first letter\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FROM_END\"] = \"get substring from letter # from end\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FROM_START\"] = \"get substring from letter #\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_TAIL\"] = \"\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_TOOLTIP\"] = \"Returns a specified portion of the text.\";\nBlockly.Msg[\"TEXT_INDEXOF_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#finding-text\";\nBlockly.Msg[\"TEXT_INDEXOF_OPERATOR_FIRST\"] = \"find first occurrence of text\";\nBlockly.Msg[\"TEXT_INDEXOF_OPERATOR_LAST\"] = \"find last occurrence of text\";\nBlockly.Msg[\"TEXT_INDEXOF_TITLE\"] = \"in text %1 %2 %3\";\nBlockly.Msg[\"TEXT_INDEXOF_TOOLTIP\"] = \"Returns the index of the first/last occurrence of the first text in the second text. Returns %1 if text is not found.\";\nBlockly.Msg[\"TEXT_ISEMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#checking-for-empty-text\";\nBlockly.Msg[\"TEXT_ISEMPTY_TITLE\"] = \"%1 is empty\";\nBlockly.Msg[\"TEXT_ISEMPTY_TOOLTIP\"] = \"Returns true if the provided text is empty.\";\nBlockly.Msg[\"TEXT_JOIN_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-creation\";\nBlockly.Msg[\"TEXT_JOIN_TITLE_CREATEWITH\"] = \"create text with\";\nBlockly.Msg[\"TEXT_JOIN_TOOLTIP\"] = \"Create a piece of text by joining together any number of items.\";\nBlockly.Msg[\"TEXT_LENGTH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-modification\";\nBlockly.Msg[\"TEXT_LENGTH_TITLE\"] = \"length of %1\";\nBlockly.Msg[\"TEXT_LENGTH_TOOLTIP\"] = \"Returns the number of letters (including spaces) in the provided text.\";\nBlockly.Msg[\"TEXT_PRINT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#printing-text\";\nBlockly.Msg[\"TEXT_PRINT_TITLE\"] = \"print %1\";\nBlockly.Msg[\"TEXT_PRINT_TOOLTIP\"] = \"Print the specified text, number or other value.\";\nBlockly.Msg[\"TEXT_PROMPT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#getting-input-from-the-user\";\nBlockly.Msg[\"TEXT_PROMPT_TOOLTIP_NUMBER\"] = \"Prompt for user for a number.\";\nBlockly.Msg[\"TEXT_PROMPT_TOOLTIP_TEXT\"] = \"Prompt for user for some text.\";\nBlockly.Msg[\"TEXT_PROMPT_TYPE_NUMBER\"] = \"prompt for number with message\";\nBlockly.Msg[\"TEXT_PROMPT_TYPE_TEXT\"] = \"prompt for text with message\";\nBlockly.Msg[\"TEXT_REPLACE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#replacing-substrings\";\nBlockly.Msg[\"TEXT_REPLACE_MESSAGE0\"] = \"replace %1 with %2 in %3\";\nBlockly.Msg[\"TEXT_REPLACE_TOOLTIP\"] = \"Replace all occurances of some text within some other text.\";\nBlockly.Msg[\"TEXT_REVERSE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#reversing-text\";\nBlockly.Msg[\"TEXT_REVERSE_MESSAGE0\"] = \"reverse %1\";\nBlockly.Msg[\"TEXT_REVERSE_TOOLTIP\"] = \"Reverses the order of the characters in the text.\";\nBlockly.Msg[\"TEXT_TEXT_HELPURL\"] = \"https://en.wikipedia.org/wiki/String_(computer_science)\";\nBlockly.Msg[\"TEXT_TEXT_TOOLTIP\"] = \"A letter, word, or line of text.\";\nBlockly.Msg[\"TEXT_TRIM_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#trimming-removing-spaces\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_BOTH\"] = \"trim spaces from both sides of\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_LEFT\"] = \"trim spaces from left side of\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_RIGHT\"] = \"trim spaces from right side of\";\nBlockly.Msg[\"TEXT_TRIM_TOOLTIP\"] = \"Return a copy of the text with spaces removed from one or both ends.\";\nBlockly.Msg[\"TODAY\"] = \"Today\";\nBlockly.Msg[\"UNDO\"] = \"Undo\";\nBlockly.Msg[\"UNKNOWN\"] = \"Unknown\";\nBlockly.Msg[\"UNNAMED_KEY\"] = \"unnamed\";\nBlockly.Msg[\"VARIABLES_DEFAULT_NAME\"] = \"item\";\nBlockly.Msg[\"VARIABLES_GET_CREATE_SET\"] = \"Create 'set %1'\";\nBlockly.Msg[\"VARIABLES_GET_HELPURL\"] = \"https://github.com/google/blockly/wiki/Variables#get\";\nBlockly.Msg[\"VARIABLES_GET_TOOLTIP\"] = \"Returns the value of this variable.\";\nBlockly.Msg[\"VARIABLES_SET\"] = \"set %1 to %2\";\nBlockly.Msg[\"VARIABLES_SET_CREATE_GET\"] = \"Create 'get %1'\";\nBlockly.Msg[\"VARIABLES_SET_HELPURL\"] = \"https://github.com/google/blockly/wiki/Variables#set\";\nBlockly.Msg[\"VARIABLES_SET_TOOLTIP\"] = \"Sets this variable to be equal to the input.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS\"] = \"A variable named '%1' already exists.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE\"] = \"A variable named '%1' already exists for another type: '%2'.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS_FOR_A_PARAMETER\"] = \"A variable named '%1' already exists as a parameter in the procedure '%2'.\";\nBlockly.Msg[\"WINDOWS\"] = \"Windows\";\nBlockly.Msg[\"WORKSPACE_ARIA_LABEL\"] = \"Blockly Workspace\";\nBlockly.Msg[\"WORKSPACE_COMMENT_DEFAULT_TEXT\"] = \"Say something...\";\nBlockly.Msg[\"CONTROLS_FOREACH_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_FOR_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_IF_ELSEIF_TITLE_ELSEIF\"] = Blockly.Msg[\"CONTROLS_IF_MSG_ELSEIF\"];\nBlockly.Msg[\"CONTROLS_IF_ELSE_TITLE_ELSE\"] = Blockly.Msg[\"CONTROLS_IF_MSG_ELSE\"];\nBlockly.Msg[\"CONTROLS_IF_IF_TITLE_IF\"] = Blockly.Msg[\"CONTROLS_IF_MSG_IF\"];\nBlockly.Msg[\"CONTROLS_IF_MSG_THEN\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"LISTS_CREATE_WITH_ITEM_TITLE\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"LISTS_GET_INDEX_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_GET_SUBLIST_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_INDEX_OF_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_SET_INDEX_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"MATH_CHANGE_TITLE_ITEM\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_COMMENT\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_COMMENT\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_DO\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_DO\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_PROCEDURE\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_PROCEDURE\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_TITLE\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_TITLE\"];\nBlockly.Msg[\"TEXT_APPEND_VARIABLE\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"TEXT_CREATE_JOIN_ITEM_TITLE_ITEM\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\n\nBlockly.Msg[\"COLOUR_HUE\"] = \"20\";\nBlockly.Msg[\"LISTS_HUE\"] = \"260\";\nBlockly.Msg[\"LOGIC_HUE\"] = \"210\";\nBlockly.Msg[\"LOOPS_HUE\"] = \"120\";\nBlockly.Msg[\"MATH_HUE\"] = \"230\";\nBlockly.Msg[\"PROCEDURES_HUE\"] = \"290\";\nBlockly.Msg[\"TEXTS_HUE\"] = \"160\";\nBlockly.Msg[\"VARIABLES_DYNAMIC_HUE\"] = \"310\";\nBlockly.Msg[\"VARIABLES_HUE\"] = \"330\";\nreturn Blockly.Msg;\n}));\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/msg/en.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/python.mjs": +/*!*****************************************!*\ + !*** ./node_modules/blockly/python.mjs ***! + \*****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Order: () => (/* binding */ Order),\n/* harmony export */ PythonGenerator: () => (/* binding */ PythonGenerator),\n/* harmony export */ pythonGenerator: () => (/* binding */ pythonGenerator)\n/* harmony export */ });\n/* harmony import */ var _python_compressed_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./python_compressed.js */ \"./node_modules/blockly/python_compressed.js\");\n\nconst {\n Order,\n PythonGenerator,\n pythonGenerator,\n} = _python_compressed_js__WEBPACK_IMPORTED_MODULE_0__;\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/python.mjs?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/python_compressed.js": +/*!***************************************************!*\ + !*** ./node_modules/blockly/python_compressed.js ***! + \***************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Do not edit this file; automatically generated.\n\n/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ./blockly_compressed.js */ \"./node_modules/blockly/blockly_compressed.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function(__parent__) {\nvar $=__parent__.__namespace__;\nvar lists_create_empty$$module$build$src$generators$python$lists=function(a,b){return[\"[]\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},lists_create_with$$module$build$src$generators$python$lists=function(a,b){const c=Array(a.itemCount_);for(let d=0;d\",GTE:\">=\"}[a.getFieldValue(\"OP\")],d=Order$$module$build$src$generators$python$python_generator.RELATIONAL,e=b.valueToCode(a,\"A\",d)||\"0\";a=b.valueToCode(a,\"B\",d)||\"0\";return[e+\" \"+c+\" \"+a,d]},logic_operation$$module$build$src$generators$python$logic=function(a,\nb){const c=a.getFieldValue(\"OP\")===\"AND\"?\"and\":\"or\",d=c===\"and\"?Order$$module$build$src$generators$python$python_generator.LOGICAL_AND:Order$$module$build$src$generators$python$python_generator.LOGICAL_OR;let e=b.valueToCode(a,\"A\",d);a=b.valueToCode(a,\"B\",d);e||a?(b=c===\"and\"?\"True\":\"False\",e||(e=b),a||(a=b)):a=e=\"False\";return[e+\" \"+c+\" \"+a,d]},logic_negate$$module$build$src$generators$python$logic=function(a,b){return[\"not \"+(b.valueToCode(a,\"BOOL\",Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT)||\n\"True\"),Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT]},logic_boolean$$module$build$src$generators$python$logic=function(a,b){return[a.getFieldValue(\"BOOL\")===\"TRUE\"?\"True\":\"False\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},logic_null$$module$build$src$generators$python$logic=function(a,b){return[\"None\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},logic_ternary$$module$build$src$generators$python$logic=function(a,b){const c=\nb.valueToCode(a,\"IF\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"False\",d=b.valueToCode(a,\"THEN\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"None\";a=b.valueToCode(a,\"ELSE\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"None\";return[d+\" if \"+c+\" else \"+a,Order$$module$build$src$generators$python$python_generator.CONDITIONAL]},controls_repeat_ext$$module$build$src$generators$python$loops=function(a,b){let c;c=a.getField(\"TIMES\")?\nString(parseInt(a.getFieldValue(\"TIMES\"),10)):b.valueToCode(a,\"TIMES\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";c=$.isNumber$$module$build$src$core$utils$string(c)?parseInt(c,10):\"int(\"+c+\")\";let d=b.statementToCode(a,\"DO\");d=b.addLoopTrap(d,a)||b.PASS;return\"for \"+b.nameDB_.getDistinctName(\"count\",$.NameType$$module$build$src$core$names.VARIABLE)+\" in range(\"+c+\"):\\n\"+d},controls_whileUntil$$module$build$src$generators$python$loops=function(a,b){const c=a.getFieldValue(\"MODE\")===\n\"UNTIL\";let d=b.valueToCode(a,\"BOOL\",c?Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT:Order$$module$build$src$generators$python$python_generator.NONE)||\"False\",e=b.statementToCode(a,\"DO\");e=b.addLoopTrap(e,a)||b.PASS;c&&(d=\"not \"+d);return\"while \"+d+\":\\n\"+e},controls_for$$module$build$src$generators$python$loops=function(a,b){const c=b.getVariableName(a.getFieldValue(\"VAR\"));var d=b.valueToCode(a,\"FROM\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",\ne=b.valueToCode(a,\"TO\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",f=b.valueToCode(a,\"BY\",Order$$module$build$src$generators$python$python_generator.NONE)||\"1\";let g=b.statementToCode(a,\"DO\");g=b.addLoopTrap(g,a)||b.PASS;let h=\"\";a=function(){return b.provideFunction_(\"upRange\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):\n while start <= stop:\n yield start\n start += abs(step)\n`)};const k=function(){return b.provideFunction_(\"downRange\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):\n while start >= stop:\n yield start\n start -= abs(step)\n`)};if($.isNumber$$module$build$src$core$utils$string(d)&&$.isNumber$$module$build$src$core$utils$string(e)&&$.isNumber$$module$build$src$core$utils$string(f))d=Number(d),e=Number(e),f=Math.abs(Number(f)),d%1===0&&e%1===0&&f%1===0?(d<=e?(e++,a=d===0&&f===1?e:d+\", \"+e,f!==1&&(a+=\", \"+f)):(e--,a=d+\", \"+e+\", -\"+f),a=\"range(\"+a+\")\"):(a=d 0\",Order$$module$build$src$generators$python$python_generator.RELATIONAL,Order$$module$build$src$generators$python$python_generator.RELATIONAL],NEGATIVE:[\" < 0\",\nOrder$$module$build$src$generators$python$python_generator.RELATIONAL,Order$$module$build$src$generators$python$python_generator.RELATIONAL],DIVISIBLE_BY:[null,Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE,Order$$module$build$src$generators$python$python_generator.RELATIONAL],PRIME:[null,Order$$module$build$src$generators$python$python_generator.NONE,Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]};const d=a.getFieldValue(\"PROPERTY\"),[e,f,g]=c[d];\nc=b.valueToCode(a,\"NUMBER_TO_CHECK\",f)||\"0\";if(d===\"PRIME\")b.definitions_.import_math=\"import math\",b.definitions_.from_numbers_import_Number=\"from numbers import Number\",a=b.provideFunction_(\"math_isPrime\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(n):\n # https://en.wikipedia.org/wiki/Primality_test#Naive_methods\n # If n is not a number but a string, try parsing it.\n if not isinstance(n, Number):\n try:\n n = float(n)\n except:\n return False\n if n == 2 or n == 3:\n return True\n # False if n is negative, is 1, or not whole, or if n is divisible by 2 or 3.\n if n <= 1 or n % 1 != 0 or n % 2 == 0 or n % 3 == 0:\n return False\n # Check all the numbers of form 6k +/- 1, up to sqrt(n).\n for x in range(6, int(math.sqrt(n)) + 2, 6):\n if n % (x - 1) == 0 or n % (x + 1) == 0:\n return False\n return True\n`)+\"(\"+c+\")\";else if(d===\"DIVISIBLE_BY\"){a=b.valueToCode(a,\"DIVISOR\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\"0\";if(a===\"0\")return[\"False\",Order$$module$build$src$generators$python$python_generator.ATOMIC];a=c+\" % \"+a+\" == 0\"}else a=c+e;return[a,g]},math_change$$module$build$src$generators$python$math=function(a,b){b.definitions_.from_numbers_import_Number=\"from numbers import Number\";const c=b.valueToCode(a,\"DELTA\",Order$$module$build$src$generators$python$python_generator.ADDITIVE)||\n\"0\";a=b.getVariableName(a.getFieldValue(\"VAR\"));return a+\" = (\"+a+\" if isinstance(\"+a+\", Number) else 0) + \"+c+\"\\n\"},math_on_list$$module$build$src$generators$python$math=function(a,b){const c=a.getFieldValue(\"OP\");a=b.valueToCode(a,\"LIST\",Order$$module$build$src$generators$python$python_generator.NONE)||\"[]\";switch(c){case \"SUM\":b=\"sum(\"+a+\")\";break;case \"MIN\":b=\"min(\"+a+\")\";break;case \"MAX\":b=\"max(\"+a+\")\";break;case \"AVERAGE\":b.definitions_.from_numbers_import_Number=\"from numbers import Number\";\nb=b.provideFunction_(\"math_mean\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(myList):\n localList = [e for e in myList if isinstance(e, Number)]\n if not localList: return\n return float(sum(localList)) / len(localList)\n`)+\"(\"+a+\")\";break;case \"MEDIAN\":b.definitions_.from_numbers_import_Number=\"from numbers import Number\";b=b.provideFunction_(\"math_median\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(myList):\n localList = sorted([e for e in myList if isinstance(e, Number)])\n if not localList: return\n if len(localList) % 2 == 0:\n return (localList[len(localList) // 2 - 1] + localList[len(localList) // 2]) / 2.0\n else:\n return localList[(len(localList) - 1) // 2]\n`)+\"(\"+a+\")\";break;case \"MODE\":b=b.provideFunction_(\"math_modes\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(some_list):\n modes = []\n # Using a lists of [item, count] to keep count rather than dict\n # to avoid \"unhashable\" errors when the counted item is itself a list or dict.\n counts = []\n maxCount = 1\n for item in some_list:\n found = False\n for count in counts:\n if count[0] == item:\n count[1] += 1\n maxCount = max(maxCount, count[1])\n found = True\n if not found:\n counts.append([item, 1])\n for counted_item, item_count in counts:\n if item_count == maxCount:\n modes.append(counted_item)\n return modes\n`)+\"(\"+a+\")\";break;case \"STD_DEV\":b.definitions_.import_math=\"import math\";b=b.provideFunction_(\"math_standard_deviation\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(numbers):\n n = len(numbers)\n if n == 0: return\n mean = float(sum(numbers)) / n\n variance = sum((x - mean) ** 2 for x in numbers) / n\n return math.sqrt(variance)\n`)+\"(\"+a+\")\";break;case \"RANDOM\":b.definitions_.import_random=\"import random\";b=\"random.choice(\"+a+\")\";break;default:throw Error(\"Unknown operator: \"+c);}return[b,Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_modulo$$module$build$src$generators$python$math=function(a,b){const c=b.valueToCode(a,\"DIVIDEND\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\"0\";a=b.valueToCode(a,\"DIVISOR\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\n\"0\";return[c+\" % \"+a,Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE]},math_constrain$$module$build$src$generators$python$math=function(a,b){const c=b.valueToCode(a,\"VALUE\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",d=b.valueToCode(a,\"LOW\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";a=b.valueToCode(a,\"HIGH\",Order$$module$build$src$generators$python$python_generator.NONE)||\"float('inf')\";return[\"min(max(\"+c+\", \"+d+\"), \"+\na+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_random_int$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_random=\"import random\";const c=b.valueToCode(a,\"FROM\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";a=b.valueToCode(a,\"TO\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";return[\"random.randint(\"+c+\", \"+a+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},\nmath_random_float$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_random=\"import random\";return[\"random.random()\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_atan2$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_math=\"import math\";const c=b.valueToCode(a,\"X\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";return[\"math.atan2(\"+(b.valueToCode(a,\"Y\",Order$$module$build$src$generators$python$python_generator.NONE)||\n\"0\")+\", \"+c+\") / math.pi * 180\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE]},procedures_defreturn$$module$build$src$generators$python$procedures=function(a,b){var c=[],d=a.workspace,e=$.allUsedVarModels$$module$build$src$core$variables(d)||[];for(var f of e)e=f.getName(),a.getVars().includes(e)||c.push(b.getVariableName(e));d=$.allDeveloperVariables$$module$build$src$core$variables(d);for(f=0;f0?\"int(\"+a+\" + \"+c+\")\":c<0?\"int(\"+a+\" - \"+-c+\")\":\"int(\"+a+\")\",d&&(a=\"-\"+a));return a}},module$build$src$generators$python$python_generator={};module$build$src$generators$python$python_generator.Order=Order$$module$build$src$generators$python$python_generator;module$build$src$generators$python$python_generator.PythonGenerator=PythonGenerator$$module$build$src$generators$python$python_generator;var module$build$src$generators$python$lists={};module$build$src$generators$python$lists.lists_create_empty=lists_create_empty$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_create_with=lists_create_with$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_getIndex=lists_getIndex$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_getSublist=lists_getSublist$$module$build$src$generators$python$lists;\nmodule$build$src$generators$python$lists.lists_indexOf=lists_indexOf$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_isEmpty=lists_isEmpty$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_length=lists_length$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_repeat=lists_repeat$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_reverse=lists_reverse$$module$build$src$generators$python$lists;\nmodule$build$src$generators$python$lists.lists_setIndex=lists_setIndex$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_sort=lists_sort$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_split=lists_split$$module$build$src$generators$python$lists;var controls_ifelse$$module$build$src$generators$python$logic=controls_if$$module$build$src$generators$python$logic,module$build$src$generators$python$logic={};module$build$src$generators$python$logic.controls_if=controls_if$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.controls_ifelse=controls_if$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_boolean=logic_boolean$$module$build$src$generators$python$logic;\nmodule$build$src$generators$python$logic.logic_compare=logic_compare$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_negate=logic_negate$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_null=logic_null$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_operation=logic_operation$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_ternary=logic_ternary$$module$build$src$generators$python$logic;var controls_repeat$$module$build$src$generators$python$loops=controls_repeat_ext$$module$build$src$generators$python$loops,module$build$src$generators$python$loops={};module$build$src$generators$python$loops.controls_flow_statements=controls_flow_statements$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_for=controls_for$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_forEach=controls_forEach$$module$build$src$generators$python$loops;\nmodule$build$src$generators$python$loops.controls_repeat=controls_repeat_ext$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_repeat_ext=controls_repeat_ext$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_whileUntil=controls_whileUntil$$module$build$src$generators$python$loops;var math_round$$module$build$src$generators$python$math=math_single$$module$build$src$generators$python$math,math_trig$$module$build$src$generators$python$math=math_single$$module$build$src$generators$python$math,module$build$src$generators$python$math={};module$build$src$generators$python$math.math_arithmetic=math_arithmetic$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_atan2=math_atan2$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_change=math_change$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_constant=math_constant$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_constrain=math_constrain$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_modulo=math_modulo$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_number=math_number$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_number_property=math_number_property$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_on_list=math_on_list$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_random_float=math_random_float$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_random_int=math_random_int$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_round=math_single$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_single=math_single$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_trig=math_single$$module$build$src$generators$python$math;var procedures_defnoreturn$$module$build$src$generators$python$procedures=procedures_defreturn$$module$build$src$generators$python$procedures,module$build$src$generators$python$procedures={};module$build$src$generators$python$procedures.procedures_callnoreturn=procedures_callnoreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_callreturn=procedures_callreturn$$module$build$src$generators$python$procedures;\nmodule$build$src$generators$python$procedures.procedures_defnoreturn=procedures_defreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_defreturn=procedures_defreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_ifreturn=procedures_ifreturn$$module$build$src$generators$python$procedures;var strRegExp$$module$build$src$generators$python$text=/^\\s*'([^']|\\\\')*'\\s*$/,forceString$$module$build$src$generators$python$text=function(a){return strRegExp$$module$build$src$generators$python$text.test(a)?[a,Order$$module$build$src$generators$python$python_generator.ATOMIC]:[\"str(\"+a+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},text_prompt$$module$build$src$generators$python$text=text_prompt_ext$$module$build$src$generators$python$text,module$build$src$generators$python$text=\n{};module$build$src$generators$python$text.text=text$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_append=text_append$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_changeCase=text_changeCase$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_charAt=text_charAt$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_count=text_count$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_getSubstring=text_getSubstring$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_indexOf=text_indexOf$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_isEmpty=text_isEmpty$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_join=text_join$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_length=text_length$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_print=text_print$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_prompt=text_prompt_ext$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_prompt_ext=text_prompt_ext$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_replace=text_replace$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_reverse=text_reverse$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_trim=text_trim$$module$build$src$generators$python$text;var module$build$src$generators$python$variables={};module$build$src$generators$python$variables.variables_get=variables_get$$module$build$src$generators$python$variables;module$build$src$generators$python$variables.variables_set=variables_set$$module$build$src$generators$python$variables;var module$build$src$generators$python$variables_dynamic={};module$build$src$generators$python$variables_dynamic.variables_get_dynamic=variables_get$$module$build$src$generators$python$variables;module$build$src$generators$python$variables_dynamic.variables_set_dynamic=variables_set$$module$build$src$generators$python$variables;var pythonGenerator$$module$build$src$generators$python=new PythonGenerator$$module$build$src$generators$python$python_generator;pythonGenerator$$module$build$src$generators$python.addReservedWords(\"math,random,Number\");\nvar generators$$module$build$src$generators$python=Object.assign({},module$build$src$generators$python$lists,module$build$src$generators$python$logic,module$build$src$generators$python$loops,module$build$src$generators$python$math,module$build$src$generators$python$procedures,module$build$src$generators$python$text,module$build$src$generators$python$variables,module$build$src$generators$python$variables_dynamic);\nfor(const a in generators$$module$build$src$generators$python)pythonGenerator$$module$build$src$generators$python.forBlock[a]=generators$$module$build$src$generators$python[a];var module$build$src$generators$python={};module$build$src$generators$python.Order=Order$$module$build$src$generators$python$python_generator;module$build$src$generators$python.PythonGenerator=PythonGenerator$$module$build$src$generators$python$python_generator;module$build$src$generators$python.pythonGenerator=pythonGenerator$$module$build$src$generators$python;\nmodule$build$src$generators$python.__namespace__=$;\nreturn module$build$src$generators$python;\n}));\n\n\n//# sourceMappingURL=python_compressed.js.map\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/python_compressed.js?\n}"); + +/***/ }), + +/***/ "./src/steps/step3.js": +/*!****************************!*\ + !*** ./src/steps/step3.js ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var blockly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly */ \"./node_modules/blockly/index.mjs\");\n/* harmony import */ var blockly_python__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! blockly/python */ \"./node_modules/blockly/python.mjs\");\n/**\n * Blockly OT-2 Integration Application\n * \n * This application demonstrates real Blockly installation with custom blocks\n * for OT-2 liquid handler functions from OT2mqtt.py\n */\n\n\n\n\n// Define custom block: OT-2 Home\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_home'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('🏠 OT-2: Home Robot');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Home the OT-2 robot to its initial position');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_home'] = function(block, generator) {\n const code = 'protocol.home()\\n';\n return code;\n};\n\n// Define custom block: OT-2 Mix Color\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_mix_color'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('🎨 OT-2: Mix Color');\n this.appendValueInput('R')\n .setCheck('Number')\n .appendField('Red (µL)');\n this.appendValueInput('Y')\n .setCheck('Number')\n .appendField('Yellow (µL)');\n this.appendValueInput('B')\n .setCheck('Number')\n .appendField('Blue (µL)');\n this.appendValueInput('WELL')\n .setCheck('String')\n .appendField('Well');\n this.appendValueInput('SESSION_ID')\n .setCheck('String')\n .appendField('Session ID');\n this.appendValueInput('EXPERIMENT_ID')\n .setCheck('String')\n .appendField('Experiment ID');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Mix RGB colors in a well using the OT-2 pipette');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_mix_color'] = function(block, generator) {\n const value_r = generator.valueToCode(block, 'R', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_y = generator.valueToCode(block, 'Y', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_b = generator.valueToCode(block, 'B', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_well = generator.valueToCode(block, 'WELL', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"A1\"';\n const value_session_id = generator.valueToCode(block, 'SESSION_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"session_001\"';\n const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"exp_001\"';\n \n const code = `payload = {\n \"command\": {\n \"R\": ${value_r},\n \"Y\": ${value_y},\n \"B\": ${value_b},\n \"well\": ${value_well}\n },\n \"session_id\": ${value_session_id},\n \"experiment_id\": ${value_experiment_id}\n}\nmix_color(payload)\n`;\n return code;\n};\n\n// Define custom block: OT-2 Move Sensor Back\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_move_sensor_back'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('↩️ OT-2: Move Sensor Back');\n this.appendValueInput('SENSOR_STATUS')\n .setCheck('String')\n .appendField('Sensor Status');\n this.appendValueInput('SESSION_ID')\n .setCheck('String')\n .appendField('Session ID');\n this.appendValueInput('EXPERIMENT_ID')\n .setCheck('String')\n .appendField('Experiment ID');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Move the sensor back to charging position');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_move_sensor_back'] = function(block, generator) {\n const value_sensor_status = generator.valueToCode(block, 'SENSOR_STATUS', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"complete\"';\n const value_session_id = generator.valueToCode(block, 'SESSION_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"session_001\"';\n const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"exp_001\"';\n \n const code = `payload = {\n \"command\": {\n \"sensor_status\": ${value_sensor_status}\n },\n \"session_id\": ${value_session_id},\n \"experiment_id\": ${value_experiment_id}\n}\nmove_sensor_back(payload)\n`;\n return code;\n};\n\n// Create toolbox\nconst toolbox = {\n \"kind\": \"categoryToolbox\",\n \"contents\": [\n {\n \"kind\": \"category\",\n \"name\": \"OT-2 Commands\",\n \"colour\": \"#5C81A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"ot2_home\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"ot2_mix_color\",\n \"inputs\": {\n \"R\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 100\n }\n }\n },\n \"Y\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 50\n }\n }\n },\n \"B\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 75\n }\n }\n },\n \"WELL\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"A1\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n },\n {\n \"kind\": \"block\",\n \"type\": \"ot2_move_sensor_back\",\n \"inputs\": {\n \"SENSOR_STATUS\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"complete\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Logic\",\n \"colour\": \"#5C68A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"controls_if\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"logic_compare\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Loops\",\n \"colour\": \"#5CA65C\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"controls_repeat_ext\",\n \"inputs\": {\n \"TIMES\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 3\n }\n }\n }\n }\n },\n {\n \"kind\": \"block\",\n \"type\": \"controls_whileUntil\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Math\",\n \"colour\": \"#5C68A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"math_number\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"math_arithmetic\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Text\",\n \"colour\": \"#5CA68A\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"text\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"text_print\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Variables\",\n \"colour\": \"#A65C81\",\n \"custom\": \"VARIABLE\"\n }\n ]\n};\n\n// Initialize Blockly workspace\nconst workspace = blockly__WEBPACK_IMPORTED_MODULE_0__.inject('blocklyDiv', {\n toolbox: toolbox,\n grid: {\n spacing: 20,\n length: 3,\n colour: '#ccc',\n snap: true\n },\n zoom: {\n controls: true,\n wheel: true,\n startScale: 1.0,\n maxScale: 3,\n minScale: 0.3,\n scaleSpeed: 1.2\n },\n trashcan: true\n});\n\n// Load initial workspace\n\n// Load initial workspace - Step 3: Home block + Repeat loop\nconst startBlocks = {\n \"blocks\": {\n \"languageVersion\": 0,\n \"blocks\": [\n {\n \"type\": \"ot2_home\",\n \"id\": \"start_home\",\n \"x\": 50,\n \"y\": 50\n },\n {\n \"type\": \"controls_repeat_ext\",\n \"id\": \"repeat_loop\",\n \"x\": 50,\n \"y\": 120,\n \"inputs\": {\n \"TIMES\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"id\": \"repeat_times\",\n \"fields\": {\n \"NUM\": 3\n }\n }\n }\n }\n }\n ]\n }\n};\n\nblockly__WEBPACK_IMPORTED_MODULE_0__.serialization.workspaces.load(startBlocks, workspace);\n\n// Generate code function\nfunction generateCode() {\n const code = blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.workspaceToCode(workspace);\n const fullCode = `# Generated from Blockly visual programming\n# This code uses functions from OT2mqtt.py\n\nfrom OT2mqtt import mix_color, move_sensor_back, protocol\n\n# Main workflow\n${code}`;\n \n document.getElementById('codeOutput').textContent = fullCode;\n}\n\n// Update code on workspace change\nworkspace.addChangeListener(generateCode);\n\n// Generate initial code\ngenerateCode();\n\n// Expose generate function to button\nwindow.generateCode = generateCode;\n\n\n//# sourceURL=webpack://blockly_app/./src/steps/step3.js?\n}"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./src/steps/step3.js"); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/scripts/blockly_app/dist/step4.html b/scripts/blockly_app/dist/step4.html new file mode 100644 index 00000000..3b654ec6 --- /dev/null +++ b/scripts/blockly_app/dist/step4.html @@ -0,0 +1,84 @@ + + + + + Blockly OT-2 - Step 4 + + + +

Blockly OT-2 Custom Functions - Building Workflow Step by Step

+
Step 4
+
+
+
+

Generated Python Code

+
+ Watch as we build the workflow block by block +
+
# Waiting for blocks...
+
+
+ + + diff --git a/scripts/blockly_app/dist/step4.js b/scripts/blockly_app/dist/step4.js new file mode 100644 index 00000000..af37a79b --- /dev/null +++ b/scripts/blockly_app/dist/step4.js @@ -0,0 +1,170 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/blockly/blockly_compressed.js": +/*!****************************************************!*\ + !*** ./node_modules/blockly/blockly_compressed.js ***! + \****************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Do not edit this file; automatically generated.\n\n/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function() {\nvar $={};\nvar register$$module$build$src$core$registry,validate$$module$build$src$core$registry,unregister$$module$build$src$core$registry,getItem$$module$build$src$core$registry,hasItem$$module$build$src$core$registry,getClass$$module$build$src$core$registry,getObject$$module$build$src$core$registry,getAllItems$$module$build$src$core$registry,getClassFromOptions$$module$build$src$core$registry,longStart$$module$build$src$core$touch,longStop$$module$build$src$core$touch,clearTouchIdentifier$$module$build$src$core$touch,\nshouldHandleEvent$$module$build$src$core$touch,getTouchIdentifierFromEvent$$module$build$src$core$touch,checkTouchIdentifier$$module$build$src$core$touch,conditionalBind$$module$build$src$core$browser_events,bind$$module$build$src$core$browser_events,unbind$$module$build$src$core$browser_events,isTargetInput$$module$build$src$core$browser_events,isRightButton$$module$build$src$core$browser_events,mouseToSvg$$module$build$src$core$browser_events,getScrollDeltaPixels$$module$build$src$core$browser_events,\ngetNextUniqueId$$module$build$src$core$utils$idgenerator,genUid$$module$build$src$core$utils$idgenerator,isBlockCreate$$module$build$src$core$events$predicates,isBlockDelete$$module$build$src$core$events$predicates,isBlockChange$$module$build$src$core$events$predicates,isBlockFieldIntermediateChange$$module$build$src$core$events$predicates,isBlockMove$$module$build$src$core$events$predicates,isVarCreate$$module$build$src$core$events$predicates,isVarDelete$$module$build$src$core$events$predicates,\nisVarRename$$module$build$src$core$events$predicates,isBlockDrag$$module$build$src$core$events$predicates,isSelected$$module$build$src$core$events$predicates,isClick$$module$build$src$core$events$predicates,isBubbleOpen$$module$build$src$core$events$predicates,isTrashcanOpen$$module$build$src$core$events$predicates,isToolboxItemSelect$$module$build$src$core$events$predicates,isThemeChange$$module$build$src$core$events$predicates,isViewportChange$$module$build$src$core$events$predicates,isCommentCreate$$module$build$src$core$events$predicates,\nisCommentDelete$$module$build$src$core$events$predicates,isCommentChange$$module$build$src$core$events$predicates,isCommentMove$$module$build$src$core$events$predicates,isCommentResize$$module$build$src$core$events$predicates,isCommentDrag$$module$build$src$core$events$predicates,isCommentCollapse$$module$build$src$core$events$predicates,isFinishedLoading$$module$build$src$core$events$predicates,getRecordUndo$$module$build$src$core$events$utils,fire$$module$build$src$core$events$utils,fireInternal$$module$build$src$core$events$utils,\nfireNow$$module$build$src$core$events$utils,enqueueEvent$$module$build$src$core$events$utils,filter$$module$build$src$core$events$utils,clearPendingUndo$$module$build$src$core$events$utils,isEnabled$$module$build$src$core$events$utils,setGroupInternal$$module$build$src$core$events$utils,getDescendantIds$$module$build$src$core$events$utils,fromJson$$module$build$src$core$events$utils,get$$module$build$src$core$events$utils,disableOrphans$$module$build$src$core$events$utils,createSvgElement$$module$build$src$core$utils$dom,\naddClass$$module$build$src$core$utils$dom,removeClasses$$module$build$src$core$utils$dom,removeClass$$module$build$src$core$utils$dom,hasClass$$module$build$src$core$utils$dom,removeNode$$module$build$src$core$utils$dom,insertAfter$$module$build$src$core$utils$dom,setCssTransform$$module$build$src$core$utils$dom,startTextWidthCache$$module$build$src$core$utils$dom,stopTextWidthCache$$module$build$src$core$utils$dom,getTextWidth$$module$build$src$core$utils$dom,getFastTextWidth$$module$build$src$core$utils$dom,\ngetFastTextWidthWithSizeString$$module$build$src$core$utils$dom,measureFontMetrics$$module$build$src$core$utils$dom,isFocusableNode$$module$build$src$core$interfaces$i_focusable_node,isSelectable$$module$build$src$core$interfaces$i_selectable,deepMerge$$module$build$src$core$utils$object,getWorkspaceById$$module$build$src$core$common,getAllWorkspaces$$module$build$src$core$common,registerWorkspace$$module$build$src$core$common,unregisterWorkpace$$module$build$src$core$common,getMainWorkspace$$module$build$src$core$common,\nsetMainWorkspace$$module$build$src$core$common,getSelected$$module$build$src$core$common,setSelected$$module$build$src$core$common,fireSelectedEvent$$module$build$src$core$common,getParentContainer$$module$build$src$core$common,setParentContainer$$module$build$src$core$common,svgResize$$module$build$src$core$common,getBlockTypeCounts$$module$build$src$core$common,jsonInitFactory$$module$build$src$core$common,defineBlocksWithJsonArray$$module$build$src$core$common,defineBlocksWithJsonArrayInternal$$module$build$src$core$common,\nglobalShortcutHandler$$module$build$src$core$common,removeElem$$module$build$src$core$utils$array,register$$module$build$src$core$css,inject$$module$build$src$core$css,getSize$$module$build$src$core$utils$style,getSizeInternal$$module$build$src$core$utils$style,getSizeWithDisplay$$module$build$src$core$utils$style,getComputedStyle$$module$build$src$core$utils$style,getPageOffset$$module$build$src$core$utils$style,getViewportPageOffset$$module$build$src$core$utils$style,getBorderBox$$module$build$src$core$utils$style,\nscrollIntoContainerView$$module$build$src$core$utils$style,getContainerOffsetToScrollInto$$module$build$src$core$utils$style,getRelativeXY$$module$build$src$core$utils$svg_math,getInjectionDivXY$$module$build$src$core$utils$svg_math,getViewportBBox$$module$build$src$core$utils$svg_math,getDocumentScroll$$module$build$src$core$utils$svg_math,screenToWsCoordinates$$module$build$src$core$utils$svg_math,wsToScreenCoordinates$$module$build$src$core$utils$svg_math,injectDependencies$$module$build$src$core$utils$xml,\ndomToText$$module$build$src$core$utils$xml,sanitizeText$$module$build$src$core$utils$xml,convertToolboxDefToJson$$module$build$src$core$utils$toolbox,validateToolbox$$module$build$src$core$utils$toolbox,convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox,hasCategories$$module$build$src$core$utils$toolbox,hasCategoriesInternal$$module$build$src$core$utils$toolbox,isCategoryCollapsible$$module$build$src$core$utils$toolbox,convertToToolboxJson$$module$build$src$core$utils$toolbox,xmlToJsonArray$$module$build$src$core$utils$toolbox,\naddAttributes$$module$build$src$core$utils$toolbox,parseToolboxTree$$module$build$src$core$utils$toolbox,getStartPositionRect$$module$build$src$core$positionable_helpers,getCornerOppositeToolbox$$module$build$src$core$positionable_helpers,bumpPositionRect$$module$build$src$core$positionable_helpers,register$$module$build$src$core$serialization$registry,unregister$$module$build$src$core$serialization$registry,save$$module$build$src$core$serialization$workspace_comments,append$$module$build$src$core$serialization$workspace_comments,\nregister$$module$build$src$core$clipboard$registry,unregister$$module$build$src$core$clipboard$registry,moveCommentToNotConflict$$module$build$src$core$clipboard$workspace_comment_paster,commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster,setRole$$module$build$src$core$utils$aria,setState$$module$build$src$core$utils$aria,isSerializable$$module$build$src$core$interfaces$i_serializable,queueRender$$module$build$src$core$render_management,finishQueuedRenders$$module$build$src$core$render_management,\ntriggerQueuedRenders$$module$build$src$core$render_management,alwaysImmediatelyRender$$module$build$src$core$render_management,queueBlock$$module$build$src$core$render_management,doRenders$$module$build$src$core$render_management,dequeueBlock$$module$build$src$core$render_management,shouldRenderRootBlock$$module$build$src$core$render_management,renderBlock$$module$build$src$core$render_management,alert$$module$build$src$core$dialog,setAlert$$module$build$src$core$dialog,confirm$$module$build$src$core$dialog,\nsetConfirm$$module$build$src$core$dialog,prompt$$module$build$src$core$dialog,setPrompt$$module$build$src$core$dialog,toast$$module$build$src$core$dialog,setToast$$module$build$src$core$dialog,isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks,isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks,isVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model,warn$$module$build$src$core$utils$deprecation,\ninternalFlyoutCategory$$module$build$src$core$variables,flyoutCategory$$module$build$src$core$variables,generateVariableFieldJson$$module$build$src$core$variables,jsonFlyoutCategoryBlocks$$module$build$src$core$variables,xmlFlyoutCategory$$module$build$src$core$variables,flyoutCategoryBlocks$$module$build$src$core$variables,generateUniqueName$$module$build$src$core$variables,generateUniqueNameInternal$$module$build$src$core$variables,generateUniqueNameFromOptions$$module$build$src$core$variables,\ncreateVariableButtonHandler$$module$build$src$core$variables,promptName$$module$build$src$core$variables,nameUsedWithOtherType$$module$build$src$core$variables,nameUsedWithAnyType$$module$build$src$core$variables,nameUsedWithConflictingParam$$module$build$src$core$variables,checkForConflictingParamWithProcedureModels$$module$build$src$core$variables,checkForConflictingParamWithLegacyProcedures$$module$build$src$core$variables,generateVariableFieldDom$$module$build$src$core$variables,createVariable$$module$build$src$core$variables,\ngetAddedVariables$$module$build$src$core$variables,compareByName$$module$build$src$core$variables,getVariableUsesById$$module$build$src$core$variables,save$$module$build$src$core$serialization$blocks,saveAttributes$$module$build$src$core$serialization$blocks,saveCoords$$module$build$src$core$serialization$blocks,saveExtraState$$module$build$src$core$serialization$blocks,saveIcons$$module$build$src$core$serialization$blocks,saveFields$$module$build$src$core$serialization$blocks,saveInputBlocks$$module$build$src$core$serialization$blocks,\nsaveNextBlocks$$module$build$src$core$serialization$blocks,saveConnection$$module$build$src$core$serialization$blocks,append$$module$build$src$core$serialization$blocks,appendInternal$$module$build$src$core$serialization$blocks,appendPrivate$$module$build$src$core$serialization$blocks,checkNewVariables$$module$build$src$core$serialization$blocks,loadCoords$$module$build$src$core$serialization$blocks,loadAttributes$$module$build$src$core$serialization$blocks,loadExtraState$$module$build$src$core$serialization$blocks,\ntryToConnectParent$$module$build$src$core$serialization$blocks,loadIcons$$module$build$src$core$serialization$blocks,loadFields$$module$build$src$core$serialization$blocks,loadInputBlocks$$module$build$src$core$serialization$blocks,loadNextBlocks$$module$build$src$core$serialization$blocks,loadConnection$$module$build$src$core$serialization$blocks,initBlock$$module$build$src$core$serialization$blocks,hasBubble$$module$build$src$core$interfaces$i_has_bubble,toRadians$$module$build$src$core$utils$math,\ntoDegrees$$module$build$src$core$utils$math,clamp$$module$build$src$core$utils$math,createDom$$module$build$src$core$dropdowndiv,setBoundsElement$$module$build$src$core$dropdowndiv,getOwner$$module$build$src$core$dropdowndiv,getContentDiv$$module$build$src$core$dropdowndiv,clearContent$$module$build$src$core$dropdowndiv,setColour$$module$build$src$core$dropdowndiv,showPositionedByBlock$$module$build$src$core$dropdowndiv,showPositionedByField$$module$build$src$core$dropdowndiv,getScaledBboxOfBlock$$module$build$src$core$dropdowndiv,\ngetScaledBboxOfField$$module$build$src$core$dropdowndiv,showPositionedByRect$$module$build$src$core$dropdowndiv,show$$module$build$src$core$dropdowndiv,getPositionBelowMetrics$$module$build$src$core$dropdowndiv,getPositionAboveMetrics$$module$build$src$core$dropdowndiv,getPositionTopOfPageMetrics$$module$build$src$core$dropdowndiv,getPositionX$$module$build$src$core$dropdowndiv,isVisible$$module$build$src$core$dropdowndiv,hideIfOwner$$module$build$src$core$dropdowndiv,hide$$module$build$src$core$dropdowndiv,\nhideWithoutAnimation$$module$build$src$core$dropdowndiv,positionInternal$$module$build$src$core$dropdowndiv,repositionForWindowResize$$module$build$src$core$dropdowndiv,shortestStringLength$$module$build$src$core$utils$string,commonWordPrefix$$module$build$src$core$utils$string,commonWordSuffix$$module$build$src$core$utils$string,wrapLine$$module$build$src$core$utils$string,wrapScore$$module$build$src$core$utils$string,wrapMutate$$module$build$src$core$utils$string,wrapToText$$module$build$src$core$utils$string,\nsetCustomTooltip$$module$build$src$core$tooltip,getCustomTooltip$$module$build$src$core$tooltip,isVisible$$module$build$src$core$tooltip,getDiv$$module$build$src$core$tooltip,getTooltipOfObject$$module$build$src$core$tooltip,getTargetObject$$module$build$src$core$tooltip,createDom$$module$build$src$core$tooltip,bindMouseEvents$$module$build$src$core$tooltip,unbindMouseEvents$$module$build$src$core$tooltip,onMouseOver$$module$build$src$core$tooltip,onMouseOut$$module$build$src$core$tooltip,onMouseMove$$module$build$src$core$tooltip,\ndispose$$module$build$src$core$tooltip,hide$$module$build$src$core$tooltip,block$$module$build$src$core$tooltip,unblock$$module$build$src$core$tooltip,renderContent$$module$build$src$core$tooltip,renderDefaultContent$$module$build$src$core$tooltip,getPosition$$module$build$src$core$tooltip,show$$module$build$src$core$tooltip,getHsvSaturation$$module$build$src$core$utils$colour,setHsvSaturation$$module$build$src$core$utils$colour,getHsvValue$$module$build$src$core$utils$colour,setHsvValue$$module$build$src$core$utils$colour,\nparse$$module$build$src$core$utils$colour,rgbToHex$$module$build$src$core$utils$colour,hexToRgb$$module$build$src$core$utils$colour,hsvToHex$$module$build$src$core$utils$colour,blend$$module$build$src$core$utils$colour,hueToHex$$module$build$src$core$utils$colour,tokenizeInterpolationInternal$$module$build$src$core$utils$parsing,tokenizeInterpolation$$module$build$src$core$utils$parsing,replaceMessageReferences$$module$build$src$core$utils$parsing,checkMessageReferences$$module$build$src$core$utils$parsing,\nparseBlockColour$$module$build$src$core$utils$parsing,getDiv$$module$build$src$core$widgetdiv,testOnly_setDiv$$module$build$src$core$widgetdiv,createDom$$module$build$src$core$widgetdiv,show$$module$build$src$core$widgetdiv,hide$$module$build$src$core$widgetdiv,isVisible$$module$build$src$core$widgetdiv,hideIfOwner$$module$build$src$core$widgetdiv,hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv,positionInternal$$module$build$src$core$widgetdiv,positionWithAnchor$$module$build$src$core$widgetdiv,\ncalculateX$$module$build$src$core$widgetdiv,calculateY$$module$build$src$core$widgetdiv,isRepositionable$$module$build$src$core$widgetdiv,repositionForWindowResize$$module$build$src$core$widgetdiv,getCurrentBlock$$module$build$src$core$contextmenu,setCurrentBlock$$module$build$src$core$contextmenu,show$$module$build$src$core$contextmenu,populate_$$module$build$src$core$contextmenu,position_$$module$build$src$core$contextmenu,createWidget_$$module$build$src$core$contextmenu,haltPropagation$$module$build$src$core$contextmenu,\nhide$$module$build$src$core$contextmenu,dispose$$module$build$src$core$contextmenu,mouseToWorkspacePoint$$module$build$src$core$utils$drag,start$$module$build$src$core$utils$drag,move$$module$build$src$core$utils$drag,workspaceToDom$$module$build$src$core$xml,saveWorkspaceComment$$module$build$src$core$xml,variablesToDom$$module$build$src$core$xml,blockToDomWithXY$$module$build$src$core$xml,fieldToDom$$module$build$src$core$xml,allFieldsToDom$$module$build$src$core$xml,blockToDom$$module$build$src$core$xml,\ncloneShadow$$module$build$src$core$xml,domToText$$module$build$src$core$xml,domToPrettyText$$module$build$src$core$xml,clearWorkspaceAndLoadFromXml$$module$build$src$core$xml,loadWorkspaceComment$$module$build$src$core$xml,appendDomToWorkspace$$module$build$src$core$xml,domToBlockInternal$$module$build$src$core$xml,domToVariables$$module$build$src$core$xml,mapSupportedXmlTags$$module$build$src$core$xml,applyMutationTagNodes$$module$build$src$core$xml,applyCommentTagNodes$$module$build$src$core$xml,\napplyDataTagNodes$$module$build$src$core$xml,applyFieldTagNodes$$module$build$src$core$xml,findChildBlocks$$module$build$src$core$xml,applyInputTagNodes$$module$build$src$core$xml,applyNextTagNodes$$module$build$src$core$xml,domToBlockHeadless$$module$build$src$core$xml,domToField$$module$build$src$core$xml,deleteNext$$module$build$src$core$xml,isElement$$module$build$src$core$xml,register$$module$build$src$core$field_registry,unregister$$module$build$src$core$field_registry,fromJsonInternal$$module$build$src$core$field_registry,\nisImageProperties$$module$build$src$core$field_dropdown,unregister$$module$build$src$core$extensions,isRegistered$$module$build$src$core$extensions,apply$$module$build$src$core$extensions,checkNoMutatorProperties$$module$build$src$core$extensions,checkXmlHooks$$module$build$src$core$extensions,checkJsonHooks$$module$build$src$core$extensions,checkMutatorDialog$$module$build$src$core$extensions,checkHasFunctionPair$$module$build$src$core$extensions,checkHasMutatorProperties$$module$build$src$core$extensions,\ngetMutatorProperties$$module$build$src$core$extensions,mutatorPropertiesMatch$$module$build$src$core$extensions,runAfterPageLoad$$module$build$src$core$extensions,checkDropdownOptionsInTable$$module$build$src$core$extensions,extensionParentTooltip$$module$build$src$core$extensions,point$$module$build$src$core$utils$svg_paths,curve$$module$build$src$core$utils$svg_paths,moveTo$$module$build$src$core$utils$svg_paths,moveBy$$module$build$src$core$utils$svg_paths,lineTo$$module$build$src$core$utils$svg_paths,\nline$$module$build$src$core$utils$svg_paths,lineOnAxis$$module$build$src$core$utils$svg_paths,arc$$module$build$src$core$utils$svg_paths,connectReciprocally$$module$build$src$core$connection,getSingleConnection$$module$build$src$core$connection,getConnectionForOrphanedOutput$$module$build$src$core$connection,isIcon$$module$build$src$core$interfaces$i_icon,isCommentIcon$$module$build$src$core$interfaces$i_comment_icon,disposeUiEffect$$module$build$src$core$block_animations,disposeUiStep$$module$build$src$core$block_animations,\nconnectionUiEffect$$module$build$src$core$block_animations,disconnectUiEffect$$module$build$src$core$block_animations,disconnectUiStep$$module$build$src$core$block_animations,disconnectUiStop$$module$build$src$core$block_animations,moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster,blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster,blockIsInSnapRadius$$module$build$src$core$clipboard$block_paster,bumpObjectIntoBounds$$module$build$src$core$bump_objects,bumpIntoBoundsHandler$$module$build$src$core$bump_objects,\nextractObjectFromEvent$$module$build$src$core$bump_objects,bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects,isDeletable$$module$build$src$core$interfaces$i_deletable,getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy,navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy,navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy,register$$module$build$src$core$icons$registry,unregister$$module$build$src$core$icons$registry,\nisDraggable$$module$build$src$core$interfaces$i_draggable,isAutoHideable$$module$build$src$core$interfaces$i_autohideable,isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block,isObservable$$module$build$src$core$interfaces$i_observable,allProcedures$$module$build$src$core$procedures,procTupleComparator$$module$build$src$core$procedures,isLegalName$$module$build$src$core$procedures,isNameUsed$$module$build$src$core$procedures,xmlFlyoutCategory$$module$build$src$core$procedures,internalFlyoutCategory$$module$build$src$core$procedures,\nflyoutCategory$$module$build$src$core$procedures,updateMutatorFlyout$$module$build$src$core$procedures,mutatorOpenListener$$module$build$src$core$procedures,mutatorChangeListener$$module$build$src$core$procedures,getCallers$$module$build$src$core$procedures,blockIsModernCallerFor$$module$build$src$core$procedures,isDynamicShape$$module$build$src$core$renderers$common$constants,isPuzzleTab$$module$build$src$core$renderers$common$constants,isNotch$$module$build$src$core$renderers$common$constants,register$$module$build$src$core$renderers$common$block_rendering,\nunregister$$module$build$src$core$renderers$common$block_rendering,init$$module$build$src$core$renderers$common$block_rendering,stringButtonClickHandler$$module$build$src$core$variables_dynamic,numberButtonClickHandler$$module$build$src$core$variables_dynamic,colourButtonClickHandler$$module$build$src$core$variables_dynamic,internalFlyoutCategory$$module$build$src$core$variables_dynamic,flyoutCategory$$module$build$src$core$variables_dynamic,xmlFlyoutCategory$$module$build$src$core$variables_dynamic,\nflyoutCategoryBlocks$$module$build$src$core$variables_dynamic,resizeSvgContents$$module$build$src$core$workspace_svg,copy$$module$build$src$core$clipboard,getLastCopiedData$$module$build$src$core$clipboard,setLastCopiedData$$module$build$src$core$clipboard,getLastCopiedWorkspace$$module$build$src$core$clipboard,setLastCopiedWorkspace$$module$build$src$core$clipboard,getLastCopiedLocation$$module$build$src$core$clipboard,setLastCopiedLocation$$module$build$src$core$clipboard,paste$$module$build$src$core$clipboard,\npasteFromData$$module$build$src$core$clipboard,isCopyable$$module$build$src$core$interfaces$i_copyable,registerEscape$$module$build$src$core$shortcut_items,registerDelete$$module$build$src$core$shortcut_items,isCopyable$$module$build$src$core$shortcut_items,isCuttable$$module$build$src$core$shortcut_items,registerCopy$$module$build$src$core$shortcut_items,registerCut$$module$build$src$core$shortcut_items,registerPaste$$module$build$src$core$shortcut_items,registerUndo$$module$build$src$core$shortcut_items,\nregisterRedo$$module$build$src$core$shortcut_items,registerDefaultShortcuts$$module$build$src$core$shortcut_items,saveProcedure$$module$build$src$core$serialization$procedures,loadProcedure$$module$build$src$core$serialization$procedures,save$$module$build$src$core$serialization$workspaces,load$$module$build$src$core$serialization$workspaces,inject$$module$build$src$core$inject,createDom$$module$build$src$core$inject,createMainWorkspace$$module$build$src$core$inject,init$$module$build$src$core$inject,\nbindDocumentEvents$$module$build$src$core$inject,loadSounds$$module$build$src$core$inject,isFullBlockField$$module$build$src$core$contextmenu_items,registerUndo$$module$build$src$core$contextmenu_items,registerRedo$$module$build$src$core$contextmenu_items,registerCleanup$$module$build$src$core$contextmenu_items,toggleOption_$$module$build$src$core$contextmenu_items,registerCollapse$$module$build$src$core$contextmenu_items,registerExpand$$module$build$src$core$contextmenu_items,addDeletableBlocks_$$module$build$src$core$contextmenu_items,\ngetDeletableBlocks_$$module$build$src$core$contextmenu_items,deleteNext_$$module$build$src$core$contextmenu_items,registerDeleteAll$$module$build$src$core$contextmenu_items,registerWorkspaceOptions_$$module$build$src$core$contextmenu_items,registerDuplicate$$module$build$src$core$contextmenu_items,registerComment$$module$build$src$core$contextmenu_items,registerInline$$module$build$src$core$contextmenu_items,registerCollapseExpandBlock$$module$build$src$core$contextmenu_items,registerDisable$$module$build$src$core$contextmenu_items,\nregisterDelete$$module$build$src$core$contextmenu_items,registerHelp$$module$build$src$core$contextmenu_items,registerCommentDelete$$module$build$src$core$contextmenu_items,registerCommentDuplicate$$module$build$src$core$contextmenu_items,registerCommentCreate$$module$build$src$core$contextmenu_items,registerBlockOptions_$$module$build$src$core$contextmenu_items,registerCommentOptions$$module$build$src$core$contextmenu_items,registerDefaultOptions$$module$build$src$core$contextmenu_items,isPaster$$module$build$src$core$interfaces$i_paster,\nisRenderedElement$$module$build$src$core$interfaces$i_rendered_element,isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item,hideChaff$$module$build$src$core$blockly,isFocusableTree$$module$build$src$core$interfaces$i_focusable_tree,$jscomp;\nregister$$module$build$src$core$registry=function(a,b,c,d){if(!(a instanceof Type$$module$build$src$core$registry)&&typeof a!==\"string\"||`${a}`.trim()===\"\")throw Error('Invalid type \"'+a+'\". The type must be a non-empty string or a Blockly.registry.Type.');a=`${a}`.toLowerCase();if(typeof b!==\"string\"||b.trim()===\"\")throw Error('Invalid name \"'+b+'\". The name must be a non-empty string.');const e=b.toLowerCase();if(!c)throw Error(\"Can not register a null value\");let f=typeMap$$module$build$src$core$registry[a],\ng=nameMap$$module$build$src$core$registry[a];f||(f=typeMap$$module$build$src$core$registry[a]=Object.create(null),g=nameMap$$module$build$src$core$registry[a]=Object.create(null));validate$$module$build$src$core$registry(a,c);if(!d&&f[e]&&f[e]!==c)throw Error('Name \"'+e+'\" with type \"'+a+'\" already registered.');f[e]=c;g[e]=b};\nvalidate$$module$build$src$core$registry=function(a,b){switch(a){case String(Type$$module$build$src$core$registry.FIELD):if(typeof b.fromJson!==\"function\")throw Error('Type \"'+a+'\" must have a fromJson function');}};\nunregister$$module$build$src$core$registry=function(a,b){a=`${a}`.toLowerCase();b=b.toLowerCase();const c=typeMap$$module$build$src$core$registry[a];c&&c[b]?(delete typeMap$$module$build$src$core$registry[a][b],delete nameMap$$module$build$src$core$registry[a][b]):console.warn(\"Unable to unregister [\"+b+\"][\"+a+\"] from the registry.\")};\ngetItem$$module$build$src$core$registry=function(a,b,c){a=`${a}`.toLowerCase();b=b.toLowerCase();const d=typeMap$$module$build$src$core$registry[a];if(!d||!d[b]){b=\"Unable to find [\"+b+\"][\"+a+\"] in the registry.\";if(c)throw Error(b+\" You must require or register a \"+a+\" plugin.\");console.warn(b);return null}return d[b]};hasItem$$module$build$src$core$registry=function(a,b){a=`${a}`.toLowerCase();b=b.toLowerCase();return(a=typeMap$$module$build$src$core$registry[a])?!!a[b]:!1};\ngetClass$$module$build$src$core$registry=function(a,b,c){return getItem$$module$build$src$core$registry(a,b,c)};getObject$$module$build$src$core$registry=function(a,b,c){return getItem$$module$build$src$core$registry(a,b,c)};\ngetAllItems$$module$build$src$core$registry=function(a,b,c){a=`${a}`.toLowerCase();var d=typeMap$$module$build$src$core$registry[a];if(!d){d=`Unable to find [${a}] in the registry.`;if(c)throw Error(`${d} You must require or register a ${a} plugin.`);console.warn(d);return null}if(!b)return d;a=nameMap$$module$build$src$core$registry[a];c=Object.create(null);for(const e of Object.keys(d))c[a[e]]=d[e];return c};\ngetClassFromOptions$$module$build$src$core$registry=function(a,b,c){b=b.plugins[String(a)]||DEFAULT$$module$build$src$core$registry;return typeof b===\"function\"?b:getClass$$module$build$src$core$registry(a,b,c)};longStart$$module$build$src$core$touch=function(a,b){longStop$$module$build$src$core$touch();longPid_$$module$build$src$core$touch=setTimeout(function(){b&&b.handleRightClick(a)},LONGPRESS$$module$build$src$core$touch)};\nlongStop$$module$build$src$core$touch=function(){longPid_$$module$build$src$core$touch&&(clearTimeout(longPid_$$module$build$src$core$touch),longPid_$$module$build$src$core$touch=0)};clearTouchIdentifier$$module$build$src$core$touch=function(){touchIdentifier_$$module$build$src$core$touch=null};shouldHandleEvent$$module$build$src$core$touch=function(a){return!a.type.startsWith(\"pointer\")||a instanceof PointerEvent&&checkTouchIdentifier$$module$build$src$core$touch(a)};\ngetTouchIdentifierFromEvent$$module$build$src$core$touch=function(a){return`${a.pointerId}`};checkTouchIdentifier$$module$build$src$core$touch=function(a){const b=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);return touchIdentifier_$$module$build$src$core$touch?touchIdentifier_$$module$build$src$core$touch===b:a.type===\"pointerdown\"?(touchIdentifier_$$module$build$src$core$touch=b,!0):!1};\nconditionalBind$$module$build$src$core$browser_events=function(a,b,c,d,e){function f(h){if(e||shouldHandleEvent$$module$build$src$core$touch(h))c?d.call(c,h):d(h)}const g=[];if(b in TOUCH_MAP$$module$build$src$core$touch)for(let h=0;h{setTimeout(fireNow$$module$build$src$core$events$utils,0)})}catch(b){setTimeout(fireNow$$module$build$src$core$events$utils,0)}enqueueEvent$$module$build$src$core$events$utils(a)}};\nfireNow$$module$build$src$core$events$utils=function(){const a=filter$$module$build$src$core$events$utils(FIRE_QUEUE$$module$build$src$core$events$utils);FIRE_QUEUE$$module$build$src$core$events$utils.length=0;for(const b of a){if(!b.workspaceId)continue;let c;(c=getWorkspaceById$$module$build$src$core$common(b.workspaceId))==null||c.fireChangeListener(b)}};\nenqueueEvent$$module$build$src$core$events$utils=function(a){if(isBlockChange$$module$build$src$core$events$predicates(a)&&a.element===\"mutation\"){let b;for(b=FIRE_QUEUE$$module$build$src$core$events$utils.length;b>0;b--){const c=FIRE_QUEUE$$module$build$src$core$events$utils[b-1];if(c.group!==a.group||c.workspaceId!==a.workspaceId||!isBlockMove$$module$build$src$core$events$predicates(c)||c.newParentId!==a.blockId)break}FIRE_QUEUE$$module$build$src$core$events$utils.splice(b,0,a)}else FIRE_QUEUE$$module$build$src$core$events$utils.push(a)};\nfilter$$module$build$src$core$events$utils=function(a){const b=[];for(const c of a)if(a=b[b.length-1],!c.isNull())if(a&&a.workspaceId===c.workspaceId&&a.group===c.group)if(isBlockMove$$module$build$src$core$events$predicates(c)&&isBlockMove$$module$build$src$core$events$predicates(a)&&c.blockId===a.blockId){if(a.newParentId=c.newParentId,a.newInputName=c.newInputName,a.newCoordinate=c.newCoordinate,a.reason||c.reason){let d,e;a.reason=Array.from(new Set(((d=a.reason)!=null?d:[]).concat((e=c.reason)!=\nnull?e:[])))}}else isBlockChange$$module$build$src$core$events$predicates(c)&&isBlockChange$$module$build$src$core$events$predicates(a)&&c.blockId===a.blockId&&c.element===a.element&&c.name===a.name?a.newValue=c.newValue:isViewportChange$$module$build$src$core$events$predicates(c)&&isViewportChange$$module$build$src$core$events$predicates(a)?(a.viewTop=c.viewTop,a.viewLeft=c.viewLeft,a.scale=c.scale,a.oldScale=c.oldScale):isClick$$module$build$src$core$events$predicates(c)&&isBubbleOpen$$module$build$src$core$events$predicates(a)||\nb.push(c);else b.push(c);return a=b.filter(c=>!c.isNull())};clearPendingUndo$$module$build$src$core$events$utils=function(){for(let a=0,b;b=FIRE_QUEUE$$module$build$src$core$events$utils[a];a++)b.recordUndo=!1};$.disable$$module$build$src$core$events$utils=function(){disabled$$module$build$src$core$events$utils++};$.enable$$module$build$src$core$events$utils=function(){disabled$$module$build$src$core$events$utils--};\nisEnabled$$module$build$src$core$events$utils=function(){return disabled$$module$build$src$core$events$utils===0};$.getGroup$$module$build$src$core$events$utils=function(){return group$$module$build$src$core$events$utils};$.setGroup$$module$build$src$core$events$utils=function(a){TEST_ONLY$$module$build$src$core$events$utils.setGroupInternal(a)};\nsetGroupInternal$$module$build$src$core$events$utils=function(a){group$$module$build$src$core$events$utils=typeof a===\"boolean\"?a?genUid$$module$build$src$core$utils$idgenerator():\"\":a};getDescendantIds$$module$build$src$core$events$utils=function(a){const b=[];a=a.getDescendants(!1);for(let c=0,d;d=a[c];c++)b[c]=d.id;return b};\nfromJson$$module$build$src$core$events$utils=function(a,b){const c=get$$module$build$src$core$events$utils(a.type);if(!c)throw Error(\"Unknown event type.\");return c.fromJson(a,b)};get$$module$build$src$core$events$utils=function(a){const b=getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,a);if(!b)throw Error(`Event type ${a} not found in registry.`);return b};\ndisableOrphans$$module$build$src$core$events$utils=function(a){if((isBlockMove$$module$build$src$core$events$predicates(a)||isBlockCreate$$module$build$src$core$events$predicates(a))&&a.workspaceId){var b=getWorkspaceById$$module$build$src$core$common(a.workspaceId);if(!a.blockId)throw Error(\"Encountered a blockEvent without a proper blockId\");if(a=b.getBlockById(a.blockId)){const c=recordUndo$$module$build$src$core$events$utils;try{recordUndo$$module$build$src$core$events$utils=!1;const d=a.getParent();\nif(d&&!d.hasDisabledReason(ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils)){const e=a.getDescendants(!1);for(let f=0,g;g=e[f];f++)g.setDisabledReason(!1,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils)}else if((a.outputConnection||a.previousConnection)&&!b.isDragging()){do a.setDisabledReason(!0,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils),a=a.getNextBlock();while(a)}}finally{recordUndo$$module$build$src$core$events$utils=c}}}};\ncreateSvgElement$$module$build$src$core$utils$dom=function(a,b,c){a=document.createElementNS(SVG_NS$$module$build$src$core$utils$dom,`${a}`);for(const d in b)a.setAttribute(d,`${b[d]}`);c&&c.appendChild(a);return a};addClass$$module$build$src$core$utils$dom=function(a,b){b=b.split(\" \");if(b.every(c=>a.classList.contains(c)))return!1;a.classList.add(...b);return!0};removeClasses$$module$build$src$core$utils$dom=function(a,b){a.classList.remove(...b.split(\" \"))};\nremoveClass$$module$build$src$core$utils$dom=function(a,b){b=b.split(\" \");if(b.every(c=>!a.classList.contains(c)))return!1;a.classList.remove(...b);return!0};hasClass$$module$build$src$core$utils$dom=function(a,b){return a.classList.contains(b)};removeNode$$module$build$src$core$utils$dom=function(a){return a&&a.parentNode?a.parentNode.removeChild(a):null};\ninsertAfter$$module$build$src$core$utils$dom=function(a,b){const c=b.nextSibling;b=b.parentNode;if(!b)throw Error(\"Reference node has no parent.\");c?b.insertBefore(a,c):b.appendChild(a)};setCssTransform$$module$build$src$core$utils$dom=function(a,b){a.style.transform=b;a.style[\"-webkit-transform\"]=b};\nstartTextWidthCache$$module$build$src$core$utils$dom=function(){cacheReference$$module$build$src$core$utils$dom++;cacheWidths$$module$build$src$core$utils$dom||(cacheWidths$$module$build$src$core$utils$dom=Object.create(null))};stopTextWidthCache$$module$build$src$core$utils$dom=function(){cacheReference$$module$build$src$core$utils$dom--;cacheReference$$module$build$src$core$utils$dom||(cacheWidths$$module$build$src$core$utils$dom=null)};\ngetTextWidth$$module$build$src$core$utils$dom=function(a){const b=a.textContent+\"\\n\"+a.className.baseVal;var c;if(cacheWidths$$module$build$src$core$utils$dom&&(c=cacheWidths$$module$build$src$core$utils$dom[b]))return c;c=window.getComputedStyle(a);c=getFastTextWidthWithSizeString$$module$build$src$core$utils$dom(a,c.fontSize,c.fontWeight,c.fontFamily);cacheWidths$$module$build$src$core$utils$dom&&(cacheWidths$$module$build$src$core$utils$dom[b]=c);return c};\ngetFastTextWidth$$module$build$src$core$utils$dom=function(a,b,c,d){return getFastTextWidthWithSizeString$$module$build$src$core$utils$dom(a,b+\"pt\",c,d)};\ngetFastTextWidthWithSizeString$$module$build$src$core$utils$dom=function(a,b,c,d){const e=a.textContent;a=e+\"\\n\"+a.className.baseVal;var f;if(cacheWidths$$module$build$src$core$utils$dom&&(f=cacheWidths$$module$build$src$core$utils$dom[a]))return f;canvasContext$$module$build$src$core$utils$dom||(f=document.createElement(\"canvas\"),f.className=\"blocklyComputeCanvas\",document.body.appendChild(f),canvasContext$$module$build$src$core$utils$dom=f.getContext(\"2d\"));e&&canvasContext$$module$build$src$core$utils$dom?\n(canvasContext$$module$build$src$core$utils$dom.font=c+\" \"+b+\" \"+d,f=canvasContext$$module$build$src$core$utils$dom.measureText(e).width):f=0;cacheWidths$$module$build$src$core$utils$dom&&(cacheWidths$$module$build$src$core$utils$dom[a]=f);return f};\nmeasureFontMetrics$$module$build$src$core$utils$dom=function(a,b,c,d){const e=document.createElement(\"span\");e.style.font=c+\" \"+b+\" \"+d;e.textContent=a;a=document.createElement(\"div\");a.style.width=\"1px\";a.style.height=\"0\";b=document.createElement(\"div\");b.style.display=\"flex\";b.style.position=\"fixed\";b.style.top=\"0\";b.style.left=\"0\";b.appendChild(e);b.appendChild(a);document.body.appendChild(b);c={height:0,baseline:0};try{b.style.alignItems=\"baseline\",c.baseline=a.offsetTop-e.offsetTop,b.style.alignItems=\n\"flex-end\",c.height=a.offsetTop-e.offsetTop}finally{document.body.removeChild(b)}return c};$.getFocusManager$$module$build$src$core$focus_manager=function(){return FocusManager$$module$build$src$core$focus_manager.getFocusManager()};isFocusableNode$$module$build$src$core$interfaces$i_focusable_node=function(a){return a&&typeof a.getFocusableElement===\"function\"&&typeof a.getFocusableTree===\"function\"&&typeof a.onNodeFocus===\"function\"&&typeof a.onNodeBlur===\"function\"&&typeof a.canBeFocused===\"function\"};\nisSelectable$$module$build$src$core$interfaces$i_selectable=function(a){return isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(a)&&typeof a.id===\"string\"&&typeof a.workspace===\"object\"&&typeof a.select===\"function\"&&typeof a.unselect===\"function\"};\ndeepMerge$$module$build$src$core$utils$object=function(a,b){for(const c in b)b[c]!==null&&Array.isArray(b[c])?a[c]=deepMerge$$module$build$src$core$utils$object(a[c]||[],b[c]):a[c]=b[c]!==null&&typeof b[c]===\"object\"?deepMerge$$module$build$src$core$utils$object(a[c]||Object.create(null),b[c]):b[c];return a};getWorkspaceById$$module$build$src$core$common=function(a){return WorkspaceDB_$$module$build$src$core$common[a]||null};\ngetAllWorkspaces$$module$build$src$core$common=function(){const a=[];for(const b in WorkspaceDB_$$module$build$src$core$common)a.push(WorkspaceDB_$$module$build$src$core$common[b]);return a};registerWorkspace$$module$build$src$core$common=function(a){WorkspaceDB_$$module$build$src$core$common[a.id]=a};unregisterWorkpace$$module$build$src$core$common=function(a){delete WorkspaceDB_$$module$build$src$core$common[a.id]};getMainWorkspace$$module$build$src$core$common=function(){return mainWorkspace$$module$build$src$core$common};\nsetMainWorkspace$$module$build$src$core$common=function(a){mainWorkspace$$module$build$src$core$common=a};getSelected$$module$build$src$core$common=function(){const a=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode();return a&&isSelectable$$module$build$src$core$interfaces$i_selectable(a)?a:null};setSelected$$module$build$src$core$common=function(a){$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)};\nfireSelectedEvent$$module$build$src$core$common=function(a){const b=getSelected$$module$build$src$core$common();let c,d,e,f;const g=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.SELECTED))((c=b==null?void 0:b.id)!=null?c:null,(d=a==null?void 0:a.id)!=null?d:null,(f=(e=a==null?void 0:a.workspace.id)!=null?e:b==null?void 0:b.workspace.id)!=null?f:\"\");fire$$module$build$src$core$events$utils(g)};getParentContainer$$module$build$src$core$common=function(){return parentContainer$$module$build$src$core$common};\nsetParentContainer$$module$build$src$core$common=function(a){parentContainer$$module$build$src$core$common=a};\nsvgResize$$module$build$src$core$common=function(a){for(;a.options.parentWorkspace;)a=a.options.parentWorkspace;const b=a.getParentSvg(),c=a.getCachedParentSvgSize();var d=b.parentElement;if(d instanceof HTMLElement){var e=d.offsetWidth;d=d.offsetHeight;c.width!==e&&(b.setAttribute(\"width\",e+\"px\"),a.setCachedParentSvgSize(e,null));c.height!==d&&(b.setAttribute(\"height\",d+\"px\"),a.setCachedParentSvgSize(null,d));a.resize()}};\ngetBlockTypeCounts$$module$build$src$core$common=function(a,b){const c=Object.create(null),d=a.getDescendants(!0);b&&(a=a.getNextBlock())&&(a=d.indexOf(a),d.splice(a,d.length-a));for(let e=0,f;f=d[e];e++)c[f.type]?c[f.type]++:c[f.type]=1;return c};jsonInitFactory$$module$build$src$core$common=function(a){return function(){this.jsonInit(a)}};defineBlocksWithJsonArray$$module$build$src$core$common=function(a){TEST_ONLY$$module$build$src$core$common.defineBlocksWithJsonArrayInternal(a)};\ndefineBlocksWithJsonArrayInternal$$module$build$src$core$common=function(a){$.defineBlocks$$module$build$src$core$common($.createBlockDefinitionsFromJsonArray$$module$build$src$core$common(a))};\n$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common=function(a){const b={};for(let c=0;c>>/g,a),content$$module$build$src$core$css=\"\",a=document.createElement(\"style\"),a.id=\"blockly-common-style\",b=document.createTextNode(b),a.appendChild(b),document.head.insertBefore(a,document.head.firstChild)))};getSize$$module$build$src$core$utils$style=function(a){return TEST_ONLY$$module$build$src$core$utils$style.getSizeInternal(a)};\ngetSizeInternal$$module$build$src$core$utils$style=function(a){if(getComputedStyle$$module$build$src$core$utils$style(a,\"display\")!==\"none\")return getSizeWithDisplay$$module$build$src$core$utils$style(a);const b=a.style,c=b.display,d=b.visibility,e=b.position;b.visibility=\"hidden\";b.position=\"absolute\";b.display=\"inline\";const f=a.offsetWidth;a=a.offsetHeight;b.display=c;b.position=e;b.visibility=d;return new Size$$module$build$src$core$utils$size(f,a)};\ngetSizeWithDisplay$$module$build$src$core$utils$style=function(a){return new Size$$module$build$src$core$utils$size(a.offsetWidth,a.offsetHeight)};getComputedStyle$$module$build$src$core$utils$style=function(a,b){a=window.getComputedStyle(a);return a[b]||a.getPropertyValue(b)};\ngetPageOffset$$module$build$src$core$utils$style=function(a){const b=new Coordinate$$module$build$src$core$utils$coordinate(0,0);a=a.getBoundingClientRect();var c=document.documentElement;c=new Coordinate$$module$build$src$core$utils$coordinate(window.pageXOffset||c.scrollLeft,window.pageYOffset||c.scrollTop);b.x=a.left+c.x;b.y=a.top+c.y;return b};\ngetViewportPageOffset$$module$build$src$core$utils$style=function(){const a=document.body,b=document.documentElement;return new Coordinate$$module$build$src$core$utils$coordinate(a.scrollLeft||b.scrollLeft,a.scrollTop||b.scrollTop)};\ngetBorderBox$$module$build$src$core$utils$style=function(a){const b=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderLeftWidth\")),c=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderRightWidth\")),d=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderTopWidth\"));a=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderBottomWidth\"));return new Rect$$module$build$src$core$utils$rect(d,a,b,c)};\nscrollIntoContainerView$$module$build$src$core$utils$style=function(a,b,c){a=getContainerOffsetToScrollInto$$module$build$src$core$utils$style(a,b,c);b.scrollLeft=a.x;b.scrollTop=a.y};\ngetContainerOffsetToScrollInto$$module$build$src$core$utils$style=function(a,b,c){var d=getPageOffset$$module$build$src$core$utils$style(a),e=getPageOffset$$module$build$src$core$utils$style(b),f=getBorderBox$$module$build$src$core$utils$style(b);const g=d.x-e.x-f.left;d=d.y-e.y-f.top;e=getSizeWithDisplay$$module$build$src$core$utils$style(a);a=b.clientWidth-e.width;e=b.clientHeight-e.height;f=b.scrollLeft;b=b.scrollTop;c?(f+=g-a/2,b+=d-e/2):(f+=Math.min(g,Math.max(g-a,0)),b+=Math.min(d,Math.max(d-\ne,0)));return new Coordinate$$module$build$src$core$utils$coordinate(f,b)};\ngetRelativeXY$$module$build$src$core$utils$svg_math=function(a){const b=new Coordinate$$module$build$src$core$utils$coordinate(0,0);var c=a.x&&a.getAttribute(\"x\");const d=a.y&&a.getAttribute(\"y\");c&&(b.x=parseInt(c));d&&(b.y=parseInt(d));if(c=(c=a.getAttribute(\"transform\"))&&c.match(XY_REGEX$$module$build$src$core$utils$svg_math))b.x+=Number(c[1]),c[3]&&(b.y+=Number(c[3]));(a=a.getAttribute(\"style\"))&&a.includes(\"translate\")&&(a=a.match(XY_STYLE_REGEX$$module$build$src$core$utils$svg_math))&&(b.x+=\nNumber(a[1]),a[3]&&(b.y+=Number(a[3])));return b};getInjectionDivXY$$module$build$src$core$utils$svg_math=function(a){let b=0,c=0;for(;a;){const d=getRelativeXY$$module$build$src$core$utils$svg_math(a);b+=d.x;c+=d.y;if((\" \"+(a.getAttribute(\"class\")||\"\")+\" \").includes(\" injectionDiv \"))break;a=a.parentNode}return new Coordinate$$module$build$src$core$utils$coordinate(b,c)};\ngetViewportBBox$$module$build$src$core$utils$svg_math=function(){const a=getViewportPageOffset$$module$build$src$core$utils$style();return new Rect$$module$build$src$core$utils$rect(a.y,document.documentElement.clientHeight+a.y,a.x,document.documentElement.clientWidth+a.x)};getDocumentScroll$$module$build$src$core$utils$svg_math=function(){const a=document.documentElement,b=window;return new Coordinate$$module$build$src$core$utils$coordinate(b.pageXOffset||a.scrollLeft,b.pageYOffset||a.scrollTop)};\nscreenToWsCoordinates$$module$build$src$core$utils$svg_math=function(a,b){var c=b.x;b=b.y;const d=a.getInjectionDiv().getBoundingClientRect();c=new Coordinate$$module$build$src$core$utils$coordinate(c-d.left,b-d.top);b=a.getOriginOffsetInPixels();return Coordinate$$module$build$src$core$utils$coordinate.difference(c,b).scale(1/a.scale)};\nwsToScreenCoordinates$$module$build$src$core$utils$svg_math=function(a,b){var c=b.scale(a.scale);b=c.x;c=c.y;const d=a.getInjectionDiv().getBoundingClientRect();a=a.getOriginOffsetInPixels();return new Coordinate$$module$build$src$core$utils$coordinate(b+d.left+a.x,c+d.top+a.y)};\ninjectDependencies$$module$build$src$core$utils$xml=function(a){({document:document$$module$build$src$core$utils$xml=document$$module$build$src$core$utils$xml,DOMParser:DOMParser$$module$build$src$core$utils$xml=DOMParser$$module$build$src$core$utils$xml,XMLSerializer:XMLSerializer$$module$build$src$core$utils$xml=XMLSerializer$$module$build$src$core$utils$xml}=a);domParser$$module$build$src$core$utils$xml=new DOMParser$$module$build$src$core$utils$xml;xmlSerializer$$module$build$src$core$utils$xml=\nnew XMLSerializer$$module$build$src$core$utils$xml};$.createElement$$module$build$src$core$utils$xml=function(a){return document$$module$build$src$core$utils$xml.createElementNS(NAME_SPACE$$module$build$src$core$utils$xml,a)};$.createTextNode$$module$build$src$core$utils$xml=function(a){return document$$module$build$src$core$utils$xml.createTextNode(a)};\n$.textToDom$$module$build$src$core$utils$xml=function(a){let b=domParser$$module$build$src$core$utils$xml.parseFromString(a,\"text/xml\");if(b&&b.documentElement&&!b.getElementsByTagName(\"parsererror\").length)return b.documentElement;if((b=domParser$$module$build$src$core$utils$xml.parseFromString(a,\"text/html\"))&&b.body.firstChild&&b.body.firstChild.nodeName.toLowerCase()===\"xml\")return b.body.firstChild;throw Error(`DOMParser was unable to parse: ${a}`);};\ndomToText$$module$build$src$core$utils$xml=function(a){return sanitizeText$$module$build$src$core$utils$xml(xmlSerializer$$module$build$src$core$utils$xml.serializeToString(a))};sanitizeText$$module$build$src$core$utils$xml=function(a){return a.replace(INVALID_CONTROL_CHARS$$module$build$src$core$utils$xml,b=>`&#${b.charCodeAt(0)};`)};\nconvertToolboxDefToJson$$module$build$src$core$utils$toolbox=function(a){if(!a)return null;if(a instanceof Element||typeof a===\"string\")a=parseToolboxTree$$module$build$src$core$utils$toolbox(a),a=convertToToolboxJson$$module$build$src$core$utils$toolbox(a);validateToolbox$$module$build$src$core$utils$toolbox(a);return a};\nvalidateToolbox$$module$build$src$core$utils$toolbox=function(a){const b=a.kind;a=a.contents;if(b&&b!==FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox&&b!==CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox)throw Error(\"Invalid toolbox kind \"+b+\". Please supply either \"+FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox+\" or \"+CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox);if(!a)throw Error(\"Toolbox must have a contents attribute.\");};\nconvertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox=function(a){return a?a.contents?a.contents:Array.isArray(a)&&a.length>0&&!a[0].nodeType?a:xmlToJsonArray$$module$build$src$core$utils$toolbox(a):[]};hasCategories$$module$build$src$core$utils$toolbox=function(a){return TEST_ONLY$$module$build$src$core$utils$toolbox.hasCategoriesInternal(a)};\nhasCategoriesInternal$$module$build$src$core$utils$toolbox=function(a){if(!a)return!1;const b=a.kind;return b?b===CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox:!!a.contents.filter(c=>c.kind.toUpperCase()===\"CATEGORY\").length};isCategoryCollapsible$$module$build$src$core$utils$toolbox=function(a){return a&&a.contents?!!a.contents.filter(function(b){return b.kind.toUpperCase()===\"CATEGORY\"}).length:!1};\nconvertToToolboxJson$$module$build$src$core$utils$toolbox=function(a){const b={contents:xmlToJsonArray$$module$build$src$core$utils$toolbox(a)};a instanceof Node&&addAttributes$$module$build$src$core$utils$toolbox(a,b);return b};\nxmlToJsonArray$$module$build$src$core$utils$toolbox=function(a){const b=[];let c=a.childNodes;c||(c=a);for(let d=0,e;e=c[d];d++){if(!e.tagName)continue;a={};const f=e.tagName.toUpperCase();a.kind=f;f===\"BLOCK\"?a.blockxml=e:e.childNodes&&e.childNodes.length>0&&(a.contents=xmlToJsonArray$$module$build$src$core$utils$toolbox(e));addAttributes$$module$build$src$core$utils$toolbox(e,a);b.push(a)}return b};\naddAttributes$$module$build$src$core$utils$toolbox=function(a,b){for(let c=0;c document.\");}else a instanceof Element&&(b=a);return b};\ngetStartPositionRect$$module$build$src$core$positionable_helpers=function(a,b,c,d,e,f){const g=f.scrollbar&&f.scrollbar.canScrollVertically();a.horizontal===horizontalPosition$$module$build$src$core$positionable_helpers.LEFT?(c=e.absoluteMetrics.left+c,g&&f.RTL&&(c+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness)):(c=e.absoluteMetrics.left+e.viewMetrics.width-b.width-c,g&&!f.RTL&&(c-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness));a.vertical===verticalPosition$$module$build$src$core$positionable_helpers.TOP?\na=e.absoluteMetrics.top+d:(a=e.absoluteMetrics.top+e.viewMetrics.height-b.height-d,f.scrollbar&&f.scrollbar.canScrollHorizontally()&&(a-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness));return new Rect$$module$build$src$core$utils$rect(a,a+b.height,c,c+b.width)};\ngetCornerOppositeToolbox$$module$build$src$core$positionable_helpers=function(a,b){return{horizontal:b.toolboxMetrics.position===Position$$module$build$src$core$utils$toolbox.LEFT||a.horizontalLayout&&!a.RTL?horizontalPosition$$module$build$src$core$positionable_helpers.RIGHT:horizontalPosition$$module$build$src$core$positionable_helpers.LEFT,vertical:b.toolboxMetrics.position===Position$$module$build$src$core$utils$toolbox.BOTTOM?verticalPosition$$module$build$src$core$positionable_helpers.TOP:verticalPosition$$module$build$src$core$positionable_helpers.BOTTOM}};\nbumpPositionRect$$module$build$src$core$positionable_helpers=function(a,b,c,d){const e=a.left,f=a.right-a.left,g=a.bottom-a.top;for(let h=0;hf.id!==a.id).map(f=>f.getRelativeToSurfaceXY());for(;commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster(Coordinate$$module$build$src$core$utils$coordinate.sum(c,d),e);)d.translate(b.RTL?-30:30,30);a.moveTo(Coordinate$$module$build$src$core$utils$coordinate.sum(c,\nd))};commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster=function(a,b){return b.some(c=>Math.abs(c.x-a.x)<=1&&Math.abs(c.y-a.y)<=1)};setRole$$module$build$src$core$utils$aria=function(a,b){a.setAttribute(ROLE_ATTRIBUTE$$module$build$src$core$utils$aria,b)};setState$$module$build$src$core$utils$aria=function(a,b,c){Array.isArray(c)&&(c=c.join(\" \"));a.setAttribute(ARIA_PREFIX$$module$build$src$core$utils$aria+b,`${c}`)};\nisSerializable$$module$build$src$core$interfaces$i_serializable=function(a){return a&&typeof a.saveState===\"function\"&&typeof a.loadState===\"function\"};\nqueueRender$$module$build$src$core$render_management=function(a){queueBlock$$module$build$src$core$render_management(a);if(alwaysImmediatelyRender$$module$build$src$core$render_management())return doRenders$$module$build$src$core$render_management(),Promise.resolve();afterRendersPromise$$module$build$src$core$render_management||(afterRendersPromise$$module$build$src$core$render_management=new Promise(b=>{afterRendersResolver$$module$build$src$core$render_management=b;animationRequestId$$module$build$src$core$render_management=\nwindow.requestAnimationFrame(()=>{doRenders$$module$build$src$core$render_management();b()})}));return afterRendersPromise$$module$build$src$core$render_management};finishQueuedRenders$$module$build$src$core$render_management=function(){return afterRendersPromise$$module$build$src$core$render_management?afterRendersPromise$$module$build$src$core$render_management:Promise.resolve()};\ntriggerQueuedRenders$$module$build$src$core$render_management=function(a){a||window.cancelAnimationFrame(animationRequestId$$module$build$src$core$render_management);doRenders$$module$build$src$core$render_management(a);!a&&afterRendersResolver$$module$build$src$core$render_management&&afterRendersResolver$$module$build$src$core$render_management()};alwaysImmediatelyRender$$module$build$src$core$render_management=function(){return JavaFx$$module$build$src$core$utils$useragent};\nqueueBlock$$module$build$src$core$render_management=function(a){dirtyBlocks$$module$build$src$core$render_management.add(a);eventGroups$$module$build$src$core$render_management.set(a,$.getGroup$$module$build$src$core$events$utils());const b=a.getParent();b?queueBlock$$module$build$src$core$render_management(b):rootBlocks$$module$build$src$core$render_management.add(a)};\ndoRenders$$module$build$src$core$render_management=function(a){const b=a?new Set([a]):new Set([...rootBlocks$$module$build$src$core$render_management].map(f=>f.workspace)),c=[...rootBlocks$$module$build$src$core$render_management].filter(shouldRenderRootBlock$$module$build$src$core$render_management).filter(f=>b.has(f.workspace));for(var d of c)renderBlock$$module$build$src$core$render_management(d);for(const f of b)f.resizeContents();for(var e of c)d=e.getRelativeToSurfaceXY(),e.updateComponentLocations(d);\nfor(const f of c)e=$.getGroup$$module$build$src$core$events$utils(),(d=eventGroups$$module$build$src$core$render_management.get(f))&&$.setGroup$$module$build$src$core$events$utils(d),f.bumpNeighbours(),$.setGroup$$module$build$src$core$events$utils(e);for(const f of c)dequeueBlock$$module$build$src$core$render_management(f);a||(afterRendersPromise$$module$build$src$core$render_management=null)};\ndequeueBlock$$module$build$src$core$render_management=function(a){rootBlocks$$module$build$src$core$render_management.delete(a);dirtyBlocks$$module$build$src$core$render_management.delete(a);eventGroups$$module$build$src$core$render_management.delete(a);for(const b of a.getChildren(!1))dequeueBlock$$module$build$src$core$render_management(b)};shouldRenderRootBlock$$module$build$src$core$render_management=function(a){return!a.isDisposed()&&!a.getParent()};\nrenderBlock$$module$build$src$core$render_management=function(a){if(dirtyBlocks$$module$build$src$core$render_management.has(a)&&a.initialized){for(const b of a.getChildren(!1))renderBlock$$module$build$src$core$render_management(b);a.renderEfficiently()}};alert$$module$build$src$core$dialog=function(a,b){alertImplementation$$module$build$src$core$dialog(a,b)};\nsetAlert$$module$build$src$core$dialog=function(a=defaultAlert$$module$build$src$core$dialog){alertImplementation$$module$build$src$core$dialog=a};confirm$$module$build$src$core$dialog=function(a,b){confirmImplementation$$module$build$src$core$dialog(a,b)};setConfirm$$module$build$src$core$dialog=function(a=defaultConfirm$$module$build$src$core$dialog){confirmImplementation$$module$build$src$core$dialog=a};\nprompt$$module$build$src$core$dialog=function(a,b,c){promptImplementation$$module$build$src$core$dialog(a,b,c)};setPrompt$$module$build$src$core$dialog=function(a=defaultPrompt$$module$build$src$core$dialog){promptImplementation$$module$build$src$core$dialog=a};toast$$module$build$src$core$dialog=function(a,b){toastImplementation$$module$build$src$core$dialog(a,b)};\nsetToast$$module$build$src$core$dialog=function(a=defaultToast$$module$build$src$core$dialog){toastImplementation$$module$build$src$core$dialog=a};isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks=function(a){return a&&typeof a.getProcedureDef===\"function\"};isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks=function(a){return a&&typeof a.getProcedureCall===\"function\"&&typeof a.renameProcedure===\"function\"};\nisVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model=function(a){return a.getVariableModel!==void 0};warn$$module$build$src$core$utils$deprecation=function(a,b,c,d){a=a+\" was deprecated in \"+b+\" and will be deleted in \"+c+\".\";d&&(a+=\"\\nUse \"+d+\" instead.\");previousWarnings$$module$build$src$core$utils$deprecation.has(a)||(previousWarnings$$module$build$src$core$utils$deprecation.add(a),console.warn(a))};\n$.allUsedVarModels$$module$build$src$core$variables=function(a){a=a.getAllBlocks(!1);const b=new Set;for(let c=0;c({kind:\"block\",type:d,gap:8,fields:generateVariableFieldJson$$module$build$src$core$variables(g)})));return a};\nxmlFlyoutCategory$$module$build$src$core$variables=function(a){let b=[];const c=document.createElement(\"button\");c.setAttribute(\"text\",\"%{BKY_NEW_VARIABLE}\");c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE\");a.registerButtonCallback(\"CREATE_VARIABLE\",function(d){createVariableButtonHandler$$module$build$src$core$variables(d.getTargetWorkspace())});b.push(c);a=flyoutCategoryBlocks$$module$build$src$core$variables(a);return b=b.concat(a)};\nflyoutCategoryBlocks$$module$build$src$core$variables=function(a){a=a.getVariableMap().getVariablesOfType(\"\");const b=[];if(a.length>0){var c=a[a.length-1];if(Blocks$$module$build$src$core$blocks.variables_set){var d=$.createElement$$module$build$src$core$utils$xml(\"block\");d.setAttribute(\"type\",\"variables_set\");d.setAttribute(\"gap\",Blocks$$module$build$src$core$blocks.math_change?\"8\":\"24\");d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c));b.push(d)}Blocks$$module$build$src$core$blocks.math_change&&\n(d=$.createElement$$module$build$src$core$utils$xml(\"block\"),d.setAttribute(\"type\",\"math_change\"),d.setAttribute(\"gap\",Blocks$$module$build$src$core$blocks.variables_get?\"20\":\"8\"),d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c)),c=$.textToDom$$module$build$src$core$utils$xml('1'),d.appendChild(c),b.push(d));if(Blocks$$module$build$src$core$blocks.variables_get){a.sort(compareByName$$module$build$src$core$variables);\nfor(let e=0,f;f=a[e];e++)c=$.createElement$$module$build$src$core$utils$xml(\"block\"),c.setAttribute(\"type\",\"variables_get\"),c.setAttribute(\"gap\",\"8\"),c.appendChild(generateVariableFieldDom$$module$build$src$core$variables(f)),b.push(c)}}return b};generateUniqueName$$module$build$src$core$variables=function(a){return TEST_ONLY$$module$build$src$core$variables.generateUniqueNameInternal(a)};\ngenerateUniqueNameInternal$$module$build$src$core$variables=function(a){return generateUniqueNameFromOptions$$module$build$src$core$variables(VAR_LETTER_OPTIONS$$module$build$src$core$variables.charAt(0),a.getVariableMap().getAllVariables().map(b=>b.getName()))};\ngenerateUniqueNameFromOptions$$module$build$src$core$variables=function(a,b){if(!b.length)return a;const c=VAR_LETTER_OPTIONS$$module$build$src$core$variables;let d=\"\",e=c.indexOf(a);for(;;){let f=!1;for(let g=0;gf.getVariableModel().getName());if(d&&(c=d.some(f=>f.toLowerCase()===a),d=d.some(f=>f.toLowerCase()===b),c&&d))return e.getName()}return null};\ncheckForConflictingParamWithLegacyProcedures$$module$build$src$core$variables=function(a,b,c){a=a.toLowerCase();b=b.toLowerCase();c=c.getAllBlocks(!1);for(const e of c){if(!isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(e))continue;c=e.getProcedureDef();var d=c[1];const f=d.some(g=>g.toLowerCase()===a);d=d.some(g=>g.toLowerCase()===b);if(f&&d)return c[0]}return null};\ngenerateVariableFieldDom$$module$build$src$core$variables=function(a){const b=$.createElement$$module$build$src$core$utils$xml(\"field\");b.setAttribute(\"name\",\"VAR\");b.setAttribute(\"id\",a.getId());b.setAttribute(\"variabletype\",a.getType());a=$.createTextNode$$module$build$src$core$utils$xml(a.getName());b.appendChild(a);return b};\n$.getOrCreateVariablePackage$$module$build$src$core$variables=function(a,b,c,d){let e=$.getVariable$$module$build$src$core$variables(a,b,c,d);e||(e=createVariable$$module$build$src$core$variables(a,b,c,d));return e};\n$.getVariable$$module$build$src$core$variables=function(a,b,c,d){const e=a.getPotentialVariableMap();let f=null;if(b&&(f=a.getVariableById(b),!f&&e&&(f=e.getVariableById(b)),f))return f;if(c){if(d===void 0)throw Error(\"Tried to look up a variable by name without a type\");f=a.getVariable(c,d);!f&&e&&(f=e.getVariable(c,d))}return f};\ncreateVariable$$module$build$src$core$variables=function(a,b,c,d){const e=a.getVariableMap(),f=a.getPotentialVariableMap();c||(c=generateUniqueName$$module$build$src$core$variables(a.isFlyout?a.targetWorkspace:a));return f?f.createVariable(c,d,b!=null?b:void 0):e.createVariable(c,d,b)};getAddedVariables$$module$build$src$core$variables=function(a,b){a=a.getAllVariables();const c=[];if(b.length!==a.length)for(let d=0;d=0;f--){const g=e[f];if(g.type===\"procedures_defnoreturn\"||g.type===\"procedures_defreturn\"){c=String(g.getFieldValue(\"NAME\"));d=$.Msg$$module$build$src$core$msg.CANNOT_DELETE_VARIABLE_PROCEDURE.replace(\"%1\",d).replace(\"%2\",c);alert$$module$build$src$core$dialog(d);return}g===c&&e.splice(f,1)}c&&e.length||e.length>1?(d=\n$.Msg$$module$build$src$core$msg.DELETE_VARIABLE_CONFIRMATION.replace(\"%1\",String(e.length+(c&&!c.workspace.isFlyout?1:0))).replace(\"%2\",d),confirm$$module$build$src$core$dialog(d,f=>{f&&b&&a.getVariableMap().deleteVariable(b)})):a.getVariableMap().deleteVariable(b)};\nsave$$module$build$src$core$serialization$blocks=function(a,{addCoordinates:b=!1,addInputBlocks:c=!0,addNextBlocks:d=!0,doFullSerialization:e=!0,saveIds:f=!0}={}){if(a.isInsertionMarker())return null;const g={type:a.type,id:f?a.id:void 0};b&&saveCoords$$module$build$src$core$serialization$blocks(a,g);saveAttributes$$module$build$src$core$serialization$blocks(a,g);saveExtraState$$module$build$src$core$serialization$blocks(a,g,e);saveIcons$$module$build$src$core$serialization$blocks(a,g,e);saveFields$$module$build$src$core$serialization$blocks(a,\ng,e);c&&saveInputBlocks$$module$build$src$core$serialization$blocks(a,g,e,f);d&&saveNextBlocks$$module$build$src$core$serialization$blocks(a,g,e,f);return g};\nsaveAttributes$$module$build$src$core$serialization$blocks=function(a,b){a.isCollapsed()&&(b.collapsed=!0);a.isEnabled()||(b.disabledReasons=Array.from(a.getDisabledReasons()));a.isOwnDeletable()||(b.deletable=!1);a.isOwnMovable()||(b.movable=!1);a.isOwnEditable()||(b.editable=!1);a.inputsInline!==void 0&&a.inputsInline!==a.inputsInlineDefault&&(b.inline=a.inputsInline);a.data&&(b.data=a.data)};\nsaveCoords$$module$build$src$core$serialization$blocks=function(a,b){const c=a.workspace;a=a.getRelativeToSurfaceXY();b.x=Math.round(c.RTL?c.getWidth()-a.x:a.x);b.y=Math.round(a.y)};saveExtraState$$module$build$src$core$serialization$blocks=function(a,b,c){a.saveExtraState?(a=a.saveExtraState(c),a!==null&&(b.extraState=a)):a.mutationToDom&&(a=a.mutationToDom(),a!==null&&(b.extraState=domToText$$module$build$src$core$xml(a).replace(' xmlns=\"https://developers.google.com/blockly/xml\"',\"\")))};\nsaveIcons$$module$build$src$core$serialization$blocks=function(a,b,c){const d=Object.create(null);for(const e of a.getIcons())isSerializable$$module$build$src$core$interfaces$i_serializable(e)&&(a=e.saveState(c))&&(d[e.getType().toString()]=a);Object.keys(d).length&&(b.icons=d)};saveFields$$module$build$src$core$serialization$blocks=function(a,b,c){const d=Object.create(null);for(const e of a.getFields())e.isSerializable()&&(d[e.name]=e.saveState(c));Object.keys(d).length&&(b.fields=d)};\nsaveInputBlocks$$module$build$src$core$serialization$blocks=function(a,b,c,d){const e=Object.create(null);for(let f=0;f{k.disposed||k.setConnectionTracking(!0)},\n1)}return h};\nappendPrivate$$module$build$src$core$serialization$blocks=function(a,b,{parentConnection:c,isShadow:d=!1}={}){if(!a.type)throw new MissingBlockType$$module$build$src$core$serialization$exceptions(a);const e=b.newBlock(a.type,a.id);e.setShadow(d);loadCoords$$module$build$src$core$serialization$blocks(e,a);loadAttributes$$module$build$src$core$serialization$blocks(e,a);loadExtraState$$module$build$src$core$serialization$blocks(e,a);tryToConnectParent$$module$build$src$core$serialization$blocks(c,e,\na);loadIcons$$module$build$src$core$serialization$blocks(e,a);loadFields$$module$build$src$core$serialization$blocks(e,a);loadInputBlocks$$module$build$src$core$serialization$blocks(e,a);loadNextBlocks$$module$build$src$core$serialization$blocks(e,a);initBlock$$module$build$src$core$serialization$blocks(e,b.rendered);return e};\ncheckNewVariables$$module$build$src$core$serialization$blocks=function(a,b){if(isEnabled$$module$build$src$core$events$utils())for(a=getAddedVariables$$module$build$src$core$variables(a,b),b=0;bb&&(b=c[d].length);var e=-Infinity;let f,g=1;do{d=e;f=a;a=[];e=c.length/g;let h=1;for(let k=0;kd);return f};\nwrapScore$$module$build$src$core$utils$string=function(a,b,c){const d=[0],e=[];for(var f=0;f1&&d[d.length-1]<=d[d.length-2]&&(b+=.5);return b};\nwrapMutate$$module$build$src$core$utils$string=function(a,b,c){let d=wrapScore$$module$build$src$core$utils$string(a,b,c),e;for(let f=0;fd&&(d=h,e=g)}return e?wrapMutate$$module$build$src$core$utils$string(a,e,c):b};\nwrapToText$$module$build$src$core$utils$string=function(a,b){const c=[];for(let d=0;dRADIUS_OK$$module$build$src$core$tooltip&&hide$$module$build$src$core$tooltip()}else poisonedElement$$module$build$src$core$tooltip!==element$$module$build$src$core$tooltip&&\n(clearTimeout(showPid$$module$build$src$core$tooltip),lastX$$module$build$src$core$tooltip=a.pageX,lastY$$module$build$src$core$tooltip=a.pageY,showPid$$module$build$src$core$tooltip=setTimeout(show$$module$build$src$core$tooltip,HOVER_MS$$module$build$src$core$tooltip))};dispose$$module$build$src$core$tooltip=function(){poisonedElement$$module$build$src$core$tooltip=element$$module$build$src$core$tooltip=null;hide$$module$build$src$core$tooltip()};\nhide$$module$build$src$core$tooltip=function(){visible$$module$build$src$core$tooltip&&(visible$$module$build$src$core$tooltip=!1,containerDiv$$module$build$src$core$tooltip&&(containerDiv$$module$build$src$core$tooltip.style.display=\"none\"));showPid$$module$build$src$core$tooltip&&(clearTimeout(showPid$$module$build$src$core$tooltip),showPid$$module$build$src$core$tooltip=0)};\nblock$$module$build$src$core$tooltip=function(){hide$$module$build$src$core$tooltip();blocked$$module$build$src$core$tooltip=!0};unblock$$module$build$src$core$tooltip=function(){blocked$$module$build$src$core$tooltip=!1};\nrenderContent$$module$build$src$core$tooltip=function(){containerDiv$$module$build$src$core$tooltip&&element$$module$build$src$core$tooltip&&(typeof customTooltip$$module$build$src$core$tooltip===\"function\"?customTooltip$$module$build$src$core$tooltip(containerDiv$$module$build$src$core$tooltip,element$$module$build$src$core$tooltip):renderDefaultContent$$module$build$src$core$tooltip())};\nrenderDefaultContent$$module$build$src$core$tooltip=function(){var a=getTooltipOfObject$$module$build$src$core$tooltip(element$$module$build$src$core$tooltip);a=$.wrap$$module$build$src$core$utils$string(a,LIMIT$$module$build$src$core$tooltip);a=a.split(\"\\n\");for(let b=0;bc+window.scrollY&&(e-=containerDiv$$module$build$src$core$tooltip.offsetHeight+\n2*OFFSET_Y$$module$build$src$core$tooltip);a?d=Math.max(MARGINS$$module$build$src$core$tooltip-window.scrollX,d):d+containerDiv$$module$build$src$core$tooltip.offsetWidth>b+window.scrollX-2*MARGINS$$module$build$src$core$tooltip&&(d=b-containerDiv$$module$build$src$core$tooltip.offsetWidth-2*MARGINS$$module$build$src$core$tooltip);return{x:d,y:e}};\nshow$$module$build$src$core$tooltip=function(){if(!blocked$$module$build$src$core$tooltip&&(poisonedElement$$module$build$src$core$tooltip=element$$module$build$src$core$tooltip,containerDiv$$module$build$src$core$tooltip)){containerDiv$$module$build$src$core$tooltip.textContent=\"\";renderContent$$module$build$src$core$tooltip();var a=element$$module$build$src$core$tooltip.RTL;containerDiv$$module$build$src$core$tooltip.style.direction=a?\"rtl\":\"ltr\";containerDiv$$module$build$src$core$tooltip.style.display=\n\"block\";visible$$module$build$src$core$tooltip=!0;var {x:b,y:c}=getPosition$$module$build$src$core$tooltip(a);containerDiv$$module$build$src$core$tooltip.style.left=b+\"px\";containerDiv$$module$build$src$core$tooltip.style.top=c+\"px\"}};getHsvSaturation$$module$build$src$core$utils$colour=function(){return hsvSaturation$$module$build$src$core$utils$colour};setHsvSaturation$$module$build$src$core$utils$colour=function(a){hsvSaturation$$module$build$src$core$utils$colour=a};\ngetHsvValue$$module$build$src$core$utils$colour=function(){return hsvValue$$module$build$src$core$utils$colour};setHsvValue$$module$build$src$core$utils$colour=function(a){hsvValue$$module$build$src$core$utils$colour=a};\nparse$$module$build$src$core$utils$colour=function(a){a=`${a}`.toLowerCase().trim();var b=names$$module$build$src$core$utils$colour[a];if(b)return b;b=a.substring(0,2)===\"0x\"?\"#\"+a.substring(2):a;b=b[0]===\"#\"?b:\"#\"+b;if(/^#[0-9a-f]{6}$/.test(b))return b;if(/^#[0-9a-f]{3}$/.test(b))return[\"#\",b[1],b[1],b[2],b[2],b[3],b[3]].join(\"\");var c=a.match(/^(?:rgb)?\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/);return c&&(a=Number(c[1]),b=Number(c[2]),c=Number(c[3]),a>=0&&a<256&&b>=0&&b<256&&c>=0&&c<256)?rgbToHex$$module$build$src$core$utils$colour(a,\nb,c):null};rgbToHex$$module$build$src$core$utils$colour=function(a,b,c){b=a<<16|b<<8|c;return a<16?\"#\"+(16777216|b).toString(16).substr(1):\"#\"+b.toString(16)};hexToRgb$$module$build$src$core$utils$colour=function(a){a=parse$$module$build$src$core$utils$colour(a);if(!a)return[0,0,0];a=parseInt(a.substr(1),16);return[a>>16,a>>8&255,a&255]};\nhsvToHex$$module$build$src$core$utils$colour=function(a,b,c){let d=0,e=0,f=0;if(b===0)f=e=d=c;else{const g=Math.floor(a/60),h=a/60-g;a=c*(1-b);const k=c*(1-b*h);b=c*(1-b*(1-h));switch(g){case 1:d=k;e=c;f=a;break;case 2:d=a;e=c;f=b;break;case 3:d=a;e=k;f=c;break;case 4:d=b;e=a;f=c;break;case 5:d=c;e=a;f=k;break;case 6:case 0:d=c,e=b,f=a}}return rgbToHex$$module$build$src$core$utils$colour(Math.floor(d),Math.floor(e),Math.floor(f))};\nblend$$module$build$src$core$utils$colour=function(a,b,c){a=parse$$module$build$src$core$utils$colour(a);if(!a)return null;b=parse$$module$build$src$core$utils$colour(b);if(!b)return null;a=hexToRgb$$module$build$src$core$utils$colour(a);b=hexToRgb$$module$build$src$core$utils$colour(b);return rgbToHex$$module$build$src$core$utils$colour(Math.round(b[0]+c*(a[0]-b[0])),Math.round(b[1]+c*(a[1]-b[1])),Math.round(b[2]+c*(a[2]-b[2])))};\nhueToHex$$module$build$src$core$utils$colour=function(a){return hsvToHex$$module$build$src$core$utils$colour(a,hsvSaturation$$module$build$src$core$utils$colour,hsvValue$$module$build$src$core$utils$colour*255)};\ntokenizeInterpolationInternal$$module$build$src$core$utils$parsing=function(a,b,c){const d=[];var e=a.split(\"\");e.push(\"\");var f=0;a=[];let g=null;for(let l=0;l=a.bottom?b.top-c.height:b.bottom};isRepositionable$$module$build$src$core$widgetdiv=function(a){return!(a==null||!a.repositionForWindowResize)};repositionForWindowResize$$module$build$src$core$widgetdiv=function(){isRepositionable$$module$build$src$core$widgetdiv(owner$$module$build$src$core$widgetdiv)&&owner$$module$build$src$core$widgetdiv.repositionForWindowResize()||hide$$module$build$src$core$widgetdiv()};\ngetCurrentBlock$$module$build$src$core$contextmenu=function(){return currentBlock$$module$build$src$core$contextmenu};setCurrentBlock$$module$build$src$core$contextmenu=function(a){currentBlock$$module$build$src$core$contextmenu=a};\nshow$$module$build$src$core$contextmenu=function(a,b,c,d,e){show$$module$build$src$core$widgetdiv(dummyOwner$$module$build$src$core$contextmenu,c,dispose$$module$build$src$core$contextmenu,d);if(b.length){e||(a instanceof PointerEvent?e=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):(console.warn(\"Context menu opened with keyboard but no location given\"),e=new Coordinate$$module$build$src$core$utils$coordinate(0,0)));var f=populate_$$module$build$src$core$contextmenu(b,\nc,a,e);menu_$$module$build$src$core$contextmenu=f;position_$$module$build$src$core$contextmenu(f,c,e);setTimeout(function(){f.focus()},1);currentBlock$$module$build$src$core$contextmenu=null}else hide$$module$build$src$core$contextmenu()};\npopulate_$$module$build$src$core$contextmenu=function(a,b,c,d){const e=new Menu$$module$build$src$core$menu;e.setRole(Role$$module$build$src$core$utils$aria.MENU);for(let f=0;f{setTimeout(()=>{g.callback(g.scope,c,l,d)},0)})},{})}return e};\nposition_$$module$build$src$core$contextmenu=function(a,b,c){const d=getViewportBBox$$module$build$src$core$utils$svg_math();c=new Rect$$module$build$src$core$utils$rect(c.y+d.top,c.y+d.top,c.x+d.left,c.x+d.left);createWidget_$$module$build$src$core$contextmenu(a);const e=a.getSize();b&&(c.left+=e.width,c.right+=e.width,d.left+=e.width,d.right+=e.width);positionWithAnchor$$module$build$src$core$widgetdiv(d,c,e,b);a.focus()};\ncreateWidget_$$module$build$src$core$contextmenu=function(a){var b=getDiv$$module$build$src$core$widgetdiv();if(!b)throw Error(\"Attempting to create a context menu when widget div is null\");b=a.render(b);addClass$$module$build$src$core$utils$dom(b,\"blocklyContextMenu\");conditionalBind$$module$build$src$core$browser_events(b,\"contextmenu\",null,haltPropagation$$module$build$src$core$contextmenu);a.focus()};haltPropagation$$module$build$src$core$contextmenu=function(a){a.preventDefault();a.stopPropagation()};\nhide$$module$build$src$core$contextmenu=function(){hideIfOwner$$module$build$src$core$widgetdiv(dummyOwner$$module$build$src$core$contextmenu);currentBlock$$module$build$src$core$contextmenu=null};dispose$$module$build$src$core$contextmenu=function(){menu_$$module$build$src$core$contextmenu&&(menu_$$module$build$src$core$contextmenu.dispose(),menu_$$module$build$src$core$contextmenu=null)};\n$.callbackFactory$$module$build$src$core$contextmenu=function(a,b){return()=>{$.disable$$module$build$src$core$events$utils();let c;try{c=b instanceof Element?domToBlockInternal$$module$build$src$core$xml(b,a.workspace):appendInternal$$module$build$src$core$serialization$blocks(b,a.workspace);const d=a.getRelativeToSurfaceXY();d.x=a.RTL?d.x-$.config$$module$build$src$core$config.snapRadius:d.x+$.config$$module$build$src$core$config.snapRadius;d.y+=$.config$$module$build$src$core$config.snapRadius*\n2;c.moveBy(d.x,d.y)}finally{$.enable$$module$build$src$core$events$utils()}isEnabled$$module$build$src$core$events$utils()&&!c.isShadow()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(c));$.getFocusManager$$module$build$src$core$focus_manager().focusNode(c);return c}};\nmouseToWorkspacePoint$$module$build$src$core$utils$drag=function(a,b){b=mouseToSvg$$module$build$src$core$browser_events(b,a.getParentSvg(),a.getInverseScreenCTM());b.x/=a.scale;b.y/=a.scale;return b};start$$module$build$src$core$utils$drag=function(a,b,c){b=mouseToWorkspacePoint$$module$build$src$core$utils$drag(a,b);workspaceToDragDelta$$module$build$src$core$utils$drag.set(a,Coordinate$$module$build$src$core$utils$coordinate.difference(c,b))};\nmove$$module$build$src$core$utils$drag=function(a,b){b=mouseToWorkspacePoint$$module$build$src$core$utils$drag(a,b);a=workspaceToDragDelta$$module$build$src$core$utils$drag.get(a);if(!a)throw Error(\"Drag not initialized\");return Coordinate$$module$build$src$core$utils$coordinate.sum(a,b)};\nworkspaceToDom$$module$build$src$core$xml=function(a,b=!1){const c=$.createElement$$module$build$src$core$utils$xml(\"xml\");var d=variablesToDom$$module$build$src$core$xml($.allUsedVarModels$$module$build$src$core$variables(a));d.hasChildNodes()&&c.appendChild(d);for(const e of a.getTopComments())c.appendChild(saveWorkspaceComment$$module$build$src$core$xml(e,b));a=a.getTopBlocks(!0);for(d=0;d/g,\"<$1$2>\")};\ndomToPrettyText$$module$build$src$core$xml=function(a){a=domToText$$module$build$src$core$xml(a).split(\"<\");let b=\"\";for(let c=1;c\"&&(b+=\" \")}a=a.join(\"\\n\");a=a.replace(/(<(\\w+)\\b[^>]*>[^\\n]*)\\n *<\\/\\2>/g,\"$1\");return a.replace(/^\\n/,\"\")};\nclearWorkspaceAndLoadFromXml$$module$build$src$core$xml=function(a,b){b.setResizesEnabled(!1);b.clear();a=$.domToWorkspace$$module$build$src$core$xml(a,b);b.setResizesEnabled(!0);return a};\n$.domToWorkspace$$module$build$src$core$xml=function(a,b){let c=0;b.RTL&&(c=b.getWidth());const d=[];startTextWidthCache$$module$build$src$core$utils$dom();const e=$.getGroup$$module$build$src$core$events$utils();e||$.setGroup$$module$build$src$core$events$utils(!0);b.setResizesEnabled&&b.setResizesEnabled(!1);let f=!0;try{for(let g=0,h;h=a.childNodes[g];g++){const k=h.nodeName.toLowerCase(),l=h;if(k===\"block\"||k===\"shadow\"&&!getRecordUndo$$module$build$src$core$events$utils()){const m=domToBlockInternal$$module$build$src$core$xml(l,\nb);d.push(m.id);let n;const p=parseInt((n=l.getAttribute(\"x\"))!=null?n:\"10\",10);let r;const q=parseInt((r=l.getAttribute(\"y\"))!=null?r:\"10\",10);isNaN(p)||isNaN(q)||m.moveBy(b.RTL?c-p:p,q,[\"create\"]);f=!1}else{if(k===\"shadow\")throw TypeError(\"Shadow block cannot be a top-level block.\");if(k===\"comment\")loadWorkspaceComment$$module$build$src$core$xml(l,b);else if(k===\"variables\"){if(f)domToVariables$$module$build$src$core$xml(l,b);else throw Error(\"'variables' tag must exist once before block and shadow tag elements in the workspace XML, but it was found in another location.\");\nf=!1}}}}finally{$.setGroup$$module$build$src$core$events$utils(e),b.setResizesEnabled&&b.setResizesEnabled(!0),b.rendered&&triggerQueuedRenders$$module$build$src$core$render_management(),stopTextWidthCache$$module$build$src$core$utils$dom()}fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.FINISHED_LOADING))(b));return d};\nloadWorkspaceComment$$module$build$src$core$xml=function(a,b){var c;const d=(c=a.getAttribute(\"id\"))!=null?c:void 0;c=b.rendered?new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(b,d):new WorkspaceComment$$module$build$src$core$comments$workspace_comment(b,d);var e;c.setText((e=a.textContent)!=null?e:\"\");var f;e=parseInt((f=a.getAttribute(\"x\"))!=null?f:\"\",10);let g;f=parseInt((g=a.getAttribute(\"y\"))!=null?g:\"\",10);isNaN(e)||isNaN(f)||(e=b.RTL?b.getWidth()-e:e,\nc.moveTo(new Coordinate$$module$build$src$core$utils$coordinate(e,f)));var h;b=parseInt((h=a.getAttribute(\"w\"))!=null?h:\"\",10);let k;h=parseInt((k=a.getAttribute(\"h\"))!=null?k:\"\",10);isNaN(b)||isNaN(h)||c.setSize(new Size$$module$build$src$core$utils$size(b,h));a.getAttribute(\"collapsed\")===\"true\"&&c.setCollapsed(!0);a.getAttribute(\"editable\")===\"false\"&&c.setEditable(!1);a.getAttribute(\"movable\")===\"false\"&&c.setMovable(!1);a.getAttribute(\"deletable\")===\"false\"&&c.setDeletable(!1);return c};\nappendDomToWorkspace$$module$build$src$core$xml=function(a,b){if(!b.getBlocksBoundingBox)return $.domToWorkspace$$module$build$src$core$xml(a,b);var c=b.getBlocksBoundingBox();a=$.domToWorkspace$$module$build$src$core$xml(a,b);if(c&&c.top!==c.bottom){var d=c.bottom;c=b.RTL?c.right:c.left;var e=Infinity;let f=-Infinity,g=Infinity;for(let h=0;hf&&(f=k.x)}d=d-g+10;c=b.RTL?c-f:c-e;for(e=0;e=0;g--)f[g].initSvg();for(let g=f.length-1;g>=0;g--)f[g].queueRender();setTimeout(function(){e.disposed||e.setConnectionTracking(!0)},1);b.resizeContents()}else{const e=d.getDescendants(!1);for(let f=e.length-\n1;f>=0;f--)e[f].initModel()}}finally{$.enable$$module$build$src$core$events$utils()}if(isEnabled$$module$build$src$core$events$utils()){a=getAddedVariables$$module$build$src$core$variables(b,c);for(b=0;b{isNaN(n)||isNaN(r)||(n=b.workspace.RTL?b.workspace.getWidth()-(n+h):n,q.setBubbleLocation(new Coordinate$$module$build$src$core$utils$coordinate(n,r)));q.setBubbleVisible(f)},1)}};applyDataTagNodes$$module$build$src$core$xml=function(a,b){for(let c=0;c100)){var b=a.workspace,c=a.getSvgRoot();b.getAudioManager().play(\"delete\");var d=a.getRelativeToSurfaceXY(),e=c.cloneNode(!0);e.setAttribute(\"transform\",\"translate(\"+d.x+\",\"+d.y+\")\");var f;(f=b.getLayerManager())==null||f.appendToAnimationLayer({getSvgRoot:()=>e});disposeUiStep$$module$build$src$core$block_animations(e,{x:d.x,y:d.y,width:a.width,height:a.height},b.RTL,new Date)}};\ndisposeUiStep$$module$build$src$core$block_animations=function(a,b,c,d){const e=((new Date).getTime()-d.getTime())/150;e>1?removeNode$$module$build$src$core$utils$dom(a):(a.setAttribute(\"transform\",\"translate(\"+(b.x+(c?-1:1)*b.width/2*e)+\",\"+(b.y+b.height/2*e)+\") scale(\"+(1-e)+\")\"),setTimeout(disposeUiStep$$module$build$src$core$block_animations,10,a,b,c,d))};\nconnectionUiEffect$$module$build$src$core$block_animations=function(a){var b=a.workspace;const c=b.scale;b.getAudioManager().play(\"click\");if(!(c<1)){var d=b.getSvgXY(a.getSvgRoot());a.outputConnection?(d.x+=(a.RTL?3:-3)*c,d.y+=13*c):a.previousConnection&&(d.x+=(a.RTL?-23:23)*c,d.y+=3*c);var e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CIRCLE,{cx:d.x,cy:d.y,r:0,fill:\"none\",stroke:\"#888\",\"stroke-width\":10},b.getParentSvg());a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.ANIMATE,\n{id:\"animationCircle\",begin:\"indefinite\",attributeName:\"r\",dur:\"150ms\",from:0,to:25*c},e);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.ANIMATE,{id:\"animationOpacity\",begin:\"indefinite\",attributeName:\"opacity\",dur:\"150ms\",from:1,to:0},e);a.beginElement();b.beginElement();setTimeout(()=>void removeNode$$module$build$src$core$utils$dom(e),150)}};\ndisconnectUiEffect$$module$build$src$core$block_animations=function(a){disconnectUiStop$$module$build$src$core$block_animations();a.workspace.getAudioManager().play(\"disconnect\");if(!(a.workspace.scale<1)){var b=a.getHeightWidth().height;b=Math.atan(10/b)/Math.PI*180;a.RTL||(b*=-1);wobblingBlock$$module$build$src$core$block_animations=a;disconnectUiStep$$module$build$src$core$block_animations(a,b,new Date,0)}};\ndisconnectUiStep$$module$build$src$core$block_animations=function(a,b,c,d){const e=[.66,1,.66,0,-.66,-1,-.66,0];let f=\"\";c.getTime()+200>(new Date).getTime()&&(f=`skewX(${Math.round(e[d%e.length]*b)})`,disconnectPid$$module$build$src$core$block_animations=setTimeout(disconnectUiStep$$module$build$src$core$block_animations,15,a,b,c,d+1));a.getSvgRoot().setAttribute(\"transform\",`${a.getTranslation()} ${f}`)};\ndisconnectUiStop$$module$build$src$core$block_animations=function(){wobblingBlock$$module$build$src$core$block_animations&&(disconnectPid$$module$build$src$core$block_animations&&(clearTimeout(disconnectPid$$module$build$src$core$block_animations),disconnectPid$$module$build$src$core$block_animations=null),wobblingBlock$$module$build$src$core$block_animations.getSvgRoot().setAttribute(\"transform\",wobblingBlock$$module$build$src$core$block_animations.getTranslation()),wobblingBlock$$module$build$src$core$block_animations=\nnull)};\nmoveBlockToNotConflict$$module$build$src$core$clipboard$block_paster=function(a,b){a.workspace.RTL&&(b.x=a.workspace.getWidth()-b.x);const c=a.workspace,d=$.config$$module$build$src$core$config.snapRadius,e=Coordinate$$module$build$src$core$utils$coordinate.difference(b,a.getRelativeToSurfaceXY()),f=new Coordinate$$module$build$src$core$utils$coordinate(0,0),g=c.getAllBlocks(!1).filter(h=>h.id!=a.id).map(h=>h.getRelativeToSurfaceXY());for(;blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster(Coordinate$$module$build$src$core$utils$coordinate.sum(b,f),\ng)||blockIsInSnapRadius$$module$build$src$core$clipboard$block_paster(a,Coordinate$$module$build$src$core$utils$coordinate.sum(e,f),d);)c.RTL?f.translate(-d,d*2):f.translate(d,d*2);a.moveTo(Coordinate$$module$build$src$core$utils$coordinate.sum(b,f))};blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster=function(a,b){return b.some(c=>Math.abs(c.x-a.x)<=1&&Math.abs(c.y-a.y)<=1)};\nblockIsInSnapRadius$$module$build$src$core$clipboard$block_paster=function(a,b,c){return a.getConnections_(!1).some(d=>!!d.closest(c,b).connection)};\nbumpObjectIntoBounds$$module$build$src$core$bump_objects=function(a,b,c){const d=c.getBoundingRectangle(),e=d.right-d.left,f=clamp$$module$build$src$core$utils$math(b.top,d.top,b.top+b.height-(d.bottom-d.top))-d.top;let g=b.left;b=b.left+b.width-e;a.RTL?g=Math.min(b,g):b=Math.max(g,b);return(a=clamp$$module$build$src$core$utils$math(g,d.left,b)-d.left)||f?(c.moveBy(a,f,[\"inbounds\"]),!0):!1};\nbumpIntoBoundsHandler$$module$build$src$core$bump_objects=function(a){return b=>{var c=a.getMetricsManager();if(c.hasFixedEdges()&&!a.isDragging()){var d;if(BUMP_EVENTS$$module$build$src$core$events$type.includes((d=b.type)!=null?d:\"\")){d=c.getScrollMetrics(!0);const e=extractObjectFromEvent$$module$build$src$core$bump_objects(a,b);e&&(c=$.getGroup$$module$build$src$core$events$utils()||!1,$.setGroup$$module$build$src$core$events$utils(b.group),bumpObjectIntoBounds$$module$build$src$core$bump_objects(a,\nd,e)&&!b.group&&console.warn(\"Moved object in bounds but there was no event group. This may break undo.\"),$.setGroup$$module$build$src$core$events$utils(c))}else isViewportChange$$module$build$src$core$events$predicates(b)&&b.scale&&b.oldScale&&b.scale>b.oldScale&&bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects(a)}}};\nextractObjectFromEvent$$module$build$src$core$bump_objects=function(a,b){let c=null;switch(b.type){case EventType$$module$build$src$core$events$type.BLOCK_CREATE:case EventType$$module$build$src$core$events$type.BLOCK_MOVE:(c=a.getBlockById(b.blockId))&&(c=c.getRootBlock());break;case EventType$$module$build$src$core$events$type.COMMENT_CREATE:case EventType$$module$build$src$core$events$type.COMMENT_MOVE:case EventType$$module$build$src$core$events$type.COMMENT_RESIZE:c=a.getCommentById(b.commentId)}return c};\nbumpTopObjectsIntoBounds$$module$build$src$core$bump_objects=function(a){var b=a.getMetricsManager();if(b.hasFixedEdges()&&!a.isDragging()){b=b.getScrollMetrics(!0);var c=a.getTopBoundedElements();for(let d=0,e;e=c[d];d++)bumpObjectIntoBounds$$module$build$src$core$bump_objects(a,b,e)}};isDeletable$$module$build$src$core$interfaces$i_deletable=function(a){return a&&typeof a.isDeletable===\"function\"&&typeof a.dispose===\"function\"&&typeof a.setDeleteStyle===\"function\"};\ngetBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){const c=a.getIcons();for(const d of a.inputList){if(!d.isVisible())continue;c.push(...d.fieldRow);let e;if((e=d.connection)==null?0:e.targetBlock())if(a=d.connection.targetBlock(),d.connection.type!==ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||b)c.push(a);else{let f;(a=(f=a.lastConnectionInStack(!1))==null?void 0:f.getSourceBlock())&&c.push(a)}else{let f;((f=d.connection)==\nnull?void 0:f.type)===ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE&&c.push(d.connection)}}return c};\nnavigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){const c=a.workspace.getTopBoundedElements(!0).filter(e=>isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(e));a=c.indexOf(a instanceof BlockSvg$$module$build$src$core$block_svg?a.getRootBlock():a)+b;let d=null;a>=0&&a=c.length&&(d=c[0]);if(b<0&&d instanceof BlockSvg$$module$build$src$core$block_svg){let e,f;return(f=(e=d.lastConnectionInStack(!1))==null?\nvoid 0:e.getSourceBlock())!=null?f:d}return d};\nnavigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){var c;let d;const e=a instanceof BlockSvg$$module$build$src$core$block_svg?(d=(c=a.outputConnection)==null?void 0:c.targetBlock())!=null?d:a.getSurroundParent():a.getSourceBlock();if(!(e instanceof BlockSvg$$module$build$src$core$block_svg))return null;c=getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy(e,b>0);a=c.indexOf(a);if(a===-1)return null;b=a+b;return b>=0&&b!d.getReturnTypes()).map(d=>[d.getName(),d.getParameters().map(e=>e.getName()),!1]);a.getBlocksByType(\"procedures_defnoreturn\",!1).forEach(d=>{!isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(d)&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&b.push(d.getProcedureDef())});const c=a.getProcedureMap().getProcedures().filter(d=>\n!!d.getReturnTypes()).map(d=>[d.getName(),d.getParameters().map(e=>e.getName()),!0]);a.getBlocksByType(\"procedures_defreturn\",!1).forEach(d=>{!isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(d)&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&c.push(d.getProcedureDef())});b.sort(procTupleComparator$$module$build$src$core$procedures);c.sort(procTupleComparator$$module$build$src$core$procedures);return[b,c]};\nprocTupleComparator$$module$build$src$core$procedures=function(a,b){return a[0].localeCompare(b[0],void 0,{sensitivity:\"base\"})};$.findLegalName$$module$build$src$core$procedures=function(a,b){if(b.isInFlyout)return a;for(a=a||$.Msg$$module$build$src$core$msg.UNNAMED_KEY||\"unnamed\";!isLegalName$$module$build$src$core$procedures(a,b.workspace,b);){const c=a.match(/^(.*?)(\\d+)$/);a=c?c[1]+(parseInt(c[2])+1):a+\"2\"}return a};\nisLegalName$$module$build$src$core$procedures=function(a,b,c){return!isNameUsed$$module$build$src$core$procedures(a,b,c)};\nisNameUsed$$module$build$src$core$procedures=function(a,b,c){for(const d of b.getAllBlocks(!1))if(d!==c&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&$.Names$$module$build$src$core$names.equals(d.getProcedureDef()[0],a))return!0;c=c&&isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(c)?c==null?void 0:c.getProcedureModel():void 0;for(const d of b.getProcedureMap().getProcedures())if(d!==c&&$.Names$$module$build$src$core$names.equals(d.getName(),\na))return!0;return!1};\n$.rename$$module$build$src$core$procedures=function(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;a=a.trim();const c=$.findLegalName$$module$build$src$core$procedures(a,b);isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(b)&&!b.isInsertionMarker()&&b.getProcedureModel().setName(c);const d=this.getValue();if(d!==a&&d!==c)for(a=b.workspace.getAllBlocks(!1),b=0;bblockIsModernCallerFor$$module$build$src$core$procedures(c,a)||isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(c)&&$.Names$$module$build$src$core$names.equals(c.getProcedureCall(),a))};\nblockIsModernCallerFor$$module$build$src$core$procedures=function(a,b){return isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(a)&&!a.isProcedureDef()&&a.getProcedureModel()&&$.Names$$module$build$src$core$names.equals(a.getProcedureModel().getName(),b)};\n$.mutateCallers$$module$build$src$core$procedures=function(a){const b=getRecordUndo$$module$build$src$core$events$utils();var c=a.getProcedureDef()[0];const d=a.mutationToDom(!0);a=getCallers$$module$build$src$core$procedures(c,a.workspace);for(let f=0,g;g=a[f];f++){c=(c=g.mutationToDom())&&domToText$$module$build$src$core$utils$xml(c);g.domToMutation&&g.domToMutation(d);var e=g.mutationToDom();e=e&&domToText$$module$build$src$core$utils$xml(e);c!==e&&($.setRecordUndo$$module$build$src$core$events$utils(!1),\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(g,\"mutation\",null,c,e)),$.setRecordUndo$$module$build$src$core$events$utils(b))}};\n$.getDefinition$$module$build$src$core$procedures=function(a,b){for(const c of b.getAllBlocks(!1))if(isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(c)&&c.isProcedureDef()&&$.Names$$module$build$src$core$names.equals(c.getProcedureModel().getName(),a)||isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(c)&&$.Names$$module$build$src$core$names.equals(c.getProcedureDef()[0],a))return c;return null};\nisDynamicShape$$module$build$src$core$renderers$common$constants=function(a){return a.isDynamic};isPuzzleTab$$module$build$src$core$renderers$common$constants=function(a){return a.pathDown!==void 0&&a.pathUp!==void 0};isNotch$$module$build$src$core$renderers$common$constants=function(a){return a.pathLeft!==void 0&&a.pathRight!==void 0};\nregister$$module$build$src$core$renderers$common$block_rendering=function(a,b){register$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a,b)};unregister$$module$build$src$core$renderers$common$block_rendering=function(a){unregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a)};\ninit$$module$build$src$core$renderers$common$block_rendering=function(a,b,c){a=new (getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a))(a);a.init(b,c);return a};stringButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"String\")};\nnumberButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"Number\")};colourButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"Colour\")};\ninternalFlyoutCategory$$module$build$src$core$variables_dynamic=function(a){return flyoutCategory$$module$build$src$core$variables_dynamic(a,!1)};\nflyoutCategory$$module$build$src$core$variables_dynamic=function(a,b=!0){Blocks$$module$build$src$core$blocks.variables_set_dynamic||Blocks$$module$build$src$core$blocks.variables_get_dynamic||console.warn(\"There are no dynamic variable blocks, but there is a dynamic variable category.\");if(b)return warn$$module$build$src$core$utils$deprecation(\"The XML return value of Blockly.VariablesDynamic.flyoutCategory()\",\"v12\",\"v13\",\"the same method, but handle a return type of FlyoutItemInfo[] (JSON) instead.\"),\nxmlFlyoutCategory$$module$build$src$core$variables_dynamic(a);a.registerButtonCallback(\"CREATE_VARIABLE_STRING\",stringButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_NUMBER\",numberButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_COLOUR\",colourButtonClickHandler$$module$build$src$core$variables_dynamic);return[{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_STRING_VARIABLE,callbackkey:\"CREATE_VARIABLE_STRING\"},\n{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_NUMBER_VARIABLE,callbackkey:\"CREATE_VARIABLE_NUMBER\"},{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_COLOUR_VARIABLE,callbackkey:\"CREATE_VARIABLE_COLOUR\"},...jsonFlyoutCategoryBlocks$$module$build$src$core$variables(a,a.getVariableMap().getAllVariables(),!1,\"variables_get_dynamic\",\"variables_set_dynamic\")]};\nxmlFlyoutCategory$$module$build$src$core$variables_dynamic=function(a){let b=[],c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_STRING_VARIABLE);c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_STRING\");b.push(c);c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_NUMBER_VARIABLE);c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_NUMBER\");b.push(c);c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_COLOUR_VARIABLE);\nc.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_COLOUR\");b.push(c);a.registerButtonCallback(\"CREATE_VARIABLE_STRING\",stringButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_NUMBER\",numberButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_COLOUR\",colourButtonClickHandler$$module$build$src$core$variables_dynamic);a=flyoutCategoryBlocks$$module$build$src$core$variables_dynamic(a);return b=b.concat(a)};\nflyoutCategoryBlocks$$module$build$src$core$variables_dynamic=function(a){a=a.getVariableMap().getAllVariables();const b=[];if(a.length>0){if(Blocks$$module$build$src$core$blocks.variables_set_dynamic){var c=a[a.length-1];const d=$.createElement$$module$build$src$core$utils$xml(\"block\");d.setAttribute(\"type\",\"variables_set_dynamic\");d.setAttribute(\"gap\",\"24\");d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c));b.push(d)}if(Blocks$$module$build$src$core$blocks.variables_get_dynamic){a.sort(compareByName$$module$build$src$core$variables);\nfor(let d=0,e;e=a[d];d++)c=$.createElement$$module$build$src$core$utils$xml(\"block\"),c.setAttribute(\"type\",\"variables_get_dynamic\"),c.setAttribute(\"gap\",\"8\"),c.appendChild(generateVariableFieldDom$$module$build$src$core$variables(e)),b.push(c)}}return b};resizeSvgContents$$module$build$src$core$workspace_svg=function(a){a.resizeContents()};\ncopy$$module$build$src$core$clipboard=function(a,b){const c=a.toCopyData();stashedCopyData$$module$build$src$core$clipboard=c;stashedWorkspace$$module$build$src$core$clipboard=isSelectable$$module$build$src$core$interfaces$i_selectable(a)&&a.workspace instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?a.workspace:null;stashedCoordinates$$module$build$src$core$clipboard=b;return c};getLastCopiedData$$module$build$src$core$clipboard=function(){return stashedCopyData$$module$build$src$core$clipboard};\nsetLastCopiedData$$module$build$src$core$clipboard=function(a){stashedCopyData$$module$build$src$core$clipboard=a};getLastCopiedWorkspace$$module$build$src$core$clipboard=function(){return stashedWorkspace$$module$build$src$core$clipboard};setLastCopiedWorkspace$$module$build$src$core$clipboard=function(a){stashedWorkspace$$module$build$src$core$clipboard=a};getLastCopiedLocation$$module$build$src$core$clipboard=function(){return stashedCoordinates$$module$build$src$core$clipboard};\nsetLastCopiedLocation$$module$build$src$core$clipboard=function(a){stashedCoordinates$$module$build$src$core$clipboard=a};\npaste$$module$build$src$core$clipboard=function(a,b,c){return a&&b?pasteFromData$$module$build$src$core$clipboard(a,b,c):stashedCopyData$$module$build$src$core$clipboard&&stashedWorkspace$$module$build$src$core$clipboard?pasteFromData$$module$build$src$core$clipboard(stashedCopyData$$module$build$src$core$clipboard,stashedWorkspace$$module$build$src$core$clipboard,stashedCoordinates$$module$build$src$core$clipboard):null};\npasteFromData$$module$build$src$core$clipboard=function(a,b,c){let d;b=b.isMutator?b:(d=b.options.parentWorkspace)!=null?d:b;let e,f;return(f=(e=getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.PASTER,a.paster,!1))==null?void 0:e.paste(a,b,c))!=null?f:null};isCopyable$$module$build$src$core$interfaces$i_copyable=function(a){return a&&typeof a.toCopyData===\"function\"};\nregisterEscape$$module$build$src$core$shortcut_items=function(){ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.ESCAPE,preconditionFn(a){return!a.isReadOnly()},callback(a){a.hideChaff();return!0},keyCodes:[KeyCodes$$module$build$src$core$utils$keycodes.ESC]})};\nregisterDelete$$module$build$src$core$shortcut_items=function(){ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.DELETE,preconditionFn(a,b){b=b.focusedNode;return!a.isReadOnly()&&b!=null&&isDeletable$$module$build$src$core$interfaces$i_deletable(b)&&b.isDeletable()&&!a.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(a,b,c,d){b.preventDefault();a=d.focusedNode;a instanceof\nBlockSvg$$module$build$src$core$block_svg?a.checkAndDelete():isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&a.isDeletable()&&($.setGroup$$module$build$src$core$events$utils(!0),a.dispose(),$.setGroup$$module$build$src$core$events$utils(!1));return!0},keyCodes:[KeyCodes$$module$build$src$core$utils$keycodes.DELETE,KeyCodes$$module$build$src$core$utils$keycodes.BACKSPACE]})};\nisCopyable$$module$build$src$core$shortcut_items=function(a){return isCopyable$$module$build$src$core$interfaces$i_copyable(a)&&isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&isDraggable$$module$build$src$core$interfaces$i_draggable(a)?a.isCopyable?a.isCopyable():a instanceof BlockSvg$$module$build$src$core$block_svg||a instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment?a.isOwnDeletable()&&a.isOwnMovable():a.isDeletable()&&a.isMovable():!1};\nisCuttable$$module$build$src$core$shortcut_items=function(a){return isCopyable$$module$build$src$core$shortcut_items(a)&&isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&a.isDeletable()};\nregisterCopy$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.C,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.C,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.COPY,\npreconditionFn(c,d){d=d.focusedNode;c=c.isFlyout?c.targetWorkspace:c;return!!d&&!!c&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()&&isCopyable$$module$build$src$core$shortcut_items(d)},callback(c,d,e,f){d.preventDefault();d=f.focusedNode;if(!d||!isCopyable$$module$build$src$core$interfaces$i_copyable(d)||!isCopyable$$module$build$src$core$shortcut_items(d))return!1;c=c.isFlyout?c.targetWorkspace:c;if(!c)return!1;d.workspace.isFlyout||c.hideChaff();\nc=isDraggable$$module$build$src$core$interfaces$i_draggable(d)&&d.workspace==c?d.getRelativeToSurfaceXY():void 0;return!!copy$$module$build$src$core$clipboard(d,c)},keyCodes:[a,b]})};\nregisterCut$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.X,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.X,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.CUT,\npreconditionFn(c,d){d=d.focusedNode;return!!d&&!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()&&isCuttable$$module$build$src$core$shortcut_items(d)},callback(c,d,e,f){c=f.focusedNode;if(!c||!isCuttable$$module$build$src$core$shortcut_items(c)||!isCopyable$$module$build$src$core$interfaces$i_copyable(c))return!1;d=isDraggable$$module$build$src$core$interfaces$i_draggable(c)?c.getRelativeToSurfaceXY():void 0;d=copy$$module$build$src$core$clipboard(c,\nd);c instanceof BlockSvg$$module$build$src$core$block_svg?c.checkAndDelete():isDeletable$$module$build$src$core$interfaces$i_deletable(c)&&c.dispose();return!!d},keyCodes:[a,b]})};\nregisterPaste$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.V,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.V,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.PASTE,\npreconditionFn(){var c=getLastCopiedWorkspace$$module$build$src$core$clipboard();if(!c||!c.rendered)return!1;c=c.isFlyout?c.targetWorkspace:c;return!!getLastCopiedData$$module$build$src$core$clipboard()&&!!c&&!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(c,d){c=getLastCopiedData$$module$build$src$core$clipboard();if(!c)return!1;var e=getLastCopiedWorkspace$$module$build$src$core$clipboard();if(!e)return!1;e=e.isFlyout?e.targetWorkspace:\ne;if(!e||e.isReadOnly())return!1;if(d instanceof PointerEvent)return d=screenToWsCoordinates$$module$build$src$core$utils$svg_math(e,new Coordinate$$module$build$src$core$utils$coordinate(d.clientX,d.clientY)),!!paste$$module$build$src$core$clipboard(c,e,d);d=getLastCopiedLocation$$module$build$src$core$clipboard();if(!d)return!!paste$$module$build$src$core$clipboard(c,e);const {left:f,top:g,width:h,height:k}=e.getMetricsManager().getViewMetrics(!0);if((new Rect$$module$build$src$core$utils$rect(g,\ng+k,f,f+h)).contains(d.x,d.y))return!!paste$$module$build$src$core$clipboard(c,e);d=new Coordinate$$module$build$src$core$utils$coordinate(f+h/2,g+k/2);return!!paste$$module$build$src$core$clipboard(c,e,d)},keyCodes:[a,b]})};\nregisterUndo$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.UNDO,\npreconditionFn(c){return!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(c,d){c.hideChaff();c.undo(!1);d.preventDefault();return!0},keyCodes:[a,b]})};\nregisterRedo$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL,KeyCodes$$module$build$src$core$utils$keycodes.SHIFT]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.META,\nKeyCodes$$module$build$src$core$utils$keycodes.SHIFT]),c=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Y,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.REDO,preconditionFn(d){return!d.isDragging()&&!d.isReadOnly()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},\ncallback(d,e){d.hideChaff();d.undo(!0);e.preventDefault();return!0},keyCodes:[a,b,c]})};registerDefaultShortcuts$$module$build$src$core$shortcut_items=function(){registerEscape$$module$build$src$core$shortcut_items();registerDelete$$module$build$src$core$shortcut_items();registerCopy$$module$build$src$core$shortcut_items();registerCut$$module$build$src$core$shortcut_items();registerPaste$$module$build$src$core$shortcut_items();registerUndo$$module$build$src$core$shortcut_items();registerRedo$$module$build$src$core$shortcut_items()};\nsaveProcedure$$module$build$src$core$serialization$procedures=function(a){const b=a.saveState();if(!a.getParameters().length)return b;b.parameters=a.getParameters().map(c=>c.saveState());return b};loadProcedure$$module$build$src$core$serialization$procedures=function(a,b,c,d){a=a.loadState(c,d);if(!c.parameters)return a;for(const [e,f]of c.parameters.entries())a.insertParameter(b.loadState(f,d),e);return a};\nsave$$module$build$src$core$serialization$workspaces=function(a){const b=Object.create(null),c=getAllItems$$module$build$src$core$registry(Type$$module$build$src$core$registry.SERIALIZER,!0);for(const d in c){let e;const f=(e=c[d])==null?void 0:e.save(a);f&&(b[d]=f)}return b};\nload$$module$build$src$core$serialization$workspaces=function(a,b,{recordUndo:c=!1}={}){var d=getAllItems$$module$build$src$core$registry(Type$$module$build$src$core$registry.SERIALIZER,!0);if(d){d=Object.entries(d).sort((f,g)=>g[1].priority-f[1].priority);var e=getRecordUndo$$module$build$src$core$events$utils();$.setRecordUndo$$module$build$src$core$events$utils(c);(c=$.getGroup$$module$build$src$core$events$utils())||$.setGroup$$module$build$src$core$events$utils(!0);startTextWidthCache$$module$build$src$core$utils$dom();\nb instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&b.setResizesEnabled(!1);for(const [,f]of d.reverse()){let g;(g=f)==null||g.clear(b)}for(const [f,g]of d.reverse())if(a[f]){let h;(h=g)==null||h.load(a[f],b)}b instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&b.setResizesEnabled(!0);stopTextWidthCache$$module$build$src$core$utils$dom();fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.FINISHED_LOADING))(b));\n$.setGroup$$module$build$src$core$events$utils(c);$.setRecordUndo$$module$build$src$core$events$utils(e)}};\ninject$$module$build$src$core$inject=function(a,b){let c=null;c=typeof a===\"string\"?document.getElementById(a)||document.querySelector(a):a;var d;if(!document.contains(c)&&document!==((d=c)==null?void 0:d.ownerDocument))throw Error(\"Error: container is not in current document\");a=new Options$$module$build$src$core$options(b||{});d=document.createElement(\"div\");addClass$$module$build$src$core$utils$dom(d,\"injectionDiv\");(b==null?0:b.rtl)&&addClass$$module$build$src$core$utils$dom(d,\"blocklyRTL\");c.appendChild(d);\nb=createDom$$module$build$src$core$inject(d,a);const e=createMainWorkspace$$module$build$src$core$inject(d,b,a);init$$module$build$src$core$inject(e);setMainWorkspace$$module$build$src$core$common(e);svgResize$$module$build$src$core$common(e);d.addEventListener(\"focusin\",function(){setMainWorkspace$$module$build$src$core$common(e)});conditionalBind$$module$build$src$core$browser_events(d,\"keydown\",null,globalShortcutHandler$$module$build$src$core$common);return e};\ncreateDom$$module$build$src$core$inject=function(a,b){a.setAttribute(\"dir\",\"LTR\");inject$$module$build$src$core$css(b.hasCss,b.pathToMedia);const c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{xmlns:SVG_NS$$module$build$src$core$utils$dom,\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\",\"class\":\"blocklySvg\"},a),d=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.DEFS,\n{},c),e=String(Math.random()).substring(2);b.gridPattern=Grid$$module$build$src$core$grid.createDom(e,b.gridOptions,d,a);return c};\ncreateMainWorkspace$$module$build$src$core$inject=function(a,b,c){c.parentWorkspace=null;c=new WorkspaceSvg$$module$build$src$core$workspace_svg(c);const d=c.options;c.scale=d.zoomOptions.startScale;b.appendChild(c.createDom(\"blocklyMainBackground\",a));var e=c.getRenderer().getClassName();e&&addClass$$module$build$src$core$utils$dom(a,e);(e=c.getTheme().getClassName())&&addClass$$module$build$src$core$utils$dom(a,e);!d.hasCategories&&d.languageTree&&(a=c.addFlyout(Svg$$module$build$src$core$utils$svg.SVG),\ninsertAfter$$module$build$src$core$utils$dom(a,b));d.hasTrashcan&&c.addTrashcan();d.zoomOptions&&d.zoomOptions.controls&&c.addZoomControls();c.getThemeManager().subscribe(b,\"workspaceBackgroundColour\",\"background-color\");c.translate(0,0);c.addChangeListener(bumpIntoBoundsHandler$$module$build$src$core$bump_objects(c));svgResize$$module$build$src$core$common(c);createDom$$module$build$src$core$widgetdiv();createDom$$module$build$src$core$dropdowndiv();createDom$$module$build$src$core$tooltip();return c};\ninit$$module$build$src$core$inject=function(a){const b=a.options;var c=a.getParentSvg();conditionalBind$$module$build$src$core$browser_events(c.parentNode,\"contextmenu\",null,function(d){isTargetInput$$module$build$src$core$browser_events(d)||d.preventDefault()});c=conditionalBind$$module$build$src$core$browser_events(window,\"resize\",null,function(){hide$$module$build$src$core$tooltip();a.hideComponents(!0);repositionForWindowResize$$module$build$src$core$dropdowndiv();repositionForWindowResize$$module$build$src$core$widgetdiv();\nsvgResize$$module$build$src$core$common(a);bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects(a)});a.setResizeHandlerWrapper(c);bindDocumentEvents$$module$build$src$core$inject();if(b.languageTree){c=a.getToolbox();const d=a.getFlyout(!0);c?c.init():d&&(d.init(a),d.show(b.languageTree),typeof d.scrollToStart===\"function\"&&d.scrollToStart())}b.hasTrashcan&&a.trashcan.init();b.zoomOptions&&b.zoomOptions.controls&&a.zoomControls_.init();b.moveOptions&&b.moveOptions.scrollbars?(a.scrollbar=\nnew ScrollbarPair$$module$build$src$core$scrollbar_pair(a,b.moveOptions.scrollbars===!0||!!b.moveOptions.scrollbars.horizontal,b.moveOptions.scrollbars===!0||!!b.moveOptions.scrollbars.vertical,\"blocklyMainWorkspaceScrollbar\"),a.scrollbar.resize()):a.setMetrics({x:.5,y:.5});b.hasSounds&&loadSounds$$module$build$src$core$inject(b.pathToMedia,a)};\nbindDocumentEvents$$module$build$src$core$inject=function(){documentEventsBound$$module$build$src$core$inject||(conditionalBind$$module$build$src$core$browser_events(document,\"scroll\",null,function(){const a=getAllWorkspaces$$module$build$src$core$common();for(let b=0,c;c=a[b];b++)c instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&c.updateInverseScreenCTM()}),bind$$module$build$src$core$browser_events(document,\"touchend\",null,longStop$$module$build$src$core$touch),bind$$module$build$src$core$browser_events(document,\n\"touchcancel\",null,longStop$$module$build$src$core$touch));documentEventsBound$$module$build$src$core$inject=!0};\nloadSounds$$module$build$src$core$inject=function(a,b){function c(){for(;e.length;){const f=e.pop();f&&unbind$$module$build$src$core$browser_events(f)}d.preload()}const d=b.getAudioManager();d.load([a+\"click.mp3\",a+\"click.wav\",a+\"click.ogg\"],\"click\");d.load([a+\"disconnect.wav\",a+\"disconnect.mp3\",a+\"disconnect.ogg\"],\"disconnect\");d.load([a+\"delete.mp3\",a+\"delete.ogg\",a+\"delete.wav\"],\"delete\");const e=[];e.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",null,c,!0));\ne.push(conditionalBind$$module$build$src$core$browser_events(document,\"touchstart\",null,c,!0))};isFullBlockField$$module$build$src$core$contextmenu_items=function(a){if(!a||!a.isSimpleReporter())return!1;let b;return(b=a.getFields().next().value)==null?void 0:b.isFullBlockField()};\nregisterUndo$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.UNDO},preconditionFn(a){return a.workspace.getUndoStack().length>0?\"enabled\":\"disabled\"},callback(a){a.workspace.undo(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"undoWorkspace\",weight:1})};\nregisterRedo$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.REDO},preconditionFn(a){return a.workspace.getRedoStack().length>0?\"enabled\":\"disabled\"},callback(a){a.workspace.undo(!0)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"redoWorkspace\",weight:2})};\nregisterCleanup$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.CLEAN_UP},preconditionFn(a){return a.workspace.isMovable()?a.workspace.getTopBlocks(!1).length>1?\"enabled\":\"disabled\":\"hidden\"},callback(a){a.workspace.cleanUp()},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"cleanWorkspace\",weight:3})};\ntoggleOption_$$module$build$src$core$contextmenu_items=function(a,b){function c(f){e--;f.setCollapsed(a);e===0&&$.setGroup$$module$build$src$core$events$utils(!1)}let d=0,e=0;$.setGroup$$module$build$src$core$events$utils(!0);for(let f=0;f\n0?\"enabled\":\"disabled\":\"disabled\"},callback(a){if(a.workspace){a.workspace.cancelCurrentGesture();var b=getDeletableBlocks_$$module$build$src$core$contextmenu_items(a.workspace);b.length<2?deleteNext_$$module$build$src$core$contextmenu_items(b):confirm$$module$build$src$core$dialog($.Msg$$module$build$src$core$msg.DELETE_ALL_BLOCKS.replace(\"%1\",String(b.length)),function(c){c&&deleteNext_$$module$build$src$core$contextmenu_items(b)})}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,\nid:\"workspaceDelete\",weight:6})};registerWorkspaceOptions_$$module$build$src$core$contextmenu_items=function(){registerUndo$$module$build$src$core$contextmenu_items();registerRedo$$module$build$src$core$contextmenu_items();registerCleanup$$module$build$src$core$contextmenu_items();registerCollapse$$module$build$src$core$contextmenu_items();registerExpand$$module$build$src$core$contextmenu_items();registerDeleteAll$$module$build$src$core$contextmenu_items()};\nregisterDuplicate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.DUPLICATE_BLOCK},preconditionFn(a){a=a.block;return!a.isInFlyout&&a.isDeletable()&&a.isMovable()?a.isDuplicatable()?\"enabled\":\"disabled\":\"hidden\"},callback(a){if(a.block){var b=a.block.toCopyData();b&&paste$$module$build$src$core$clipboard(b,a.block.workspace)}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,\nid:\"blockDuplicate\",weight:1})};\nregisterComment$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){return a.block.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)?$.Msg$$module$build$src$core$msg.REMOVE_COMMENT:$.Msg$$module$build$src$core$msg.ADD_COMMENT},preconditionFn(a){a=a.block;return!a||a.isInFlyout||!a.workspace.options.comments||a.isCollapsed()||!a.isEditable()||!a.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)&&isFullBlockField$$module$build$src$core$contextmenu_items(a)?\n\"hidden\":\"enabled\"},callback(a){(a=a.block)&&a.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)?a.setCommentText(null):a.setCommentText(\"\")},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockComment\",weight:2})};\nregisterInline$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){return a.block.getInputsInline()?$.Msg$$module$build$src$core$msg.EXTERNAL_INPUTS:$.Msg$$module$build$src$core$msg.INLINE_INPUTS},preconditionFn(a){a=a.block;if(!a.isInFlyout&&a.isMovable()&&!a.isCollapsed())for(let b=1;b(b.has(MANUALLY_DISABLED$$module$build$src$core$constants)?\n1:0);return a.getInheritedDisabled()||b?\"disabled\":\"enabled\"}return\"hidden\"},callback(a){a=a.block;const b=$.getGroup$$module$build$src$core$events$utils();b||$.setGroup$$module$build$src$core$events$utils(!0);a.setDisabledReason(!a.hasDisabledReason(MANUALLY_DISABLED$$module$build$src$core$constants),MANUALLY_DISABLED$$module$build$src$core$constants);$.setGroup$$module$build$src$core$events$utils(b)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockDisable\",\nweight:5})};\nregisterDelete$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){var b=a.block;a=b.getDescendants(!1).length;(b=b.getNextBlock())&&(a-=b.getDescendants(!1).length);return a===1?$.Msg$$module$build$src$core$msg.DELETE_BLOCK:$.Msg$$module$build$src$core$msg.DELETE_X_BLOCKS.replace(\"%1\",`${a}`)},preconditionFn(a){return!a.block.isInFlyout&&a.block.isDeletable()?\"enabled\":\"hidden\"},callback(a){a.block&&a.block.checkAndDelete()},\nscopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockDelete\",weight:6})};\nregisterHelp$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.HELP},preconditionFn(a){a=a.block;return(typeof a.helpUrl===\"function\"?a.helpUrl():a.helpUrl)?\"enabled\":\"hidden\"},callback(a){a.block.showHelp()},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockHelp\",weight:7})};\nregisterCommentDelete$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.REMOVE_COMMENT,preconditionFn(a){let b;return((b=a.comment)==null?0:b.isDeletable())?\"enabled\":\"hidden\"},callback(a){$.setGroup$$module$build$src$core$events$utils(!0);let b;(b=a.comment)==null||b.dispose();$.setGroup$$module$build$src$core$events$utils(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.COMMENT,\nid:\"commentDelete\",weight:6})};\nregisterCommentDuplicate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.DUPLICATE_COMMENT,preconditionFn(a){let b;return((b=a.comment)==null?0:b.isMovable())?\"enabled\":\"hidden\"},callback(a){if(a.comment){var b=a.comment.toCopyData();b&&paste$$module$build$src$core$clipboard(b,a.comment.workspace)}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.COMMENT,id:\"commentDuplicate\",\nweight:1})};\nregisterCommentCreate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.ADD_COMMENT,preconditionFn:a=>{let b;return((b=a.workspace)==null?0:b.isMutator)?\"hidden\":\"enabled\"},callback:(a,b,c,d)=>{if(a=a.workspace)$.setGroup$$module$build$src$core$events$utils(!0),b=new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(a),b.setPlaceholderText($.Msg$$module$build$src$core$msg.WORKSPACE_COMMENT_DEFAULT_TEXT),\nb.moveTo(screenToWsCoordinates$$module$build$src$core$utils$svg_math(a,new Coordinate$$module$build$src$core$utils$coordinate(d.x,d.y))),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b),$.setGroup$$module$build$src$core$events$utils(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"commentCreate\",weight:8})};\nregisterBlockOptions_$$module$build$src$core$contextmenu_items=function(){registerDuplicate$$module$build$src$core$contextmenu_items();registerComment$$module$build$src$core$contextmenu_items();registerInline$$module$build$src$core$contextmenu_items();registerCollapseExpandBlock$$module$build$src$core$contextmenu_items();registerDisable$$module$build$src$core$contextmenu_items();registerDelete$$module$build$src$core$contextmenu_items();registerHelp$$module$build$src$core$contextmenu_items()};\nregisterCommentOptions$$module$build$src$core$contextmenu_items=function(){registerCommentDuplicate$$module$build$src$core$contextmenu_items();registerCommentDelete$$module$build$src$core$contextmenu_items();registerCommentCreate$$module$build$src$core$contextmenu_items()};registerDefaultOptions$$module$build$src$core$contextmenu_items=function(){registerWorkspaceOptions_$$module$build$src$core$contextmenu_items();registerBlockOptions_$$module$build$src$core$contextmenu_items()};\nisPaster$$module$build$src$core$interfaces$i_paster=function(a){return a&&typeof a.paste===\"function\"};isRenderedElement$$module$build$src$core$interfaces$i_rendered_element=function(a){return a&&typeof a.getSvgRoot===\"function\"};isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item=function(a){return a.isSelectable()};hideChaff$$module$build$src$core$blockly=function(a){getMainWorkspace$$module$build$src$core$common().hideChaff(a)};\nisFocusableTree$$module$build$src$core$interfaces$i_focusable_tree=function(a){return a&&typeof a.getRootFocusableNode===\"function\"&&typeof a.getRestoredFocusableNode===\"function\"&&typeof a.getNestedTrees===\"function\"&&typeof a.lookUpFocusableNode===\"function\"&&typeof a.onTreeFocus===\"function\"&&typeof a.onTreeBlur===\"function\"};$jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_ES6=!1;$jscomp.ASSUME_ES2020=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;\n$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.INSTRUMENT_ASYNC_CONTEXT=!0;$jscomp.objectCreate=$jscomp.ASSUME_ES5||typeof Object.create==\"function\"?Object.create:function(a){var b=function(){};b.prototype=a;return new b};$jscomp.defineProperty=$jscomp.ASSUME_ES5||typeof Object.defineProperties==\"function\"?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};\n$jscomp.getGlobal=function(a){a=[\"object\"==typeof globalThis&&globalThis,a,\"object\"==typeof window&&window,\"object\"==typeof self&&self,\"object\"==typeof __webpack_require__.g&&__webpack_require__.g];for(var b=0;b>>0,$jscomp.propertyToPolyfillSymbol[e]=$jscomp.IS_SYMBOL_NATIVE?\n$jscomp.global.Symbol(e):$jscomp.POLYFILL_PREFIX+c+\"$\"+e),$jscomp.defineProperty(d,$jscomp.propertyToPolyfillSymbol[e],{configurable:!0,writable:!0,value:b})))};\n$jscomp.getConstructImplementation=function(){function a(){function c(){}new c;Reflect.construct(c,[],function(){});return new c instanceof c}if($jscomp.TRUST_ES6_POLYFILLS&&typeof Reflect!=\"undefined\"&&Reflect.construct){if(a())return Reflect.construct;var b=Reflect.construct;return function(c,d,e){c=b(c,d);e&&Reflect.setPrototypeOf(c,e.prototype);return c}}return function(c,d,e){e===void 0&&(e=c);e=$jscomp.objectCreate(e.prototype||Object.prototype);return Function.prototype.apply.call(c,e,d)||\ne}};$jscomp.construct={valueOf:$jscomp.getConstructImplementation}.valueOf();$jscomp.underscoreProtoCanBeSet=function(){var a={a:!0},b={};try{return b.__proto__=a,b.a}catch(c){}return!1};$jscomp.setPrototypeOf=$jscomp.ASSUME_ES6||$jscomp.TRUST_ES6_POLYFILLS&&typeof Object.setPrototypeOf==\"function\"?Object.setPrototypeOf:$jscomp.underscoreProtoCanBeSet()?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+\" is not extensible\");return a}:null;\n$jscomp.inherits=function(a,b){a.prototype=$jscomp.objectCreate(b.prototype);a.prototype.constructor=a;if($jscomp.ASSUME_ES6||$jscomp.setPrototypeOf){var c=$jscomp.setPrototypeOf;c(a,b)}else for(c in b)if(c!=\"prototype\")if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.superClass_=b.prototype};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b0;){var a=this.properties_.pop();if(a in this.object_)return a}return null};$jscomp.generator.Engine_=function(a){this.context_=new $jscomp.generator.Context;this.program_=a};\n$jscomp.generator.Engine_.prototype.next_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,a,this.context_.next_);this.context_.next_(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.return_=function(a){this.context_.start_();var b=this.context_.yieldAllIterator_;if(b)return this.yieldAllStep_(\"return\"in b?b[\"return\"]:function(c){return{value:c,done:!0}},a,this.context_.return);this.context_.return(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.throw_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_[\"throw\"],a,this.context_.next_);this.context_.throw_(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.yieldAllStep_=function(a,b,c){try{var d=a.call(this.context_.yieldAllIterator_,b);$jscomp.generator.ensureIteratorResultIsObject_(d);if(!d.done)return this.context_.stop_(),d;var e=d.value}catch(f){return this.context_.yieldAllIterator_=null,this.context_.throw_(f),this.nextStep_()}this.context_.yieldAllIterator_=null;c.call(this.context_,e);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var a=this.program_(this.context_);if(a)return this.context_.stop_(),{value:a.value,done:!1}}catch(b){this.context_.yieldResult=void 0,this.context_.throw_(b)}this.context_.stop_();if(this.context_.abruptCompletion_){a=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(a.isException)throw a.exception;return{value:a.return,done:!0}}return{value:void 0,done:!0}};\n$jscomp.generator.Generator_=function(a){this.next=function(b){return a.next_(b)};this.throw=function(b){return a.throw_(b)};this.return=function(b){return a.return_(b)};this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(a,b){b=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(b));$jscomp.setPrototypeOf&&a.prototype&&$jscomp.setPrototypeOf(b,a.prototype);return b};\n$jscomp.asyncExecutePromiseGenerator=function(a){function b(d){return a.next(d)}function c(d){return a.throw(d)}return new Promise(function(d,e){function f(g){g.done?d(g.value):Promise.resolve(g.value).then(b,c).then(f,e)}f(a.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(a){return $jscomp.asyncExecutePromiseGenerator(a())};$jscomp.asyncExecutePromiseGeneratorProgram=function(a){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(a)))};\n$jscomp.polyfill(\"globalThis\",function(a){return a||$jscomp.global},\"es_2020\",\"es3\");$jscomp.polyfill(\"Array.prototype.includes\",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var e=d.length;c=c||0;for(c<0&&(c=Math.max(c+e,0));c0?(d=Array.prototype.flat.call(d,b-1),c.push.apply(c,d)):c.push(d)});return c}},\"es9\",\"es5\");\n$jscomp.polyfill(\"Object.entries\",function(a){return a?a:function(b){var c=[],d;for(d in b)$jscomp.owns(b,d)&&c.push([d,b[d]]);return c}},\"es8\",\"es3\");$jscomp.polyfill(\"Object.values\",function(a){return a?a:function(b){var c=[],d;for(d in b)$jscomp.owns(b,d)&&c.push(b[d]);return c}},\"es8\",\"es3\");\nvar typeMap$$module$build$src$core$registry=Object.create(null),TEST_ONLY$$module$build$src$core$registry={typeMap:typeMap$$module$build$src$core$registry},nameMap$$module$build$src$core$registry=Object.create(null),DEFAULT$$module$build$src$core$registry=\"default\",Type$$module$build$src$core$registry=class{constructor(a){this.name=a}toString(){return this.name}};Type$$module$build$src$core$registry.CONNECTION_CHECKER=new Type$$module$build$src$core$registry(\"connectionChecker\");\nType$$module$build$src$core$registry.CONNECTION_PREVIEWER=new Type$$module$build$src$core$registry(\"connectionPreviewer\");Type$$module$build$src$core$registry.CURSOR=new Type$$module$build$src$core$registry(\"cursor\");Type$$module$build$src$core$registry.EVENT=new Type$$module$build$src$core$registry(\"event\");Type$$module$build$src$core$registry.FIELD=new Type$$module$build$src$core$registry(\"field\");Type$$module$build$src$core$registry.INPUT=new Type$$module$build$src$core$registry(\"input\");\nType$$module$build$src$core$registry.RENDERER=new Type$$module$build$src$core$registry(\"renderer\");Type$$module$build$src$core$registry.TOOLBOX=new Type$$module$build$src$core$registry(\"toolbox\");Type$$module$build$src$core$registry.THEME=new Type$$module$build$src$core$registry(\"theme\");Type$$module$build$src$core$registry.TOOLBOX_ITEM=new Type$$module$build$src$core$registry(\"toolboxItem\");Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX=new Type$$module$build$src$core$registry(\"flyoutsVerticalToolbox\");\nType$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX=new Type$$module$build$src$core$registry(\"flyoutsHorizontalToolbox\");Type$$module$build$src$core$registry.FLYOUT_INFLATER=new Type$$module$build$src$core$registry(\"flyoutInflater\");Type$$module$build$src$core$registry.METRICS_MANAGER=new Type$$module$build$src$core$registry(\"metricsManager\");Type$$module$build$src$core$registry.BLOCK_DRAGGER=new Type$$module$build$src$core$registry(\"blockDragger\");\nType$$module$build$src$core$registry.SERIALIZER=new Type$$module$build$src$core$registry(\"serializer\");Type$$module$build$src$core$registry.ICON=new Type$$module$build$src$core$registry(\"icon\");Type$$module$build$src$core$registry.PASTER=new Type$$module$build$src$core$registry(\"paster\");Type$$module$build$src$core$registry.VARIABLE_MODEL=new Type$$module$build$src$core$registry(\"variableModel\");Type$$module$build$src$core$registry.VARIABLE_MAP=new Type$$module$build$src$core$registry(\"variableMap\");\nvar module$build$src$core$registry={DEFAULT:DEFAULT$$module$build$src$core$registry,TEST_ONLY:TEST_ONLY$$module$build$src$core$registry};module$build$src$core$registry.Type=Type$$module$build$src$core$registry;module$build$src$core$registry.getAllItems=getAllItems$$module$build$src$core$registry;module$build$src$core$registry.getClass=getClass$$module$build$src$core$registry;module$build$src$core$registry.getClassFromOptions=getClassFromOptions$$module$build$src$core$registry;\nmodule$build$src$core$registry.getObject=getObject$$module$build$src$core$registry;module$build$src$core$registry.hasItem=hasItem$$module$build$src$core$registry;module$build$src$core$registry.register=register$$module$build$src$core$registry;module$build$src$core$registry.unregister=unregister$$module$build$src$core$registry;var Blocks$$module$build$src$core$blocks=Object.create(null),module$build$src$core$blocks={Blocks:Blocks$$module$build$src$core$blocks};var LONGPRESS$$module$build$src$core$touch=750,TOUCH_ENABLED$$module$build$src$core$touch=\"ontouchstart\"in globalThis||!!(globalThis.document&&document.documentElement&&\"ontouchstart\"in document.documentElement)||!(!globalThis.navigator||!globalThis.navigator.maxTouchPoints&&!globalThis.navigator.msMaxTouchPoints),touchIdentifier_$$module$build$src$core$touch=null,TOUCH_MAP$$module$build$src$core$touch={mousedown:[\"pointerdown\"],mouseenter:[\"pointerenter\"],mouseleave:[\"pointerleave\"],mousemove:[\"pointermove\"],\nmouseout:[\"pointerout\"],mouseover:[\"pointerover\"],mouseup:[\"pointerup\",\"pointercancel\"],touchend:[\"pointerup\"],touchcancel:[\"pointercancel\"]},longPid_$$module$build$src$core$touch=0,module$build$src$core$touch={TOUCH_ENABLED:TOUCH_ENABLED$$module$build$src$core$touch,TOUCH_MAP:TOUCH_MAP$$module$build$src$core$touch};module$build$src$core$touch.checkTouchIdentifier=checkTouchIdentifier$$module$build$src$core$touch;module$build$src$core$touch.clearTouchIdentifier=clearTouchIdentifier$$module$build$src$core$touch;\nmodule$build$src$core$touch.getTouchIdentifierFromEvent=getTouchIdentifierFromEvent$$module$build$src$core$touch;module$build$src$core$touch.longStart=longStart$$module$build$src$core$touch;module$build$src$core$touch.longStop=longStop$$module$build$src$core$touch;module$build$src$core$touch.shouldHandleEvent=shouldHandleEvent$$module$build$src$core$touch;var rawUserAgent$$module$build$src$core$utils$useragent,isJavaFx$$module$build$src$core$utils$useragent,isWebKit$$module$build$src$core$utils$useragent,isGecko$$module$build$src$core$utils$useragent,isAndroid$$module$build$src$core$utils$useragent,isIPad$$module$build$src$core$utils$useragent,isIPhone$$module$build$src$core$utils$useragent,isMac$$module$build$src$core$utils$useragent,isTablet$$module$build$src$core$utils$useragent,isMobile$$module$build$src$core$utils$useragent;\n(function(a){function b(d){return c.includes(d.toUpperCase())}rawUserAgent$$module$build$src$core$utils$useragent=a;const c=rawUserAgent$$module$build$src$core$utils$useragent.toUpperCase();isJavaFx$$module$build$src$core$utils$useragent=b(\"JavaFX\");isWebKit$$module$build$src$core$utils$useragent=b(\"WebKit\");isGecko$$module$build$src$core$utils$useragent=b(\"Gecko\")&&!isWebKit$$module$build$src$core$utils$useragent;isAndroid$$module$build$src$core$utils$useragent=b(\"Android\");a=globalThis.navigator&&\nglobalThis.navigator.maxTouchPoints;isIPad$$module$build$src$core$utils$useragent=b(\"iPad\")||b(\"Macintosh\")&&a>0;isIPhone$$module$build$src$core$utils$useragent=b(\"iPhone\")&&!isIPad$$module$build$src$core$utils$useragent;isMac$$module$build$src$core$utils$useragent=b(\"Macintosh\");isTablet$$module$build$src$core$utils$useragent=isIPad$$module$build$src$core$utils$useragent||isAndroid$$module$build$src$core$utils$useragent&&!b(\"Mobile\")||b(\"Silk\");isMobile$$module$build$src$core$utils$useragent=!isTablet$$module$build$src$core$utils$useragent&&\n(isIPhone$$module$build$src$core$utils$useragent||isAndroid$$module$build$src$core$utils$useragent)})(globalThis.navigator&&globalThis.navigator.userAgent||\"\");\nvar raw$$module$build$src$core$utils$useragent=rawUserAgent$$module$build$src$core$utils$useragent,JavaFx$$module$build$src$core$utils$useragent=isJavaFx$$module$build$src$core$utils$useragent,GECKO$$module$build$src$core$utils$useragent=isGecko$$module$build$src$core$utils$useragent,ANDROID$$module$build$src$core$utils$useragent=isAndroid$$module$build$src$core$utils$useragent,IPAD$$module$build$src$core$utils$useragent=isIPad$$module$build$src$core$utils$useragent,IPHONE$$module$build$src$core$utils$useragent=\nisIPhone$$module$build$src$core$utils$useragent,MAC$$module$build$src$core$utils$useragent=isMac$$module$build$src$core$utils$useragent,MOBILE$$module$build$src$core$utils$useragent=isMobile$$module$build$src$core$utils$useragent,module$build$src$core$utils$useragent={ANDROID:ANDROID$$module$build$src$core$utils$useragent,GECKO:GECKO$$module$build$src$core$utils$useragent,IPAD:IPAD$$module$build$src$core$utils$useragent,IPHONE:IPHONE$$module$build$src$core$utils$useragent,JavaFx:JavaFx$$module$build$src$core$utils$useragent,\nMAC:MAC$$module$build$src$core$utils$useragent,MOBILE:MOBILE$$module$build$src$core$utils$useragent,raw:raw$$module$build$src$core$utils$useragent};var LINE_MODE_MULTIPLIER$$module$build$src$core$browser_events=40,PAGE_MODE_MULTIPLIER$$module$build$src$core$browser_events=125,module$build$src$core$browser_events={};module$build$src$core$browser_events.bind=bind$$module$build$src$core$browser_events;module$build$src$core$browser_events.conditionalBind=conditionalBind$$module$build$src$core$browser_events;module$build$src$core$browser_events.getScrollDeltaPixels=getScrollDeltaPixels$$module$build$src$core$browser_events;\nmodule$build$src$core$browser_events.isRightButton=isRightButton$$module$build$src$core$browser_events;module$build$src$core$browser_events.isTargetInput=isTargetInput$$module$build$src$core$browser_events;module$build$src$core$browser_events.mouseToSvg=mouseToSvg$$module$build$src$core$browser_events;module$build$src$core$browser_events.unbind=unbind$$module$build$src$core$browser_events;var EventType$$module$build$src$core$events$type;\n(function(a){a.BLOCK_CREATE=\"create\";a.BLOCK_DELETE=\"delete\";a.BLOCK_CHANGE=\"change\";a.BLOCK_FIELD_INTERMEDIATE_CHANGE=\"block_field_intermediate_change\";a.BLOCK_MOVE=\"move\";a.VAR_CREATE=\"var_create\";a.VAR_DELETE=\"var_delete\";a.VAR_RENAME=\"var_rename\";a.VAR_TYPE_CHANGE=\"var_type_change\";a.UI=\"ui\";a.BLOCK_DRAG=\"drag\";a.SELECTED=\"selected\";a.CLICK=\"click\";a.MARKER_MOVE=\"marker_move\";a.BUBBLE_OPEN=\"bubble_open\";a.TRASHCAN_OPEN=\"trashcan_open\";a.TOOLBOX_ITEM_SELECT=\"toolbox_item_select\";a.THEME_CHANGE=\n\"theme_change\";a.VIEWPORT_CHANGE=\"viewport_change\";a.COMMENT_CREATE=\"comment_create\";a.COMMENT_DELETE=\"comment_delete\";a.COMMENT_CHANGE=\"comment_change\";a.COMMENT_MOVE=\"comment_move\";a.COMMENT_RESIZE=\"comment_resize\";a.COMMENT_DRAG=\"comment_drag\";a.COMMENT_COLLAPSE=\"comment_collapse\";a.FINISHED_LOADING=\"finished_loading\"})(EventType$$module$build$src$core$events$type||(EventType$$module$build$src$core$events$type={}));\nvar BUMP_EVENTS$$module$build$src$core$events$type=[EventType$$module$build$src$core$events$type.BLOCK_CREATE,EventType$$module$build$src$core$events$type.BLOCK_MOVE,EventType$$module$build$src$core$events$type.COMMENT_CREATE,EventType$$module$build$src$core$events$type.COMMENT_MOVE],module$build$src$core$events$type={BUMP_EVENTS:BUMP_EVENTS$$module$build$src$core$events$type};module$build$src$core$events$type.EventType=EventType$$module$build$src$core$events$type;var soup$$module$build$src$core$utils$idgenerator=\"!#$%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",internal$$module$build$src$core$utils$idgenerator={genUid:()=>{const a=soup$$module$build$src$core$utils$idgenerator.length,b=[];for(let c=0;c<20;c++)b[c]=soup$$module$build$src$core$utils$idgenerator.charAt(Math.random()*a);return b.join(\"\")}},TEST_ONLY$$module$build$src$core$utils$idgenerator=internal$$module$build$src$core$utils$idgenerator,nextId$$module$build$src$core$utils$idgenerator=\n0,module$build$src$core$utils$idgenerator={TEST_ONLY:internal$$module$build$src$core$utils$idgenerator};module$build$src$core$utils$idgenerator.genUid=genUid$$module$build$src$core$utils$idgenerator;module$build$src$core$utils$idgenerator.getNextUniqueId=getNextUniqueId$$module$build$src$core$utils$idgenerator;var module$build$src$core$events$predicates={};module$build$src$core$events$predicates.isBlockChange=isBlockChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockCreate=isBlockCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockDelete=isBlockDelete$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockDrag=isBlockDrag$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isBlockFieldIntermediateChange=isBlockFieldIntermediateChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockMove=isBlockMove$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBubbleOpen=isBubbleOpen$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isClick=isClick$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isCommentChange=isCommentChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentCollapse=isCommentCollapse$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentCreate=isCommentCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentDelete=isCommentDelete$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isCommentDrag=isCommentDrag$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentMove=isCommentMove$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentResize=isCommentResize$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isFinishedLoading=isFinishedLoading$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isSelected=isSelected$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isThemeChange=isThemeChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isToolboxItemSelect=isToolboxItemSelect$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isTrashcanOpen=isTrashcanOpen$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isVarCreate=isVarCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isVarDelete=isVarDelete$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isVarRename=isVarRename$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isViewportChange=isViewportChange$$module$build$src$core$events$predicates;var group$$module$build$src$core$events$utils=\"\",recordUndo$$module$build$src$core$events$utils=!0,disabled$$module$build$src$core$events$utils=0,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils=\"ORPHANED_BLOCK\",FIRE_QUEUE$$module$build$src$core$events$utils=[],TEST_ONLY$$module$build$src$core$events$utils={FIRE_QUEUE:FIRE_QUEUE$$module$build$src$core$events$utils,enqueueEvent:enqueueEvent$$module$build$src$core$events$utils,fireNow:fireNow$$module$build$src$core$events$utils,fireInternal:fireInternal$$module$build$src$core$events$utils,\nsetGroupInternal:setGroupInternal$$module$build$src$core$events$utils},module$build$src$core$events$utils={TEST_ONLY:TEST_ONLY$$module$build$src$core$events$utils};module$build$src$core$events$utils.clearPendingUndo=clearPendingUndo$$module$build$src$core$events$utils;module$build$src$core$events$utils.disable=$.disable$$module$build$src$core$events$utils;module$build$src$core$events$utils.disableOrphans=disableOrphans$$module$build$src$core$events$utils;\nmodule$build$src$core$events$utils.enable=$.enable$$module$build$src$core$events$utils;module$build$src$core$events$utils.filter=filter$$module$build$src$core$events$utils;module$build$src$core$events$utils.fire=fire$$module$build$src$core$events$utils;module$build$src$core$events$utils.fromJson=fromJson$$module$build$src$core$events$utils;module$build$src$core$events$utils.get=get$$module$build$src$core$events$utils;module$build$src$core$events$utils.getDescendantIds=getDescendantIds$$module$build$src$core$events$utils;\nmodule$build$src$core$events$utils.getGroup=$.getGroup$$module$build$src$core$events$utils;module$build$src$core$events$utils.getRecordUndo=getRecordUndo$$module$build$src$core$events$utils;module$build$src$core$events$utils.isEnabled=isEnabled$$module$build$src$core$events$utils;module$build$src$core$events$utils.setGroup=$.setGroup$$module$build$src$core$events$utils;module$build$src$core$events$utils.setRecordUndo=$.setRecordUndo$$module$build$src$core$events$utils;var SVG_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/2000/svg\",HTML_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/1999/xhtml\",XLINK_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/1999/xlink\",NodeType$$module$build$src$core$utils$dom;(function(a){a[a.ELEMENT_NODE=1]=\"ELEMENT_NODE\";a[a.TEXT_NODE=3]=\"TEXT_NODE\";a[a.COMMENT_NODE=8]=\"COMMENT_NODE\"})(NodeType$$module$build$src$core$utils$dom||(NodeType$$module$build$src$core$utils$dom={}));\nvar cacheWidths$$module$build$src$core$utils$dom=null,cacheReference$$module$build$src$core$utils$dom=0,canvasContext$$module$build$src$core$utils$dom=null,module$build$src$core$utils$dom={HTML_NS:HTML_NS$$module$build$src$core$utils$dom};module$build$src$core$utils$dom.NodeType=NodeType$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.SVG_NS=SVG_NS$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.XLINK_NS=XLINK_NS$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.addClass=addClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.createSvgElement=createSvgElement$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getFastTextWidth=getFastTextWidth$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getFastTextWidthWithSizeString=getFastTextWidthWithSizeString$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getTextWidth=getTextWidth$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.hasClass=hasClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.insertAfter=insertAfter$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.measureFontMetrics=measureFontMetrics$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeClass=removeClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeClasses=removeClasses$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeNode=removeNode$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.setCssTransform=setCssTransform$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.startTextWidthCache=startTextWidthCache$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.stopTextWidthCache=stopTextWidthCache$$module$build$src$core$utils$dom;var FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser=class{static findFocusedNode(a){var b=a.getRootFocusableNode();if(!b.canBeFocused())return null;var c=b.getFocusableElement();if(hasClass$$module$build$src$core$utils$dom(c,FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME)||hasClass$$module$build$src$core$utils$dom(c,FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME))return b;\nb=c.querySelector(this.ACTIVE_FOCUS_NODE_CSS_SELECTOR);if(b instanceof HTMLElement||b instanceof SVGElement)if(b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(b,a))return b;c=c.querySelector(this.PASSIVE_FOCUS_NODE_CSS_SELECTOR);if(c instanceof HTMLElement||c instanceof SVGElement)if(a=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(c,a))return a;return null}static findFocusableNodeFor(a,b){if(!a.id||\na.id===\"null\"||b.getNestedTrees().map(e=>FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(a,e)).findIndex(e=>!!e)!==-1)return null;var c=b.getRootFocusableNode();if(c.canBeFocused()&&a===c.getFocusableElement())return c;var d;if(c=(d=b.lookUpFocusableNode(a.id))!=null?d:null)return c;d=a.parentElement;return!c&&d?FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(d,b):null}};\nFocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME=\"blocklyActiveFocus\";FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME=\"blocklyPassiveFocus\";FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_FOCUS_NODE_CSS_SELECTOR=`.${FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME}`;\nFocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_FOCUS_NODE_CSS_SELECTOR=`.${FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME}`;var module$build$src$core$utils$focusable_tree_traverser={};module$build$src$core$utils$focusable_tree_traverser.FocusableTreeTraverser=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser;var TreeRegistration$$module$build$src$core$focus_manager=class{constructor(a,b){this.tree=a;this.rootShouldBeAutoTabbable=b}},FocusManager$$module$build$src$core$focus_manager=class{constructor(a){this.previouslyFocusedNode=this.focusedNode=null;this.registeredTrees=[];this.isUpdatingFocusedNode=this.recentlyLostAllFocus=this.lockFocusStateChanges=this.currentlyHoldsEphemeralFocus=!1;const b=c=>{if(!this.isUpdatingFocusedNode){this.recentlyLostAllFocus=!c;var d=null;if(c instanceof HTMLElement||\nc instanceof SVGElement)for(var e of this.registeredTrees)if(d=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(c,e.tree))break;if(d&&d.canBeFocused()){c=d.getFocusableTree();let f;e=(f=this.focusedNode)==null?void 0:f.getFocusableTree();d===c.getRootFocusableNode()&&c!==e?this.focusTree(c):this.focusNode(d)}else this.defocusCurrentFocusedNode()}};a(\"focusin\",c=>{c instanceof FocusEvent&&b(document.activeElement)});a(\"focusout\",c=>{c instanceof FocusEvent&&\nb(c.relatedTarget)})}registerTree(a,b=!1){this.ensureManagerIsUnlocked();if(this.isRegistered(a))throw Error(`Attempted to re-register already registered tree: ${a}.`);this.registeredTrees.push(new TreeRegistration$$module$build$src$core$focus_manager(a,b));const c=a.getRootFocusableNode().getFocusableElement();if(!c.id||c.id===\"null\")throw Error(\"Attempting to register a tree with a root element that has an \"+`invalid ID: ${a}.`);b&&(c.tabIndex=0)}isRegistered(a){return!!this.lookUpRegistration(a)}lookUpRegistration(a){let b;\nreturn(b=this.registeredTrees.find(c=>c.tree===a))!=null?b:null}unregisterTree(a){this.ensureManagerIsUnlocked();if(!this.isRegistered(a))throw Error(`Attempted to unregister not registered tree: ${a}.`);var b=this.registeredTrees.findIndex(e=>e.tree===a);const c=this.registeredTrees[b];this.registeredTrees.splice(b,1);b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(a);const d=a.getRootFocusableNode();b&&this.removeHighlight(b);this.focusedNode!==b&&\nthis.focusedNode!==d||this.updateFocusedNode(null);this.removeHighlight(d);c.rootShouldBeAutoTabbable&&a.getRootFocusableNode().getFocusableElement().removeAttribute(\"tabindex\")}getFocusedTree(){let a,b;return(b=(a=this.focusedNode)==null?void 0:a.getFocusableTree())!=null?b:null}getFocusedNode(){return this.focusedNode}focusTree(a){this.ensureManagerIsUnlocked();if(!this.isRegistered(a))throw Error(`Attempted to focus unregistered tree: ${a}.`);const b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(a),\nc=a.getRestoredFocusableNode(b);a=a.getRootFocusableNode();let d;this.focusNode((d=c!=null?c:b)!=null?d:a)}focusNode(a){this.ensureManagerIsUnlocked();const b=!this.currentlyHoldsEphemeralFocus;b&&(this.isUpdatingFocusedNode=!0);var c,d=((c=this.focusedNode)==null?void 0:c.getFocusableElement())!==document.activeElement;if(this.focusedNode!==a||d)if(a.canBeFocused()){c=a.getFocusableTree();if(!this.isRegistered(c))throw Error(`Attempted to focus unregistered node: ${a}.`);d=a.getFocusableElement();\nd.id&&d.id!==\"null\"||console.warn(\"Trying to focus a node that has an invalid ID.\");var e=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(d,c);d=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(c);var f=a;if(e!==a){f=c.getRestoredFocusableNode(d);a=c.getRootFocusableNode();var g;f=(g=f!=null?f:d)!=null?g:a}a=this.focusedNode;g=a==null?void 0:a.getFocusableTree();a&&this.passivelyFocusNode(a,c);c=c.getRootFocusableNode();\nd&&this.removeHighlight(d);c!==f&&this.removeHighlight(c);this.currentlyHoldsEphemeralFocus||this.activelyFocusNode(f,g!=null?g:null);this.updateFocusedNode(f)}else console.warn(\"Trying to focus a node that can't be focused.\");b&&(this.isUpdatingFocusedNode=!1)}takeEphemeralFocus(a){this.ensureManagerIsUnlocked();if(this.currentlyHoldsEphemeralFocus)throw Error(\"Attempted to take ephemeral focus when it's already held, \"+`with new element: ${a}.`);this.currentlyHoldsEphemeralFocus=!0;this.focusedNode&&\nthis.passivelyFocusNode(this.focusedNode,null);a.focus({preventScroll:!0});let b=!1;return()=>{if(b)throw Error(\"Attempted to finish ephemeral focus twice for element: \"+`${a}.`);b=!0;this.currentlyHoldsEphemeralFocus=!1;if(this.focusedNode){this.activelyFocusNode(this.focusedNode,null);const c=this.focusedNode;setTimeout(()=>{!this.focusedNode&&this.previouslyFocusedNode===c&&this.recentlyLostAllFocus&&this.focusNode(c)},0)}}}ephemeralFocusTaken(){return this.currentlyHoldsEphemeralFocus}ensureManagerIsUnlocked(){if(this.lockFocusStateChanges)throw Error(\"FocusManager state changes cannot happen in a tree/node focus/blur callback.\");\n}updateFocusedNode(a){this.previouslyFocusedNode=this.focusedNode;this.focusedNode=a}defocusCurrentFocusedNode(){this.focusedNode&&!this.currentlyHoldsEphemeralFocus&&(this.passivelyFocusNode(this.focusedNode,null),this.updateFocusedNode(null))}activelyFocusNode(a,b){this.lockFocusStateChanges=!0;const c=a.getFocusableTree(),d=a.getFocusableElement();let e;const f=(e=this.lookUpRegistration(c))==null?void 0:e.rootShouldBeAutoTabbable;c!==b&&(c.onTreeFocus(a,b),f&&(c.getRootFocusableNode().getFocusableElement().tabIndex=\n-1));a.onNodeFocus();this.lockFocusStateChanges=!1;f&&a===c.getRootFocusableNode()||d.hasAttribute(\"tabindex\")||(d.tabIndex=-1);this.setNodeToVisualActiveFocus(a);d.focus({preventScroll:!0})}passivelyFocusNode(a,b){this.lockFocusStateChanges=!0;const c=a.getFocusableTree();if(c!==b){c.onTreeBlur(b);let d;if((d=this.lookUpRegistration(c))==null?0:d.rootShouldBeAutoTabbable)c.getRootFocusableNode().getFocusableElement().tabIndex=0}a.onNodeBlur();this.lockFocusStateChanges=!1;c!==b&&this.setNodeToVisualPassiveFocus(a)}setNodeToVisualActiveFocus(a){a=\na.getFocusableElement();addClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}setNodeToVisualPassiveFocus(a){a=a.getFocusableElement();removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);addClass$$module$build$src$core$utils$dom(a,\nFocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}removeHighlight(a){a=a.getFocusableElement();removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}static getFocusManager(){FocusManager$$module$build$src$core$focus_manager.focusManager||(FocusManager$$module$build$src$core$focus_manager.focusManager=\nnew FocusManager$$module$build$src$core$focus_manager(document.addEventListener));return FocusManager$$module$build$src$core$focus_manager.focusManager}};FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME=\"blocklyActiveFocus\";FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME=\"blocklyPassiveFocus\";FocusManager$$module$build$src$core$focus_manager.focusManager=null;var module$build$src$core$focus_manager={};\nmodule$build$src$core$focus_manager.FocusManager=FocusManager$$module$build$src$core$focus_manager;module$build$src$core$focus_manager.getFocusManager=$.getFocusManager$$module$build$src$core$focus_manager;var module$build$src$core$interfaces$i_focusable_node={};module$build$src$core$interfaces$i_focusable_node.isFocusableNode=isFocusableNode$$module$build$src$core$interfaces$i_focusable_node;var module$build$src$core$interfaces$i_selectable={};module$build$src$core$interfaces$i_selectable.isSelectable=isSelectable$$module$build$src$core$interfaces$i_selectable;var module$build$src$core$utils$object={};module$build$src$core$utils$object.deepMerge=deepMerge$$module$build$src$core$utils$object;var ShortcutRegistry$$module$build$src$core$shortcut_registry=class{constructor(){this.shortcuts=new Map;this.keyMap=new Map;this.reset()}reset(){this.shortcuts.clear();this.keyMap.clear()}register(a,b){if(this.shortcuts.get(a.name)&&!b)throw Error(`Shortcut named \"${a.name}\" already exists.`);this.shortcuts.set(a.name,a);b=a.keyCodes;if(b==null?0:b.length)for(const c of b)this.addKeyMapping(c,a.name,!!a.allowCollision)}unregister(a){if(!this.shortcuts.get(a))return console.warn(`Keyboard shortcut named \"${a}\" not found.`),\n!1;this.removeAllKeyMappings(a);this.shortcuts.delete(a);return!0}addKeyMapping(a,b,c){a=`${a}`;const d=this.keyMap.get(a);if(d&&!c)throw Error(`Shortcut named \"${b}\" collides with shortcuts \"${d}\"`);d&&c?d.unshift(b):this.keyMap.set(a,[b])}removeKeyMapping(a,b,c){const d=this.keyMap.get(a);if(!d)return c||console.warn(`No keyboard shortcut named \"${b}\" registered with key code \"${a}\"`),!1;const e=d.indexOf(b);if(e>-1)return d.splice(e,1),d.length===0&&this.keyMap.delete(a),!0;c||console.warn(`No keyboard shortcut named \"${b}\" registered with key code \"${a}\"`);\nreturn!1}removeAllKeyMappings(a){for(const b of this.keyMap.keys())this.removeKeyMapping(b,a,!0)}setKeyMap(a){this.keyMap.clear();for(const b in a)this.keyMap.set(b,a[b])}getKeyMap(){const a=Object.create(null);for(const [b,c]of this.keyMap)a[b]=c;return a}getRegistry(){const a=Object.create(null);for(const [b,c]of this.shortcuts)a[b]=c;return deepMerge$$module$build$src$core$utils$object(Object.create(null),a)}onKeyDown(a,b){var c=this.serializeKeyEvent(b);c=this.getShortcutNamesByKeyCode(c);if(!c)return!1;\nfor(const d of c){c=this.shortcuts.get(d);let e;if(!c||c.preconditionFn&&!c.preconditionFn(a,{focusedNode:(e=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode())!=null?e:void 0}))continue;let f,g,h;if((g=(f=c).callback)==null?0:g.call(f,a,b,c,{focusedNode:(h=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode())!=null?h:void 0}))return!0}return!1}getShortcutNamesByKeyCode(a){let b;return((b=this.keyMap.get(a))==null?void 0:b.slice())||[]}getKeyCodesByShortcutName(a){const b=\n[];for(const [c,d]of this.keyMap)d.indexOf(a)>-1&&b.push(c);return b}serializeKeyEvent(a){let b=\"\";for(const c in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys)a.getModifierState(c)&&(b!==\"\"&&(b+=\"+\"),b+=c);b!==\"\"&&a.keyCode?b+=\"+\"+a.keyCode:a.keyCode&&(b=String(a.keyCode));return b}checkModifiers(a){for(const b of a)if(!(b in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys))throw Error(b+\" is not a valid modifier key.\");}createSerializedKey(a,b){let c=\n\"\";if(b){this.checkModifiers(b);for(const d in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys)b.includes(ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys[d])&&(c!==\"\"&&(c+=\"+\"),c+=d)}c!==\"\"&&a?c+=\"+\"+a:a&&(c=`${a}`);return c}};ShortcutRegistry$$module$build$src$core$shortcut_registry.registry=new ShortcutRegistry$$module$build$src$core$shortcut_registry;\n(function(a){a=a.modifierKeys||(a.modifierKeys={});a[a.Shift=16]=\"Shift\";a[a.Control=17]=\"Control\";a[a.Alt=18]=\"Alt\";a[a.Meta=91]=\"Meta\"})(ShortcutRegistry$$module$build$src$core$shortcut_registry||(ShortcutRegistry$$module$build$src$core$shortcut_registry={}));var module$build$src$core$shortcut_registry={};module$build$src$core$shortcut_registry.ShortcutRegistry=ShortcutRegistry$$module$build$src$core$shortcut_registry;var WorkspaceDB_$$module$build$src$core$common=Object.create(null),mainWorkspace$$module$build$src$core$common,parentContainer$$module$build$src$core$common,draggingConnections$$module$build$src$core$common=[],TEST_ONLY$$module$build$src$core$common={defineBlocksWithJsonArrayInternal:defineBlocksWithJsonArrayInternal$$module$build$src$core$common},module$build$src$core$common={TEST_ONLY:TEST_ONLY$$module$build$src$core$common};module$build$src$core$common.createBlockDefinitionsFromJsonArray=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common;\nmodule$build$src$core$common.defineBlocks=$.defineBlocks$$module$build$src$core$common;module$build$src$core$common.defineBlocksWithJsonArray=defineBlocksWithJsonArray$$module$build$src$core$common;module$build$src$core$common.draggingConnections=draggingConnections$$module$build$src$core$common;module$build$src$core$common.fireSelectedEvent=fireSelectedEvent$$module$build$src$core$common;module$build$src$core$common.getAllWorkspaces=getAllWorkspaces$$module$build$src$core$common;\nmodule$build$src$core$common.getBlockTypeCounts=getBlockTypeCounts$$module$build$src$core$common;module$build$src$core$common.getMainWorkspace=getMainWorkspace$$module$build$src$core$common;module$build$src$core$common.getParentContainer=getParentContainer$$module$build$src$core$common;module$build$src$core$common.getSelected=getSelected$$module$build$src$core$common;module$build$src$core$common.getWorkspaceById=getWorkspaceById$$module$build$src$core$common;\nmodule$build$src$core$common.globalShortcutHandler=globalShortcutHandler$$module$build$src$core$common;module$build$src$core$common.registerWorkspace=registerWorkspace$$module$build$src$core$common;module$build$src$core$common.setMainWorkspace=setMainWorkspace$$module$build$src$core$common;module$build$src$core$common.setParentContainer=setParentContainer$$module$build$src$core$common;module$build$src$core$common.setSelected=setSelected$$module$build$src$core$common;\nmodule$build$src$core$common.svgResize=svgResize$$module$build$src$core$common;module$build$src$core$common.unregisterWorkpace=unregisterWorkpace$$module$build$src$core$common;var Abstract$$module$build$src$core$events$events_abstract=class{constructor(){this.workspaceId=void 0;this.isUiEvent=!1;this.type=\"\";this.group=$.getGroup$$module$build$src$core$events$utils();this.recordUndo=getRecordUndo$$module$build$src$core$events$utils()}toJson(){return{type:this.type,group:this.group}}static fromJson(a,b,c){c.isBlank=!1;c.group=a.group||\"\";c.workspaceId=b.id;return c}isNull(){return!1}run(a){}getEventWorkspace_(){let a;this.workspaceId&&(a=getWorkspaceById$$module$build$src$core$common(this.workspaceId));\nif(!a)throw Error(\"Workspace is null. Event must have been generated from real Blockly events.\");return a}},module$build$src$core$events$events_abstract={};module$build$src$core$events$events_abstract.Abstract=Abstract$$module$build$src$core$events$events_abstract;var UiBase$$module$build$src$core$events$events_ui_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.recordUndo=!1;this.isUiEvent=!0;this.isBlank=typeof a===\"undefined\";this.workspaceId=a?a:\"\"}},module$build$src$core$events$events_ui_base={};module$build$src$core$events$events_ui_base.UiBase=UiBase$$module$build$src$core$events$events_ui_base;var Click$$module$build$src$core$events$events_click=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b,c){b=a?a.workspace.id:b;b===null&&(b=void 0);super(b);this.type=EventType$$module$build$src$core$events$type.CLICK;this.blockId=a?a.id:void 0;this.targetType=c}toJson(){const a=super.toJson();if(!this.targetType)throw Error(\"The click target type is undefined. Either pass a block to the constructor, or call fromJson\");a.targetType=this.targetType;a.blockId=this.blockId;\nreturn a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new Click$$module$build$src$core$events$events_click);b.targetType=a.targetType;b.blockId=a.blockId;return b}},ClickTarget$$module$build$src$core$events$events_click;(function(a){a.BLOCK=\"block\";a.WORKSPACE=\"workspace\";a.ZOOM_CONTROLS=\"zoom_controls\"})(ClickTarget$$module$build$src$core$events$events_click||(ClickTarget$$module$build$src$core$events$events_click={}));\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.CLICK,Click$$module$build$src$core$events$events_click);var module$build$src$core$events$events_click={};module$build$src$core$events$events_click.Click=Click$$module$build$src$core$events$events_click;module$build$src$core$events$events_click.ClickTarget=ClickTarget$$module$build$src$core$events$events_click;var module$build$src$core$utils$array={};module$build$src$core$utils$array.removeElem=removeElem$$module$build$src$core$utils$array;var Capability$$module$build$src$core$component_manager=class{constructor(a){this.name=a}toString(){return this.name}};Capability$$module$build$src$core$component_manager.POSITIONABLE=new Capability$$module$build$src$core$component_manager(\"positionable\");Capability$$module$build$src$core$component_manager.DRAG_TARGET=new Capability$$module$build$src$core$component_manager(\"drag_target\");Capability$$module$build$src$core$component_manager.DELETE_AREA=new Capability$$module$build$src$core$component_manager(\"delete_area\");\nCapability$$module$build$src$core$component_manager.AUTOHIDEABLE=new Capability$$module$build$src$core$component_manager(\"autohideable\");\nvar ComponentManager$$module$build$src$core$component_manager=class{constructor(){this.componentData=new Map;this.capabilityToComponentIds=new Map}addComponent(a,b){const c=a.component.id;if(!b&&this.componentData.has(c)){var d;throw Error('Plugin \"'+c+'\" with capabilities \"'+((d=this.componentData.get(c))==null?void 0:d.capabilities)+'\" already added.');}this.componentData.set(c,a);b=[];for(d=0;d\n{d.push(this.componentData.get(e))});d.sort(function(e,f){return e.weight-f.weight});d.forEach(function(e){c.push(e.component)})}else a.forEach(d=>{c.push(this.componentData.get(d).component)});return c}};ComponentManager$$module$build$src$core$component_manager.Capability=Capability$$module$build$src$core$component_manager;\n(function(a){a=a.ComponentWeight||(a.ComponentWeight={});a[a.TOOLBOX_WEIGHT=0]=\"TOOLBOX_WEIGHT\";a[a.FLYOUT_WEIGHT=1]=\"FLYOUT_WEIGHT\";a[a.TRASHCAN_WEIGHT=2]=\"TRASHCAN_WEIGHT\";a[a.ZOOM_CONTROLS_WEIGHT=3]=\"ZOOM_CONTROLS_WEIGHT\"})(ComponentManager$$module$build$src$core$component_manager||(ComponentManager$$module$build$src$core$component_manager={}));\nvar ComponentWeight$$module$build$src$core$component_manager=ComponentManager$$module$build$src$core$component_manager.ComponentWeight,module$build$src$core$component_manager={};module$build$src$core$component_manager.ComponentManager=ComponentManager$$module$build$src$core$component_manager;module$build$src$core$component_manager.ComponentWeight=ComponentWeight$$module$build$src$core$component_manager;var injected$$module$build$src$core$css=!1,content$$module$build$src$core$css='\\n.blocklySvg {\\n background-color: #fff;\\n outline: none;\\n overflow: hidden; /* IE overflows by default. */\\n position: absolute;\\n display: block;\\n}\\n\\n.blocklyWidgetDiv {\\n display: none;\\n position: absolute;\\n z-index: 99999; /* big value for bootstrap3 compatibility */\\n}\\n\\n.injectionDiv {\\n height: 100%;\\n position: relative;\\n overflow: hidden; /* So blocks in drag surface disappear at edges */\\n touch-action: none;\\n user-select: none;\\n -webkit-user-select: none;\\n}\\n\\n.blocklyBlockCanvas.blocklyCanvasTransitioning,\\n.blocklyBubbleCanvas.blocklyCanvasTransitioning {\\n transition: transform .5s;\\n}\\n\\n.blocklyEmboss {\\n filter: var(--blocklyEmbossFilter);\\n}\\n\\n.blocklyTooltipDiv {\\n background-color: #ffffc7;\\n border: 1px solid #ddc;\\n box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15);\\n color: #000;\\n display: none;\\n font: 9pt sans-serif;\\n opacity: .9;\\n padding: 2px;\\n position: absolute;\\n z-index: 100000; /* big value for bootstrap3 compatibility */\\n}\\n\\n.blocklyDropDownDiv {\\n position: absolute;\\n left: 0;\\n top: 0;\\n z-index: 1000;\\n display: none;\\n border: 1px solid;\\n border-color: #dadce0;\\n background-color: #fff;\\n border-radius: 2px;\\n padding: 4px;\\n box-shadow: 0 0 3px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownDiv:focus {\\n box-shadow: 0 0 6px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownContent {\\n max-height: 300px; /* @todo: spec for maximum height. */\\n}\\n\\n.blocklyDropDownArrow {\\n position: absolute;\\n left: 0;\\n top: 0;\\n width: 16px;\\n height: 16px;\\n z-index: -1;\\n background-color: inherit;\\n border-color: inherit;\\n border-top: 1px solid;\\n border-left: 1px solid;\\n border-top-left-radius: 4px;\\n border-color: inherit;\\n}\\n\\n.blocklyHighlighted>.blocklyPath {\\n filter: var(--blocklyEmbossFilter);\\n}\\n\\n.blocklyHighlightedConnectionPath {\\n fill: none;\\n stroke: #fc3;\\n stroke-width: 4px;\\n}\\n\\n.blocklyPathLight {\\n fill: none;\\n stroke-linecap: round;\\n stroke-width: 1;\\n}\\n\\n.blocklySelected>.blocklyPathLight {\\n display: none;\\n}\\n\\n.blocklyDraggable {\\n cursor: grab;\\n cursor: -webkit-grab;\\n}\\n\\n.blocklyDragging {\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n /* Drag surface disables events to not block the toolbox, so we have to\\n * reenable them here for the cursor values to work. */\\n pointer-events: auto;\\n}\\n\\n /* Changes cursor on mouse down. Not effective in Firefox because of\\n https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */\\n.blocklyDraggable:active {\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n}\\n\\n.blocklyDragging.blocklyDraggingDelete,\\n.blocklyDragging.blocklyDraggingDelete .blocklyField {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyDragging>.blocklyPath,\\n.blocklyDragging>.blocklyPathLight {\\n fill-opacity: .8;\\n stroke-opacity: .8;\\n}\\n\\n.blocklyDragging>.blocklyPathDark {\\n display: none;\\n}\\n\\n.blocklyDisabledPattern>.blocklyPath {\\n fill: var(--blocklyDisabledPattern);\\n fill-opacity: .5;\\n stroke-opacity: .5;\\n}\\n\\n.blocklyDisabled>.blocklyPathLight,\\n.blocklyDisabled>.blocklyPathDark {\\n display: none;\\n}\\n\\n.blocklyInsertionMarker>.blocklyPath,\\n.blocklyInsertionMarker>.blocklyPathLight,\\n.blocklyInsertionMarker>.blocklyPathDark {\\n fill-opacity: .2;\\n stroke: none;\\n}\\n\\n.blocklyNonEditableField>text {\\n pointer-events: none;\\n}\\n\\n.blocklyFlyout {\\n position: absolute;\\n z-index: 20;\\n}\\n\\n.blocklyText text {\\n cursor: default;\\n}\\n\\n/*\\n Don\\'t allow users to select text. It gets annoying when trying to\\n drag a block and selected text moves instead.\\n*/\\n.blocklySvg text {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n cursor: inherit;\\n}\\n\\n.blocklyIconGroup {\\n cursor: default;\\n}\\n\\n.blocklyIconGroup:not(:hover):not(:focus),\\n.blocklyIconGroupReadonly {\\n opacity: .6;\\n}\\n\\n.blocklyIconShape {\\n fill: #00f;\\n stroke: #fff;\\n stroke-width: 1px;\\n}\\n\\n.blocklyIconSymbol {\\n fill: #fff;\\n}\\n\\n.blocklyMinimalBody {\\n margin: 0;\\n padding: 0;\\n height: 100%;\\n}\\n\\n.blocklyHtmlInput {\\n border: none;\\n border-radius: 4px;\\n height: 100%;\\n margin: 0;\\n outline: none;\\n padding: 0;\\n width: 100%;\\n text-align: center;\\n display: block;\\n box-sizing: border-box;\\n}\\n\\n/* Remove the increase and decrease arrows on the field number editor */\\ninput.blocklyHtmlInput[type=number]::-webkit-inner-spin-button,\\ninput.blocklyHtmlInput[type=number]::-webkit-outer-spin-button {\\n -webkit-appearance: none;\\n margin: 0;\\n}\\n\\ninput[type=number] {\\n -moz-appearance: textfield;\\n}\\n\\n.blocklyMainBackground {\\n stroke-width: 1;\\n stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */\\n}\\n\\n.blocklyMutatorBackground {\\n fill: #fff;\\n stroke: #ddd;\\n stroke-width: 1;\\n}\\n\\n.blocklyFlyoutBackground {\\n fill: #ddd;\\n fill-opacity: .8;\\n}\\n\\n.blocklyMainWorkspaceScrollbar {\\n z-index: 20;\\n}\\n\\n.blocklyFlyoutScrollbar {\\n z-index: 30;\\n}\\n\\n.blocklyScrollbarHorizontal,\\n.blocklyScrollbarVertical {\\n position: absolute;\\n outline: none;\\n}\\n\\n.blocklyScrollbarBackground {\\n opacity: 0;\\n pointer-events: none;\\n}\\n\\n.blocklyScrollbarHandle {\\n fill: #ccc;\\n}\\n\\n.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,\\n.blocklyScrollbarHandle:hover {\\n fill: #bbb;\\n}\\n\\n/* Darken flyout scrollbars due to being on a grey background. */\\n/* By contrast, workspace scrollbars are on a white background. */\\n.blocklyFlyout .blocklyScrollbarHandle {\\n fill: #bbb;\\n}\\n\\n.blocklyFlyout .blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,\\n.blocklyFlyout .blocklyScrollbarHandle:hover {\\n fill: #aaa;\\n}\\n\\n.blocklyInvalidInput {\\n background: #faa;\\n}\\n\\n.blocklyVerticalMarker {\\n stroke-width: 3px;\\n fill: rgba(255,255,255,.5);\\n pointer-events: none;\\n}\\n\\n.blocklyComputeCanvas {\\n position: absolute;\\n width: 0;\\n height: 0;\\n}\\n\\n.blocklyNoPointerEvents {\\n pointer-events: none;\\n}\\n\\n.blocklyContextMenu {\\n border-radius: 4px;\\n max-height: 100%;\\n}\\n\\n.blocklyDropdownMenu {\\n border-radius: 2px;\\n padding: 0 !important;\\n}\\n\\n.blocklyDropdownMenu .blocklyMenuItem {\\n /* 28px on the left for icon or checkbox. */\\n padding-left: 28px;\\n}\\n\\n/* BiDi override for the resting state. */\\n.blocklyDropdownMenu .blocklyMenuItemRtl {\\n /* Flip left/right padding for BiDi. */\\n padding-left: 5px;\\n padding-right: 28px;\\n}\\n\\n.blocklyWidgetDiv .blocklyMenu {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background: #fff;\\n border: 1px solid transparent;\\n box-shadow: 0 0 3px 1px rgba(0,0,0,.3);\\n font: normal 13px Arial, sans-serif;\\n margin: 0;\\n outline: none;\\n padding: 4px 0;\\n position: absolute;\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 100%;\\n z-index: 20000; /* Arbitrary, but some apps depend on it... */\\n}\\n\\n.blocklyWidgetDiv .blocklyMenu:focus {\\n box-shadow: 0 0 6px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownDiv .blocklyMenu {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background: inherit; /* Compatibility with gapi, reset from goog-menu */\\n border: inherit; /* Compatibility with gapi, reset from goog-menu */\\n font: normal 13px \"Helvetica Neue\", Helvetica, sans-serif;\\n outline: none;\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 100%;\\n z-index: 20000; /* Arbitrary, but some apps depend on it... */\\n}\\n\\n/* State: resting. */\\n.blocklyMenuItem {\\n border: none;\\n color: #000;\\n cursor: pointer;\\n list-style: none;\\n margin: 0;\\n /* 7em on the right for shortcut. */\\n min-width: 7em;\\n padding: 6px 15px;\\n white-space: nowrap;\\n}\\n\\n/* State: disabled. */\\n.blocklyMenuItemDisabled {\\n color: #ccc;\\n cursor: inherit;\\n}\\n\\n/* State: hover. */\\n.blocklyMenuItemHighlight {\\n background-color: rgba(0,0,0,.1);\\n}\\n\\n/* State: selected/checked. */\\n.blocklyMenuItemCheckbox {\\n height: 16px;\\n position: absolute;\\n width: 16px;\\n}\\n\\n.blocklyMenuItemSelected .blocklyMenuItemCheckbox {\\n background: url(<<>>/sprites.png) no-repeat -48px -16px;\\n float: left;\\n margin-left: -24px;\\n position: static; /* Scroll with the menu. */\\n}\\n\\n.blocklyMenuItemRtl .blocklyMenuItemCheckbox {\\n float: right;\\n margin-right: -24px;\\n}\\n\\n.blocklyMenuSeparator {\\n background-color: #ccc;\\n height: 1px;\\n border: 0;\\n margin-left: 4px;\\n margin-right: 4px;\\n}\\n\\n.blocklyBlockDragSurface, .blocklyAnimationLayer {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n overflow: visible !important;\\n z-index: 80;\\n pointer-events: none;\\n}\\n\\n.blocklyField {\\n cursor: default;\\n}\\n\\n.blocklyInputField {\\n cursor: text;\\n}\\n\\n.blocklyDragging .blocklyField,\\n.blocklyDragging .blocklyIconGroup {\\n cursor: grabbing;\\n}\\n\\n.blocklyActiveFocus:is(\\n .blocklyFlyout,\\n .blocklyWorkspace,\\n .blocklyField,\\n .blocklyPath,\\n .blocklyHighlightedConnectionPath,\\n .blocklyComment,\\n .blocklyBubble,\\n .blocklyIconGroup,\\n .blocklyTextarea\\n) {\\n outline: none;\\n}\\n',\nmodule$build$src$core$css={};module$build$src$core$css.inject=inject$$module$build$src$core$css;module$build$src$core$css.register=register$$module$build$src$core$css;var Coordinate$$module$build$src$core$utils$coordinate=class{constructor(a,b){this.x=a;this.y=b}clone(){return new Coordinate$$module$build$src$core$utils$coordinate(this.x,this.y)}scale(a){this.x*=a;this.y*=a;return this}translate(a,b){this.x+=a;this.y+=b;return this}static equals(a,b){return a===b?!0:a&&b?a.x===b.x&&a.y===b.y:!1}static distance(a,b){const c=a.x-b.x;a=a.y-b.y;return Math.sqrt(c*c+a*a)}static magnitude(a){return Math.sqrt(a.x*a.x+a.y*a.y)}static difference(a,b){return new Coordinate$$module$build$src$core$utils$coordinate(a.x-\nb.x,a.y-b.y)}static sum(a,b){return new Coordinate$$module$build$src$core$utils$coordinate(a.x+b.x,a.y+b.y)}},module$build$src$core$utils$coordinate={};module$build$src$core$utils$coordinate.Coordinate=Coordinate$$module$build$src$core$utils$coordinate;var Svg$$module$build$src$core$utils$svg=class{constructor(a){this.tagName=a}toString(){return this.tagName}};Svg$$module$build$src$core$utils$svg.ANIMATE=new Svg$$module$build$src$core$utils$svg(\"animate\");Svg$$module$build$src$core$utils$svg.CIRCLE=new Svg$$module$build$src$core$utils$svg(\"circle\");Svg$$module$build$src$core$utils$svg.CLIPPATH=new Svg$$module$build$src$core$utils$svg(\"clipPath\");Svg$$module$build$src$core$utils$svg.DEFS=new Svg$$module$build$src$core$utils$svg(\"defs\");\nSvg$$module$build$src$core$utils$svg.FECOMPOSITE=new Svg$$module$build$src$core$utils$svg(\"feComposite\");Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER=new Svg$$module$build$src$core$utils$svg(\"feComponentTransfer\");Svg$$module$build$src$core$utils$svg.FEFLOOD=new Svg$$module$build$src$core$utils$svg(\"feFlood\");Svg$$module$build$src$core$utils$svg.FEFUNCA=new Svg$$module$build$src$core$utils$svg(\"feFuncA\");Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR=new Svg$$module$build$src$core$utils$svg(\"feGaussianBlur\");\nSvg$$module$build$src$core$utils$svg.FEPOINTLIGHT=new Svg$$module$build$src$core$utils$svg(\"fePointLight\");Svg$$module$build$src$core$utils$svg.FESPECULARLIGHTING=new Svg$$module$build$src$core$utils$svg(\"feSpecularLighting\");Svg$$module$build$src$core$utils$svg.FILTER=new Svg$$module$build$src$core$utils$svg(\"filter\");Svg$$module$build$src$core$utils$svg.FOREIGNOBJECT=new Svg$$module$build$src$core$utils$svg(\"foreignObject\");Svg$$module$build$src$core$utils$svg.G=new Svg$$module$build$src$core$utils$svg(\"g\");\nSvg$$module$build$src$core$utils$svg.IMAGE=new Svg$$module$build$src$core$utils$svg(\"image\");Svg$$module$build$src$core$utils$svg.LINE=new Svg$$module$build$src$core$utils$svg(\"line\");Svg$$module$build$src$core$utils$svg.PATH=new Svg$$module$build$src$core$utils$svg(\"path\");Svg$$module$build$src$core$utils$svg.PATTERN=new Svg$$module$build$src$core$utils$svg(\"pattern\");Svg$$module$build$src$core$utils$svg.POLYGON=new Svg$$module$build$src$core$utils$svg(\"polygon\");\nSvg$$module$build$src$core$utils$svg.RECT=new Svg$$module$build$src$core$utils$svg(\"rect\");Svg$$module$build$src$core$utils$svg.SVG=new Svg$$module$build$src$core$utils$svg(\"svg\");Svg$$module$build$src$core$utils$svg.TEXT=new Svg$$module$build$src$core$utils$svg(\"text\");Svg$$module$build$src$core$utils$svg.TSPAN=new Svg$$module$build$src$core$utils$svg(\"tspan\");var module$build$src$core$utils$svg={};module$build$src$core$utils$svg.Svg=Svg$$module$build$src$core$utils$svg;var Rect$$module$build$src$core$utils$rect=class{constructor(a,b,c,d){this.top=a;this.bottom=b;this.left=c;this.right=d}static from(a){return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}clone(){return new Rect$$module$build$src$core$utils$rect(this.top,this.bottom,this.left,this.right)}getHeight(){return this.bottom-this.top}getWidth(){return this.right-this.left}getOrigin(){return new Coordinate$$module$build$src$core$utils$coordinate(this.left,this.top)}contains(a,\nb){return a>=this.left&&a<=this.right&&b>=this.top&&b<=this.bottom}intersects(a){return this.left<=a.right&&this.right>=a.left&&this.bottom>=a.top&&this.top<=a.bottom}static equals(a,b){return a===b?!0:a&&b?a.top===b.top&&a.bottom===b.bottom&&a.left===b.left&&a.right===b.right:!1}static createFromPoint(a,b,c){const d=a.x;a=a.y;return new Rect$$module$build$src$core$utils$rect(a,a+c,d,d+b)}},module$build$src$core$utils$rect={};module$build$src$core$utils$rect.Rect=Rect$$module$build$src$core$utils$rect;var Size$$module$build$src$core$utils$size=class{constructor(a,b){this.width=a;this.height=b}static equals(a,b){return a===b?!0:a&&b?a.width===b.width&&a.height===b.height:!1}static max(a,b){return new Size$$module$build$src$core$utils$size(Math.max(a.width,b.width),Math.max(a.height,b.height))}static min(a,b){return new Size$$module$build$src$core$utils$size(Math.min(a.width,b.width),Math.min(a.height,b.height))}},module$build$src$core$utils$size={};module$build$src$core$utils$size.Size=Size$$module$build$src$core$utils$size;var TEST_ONLY$$module$build$src$core$utils$style={getSizeInternal:getSizeInternal$$module$build$src$core$utils$style},module$build$src$core$utils$style={TEST_ONLY:TEST_ONLY$$module$build$src$core$utils$style};module$build$src$core$utils$style.getBorderBox=getBorderBox$$module$build$src$core$utils$style;module$build$src$core$utils$style.getComputedStyle=getComputedStyle$$module$build$src$core$utils$style;module$build$src$core$utils$style.getContainerOffsetToScrollInto=getContainerOffsetToScrollInto$$module$build$src$core$utils$style;\nmodule$build$src$core$utils$style.getPageOffset=getPageOffset$$module$build$src$core$utils$style;module$build$src$core$utils$style.getSize=getSize$$module$build$src$core$utils$style;module$build$src$core$utils$style.getViewportPageOffset=getViewportPageOffset$$module$build$src$core$utils$style;module$build$src$core$utils$style.scrollIntoContainerView=scrollIntoContainerView$$module$build$src$core$utils$style;var XY_REGEX$$module$build$src$core$utils$svg_math=/translate\\(\\s*([-+\\d.e]+)([ ,]\\s*([-+\\d.e]+)\\s*)?/,XY_STYLE_REGEX$$module$build$src$core$utils$svg_math=/transform:\\s*translate(?:3d)?\\(\\s*([-+\\d.e]+)\\s*px([ ,]\\s*([-+\\d.e]+)\\s*px)?/,TEST_ONLY$$module$build$src$core$utils$svg_math={XY_REGEX:XY_REGEX$$module$build$src$core$utils$svg_math,XY_STYLE_REGEX:XY_STYLE_REGEX$$module$build$src$core$utils$svg_math},module$build$src$core$utils$svg_math={TEST_ONLY:TEST_ONLY$$module$build$src$core$utils$svg_math};\nmodule$build$src$core$utils$svg_math.getDocumentScroll=getDocumentScroll$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getInjectionDivXY=getInjectionDivXY$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getRelativeXY=getRelativeXY$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getViewportBBox=getViewportBBox$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.screenToWsCoordinates=screenToWsCoordinates$$module$build$src$core$utils$svg_math;\nmodule$build$src$core$utils$svg_math.wsToScreenCoordinates=wsToScreenCoordinates$$module$build$src$core$utils$svg_math;var Scrollbar$$module$build$src$core$scrollbar=class{constructor(a,b,c,d,e){this.workspace=a;this.horizontal=b;this.oldHostMetrics=null;this.ratio=1;this.origin=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.startDragHandle=this.handlePosition=this.handleLength=this.scrollbarLength=this.startDragMouse=0;this.containerVisible=this.isHandleVisible=!0;this.position=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.onMouseMoveWrapper_=this.onMouseUpWrapper_=null;this.pair=\nc||!1;this.margin=e!==void 0?e:Scrollbar$$module$build$src$core$scrollbar.DEFAULT_SCROLLBAR_MARGIN;a=\"blocklyScrollbar\"+(this.horizontal?\"Horizontal\":\"Vertical\");d&&(a+=\" \"+d);this.outerSvg=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{\"class\":a});d=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},this.outerSvg);this.svgBackground=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{\"class\":\"blocklyScrollbarBackground\"},d);a=Math.floor((Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-5)/2);this.svgHandle=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyScrollbarHandle\",rx:a,ry:a},d);this.workspace.getThemeManager().subscribe(this.svgHandle,\"scrollbarColour\",\"fill\");this.workspace.getThemeManager().subscribe(this.svgHandle,\"scrollbarOpacity\",\"fill-opacity\");insertAfter$$module$build$src$core$utils$dom(this.outerSvg,\nthis.workspace.getParentSvg());this.setInitialThickness();b?(this.lengthAttribute_=\"width\",this.positionAttribute_=\"x\"):(this.lengthAttribute_=\"height\",this.positionAttribute_=\"y\");this.onMouseDownBarWrapper_=conditionalBind$$module$build$src$core$browser_events(this.svgBackground,\"pointerdown\",this,this.onMouseDownBar);this.onMouseDownHandleWrapper_=conditionalBind$$module$build$src$core$browser_events(this.svgHandle,\"pointerdown\",this,this.onMouseDownHandle)}setInitialThickness(){const a=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;\nthis.horizontal?(this.svgBackground.setAttribute(\"height\",String(a)),this.outerSvg.setAttribute(\"height\",String(a)),this.svgHandle.setAttribute(\"height\",String(a-5)),this.svgHandle.setAttribute(\"y\",\"2.5\")):(this.svgBackground.setAttribute(\"width\",String(a)),this.outerSvg.setAttribute(\"width\",String(a)),this.svgHandle.setAttribute(\"width\",String(a-5)),this.svgHandle.setAttribute(\"x\",\"2.5\"))}dispose(){this.cleanUp();unbind$$module$build$src$core$browser_events(this.onMouseDownBarWrapper_);unbind$$module$build$src$core$browser_events(this.onMouseDownHandleWrapper_);\nremoveNode$$module$build$src$core$utils$dom(this.outerSvg);this.workspace.getThemeManager().unsubscribe(this.svgHandle)}constrainHandleLength(a){return a=a<=0||isNaN(a)?0:Math.min(a,this.scrollbarLength)}setHandleLength(a){this.handleLength=a;this.svgHandle.setAttribute(this.lengthAttribute_,String(this.handleLength))}constrainHandlePosition(a){return a=a<=0||isNaN(a)?0:Math.min(a,this.scrollbarLength-this.handleLength)}setHandlePosition(a){this.handlePosition=a;this.svgHandle.setAttribute(this.positionAttribute_,\nString(this.handlePosition))}setScrollbarLength(a){this.scrollbarLength=a;this.outerSvg.setAttribute(this.lengthAttribute_,String(this.scrollbarLength));this.svgBackground.setAttribute(this.lengthAttribute_,String(this.scrollbarLength))}setPosition(a,b){this.position.x=a;this.position.y=b;setCssTransform$$module$build$src$core$utils$dom(this.outerSvg,\"translate(\"+(this.position.x+this.origin.x)+\"px,\"+(this.position.y+this.origin.y)+\"px)\")}resize(a){if(!a&&(a=this.workspace.getMetrics(),!a))return;\nthis.oldHostMetrics&&Scrollbar$$module$build$src$core$scrollbar.metricsAreEquivalent(a,this.oldHostMetrics)||(this.horizontal?this.resizeHorizontal(a):this.resizeVertical(a),this.oldHostMetrics=a,this.updateMetrics())}requiresViewResize(a){return this.oldHostMetrics?this.oldHostMetrics.viewWidth!==a.viewWidth||this.oldHostMetrics.viewHeight!==a.viewHeight||this.oldHostMetrics.absoluteLeft!==a.absoluteLeft||this.oldHostMetrics.absoluteTop!==a.absoluteTop:!0}resizeHorizontal(a){this.requiresViewResize(a)?\nthis.resizeViewHorizontal(a):this.resizeContentHorizontal(a)}resizeViewHorizontal(a){var b=a.viewWidth-this.margin*2;this.pair&&(b-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setScrollbarLength(Math.max(0,b));b=a.absoluteLeft+this.margin;this.pair&&this.workspace.RTL&&(b+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setPosition(b,a.absoluteTop+a.viewHeight-Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-this.margin);this.resizeContentHorizontal(a)}resizeContentHorizontal(a){if(a.viewWidth>=\na.scrollWidth)this.setHandleLength(this.scrollbarLength),this.setHandlePosition(0),this.pair||this.setVisible(!1);else{this.pair||this.setVisible(!0);var b=this.scrollbarLength*a.viewWidth/a.scrollWidth;b=this.constrainHandleLength(b);this.setHandleLength(b);b=a.scrollWidth-a.viewWidth;var c=this.scrollbarLength-this.handleLength;a=(a.viewLeft-a.scrollLeft)/b*c;a=this.constrainHandlePosition(a);this.setHandlePosition(a);this.ratio=c/b}}resizeVertical(a){this.requiresViewResize(a)?this.resizeViewVertical(a):\nthis.resizeContentVertical(a)}resizeViewVertical(a){let b=a.viewHeight-this.margin*2;this.pair&&(b-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setScrollbarLength(Math.max(0,b));this.setPosition(this.workspace.RTL?a.absoluteLeft+this.margin:a.absoluteLeft+a.viewWidth-Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-this.margin,a.absoluteTop+this.margin);this.resizeContentVertical(a)}resizeContentVertical(a){if(a.viewHeight>=a.scrollHeight)this.setHandleLength(this.scrollbarLength),\nthis.setHandlePosition(0),this.pair||this.setVisible(!1);else{this.pair||this.setVisible(!0);var b=this.scrollbarLength*a.viewHeight/a.scrollHeight;b=this.constrainHandleLength(b);this.setHandleLength(b);b=a.scrollHeight-a.viewHeight;var c=this.scrollbarLength-this.handleLength;a=(a.viewTop-a.scrollTop)/b*c;a=this.constrainHandlePosition(a);this.setHandlePosition(a);this.ratio=c/b}}isVisible(){return this.isHandleVisible}setContainerVisible(a){const b=a!==this.containerVisible;this.containerVisible=\na;b&&this.updateDisplay_()}setVisible(a){if(this.pair)throw Error(\"Unable to toggle visibility of paired scrollbars.\");this.setVisibleInternal(a)}setVisibleInternal(a){const b=a!==this.isVisible();this.isHandleVisible=a;b&&this.updateDisplay_()}updateDisplay_(){this.containerVisible&&this.isVisible()?this.outerSvg.setAttribute(\"display\",\"block\"):this.outerSvg.setAttribute(\"display\",\"none\")}onMouseDownBar(a){this.workspace.markFocused();clearTouchIdentifier$$module$build$src$core$touch();this.cleanUp();\nif(isRightButton$$module$build$src$core$browser_events(a))a.stopPropagation();else{var b=mouseToSvg$$module$build$src$core$browser_events(a,this.workspace.getParentSvg(),this.workspace.getInverseScreenCTM());b=this.horizontal?b.x:b.y;var c=getInjectionDivXY$$module$build$src$core$utils$svg_math(this.svgHandle);c=this.horizontal?c.x:c.y;var d=this.handlePosition,e=this.handleLength*.95;b<=c?d-=e:b>=c+this.handleLength&&(d+=e);this.setHandlePosition(this.constrainHandlePosition(d));this.updateMetrics();\na.stopPropagation();a.preventDefault()}}onMouseDownHandle(a){this.workspace.markFocused();this.cleanUp();isRightButton$$module$build$src$core$browser_events(a)?a.stopPropagation():(this.startDragHandle=this.handlePosition,this.startDragMouse=this.horizontal?a.clientX:a.clientY,this.onMouseUpWrapper_=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onMouseUpHandle),this.onMouseMoveWrapper_=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",\nthis,this.onMouseMoveHandle),a.stopPropagation(),a.preventDefault())}onMouseMoveHandle(a){this.setHandlePosition(this.constrainHandlePosition(this.startDragHandle+((this.horizontal?a.clientX:a.clientY)-this.startDragMouse)));this.updateMetrics()}onMouseUpHandle(){clearTouchIdentifier$$module$build$src$core$touch();this.cleanUp()}cleanUp(){this.workspace.hideChaff(!0);this.onMouseUpWrapper_&&(unbind$$module$build$src$core$browser_events(this.onMouseUpWrapper_),this.onMouseUpWrapper_=null);this.onMouseMoveWrapper_&&\n(unbind$$module$build$src$core$browser_events(this.onMouseMoveWrapper_),this.onMouseMoveWrapper_=null)}getRatio_(){let a=this.handlePosition/(this.scrollbarLength-this.handleLength);isNaN(a)&&(a=0);return a}updateMetrics(){const a=this.getRatio_();this.horizontal?this.workspace.setMetrics({x:a}):this.workspace.setMetrics({y:a})}set(a,b){this.setHandlePosition(this.constrainHandlePosition(a*this.ratio));(b||b===void 0)&&this.updateMetrics()}setOrigin(a,b){this.origin=new Coordinate$$module$build$src$core$utils$coordinate(a,\nb)}static metricsAreEquivalent(a,b){return a.viewWidth===b.viewWidth&&a.viewHeight===b.viewHeight&&a.viewLeft===b.viewLeft&&a.viewTop===b.viewTop&&a.absoluteTop===b.absoluteTop&&a.absoluteLeft===b.absoluteLeft&&a.scrollWidth===b.scrollWidth&&a.scrollHeight===b.scrollHeight&&a.scrollLeft===b.scrollLeft&&a.scrollTop===b.scrollTop}};Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness=TOUCH_ENABLED$$module$build$src$core$touch?25:15;\nScrollbar$$module$build$src$core$scrollbar.DEFAULT_SCROLLBAR_MARGIN=.5;var module$build$src$core$scrollbar={};module$build$src$core$scrollbar.Scrollbar=Scrollbar$$module$build$src$core$scrollbar;var domParser$$module$build$src$core$utils$xml={parseFromString:function(){throw Error(\"DOMParser was not found in the global scope and was not properly injected using injectDependencies\");}},xmlSerializer$$module$build$src$core$utils$xml={serializeToString:function(){throw Error(\"XMLSerializer was not foundin the global scope and was not properly injected using injectDependencies\");}},{document:document$$module$build$src$core$utils$xml,DOMParser:DOMParser$$module$build$src$core$utils$xml,XMLSerializer:XMLSerializer$$module$build$src$core$utils$xml}=\nglobalThis;DOMParser$$module$build$src$core$utils$xml&&(domParser$$module$build$src$core$utils$xml=new DOMParser$$module$build$src$core$utils$xml);XMLSerializer$$module$build$src$core$utils$xml&&(xmlSerializer$$module$build$src$core$utils$xml=new XMLSerializer$$module$build$src$core$utils$xml);\nvar NAME_SPACE$$module$build$src$core$utils$xml=\"https://developers.google.com/blockly/xml\",INVALID_CONTROL_CHARS$$module$build$src$core$utils$xml=/[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F]/g,module$build$src$core$utils$xml={NAME_SPACE:NAME_SPACE$$module$build$src$core$utils$xml};module$build$src$core$utils$xml.createElement=$.createElement$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.createTextNode=$.createTextNode$$module$build$src$core$utils$xml;\nmodule$build$src$core$utils$xml.domToText=domToText$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.injectDependencies=injectDependencies$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.textToDom=$.textToDom$$module$build$src$core$utils$xml;var CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox=\"categoryToolbox\",FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox=\"flyoutToolbox\",Position$$module$build$src$core$utils$toolbox;(function(a){a[a.TOP=0]=\"TOP\";a[a.BOTTOM=1]=\"BOTTOM\";a[a.LEFT=2]=\"LEFT\";a[a.RIGHT=3]=\"RIGHT\"})(Position$$module$build$src$core$utils$toolbox||(Position$$module$build$src$core$utils$toolbox={}));\nvar TEST_ONLY$$module$build$src$core$utils$toolbox={hasCategoriesInternal:hasCategoriesInternal$$module$build$src$core$utils$toolbox},module$build$src$core$utils$toolbox={};module$build$src$core$utils$toolbox.Position=Position$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.TEST_ONLY=TEST_ONLY$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.convertFlyoutDefToJsonArray=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox;\nmodule$build$src$core$utils$toolbox.convertToolboxDefToJson=convertToolboxDefToJson$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.hasCategories=hasCategories$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.isCategoryCollapsible=isCategoryCollapsible$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.parseToolboxTree=parseToolboxTree$$module$build$src$core$utils$toolbox;var verticalPosition$$module$build$src$core$positionable_helpers;(function(a){a[a.TOP=0]=\"TOP\";a[a.BOTTOM=1]=\"BOTTOM\"})(verticalPosition$$module$build$src$core$positionable_helpers||(verticalPosition$$module$build$src$core$positionable_helpers={}));var horizontalPosition$$module$build$src$core$positionable_helpers;(function(a){a[a.LEFT=0]=\"LEFT\";a[a.RIGHT=1]=\"RIGHT\"})(horizontalPosition$$module$build$src$core$positionable_helpers||(horizontalPosition$$module$build$src$core$positionable_helpers={}));\nvar bumpDirection$$module$build$src$core$positionable_helpers;(function(a){a[a.UP=0]=\"UP\";a[a.DOWN=1]=\"DOWN\"})(bumpDirection$$module$build$src$core$positionable_helpers||(bumpDirection$$module$build$src$core$positionable_helpers={}));var module$build$src$core$positionable_helpers={};module$build$src$core$positionable_helpers.bumpDirection=bumpDirection$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.bumpPositionRect=bumpPositionRect$$module$build$src$core$positionable_helpers;\nmodule$build$src$core$positionable_helpers.getCornerOppositeToolbox=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.getStartPositionRect=getStartPositionRect$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.horizontalPosition=horizontalPosition$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.verticalPosition=verticalPosition$$module$build$src$core$positionable_helpers;var SPRITE$$module$build$src$core$sprites={width:96,height:124,url:\"sprites.png\"},module$build$src$core$sprites={SPRITE:SPRITE$$module$build$src$core$sprites};var ZoomControls$$module$build$src$core$zoom_controls=class{constructor(a){this.workspace=a;this.id=\"zoomControls\";this.boundEvents=[];this.zoomResetGroup=this.zoomOutGroup=this.zoomInGroup=null;this.HEIGHT=this.WIDTH=32;this.SMALL_SPACING=2;this.LARGE_SPACING=11;this.MARGIN_HORIZONTAL=this.MARGIN_VERTICAL=20;this.svgGroup=null;this.top=this.left=0;this.initialized=!1}createDom(){this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});const a=String(Math.random()).substring(2);\nthis.createZoomOutSvg(a);this.createZoomInSvg(a);this.workspace.isMovable()&&this.createZoomResetSvg(a);return this.svgGroup}init(){this.workspace.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.ZOOM_CONTROLS_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE]});this.initialized=!0}dispose(){this.workspace.getComponentManager().removeComponent(\"zoomControls\");this.svgGroup&&\nremoveNode$$module$build$src$core$utils$dom(this.svgGroup);for(const a of this.boundEvents)unbind$$module$build$src$core$browser_events(a);this.boundEvents.length=0}getBoundingRectangle(){let a=this.SMALL_SPACING+2*this.HEIGHT;this.zoomResetGroup&&(a+=this.LARGE_SPACING+this.HEIGHT);return new Rect$$module$build$src$core$utils$rect(this.top,this.top+a,this.left,this.left+this.WIDTH)}position(a,b){if(this.initialized){var c=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers(this.workspace,\na),d=this.SMALL_SPACING+2*this.HEIGHT;this.zoomResetGroup&&(d+=this.LARGE_SPACING+this.HEIGHT);a=getStartPositionRect$$module$build$src$core$positionable_helpers(c,new Size$$module$build$src$core$utils$size(this.WIDTH,d),this.MARGIN_HORIZONTAL,this.MARGIN_VERTICAL,a,this.workspace);c=c.vertical;b=bumpPositionRect$$module$build$src$core$positionable_helpers(a,this.MARGIN_VERTICAL,c===verticalPosition$$module$build$src$core$positionable_helpers.TOP?bumpDirection$$module$build$src$core$positionable_helpers.DOWN:\nbumpDirection$$module$build$src$core$positionable_helpers.UP,b);if(c===verticalPosition$$module$build$src$core$positionable_helpers.TOP){var e=this.SMALL_SPACING+this.HEIGHT,f;(f=this.zoomInGroup)==null||f.setAttribute(\"transform\",\"translate(0, \"+e+\")\");this.zoomResetGroup&&this.zoomResetGroup.setAttribute(\"transform\",\"translate(0, \"+(e+this.LARGE_SPACING+this.HEIGHT)+\")\")}else{f=this.zoomResetGroup?this.LARGE_SPACING+this.HEIGHT:0;let h;(h=this.zoomInGroup)==null||h.setAttribute(\"transform\",\"translate(0, \"+\nf+\")\");f=f+this.SMALL_SPACING+this.HEIGHT;(e=this.zoomOutGroup)==null||e.setAttribute(\"transform\",\"translate(0, \"+f+\")\")}this.top=b.top;this.left=b.left;var g;(g=this.svgGroup)==null||g.setAttribute(\"transform\",\"translate(\"+this.left+\",\"+this.top+\")\")}}createZoomOutSvg(a){this.zoomOutGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomOut\"},this.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,\n{id:\"blocklyZoomoutClipPath\"+a},this.zoomOutGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,x:-64,y:-92,\"clip-path\":\"url(#blocklyZoomoutClipPath\"+a+\")\"},this.zoomOutGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomOutGroup,\"pointerdown\",null,this.zoom.bind(this,-1)))}createZoomInSvg(a){this.zoomInGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomIn\"},this.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyZoominClipPath\"+\na},this.zoomInGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,x:-32,y:-92,\"clip-path\":\"url(#blocklyZoominClipPath\"+a+\")\"},this.zoomInGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+\nSPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomInGroup,\"pointerdown\",null,this.zoom.bind(this,1)))}zoom(a,b){this.workspace.markFocused();this.workspace.zoomCenter(a);this.fireZoomEvent();clearTouchIdentifier$$module$build$src$core$touch();b.stopPropagation();b.preventDefault()}createZoomResetSvg(a){this.zoomResetGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomReset\"},\nthis.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyZoomresetClipPath\"+a},this.zoomResetGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,y:-92,\"clip-path\":\"url(#blocklyZoomresetClipPath\"+\na+\")\"},this.zoomResetGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomResetGroup,\"pointerdown\",null,this.resetZoom.bind(this)))}resetZoom(a){this.workspace.markFocused();const b=Math.log(this.workspace.options.zoomOptions.startScale/this.workspace.scale)/Math.log(this.workspace.options.zoomOptions.scaleSpeed);\nthis.workspace.beginCanvasTransition();this.workspace.zoomCenter(b);this.workspace.scrollCenter();setTimeout(this.workspace.endCanvasTransition.bind(this.workspace),500);this.fireZoomEvent();clearTouchIdentifier$$module$build$src$core$touch();a.stopPropagation();a.preventDefault()}fireZoomEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(null,this.workspace.id,\"zoom_controls\");fire$$module$build$src$core$events$utils(a)}};register$$module$build$src$core$css(\"\\n.blocklyZoom>image, .blocklyZoom>svg>image {\\n opacity: .4;\\n}\\n\\n.blocklyZoom>image:hover, .blocklyZoom>svg>image:hover {\\n opacity: .6;\\n}\\n\\n.blocklyZoom>image:active, .blocklyZoom>svg>image:active {\\n opacity: .8;\\n}\\n\");\nvar module$build$src$core$zoom_controls={};module$build$src$core$zoom_controls.ZoomControls=ZoomControls$$module$build$src$core$zoom_controls;var VARIABLES$$module$build$src$core$serialization$priorities=100,PROCEDURES$$module$build$src$core$serialization$priorities=75,BLOCKS$$module$build$src$core$serialization$priorities=50,WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities=25,module$build$src$core$serialization$priorities={BLOCKS:BLOCKS$$module$build$src$core$serialization$priorities,PROCEDURES:PROCEDURES$$module$build$src$core$serialization$priorities,VARIABLES:VARIABLES$$module$build$src$core$serialization$priorities,\nWORKSPACE_COMMENTS:WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities};var module$build$src$core$serialization$registry={};module$build$src$core$serialization$registry.register=register$$module$build$src$core$serialization$registry;module$build$src$core$serialization$registry.unregister=unregister$$module$build$src$core$serialization$registry;var saveComment$$module$build$src$core$serialization$workspace_comments=save$$module$build$src$core$serialization$workspace_comments,WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments=class{constructor(){this.priority=WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities}save(a){const b=[];for(const c of a.getTopComments())(a=save$$module$build$src$core$serialization$workspace_comments(c,{addCoordinates:!0,saveIds:!0}))&&b.push(a);return b.length?b:null}load(a,\nb){for(const c of a)append$$module$build$src$core$serialization$workspace_comments(c,b,{recordUndo:getRecordUndo$$module$build$src$core$events$utils()})}clear(a){for(const b of a.getTopComments())b.dispose()}};register$$module$build$src$core$serialization$registry(\"workspaceComments\",new WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments);var module$build$src$core$serialization$workspace_comments={};\nmodule$build$src$core$serialization$workspace_comments.WorkspaceCommentSerializer=WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments;module$build$src$core$serialization$workspace_comments.append=append$$module$build$src$core$serialization$workspace_comments;module$build$src$core$serialization$workspace_comments.save=save$$module$build$src$core$serialization$workspace_comments;var module$build$src$core$clipboard$registry={};module$build$src$core$clipboard$registry.register=register$$module$build$src$core$clipboard$registry;module$build$src$core$clipboard$registry.unregister=unregister$$module$build$src$core$clipboard$registry;var WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster=class{paste(a,b,c){a=a.commentState;c&&(a.x=c.x,a.y=c.y);$.disable$$module$build$src$core$events$utils();let d;try{d=append$$module$build$src$core$serialization$workspace_comments(a,b),moveCommentToNotConflict$$module$build$src$core$clipboard$workspace_comment_paster(d)}finally{$.enable$$module$build$src$core$events$utils()}if(!d)return null;isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CREATE))(d));\n$.getFocusManager$$module$build$src$core$focus_manager().focusNode(d);return d}};WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE=\"workspace-comment\";register$$module$build$src$core$clipboard$registry(WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE,new WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster);var module$build$src$core$clipboard$workspace_comment_paster={};\nmodule$build$src$core$clipboard$workspace_comment_paster.WorkspaceCommentPaster=WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster;var DEFAULT_SNAP_RADIUS$$module$build$src$core$config,module$build$src$core$config;DEFAULT_SNAP_RADIUS$$module$build$src$core$config=28;$.config$$module$build$src$core$config={dragRadius:5,flyoutDragRadius:10,snapRadius:DEFAULT_SNAP_RADIUS$$module$build$src$core$config,connectingSnapRadius:DEFAULT_SNAP_RADIUS$$module$build$src$core$config,currentConnectionPreference:8,bumpDelay:250};module$build$src$core$config={config:$.config$$module$build$src$core$config};var ARIA_PREFIX$$module$build$src$core$utils$aria=\"aria-\",ROLE_ATTRIBUTE$$module$build$src$core$utils$aria=\"role\",Role$$module$build$src$core$utils$aria;\n(function(a){a.GRID=\"grid\";a.GRIDCELL=\"gridcell\";a.GROUP=\"group\";a.LISTBOX=\"listbox\";a.MENU=\"menu\";a.MENUITEM=\"menuitem\";a.MENUITEMCHECKBOX=\"menuitemcheckbox\";a.OPTION=\"option\";a.PRESENTATION=\"presentation\";a.ROW=\"row\";a.TREE=\"tree\";a.TREEITEM=\"treeitem\";a.SEPARATOR=\"separator\";a.STATUS=\"status\"})(Role$$module$build$src$core$utils$aria||(Role$$module$build$src$core$utils$aria={}));var State$$module$build$src$core$utils$aria;\n(function(a){a.ACTIVEDESCENDANT=\"activedescendant\";a.COLCOUNT=\"colcount\";a.DISABLED=\"disabled\";a.EXPANDED=\"expanded\";a.INVALID=\"invalid\";a.LABEL=\"label\";a.LABELLEDBY=\"labelledby\";a.LEVEL=\"level\";a.ORIENTATION=\"orientation\";a.POSINSET=\"posinset\";a.ROWCOUNT=\"rowcount\";a.SELECTED=\"selected\";a.SETSIZE=\"setsize\";a.VALUEMAX=\"valuemax\";a.VALUEMIN=\"valuemin\";a.LIVE=\"live\";a.HIDDEN=\"hidden\"})(State$$module$build$src$core$utils$aria||(State$$module$build$src$core$utils$aria={}));\nvar module$build$src$core$utils$aria={};module$build$src$core$utils$aria.Role=Role$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.State=State$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.setRole=setRole$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.setState=setState$$module$build$src$core$utils$aria;var MenuItem$$module$build$src$core$menuitem=class{constructor(a,b){this.content=a;this.opt_value=b;this.enabled=!0;this.element=null;this.rightToLeft=!1;this.roleName=null;this.highlight=this.checked=this.checkable=!1;this.actionHandler=null}createDom(){const a=document.createElement(\"div\");a.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();this.element=a;a.className=\"blocklyMenuItem \"+(this.enabled?\"\":\"blocklyMenuItemDisabled \")+(this.checked?\"blocklyMenuItemSelected \":\"\")+(this.highlight?\n\"blocklyMenuItemHighlight \":\"\")+(this.rightToLeft?\"blocklyMenuItemRtl \":\"\");const b=document.createElement(\"div\");b.className=\"blocklyMenuItemContent\";if(this.checkable){var c=document.createElement(\"div\");c.className=\"blocklyMenuItemCheckbox \";b.appendChild(c)}c=this.content;typeof this.content===\"string\"&&(c=document.createTextNode(this.content));b.appendChild(c);a.appendChild(b);this.roleName&&setRole$$module$build$src$core$utils$aria(a,this.roleName);setState$$module$build$src$core$utils$aria(a,\nState$$module$build$src$core$utils$aria.SELECTED,this.checkable&&this.checked||!1);setState$$module$build$src$core$utils$aria(a,State$$module$build$src$core$utils$aria.DISABLED,!this.enabled);return a}dispose(){this.element=null}getElement(){return this.element}getId(){return this.element.id}getValue(){let a;return(a=this.opt_value)!=null?a:null}setRightToLeft(a){this.rightToLeft=a}setRole(a){this.roleName=a}setCheckable(a){this.checkable=a}setChecked(a){this.checked=a}setHighlighted(a){this.highlight=\na;const b=this.getElement();b&&this.isEnabled()&&(a?addClass$$module$build$src$core$utils$dom(b,\"blocklyMenuItemHighlight\"):removeClass$$module$build$src$core$utils$dom(b,\"blocklyMenuItemHighlight\"))}isEnabled(){return this.enabled}setEnabled(a){this.enabled=a}performAction(a){this.isEnabled()&&this.actionHandler&&this.actionHandler(this,a)}onAction(a,b){this.actionHandler=a.bind(b)}},module$build$src$core$menuitem={};module$build$src$core$menuitem.MenuItem=MenuItem$$module$build$src$core$menuitem;var Menu$$module$build$src$core$menu=class{constructor(){this.menuItems=[];this.roleName=this.element=this.onKeyDownHandler=this.pointerLeaveHandler=this.pointerEnterHandler=this.clickHandler=this.pointerMoveHandler=this.highlightedItem=this.openingCoords=null}addChild(a){this.menuItems.push(a)}render(a){const b=document.createElement(\"div\");b.className=\"blocklyMenu\";b.tabIndex=0;this.roleName&&setRole$$module$build$src$core$utils$aria(b,this.roleName);this.element=b;for(let c=0,d;d=this.menuItems[c];c++)b.appendChild(d.createDom());\nthis.pointerMoveHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointermove\",this,this.handlePointerMove,!0);this.clickHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerup\",this,this.handleClick,!0);this.pointerEnterHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerenter\",this,this.handlePointerEnter,!0);this.pointerLeaveHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerleave\",this,this.handlePointerLeave,!0);this.onKeyDownHandler=\nconditionalBind$$module$build$src$core$browser_events(b,\"keydown\",this,this.handleKeyEvent);a.appendChild(b);return b}getElement(){return this.element}focus(){const a=this.getElement();a&&a.focus({preventScroll:!0})}blur(){const a=this.getElement();a&&a.blur()}setRole(a){this.roleName=a}dispose(){this.pointerMoveHandler&&(unbind$$module$build$src$core$browser_events(this.pointerMoveHandler),this.pointerMoveHandler=null);this.clickHandler&&(unbind$$module$build$src$core$browser_events(this.clickHandler),\nthis.clickHandler=null);this.pointerEnterHandler&&(unbind$$module$build$src$core$browser_events(this.pointerEnterHandler),this.pointerEnterHandler=null);this.pointerLeaveHandler&&(unbind$$module$build$src$core$browser_events(this.pointerLeaveHandler),this.pointerLeaveHandler=null);this.onKeyDownHandler&&(unbind$$module$build$src$core$browser_events(this.onKeyDownHandler),this.onKeyDownHandler=null);for(let a=0,b;b=this.menuItems[a];a++)b.dispose();this.element=null}getMenuItem(a){const b=this.getElement();\nfor(;a&&a!==b;){if(a.classList.contains(\"blocklyMenuItem\")){const c=this.getMenuItems();for(let d=0,e;e=c[d];d++)if(e.getElement()===a)return e}a=a.parentElement}return null}setHighlighted(a){var b=this.highlightedItem;b&&(b.setHighlighted(!1),this.highlightedItem=null);if(a){a.setHighlighted(!0);this.highlightedItem=a;b=this.getElement();const c=a.getElement();b&&c&&(scrollIntoContainerView$$module$build$src$core$utils$style(c,b),setState$$module$build$src$core$utils$aria(b,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,\na.getId()))}}highlightNext(){const a=this.highlightedItem?this.menuItems.indexOf(this.highlightedItem):-1;this.highlightHelper(a,1)}highlightPrevious(){const a=this.highlightedItem?this.menuItems.indexOf(this.highlightedItem):-1;this.highlightHelper(a<0?this.menuItems.length:a,-1)}highlightFirst(){this.highlightHelper(-1,1)}highlightLast(){this.highlightHelper(this.menuItems.length,-1)}highlightHelper(a,b){a+=b;let c;const d=this.getMenuItems();for(;c=d[a];){if(c.isEnabled()){this.setHighlighted(c);\nbreak}a+=b}}handlePointerMove(a){Math.max(Math.abs(a.movementX),Math.abs(a.movementY))!==0&&(a=this.getMenuItem(a.target))&&(a.isEnabled()?this.highlightedItem!==a&&this.setHighlighted(a):this.setHighlighted(null))}handleClick(a){var b=this.openingCoords;this.openingCoords=null;if(b&&typeof a.clientX===\"number\"){const c=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY);if(Coordinate$$module$build$src$core$utils$coordinate.distance(b,c)<1)return}(b=this.getMenuItem(a.target))&&\nb.performAction(a)}handlePointerEnter(a){this.focus()}handlePointerLeave(a){this.getElement()&&this.setHighlighted(null)}handleKeyEvent(a){if(this.menuItems.length&&!(a.shiftKey||a.ctrlKey||a.metaKey||a.altKey)){var b=this.highlightedItem;switch(a.key){case \"Enter\":case \" \":b&&b.performAction(a);break;case \"ArrowUp\":this.highlightPrevious();break;case \"ArrowDown\":this.highlightNext();break;case \"PageUp\":case \"Home\":this.highlightFirst();break;case \"PageDown\":case \"End\":this.highlightLast();break;\ndefault:return}a.preventDefault();a.stopPropagation()}}getSize(){const a=this.getElement(),b=getSize$$module$build$src$core$utils$style(a);b.height=a.scrollHeight;return b}getMenuItems(){return this.menuItems.filter(a=>a instanceof MenuItem$$module$build$src$core$menuitem)}},module$build$src$core$menu={};module$build$src$core$menu.Menu=Menu$$module$build$src$core$menu;var MenuSeparator$$module$build$src$core$menu_separator=class{constructor(){this.element=null}createDom(){this.element=document.createElement(\"hr\");this.element.className=\"blocklyMenuSeparator\";setRole$$module$build$src$core$utils$aria(this.element,Role$$module$build$src$core$utils$aria.SEPARATOR);return this.element}dispose(){let a;(a=this.element)==null||a.remove();this.element=null}},module$build$src$core$menu_separator={};module$build$src$core$menu_separator.MenuSeparator=MenuSeparator$$module$build$src$core$menu_separator;var COLLAPSED_INPUT_NAME$$module$build$src$core$constants=\"_TEMP_COLLAPSED_INPUT\",COLLAPSED_FIELD_NAME$$module$build$src$core$constants=\"_TEMP_COLLAPSED_FIELD\",MANUALLY_DISABLED$$module$build$src$core$constants=\"MANUALLY_DISABLED\",module$build$src$core$constants={COLLAPSED_FIELD_NAME:COLLAPSED_FIELD_NAME$$module$build$src$core$constants,COLLAPSED_INPUT_NAME:COLLAPSED_INPUT_NAME$$module$build$src$core$constants,MANUALLY_DISABLED:MANUALLY_DISABLED$$module$build$src$core$constants};(function(a){a[a.VALUE=1]=\"VALUE\";a[a.STATEMENT=3]=\"STATEMENT\";a[a.DUMMY=5]=\"DUMMY\";a[a.CUSTOM=6]=\"CUSTOM\";a[a.END_ROW=7]=\"END_ROW\"})($.inputTypes$$module$build$src$core$inputs$input_types||($.inputTypes$$module$build$src$core$inputs$input_types={}));var module$build$src$core$inputs$input_types={};module$build$src$core$inputs$input_types.inputTypes=$.inputTypes$$module$build$src$core$inputs$input_types;var module$build$src$core$interfaces$i_serializable={};module$build$src$core$interfaces$i_serializable.isSerializable=isSerializable$$module$build$src$core$interfaces$i_serializable;var rootBlocks$$module$build$src$core$render_management=new Set,dirtyBlocks$$module$build$src$core$render_management=new WeakSet,eventGroups$$module$build$src$core$render_management=new WeakMap,afterRendersPromise$$module$build$src$core$render_management=null,afterRendersResolver$$module$build$src$core$render_management=null,animationRequestId$$module$build$src$core$render_management=0,module$build$src$core$render_management={};module$build$src$core$render_management.finishQueuedRenders=finishQueuedRenders$$module$build$src$core$render_management;\nmodule$build$src$core$render_management.queueRender=queueRender$$module$build$src$core$render_management;module$build$src$core$render_management.triggerQueuedRenders=triggerQueuedRenders$$module$build$src$core$render_management;var setLocale$$module$build$src$core$msg,module$build$src$core$msg;$.Msg$$module$build$src$core$msg=Object.create(null);setLocale$$module$build$src$core$msg=function(a){Object.keys(a).forEach(function(b){$.Msg$$module$build$src$core$msg[b]=a[b]})};module$build$src$core$msg={Msg:$.Msg$$module$build$src$core$msg,setLocale:setLocale$$module$build$src$core$msg};var CLASS_NAME$$module$build$src$core$toast=\"blocklyToast\",MESSAGE_CLASS_NAME$$module$build$src$core$toast=\"blocklyToastMessage\",CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast=\"blocklyToastCloseButton\",Toast$$module$build$src$core$toast=class{static show(a,b){if(b.oncePerSession&&b.id){if(this.shownIds.has(b.id))return;this.shownIds.add(b.id)}this.hide(a);const c=this.createDom(a,b);requestAnimationFrame(()=>{c.style.bottom=\"2rem\"})}static createDom(a,b){const {message:c,duration:d=5,assertiveness:e=\nToast$$module$build$src$core$toast.Assertiveness.POLITE}=b,f=document.createElement(\"div\");a.getInjectionDiv().appendChild(f);f.dataset.toastId=b.id;f.className=CLASS_NAME$$module$build$src$core$toast;setRole$$module$build$src$core$utils$aria(f,Role$$module$build$src$core$utils$aria.STATUS);setState$$module$build$src$core$utils$aria(f,State$$module$build$src$core$utils$aria.LIVE,e);b=f.appendChild(document.createElement(\"div\"));b.className=MESSAGE_CLASS_NAME$$module$build$src$core$toast;b.innerText=\nc;b=f.appendChild(document.createElement(\"button\"));b.className=CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast;setState$$module$build$src$core$utils$aria(b,State$$module$build$src$core$utils$aria.LABEL,$.Msg$$module$build$src$core$msg.CLOSE);var g=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{width:24,height:24,viewBox:\"0 0 24 24\",fill:\"none\"},b);setState$$module$build$src$core$utils$aria(g,State$$module$build$src$core$utils$aria.HIDDEN,!0);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{x:19.7782,y:2.80762,width:2,height:24,transform:\"rotate(45, 19.7782, 2.80762)\",fill:\"black\"},g);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{x:2.80762,y:4.22183,width:2,height:24,transform:\"rotate(-45, 2.80762, 4.22183)\",fill:\"black\"},g);b.addEventListener(\"click\",()=>{f.remove();a.markFocused()});let h;b=()=>{h=setTimeout(()=>f.remove(),d*1E3)};g=()=>clearTimeout(h);f.addEventListener(\"focusin\",g);f.addEventListener(\"focusout\",b);f.addEventListener(\"mouseenter\",\ng);f.addEventListener(\"mousemove\",g);f.addEventListener(\"mouseleave\",b);b();return f}static hide(a,b){a=a.getInjectionDiv().querySelector(`.${CLASS_NAME$$module$build$src$core$toast}`);a instanceof HTMLElement&&(!b||b===a.dataset.toastId)&&a.remove()}};Toast$$module$build$src$core$toast.shownIds=new Set;(function(a){a=a.Assertiveness||(a.Assertiveness={});a.ASSERTIVE=\"assertive\";a.POLITE=\"polite\"})(Toast$$module$build$src$core$toast||(Toast$$module$build$src$core$toast={}));register$$module$build$src$core$css(`\n.${CLASS_NAME$$module$build$src$core$toast} {\n font-size: 1.2rem;\n position: absolute;\n bottom: -10rem;\n right: 2rem;\n padding: 1rem;\n color: black;\n background-color: white;\n border: 2px solid black;\n border-radius: 0.4rem;\n z-index: 999;\n display: flex;\n align-items: center;\n gap: 0.8rem;\n line-height: 1.5;\n transition: bottom 0.3s ease-out;\n}\n\n.${CLASS_NAME$$module$build$src$core$toast} .${MESSAGE_CLASS_NAME$$module$build$src$core$toast} {\n maxWidth: 18rem;\n}\n\n.${CLASS_NAME$$module$build$src$core$toast} .${CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast} {\n margin: 0;\n padding: 0.2rem;\n background-color: transparent;\n color: black;\n border: none;\n cursor: pointer;\n}\n`);var module$build$src$core$toast={};module$build$src$core$toast.Toast=Toast$$module$build$src$core$toast;var defaultAlert$$module$build$src$core$dialog=function(a,b){window.alert(a);b&&b()},alertImplementation$$module$build$src$core$dialog=defaultAlert$$module$build$src$core$dialog,defaultConfirm$$module$build$src$core$dialog=function(a,b){b(window.confirm(a))},confirmImplementation$$module$build$src$core$dialog=defaultConfirm$$module$build$src$core$dialog,defaultPrompt$$module$build$src$core$dialog=function(a,b,c){c(window.prompt(a,b))},promptImplementation$$module$build$src$core$dialog=defaultPrompt$$module$build$src$core$dialog,\ndefaultToast$$module$build$src$core$dialog=Toast$$module$build$src$core$toast.show.bind(Toast$$module$build$src$core$toast),toastImplementation$$module$build$src$core$dialog=defaultToast$$module$build$src$core$dialog,module$build$src$core$dialog={};module$build$src$core$dialog.alert=alert$$module$build$src$core$dialog;module$build$src$core$dialog.confirm=confirm$$module$build$src$core$dialog;module$build$src$core$dialog.prompt=prompt$$module$build$src$core$dialog;\nmodule$build$src$core$dialog.setAlert=setAlert$$module$build$src$core$dialog;module$build$src$core$dialog.setConfirm=setConfirm$$module$build$src$core$dialog;module$build$src$core$dialog.setPrompt=setPrompt$$module$build$src$core$dialog;module$build$src$core$dialog.setToast=setToast$$module$build$src$core$dialog;module$build$src$core$dialog.toast=toast$$module$build$src$core$dialog;var module$build$src$core$interfaces$i_legacy_procedure_blocks={};module$build$src$core$interfaces$i_legacy_procedure_blocks.isLegacyProcedureCallBlock=isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks;module$build$src$core$interfaces$i_legacy_procedure_blocks.isLegacyProcedureDefBlock=isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks;var module$build$src$core$interfaces$i_variable_backed_parameter_model={};module$build$src$core$interfaces$i_variable_backed_parameter_model.isVariableBackedParameterModel=isVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model;var previousWarnings$$module$build$src$core$utils$deprecation=new Set,module$build$src$core$utils$deprecation={};module$build$src$core$utils$deprecation.warn=warn$$module$build$src$core$utils$deprecation;var CATEGORY_NAME$$module$build$src$core$variables=\"VARIABLE\",VAR_LETTER_OPTIONS$$module$build$src$core$variables=\"ijkmnopqrstuvwxyzabcdefgh\",TEST_ONLY$$module$build$src$core$variables={generateUniqueNameInternal:generateUniqueNameInternal$$module$build$src$core$variables},module$build$src$core$variables={CATEGORY_NAME:CATEGORY_NAME$$module$build$src$core$variables,TEST_ONLY:TEST_ONLY$$module$build$src$core$variables,VAR_LETTER_OPTIONS:VAR_LETTER_OPTIONS$$module$build$src$core$variables};\nmodule$build$src$core$variables.allDeveloperVariables=$.allDeveloperVariables$$module$build$src$core$variables;module$build$src$core$variables.allUsedVarModels=$.allUsedVarModels$$module$build$src$core$variables;module$build$src$core$variables.compareByName=compareByName$$module$build$src$core$variables;module$build$src$core$variables.createVariableButtonHandler=createVariableButtonHandler$$module$build$src$core$variables;module$build$src$core$variables.deleteVariable=$.deleteVariable$$module$build$src$core$variables;\nmodule$build$src$core$variables.flyoutCategory=flyoutCategory$$module$build$src$core$variables;module$build$src$core$variables.flyoutCategoryBlocks=flyoutCategoryBlocks$$module$build$src$core$variables;module$build$src$core$variables.generateUniqueName=generateUniqueName$$module$build$src$core$variables;module$build$src$core$variables.generateUniqueNameFromOptions=generateUniqueNameFromOptions$$module$build$src$core$variables;module$build$src$core$variables.generateVariableFieldDom=generateVariableFieldDom$$module$build$src$core$variables;\nmodule$build$src$core$variables.getAddedVariables=getAddedVariables$$module$build$src$core$variables;module$build$src$core$variables.getOrCreateVariablePackage=$.getOrCreateVariablePackage$$module$build$src$core$variables;module$build$src$core$variables.getVariable=$.getVariable$$module$build$src$core$variables;module$build$src$core$variables.getVariableUsesById=getVariableUsesById$$module$build$src$core$variables;module$build$src$core$variables.internalFlyoutCategory=internalFlyoutCategory$$module$build$src$core$variables;\nmodule$build$src$core$variables.jsonFlyoutCategoryBlocks=jsonFlyoutCategoryBlocks$$module$build$src$core$variables;module$build$src$core$variables.nameUsedWithAnyType=nameUsedWithAnyType$$module$build$src$core$variables;module$build$src$core$variables.nameUsedWithConflictingParam=nameUsedWithConflictingParam$$module$build$src$core$variables;module$build$src$core$variables.promptName=promptName$$module$build$src$core$variables;module$build$src$core$variables.renameVariable=$.renameVariable$$module$build$src$core$variables;var DeserializationError$$module$build$src$core$serialization$exceptions=class extends Error{},MissingBlockType$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a){super(\"Expected to find a 'type' property, defining the block type\");this.state=a}},MissingConnection$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,\nb,c){super(`The block ${b.toDevString()} is missing a(n) ${a}\nconnection`);this.block=b;this.state=c}},BadConnectionCheck$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,b,c,d){super(`The block ${c.toDevString()} could not connect its\n${b} to its parent, because: ${a}`);this.childBlock=c;this.childState=d}},RealChildOfShadow$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a){super(\"Encountered a real block which is defined as a child of a shadow\\nblock. It is an invariant of Blockly that shadow blocks only have shadow\\nchildren\");this.state=a}},UnregisteredIcon$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,\nb,c){super(`Cannot add an icon of type '${a}' to the block `+`${b.toDevString()}, because there is no icon registered with `+`type '${a}'. Make sure that all of your icons have been `+\"registered.\");this.block=b;this.state=c}},module$build$src$core$serialization$exceptions={};module$build$src$core$serialization$exceptions.BadConnectionCheck=BadConnectionCheck$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.DeserializationError=DeserializationError$$module$build$src$core$serialization$exceptions;\nmodule$build$src$core$serialization$exceptions.MissingBlockType=MissingBlockType$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.MissingConnection=MissingConnection$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.RealChildOfShadow=RealChildOfShadow$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.UnregisteredIcon=UnregisteredIcon$$module$build$src$core$serialization$exceptions;var saveBlock$$module$build$src$core$serialization$blocks=save$$module$build$src$core$serialization$blocks,BlockSerializer$$module$build$src$core$serialization$blocks=class{constructor(){this.priority=BLOCKS$$module$build$src$core$serialization$priorities}save(a){const b=[];for(const c of a.getTopBlocks(!1))(a=save$$module$build$src$core$serialization$blocks(c,{addCoordinates:!0,doFullSerialization:!1}))&&b.push(a);return b.length?{languageVersion:0,blocks:b}:null}load(a,b){a=a.blocks;for(const c of a)append$$module$build$src$core$serialization$blocks(c,\nb,{recordUndo:getRecordUndo$$module$build$src$core$events$utils()})}clear(a){for(const b of a.getTopBlocks(!1))b.dispose(!1)}};register$$module$build$src$core$serialization$registry(\"blocks\",new BlockSerializer$$module$build$src$core$serialization$blocks);var module$build$src$core$serialization$blocks={};module$build$src$core$serialization$blocks.BlockSerializer=BlockSerializer$$module$build$src$core$serialization$blocks;module$build$src$core$serialization$blocks.append=append$$module$build$src$core$serialization$blocks;\nmodule$build$src$core$serialization$blocks.appendInternal=appendInternal$$module$build$src$core$serialization$blocks;module$build$src$core$serialization$blocks.save=save$$module$build$src$core$serialization$blocks;var IconType$$module$build$src$core$icons$icon_types=class{constructor(a){this.name=a}toString(){return this.name}equals(a){return this.name===a.toString()}};IconType$$module$build$src$core$icons$icon_types.MUTATOR=new IconType$$module$build$src$core$icons$icon_types(\"mutator\");IconType$$module$build$src$core$icons$icon_types.WARNING=new IconType$$module$build$src$core$icons$icon_types(\"warning\");IconType$$module$build$src$core$icons$icon_types.COMMENT=new IconType$$module$build$src$core$icons$icon_types(\"comment\");\nvar module$build$src$core$icons$icon_types={};module$build$src$core$icons$icon_types.IconType=IconType$$module$build$src$core$icons$icon_types;var module$build$src$core$interfaces$i_has_bubble={};module$build$src$core$interfaces$i_has_bubble.hasBubble=hasBubble$$module$build$src$core$interfaces$i_has_bubble;var BlockBase$$module$build$src$core$events$events_block_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.isBlank=!a;a&&(this.blockId=a.id,this.workspaceId=a.workspace.id)}toJson(){const a=super.toJson();if(!this.blockId)throw Error(\"The block ID is undefined. Either pass a block to the constructor, or call fromJson\");a.blockId=this.blockId;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new BlockBase$$module$build$src$core$events$events_block_base);\nb.blockId=a.blockId;return b}},module$build$src$core$events$events_block_base={};module$build$src$core$events$events_block_base.BlockBase=BlockBase$$module$build$src$core$events$events_block_base;var BlockChange$$module$build$src$core$events$events_block_change=class extends BlockBase$$module$build$src$core$events$events_block_base{constructor(a,b,c,d,e){super(a);this.type=EventType$$module$build$src$core$events$type.BLOCK_CHANGE;a&&(this.element=b,this.name=c||void 0,this.oldValue=d,this.newValue=e)}toJson(){const a=super.toJson();if(!this.element)throw Error(\"The changed element is undefined. Either pass an element to the constructor, or call fromJson\");a.element=this.element;a.name=this.name;\na.oldValue=this.oldValue;a.newValue=this.newValue;this.disabledReason&&(a.disabledReason=this.disabledReason);return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new BlockChange$$module$build$src$core$events$events_block_change);b.element=a.element;b.name=a.name;b.oldValue=a.oldValue;b.newValue=a.newValue;a.disabledReason!==void 0&&(b.disabledReason=a.disabledReason);return b}setDisabledReason(a){if(this.element!==\"disabled\")throw Error('Cannot set the disabled reason for a BlockChange event if the element is not \"disabled\".');\nthis.disabledReason=a}isNull(){return this.oldValue===this.newValue}run(a){var b=this.getEventWorkspace_();if(!this.blockId)throw Error(\"The block ID is undefined. Either pass a block to the constructor, or call fromJson\");b=b.getBlockById(this.blockId);if(!b)throw Error(\"The associated block is undefined. Either pass a block to the constructor, or call fromJson\");const c=b.getIcon(IconType$$module$build$src$core$icons$icon_types.MUTATOR);c&&hasBubble$$module$build$src$core$interfaces$i_has_bubble(c)&&\nc.bubbleIsVisible()&&c.setBubbleVisible(!1);a=a?this.newValue:this.oldValue;switch(this.element){case \"field\":(b=b.getField(this.name))?b.setValue(a):console.warn(\"Can't set non-existent field: \"+this.name);break;case \"comment\":b.setCommentText(a||null);break;case \"collapsed\":b.setCollapsed(!!a);break;case \"disabled\":var d;b.setDisabledReason(!!a,(d=this.disabledReason)!=null?d:MANUALLY_DISABLED$$module$build$src$core$constants);break;case \"inline\":b.setInputsInline(!!a);break;case \"mutation\":d=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(b);\nb.loadExtraState?b.loadExtraState(JSON.parse(a||\"{}\")):b.domToMutation&&b.domToMutation($.textToDom$$module$build$src$core$utils$xml(a||\"\"));fire$$module$build$src$core$events$utils(new BlockChange$$module$build$src$core$events$events_block_change(b,\"mutation\",null,d,a));break;default:console.warn(\"Unknown change type: \"+this.element)}}static getExtraBlockState_(a){return a.saveExtraState?(a=a.saveExtraState(!0))?JSON.stringify(a):\"\":a.mutationToDom?(a=a.mutationToDom())?domToText$$module$build$src$core$xml(a):\n\"\":\"\"}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.BLOCK_CHANGE,BlockChange$$module$build$src$core$events$events_block_change);var module$build$src$core$events$events_block_change={};module$build$src$core$events$events_block_change.BlockChange=BlockChange$$module$build$src$core$events$events_block_change;var module$build$src$core$utils$math={};module$build$src$core$utils$math.clamp=clamp$$module$build$src$core$utils$math;module$build$src$core$utils$math.toDegrees=toDegrees$$module$build$src$core$utils$math;module$build$src$core$utils$math.toRadians=toRadians$$module$build$src$core$utils$math;var ARROW_SIZE$$module$build$src$core$dropdowndiv=16,BORDER_SIZE$$module$build$src$core$dropdowndiv=1,ARROW_HORIZONTAL_PADDING$$module$build$src$core$dropdowndiv=12,PADDING_Y$$module$build$src$core$dropdowndiv=16,ANIMATION_TIME$$module$build$src$core$dropdowndiv=.25,animateOutTimer$$module$build$src$core$dropdowndiv=null,onHide$$module$build$src$core$dropdowndiv=null,renderedClassName$$module$build$src$core$dropdowndiv=\"\",themeClassName$$module$build$src$core$dropdowndiv=\"\",div$$module$build$src$core$dropdowndiv,\ncontent$$module$build$src$core$dropdowndiv,arrow$$module$build$src$core$dropdowndiv,boundsElement$$module$build$src$core$dropdowndiv=null,owner$$module$build$src$core$dropdowndiv=null,positionToField$$module$build$src$core$dropdowndiv=null,returnEphemeralFocus$$module$build$src$core$dropdowndiv=null,keydownListener$$module$build$src$core$dropdowndiv=null,internal$$module$build$src$core$dropdowndiv={getBoundsInfo:function(){const a=getPageOffset$$module$build$src$core$utils$style(boundsElement$$module$build$src$core$dropdowndiv),\nb=getSize$$module$build$src$core$utils$style(boundsElement$$module$build$src$core$dropdowndiv);return{left:a.x,right:a.x+b.width,top:a.y,bottom:a.y+b.height,width:b.width,height:b.height}},getPositionMetrics:function(a,b,c,d){const e=internal$$module$build$src$core$dropdowndiv.getBoundsInfo(),f=getSize$$module$build$src$core$utils$style(div$$module$build$src$core$dropdowndiv);return b+f.heighte.top?getPositionAboveMetrics$$module$build$src$core$dropdowndiv(c,\nd,e,f):b+f.heightdocument.documentElement.clientTop?getPositionAboveMetrics$$module$build$src$core$dropdowndiv(c,d,e,f):getPositionTopOfPageMetrics$$module$build$src$core$dropdowndiv(a,e,f)}},TEST_ONLY$$module$build$src$core$dropdowndiv=internal$$module$build$src$core$dropdowndiv,module$build$src$core$dropdowndiv={ANIMATION_TIME:ANIMATION_TIME$$module$build$src$core$dropdowndiv,ARROW_HORIZONTAL_PADDING:ARROW_HORIZONTAL_PADDING$$module$build$src$core$dropdowndiv,\nARROW_SIZE:ARROW_SIZE$$module$build$src$core$dropdowndiv,BORDER_SIZE:BORDER_SIZE$$module$build$src$core$dropdowndiv,PADDING_Y:PADDING_Y$$module$build$src$core$dropdowndiv,TEST_ONLY:internal$$module$build$src$core$dropdowndiv};module$build$src$core$dropdowndiv.clearContent=clearContent$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.createDom=createDom$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.getContentDiv=getContentDiv$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.getOwner=getOwner$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.getPositionX=getPositionX$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hide=hide$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hideIfOwner=hideIfOwner$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hideWithoutAnimation=hideWithoutAnimation$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.isVisible=isVisible$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.repositionForWindowResize=repositionForWindowResize$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.setBoundsElement=setBoundsElement$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.setColour=setColour$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.show=show$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.showPositionedByBlock=showPositionedByBlock$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.showPositionedByField=showPositionedByField$$module$build$src$core$dropdowndiv;var module$build$src$core$utils$string={};module$build$src$core$utils$string.commonWordPrefix=commonWordPrefix$$module$build$src$core$utils$string;module$build$src$core$utils$string.commonWordSuffix=commonWordSuffix$$module$build$src$core$utils$string;module$build$src$core$utils$string.isNumber=$.isNumber$$module$build$src$core$utils$string;module$build$src$core$utils$string.shortestStringLength=shortestStringLength$$module$build$src$core$utils$string;module$build$src$core$utils$string.wrap=$.wrap$$module$build$src$core$utils$string;var customTooltip$$module$build$src$core$tooltip=void 0,visible$$module$build$src$core$tooltip=!1,blocked$$module$build$src$core$tooltip=!1,LIMIT$$module$build$src$core$tooltip=50,mouseOutPid$$module$build$src$core$tooltip=0,showPid$$module$build$src$core$tooltip=0,lastX$$module$build$src$core$tooltip=0,lastY$$module$build$src$core$tooltip=0,element$$module$build$src$core$tooltip=null,poisonedElement$$module$build$src$core$tooltip=null,OFFSET_X$$module$build$src$core$tooltip=0,OFFSET_Y$$module$build$src$core$tooltip=\n10,RADIUS_OK$$module$build$src$core$tooltip=10,HOVER_MS$$module$build$src$core$tooltip=750,MARGINS$$module$build$src$core$tooltip=5,containerDiv$$module$build$src$core$tooltip=null,module$build$src$core$tooltip={HOVER_MS:HOVER_MS$$module$build$src$core$tooltip,LIMIT:LIMIT$$module$build$src$core$tooltip,MARGINS:MARGINS$$module$build$src$core$tooltip,OFFSET_X:OFFSET_X$$module$build$src$core$tooltip,OFFSET_Y:OFFSET_Y$$module$build$src$core$tooltip,RADIUS_OK:RADIUS_OK$$module$build$src$core$tooltip};\nmodule$build$src$core$tooltip.bindMouseEvents=bindMouseEvents$$module$build$src$core$tooltip;module$build$src$core$tooltip.block=block$$module$build$src$core$tooltip;module$build$src$core$tooltip.createDom=createDom$$module$build$src$core$tooltip;module$build$src$core$tooltip.dispose=dispose$$module$build$src$core$tooltip;module$build$src$core$tooltip.getCustomTooltip=getCustomTooltip$$module$build$src$core$tooltip;module$build$src$core$tooltip.getDiv=getDiv$$module$build$src$core$tooltip;\nmodule$build$src$core$tooltip.getTooltipOfObject=getTooltipOfObject$$module$build$src$core$tooltip;module$build$src$core$tooltip.hide=hide$$module$build$src$core$tooltip;module$build$src$core$tooltip.isVisible=isVisible$$module$build$src$core$tooltip;module$build$src$core$tooltip.setCustomTooltip=setCustomTooltip$$module$build$src$core$tooltip;module$build$src$core$tooltip.unbindMouseEvents=unbindMouseEvents$$module$build$src$core$tooltip;module$build$src$core$tooltip.unblock=unblock$$module$build$src$core$tooltip;var hsvSaturation$$module$build$src$core$utils$colour=.45,hsvValue$$module$build$src$core$utils$colour=.65,names$$module$build$src$core$utils$colour={aqua:\"#00ffff\",black:\"#000000\",blue:\"#0000ff\",fuchsia:\"#ff00ff\",gray:\"#808080\",green:\"#008000\",lime:\"#00ff00\",maroon:\"#800000\",navy:\"#000080\",olive:\"#808000\",purple:\"#800080\",red:\"#ff0000\",silver:\"#c0c0c0\",teal:\"#008080\",white:\"#ffffff\",yellow:\"#ffff00\"},module$build$src$core$utils$colour={};module$build$src$core$utils$colour.blend=blend$$module$build$src$core$utils$colour;\nmodule$build$src$core$utils$colour.getHsvSaturation=getHsvSaturation$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.getHsvValue=getHsvValue$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hexToRgb=hexToRgb$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hsvToHex=hsvToHex$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hueToHex=hueToHex$$module$build$src$core$utils$colour;\nmodule$build$src$core$utils$colour.names=names$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.parse=parse$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.rgbToHex=rgbToHex$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.setHsvSaturation=setHsvSaturation$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.setHsvValue=setHsvValue$$module$build$src$core$utils$colour;var module$build$src$core$utils$parsing={};module$build$src$core$utils$parsing.checkMessageReferences=checkMessageReferences$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.parseBlockColour=parseBlockColour$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.replaceMessageReferences=replaceMessageReferences$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.tokenizeInterpolation=tokenizeInterpolation$$module$build$src$core$utils$parsing;var Field$$module$build$src$core$field=class{get size_(){return this.size}set size_(a){this.size=a}constructor(a,b,c){this.DEFAULT_VALUE=null;this.name=void 0;this.tooltip=this.validator_=null;this.size=new Size$$module$build$src$core$utils$size(0,0);this.constants_=this.mouseDownWrapper=this.textContent_=this.textElement_=this.borderRect_=this.fieldGroup_=null;this.disposed=!1;this.maxDisplayLength=50;this.sourceBlock_=null;this.enabled_=this.visible_=this.isDirty_=!0;this.suffixField=this.prefixField=\nthis.clickTarget_=null;this.EDITABLE=!0;this.SERIALIZABLE=!1;this.id_=null;this.value_=\"DEFAULT_VALUE\"in new.target.prototype?new.target.prototype.DEFAULT_VALUE:this.DEFAULT_VALUE;this.size_=new Size$$module$build$src$core$utils$size(0,0);a!==Field$$module$build$src$core$field.SKIP_SETUP&&(c&&this.configure_(c),this.setValue(a),b&&this.setValidator(b))}configure_(a){a.tooltip&&this.setTooltip(replaceMessageReferences$$module$build$src$core$utils$parsing(a.tooltip))}setSourceBlock(a){if(this.sourceBlock_)throw Error(\"Field already bound to a block\");\nthis.sourceBlock_=a;if(a.id.includes(\"_field\"))throw Error(\"Field ID indicator is contained in block ID. This may cause \"+`problems with focus: ${a.id}.`);this.id_=`${a.id}_field_${getNextUniqueId$$module$build$src$core$utils$idgenerator()}`}getConstants(){!this.constants_&&this.sourceBlock_&&!this.sourceBlock_.isDeadOrDying()&&this.sourceBlock_.workspace.rendered&&(this.constants_=this.sourceBlock_.workspace.getRenderer().getConstants());return this.constants_}getSourceBlock(){return this.sourceBlock_}init(){if(!this.fieldGroup_){var a=\nthis.id_;if(!a)throw Error(\"Expected ID to be defined prior to init.\");this.fieldGroup_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{id:a});this.isVisible()||(this.fieldGroup_.style.display=\"none\");this.sourceBlock_.getSvgRoot().appendChild(this.fieldGroup_);this.initView();this.updateEditable();this.setTooltip(this.tooltip);this.bindEvents_();this.initModel();this.applyColour()}}initView(){this.createBorderRect_();this.createTextElement_();this.fieldGroup_&&\naddClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyField\")}initModel(){}isFullBlockField(){return!this.borderRect_}createBorderRect_(){this.borderRect_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{rx:this.getConstants().FIELD_BORDER_RECT_RADIUS,ry:this.getConstants().FIELD_BORDER_RECT_RADIUS,x:0,y:0,height:this.size_.height,width:this.size_.width,\"class\":\"blocklyFieldRect\"},this.fieldGroup_)}createTextElement_(){this.textElement_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,\n{\"class\":\"blocklyText blocklyFieldText\"},this.fieldGroup_);this.getConstants().FIELD_TEXT_BASELINE_CENTER&&this.textElement_.setAttribute(\"dominant-baseline\",\"central\");this.textContent_=document.createTextNode(\"\");this.textElement_.appendChild(this.textContent_)}bindEvents_(){const a=this.getClickTarget_();if(!a)throw Error(\"A click target has not been set.\");bindMouseEvents$$module$build$src$core$tooltip(a);this.mouseDownWrapper=conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",\nthis,this.onMouseDown_)}fromXml(a){this.setValue(a.textContent)}toXml(a){a.textContent=this.getValue();return a}saveState(a){a=this.saveLegacyState(Field$$module$build$src$core$field);return a!==null?a:this.getValue()}loadState(a){this.loadLegacyState(Field$$module$build$src$core$field,a)||this.setValue(a)}saveLegacyState(a){return a.prototype.saveState===this.saveState&&a.prototype.toXml!==this.toXml?(a=$.createElement$$module$build$src$core$utils$xml(\"field\"),a.setAttribute(\"name\",this.name||\"\"),\ndomToText$$module$build$src$core$utils$xml(this.toXml(a)).replace(' xmlns=\"https://developers.google.com/blockly/xml\"',\"\")):null}loadLegacyState(a,b){return a.prototype.loadState===this.loadState&&a.prototype.fromXml!==this.fromXml?(this.fromXml($.textToDom$$module$build$src$core$utils$xml(b)),!0):!1}dispose(){hideIfOwner$$module$build$src$core$dropdowndiv(this);hideIfOwner$$module$build$src$core$widgetdiv(this);let a;((a=this.getSourceBlock())==null?0:a.isDeadOrDying())||removeNode$$module$build$src$core$utils$dom(this.fieldGroup_);\nthis.disposed=!0}updateEditable(){const a=this.fieldGroup_,b=this.getSourceBlock();this.EDITABLE&&a&&b&&(this.enabled_&&b.isEditable()?(addClass$$module$build$src$core$utils$dom(a,\"blocklyEditableField\"),removeClass$$module$build$src$core$utils$dom(a,\"blocklyNonEditableField\")):(addClass$$module$build$src$core$utils$dom(a,\"blocklyNonEditableField\"),removeClass$$module$build$src$core$utils$dom(a,\"blocklyEditableField\")))}setEnabled(a){this.enabled_=a;this.updateEditable()}isEnabled(){return this.enabled_}isClickable(){return this.enabled_&&\n!!this.sourceBlock_&&this.sourceBlock_.isEditable()&&this.showEditor_!==Field$$module$build$src$core$field.prototype.showEditor_}isClickableInFlyout(a){return!a}isCurrentlyEditable(){return this.enabled_&&this.EDITABLE&&!!this.sourceBlock_&&this.sourceBlock_.isEditable()}isSerializable(){let a=!1;this.name&&(this.SERIALIZABLE?a=!0:this.EDITABLE&&(console.warn(\"Detected an editable field that was not serializable. Please define SERIALIZABLE property as true on all editable custom fields. Proceeding with serialization.\"),\na=!0));return a}isVisible(){return this.visible_}setVisible(a){if(this.visible_!==a){this.visible_=a;var b=this.fieldGroup_;b&&(b.style.display=a?\"block\":\"none\")}}setValidator(a){this.validator_=a}getValidator(){return this.validator_}getSvgRoot(){return this.fieldGroup_}getBorderRect(){if(!this.borderRect_)throw Error(`The border rectangle is ${this.borderRect_}.`);return this.borderRect_}getTextElement(){if(!this.textElement_)throw Error(`The text element is ${this.textElement_}.`);return this.textElement_}getTextContent(){if(!this.textContent_)throw Error(`The text content is ${this.textContent_}.`);\nreturn this.textContent_}applyColour(){}render_(){this.textContent_&&(this.textContent_.nodeValue=this.getDisplayText_());this.updateSize_()}showEditor(a){this.isClickable()&&this.showEditor_(a)}showEditor_(a){}repositionForWindowResize(){return!1}updateSize_(a){const b=this.getConstants();a=a!==void 0?a:this.isFullBlockField()?0:this.getConstants().FIELD_BORDER_RECT_X_PADDING;let c=a*2,d=b.FIELD_TEXT_HEIGHT,e=0;this.textElement_&&(e=getTextWidth$$module$build$src$core$utils$dom(this.textElement_),\nc+=e);this.isFullBlockField()||(d=Math.max(d,b.FIELD_BORDER_RECT_HEIGHT));this.size_=new Size$$module$build$src$core$utils$size(c,d);this.positionTextElement_(a,e);this.positionBorderRect_()}positionTextElement_(a,b){if(this.textElement_){var c=this.getConstants(),d=this.size_.height/2,e;this.textElement_.setAttribute(\"x\",String(((e=this.getSourceBlock())==null?0:e.RTL)?this.size_.width-b-a:a));this.textElement_.setAttribute(\"y\",String(c.FIELD_TEXT_BASELINE_CENTER?d:d-c.FIELD_TEXT_HEIGHT/2+c.FIELD_TEXT_BASELINE))}}positionBorderRect_(){this.borderRect_&&\n(this.borderRect_.setAttribute(\"width\",String(this.size_.width)),this.borderRect_.setAttribute(\"height\",String(this.size_.height)),this.borderRect_.setAttribute(\"rx\",String(this.getConstants().FIELD_BORDER_RECT_RADIUS)),this.borderRect_.setAttribute(\"ry\",String(this.getConstants().FIELD_BORDER_RECT_RADIUS)))}getSize(){if(!this.isVisible())return new Size$$module$build$src$core$utils$size(0,0);this.isDirty_&&(this.render_(),this.isDirty_=!1);return this.size_}getScaledBBox(){let a;var b=this.getSourceBlock();\nif(!b)throw new UnattachedFieldError$$module$build$src$core$field;if(this.isFullBlockField()){var c=this.sourceBlock_.getHeightWidth();const d=b.workspace.scale;a=this.getAbsoluteXY_();b=(c.width+1)*d;c=(c.height+1)*d;GECKO$$module$build$src$core$utils$useragent?(a.x+=1.5*d,a.y+=1.5*d):(a.x-=.5*d,a.y-=.5*d)}else c=this.borderRect_.getBoundingClientRect(),a=getPageOffset$$module$build$src$core$utils$style(this.borderRect_),b=c.width,c=c.height;return new Rect$$module$build$src$core$utils$rect(a.y,\na.y+c,a.x,a.x+b)}onLocationChange(a){}getDisplayText_(){let a=this.getText();a.length>this.maxDisplayLength&&(a=a.substring(0,this.maxDisplayLength-2)+\"\\u2026\");a=a.replace(/\\s/g,Field$$module$build$src$core$field.NBSP);this.sourceBlock_&&this.sourceBlock_.RTL&&(a+=\"\\u200f\");return a}getText(){const a=this.getText_();return a!==null?String(a):String(this.getValue())}getText_(){return null}markDirty(){this.isDirty_=!0;this.constants_=null}forceRerender(){this.isDirty_=!0;this.sourceBlock_&&this.sourceBlock_.rendered&&\nthis.sourceBlock_.queueRender()}setValue(a,b=!0){if(a!==null){var c=$.getGroup$$module$build$src$core$events$utils();c||$.setGroup$$module$build$src$core$events$utils(!0);try{const k=this.doClassValidation_(a),l=this.processValidation(a,k,b);if(!(l instanceof Error)){var d,e=(d=this.getValidator())==null?void 0:d.call(this,l),f=this.processValidation(l,e,b);if(!(f instanceof Error)){var g=this.sourceBlock_;if(!g||!g.disposed){var h=this.getValue();h===f?this.doValueUpdate_(f):(this.doValueUpdate_(f),\nb&&g&&isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(g,\"field\",this.name||null,h,f)),this.isDirty_&&this.forceRerender())}}}}finally{$.setGroup$$module$build$src$core$events$utils(c)}}}processValidation(a,b,c){return b===null?(this.doValueInvalid_(a,c),this.isDirty_&&this.forceRerender(),Error()):b===void 0?a:b}getValue(){return this.value_}doClassValidation_(a){return a===\nnull||a===void 0?null:a}doValueUpdate_(a){this.value_=a;this.isDirty_=!0}doValueInvalid_(a,b){}onMouseDown_(a){this.sourceBlock_&&!this.sourceBlock_.isDeadOrDying()&&(a=this.sourceBlock_.workspace.getGesture(a))&&a.setStartField(this)}setTooltip(a){a||a===\"\"||(a=this.sourceBlock_);const b=this.getClickTarget_();b?b.tooltip=a:this.tooltip=a}getTooltip(){const a=this.getClickTarget_();return a?getTooltipOfObject$$module$build$src$core$tooltip(a):getTooltipOfObject$$module$build$src$core$tooltip({tooltip:this.tooltip})}getClickTarget_(){return this.clickTarget_||\nthis.getSvgRoot()}getAbsoluteXY_(){return getPageOffset$$module$build$src$core$utils$style(this.getClickTarget_())}referencesVariables(){return!1}refreshVariableName(){}getParentInput(){let a=null;const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;const c=b.inputList;for(let d=0;d{d.stopPropagation();$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this);clearTouchIdentifier$$module$build$src$core$touch()});\nconditionalBind$$module$build$src$core$browser_events(this.textArea,\"wheel\",this,d=>{d.stopPropagation()});conditionalBind$$module$build$src$core$browser_events(this.textArea,\"keydown\",this,this.handleKeyDown)}getDom(){return this.foreignObject}getText(){return this.text}setText(a){this.textArea.value=a;this.onTextChange()}onTextChange(){const a=this.text;this.text=this.textArea.value;for(let b=this.textChangeListeners.length-1;b>=0;b--)this.textChangeListeners[b](a,this.text)}handleKeyDown(a){if(a.key===\n\"Escape\"||a.key===\"Enter\"&&(a.ctrlKey||a.metaKey)){if(this.onFinishEditing)this.onFinishEditing();a.stopPropagation()}}addTextChangeListener(a){this.textChangeListeners.push(a)}removeTextChangeListener(a){this.textChangeListeners.splice(this.textChangeListeners.indexOf(a),1)}setPlaceholderText(a){this.textArea.placeholder=a}setEditable(a){a?this.textArea.removeAttribute(\"readonly\"):this.textArea.setAttribute(\"readonly\",\"true\")}updateSize(a,b){this.foreignObject.setAttribute(\"height\",`${a.height-b.height}`);\nthis.foreignObject.setAttribute(\"width\",`${a.width}`);this.foreignObject.setAttribute(\"y\",`${b.height}`);this.workspace.RTL&&this.foreignObject.setAttribute(\"x\",`${-a.width}`)}getFocusableElement(){return this.textArea}getFocusableTree(){return this.workspace}onNodeFocus(){const a=Rect$$module$build$src$core$utils$rect.from(this.foreignObject.getBoundingClientRect());this.workspace.scrollBoundsIntoView(Rect$$module$build$src$core$utils$rect.createFromPoint(screenToWsCoordinates$$module$build$src$core$utils$svg_math(this.workspace,\na.getOrigin()),a.getWidth(),a.getHeight()))}onNodeBlur(){}canBeFocused(){return this.id?!0:!1}},module$build$src$core$comments$comment_editor={COMMENT_EDITOR_FOCUS_IDENTIFIER:COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor};module$build$src$core$comments$comment_editor.CommentEditor=CommentEditor$$module$build$src$core$comments$comment_editor;var COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button=\"_delete_bar_button\",DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button=class extends CommentBarButton$$module$build$src$core$comments$comment_bar_button{constructor(a,b,c,d){super(a,b,c,d);this.id=a;this.workspace=b;this.container=c;this.commentView=d;this.icon=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{\"class\":\"blocklyDeleteIcon\",\nhref:`${this.workspace.options.pathToMedia}delete-icon.svg`,id:`${this.id}${COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button}`},c);this.bindId=conditionalBind$$module$build$src$core$browser_events(this.icon,\"pointerdown\",this,this.performAction.bind(this))}dispose(){unbind$$module$build$src$core$browser_events(this.bindId)}reposition(){const a=this.getMargin();this.icon.setAttribute(\"x\",\"0\");const b=this.container.getBBox();this.icon.setAttribute(\"y\",\n`${a}`);this.icon.setAttribute(\"x\",`${b.width-this.getSize(!0).getWidth()}`)}performAction(a){clearTouchIdentifier$$module$build$src$core$touch();a&&a instanceof PointerEvent&&isRightButton$$module$build$src$core$browser_events(a)?a.stopPropagation():(this.getCommentView().dispose(),a==null||a.stopPropagation(),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.workspace))}},module$build$src$core$comments$delete_comment_bar_button={COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER:COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button};\nmodule$build$src$core$comments$delete_comment_bar_button.DeleteCommentBarButton=DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button;var CommentView$$module$build$src$core$comments$comment_view=class{constructor(a,b){this.workspace=a;this.commentId=b;this.collapsed=!1;this.editable=!0;this.location=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.sizeChangeListeners=[];this.disposeListeners=[];this.collapseChangeListeners=[];this.resizePointerMoveListener=this.resizePointerUpListener=null;this.disposed=this.disposing=!1;this.svgRoot=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,\n{\"class\":\"blocklyComment blocklyEditable blocklyDraggable\"});this.highlightRect=this.createHighlightRect(this.svgRoot);({topBarGroup:this.topBarGroup,topBarBackground:this.topBarBackground,deleteButton:this.deleteButton,foldoutButton:this.foldoutButton,textPreview:this.textPreview,textPreviewNode:this.textPreviewNode}=this.createTopBar(this.svgRoot));this.commentEditor=this.createTextArea();this.resizeHandle=this.createResizeHandle(this.svgRoot,a);let c;(c=a.getLayerManager())==null||c.append(this,\nBLOCK$$module$build$src$core$layers);this.size=CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize;this.setSizeWithoutFiringEvents(this.size);this.moveTo(new Coordinate$$module$build$src$core$utils$coordinate(0,0))}createHighlightRect(a){return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyCommentHighlight\"},a)}createTopBar(a){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,\n{\"class\":\"blocklyCommentTopbar\"},a);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyCommentTopbarBackground\"},a),c=new DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button(this.commentId,this.workspace,a,this),d=new CollapseCommentBarButton$$module$build$src$core$comments$collapse_comment_bar_button(this.commentId,this.workspace,a,this);this.addDisposeListener(()=>{c.dispose();d.dispose()});const e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,\n{\"class\":\"blocklyCommentPreview blocklyCommentText blocklyText\"},a),f=document.createTextNode(\"\");e.appendChild(f);return{topBarGroup:a,topBarBackground:b,deleteButton:c,foldoutButton:d,textPreview:e,textPreviewNode:f}}createTextArea(){const a=new CommentEditor$$module$build$src$core$comments$comment_editor(this.workspace,this.commentId,()=>this.svgRoot.focus());this.svgRoot.appendChild(a.getDom());a.addTextChangeListener((b,c)=>{this.updateTextPreview(c);this.setSize(this.size)});return a}getEditorFocusableNode(){return this.commentEditor}createResizeHandle(a,\nb){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{\"class\":\"blocklyResizeHandle\",href:`${b.options.pathToMedia}resize-handle.svg`},a);conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onResizePointerDown);return a}getSvgRoot(){return this.svgRoot}getSize(){return this.collapsed?this.topBarBackground.getBBox():this.size}setSizeWithoutFiringEvents(a){const b=this.topBarBackground.getBBox(),c=this.textPreview.getBBox(),d=this.resizeHandle.getBBox();\nthis.size=a=Size$$module$build$src$core$utils$size.max(a,this.calcMinSize(b));this.svgRoot.setAttribute(\"height\",`${a.height}`);this.svgRoot.setAttribute(\"width\",`${a.width}`);this.updateHighlightRect(a);this.updateTopBarSize(a);this.commentEditor.updateSize(a,b);this.deleteButton.reposition();this.foldoutButton.reposition();this.updateTextPreviewSize(a,b,c);this.updateResizeHandlePosition(a,d)}setSize(a){const b=this.preResizeSize||this.size;this.setSizeWithoutFiringEvents(a);this.onSizeChange(b,\nthis.size)}calcMinSize(a){var b;this.updateTextPreview((b=this.commentEditor.getText())!=null?b:\"\");let c=b=getTextWidth$$module$build$src$core$utils$dom(this.textPreview);this.foldoutButton.isVisible()?c+=this.foldoutButton.getSize(!0).getWidth():b&&(c+=4);this.deleteButton.isVisible()?c+=this.deleteButton.getSize(!0).getWidth():b&&(c+=4);return new Size$$module$build$src$core$utils$size(c,a.height+20)}updateHighlightRect(a){this.highlightRect.setAttribute(\"height\",`${a.height}`);this.highlightRect.setAttribute(\"width\",\n`${a.width}`);this.workspace.RTL&&this.highlightRect.setAttribute(\"x\",`${-a.width}`)}updateTopBarSize(a){this.topBarBackground.setAttribute(\"width\",`${a.width}`)}updateTextPreviewSize(a,b,c){b=(b.height-c.height)/2;const d=this.foldoutButton.getSize(!0),e=this.deleteButton.getSize(!0);a=a.width-d.getWidth()-e.getWidth();this.textPreview.setAttribute(\"x\",`${(this.workspace.RTL?-1:1)*d.getWidth()}`);this.textPreview.setAttribute(\"y\",`${b+c.height/2}`);this.textPreview.setAttribute(\"width\",`${a}`)}updateResizeHandlePosition(a,\nb){this.resizeHandle.setAttribute(\"y\",`${a.height-b.height}`);this.resizeHandle.setAttribute(\"x\",`${a.width-b.width}`)}onSizeChange(a,b){for(let c=this.sizeChangeListeners.length-1;c>=0;c--)this.sizeChangeListeners[c](a,b)}addSizeChangeListener(a){this.sizeChangeListeners.push(a)}removeSizeChangeListener(a){this.sizeChangeListeners.splice(this.sizeChangeListeners.indexOf(a),1)}onResizePointerDown(a){this.isEditable()&&(this.bringToFront(),isRightButton$$module$build$src$core$browser_events(a)||(this.preResizeSize=\nthis.getSize(),start$$module$build$src$core$utils$drag(this.workspace,a,new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.getSize().width:this.getSize().width,this.getSize().height)),this.resizePointerUpListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onResizePointerUp),this.resizePointerMoveListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",this,this.onResizePointerMove),this.workspace.hideChaff()),\na.stopPropagation())}onResizePointerUp(a){clearTouchIdentifier$$module$build$src$core$touch();this.resizePointerUpListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerUpListener),this.resizePointerUpListener=null);this.resizePointerMoveListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerMoveListener),this.resizePointerMoveListener=null);this.setSize(this.size);this.preResizeSize=void 0}onResizePointerMove(a){a=move$$module$build$src$core$utils$drag(this.workspace,\na);this.setSizeWithoutFiringEvents(new Size$$module$build$src$core$utils$size(this.workspace.RTL?-a.x:a.x,a.y))}isCollapsed(){return this.collapsed}setCollapsed(a){(this.collapsed=a)?addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCollapsed\"):removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCollapsed\");this.setSizeWithoutFiringEvents(this.size);this.onCollapse()}onCollapse(){for(let a=this.collapseChangeListeners.length-1;a>=0;a--)this.collapseChangeListeners[a](this.collapsed)}addOnCollapseListener(a){this.collapseChangeListeners.push(a)}removeOnCollapseListener(a){this.collapseChangeListeners.splice(this.collapseChangeListeners.indexOf(a),\n1)}isEditable(){return this.editable}setEditable(a){(this.editable=a)?(addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyEditable\"),removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyReadonly\")):(removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyEditable\"),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyReadonly\"));this.commentEditor.setEditable(a)}getRelativeToSurfaceXY(){return this.location}moveTo(a){this.location=a;this.svgRoot.setAttribute(\"transform\",\n`translate(${a.x}, ${a.y})`)}getText(){return this.commentEditor.getText()}setText(a){this.commentEditor.setText(a)}setPlaceholderText(a){this.commentEditor.setPlaceholderText(a)}addTextChangeListener(a){this.commentEditor.addTextChangeListener(a)}removeTextChangeListener(a){this.commentEditor.removeTextChangeListener(a)}updateTextPreview(a){this.textPreviewNode.textContent=this.truncateText(a)}truncateText(a){return a.length>=12?`${a.substring(0,9)}...`:a}bringToFront(){const a=this.svgRoot.parentNode,\nb=a.childNodes;b[b.length-1]!==this.svgRoot&&a.appendChild(this.svgRoot)}onDeleteDown(a){clearTouchIdentifier$$module$build$src$core$touch();isRightButton$$module$build$src$core$browser_events(a)||this.dispose();a.stopPropagation()}dispose(){this.disposing=!0;removeNode$$module$build$src$core$utils$dom(this.svgRoot);for(let a=this.disposeListeners.length-1;a>=0;a--)this.disposeListeners[a]();this.disposeListeners.length=0;this.disposed=!0}isDisposed(){return this.disposed}isDeadOrDying(){return this.disposing||\nthis.disposed}addDisposeListener(a){this.disposeListeners.push(a)}removeDisposeListener(a){this.disposeListeners.splice(this.disposeListeners.indexOf(a),1)}getCommentBarButtons(){return[this.foldoutButton,this.deleteButton]}};CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize=new Size$$module$build$src$core$utils$size(120,100);register$$module$build$src$core$css(\"\\n.injectionDiv {\\n --commentFillColour: #FFFCC7;\\n --commentBorderColour: #F2E49B;\\n}\\n\\n.blocklyComment .blocklyTextarea {\\n background-color: var(--commentFillColour);\\n border: 1px solid var(--commentBorderColour);\\n box-sizing: border-box;\\n display: block;\\n outline: 0;\\n padding: 5px;\\n resize: none;\\n width: 100%;\\n height: 100%;\\n}\\n\\n.blocklyReadonly.blocklyComment .blocklyTextarea {\\n cursor: inherit;\\n}\\n\\n.blocklyDeleteIcon {\\n width: 20px;\\n height: 20px;\\n display: none;\\n cursor: pointer;\\n}\\n\\n.blocklyFoldoutIcon {\\n width: 20px;\\n height: 20px;\\n transform-origin: 12px 12px;\\n cursor: pointer;\\n}\\n.blocklyResizeHandle {\\n width: 12px;\\n height: 12px;\\n cursor: se-resize;\\n}\\n.blocklyReadonly.blocklyComment .blocklyResizeHandle {\\n cursor: inherit;\\n}\\n\\n.blocklyCommentTopbarBackground {\\n fill: var(--commentBorderColour);\\n height: 24px;\\n}\\n\\n.blocklyComment .blocklyCommentPreview.blocklyText {\\n fill: #000;\\n dominant-baseline: middle;\\n visibility: hidden;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyCommentPreview {\\n visibility: visible;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyCommentForeignObject,\\n.blocklyCollapsed.blocklyComment .blocklyResizeHandle {\\n display: none;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyFoldoutIcon {\\n transform: rotate(-90deg);\\n}\\n\\n.blocklyRTL .blocklyCommentTopbar {\\n transform: scale(-1, 1);\\n}\\n\\n.blocklyRTL .blocklyCommentForeignObject {\\n direction: rtl;\\n}\\n\\n.blocklyRTL .blocklyCommentPreview {\\n /* Revert the scale and control RTL using direction instead. */\\n transform: scale(-1, 1);\\n direction: rtl;\\n}\\n\\n.blocklyRTL .blocklyResizeHandle {\\n transform: scale(-1, 1);\\n cursor: sw-resize;\\n}\\n\\n.blocklyCommentHighlight {\\n fill: none;\\n}\\n\\n.blocklyCommentText.blocklyActiveFocus {\\n border-color: #fc3;\\n border-width: 2px;\\n}\\n\\n.blocklySelected .blocklyCommentHighlight {\\n stroke: #fc3;\\n stroke-width: 3px;\\n}\\n\\n.blocklyCollapsed.blocklySelected .blocklyCommentHighlight {\\n stroke: none;\\n}\\n\\n.blocklyCollapsed.blocklySelected .blocklyCommentTopbarBackground {\\n stroke: #fc3;\\n stroke-width: 3px;\\n}\\n\");\nvar module$build$src$core$comments$comment_view={};module$build$src$core$comments$comment_view.CommentView=CommentView$$module$build$src$core$comments$comment_view;var WorkspaceComment$$module$build$src$core$comments$workspace_comment=class{constructor(a,b){this.workspace=a;this.text=\"\";this.collapsed=!1;this.deletable=this.movable=this.editable=!0;this.location=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.disposing=this.disposed=!1;this.id=b&&!a.getCommentById(b)?b:genUid$$module$build$src$core$utils$idgenerator();this.size=CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize;a.addTopComment(this);this.fireCreateEvent()}fireCreateEvent(){isEnabled$$module$build$src$core$events$utils()&&\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CREATE))(this))}fireDeleteEvent(){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_DELETE))(this))}fireChangeEvent(a,b){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CHANGE))(this,\na,b))}fireCollapseEvent(a){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_COLLAPSE))(this,a))}setText(a){const b=this.text;this.text=a;this.fireChangeEvent(b,a)}getText(){return this.text}setSize(a){const b=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_RESIZE))(this);this.size=a;b.recordCurrentSizeAsNewSize();\nfire$$module$build$src$core$events$utils(b)}getSize(){return this.size}setCollapsed(a){this.collapsed=a;this.fireCollapseEvent(a)}isCollapsed(){return this.collapsed}setEditable(a){this.editable=a}isEditable(){return this.isOwnEditable()&&!this.workspace.isReadOnly()}isOwnEditable(){return this.editable}setMovable(a){this.movable=a}isMovable(){return this.isOwnMovable()&&!this.workspace.isReadOnly()&&!this.workspace.isFlyout}isOwnMovable(){return this.movable}setDeletable(a){this.deletable=a}isDeletable(){return this.isOwnDeletable()&&\n!this.isDeadOrDying()&&!this.workspace.isReadOnly()&&!this.workspace.isFlyout}isOwnDeletable(){return this.deletable}moveTo(a,b){const c=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_MOVE))(this);b&&c.setReason(b);this.location=a;c.recordNew();fire$$module$build$src$core$events$utils(c)}getRelativeToSurfaceXY(){return this.location}dispose(){this.disposing=!0;this.fireDeleteEvent();this.workspace.removeTopComment(this);this.disposed=!0}isDisposed(){return this.disposed}isDeadOrDying(){return this.disposing||\nthis.disposed}},module$build$src$core$comments$workspace_comment={};module$build$src$core$comments$workspace_comment.WorkspaceComment=WorkspaceComment$$module$build$src$core$comments$workspace_comment;var RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment=class extends WorkspaceComment$$module$build$src$core$comments$workspace_comment{constructor(a,b){super(a,b);this.dragStrategy=new CommentDragStrategy$$module$build$src$core$dragging$comment_drag_strategy(this);this.workspace=a;this.view=new CommentView$$module$build$src$core$comments$comment_view(a,this.id);this.view.setSize(this.getSize());this.view.setEditable(this.isEditable());this.view.getSvgRoot().setAttribute(\"data-id\",\nthis.id);this.view.getSvgRoot().setAttribute(\"id\",this.id);this.addModelUpdateBindings();conditionalBind$$module$build$src$core$browser_events(this.view.getSvgRoot(),\"pointerdown\",this,this.startGesture)}addModelUpdateBindings(){this.view.addTextChangeListener((a,b)=>void super.setText(b));this.view.addSizeChangeListener((a,b)=>void super.setSize(b));this.view.addOnCollapseListener(()=>void super.setCollapsed(this.view.isCollapsed()));this.view.addDisposeListener(()=>{this.isDeadOrDying()||this.dispose()})}setText(a){this.view.setText(a)}setPlaceholderText(a){this.view.setPlaceholderText(a)}setSize(a){this.view.setSize(a)}setCollapsed(a){this.view.setCollapsed(a)}setEditable(a){super.setEditable(a);\nthis.view.setEditable(this.isEditable())}getSvgRoot(){return this.view.getSvgRoot()}getSize(){return super.getSize()}getBoundingRectangle(){const a=this.getRelativeToSurfaceXY();var b,c;const d=(c=(b=this.view)==null?void 0:b.getSize())!=null?c:this.getSize();this.workspace.RTL?(b=a.x-d.width,c=a.x):(b=a.x,c=a.x+d.width);return new Rect$$module$build$src$core$utils$rect(a.y,a.y+d.height,b,c)}moveBy(a,b,c){const d=this.getRelativeToSurfaceXY();a=new Coordinate$$module$build$src$core$utils$coordinate(d.x+\na,d.y+b);this.moveTo(a,c)}moveTo(a,b){super.moveTo(a,b);this.view.moveTo(a)}moveDuringDrag(a){this.location=a;this.view.moveTo(a)}setDragging(a){a?addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDragging\"):removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDragging\")}dispose(){this.disposing=!0;const a=$.getFocusManager$$module$build$src$core$focus_manager();a.getFocusedNode()===this&&setTimeout(()=>a.focusTree(this.workspace),0);this.view.isDeadOrDying()||\nthis.view.dispose();super.dispose()}startGesture(a){const b=this.workspace.getGesture(a);b&&(b.handleCommentStart(a,this),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this))}setDeleteStyle(a){a?addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDraggingDelete\"):removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDraggingDelete\")}isCopyable(){return this.isOwnMovable()&&this.isOwnDeletable()}isMovable(){return this.dragStrategy.isMovable()}startDrag(){this.dragStrategy.startDrag()}drag(a){this.dragStrategy.drag(a)}endDrag(){this.dragStrategy.endDrag()}revertDrag(){this.dragStrategy.revertDrag()}select(){addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\n\"blocklySelected\");fireSelectedEvent$$module$build$src$core$common(this)}unselect(){removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklySelected\");fireSelectedEvent$$module$build$src$core$common(null)}toCopyData(){return{paster:WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE,commentState:save$$module$build$src$core$serialization$workspace_comments(this,{addCoordinates:!0,saveIds:!1})}}showContextMenu(a){const b=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({comment:this,\nfocusedNode:this},a);let c;c=a instanceof PointerEvent?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this.workspace,this.getRelativeToSurfaceXY()).translate(10,10);show$$module$build$src$core$contextmenu(a,b,this.workspace.RTL,this.workspace,c)}snapToGrid(){if(!this.isDeadOrDying()){var a=this.workspace.getGrid();if(a!=null&&a.shouldSnap()){var b=this.getRelativeToSurfaceXY();a=a.alignXY(b);a!==b&&this.moveTo(a,\n[\"snap\"])}}}getEditorFocusableNode(){return this.view.getEditorFocusableNode()}getFocusableElement(){return this.getSvgRoot()}getFocusableTree(){return this.workspace}onNodeFocus(){this.select();let a;(a=this.workspace.getLayerManager())==null||a.append(this,BLOCK$$module$build$src$core$layers);this.workspace.scrollBoundsIntoView(this.getBoundingRectangle())}onNodeBlur(){this.unselect()}canBeFocused(){return!0}},module$build$src$core$comments$rendered_workspace_comment={};\nmodule$build$src$core$comments$rendered_workspace_comment.RenderedWorkspaceComment=RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment;var module$build$src$core$xml={};module$build$src$core$xml.appendDomToWorkspace=appendDomToWorkspace$$module$build$src$core$xml;module$build$src$core$xml.blockToDom=blockToDom$$module$build$src$core$xml;module$build$src$core$xml.blockToDomWithXY=blockToDomWithXY$$module$build$src$core$xml;module$build$src$core$xml.clearWorkspaceAndLoadFromXml=clearWorkspaceAndLoadFromXml$$module$build$src$core$xml;module$build$src$core$xml.deleteNext=deleteNext$$module$build$src$core$xml;\nmodule$build$src$core$xml.domToBlock=$.domToBlock$$module$build$src$core$xml;module$build$src$core$xml.domToBlockInternal=domToBlockInternal$$module$build$src$core$xml;module$build$src$core$xml.domToPrettyText=domToPrettyText$$module$build$src$core$xml;module$build$src$core$xml.domToText=domToText$$module$build$src$core$xml;module$build$src$core$xml.domToVariables=domToVariables$$module$build$src$core$xml;module$build$src$core$xml.domToWorkspace=$.domToWorkspace$$module$build$src$core$xml;\nmodule$build$src$core$xml.loadWorkspaceComment=loadWorkspaceComment$$module$build$src$core$xml;module$build$src$core$xml.saveWorkspaceComment=saveWorkspaceComment$$module$build$src$core$xml;module$build$src$core$xml.variablesToDom=variablesToDom$$module$build$src$core$xml;module$build$src$core$xml.workspaceToDom=workspaceToDom$$module$build$src$core$xml;var BlockCreate$$module$build$src$core$events$events_block_create=class extends BlockBase$$module$build$src$core$events$events_block_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.BLOCK_CREATE;a&&(a.isShadow()&&(this.recordUndo=!1),this.xml=blockToDomWithXY$$module$build$src$core$xml(a),this.ids=getDescendantIds$$module$build$src$core$events$utils(a),this.json=save$$module$build$src$core$serialization$blocks(a,{addCoordinates:!0}))}toJson(){const a=super.toJson();\nif(!this.xml)throw Error(\"The block XML is undefined. Either pass a block to the constructor, or call fromJson\");if(!this.ids)throw Error(\"The block IDs are undefined. Either pass a block to the constructor, or call fromJson\");if(!this.json)throw Error(\"The block JSON is undefined. Either pass a block to the constructor, or call fromJson\");a.xml=domToText$$module$build$src$core$xml(this.xml);a.ids=this.ids;a.json=this.json;this.recordUndo||(a.recordUndo=this.recordUndo);return a}static fromJson(a,\nb,c){b=super.fromJson(a,b,c!=null?c:new BlockCreate$$module$build$src$core$events$events_block_create);b.xml=$.textToDom$$module$build$src$core$utils$xml(a.xml);b.ids=a.ids;b.json=a.json;a.recordUndo!==void 0&&(b.recordUndo=a.recordUndo);return b}run(a){const b=this.getEventWorkspace_();if(!this.json)throw Error(\"The block JSON is undefined. Either pass a block to the constructor, or call fromJson\");if(!this.ids)throw Error(\"The block IDs are undefined. Either pass a block to the constructor, or call fromJson\");\nif(!allShadowBlocks$$module$build$src$core$events$events_block_create(b,this.ids))if(a)append$$module$build$src$core$serialization$blocks(this.json,b);else for(a=0;aa.getBlockById(c)).filter(c=>c&&c.isShadow()).length===b.length};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.BLOCK_CREATE,BlockCreate$$module$build$src$core$events$events_block_create);var module$build$src$core$events$events_block_create={};module$build$src$core$events$events_block_create.BlockCreate=BlockCreate$$module$build$src$core$events$events_block_create;var ThemeChange$$module$build$src$core$events$events_theme_change=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b){super(b);this.type=EventType$$module$build$src$core$events$type.THEME_CHANGE;this.themeName=a}toJson(){const a=super.toJson();if(!this.themeName)throw Error(\"The theme name is undefined. Either pass a theme name to the constructor, or call fromJson\");a.themeName=this.themeName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new ThemeChange$$module$build$src$core$events$events_theme_change);\nb.themeName=a.themeName;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.THEME_CHANGE,ThemeChange$$module$build$src$core$events$events_theme_change);var module$build$src$core$events$events_theme_change={};module$build$src$core$events$events_theme_change.ThemeChange=ThemeChange$$module$build$src$core$events$events_theme_change;var ViewportChange$$module$build$src$core$events$events_viewport=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b,c,d,e){super(d);this.type=EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE;this.viewTop=a;this.viewLeft=b;this.scale=c;this.oldScale=e}toJson(){const a=super.toJson();if(this.viewTop===void 0)throw Error(\"The view top is undefined. Either pass a value to the constructor, or call fromJson\");if(this.viewLeft===void 0)throw Error(\"The view left is undefined. Either pass a value to the constructor, or call fromJson\");\nif(this.scale===void 0)throw Error(\"The scale is undefined. Either pass a value to the constructor, or call fromJson\");if(this.oldScale===void 0)throw Error(\"The old scale is undefined. Either pass a value to the constructor, or call fromJson\");a.viewTop=this.viewTop;a.viewLeft=this.viewLeft;a.scale=this.scale;a.oldScale=this.oldScale;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new ViewportChange$$module$build$src$core$events$events_viewport);b.viewTop=a.viewTop;b.viewLeft=a.viewLeft;\nb.scale=a.scale;b.oldScale=a.oldScale;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE,ViewportChange$$module$build$src$core$events$events_viewport);var module$build$src$core$events$events_viewport={};module$build$src$core$events$events_viewport.ViewportChange=ViewportChange$$module$build$src$core$events$events_viewport;var TEST_ONLY$$module$build$src$core$field_registry={fromJsonInternal:fromJsonInternal$$module$build$src$core$field_registry},module$build$src$core$field_registry={TEST_ONLY:TEST_ONLY$$module$build$src$core$field_registry};module$build$src$core$field_registry.fromJson=$.fromJson$$module$build$src$core$field_registry;module$build$src$core$field_registry.register=register$$module$build$src$core$field_registry;module$build$src$core$field_registry.unregister=unregister$$module$build$src$core$field_registry;var FieldDropdown$$module$build$src$core$field_dropdown=class extends Field$$module$build$src$core$field{constructor(a,b,c){super(Field$$module$build$src$core$field.SKIP_SETUP);this.svgArrow=this.arrow=this.imageElement=this.menu_=this.selectedMenuItem=null;this.SERIALIZABLE=!0;this.clickTarget_=this.suffixField=this.prefixField=this.generatedOptions=null;a!==Field$$module$build$src$core$field.SKIP_SETUP&&(this.setOptions(a),c&&this.configure_(c),b&&this.setValidator(b))}fromXml(a){this.isOptionListDynamic()&&\nthis.getOptions(!1);this.setValue(a.textContent)}loadState(a){this.loadLegacyState(FieldDropdown$$module$build$src$core$field_dropdown,a)||(this.isOptionListDynamic()&&this.getOptions(!1),this.setValue(a))}initView(){this.shouldAddBorderRect_()?this.createBorderRect_():this.clickTarget_=this.sourceBlock_.getSvgRoot();this.createTextElement_();this.imageElement=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{},this.fieldGroup_);this.getConstants().FIELD_DROPDOWN_SVG_ARROW?\nthis.createSVGArrow_():this.createTextArrow_();this.borderRect_&&addClass$$module$build$src$core$utils$dom(this.borderRect_,\"blocklyDropdownRect\");this.fieldGroup_&&(addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyField\"),addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyDropdownField\"))}shouldAddBorderRect_(){let a;return!this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW||this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW&&!((a=this.getSourceBlock())==\nnull?0:a.isShadow())}createTextArrow_(){this.arrow=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TSPAN,{},this.textElement_);let a;this.arrow.appendChild(document.createTextNode(((a=this.getSourceBlock())==null?0:a.RTL)?FieldDropdown$$module$build$src$core$field_dropdown.ARROW_CHAR+\" \":\" \"+FieldDropdown$$module$build$src$core$field_dropdown.ARROW_CHAR));this.getConstants().FIELD_TEXT_BASELINE_CENTER&&this.arrow.setAttribute(\"dominant-baseline\",\"central\");let b;\n((b=this.getSourceBlock())==null?0:b.RTL)?this.getTextElement().insertBefore(this.arrow,this.textContent_):this.getTextElement().appendChild(this.arrow)}createSVGArrow_(){this.svgArrow=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{height:this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE+\"px\",width:this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE+\"px\"},this.fieldGroup_);this.svgArrow.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.getConstants().FIELD_DROPDOWN_SVG_ARROW_DATAURI)}showEditor_(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.dropdownCreate();this.menu_&&(this.menu_.openingCoords=a&&typeof a.clientX===\"number\"?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):null,clearContent$$module$build$src$core$dropdowndiv(),a=this.menu_.render(getContentDiv$$module$build$src$core$dropdowndiv()),addClass$$module$build$src$core$utils$dom(a,\n\"blocklyDropdownMenu\"),this.getConstants().FIELD_DROPDOWN_COLOURED_DIV&&(b=b.getColour(),a=this.sourceBlock_.getColourTertiary(),setColour$$module$build$src$core$dropdowndiv(b,a)),showPositionedByField$$module$build$src$core$dropdowndiv(this,this.dropdownDispose_.bind(this)),getContentDiv$$module$build$src$core$dropdowndiv().style.height=`${this.menu_.getSize().height}px`,this.menu_.focus(),this.selectedMenuItem&&this.menu_.setHighlighted(this.selectedMenuItem),this.applyColour())}dropdownCreate(){const a=\nthis.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;const b=new Menu$$module$build$src$core$menu;b.setRole(Role$$module$build$src$core$utils$aria.LISTBOX);this.menu_=b;const c=this.getOptions(!1);this.selectedMenuItem=null;for(let e=0;eb[1]===a)?a:(this.sourceBlock_&&console.warn(\"Cannot set the dropdown's value to an unavailable option. Block type: \"+this.sourceBlock_.type+\", Field name: \"+this.name+\", Value: \"+a),null)}doValueUpdate_(a){super.doValueUpdate_(a);\na=this.getOptions(!0);for(let b=0,c;c=a[b];b++)c[1]===this.value_&&(this.selectedOption=c)}applyColour(){const a=this.sourceBlock_;this.borderRect_&&(this.borderRect_.setAttribute(\"stroke\",a.getColourTertiary()),this.menu_?this.borderRect_.setAttribute(\"fill\",a.getColourTertiary()):this.borderRect_.setAttribute(\"fill\",\"transparent\"));a&&this.arrow&&(a.isShadow()?this.arrow.style.fill=a.getColourSecondary():this.arrow.style.fill=a.getColour())}render_(){this.getTextContent().nodeValue=\"\";this.imageElement.style.display=\n\"none\";const a=this.selectedOption&&this.selectedOption[0];isImageProperties$$module$build$src$core$field_dropdown(a)?this.renderSelectedImage(a):this.renderSelectedText();this.positionBorderRect_()}renderSelectedImage(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.imageElement.style.display=\"\";this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",a.src);this.imageElement.setAttribute(\"height\",String(a.height));\nthis.imageElement.setAttribute(\"width\",String(a.width));const c=Number(a.height);a=Number(a.width);var d=!!this.borderRect_;const e=Math.max(d?this.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT:0,c+FieldDropdown$$module$build$src$core$field_dropdown.IMAGE_Y_PADDING);d=d?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0;let f;f=this.svgArrow?this.positionSVGArrow(a+d,e/2-this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE/2):getTextWidth$$module$build$src$core$utils$dom(this.arrow);this.size_=new Size$$module$build$src$core$utils$size(a+\nf+d*2,e);let g=0;b.RTL?this.imageElement.setAttribute(\"x\",`${d+f}`):(g=a+f,this.getTextElement().setAttribute(\"text-anchor\",\"end\"),this.imageElement.setAttribute(\"x\",`${d}`));this.imageElement.setAttribute(\"y\",String(e/2-c/2));this.positionTextElement_(g+d,a+f)}renderSelectedText(){this.getTextContent().nodeValue=this.getDisplayText_();var a=this.getTextElement();addClass$$module$build$src$core$utils$dom(a,\"blocklyDropdownText\");a.setAttribute(\"text-anchor\",\"start\");var b=!!this.borderRect_;a=Math.max(b?\nthis.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT:0,this.getConstants().FIELD_TEXT_HEIGHT);const c=getTextWidth$$module$build$src$core$utils$dom(this.getTextElement());b=b?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0;let d=0;this.svgArrow&&(d=this.positionSVGArrow(c+b,a/2-this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE/2));this.size_=new Size$$module$build$src$core$utils$size(c+d+b*2,a);this.positionTextElement_(b,c)}positionSVGArrow(a,b){if(!this.svgArrow)return 0;const c=this.getSourceBlock();\nif(!c)throw new UnattachedFieldError$$module$build$src$core$field;const d=this.borderRect_?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0,e=this.getConstants().FIELD_DROPDOWN_SVG_ARROW_PADDING,f=this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE;this.svgArrow.setAttribute(\"transform\",\"translate(\"+(c.RTL?d:a+e)+\",\"+b+\")\");return f+e}getText_(){if(!this.selectedOption)return null;const a=this.selectedOption[0];if(isImageProperties$$module$build$src$core$field_dropdown(a))return a.alt;if(typeof HTMLElement!==\n\"undefined\"&&a instanceof HTMLElement){let b,c;return(c=(b=a.title)!=null?b:a.ariaLabel)!=null?c:a.innerText}if(typeof a===\"string\")return a;console.warn(\"Can't get text for existing dropdown option. If you're using HTMLElement dropdown options in node, ensure you're using jsdom-global or similar.\");return null}static fromJson(a){if(!a.options)throw Error(\"options are required for the dropdown field. The options property must be assigned an array of [humanReadableValue, languageNeutralValue] tuples.\");\nreturn new this(a.options,void 0,a)}trimOptions(a){let b=!1;const c=a.map(g=>{if(g===FieldDropdown$$module$build$src$core$field_dropdown.SEPARATOR)return b=!0,g;const [h,k]=g;if(typeof h===\"string\")return[replaceMessageReferences$$module$build$src$core$utils$parsing(h),k];b=!0;return[isImageProperties$$module$build$src$core$field_dropdown(h)?Object.assign({},h,{alt:replaceMessageReferences$$module$build$src$core$utils$parsing(h.alt)}):h,k]});if(b||a.length<2)return{options:c};var d=c.map(([g])=>g),\ne=shortestStringLength$$module$build$src$core$utils$string(d);a=commonWordPrefix$$module$build$src$core$utils$string(d,e);const f=commonWordSuffix$$module$build$src$core$utils$string(d,e);if(!a&&!f||e<=a+f)return{options:c};e=a?d[0].substring(0,a-1):void 0;d=f?d[0].substr(1-f):void 0;return{options:this.applyTrim(c,a,f),prefix:e,suffix:d}}applyTrim(a,b,c){return a.map(([d,e])=>[d.substring(b,d.length-c),e])}validateOptions(a){if(!Array.isArray(a))throw TypeError(\"FieldDropdown options must be an array.\");\nif(!a.length)throw TypeError(\"FieldDropdown options must not be an empty array.\");let b=!1;for(let c=0;c0&&!!a.snap;return b}static parseThemeOptions(a){a=a.theme||Classic$$module$build$src$core$theme$classic;return typeof a===\"string\"?getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.THEME,a):a instanceof Theme$$module$build$src$core$theme?a:Theme$$module$build$src$core$theme.defineTheme(a.name||\"builtin\"+getNextUniqueId$$module$build$src$core$utils$idgenerator(),a)}},module$build$src$core$options=\n{};module$build$src$core$options.Options=Options$$module$build$src$core$options;var BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy=class{constructor(a,b){this.bubble=a;this.workspace=b;this.startLoc=null}isMovable(){return!0}startDrag(){this.startLoc=this.bubble.getRelativeToSurfaceXY();this.workspace.setResizesEnabled(!1);let a;(a=this.workspace.getLayerManager())==null||a.moveToDragLayer(this.bubble);this.bubble.setDragging&&this.bubble.setDragging(!0)}drag(a){this.bubble.moveDuringDrag(a)}endDrag(){this.workspace.setResizesEnabled(!0);let a;(a=this.workspace.getLayerManager())==\nnull||a.moveOffDragLayer(this.bubble,BUBBLE$$module$build$src$core$layers);this.bubble.setDragging(!1)}revertDrag(){this.startLoc&&this.bubble.moveDuringDrag(this.startLoc)}},module$build$src$core$dragging$bubble_drag_strategy={};module$build$src$core$dragging$bubble_drag_strategy.BubbleDragStrategy=BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy;var _a$$module$build$src$core$bubbles$bubble,Bubble$$module$build$src$core$bubbles$bubble=class{constructor(a,b,c,d,e){this.workspace=a;this.anchor=b;this.ownerRect=c;this.owner=e;this.size=new Size$$module$build$src$core$utils$size(0,0);this.colour=\"#ffffff\";this.disposed=!1;this.relativeLeft=this.relativeTop=0;this.dragStrategy=new BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy(this,this.workspace);this.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();this.svgRoot=\ncreateSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyBubble\"},a.getBubbleCanvas());a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyEmboss\"},this.svgRoot);this.tail=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyBubbleTail\"},a);this.background=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{\"class\":\"blocklyDraggable\",x:0,y:0,rx:_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH,ry:_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},a);this.contentContainer=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},this.svgRoot);this.focusableElement=d!=null?d:this.svgRoot;this.focusableElement.setAttribute(\"id\",this.id);conditionalBind$$module$build$src$core$browser_events(this.background,\"pointerdown\",this,this.onMouseDown);conditionalBind$$module$build$src$core$browser_events(this.focusableElement,\n\"keydown\",this,this.onKeyDown)}dispose(){removeNode$$module$build$src$core$utils$dom(this.svgRoot);this.disposed=!0}setAnchorLocation(a,b=!1){this.anchor=a;b?this.positionByRect(this.ownerRect):this.positionRelativeToAnchor();this.renderTail()}setPositionRelativeToAnchor(a,b){this.relativeLeft=a;this.relativeTop=b;this.positionRelativeToAnchor();this.renderTail()}getSize(){return this.size}setSize(a,b=!1){a.width=Math.max(a.width,_a$$module$build$src$core$bubbles$bubble.MIN_SIZE);a.height=Math.max(a.height,\n_a$$module$build$src$core$bubbles$bubble.MIN_SIZE);this.size=a;this.background.setAttribute(\"width\",`${a.width}`);this.background.setAttribute(\"height\",`${a.height}`);b?this.positionByRect(this.ownerRect):this.positionRelativeToAnchor();this.renderTail()}getColour(){return this.colour}setColour(a){this.colour=a;this.tail.setAttribute(\"fill\",a);this.background.setAttribute(\"fill\",a)}onMouseDown(a){let b;(b=this.workspace.getGesture(a))==null||b.handleBubbleStart(a,this);$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this)}onKeyDown(a){a.key===\n\"Escape\"&&this.owner&&(this.owner.setBubbleVisible(!1),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.owner))}positionRelativeToAnchor(){let a=this.anchor.x;a=this.workspace.RTL?a-(this.relativeLeft+this.size.width):a+this.relativeLeft;this.moveTo(a,this.relativeTop+this.anchor.y)}moveTo(a,b){this.svgRoot.setAttribute(\"transform\",`translate(${a}, ${b})`)}positionByRect(a=new Rect$$module$build$src$core$utils$rect(0,0,0,0)){var b=this.workspace.getMetricsManager().getViewMetrics(!0),\nc=this.getOptimalRelativeLeft(b),d=this.getOptimalRelativeTop(b);const e={x:c,y:-this.size.height-this.workspace.getRenderer().getConstants().MIN_BLOCK_HEIGHT},f={x:-this.size.width-30,y:d};d={x:a.getWidth(),y:d};var g={x:c,y:a.getHeight()};c=a.getWidth()a.width)return b;a=this.getWorkspaceViewRect(a);if(this.workspace.RTL){var c=this.anchor.x-b;c-this.size.widtha.right&&(b=-(a.right-this.anchor.x))}else{c=b+this.anchor.x;const d=c+this.size.width;ca.right&&(b=a.right-this.anchor.x-this.size.width)}return b}getOptimalRelativeTop(a){let b=-this.size.height/4;if(this.size.height>a.height)return b;const c=this.anchor.y+b,d=c+this.size.height;a=this.getWorkspaceViewRect(a);\nca.bottom&&(b=a.bottom-this.anchor.y-this.size.height);return b}getWorkspaceViewRect(a){const b=a.top;let c=a.top+a.height,d=a.left;a=a.left+a.width;c-=this.getScrollbarThickness();this.workspace.RTL?d-=this.getScrollbarThickness():a-=this.getScrollbarThickness();return new Rect$$module$build$src$core$utils$rect(b,c,d,a)}getScrollbarThickness(){return Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness/this.workspace.scale}renderTail(){const a=[];var b=this.size.width/\n2,c=this.size.height/2,d=-this.relativeLeft,e=-this.relativeTop;if(b===d&&c===e)a.push(\"M \"+b+\",\"+c);else{e-=c;d-=b;this.workspace.RTL&&(d*=-1);var f=Math.sqrt(e*e+d*d),g=Math.acos(d/f);e<0&&(g=2*Math.PI-g);var h=g+Math.PI/2;h>Math.PI*2&&(h-=Math.PI*2);var k=Math.sin(h);const m=Math.cos(h);let n=(this.size.width+this.size.height)/_a$$module$build$src$core$bubbles$bubble.TAIL_THICKNESS;n=Math.min(n,this.size.width,this.size.height)/4;h=1-_a$$module$build$src$core$bubbles$bubble.ANCHOR_RADIUS/f;d=b+\nh*d;e=c+h*e;h=b+n*m;const p=c+n*k;b-=n*m;c-=n*k;k=toRadians$$module$build$src$core$utils$math(this.workspace.RTL?-_a$$module$build$src$core$bubbles$bubble.TAIL_ANGLE:_a$$module$build$src$core$bubbles$bubble.TAIL_ANGLE);k=g+k;k>Math.PI*2&&(k-=Math.PI*2);g=Math.sin(k)*f/_a$$module$build$src$core$bubbles$bubble.TAIL_BEND;f=Math.cos(k)*f/_a$$module$build$src$core$bubbles$bubble.TAIL_BEND;a.push(\"M\"+h+\",\"+p);a.push(\"C\"+(h+f)+\",\"+(p+g)+\" \"+d+\",\"+e+\" \"+d+\",\"+e);a.push(\"C\"+d+\",\"+e+\" \"+(b+f)+\",\"+(c+g)+\" \"+\nb+\",\"+c)}a.push(\"z\");let l;(l=this.tail)==null||l.setAttribute(\"d\",a.join(\" \"))}bringToFront(){let a;const b=(a=this.svgRoot)==null?void 0:a.parentNode;return this.svgRoot&&(b==null?void 0:b.lastChild)!==this.svgRoot?(b==null||b.appendChild(this.svgRoot),!0):!1}getRelativeToSurfaceXY(){return new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.relativeLeft+this.anchor.x-this.size.width:this.anchor.x+this.relativeLeft,this.anchor.y+this.relativeTop)}getSvgRoot(){return this.svgRoot}moveDuringDrag(a){this.moveTo(a.x,\na.y);this.relativeLeft=this.workspace.RTL?this.anchor.x-a.x-this.size.width:a.x-this.anchor.x;this.relativeTop=a.y-this.anchor.y;this.renderTail()}setDragging(a){}setDeleteStyle(a){}isDeletable(){return!1}showContextMenu(a){}isMovable(){return!0}startDrag(){this.dragStrategy.startDrag()}drag(a){this.dragStrategy.drag(a)}endDrag(){this.dragStrategy.endDrag()}revertDrag(){this.dragStrategy.revertDrag()}select(){fireSelectedEvent$$module$build$src$core$common(this)}unselect(){fireSelectedEvent$$module$build$src$core$common(null)}getFocusableElement(){return this.focusableElement}getFocusableTree(){return this.workspace}onNodeFocus(){this.select();\nthis.bringToFront();var a=this.getRelativeToSurfaceXY();const b=this.getSize();a=new Rect$$module$build$src$core$utils$rect(a.y,a.y+b.height,a.x,a.x+b.width);this.workspace.scrollBoundsIntoView(a)}onNodeBlur(){this.unselect()}canBeFocused(){return!0}getOwner(){return this.owner}};_a$$module$build$src$core$bubbles$bubble=Bubble$$module$build$src$core$bubbles$bubble;Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH=6;\nBubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER=_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2;Bubble$$module$build$src$core$bubbles$bubble.MIN_SIZE=_a$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER;Bubble$$module$build$src$core$bubbles$bubble.TAIL_THICKNESS=1;Bubble$$module$build$src$core$bubbles$bubble.TAIL_ANGLE=20;Bubble$$module$build$src$core$bubbles$bubble.TAIL_BEND=4;Bubble$$module$build$src$core$bubbles$bubble.ANCHOR_RADIUS=8;\nvar module$build$src$core$bubbles$bubble={};module$build$src$core$bubbles$bubble.Bubble=Bubble$$module$build$src$core$bubbles$bubble;var MiniWorkspaceBubble$$module$build$src$core$bubbles$mini_workspace_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(b,c,d);this.workspace=b;this.anchor=c;this.ownerRect=d;this.autoLayout=!0;b=new Options$$module$build$src$core$options(a);this.validateWorkspaceOptions(b);this.svgDialog=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{x:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH,y:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},\nthis.contentContainer);a.parentWorkspace=this.workspace;this.miniWorkspace=this.newWorkspaceSvg(new Options$$module$build$src$core$options(a));this.miniWorkspace.internalIsMutator=!0;a=this.miniWorkspace.createDom(\"blocklyMutatorBackground\");this.svgDialog.appendChild(a);b.languageTree&&(a.insertBefore(this.miniWorkspace.addFlyout(Svg$$module$build$src$core$utils$svg.G),this.miniWorkspace.getCanvas()),a=this.miniWorkspace.getFlyout(),a==null||a.init(this.miniWorkspace),a==null||a.show(b.languageTree));\naddClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyMiniWorkspaceBubble\");this.miniWorkspace.addChangeListener(this.onWorkspaceChange.bind(this));let e,f;(e=this.miniWorkspace.getFlyout())==null||(f=e.getWorkspace())==null||f.addChangeListener(this.onWorkspaceChange.bind(this));this.updateBubbleSize()}dispose(){this.miniWorkspace.dispose();super.dispose()}getWorkspace(){return this.miniWorkspace}addWorkspaceChangeListener(a){this.miniWorkspace.addChangeListener(a)}validateWorkspaceOptions(a){if(a.hasCategories)throw Error(\"The miniworkspace bubble does not support toolboxes with categories\");\nif(a.hasTrashcan)throw Error(\"The miniworkspace bubble does not support trashcans\");if(a.zoomOptions.controls||a.zoomOptions.wheel||a.zoomOptions.pinch)throw Error(\"The miniworkspace bubble does not support zooming\");if(a.moveOptions.scrollbars||a.moveOptions.wheel||a.moveOptions.drag)throw Error(\"The miniworkspace bubble does not scrolling/moving the workspace\");if(a.horizontalLayout)throw Error(\"The miniworkspace bubble does not support horizontal layouts\");}onWorkspaceChange(){this.bumpBlocksIntoBounds();\nthis.updateBubbleSize()}bumpBlocksIntoBounds(){if(!this.miniWorkspace.isDragging()||this.miniWorkspace.keyboardMoveInProgress)for(const a of this.miniWorkspace.getTopBlocks(!1)){const b=a.getRelativeToSurfaceXY();b.y<20&&a.moveBy(0,20-b.y);if(a.RTL){let c=-20;const d=this.miniWorkspace.getFlyout();d&&(c-=d.getWidth());b.x>c&&a.moveBy(c-b.x,0)}else b.x<20&&a.moveBy(20-b.x,0)}}updateBubbleSize(){if(!this.miniWorkspace.isDragging()||this.miniWorkspace.keyboardMoveInProgress){this.autoLayout&&(this.autoLayout=\n!this.miniWorkspace.keyboardMoveInProgress);var a=this.getSize(),b=this.calculateWorkspaceSize();Math.abs(a.width-b.width)({kind:\"block\",type:c}))});return b}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$mutator_icon/\n2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,new Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){const a=this.sourceBlock.getSvgRoot().getBBox();return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}createRootBlock(){if(!this.sourceBlock.decompose)throw Error(\"Blocks with mutator icons must include a decompose method\");this.rootBlock=this.sourceBlock.decompose(this.miniWorkspaceBubble.getWorkspace());\nfor(var a of this.rootBlock.getDescendants(!1))a.queueRender();this.rootBlock.setMovable(!1);this.rootBlock.setDeletable(!1);let b,c,d,e;a=(e=(b=this.miniWorkspaceBubble)==null?void 0:(c=b.getWorkspace())==null?void 0:(d=c.getFlyout())==null?void 0:d.getWidth())!=null?e:0;this.rootBlock.moveBy(this.rootBlock.RTL?-(a+WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon):WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon,WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon)}addSaveConnectionsListener(){this.sourceBlock.saveConnections&&\nthis.rootBlock&&(this.saveConnectionsListener=()=>{this.sourceBlock.saveConnections&&this.rootBlock&&this.sourceBlock.saveConnections(this.rootBlock)},this.saveConnectionsListener(),this.sourceBlock.workspace.addChangeListener(this.saveConnectionsListener))}createMiniWorkspaceChangeListener(){return a=>{$.MutatorIcon$$module$build$src$core$icons$mutator_icon.isIgnorableMutatorEvent(a)||this.updateWorkspacePid||(this.updateWorkspacePid=setTimeout(()=>{this.updateWorkspacePid=null;this.recomposeSourceBlock()},\n0))}}static isIgnorableMutatorEvent(a){return a.isUiEvent||isBlockCreate$$module$build$src$core$events$predicates(a)||isBlockChange$$module$build$src$core$events$predicates(a)&&a.element===\"disabled\"}recomposeSourceBlock(){if(this.rootBlock){if(!this.sourceBlock.compose)throw Error(\"Blocks with mutator icons must include a compose method\");var a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);var b=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(this.sourceBlock);\nthis.sourceBlock.compose(this.rootBlock);var c=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(this.sourceBlock);b!==c&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\"mutation\",null,b,c));$.setGroup$$module$build$src$core$events$utils(a)}}getWorkspace(){let a;return(a=this.miniWorkspaceBubble)==null?void 0:a.getWorkspace()}};\n$.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.MUTATOR;$.MutatorIcon$$module$build$src$core$icons$mutator_icon.WEIGHT=1;var module$build$src$core$icons$mutator_icon={};module$build$src$core$icons$mutator_icon.MutatorIcon=$.MutatorIcon$$module$build$src$core$icons$mutator_icon;var allExtensions$$module$build$src$core$extensions=Object.create(null),TEST_ONLY$$module$build$src$core$extensions={allExtensions:allExtensions$$module$build$src$core$extensions};$.register$$module$build$src$core$extensions(\"parent_tooltip_when_inline\",extensionParentTooltip$$module$build$src$core$extensions);var module$build$src$core$extensions={TEST_ONLY:TEST_ONLY$$module$build$src$core$extensions};module$build$src$core$extensions.apply=apply$$module$build$src$core$extensions;\nmodule$build$src$core$extensions.buildTooltipForDropdown=$.buildTooltipForDropdown$$module$build$src$core$extensions;module$build$src$core$extensions.buildTooltipWithFieldText=$.buildTooltipWithFieldText$$module$build$src$core$extensions;module$build$src$core$extensions.isRegistered=isRegistered$$module$build$src$core$extensions;module$build$src$core$extensions.register=$.register$$module$build$src$core$extensions;module$build$src$core$extensions.registerMixin=$.registerMixin$$module$build$src$core$extensions;\nmodule$build$src$core$extensions.registerMutator=$.registerMutator$$module$build$src$core$extensions;module$build$src$core$extensions.runAfterPageLoad=runAfterPageLoad$$module$build$src$core$extensions;module$build$src$core$extensions.unregister=unregister$$module$build$src$core$extensions;var KeyCodes$$module$build$src$core$utils$keycodes;\n(function(a){a[a.WIN_KEY_FF_LINUX=0]=\"WIN_KEY_FF_LINUX\";a[a.MAC_ENTER=3]=\"MAC_ENTER\";a[a.BACKSPACE=8]=\"BACKSPACE\";a[a.TAB=9]=\"TAB\";a[a.NUM_CENTER=12]=\"NUM_CENTER\";a[a.ENTER=13]=\"ENTER\";a[a.SHIFT=16]=\"SHIFT\";a[a.CTRL=17]=\"CTRL\";a[a.ALT=18]=\"ALT\";a[a.PAUSE=19]=\"PAUSE\";a[a.CAPS_LOCK=20]=\"CAPS_LOCK\";a[a.ESC=27]=\"ESC\";a[a.SPACE=32]=\"SPACE\";a[a.PAGE_UP=33]=\"PAGE_UP\";a[a.PAGE_DOWN=34]=\"PAGE_DOWN\";a[a.END=35]=\"END\";a[a.HOME=36]=\"HOME\";a[a.LEFT=37]=\"LEFT\";a[a.UP=38]=\"UP\";a[a.RIGHT=39]=\"RIGHT\";a[a.DOWN=40]=\n\"DOWN\";a[a.PLUS_SIGN=43]=\"PLUS_SIGN\";a[a.PRINT_SCREEN=44]=\"PRINT_SCREEN\";a[a.INSERT=45]=\"INSERT\";a[a.DELETE=46]=\"DELETE\";a[a.ZERO=48]=\"ZERO\";a[a.ONE=49]=\"ONE\";a[a.TWO=50]=\"TWO\";a[a.THREE=51]=\"THREE\";a[a.FOUR=52]=\"FOUR\";a[a.FIVE=53]=\"FIVE\";a[a.SIX=54]=\"SIX\";a[a.SEVEN=55]=\"SEVEN\";a[a.EIGHT=56]=\"EIGHT\";a[a.NINE=57]=\"NINE\";a[a.FF_SEMICOLON=59]=\"FF_SEMICOLON\";a[a.FF_EQUALS=61]=\"FF_EQUALS\";a[a.FF_DASH=173]=\"FF_DASH\";a[a.FF_HASH=163]=\"FF_HASH\";a[a.QUESTION_MARK=63]=\"QUESTION_MARK\";a[a.AT_SIGN=64]=\"AT_SIGN\";\na[a.A=65]=\"A\";a[a.B=66]=\"B\";a[a.C=67]=\"C\";a[a.D=68]=\"D\";a[a.E=69]=\"E\";a[a.F=70]=\"F\";a[a.G=71]=\"G\";a[a.H=72]=\"H\";a[a.I=73]=\"I\";a[a.J=74]=\"J\";a[a.K=75]=\"K\";a[a.L=76]=\"L\";a[a.M=77]=\"M\";a[a.N=78]=\"N\";a[a.O=79]=\"O\";a[a.P=80]=\"P\";a[a.Q=81]=\"Q\";a[a.R=82]=\"R\";a[a.S=83]=\"S\";a[a.T=84]=\"T\";a[a.U=85]=\"U\";a[a.V=86]=\"V\";a[a.W=87]=\"W\";a[a.X=88]=\"X\";a[a.Y=89]=\"Y\";a[a.Z=90]=\"Z\";a[a.META=91]=\"META\";a[a.WIN_KEY_RIGHT=92]=\"WIN_KEY_RIGHT\";a[a.CONTEXT_MENU=93]=\"CONTEXT_MENU\";a[a.NUM_ZERO=96]=\"NUM_ZERO\";a[a.NUM_ONE=97]=\n\"NUM_ONE\";a[a.NUM_TWO=98]=\"NUM_TWO\";a[a.NUM_THREE=99]=\"NUM_THREE\";a[a.NUM_FOUR=100]=\"NUM_FOUR\";a[a.NUM_FIVE=101]=\"NUM_FIVE\";a[a.NUM_SIX=102]=\"NUM_SIX\";a[a.NUM_SEVEN=103]=\"NUM_SEVEN\";a[a.NUM_EIGHT=104]=\"NUM_EIGHT\";a[a.NUM_NINE=105]=\"NUM_NINE\";a[a.NUM_MULTIPLY=106]=\"NUM_MULTIPLY\";a[a.NUM_PLUS=107]=\"NUM_PLUS\";a[a.NUM_MINUS=109]=\"NUM_MINUS\";a[a.NUM_PERIOD=110]=\"NUM_PERIOD\";a[a.NUM_DIVISION=111]=\"NUM_DIVISION\";a[a.F1=112]=\"F1\";a[a.F2=113]=\"F2\";a[a.F3=114]=\"F3\";a[a.F4=115]=\"F4\";a[a.F5=116]=\"F5\";a[a.F6=\n117]=\"F6\";a[a.F7=118]=\"F7\";a[a.F8=119]=\"F8\";a[a.F9=120]=\"F9\";a[a.F10=121]=\"F10\";a[a.F11=122]=\"F11\";a[a.F12=123]=\"F12\";a[a.NUMLOCK=144]=\"NUMLOCK\";a[a.SCROLL_LOCK=145]=\"SCROLL_LOCK\";a[a.FIRST_MEDIA_KEY=166]=\"FIRST_MEDIA_KEY\";a[a.LAST_MEDIA_KEY=183]=\"LAST_MEDIA_KEY\";a[a.SEMICOLON=186]=\"SEMICOLON\";a[a.DASH=189]=\"DASH\";a[a.EQUALS=187]=\"EQUALS\";a[a.COMMA=188]=\"COMMA\";a[a.PERIOD=190]=\"PERIOD\";a[a.SLASH=191]=\"SLASH\";a[a.APOSTROPHE=192]=\"APOSTROPHE\";a[a.TILDE=192]=\"TILDE\";a[a.SINGLE_QUOTE=222]=\"SINGLE_QUOTE\";\na[a.OPEN_SQUARE_BRACKET=219]=\"OPEN_SQUARE_BRACKET\";a[a.BACKSLASH=220]=\"BACKSLASH\";a[a.CLOSE_SQUARE_BRACKET=221]=\"CLOSE_SQUARE_BRACKET\";a[a.WIN_KEY=224]=\"WIN_KEY\";a[a.MAC_FF_META=224]=\"MAC_FF_META\";a[a.MAC_WK_CMD_LEFT=91]=\"MAC_WK_CMD_LEFT\";a[a.MAC_WK_CMD_RIGHT=93]=\"MAC_WK_CMD_RIGHT\";a[a.WIN_IME=229]=\"WIN_IME\";a[a.VK_NONAME=252]=\"VK_NONAME\";a[a.PHANTOM=255]=\"PHANTOM\"})(KeyCodes$$module$build$src$core$utils$keycodes||(KeyCodes$$module$build$src$core$utils$keycodes={}));\nvar module$build$src$core$utils$keycodes={};module$build$src$core$utils$keycodes.KeyCodes=KeyCodes$$module$build$src$core$utils$keycodes;var module$build$src$core$utils$svg_paths={};module$build$src$core$utils$svg_paths.arc=arc$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.curve=curve$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.line=line$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.lineOnAxis=lineOnAxis$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.lineTo=lineTo$$module$build$src$core$utils$svg_paths;\nmodule$build$src$core$utils$svg_paths.moveBy=moveBy$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.moveTo=moveTo$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.point=point$$module$build$src$core$utils$svg_paths;var module$build$src$core$utils={};module$build$src$core$utils.Coordinate=Coordinate$$module$build$src$core$utils$coordinate;module$build$src$core$utils.KeyCodes=KeyCodes$$module$build$src$core$utils$keycodes;module$build$src$core$utils.Rect=Rect$$module$build$src$core$utils$rect;module$build$src$core$utils.Size=Size$$module$build$src$core$utils$size;module$build$src$core$utils.Svg=Svg$$module$build$src$core$utils$svg;module$build$src$core$utils.aria=module$build$src$core$utils$aria;\nmodule$build$src$core$utils.array=module$build$src$core$utils$array;module$build$src$core$utils.browserEvents=module$build$src$core$browser_events;module$build$src$core$utils.colour=module$build$src$core$utils$colour;module$build$src$core$utils.deprecation=module$build$src$core$utils$deprecation;module$build$src$core$utils.dom=module$build$src$core$utils$dom;module$build$src$core$utils.extensions=module$build$src$core$extensions;module$build$src$core$utils.idGenerator=module$build$src$core$utils$idgenerator;\nmodule$build$src$core$utils.math=module$build$src$core$utils$math;module$build$src$core$utils.object=module$build$src$core$utils$object;module$build$src$core$utils.parsing=module$build$src$core$utils$parsing;module$build$src$core$utils.string=module$build$src$core$utils$string;module$build$src$core$utils.style=module$build$src$core$utils$style;module$build$src$core$utils.svgMath=module$build$src$core$utils$svg_math;module$build$src$core$utils.svgPaths=module$build$src$core$utils$svg_paths;\nmodule$build$src$core$utils.toolbox=module$build$src$core$utils$toolbox;module$build$src$core$utils.userAgent=module$build$src$core$utils$useragent;module$build$src$core$utils.xml=module$build$src$core$utils$xml;var TextInputBubble$$module$build$src$core$bubbles$textinput_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(a,b,c,void 0,d);this.workspace=a;this.anchor=b;this.ownerRect=c;this.owner=d;this.resizePointerMoveListener=this.resizePointerUpListener=null;this.sizeChangeListeners=[];this.locationChangeListeners=[];this.DEFAULT_SIZE=new Size$$module$build$src$core$utils$size(160+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,80+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER);\nthis.MIN_SIZE=new Size$$module$build$src$core$utils$size(45+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,20+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER);this.editable=!0;addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyTextInputBubble\");this.editor=new CommentEditor$$module$build$src$core$comments$comment_editor(a,this.id,()=>{$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this)});this.contentContainer.appendChild(this.editor.getDom());\nthis.resizeGroup=this.createResizeHandle(this.svgRoot,a);this.setSize(this.DEFAULT_SIZE,!0)}getText(){return this.editor.getText()}setText(a){this.editor.setText(a)}setEditable(a){this.editable=a;this.editor.setEditable(a)}isEditable(){return this.editable}addTextChangeListener(a){this.editor.addTextChangeListener(a)}addSizeChangeListener(a){this.sizeChangeListeners.push(a)}addLocationChangeListener(a){this.locationChangeListeners.push(a)}createResizeHandle(a,b){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,\n{\"class\":\"blocklyResizeHandle\",href:`${b.options.pathToMedia}resize-handle.svg`},a);conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onResizePointerDown);return a}setSize(a,b=!1){a.width=Math.max(a.width,this.MIN_SIZE.width);a.height=Math.max(a.height,this.MIN_SIZE.height);const c=a.width-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,d=a.height-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER;this.editor.updateSize(new Size$$module$build$src$core$utils$size(c,\nd),new Size$$module$build$src$core$utils$size(0,0));this.editor.getDom().setAttribute(\"x\",`${Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER/2}`);this.editor.getDom().setAttribute(\"y\",`${Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER/2}`);this.resizeGroup.setAttribute(\"y\",`${d}`);this.workspace.RTL?this.resizeGroup.setAttribute(\"x\",`${-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER}`):this.resizeGroup.setAttribute(\"x\",`${c}`);super.setSize(a,b);this.onSizeChange()}getSize(){return super.getSize()}moveDuringDrag(a){super.moveDuringDrag(a);\nthis.onLocationChange()}setPositionRelativeToAnchor(a,b){super.setPositionRelativeToAnchor(a,b);this.onLocationChange()}positionByRect(a=new Rect$$module$build$src$core$utils$rect(0,0,0,0)){super.positionByRect(a);this.onLocationChange()}onResizePointerDown(a){this.bringToFront();isRightButton$$module$build$src$core$browser_events(a)||(start$$module$build$src$core$utils$drag(this.workspace,a,new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.getSize().width:this.getSize().width,\nthis.getSize().height)),this.resizePointerUpListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onResizePointerUp),this.resizePointerMoveListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",this,this.onResizePointerMove),this.workspace.hideChaff());a.stopPropagation()}onResizePointerUp(a){clearTouchIdentifier$$module$build$src$core$touch();this.resizePointerUpListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerUpListener),\nthis.resizePointerUpListener=null);this.resizePointerMoveListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerMoveListener),this.resizePointerMoveListener=null)}onResizePointerMove(a){a=move$$module$build$src$core$utils$drag(this.workspace,a);this.setSize(new Size$$module$build$src$core$utils$size(this.workspace.RTL?-a.x:a.x,a.y),!1);this.onSizeChange()}onSizeChange(){for(const a of this.sizeChangeListeners)a()}onLocationChange(){for(const a of this.locationChangeListeners)a()}getEditor(){return this.editor}};\nregister$$module$build$src$core$css(\"\\n.blocklyTextInputBubble .blocklyTextarea {\\n background-color: var(--commentFillColour);\\n border: 0;\\n box-sizing: border-box;\\n display: block;\\n outline: 0;\\n padding: 5px;\\n resize: none;\\n width: 100%;\\n height: 100%;\\n}\\n\");var module$build$src$core$bubbles$textinput_bubble={};module$build$src$core$bubbles$textinput_bubble.TextInputBubble=TextInputBubble$$module$build$src$core$bubbles$textinput_bubble;var ConnectionType$$module$build$src$core$connection_type;(function(a){a[a.INPUT_VALUE=1]=\"INPUT_VALUE\";a[a.OUTPUT_VALUE=2]=\"OUTPUT_VALUE\";a[a.NEXT_STATEMENT=3]=\"NEXT_STATEMENT\";a[a.PREVIOUS_STATEMENT=4]=\"PREVIOUS_STATEMENT\"})(ConnectionType$$module$build$src$core$connection_type||(ConnectionType$$module$build$src$core$connection_type={}));var module$build$src$core$connection_type={};module$build$src$core$connection_type.ConnectionType=ConnectionType$$module$build$src$core$connection_type;var ConnectionDB$$module$build$src$core$connection_db=class{constructor(a){this.connectionChecker=a;this.connections=[]}addConnection(a,b){b=this.calculateIndexForYPos(b);this.connections.splice(b,0,a)}findIndexOfConnection(a,b){if(!this.connections.length)return-1;const c=this.calculateIndexForYPos(b);if(c>=this.connections.length)return-1;b=a.y;let d=c;for(;d>=0&&this.connections[d].y===b;){if(this.connections[d]===a)return d;d--}for(d=c;da)c=d;else{b=d;break}}return b}removeConnection(a,b){a=this.findIndexOfConnection(a,b);if(a===-1)throw Error(\"Unable to find connection in connectionDB.\");this.connections.splice(a,1)}getNeighbours(a,b){function c(l){const m=e-d[l].x,n=f-d[l].y;Math.sqrt(m*m+n*n)<=b&&k.push(d[l]);\nreturn n=0&&c(a);)a--;do g++;while(g=0&&this.isInYRange(k,a.y,b);)h=this.connections[k],\nthis.connectionChecker.canConnect(a,h,!0,g)&&(c=h,g=h.distanceFrom(a)),k--;for(;fthis.fieldRow.length)throw Error(\"index \"+a+\" out of bounds.\");if(!(b||\nb===\"\"&&c))return a;typeof b===\"string\"&&(b=$.fromJson$$module$build$src$core$field_registry({type:\"field_label\",text:b}));b.setSourceBlock(this.sourceBlock);this.sourceBlock.initialized&&this.initField(b);b.name=c;b.setVisible(this.isVisible());b.prefixField&&(a=this.insertFieldAt(a,b.prefixField));this.fieldRow.splice(a,0,b);a++;b.suffixField&&(a=this.insertFieldAt(a,b.suffixField));this.sourceBlock.rendered&&this.sourceBlock.queueRender();return a}removeField(a,b){for(let c=0,d;d=this.fieldRow[c];c++)if(d.name===\na)return d.dispose(),this.fieldRow.splice(c,1),this.sourceBlock.rendered&&this.sourceBlock.queueRender(),!0;if(b)return!1;throw Error('Field \"'+a+'\" not found.');}isVisible(){return this.visible}setVisible(a){let b=[];if(this.visible===a)return b;this.visible=a;for(let c=0,d;d=this.fieldRow[c];c++)d.setVisible(a);if(this.connection&&this.connection instanceof RenderedConnection$$module$build$src$core$rendered_connection){a?b=this.connection.startTrackingAll():this.connection.stopTrackingAll();const c=\nthis.connection.targetBlock();c&&(c.getSvgRoot().style.display=a?\"block\":\"none\")}return b}markDirty(){for(let a=0,b;b=this.fieldRow[a];a++)b.markDirty()}setCheck(a){if(!this.connection)throw Error(\"This input does not have a connection.\");this.connection.setCheck(a);return this}setAlign(a){this.align=a;this.sourceBlock.rendered&&this.sourceBlock.queueRender();return this}setShadowDom(a){if(!this.connection)throw Error(\"This input does not have a connection.\");this.connection.setShadowDom(a);return this}getShadowDom(){if(!this.connection)throw Error(\"This input does not have a connection.\");\nreturn this.connection.getShadowDom()}init(){for(const a of this.fieldRow)a.init()}initModel(){for(const a of this.fieldRow)a.initModel()}initField(a){this.sourceBlock.rendered?a.init():a.initModel()}dispose(){for(let a=0,b;b=this.fieldRow[a];a++)b.dispose();this.connection&&this.connection.dispose()}makeConnection(a){return this.sourceBlock.makeConnection_(a)}},module$build$src$core$inputs$input={};module$build$src$core$inputs$input.Input=Input$$module$build$src$core$inputs$input;var DummyInput$$module$build$src$core$inputs$dummy_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.DUMMY}},module$build$src$core$inputs$dummy_input={};module$build$src$core$inputs$dummy_input.DummyInput=DummyInput$$module$build$src$core$inputs$dummy_input;var EndRowInput$$module$build$src$core$inputs$end_row_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.END_ROW}},module$build$src$core$inputs$end_row_input={};module$build$src$core$inputs$end_row_input.EndRowInput=EndRowInput$$module$build$src$core$inputs$end_row_input;var StatementInput$$module$build$src$core$inputs$statement_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){if(!a)throw Error(\"Statement inputs must have a non-empty name\");super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.STATEMENT;this.connection=this.makeConnection(ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT)}},module$build$src$core$inputs$statement_input={};\nmodule$build$src$core$inputs$statement_input.StatementInput=StatementInput$$module$build$src$core$inputs$statement_input;var module$build$src$core$inputs$value_input;$.ValueInput$$module$build$src$core$inputs$value_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){if(!a)throw Error(\"Value inputs must have a non-empty name\");super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.VALUE;this.connection=this.makeConnection(ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE)}};module$build$src$core$inputs$value_input={};\nmodule$build$src$core$inputs$value_input.ValueInput=$.ValueInput$$module$build$src$core$inputs$value_input;var module$build$src$core$interfaces$i_icon={};module$build$src$core$interfaces$i_icon.isIcon=isIcon$$module$build$src$core$interfaces$i_icon;var module$build$src$core$interfaces$i_comment_icon={};module$build$src$core$interfaces$i_comment_icon.isCommentIcon=isCommentIcon$$module$build$src$core$interfaces$i_comment_icon;var Block$$module$build$src$core$block=class{constructor(a,b,c){this.data=null;this.disposed=!1;this.hue=null;this.colour_=\"#000000\";this.styleName_=\"\";this.suppressPrefixSuffix=!1;this.previousConnection=this.nextConnection=this.outputConnection=null;this.inputList=[];this.icons=[];this.disabledReasons=new Set;this.tooltip=\"\";this.contextMenu=!0;this.parentBlock_=null;this.childBlocks_=[];this.editable=this.movable=this.deletable=!0;this.collapsed_=this.shadow=!1;this.outputShape_=null;this.rendered=\nthis.isInsertionMarker_=this.initialized=this.disposing=!1;this.onchangeWrapper=this.helpUrl=null;this.statementInputCount=0;this.workspace=a;this.id=c&&!a.getBlockById(c)?c:genUid$$module$build$src$core$utils$idgenerator();a.setBlockById(this.id,this);this.xy=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.isInFlyout=a.isFlyout;this.isInMutator=a.isMutator;this.RTL=a.RTL;if(b){this.type=b;c=Blocks$$module$build$src$core$blocks[b];if(!c||typeof c!==\"object\")throw TypeError(\"Invalid block definition for type: \"+\nb);Object.assign(this,c)}a.addTopBlock(this);a.addTypedBlock(this);new.target===Block$$module$build$src$core$block&&this.doInit_()}doInit_(){const a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);const b=getRecordUndo$$module$build$src$core$events$utils();try{typeof this.init===\"function\"&&($.setRecordUndo$$module$build$src$core$events$utils(!1),this.init(),$.setRecordUndo$$module$build$src$core$events$utils(b)),isEnabled$$module$build$src$core$events$utils()&&\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(this))}finally{$.setGroup$$module$build$src$core$events$utils(a),$.setRecordUndo$$module$build$src$core$events$utils(b)}this.inputsInlineDefault=this.inputsInline;typeof this.onchange===\"function\"&&this.setOnChange(this.onchange)}dispose(a=!1){this.disposing=!0;this.onchangeWrapper&&this.workspace.removeChangeListener(this.onchangeWrapper);this.unplug(a);\nisEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DELETE))(this));this.workspace.removeTopBlock(this);this.disposeInternal()}disposeInternal(){this.disposing=!0;this.onchangeWrapper&&this.workspace.removeChangeListener(this.onchangeWrapper);this.workspace.removeTypedBlock(this);this.workspace.removeBlockById(this.id);typeof this.destroy===\"function\"&&this.destroy();\nthis.childBlocks_.forEach(a=>a.disposeInternal());this.inputList.forEach(a=>a.dispose());this.inputList.length=0;this.getConnections_(!0).forEach(a=>a.dispose());this.disposed=!0}isDeadOrDying(){return this.disposing||this.disposed}initModel(){if(!this.initialized){for(const a of this.inputList)a.initModel();this.initialized=!0}}unplug(a){this.outputConnection&&this.unplugFromRow(a);this.previousConnection&&this.unplugFromStack(a)}unplugFromRow(a){let b=null,c;if((c=this.outputConnection)==null?0:\nc.isConnected())b=this.outputConnection.targetConnection,this.outputConnection.disconnect();b&&a&&(a=this.getOnlyValueConnection())&&a.isConnected()&&!a.targetBlock().isShadow()&&(a=a.targetConnection,a==null||a.disconnect(),this.workspace.connectionChecker.canConnect(a,b,!1)?b.connect(a):a==null||a.onFailedConnect(b))}getOnlyValueConnection(){let a=null;for(let b=0;b1)return!1;return!0}getMatchingConnection(a,\nb){const c=this.getConnections_(!0);a=a.getConnections_(!0);if(c.length!==a.length)throw Error(\"Connection lists did not match in length.\");for(let d=0;d{d=d+(c===\"(\"||e===\")\"?\"\":\" \")+e;c=e[e.length-1];return d},\"\");b=b.trim()||\"???\";a&&b.length>a&&(b=b.substring(0,a-3)+\"...\");return b}toTokens(a=\"?\"){const b=[];for(const d of this.inputList)if(d.name!=COLLAPSED_INPUT_NAME$$module$build$src$core$constants){for(const e of d.fieldRow)b.push(e.getText());if(d.connection){const e=d.connection.targetBlock();if(e){var c=d.connection;let f=c.getCheck();\n!f&&c.targetConnection&&(f=c.targetConnection.getCheck());(c=!!f&&(f.includes(\"Boolean\")||f.includes(\"Number\")))&&b.push(\"(\");b.push(...e.toTokens(a));c&&b.push(\")\")}else b.push(a)}}return b}appendValueInput(a){return this.appendInput(new $.ValueInput$$module$build$src$core$inputs$value_input(a,this))}appendStatementInput(a){this.statementInputCount++;return this.appendInput(new StatementInput$$module$build$src$core$inputs$statement_input(a,this))}appendDummyInput(a=\"\"){return this.appendInput(new DummyInput$$module$build$src$core$inputs$dummy_input(a,\nthis))}appendEndRowInput(a=\"\"){return this.appendInput(new EndRowInput$$module$build$src$core$inputs$end_row_input(a,this))}appendInput(a){this.inputList.push(a);return a}appendInputFromRegistry(a,b){return(a=getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.INPUT,a,!1))?this.appendInput(new a(b,this)):null}jsonInit(a){var b=a.type?'Block \"'+a.type+'\": ':\"\";if(a.output&&a.previousStatement)throw Error(b+\"Must not have both an output and a previousStatement.\");for(var c=\n0;a[\"args\"+c];){if(a[\"message\"+c]===void 0)throw Error(b+`args${c} must have a corresponding message (message${c}).`);c++}a.style&&a.style.hat&&(this.hat=a.style.hat,a.style=null);if(a.style&&a.colour)throw Error(b+\"Must not have both a colour and a style.\");a.style?this.jsonInitStyle(a,b):this.jsonInitColour(a,b);for(c=0;a[\"message\"+c]!==void 0;)this.interpolate(a[\"message\"+c],a[\"args\"+c]||[],a[\"implicitAlign\"+c]||a[\"lastDummyAlign\"+c],b),c++;a.inputsInline!==void 0&&($.disable$$module$build$src$core$events$utils(),\nthis.setInputsInline(a.inputsInline),$.enable$$module$build$src$core$events$utils());a.output!==void 0&&this.setOutput(!0,a.output);a.outputShape!==void 0&&this.setOutputShape(a.outputShape);a.previousStatement!==void 0&&this.setPreviousStatement(!0,a.previousStatement);a.nextStatement!==void 0&&this.setNextStatement(!0,a.nextStatement);a.tooltip!==void 0&&(c=replaceMessageReferences$$module$build$src$core$utils$parsing(a.tooltip),this.setTooltip(c));a.enableContextMenu!==void 0&&(this.contextMenu=\n!!a.enableContextMenu);a.suppressPrefixSuffix!==void 0&&(this.suppressPrefixSuffix=!!a.suppressPrefixSuffix);a.helpUrl!==void 0&&(c=replaceMessageReferences$$module$build$src$core$utils$parsing(a.helpUrl),this.setHelpUrl(c));typeof a.extensions===\"string\"&&(console.warn(b+\"JSON attribute 'extensions' should be an array of strings. Found raw string in JSON for '\"+a.type+\"' block.\"),a.extensions=[a.extensions]);a.mutator!==void 0&&apply$$module$build$src$core$extensions(a.mutator,this,!0);a=a.extensions;\nif(Array.isArray(a))for(b=0;bb)throw Error('Block \"'+this.type+'\": Message index %'+f+\" out of range.\");if(c[f])throw Error('Block \"'+this.type+'\": Message index %'+f+\" duplicated.\");c[f]=!0;d++}}if(d!==b)throw Error('Block \"'+this.type+'\": Message does not reference all '+b+\" arg(s).\");}interpolateArguments(a,b,c){const d=[];for(let f=0;f=this.inputList.length)throw RangeError(\"Input index \"+a+\" out of bounds.\");if(b>this.inputList.length)throw RangeError(\"Reference input \"+b+\" out of bounds.\");const c=this.inputList[a];this.inputList.splice(a,1);ab.getWeight()-c.getWeight());return a}removeIcon(a){if(!this.hasIcon(a))return!1;let b;(b=this.getIcon(a))==null||b.dispose();this.icons=this.icons.filter(c=>!c.getType().equals(a));return!0}hasIcon(a){return this.icons.some(b=>b.getType().equals(a))}getIcon(a){return a instanceof IconType$$module$build$src$core$icons$icon_types?\nthis.icons.find(b=>b.getType().equals(a)):this.icons.find(b=>b.getType().toString()===a)}getIcons(){return[...this.icons]}getRelativeToSurfaceXY(){return this.xy}moveBy(a,b,c){if(this.parentBlock_)throw Error(\"Block has parent\");const d=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this);c&&d.setReason(c);this.xy.translate(a,b);d.recordNew();fire$$module$build$src$core$events$utils(d)}makeConnection_(a){return new Connection$$module$build$src$core$connection(this,\na)}allInputsFilled(a){a===void 0&&(a=!0);if(!a&&this.isShadow())return!1;for(let c=0,d;d=this.inputList[c];c++)if(d.connection){var b=d.connection.targetBlock();if(!b||!b.allInputsFilled(a))return!1}return(b=this.getNextBlock())?b.allInputsFilled(a):!0}toDevString(){let a=this.type?'\"'+this.type+'\" block':\"Block\";this.id&&(a+=' (id=\"'+this.id+'\")');return a}};Block$$module$build$src$core$block.COLLAPSED_INPUT_NAME=COLLAPSED_INPUT_NAME$$module$build$src$core$constants;\nBlock$$module$build$src$core$block.COLLAPSED_FIELD_NAME=COLLAPSED_FIELD_NAME$$module$build$src$core$constants;var module$build$src$core$block={};module$build$src$core$block.Block=Block$$module$build$src$core$block;var disconnectPid$$module$build$src$core$block_animations=null,wobblingBlock$$module$build$src$core$block_animations=null,module$build$src$core$block_animations={};module$build$src$core$block_animations.connectionUiEffect=connectionUiEffect$$module$build$src$core$block_animations;module$build$src$core$block_animations.disconnectUiEffect=disconnectUiEffect$$module$build$src$core$block_animations;module$build$src$core$block_animations.disconnectUiStop=disconnectUiStop$$module$build$src$core$block_animations;\nmodule$build$src$core$block_animations.disposeUiEffect=disposeUiEffect$$module$build$src$core$block_animations;var BlockPaster$$module$build$src$core$clipboard$block_paster=class{paste(a,b,c){if(!b.isCapacityAvailable(a.typeCounts))return null;c&&(a.blockState.x=c.x,a.blockState.y=c.y);c=c||new Coordinate$$module$build$src$core$utils$coordinate(a.blockState.x||0,a.blockState.y||0);$.disable$$module$build$src$core$events$utils();let d;try{d=append$$module$build$src$core$serialization$blocks(a.blockState,b),moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster(d,c)}finally{$.enable$$module$build$src$core$events$utils()}if(!d)return d;\nisEnabled$$module$build$src$core$events$utils()&&!d.isShadow()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(d));const e=d;finishQueuedRenders$$module$build$src$core$render_management().then(()=>$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e));return d}};BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE=\"block\";\nregister$$module$build$src$core$clipboard$registry(BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE,new BlockPaster$$module$build$src$core$clipboard$block_paster);var module$build$src$core$clipboard$block_paster={};module$build$src$core$clipboard$block_paster.BlockPaster=BlockPaster$$module$build$src$core$clipboard$block_paster;module$build$src$core$clipboard$block_paster.moveBlockToNotConflict=moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster;var bumpIntoBounds$$module$build$src$core$bump_objects=bumpObjectIntoBounds$$module$build$src$core$bump_objects,module$build$src$core$bump_objects={};module$build$src$core$bump_objects.bumpIntoBounds=bumpObjectIntoBounds$$module$build$src$core$bump_objects;module$build$src$core$bump_objects.bumpIntoBoundsHandler=bumpIntoBoundsHandler$$module$build$src$core$bump_objects;module$build$src$core$bump_objects.bumpTopObjectsIntoBounds=bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects;var BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy=class{constructor(a){this.block=a;this.connectionPreviewer=this.connectionCandidate=this.startLoc=this.startChildConn=this.startParentConn=null;this.dragging=!1;this.dragOffset=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.originalEventGroup=\"\";this.workspace=a.workspace}isMovable(){if(this.block.isShadow()){let a,b;return(b=(a=this.block.getParent())==null?void 0:a.isMovable())!=null?b:!1}return this.block.isOwnMovable()&&\n!this.block.isDeadOrDying()&&!this.workspace.isReadOnly()&&!this.block.isInFlyout}startDrag(a){if(this.block.isShadow())this.startDraggingShadow(a);else{this.dragging=!0;this.fireDragStartEvent();this.startLoc=this.block.getRelativeToSurfaceXY();this.connectionCandidate=null;this.connectionPreviewer=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_PREVIEWER,this.workspace.options))(this.block);startTextWidthCache$$module$build$src$core$utils$dom();\nthis.workspace.setResizesEnabled(!1);disconnectUiStop$$module$build$src$core$block_animations();a=this.shouldHealStack(a);this.shouldDisconnect(a)&&this.disconnectBlock(a);this.block.setDragging(!0);var b;(b=this.workspace.getLayerManager())==null||b.moveToDragLayer(this.block)}}shouldHealStack(a){return!!a&&(a.altKey||a.ctrlKey||a.metaKey)}startDraggingShadow(a){const b=this.block.getParent();if(!b)throw Error(\"Tried to drag a shadow block with no parent. Shadow blocks should always have parents.\");\nthis.dragOffset=Coordinate$$module$build$src$core$utils$coordinate.difference(b.getRelativeToSurfaceXY(),this.block.getRelativeToSurfaceXY());b.startDrag(a)}shouldDisconnect(a){return!!(this.block.getParent()||a&&this.block.nextConnection&&this.block.nextConnection.targetBlock())}disconnectBlock(a){let b,c,d;this.startParentConn=(d=(b=this.block.outputConnection)==null?void 0:b.targetConnection)!=null?d:(c=this.block.previousConnection)==null?void 0:c.targetConnection;if(a){let e;this.startChildConn=\n(e=this.block.nextConnection)==null?void 0:e.targetConnection}this.block.unplug(a);disconnectUiEffect$$module$build$src$core$block_animations(this.block)}fireDragStartEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DRAG))(this.block,!0,this.block.getDescendants(!1));fire$$module$build$src$core$events$utils(a)}fireDragEndEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DRAG))(this.block,\n!1,this.block.getDescendants(!1));fire$$module$build$src$core$events$utils(a)}fireMoveEvent(){if(!this.block.isDeadOrDying()){var a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this.block);a.setReason([\"drag\"]);a.oldCoordinate=this.startLoc;a.recordNew();fire$$module$build$src$core$events$utils(a)}}drag(a){if(this.block.isShadow()){let b;(b=this.block.getParent())==null||b.drag(Coordinate$$module$build$src$core$utils$coordinate.sum(a,this.dragOffset))}else this.block.moveDuringDrag(a),\nthis.updateConnectionPreview(this.block,Coordinate$$module$build$src$core$utils$coordinate.difference(a,this.startLoc))}updateConnectionPreview(a,b){var c=this.connectionCandidate;const d=this.getConnectionCandidate(a,b);if(d){this.connectionCandidate=b=c&&this.currCandidateIsBetter(c,b,d)?c:d;var {local:e,neighbour:f}=b;b=e.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE||e.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT;var g;c=f.isConnected()&&\n!((g=f.targetBlock())==null?0:g.isInsertionMarker());if(b&&c&&!this.orphanCanConnectAtEnd(a,f.targetBlock(),e.type)){let k;(k=this.connectionPreviewer)==null||k.previewReplacement(e,f,f.targetBlock())}else{var h;(h=this.connectionPreviewer)==null||h.previewConnection(e,f)}}else{let k;(k=this.connectionPreviewer)==null||k.hidePreview();this.connectionCandidate=null}}orphanCanConnectAtEnd(a,b,c){return!!Connection$$module$build$src$core$connection.getConnectionForOrphanedConnection(a,c===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE?\nb.outputConnection:b.previousConnection)}currCandidateIsBetter(a,b,c){const {local:d,neighbour:e}=a;a=new Coordinate$$module$build$src$core$utils$coordinate(d.x,d.y);const f=new Coordinate$$module$build$src$core$utils$coordinate(e.x,e.y);b=Coordinate$$module$build$src$core$utils$coordinate.distance(Coordinate$$module$build$src$core$utils$coordinate.sum(a,b),f);return c.distance>b-$.config$$module$build$src$core$config.currentConnectionPreference}getConnectionCandidate(a,b){a=this.getLocalConnections(a);\nlet c=this.getSearchRadius(),d=null;for(const e of a){const {connection:f,radius:g}=e.closest(c,b);f&&(d={local:e,neighbour:f,distance:g},c=g)}return d}getSearchRadius(){return this.connectionCandidate?$.config$$module$build$src$core$config.connectingSnapRadius:$.config$$module$build$src$core$config.snapRadius}getLocalConnections(a){const b=a.getConnections_(!1),c=a.lastConnectionInStack(!0);c&&c!==a.nextConnection&&b.push(c);return b}endDrag(a){if(this.block.isShadow()){let c;(c=this.block.getParent())==\nnull||c.endDrag(a)}else{this.originalEventGroup=$.getGroup$$module$build$src$core$events$utils();this.fireDragEndEvent();this.fireMoveEvent();stopTextWidthCache$$module$build$src$core$utils$dom();disconnectUiStop$$module$build$src$core$block_animations();var b;(b=this.connectionPreviewer)==null||b.hidePreview();if(!this.block.isDeadOrDying()&&this.dragging){let c;(c=this.workspace.getLayerManager())==null||c.moveOffDragLayer(this.block,BLOCK$$module$build$src$core$layers);this.block.setDragging(!1)}this.connectionCandidate?\n(this.applyConnections(this.connectionCandidate),this.disposeStep()):this.block.queueRender().then(()=>this.disposeStep())}}disposeStep(){const a=$.getGroup$$module$build$src$core$events$utils();$.setGroup$$module$build$src$core$events$utils(this.originalEventGroup);this.block.snapToGrid();let b;(b=this.connectionPreviewer)==null||b.dispose();this.workspace.setResizesEnabled(!0);$.setGroup$$module$build$src$core$events$utils(a)}applyConnections(a){const {local:b,neighbour:c}=a;b.connect(c);const d=\nb.isSuperior()?c:b,e=this.block.getRootBlock();finishQueuedRenders$$module$build$src$core$render_management().then(()=>{connectionUiEffect$$module$build$src$core$block_animations(d.getSourceBlock());setTimeout(()=>{e.bringToFront()},0)})}revertDrag(){if(this.block.isShadow()){let c;(c=this.block.getParent())==null||c.revertDrag()}else{var a;(a=this.connectionPreviewer)==null||a.hidePreview();this.connectionCandidate=null;var b;(b=this.startChildConn)==null||b.connect(this.block.nextConnection);if(this.startParentConn)switch(this.startParentConn.type){case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:this.startParentConn.connect(this.block.outputConnection);\nbreak;case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:this.startParentConn.connect(this.block.previousConnection)}else{this.block.moveTo(this.startLoc,[\"drag\"]);let c;(c=this.workspace.getLayerManager())==null||c.moveOffDragLayer(this.block,BLOCK$$module$build$src$core$layers);bumpObjectIntoBounds$$module$build$src$core$bump_objects(this.workspace,this.workspace.getMetricsManager().getScrollMetrics(!0),this.block)}this.startParentConn=this.startChildConn=null;this.block.setDragging(!1);\nthis.dragging=!1}}},module$build$src$core$dragging$block_drag_strategy={};module$build$src$core$dragging$block_drag_strategy.BlockDragStrategy=BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy;var TextBubble$$module$build$src$core$bubbles$text_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(b,c,d);this.text=a;this.workspace=b;this.anchor=c;this.ownerRect=d;this.paragraph=this.stringToSvg(a,this.contentContainer);this.updateBubbleSize();addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyTextBubble\")}getText(){return this.text}setText(a){this.text=a;removeNode$$module$build$src$core$utils$dom(this.paragraph);this.paragraph=this.stringToSvg(a,\nthis.contentContainer);this.updateBubbleSize()}stringToSvg(a,b){b=this.createParagraph(b);a=this.createTextFragments(b,a);this.workspace.RTL&&this.rightAlignTextFragments(b.getBBox().width,a);return b}createParagraph(a){return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyText blocklyBubbleText blocklyNoPointerEvents\",transform:`translate(0,${Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH})`,style:`direction: ${this.workspace.RTL?\n\"rtl\":\"ltr\"}`},a)}createTextFragments(a,b){let c=1;return b.split(\"\\n\").map(d=>{const e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,{y:`${c}em`,x:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},a);d=document.createTextNode(d);e.appendChild(d);c+=1;return e})}rightAlignTextFragments(a,b){for(const c of b)c.setAttribute(\"text-anchor\",\"start\"),c.setAttribute(\"x\",`${a+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH}`)}updateBubbleSize(){const a=\nthis.paragraph.getBBox();this.setSize(new Size$$module$build$src$core$utils$size(a.width+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2,a.height+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2),!0)}},module$build$src$core$bubbles$text_bubble={};module$build$src$core$bubbles$text_bubble.TextBubble=TextBubble$$module$build$src$core$bubbles$text_bubble;var SIZE$$module$build$src$core$icons$warning_icon=17,WarningIcon$$module$build$src$core$icons$warning_icon=class extends Icon$$module$build$src$core$icons$icon{constructor(a){super(a);this.sourceBlock=a;this.textMap=new Map;this.textBubble=null}getType(){return WarningIcon$$module$build$src$core$icons$warning_icon.TYPE}initView(a){this.svgRoot||(super.initView(a),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconShape\",d:\"M2,15Q-1,15 0.5,12L6.5,1.7Q8,-1 9.5,1.7L15.5,12Q17,15 14,15z\"},\nthis.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconSymbol\",d:\"m7,4.8v3.16l0.27,2.27h1.46l0.27,-2.27v-3.16z\"},this.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyIconSymbol\",x:\"7\",y:\"11\",height:\"2\",width:\"2\"},this.svgRoot),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyWarningIcon\"))}dispose(){super.dispose();let a;(a=this.textBubble)==null||\na.dispose()}getWeight(){return WarningIcon$$module$build$src$core$icons$warning_icon.WEIGHT}getSize(){return new Size$$module$build$src$core$utils$size(SIZE$$module$build$src$core$icons$warning_icon,SIZE$$module$build$src$core$icons$warning_icon)}applyColour(){super.applyColour();let a;(a=this.textBubble)==null||a.setColour(this.sourceBlock.getColour())}updateCollapsed(){}isShownWhenCollapsed(){return!0}onLocationChange(a){super.onLocationChange(a);let b;(b=this.textBubble)==null||b.setAnchorLocation(this.getAnchorLocation())}addMessage(a,\nb){if(this.textMap.get(b)===a)return this;a?this.textMap.set(b,a):this.textMap.delete(b);let c;(c=this.textBubble)==null||c.setText(this.getText());return this}getText(){return[...this.textMap.values()].join(\"\\n\")}onClick(){super.onClick();this.setBubbleVisible(!this.bubbleIsVisible())}isClickableInFlyout(){return!1}bubbleIsVisible(){return!!this.textBubble}setBubbleVisible(a){const b=this;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){if(b.bubbleIsVisible()!==a){yield finishQueuedRenders$$module$build$src$core$render_management();\nif(a)b.textBubble=new TextBubble$$module$build$src$core$bubbles$text_bubble(b.getText(),b.sourceBlock.workspace,b.getAnchorLocation(),b.getBubbleOwnerRect()),b.applyColour();else{let c;(c=b.textBubble)==null||c.dispose();b.textBubble=null}fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BUBBLE_OPEN))(b.sourceBlock,a,\"warning\"))}})}getBubble(){return this.textBubble}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$warning_icon/\n2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,new Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){const a=this.sourceBlock.getSvgRoot().getBBox();return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}};WarningIcon$$module$build$src$core$icons$warning_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.WARNING;WarningIcon$$module$build$src$core$icons$warning_icon.WEIGHT=2;\nvar module$build$src$core$icons$warning_icon={};module$build$src$core$icons$warning_icon.WarningIcon=WarningIcon$$module$build$src$core$icons$warning_icon;var BlockSvg$$module$build$src$core$block_svg=class extends Block$$module$build$src$core$block{constructor(a,b,c){super(a,b,c);this.childlessWidth=this.width=this.height=0;this.warningTextDb=new Map;this.mutator=null;this.rendered=!0;this.visuallyDisabled=!1;this.translation=\"\";this.dragging=!1;this.relativeCoords=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.dragStrategy=new BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy(this);if(!a.rendered)throw TypeError(\"Cannot create a rendered block in a headless workspace\");\nthis.workspace=a;this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});b&&addClass$$module$build$src$core$utils$dom(this.svgGroup,b);this.style=a.getRenderer().getConstants().getBlockStyle(null);this.pathObject=a.getRenderer().makePathObject(this.svgGroup,this.style);a=this.pathObject.svgPath;a.tooltip=this;bindMouseEvents$$module$build$src$core$tooltip(a);this.svgGroup.setAttribute(\"data-id\",this.id);a.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();\nthis.doInit_()}initSvg(){if(!this.initialized){for(var a of this.inputList)a.init();for(const b of this.getIcons())b.initView(this.createIconPointerDownListener(b)),b.updateEditable();this.applyColour();this.pathObject.updateMovable(this.isMovable()||this.isInFlyout);(a=this.getSvgRoot())&&conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onMouseDown);a.parentNode||this.workspace.getCanvas().appendChild(a);this.initialized=!0}}getColourSecondary(){return this.style.colourSecondary}getColourTertiary(){return this.style.colourTertiary}select(){this.addSelect();\nfireSelectedEvent$$module$build$src$core$common(this)}unselect(){this.removeSelect();fireSelectedEvent$$module$build$src$core$common(null)}setParent(a){var b=this.parentBlock_;if(a!==b){startTextWidthCache$$module$build$src$core$utils$dom();super.setParent(a);stopTextWidthCache$$module$build$src$core$utils$dom();var c=this.getSvgRoot();if(!this.workspace.isClearing&&c){var d=this.getRelativeToSurfaceXY(),e=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode(),f,g=this.getSvgRoot().contains((f=\ne==null?void 0:e.getFocusableElement())!=null?f:null);a?(a.getSvgRoot().appendChild(c),g&&e&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e)):b&&(a=this.workspace.getCanvas().querySelector(\".blocklyDragging\"),b=a==null?void 0:a.parentElement,f=this.workspace.getCanvas(),b===f?f.insertBefore(c,a):(f.appendChild(c),g&&e&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e)),this.translate(d.x,d.y));this.applyColour()}}}getRelativeToSurfaceXY(){const a=this.workspace.getLayerManager();\nif(!a)throw Error(\"Cannot calculate position because the workspace has not been appended\");let b=0,c=0,d=this.getSvgRoot();if(d){do{const e=getRelativeXY$$module$build$src$core$utils$svg_math(d);b+=e.x;c+=e.y;d=d.parentNode}while(d&&!a.hasLayer(d))}return new Coordinate$$module$build$src$core$utils$coordinate(b,c)}moveBy(a,b,c){if(this.parentBlock_)throw Error(\"Block has parent\");const d=isEnabled$$module$build$src$core$events$utils();let e=null;d&&(e=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this),\nc&&e.setReason(c));a=new Coordinate$$module$build$src$core$utils$coordinate(a,b);b=this.getRelativeToSurfaceXY();a=Coordinate$$module$build$src$core$utils$coordinate.sum(b,a);this.translate(a.x,a.y);this.updateComponentLocations(a);d&&e&&(e.recordNew(),fire$$module$build$src$core$events$utils(e));this.workspace.resizeContents()}translate(a,b){this.translation=`translate(${a}, ${b})`;this.relativeCoords=new Coordinate$$module$build$src$core$utils$coordinate(a,b);this.getSvgRoot().setAttribute(\"transform\",\nthis.getTranslation())}getTranslation(){return this.translation}moveTo(a,b){const c=this.getRelativeToSurfaceXY();this.moveBy(a.x-c.x,a.y-c.y,b)}moveDuringDrag(a){this.translate(a.x,a.y);this.getSvgRoot().setAttribute(\"transform\",this.getTranslation());this.updateComponentLocations(a)}snapToGrid(){if(!this.isDeadOrDying()&&!this.getParent()&&!this.isInFlyout){var a=this.workspace.getGrid();if(a!=null&&a.shouldSnap()){var b=this.getRelativeToSurfaceXY();a=a.alignXY(b);a!==b&&this.moveTo(a,[\"snap\"])}}}getBoundingRectangle(){return this.getBoundingRectangleWithDimensions(this.getHeightWidth())}getBoundingRectangleWithoutChildren(){return this.getBoundingRectangleWithDimensions({height:this.height,\nwidth:this.childlessWidth})}getBoundingRectangleWithDimensions(a){const b=this.getRelativeToSurfaceXY();let c,d;this.RTL?(c=b.x-a.width,d=b.x):(c=b.x,d=b.x+a.width);return new Rect$$module$build$src$core$utils$rect(b.y,b.y+a.height,c,d)}markDirty(){this.pathObject.constants=this.workspace.getRenderer().getConstants();for(let a=0,b;b=this.inputList[a];a++)b.markDirty()}setCollapsed(a){this.collapsed_!==a&&(super.setCollapsed(a),this.updateCollapsed())}childHasWarning(){const a=this.getChildren(!1);\nfor(const b of a)if(b.getIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE)||b.childHasWarning())return!0;return!1}updateCollapsed(){var a=this.isCollapsed();const b=COLLAPSED_INPUT_NAME$$module$build$src$core$constants,c=COLLAPSED_FIELD_NAME$$module$build$src$core$constants;for(let e=0,f;f=this.inputList[e];e++)f.name!==b&&f.setVisible(!a);for(var d of this.getIcons())d.updateCollapsed();a?(addClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyCollapsed\"),this.childHasWarning()&&\nthis.setWarningText($.Msg$$module$build$src$core$msg.COLLAPSED_WARNINGS_WARNING,BlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID),a=this.toString(COLLAPSE_CHARS$$module$build$src$core$internal_constants),(d=this.getField(c))?d.setValue(a):(this.getInput(b)||this.appendDummyInput(b)).appendField(new FieldLabel$$module$build$src$core$field_label(a),c)):(this.updateDisabled(),this.removeInput(b),removeClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyCollapsed\"),this.setWarningText(null,\nBlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID))}onMouseDown(a){if(!this.workspace.isReadOnly()){var b=this.workspace.getGesture(a);b&&b.handleBlockStart(a,this)}}showHelp(){const a=typeof this.helpUrl===\"function\"?this.helpUrl():this.helpUrl;a&&window.open(a)}generateContextMenu(a){if(this.workspace.isReadOnly()||!this.contextMenu)return null;a=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({block:this,focusedNode:this},a);this.customContextMenu&&\nthis.customContextMenu(a);return a}calculateContextMenuLocation(a){if(a instanceof PointerEvent)return new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY);a=wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this.workspace,this.getRelativeToSurfaceXY());let b,c;const d=(b=this.inputList.filter(e=>e.isVisible()).flatMap(e=>e.fieldRow).find(e=>e.isVisible()))==null?void 0:(c=b.getSvgRoot())==null?void 0:c.getBoundingClientRect();return new Coordinate$$module$build$src$core$utils$coordinate(this.RTL?\na.x-5:a.x+5,(d&&d.height?d.y+d.height:a.y+this.height)+5)}showContextMenu(a){const b=this.generateContextMenu(a),c=this.calculateContextMenuLocation(a);b&&b.length&&(show$$module$build$src$core$contextmenu(a,b,this.RTL,this.workspace,c),setCurrentBlock$$module$build$src$core$contextmenu(this))}updateComponentLocations(a){this.dragging||this.updateConnectionLocations(a);this.updateIconLocations(a);this.updateFieldLocations(a);for(const b of this.getChildren(!1))b.updateComponentLocations(Coordinate$$module$build$src$core$utils$coordinate.sum(a,\nb.relativeCoords))}updateConnectionLocations(a){for(const b of this.getConnections_(!1))b.moveToOffset(a)}updateIconLocations(a){for(const b of this.getIcons())b.onLocationChange(a)}updateFieldLocations(a){for(const b of this.inputList)for(const c of b.fieldRow)c.onLocationChange(a)}addClass(a){addClass$$module$build$src$core$utils$dom(this.svgGroup,a)}removeClass(a){removeClass$$module$build$src$core$utils$dom(this.svgGroup,a)}setDragging(a){(this.dragging=a)?(this.translation=\"\",draggingConnections$$module$build$src$core$common.push(...this.getConnections_(!0)),\nthis.addClass(\"blocklyDragging\")):(draggingConnections$$module$build$src$core$common.length=0,this.removeClass(\"blocklyDragging\"));for(let b=0;bc.focusTree(this.workspace),0)}b&&(this.unplug(a),disposeUiEffect$$module$build$src$core$block_animations(this));super.dispose(!!a);\nremoveNode$$module$build$src$core$utils$dom(this.svgGroup)}disposeInternal(){this.disposing=!0;super.disposeInternal();$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===this&&this.workspace.cancelCurrentGesture();[...this.warningTextDb.values()].forEach(a=>clearTimeout(a));this.warningTextDb.clear();this.getIcons().forEach(a=>a.dispose())}checkAndDelete(){this.workspace.isFlyout||($.setGroup$$module$build$src$core$events$utils(!0),this.workspace.hideChaff(),this.outputConnection?\nthis.dispose(!1,!0):this.dispose(!0,!0),$.setGroup$$module$build$src$core$events$utils(!1))}toCopyData(a=!1){return this.isInsertionMarker_?null:{paster:BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE,blockState:save$$module$build$src$core$serialization$blocks(this,{addCoordinates:!0,addNextBlocks:a,saveIds:!1}),typeCounts:getBlockTypeCounts$$module$build$src$core$common(this,!0)}}applyColour(){var a,b;(b=(a=this.pathObject).applyColour)==null||b.call(a,this);a=this.getIcons();for(b=\n0;b{this.isDeadOrDying()||(this.warningTextDb.delete(b),this.setWarningText(a,b))},100));else if(this.isInFlyout&&(a=null),c=this.getIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE),a){let d=this.getSurroundParent(),e=null;for(;d;)d.isCollapsed()&&(e=d),d=d.getSurroundParent();e&&e.setWarningText($.Msg$$module$build$src$core$msg.COLLAPSED_WARNINGS_WARNING,BlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID);\nc?c.addMessage(a,b):this.addIcon((new WarningIcon$$module$build$src$core$icons$warning_icon(this)).addMessage(a,b))}else c&&(b?(c.addMessage(\"\",b),c.getText()||this.removeIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE)):this.removeIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE))}setMutator(a){this.removeIcon($.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE);a&&this.addIcon(a)}addIcon(a){super.addIcon(a);a instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&\n(this.mutator=a);a.initView(this.createIconPointerDownListener(a));a.applyColour();a.updateEditable();this.queueRender();return a}createIconPointerDownListener(a){return b=>{this.isDeadOrDying()||(b=this.workspace.getGesture(b))&&b.setStartIcon(a)}}removeIcon(a){const b=super.removeIcon(a);a.equals($.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE)&&(this.mutator=null);this.queueRender();return b}setDisabledReason(a,b){const c=this.isEnabled();super.setDisabledReason(a,b);this.isEnabled()===\nc||this.getInheritedDisabled()||this.updateDisabled()}setDeletable(a){super.setDeletable(a);a?removeClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyNotDeletable\"):addClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyNotDeletable\")}setHighlighted(a){this.pathObject.updateHighlighted(a)}addSelect(){this.pathObject.updateSelected(!0)}removeSelect(){this.pathObject.updateSelected(!1)}setDeleteStyle(a){this.pathObject.updateDraggingDelete(a)}getColour(){return this.style.colourPrimary}setColour(a){super.setColour(a);\na=this.workspace.getRenderer().getConstants().getBlockStyleForColour(this.colour_);let b,c;(c=(b=this.pathObject).setStyle)==null||c.call(b,a.style);this.style=a.style;this.styleName_=a.name;this.applyColour()}setStyle(a){const b=this.workspace.getRenderer().getConstants().getBlockStyle(a);this.styleName_&&removeClass$$module$build$src$core$utils$dom(this.svgGroup,this.styleName_);if(b){this.hat=b.hat;let c,d;(d=(c=this.pathObject).setStyle)==null||d.call(c,b);this.colour_=b.colourPrimary;this.style=\nb;this.applyColour();addClass$$module$build$src$core$utils$dom(this.svgGroup,a);this.styleName_=a}else throw Error(\"Invalid style name: \"+a);}getStyle(){return this.style}bringToFront(a=!1){const b=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode();let c=this;if(!c.isDeadOrDying()){do{const d=c.getSvgRoot(),e=d.parentNode,f=e.childNodes;f[f.length-1]!==d&&e.appendChild(d);if(a)break;c=c.getParent()}while(c);b&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b)}}setPreviousStatement(a,\nb){super.setPreviousStatement(a,b);this.queueRender()}setNextStatement(a,b){super.setNextStatement(a,b);this.queueRender()}setOutput(a,b){super.setOutput(a,b);this.queueRender()}setInputsInline(a){super.setInputsInline(a);this.queueRender()}removeInput(a,b){a=super.removeInput(a,b);this.queueRender();return a}moveNumberedInputBefore(a,b){super.moveNumberedInputBefore(a,b);this.queueRender()}appendInput(a){super.appendInput(a);this.queueRender();return a}setConnectionTracking(a){this.previousConnection&&\nthis.previousConnection.setTracking(a);this.outputConnection&&this.outputConnection.setTracking(a);if(this.nextConnection){this.nextConnection.setTracking(a);var b=this.nextConnection.targetBlock();b&&b.setConnectionTracking(a)}if(!this.collapsed_)for(b=0;bd.getElement()===a);if(c===-1)return null;c++;c>=b.length&&(c=0);return b[c].getElement()}getPreviousSibling(a){const b=this.flyout.getContents();if(!b)return null;let c=b.findIndex(d=>d.getElement()===\na);if(c===-1)return null;c--;c<0&&(c=b.length-1);return b[c].getElement()}isNavigable(a){return this.policy.isNavigable(a)}isApplicable(a){return this.policy.isApplicable(a)}},module$build$src$core$keyboard_nav$flyout_navigation_policy={};module$build$src$core$keyboard_nav$flyout_navigation_policy.FlyoutNavigationPolicy=FlyoutNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_navigation_policy;var FlyoutSeparator$$module$build$src$core$flyout_separator=class{constructor(a,b){this.gap=a;this.axis=b;this.y=this.x=0}getBoundingRectangle(){switch(this.axis){case \"x\":return new Rect$$module$build$src$core$utils$rect(this.y,this.y,this.x,this.x+this.gap);case \"y\":return new Rect$$module$build$src$core$utils$rect(this.y,this.y+this.gap,this.x,this.x)}}moveBy(a,b,c){this.x+=a;this.y+=b}isNavigable(){return!1}getFocusableElement(){throw Error(\"Cannot be focused\");}getFocusableTree(){throw Error(\"Cannot be focused\");\n}onNodeFocus(){}onNodeBlur(){}canBeFocused(){return!1}},module$build$src$core$flyout_separator={};module$build$src$core$flyout_separator.FlyoutSeparator=FlyoutSeparator$$module$build$src$core$flyout_separator;var FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy=class{getFirstChild(a){return null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return!1}isApplicable(a){return a instanceof FlyoutSeparator$$module$build$src$core$flyout_separator}},module$build$src$core$keyboard_nav$flyout_separator_navigation_policy={};\nmodule$build$src$core$keyboard_nav$flyout_separator_navigation_policy.FlyoutSeparatorNavigationPolicy=FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy;var BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy=class{getFirstChild(a){return a.getEditor()}getParent(a){let b;return(b=a.getOwner())!=null?b:null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof TextInputBubble$$module$build$src$core$bubbles$textinput_bubble}},module$build$src$core$keyboard_nav$block_comment_navigation_policy={};\nmodule$build$src$core$keyboard_nav$block_comment_navigation_policy.BlockCommentNavigationPolicy=BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy;var BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy=class{getFirstChild(a){return getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy(a,!0)[0]}getParent(a){var b;if((b=a.previousConnection)==null?0:b.targetBlock()){if(b=a.getSurroundParent())return b}else{let c;if((c=a.outputConnection)==null?0:c.targetBlock())return a.outputConnection.targetBlock()}return a.workspace}getNextSibling(a){let b;if((b=a.nextConnection)==null?0:b.targetBlock()){let d;\nreturn(d=a.nextConnection)==null?void 0:d.targetBlock()}let c;return((c=a.outputConnection)==null?0:c.targetBlock())?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1):a.getSurroundParent()?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a.getTopStackBlock(),1):this.getParent(a)instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1):null}getPreviousSibling(a){let b;\nif((b=a.previousConnection)==null?0:b.targetBlock()){let d;return(d=a.previousConnection)==null?void 0:d.targetBlock()}let c;return((c=a.outputConnection)==null?0:c.targetBlock())?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1):this.getParent(a)instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1):null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof BlockSvg$$module$build$src$core$block_svg}},\nmodule$build$src$core$keyboard_nav$block_navigation_policy={};module$build$src$core$keyboard_nav$block_navigation_policy.BlockNavigationPolicy=BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy;module$build$src$core$keyboard_nav$block_navigation_policy.navigateBlock=navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy;module$build$src$core$keyboard_nav$block_navigation_policy.navigateStacks=navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy;var CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy=class{getFirstChild(a){return null}getParent(a){return a.getCommentView().workspace.getCommentById(a.getCommentView().commentId)}getNextSibling(a){const b=a.getCommentView().getCommentBarButtons();a=b.indexOf(a);return a>=0&&a+10?b[a-1]:null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof\nCommentBarButton$$module$build$src$core$comments$comment_bar_button}},module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy={};module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy.CommentBarButtonNavigationPolicy=CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy;var CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy=class{getFirstChild(a){return null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof CommentEditor$$module$build$src$core$comments$comment_editor}},module$build$src$core$keyboard_nav$comment_editor_navigation_policy={};\nmodule$build$src$core$keyboard_nav$comment_editor_navigation_policy.CommentEditorNavigationPolicy=CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy;var ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy=class{getFirstChild(a){return a.getParentInput()?a.targetConnection:null}getParent(a){return a.getSourceBlock()}getNextSibling(a){if(a.getParentInput())return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1);if(a.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT){const c=a.targetConnection;var b=a.getSourceBlock();if(!c&&b.getRootBlock().lastConnectionInStack(!1)===\na){a=b.workspace.getTopBlocks(!0);b=a.indexOf(b.getRootBlock())+1;b>=a.length&&(b=0);b=a[b];let d;return(d=this.getParentConnection(b))!=null?d:b}return c}return a.getSourceBlock()}getPreviousSibling(a){if(a.getParentInput())return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1);if(a.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||a.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE){const c=a.targetConnection&&\n!a.targetConnection.getParentInput()?a.targetConnection:null;var b=a.getSourceBlock();if(!c&&this.getParentConnection(b.getRootBlock())===a){a=b.workspace.getTopBlocks(!0);b=a.indexOf(b.getRootBlock())-1;b<0&&(b=a.length-1);b=a[b];let d;return(d=b.lastConnectionInStack(!1))!=null?d:b}return c}return a.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT?a.getSourceBlock():null}getParentConnection(a){let b;return!a.outputConnection||((b=a.previousConnection)==null?0:b.isConnected())?\na.previousConnection:a.outputConnection}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof RenderedConnection$$module$build$src$core$rendered_connection}},module$build$src$core$keyboard_nav$connection_navigation_policy={};module$build$src$core$keyboard_nav$connection_navigation_policy.ConnectionNavigationPolicy=ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy;var FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy=class{getFirstChild(a){return null}getParent(a){return a.getSourceBlock()}getNextSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){let b;return a.canBeFocused()&&a.isVisible()&&(a.isClickable()||a.isCurrentlyEditable())&&!(((b=a.getSourceBlock())==\nnull?0:b.isSimpleReporter())&&a.isFullBlockField())&&a.getParentInput().isVisible()}isApplicable(a){return a instanceof Field$$module$build$src$core$field}},module$build$src$core$keyboard_nav$field_navigation_policy={};module$build$src$core$keyboard_nav$field_navigation_policy.FieldNavigationPolicy=FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy;var module$build$src$core$icons$registry={};module$build$src$core$icons$registry.register=register$$module$build$src$core$icons$registry;module$build$src$core$icons$registry.unregister=unregister$$module$build$src$core$icons$registry;var SIZE$$module$build$src$core$icons$comment_icon=17,DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon=160,DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon=80,CommentIcon$$module$build$src$core$icons$comment_icon=class extends Icon$$module$build$src$core$icons$icon{constructor(a){super(a);this.sourceBlock=a;this.textInputBubble=null;this.text=\"\";this.bubbleSize=new Size$$module$build$src$core$utils$size(DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon,DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon);\nthis.bubbleVisiblity=!1}getType(){return CommentIcon$$module$build$src$core$icons$comment_icon.TYPE}initView(a){this.svgRoot||(super.initView(a),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CIRCLE,{\"class\":\"blocklyIconShape\",r:\"8\",cx:\"8\",cy:\"8\"},this.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconSymbol\",d:\"m6.8,10h2c0.003,-0.617 0.271,-0.962 0.633,-1.266 2.875,-2.4050.607,-5.534 -3.765,-3.874v1.7c3.12,-1.657 3.698,0.118 2.336,1.25-1.201,0.998 -1.201,1.528 -1.204,2.19z\"},\nthis.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyIconSymbol\",x:\"6.8\",y:\"10.78\",height:\"2\",width:\"2\"},this.svgRoot),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCommentIcon\"))}dispose(){super.dispose();let a;(a=this.textInputBubble)==null||a.dispose()}getWeight(){return CommentIcon$$module$build$src$core$icons$comment_icon.WEIGHT}getSize(){return new Size$$module$build$src$core$utils$size(SIZE$$module$build$src$core$icons$comment_icon,\nSIZE$$module$build$src$core$icons$comment_icon)}applyColour(){super.applyColour();const a=this.sourceBlock.getColour();let b;(b=this.textInputBubble)==null||b.setColour(a)}updateEditable(){const a=this,b=()=>super.updateEditable;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){b().call(a);a.bubbleIsVisible()&&(yield a.setBubbleVisible(!1),yield a.setBubbleVisible(!0))})}onLocationChange(a){const b=this.workspaceLocation;super.onLocationChange(a);this.bubbleLocation&&(a=Coordinate$$module$build$src$core$utils$coordinate.difference(this.workspaceLocation,\nb),this.bubbleLocation=Coordinate$$module$build$src$core$utils$coordinate.sum(this.bubbleLocation,a));a=this.getAnchorLocation();let c;(c=this.textInputBubble)==null||c.setAnchorLocation(a)}setText(a){const b=this.text;fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\"comment\",null,b,a));this.text=a;let c;(c=this.textInputBubble)==null||c.setText(this.text)}getText(){return this.text}setBubbleSize(a){this.bubbleSize=\na;let b;(b=this.textInputBubble)==null||b.setSize(this.bubbleSize,!0)}getBubbleSize(){return this.bubbleSize}setBubbleLocation(a){this.bubbleLocation=a;let b;(b=this.textInputBubble)==null||b.moveDuringDrag(a)}getBubbleLocation(){return this.bubbleLocation}saveState(){if(this.text){const a={text:this.text,pinned:this.bubbleIsVisible(),height:this.bubbleSize.height,width:this.bubbleSize.width},b=this.getBubbleLocation();b&&(a.x=this.sourceBlock.workspace.RTL?this.sourceBlock.workspace.getWidth()-(b.x+\nthis.bubbleSize.width):b.x,a.y=b.y);return a}return null}loadState(a){let b;this.text=(b=a.text)!=null?b:\"\";let c,d;this.bubbleSize=new Size$$module$build$src$core$utils$size((c=a.width)!=null?c:DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon,(d=a.height)!=null?d:DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon);let e;this.bubbleVisiblity=(e=a.pinned)!=null?e:!1;this.setBubbleVisible(this.bubbleVisiblity);let f=a.x;const g=a.y;finishQueuedRenders$$module$build$src$core$render_management().then(()=>\n{f&&g&&(f=this.sourceBlock.workspace.RTL?this.sourceBlock.workspace.getWidth()-(f+this.bubbleSize.width):f,this.setBubbleLocation(new Coordinate$$module$build$src$core$utils$coordinate(f,g)))})}onClick(){super.onClick();this.setBubbleVisible(!this.bubbleIsVisible())}isClickableInFlyout(){return!1}onTextChange(){if(this.textInputBubble){var a=this.textInputBubble.getText();this.text!==a&&(fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\n\"comment\",null,this.text,a)),this.text=a)}}onSizeChange(){this.textInputBubble&&(this.bubbleSize=this.textInputBubble.getSize())}onBubbleLocationChange(){this.textInputBubble&&(this.bubbleLocation=this.textInputBubble.getRelativeToSurfaceXY())}bubbleIsVisible(){return this.bubbleVisiblity}setBubbleVisible(a){const b=this;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){b.bubbleVisiblity!==a&&(b.bubbleVisiblity=a,yield finishQueuedRenders$$module$build$src$core$render_management(),\n!b.sourceBlock.rendered||b.sourceBlock.isInFlyout||b.sourceBlock.isInsertionMarker()||(a?(b.sourceBlock.isEditable()?b.showEditableBubble():b.showNonEditableBubble(),b.applyColour()):b.hideBubble(),fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BUBBLE_OPEN))(b.sourceBlock,a,\"comment\"))))})}getBubble(){return this.textInputBubble}showEditableBubble(){this.createBubble();let a;(a=this.textInputBubble)==null||a.addTextChangeListener(()=>\nthis.onTextChange());let b;(b=this.textInputBubble)==null||b.addSizeChangeListener(()=>this.onSizeChange())}showNonEditableBubble(){this.createBubble();let a;(a=this.textInputBubble)==null||a.setEditable(!1)}createBubble(){this.textInputBubble=new TextInputBubble$$module$build$src$core$bubbles$textinput_bubble(this.sourceBlock.workspace,this.getAnchorLocation(),this.getBubbleOwnerRect(),this);this.textInputBubble.setText(this.getText());this.textInputBubble.setSize(this.bubbleSize,!0);this.bubbleLocation&&\nthis.textInputBubble.moveDuringDrag(this.bubbleLocation);this.textInputBubble.addTextChangeListener(()=>this.onTextChange());this.textInputBubble.addSizeChangeListener(()=>this.onSizeChange());this.textInputBubble.addLocationChangeListener(()=>this.onBubbleLocationChange())}hideBubble(){let a;(a=this.textInputBubble)==null||a.dispose();this.textInputBubble=null}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$comment_icon/2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,\nnew Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){return this.sourceBlock.getBoundingRectangleWithoutChildren()}};CommentIcon$$module$build$src$core$icons$comment_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.COMMENT;CommentIcon$$module$build$src$core$icons$comment_icon.WEIGHT=3;register$$module$build$src$core$icons$registry(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE,CommentIcon$$module$build$src$core$icons$comment_icon);\nvar module$build$src$core$icons$comment_icon={};module$build$src$core$icons$comment_icon.CommentIcon=CommentIcon$$module$build$src$core$icons$comment_icon;var IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy=class{getFirstChild(a){if(a instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&a.bubbleIsVisible()&&$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===a){let b,c;return(c=(b=a.getBubble())==null?void 0:b.getWorkspace())!=null?c:null}if(a instanceof CommentIcon$$module$build$src$core$icons$comment_icon&&a.bubbleIsVisible()&&$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===\na){let b,c;return(c=(b=a.getBubble())==null?void 0:b.getEditor())!=null?c:null}return null}getParent(a){return a.getSourceBlock()}getNextSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof Icon$$module$build$src$core$icons$icon}},module$build$src$core$keyboard_nav$icon_navigation_policy=\n{};module$build$src$core$keyboard_nav$icon_navigation_policy.IconNavigationPolicy=IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy;var WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy=class{getFirstChild(a){return a.view.getCommentBarButtons()[0]}getParent(a){return a.workspace}getNextSibling(a){return navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment}},\nmodule$build$src$core$keyboard_nav$workspace_comment_navigation_policy={};module$build$src$core$keyboard_nav$workspace_comment_navigation_policy.WorkspaceCommentNavigationPolicy=WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy;var WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy=class{getFirstChild(a){a=a.getTopBlocks(!0);return a.length?a[0]:null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()&&!a.isMutator}isApplicable(a){return a instanceof WorkspaceSvg$$module$build$src$core$workspace_svg}},module$build$src$core$keyboard_nav$workspace_navigation_policy={};\nmodule$build$src$core$keyboard_nav$workspace_navigation_policy.WorkspaceNavigationPolicy=WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy;var Navigator$$module$build$src$core$navigator=class{constructor(){this.rules=[new BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy,new FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy,new ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy,new WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy,new IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy,\nnew WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy,new CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy,new BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy,new CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy]}addNavigationPolicy(a){this.rules.push(a)}get(a){return this.rules.find(b=>b.isApplicable(a))}getFirstChild(a){let b;\nconst c=(b=this.get(a))==null?void 0:b.getFirstChild(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getFirstChild(c)||this.getNextSibling(c)}getParent(a){let b;const c=(b=this.get(a))==null?void 0:b.getParent(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getParent(c)}getNextSibling(a){let b;const c=(b=this.get(a))==null?void 0:b.getNextSibling(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getNextSibling(c)}getPreviousSibling(a){let b;\nconst c=(b=this.get(a))==null?void 0:b.getPreviousSibling(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getPreviousSibling(c)}},module$build$src$core$navigator={};module$build$src$core$navigator.Navigator=Navigator$$module$build$src$core$navigator;var FlyoutNavigator$$module$build$src$core$flyout_navigator=class extends Navigator$$module$build$src$core$navigator{constructor(a){super();this.rules.push(new FlyoutButtonNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_button_navigation_policy,new FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy);this.rules=this.rules.map(b=>new FlyoutNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_navigation_policy(b,a))}},module$build$src$core$flyout_navigator=\n{};module$build$src$core$flyout_navigator.FlyoutNavigator=FlyoutNavigator$$module$build$src$core$flyout_navigator;var ScrollbarPair$$module$build$src$core$scrollbar_pair=class{constructor(a,b,c,d,e){this.workspace=a;this.oldHostMetrics=this.corner_=this.vScroll=this.hScroll=null;b=b===void 0?!0:b;c=c===void 0?!0:c;const f=b&&c;b&&(this.hScroll=new Scrollbar$$module$build$src$core$scrollbar(a,!0,f,d,e));c&&(this.vScroll=new Scrollbar$$module$build$src$core$scrollbar(a,!1,f,d,e));f&&(this.corner_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{height:Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness,\nwidth:Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness,\"class\":\"blocklyScrollbarBackground\"}),insertAfter$$module$build$src$core$utils$dom(this.corner_,a.getBubbleCanvas()))}dispose(){removeNode$$module$build$src$core$utils$dom(this.corner_);this.oldHostMetrics=this.corner_=null;this.hScroll&&(this.hScroll.dispose(),this.hScroll=null);this.vScroll&&(this.vScroll.dispose(),this.vScroll=null)}resize(){const a=this.workspace.getMetrics();if(a){var b=!1,c=!1;this.oldHostMetrics&&this.oldHostMetrics.viewWidth===\na.viewWidth&&this.oldHostMetrics.viewHeight===a.viewHeight&&this.oldHostMetrics.absoluteTop===a.absoluteTop&&this.oldHostMetrics.absoluteLeft===a.absoluteLeft?(this.oldHostMetrics&&this.oldHostMetrics.scrollWidth===a.scrollWidth&&this.oldHostMetrics.viewLeft===a.viewLeft&&this.oldHostMetrics.scrollLeft===a.scrollLeft||(b=!0),this.oldHostMetrics&&this.oldHostMetrics.scrollHeight===a.scrollHeight&&this.oldHostMetrics.viewTop===a.viewTop&&this.oldHostMetrics.scrollTop===a.scrollTop||(c=!0)):c=b=!0;if(b||\nc){try{$.disable$$module$build$src$core$events$utils(),this.hScroll&&b&&this.hScroll.resize(a),this.vScroll&&c&&this.vScroll.resize(a)}finally{$.enable$$module$build$src$core$events$utils()}this.workspace.maybeFireViewportChangeEvent()}if(this.hScroll&&this.vScroll){if(!this.oldHostMetrics||this.oldHostMetrics.viewWidth!==a.viewWidth||this.oldHostMetrics.absoluteLeft!==a.absoluteLeft){let d;(d=this.corner_)==null||d.setAttribute(\"x\",String(this.vScroll.position.x))}if(!this.oldHostMetrics||this.oldHostMetrics.viewHeight!==\na.viewHeight||this.oldHostMetrics.absoluteTop!==a.absoluteTop){let d;(d=this.corner_)==null||d.setAttribute(\"y\",String(this.hScroll.position.y))}}this.oldHostMetrics=a}}canScrollHorizontally(){return!!this.hScroll}canScrollVertically(){return!!this.vScroll}setOrigin(a,b){this.hScroll&&this.hScroll.setOrigin(a,b);this.vScroll&&this.vScroll.setOrigin(a,b)}set(a,b,c){this.hScroll&&this.hScroll.set(a,!1);this.vScroll&&this.vScroll.set(b,!1);if(c||c===void 0)a={},this.hScroll&&(a.x=this.hScroll.getRatio_()),\nthis.vScroll&&(a.y=this.vScroll.getRatio_()),this.workspace.setMetrics(a)}setX(a){this.hScroll&&this.hScroll.set(a,!0)}setY(a){this.vScroll&&this.vScroll.set(a,!0)}setContainerVisible(a){this.hScroll&&this.hScroll.setContainerVisible(a);this.vScroll&&this.vScroll.setContainerVisible(a)}isVisible(){let a=!1;this.hScroll&&(a=this.hScroll.isVisible());this.vScroll&&(a=a||this.vScroll.isVisible());return a}setVisible(a){this.hScroll&&this.hScroll.setVisibleInternal(a);this.vScroll&&this.vScroll.setVisibleInternal(a)}resizeContent(a){this.hScroll&&\nthis.hScroll.resizeContentHorizontal(a);this.vScroll&&this.vScroll.resizeContentVertical(a)}resizeView(a){this.hScroll&&this.hScroll.resizeViewHorizontal(a);this.vScroll&&this.vScroll.resizeViewVertical(a)}},module$build$src$core$scrollbar_pair={};module$build$src$core$scrollbar_pair.ScrollbarPair=ScrollbarPair$$module$build$src$core$scrollbar_pair;var SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater=\"sep\",SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater=class{load(a,b){a=new FlyoutSeparator$$module$build$src$core$flyout_separator(0,b.horizontalLayout?\"x\":\"y\");return new FlyoutItem$$module$build$src$core$flyout_item(a,SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater)}gapForItem(a,b){let c;return(c=parseInt(String(a.gap)))!=null?c:b}disposeItem(a){}getType(){return SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater}};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater,SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater);var module$build$src$core$separator_flyout_inflater={SEPARATOR_TYPE:SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater};module$build$src$core$separator_flyout_inflater.SeparatorFlyoutInflater=SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater;var Flyout$$module$build$src$core$flyout_base=class extends DeleteArea$$module$build$src$core$delete_area{constructor(a){super();this.horizontalLayout=!1;this.boundEvents=[];this.reflowWrapper=null;this.contents=[];this.autoClose=!0;this.visible=!1;this.containerVisible=!0;this.CORNER_RADIUS=8;this.SCROLLBAR_MARGIN=2.5;this.height_=this.width_=0;this.dragAngleRange_=70;this.svgGroup_=this.svgBackground_=null;this.inflaters=new Map;a.setMetrics=this.setMetrics_.bind(this);this.workspace_=new WorkspaceSvg$$module$build$src$core$workspace_svg(a);\nthis.workspace_.setMetricsManager(new FlyoutMetricsManager$$module$build$src$core$flyout_metrics_manager(this.workspace_,this));this.workspace_.internalIsFlyout=!0;this.workspace_.setVisible(this.visible);this.workspace_.setNavigator(new FlyoutNavigator$$module$build$src$core$flyout_navigator(this));this.id=genUid$$module$build$src$core$utils$idgenerator();this.RTL=!!a.RTL;this.toolboxPosition_=a.toolboxPosition;this.tabWidth_=this.workspace_.getRenderer().getConstants().TAB_WIDTH;this.MARGIN=this.CORNER_RADIUS;\nthis.GAP_X=this.MARGIN*3;this.GAP_Y=this.MARGIN*3}createDom(a){this.svgGroup_=createSvgElement$$module$build$src$core$utils$dom(a,{\"class\":\"blocklyFlyout\"});this.svgGroup_.style.display=\"none\";this.svgBackground_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyFlyoutBackground\"},this.svgGroup_);this.svgGroup_.appendChild(this.workspace_.createDom());this.workspace_.getThemeManager().subscribe(this.svgBackground_,\"flyoutBackgroundColour\",\n\"fill\");this.workspace_.getThemeManager().subscribe(this.svgBackground_,\"flyoutOpacity\",\"fill-opacity\");return this.svgGroup_}init(a){this.targetWorkspace=a;this.workspace_.targetWorkspace=a;this.workspace_.scrollbar=new ScrollbarPair$$module$build$src$core$scrollbar_pair(this.workspace_,this.horizontalLayout,!this.horizontalLayout,\"blocklyFlyoutScrollbar\",this.SCROLLBAR_MARGIN);this.hide();this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"wheel\",this,this.wheel_));\nthis.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.svgBackground_,\"pointerdown\",this,this.onMouseDown));this.workspace_.getGesture=this.targetWorkspace.getGesture.bind(this.targetWorkspace);this.workspace_.setVariableMap(this.targetWorkspace.getVariableMap());this.workspace_.createPotentialVariableMap();a.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.FLYOUT_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,\nComponentManager$$module$build$src$core$component_manager.Capability.DELETE_AREA,ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET]})}dispose(){this.hide();this.targetWorkspace.getComponentManager().removeComponent(this.id);for(const a of this.boundEvents)unbind$$module$build$src$core$browser_events(a);this.boundEvents.length=0;this.workspace_&&(this.workspace_.getThemeManager().unsubscribe(this.svgBackground_),this.workspace_.dispose());this.svgGroup_&&removeNode$$module$build$src$core$utils$dom(this.svgGroup_)}getWidth(){return this.width_}getHeight(){return this.height_}getFlyoutScale(){return this.targetWorkspace.scale}getWorkspace(){return this.workspace_}setAutoClose(a){this.autoClose=\na;this.targetWorkspace.recordDragTargets();this.targetWorkspace.resizeContents()}autoHide(a){!a&&this.targetWorkspace.getFlyout(!0)===this&&this.autoClose&&this.hide()}getTargetWorkspace(){return this.targetWorkspace}isVisible(){return this.visible}setVisible(a){const b=a!==this.isVisible();this.visible=a;b&&(this.autoClose||this.targetWorkspace.recordDragTargets(),this.updateDisplay())}setContainerVisible(a){const b=a!==this.containerVisible;this.containerVisible=a;b&&this.updateDisplay()}getContents(){return this.contents}setContents(a){this.contents=\na}updateDisplay(){let a;a=this.containerVisible?this.isVisible():!1;this.svgGroup_&&(this.svgGroup_.style.display=a?\"block\":\"none\");let b;(b=this.workspace_.scrollbar)==null||b.setContainerVisible(a)}positionAt_(a,b,c,d){let e;(e=this.svgGroup_)==null||e.setAttribute(\"width\",`${a}`);let f;(f=this.svgGroup_)==null||f.setAttribute(\"height\",`${b}`);this.workspace_.setCachedParentSvgSize(a,b);this.svgGroup_&&setCssTransform$$module$build$src$core$utils$dom(this.svgGroup_,\"translate(\"+c+\"px,\"+d+\"px)\");\nif(a=this.workspace_.scrollbar)a.setOrigin(c,d),a.resize(),a.hScroll&&a.hScroll.setPosition(a.hScroll.position.x,a.hScroll.position.y),a.vScroll&&a.vScroll.setPosition(a.vScroll.position.x,a.vScroll.position.y)}hide(){this.isVisible()&&(this.setVisible(!1),this.reflowWrapper&&(this.workspace_.removeChangeListener(this.reflowWrapper),this.reflowWrapper=null))}show(a){this.workspace_.setResizesEnabled(!1);this.hide();this.clearOldBlocks();typeof a===\"string\"&&(a=this.getDynamicCategoryContents(a));\nthis.setVisible(!0);a=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox(a);a=this.createFlyoutInfo(a);triggerQueuedRenders$$module$build$src$core$render_management(this.workspace_);this.setContents(a);this.layout_(a);this.horizontalLayout?this.height_=0:this.width_=0;this.reflow();this.workspace_.setResizesEnabled(!0);this.reflowWrapper=b=>{b.type!==EventType$$module$build$src$core$events$type.BLOCK_CHANGE&&b.type!==EventType$$module$build$src$core$events$type.BLOCK_FIELD_INTERMEDIATE_CHANGE||\nthis.reflow()};this.workspace_.addChangeListener(this.reflowWrapper)}createFlyoutInfo(a){const b=[],c=this.horizontalLayout?this.GAP_X:this.GAP_Y;for(const d of a)if(\"custom\"in d&&(a=this.getDynamicCategoryContents(d.custom),a=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox(a),b.push(...this.createFlyoutInfo(a))),a=d.kind.toLowerCase(),a=this.getInflaterForType(a))b.push(a.load(d,this)),(a=a.gapForItem(d,c))&&b.push(new FlyoutItem$$module$build$src$core$flyout_item(new FlyoutSeparator$$module$build$src$core$flyout_separator(a,\nthis.horizontalLayout?\"x\":\"y\"),SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater));return this.normalizeSeparators(b)}normalizeSeparators(a){for(let b=a.length-1;b>0;b--){const c=a[b].getType().toLowerCase(),d=a[b-1].getType().toLowerCase();c===SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater&&d===SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater&&a.splice(b-1,1)}return a}getDynamicCategoryContents(a){a=this.workspace_.targetWorkspace.getToolboxCategoryCallback(a);\nif(typeof a!==\"function\")throw TypeError(\"Couldn't find a callback function when opening a toolbox category.\");return a(this.workspace_.targetWorkspace)}clearOldBlocks(){this.getContents().forEach(b=>{let c;(c=this.getInflaterForType(b.getType()))==null||c.disposeItem(b)});let a;(a=this.workspace_.getPotentialVariableMap())==null||a.clear()}onMouseDown(a){const b=this.targetWorkspace.getGesture(a);b&&b.handleFlyoutStart(a,this)}isBlockCreatable(a){return a.isEnabled()&&!this.getTargetWorkspace().isReadOnly()}createBlock(a){let b=\nnull;$.disable$$module$build$src$core$events$utils();var c=this.targetWorkspace.getAllVariables();this.targetWorkspace.setResizesEnabled(!1);try{b=this.placeNewBlock(a)}finally{$.enable$$module$build$src$core$events$utils()}this.targetWorkspace.hideChaff();a=getAddedVariables$$module$build$src$core$variables(this.targetWorkspace,c);if(isEnabled$$module$build$src$core$events$utils()){$.setGroup$$module$build$src$core$events$utils(!0);for(c=0;c\n(this.flyout?$.config$$module$build$src$core$config.flyoutDragRadius:$.config$$module$build$src$core$config.dragRadius)}updateIsDraggingFromFlyout(){let a;if(!this.targetBlock||(a=this.flyout)==null||!a.isBlockCreatable(this.targetBlock))return!1;if(!this.flyout.targetWorkspace)throw Error(\"Cannot update dragging from the flyout because the ' +\\n 'flyout's target workspace is undefined\");return!this.flyout.isScrollable()||this.flyout.isDragTowardWorkspace(this.currentDragDeltaXY)?(this.startWorkspace_=\nthis.flyout.targetWorkspace,this.startWorkspace_.updateScreenCalculationsIfScrolled(),$.getGroup$$module$build$src$core$events$utils()||$.setGroup$$module$build$src$core$events$utils(!0),this.startBlock=null,this.targetBlock=this.flyout.createBlock(this.targetBlock),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.targetBlock),!0):!1}updateIsDraggingWorkspace(){if(!this.startWorkspace_)throw Error(\"Cannot update dragging the workspace because the start workspace is undefined\");\nif(this.flyout?this.flyout.isScrollable():this.startWorkspace_&&this.startWorkspace_.isDraggable())this.dragging=!0,this.workspaceDragger=new WorkspaceDragger$$module$build$src$core$workspace_dragger(this.startWorkspace_),this.workspaceDragger.startDrag()}updateIsDragging(a){if(!this.startWorkspace_)throw Error(\"Cannot update dragging because the start workspace is undefined\");if(this.calledUpdateIsDragging)throw Error(\"updateIsDragging_ should only be called once per gesture.\");this.calledUpdateIsDragging=\n!0;this.flyout&&this.updateIsDraggingFromFlyout();const b=getSelected$$module$build$src$core$common();b&&isDraggable$$module$build$src$core$interfaces$i_draggable(b)&&b.isMovable()?(this.dragging=!0,this.dragger=this.createDragger(b,this.startWorkspace_),this.dragger.onDragStart(a),this.dragger.onDrag(a,this.currentDragDeltaXY)):this.updateIsDraggingWorkspace()}createDragger(a,b){return new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.BLOCK_DRAGGER,this.creatorWorkspace.options,\n!0))(a,b)}doStart(a){if(!this.startWorkspace_)throw Error(\"Cannot start the touch gesture becauase the start workspace is undefined\");this.isPinchZoomEnabled=this.startWorkspace_.options.zoomOptions&&this.startWorkspace_.options.zoomOptions.pinch;isTargetInput$$module$build$src$core$browser_events(a)?this.cancel():(this.gestureHasStarted=!0,disconnectUiStop$$module$build$src$core$block_animations(),this.startWorkspace_.updateScreenCalculationsIfScrolled(),this.startWorkspace_.isMutator&&this.startWorkspace_.resize(),\nthis.currentDropdownOwner=getOwner$$module$build$src$core$dropdowndiv(),this.startWorkspace_.hideChaff(!!this.flyout),this.startWorkspace_.markFocused(),this.mostRecentEvent=a,block$$module$build$src$core$tooltip(),isRightButton$$module$build$src$core$browser_events(a)?this.handleRightClick(a):(a.type.toLowerCase()===\"pointerdown\"&&a.pointerType!==\"mouse\"&&longStart$$module$build$src$core$touch(a,this),this.mouseDownXY=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY),this.bindMouseEvents(a),\nthis.isEnding_||this.handleTouchStart(a)))}bindMouseEvents(a){this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointerdown\",null,this.handleStart.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",null,this.handleMove.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",null,this.handleUp.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\n\"pointercancel\",null,this.handleUp.bind(this),!0));a.preventDefault();a.stopPropagation()}handleStart(a){this.isDragging()||(this.handleTouchStart(a),this.isMultiTouch()&&longStop$$module$build$src$core$touch())}handleMove(a){if(this.isDragging()&&shouldHandleEvent$$module$build$src$core$touch(a)||!this.isMultiTouch()){this.updateFromEvent(a);if(this.workspaceDragger)this.workspaceDragger.drag(this.currentDragDeltaXY);else if(this.dragger)this.dragger.onDrag(this.mostRecentEvent,this.currentDragDeltaXY);\na.preventDefault();a.stopPropagation()}else this.isMultiTouch()&&(this.handleTouchMove(a),longStop$$module$build$src$core$touch())}handleUp(a){this.isDragging()||this.handleTouchEnd(a);if(!this.isMultiTouch()||this.isDragging()){if(!shouldHandleEvent$$module$build$src$core$touch(a))return;this.updateFromEvent(a);longStop$$module$build$src$core$touch();if(this.isEnding_){console.log(\"Trying to end a gesture recursively.\");return}this.isEnding_=!0;this.dragger?(keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1),\nthis.dragger.onDragEnd(a,this.currentDragDeltaXY)):this.workspaceDragger?(keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1),this.workspaceDragger.endDrag(this.currentDragDeltaXY)):this.isBubbleClick()||this.isCommentClick()||(this.isFieldClick()?this.doFieldClick():this.isIconClick()?this.doIconClick():this.isBlockClick()?this.doBlockClick():this.isWorkspaceClick()&&this.doWorkspaceClick(a))}a.preventDefault();a.stopPropagation();this.dispose()}handleTouchStart(a){var b=\ngetTouchIdentifierFromEvent$$module$build$src$core$touch(a);this.cachedPoints.set(b,this.getTouchPoint(a));var c=Array.from(this.cachedPoints.keys());c.length===2&&(b=this.cachedPoints.get(c[0]),c=this.cachedPoints.get(c[1]),this.startDistance=Coordinate$$module$build$src$core$utils$coordinate.distance(b,c),this.multiTouch=!0,a.preventDefault())}handleTouchMove(a){const b=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);this.cachedPoints.set(b,this.getTouchPoint(a));if(this.isPinchZoomEnabled&&\nthis.cachedPoints.size===2)this.handlePinch(a);else{this.updateFromEvent(a);if(this.workspaceDragger)this.workspaceDragger.drag(this.currentDragDeltaXY);else if(this.dragger)this.dragger.onDrag(this.mostRecentEvent,this.currentDragDeltaXY);a.preventDefault();a.stopPropagation()}}handlePinch(a){var b=Array.from(this.cachedPoints.keys()),c=this.cachedPoints.get(b[0]);b=this.cachedPoints.get(b[1]);c=Coordinate$$module$build$src$core$utils$coordinate.distance(c,b)/this.startDistance;if(this.previousScale>\n0&&this.previousScale0?b*ZOOM_IN_MULTIPLIER$$module$build$src$core$gesture:b*ZOOM_OUT_MULTIPLIER$$module$build$src$core$gesture;if(!this.startWorkspace_)throw Error(\"Cannot handle a pinch because the start workspace is undefined\");const d=this.startWorkspace_,e=mouseToSvg$$module$build$src$core$browser_events(a,d.getParentSvg(),d.getInverseScreenCTM());d.zoom(e.x,e.y,b)}this.previousScale=c;a.preventDefault()}handleTouchEnd(a){a=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);\nthis.cachedPoints.has(a)&&this.cachedPoints.delete(a);this.cachedPoints.size<2&&(this.cachedPoints.clear(),this.previousScale=0)}getTouchPoint(a){return this.startWorkspace_?new Coordinate$$module$build$src$core$utils$coordinate(a.pageX,a.pageY):null}isMultiTouch(){return this.multiTouch}cancel(){if(!this.isEnding_){longStop$$module$build$src$core$touch();if(this.dragger)this.dragger.onDragEnd(this.mostRecentEvent,this.currentDragDeltaXY);else this.workspaceDragger&&this.workspaceDragger.endDrag(this.currentDragDeltaXY);\nthis.dispose()}}handleRightClick(a){this.targetBlock?(this.bringBlockToFront(),this.targetBlock.workspace.hideChaff(!!this.flyout),this.targetBlock.showContextMenu(a)):this.startBubble?this.startBubble.showContextMenu(a):this.startComment?(this.startComment.workspace.hideChaff(),this.startComment.showContextMenu(a)):this.startWorkspace_&&!this.flyout&&(this.startWorkspace_.hideChaff(),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.startWorkspace_),this.startWorkspace_.showContextMenu(a));\na.preventDefault();a.stopPropagation();keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1);this.dispose()}handleWsStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleWsStart, but the gesture had already been started.\");this.setStartWorkspace(b);this.mostRecentEvent=a;this.startBlock||this.startBubble||this.startComment?this.startBlock&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.startBlock):$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b);\nthis.doStart(a)}fireWorkspaceClick(a){fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(null,a.id,\"workspace\"))}handleFlyoutStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleFlyoutStart, but the gesture had already been started.\");this.setStartFlyout(b);this.handleWsStart(a,b.getWorkspace())}handleBlockStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleBlockStart, but the gesture had already been started.\");\nthis.setStartBlock(b);this.mostRecentEvent=a}handleBubbleStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleBubbleStart, but the gesture had already been started.\");this.setStartBubble(b);this.mostRecentEvent=a}handleCommentStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleCommentStart, but the gesture had already been started.\");this.setStartComment(b);this.mostRecentEvent=a}doFieldClick(){if(!this.startField)throw Error(\"Cannot do a field click because the start field is undefined\");\nthis.bringBlockToFront();this.currentDropdownOwner!==this.startField&&this.startField.showEditor(this.mostRecentEvent)}doIconClick(){if(!this.startIcon)throw Error(\"Cannot do an icon click because the start icon is undefined\");this.bringBlockToFront();this.startIcon.onClick()}doBlockClick(){if(this.flyout&&this.flyout.autoClose){if(!this.targetBlock)throw Error(\"Cannot do a block click because the target block is undefined\");if(this.flyout.isBlockCreatable(this.targetBlock)){$.getGroup$$module$build$src$core$events$utils()||\n$.setGroup$$module$build$src$core$events$utils(!0);var a=this.flyout.createBlock(this.targetBlock);a.snapToGrid();a.bumpNeighbours();$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}}else{if(!this.startWorkspace_)throw Error(\"Cannot do a block click because the start workspace is undefined\");a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(this.startBlock,this.startWorkspace_.id,\"block\");fire$$module$build$src$core$events$utils(a)}this.bringBlockToFront();\n$.setGroup$$module$build$src$core$events$utils(!1)}doWorkspaceClick(a){this.fireWorkspaceClick(this.startWorkspace_||this.creatorWorkspace)}bringBlockToFront(){this.targetBlock&&!this.flyout&&($.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.targetBlock),this.targetBlock.bringToFront())}setStartField(a){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.setStartField, but the gesture had already been started.\");this.startField||(this.startField=a)}setStartIcon(a){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.setStartIcon, but the gesture had already been started.\");\nthis.startIcon||(this.startIcon=a)}setStartBubble(a){this.startBubble||(this.startBubble=a)}setStartComment(a){this.startComment||(this.startComment=a)}setStartBlock(a){this.startBlock||this.startBubble||(this.startBlock=a,a.isInFlyout&&a!==a.getRootBlock()?this.setTargetBlock(a.getRootBlock()):this.setTargetBlock(a))}setTargetBlock(a){a.isShadow()?this.setTargetBlock(a.getParent()):(this.targetBlock=a,$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a))}setStartWorkspace(a){this.startWorkspace_||\n(this.startWorkspace_=a)}setStartFlyout(a){this.flyout||(this.flyout=a)}isBubbleClick(){return!!this.startBubble&&!this.hasExceededDragRadius}isCommentClick(){return!!this.startComment&&!this.hasExceededDragRadius}isBlockClick(){return!!this.startBlock&&!this.hasExceededDragRadius&&!this.isFieldClick()&&!this.isIconClick()}isFieldClick(){return this.startField?this.startField.isClickable()&&!this.hasExceededDragRadius&&(!this.flyout||this.startField.isClickableInFlyout(this.flyout.autoClose)):!1}isIconClick(){if(!this.startIcon)return!1;\nconst a=!this.flyout||!this.startIcon.isClickableInFlyout||this.startIcon.isClickableInFlyout(this.flyout.autoClose);return!this.hasExceededDragRadius&&a}isWorkspaceClick(){return!this.startBlock&&!this.startBubble&&!this.startField&&!this.hasExceededDragRadius}getCurrentDragger(){let a,b;return(b=(a=this.workspaceDragger)!=null?a:this.dragger)!=null?b:null}isDragging(){return this.dragging}hasStarted(){return this.gestureHasStarted}static inProgress(){const a=getAllWorkspaces$$module$build$src$core$common();\nfor(let b=0,c;c=a[b];b++)if(c.currentGesture_)return!0;return!1}},module$build$src$core$gesture={};module$build$src$core$gesture.Gesture=Gesture$$module$build$src$core$gesture;var Grid$$module$build$src$core$grid=class{constructor(a,b){this.pattern=a;this.scale=1;let c;this.spacing=(c=b.spacing)!=null?c:0;let d;this.length=(d=b.length)!=null?d:1;this.line2=(this.line1=a.firstChild)&&this.line1.nextSibling;let e;this.snapToGrid=(e=b.snap)!=null?e:!1}setSpacing(a){this.spacing=a;this.update(this.scale)}getSpacing(){return this.spacing}setLength(a){this.length=a;this.update(this.scale)}getLength(){return this.length}setSnapToGrid(a){this.snapToGrid=a}shouldSnap(){return this.snapToGrid}getPatternId(){return this.pattern.id}update(a){this.scale=\na;var b=this.spacing*a;this.pattern.setAttribute(\"width\",`${b}`);this.pattern.setAttribute(\"height\",`${b}`);b=Math.floor(this.spacing/2)+.5;let c=b-this.length/2,d=b+this.length/2;b*=a;c*=a;d*=a;this.setLineAttributes(this.line1,a,c,d,b,b);this.setLineAttributes(this.line2,a,b,b,c,d)}setLineAttributes(a,b,c,d,e,f){a&&(a.setAttribute(\"stroke-width\",`${b}`),a.setAttribute(\"x1\",`${c}`),a.setAttribute(\"y1\",`${e}`),a.setAttribute(\"x2\",`${d}`),a.setAttribute(\"y2\",`${f}`))}moveTo(a,b){this.pattern.setAttribute(\"x\",\n`${a}`);this.pattern.setAttribute(\"y\",`${b}`)}alignXY(a){var b=this.getSpacing();const c=b/2,d=Math.round(Math.round((a.x-c)/b)*b+c);b=Math.round(Math.round((a.y-c)/b)*b+c);return d===a.x&&b===a.y?a:new Coordinate$$module$build$src$core$utils$coordinate(d,b)}static createDom(a,b,c,d){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATTERN,{id:\"blocklyGridPattern\"+a,patternUnits:\"userSpaceOnUse\"},c);let e,f;if(((e=b.length)!=null?e:1)>0&&((f=b.spacing)!=null?\nf:0)>0){createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{stroke:b.colour},a);let g;(g=b.length)!=null&&g&&createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{stroke:b.colour},a)}else createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{},a);d&&d.style.setProperty(\"--blocklyGridPattern\",`url(#${a.id})`);return a}},module$build$src$core$grid={};\nmodule$build$src$core$grid.Grid=Grid$$module$build$src$core$grid;var module$build$src$core$interfaces$i_autohideable={};module$build$src$core$interfaces$i_autohideable.isAutoHideable=isAutoHideable$$module$build$src$core$interfaces$i_autohideable;var LayerManager$$module$build$src$core$layer_manager=class{constructor(a){this.workspace=a;this.layers=new Map;if(a=a.getInjectionDiv())this.dragLayer=this.createDragLayer(a),this.animationLayer=this.createAnimationLayer(a);a=this.createLayer(BLOCK$$module$build$src$core$layers);addClass$$module$build$src$core$utils$dom(a,\"blocklyBlockCanvas\");a=this.createLayer(BUBBLE$$module$build$src$core$layers);addClass$$module$build$src$core$utils$dom(a,\"blocklyBubbleCanvas\")}createDragLayer(a){const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,\n{\"class\":\"blocklyBlockDragSurface\",xmlns:SVG_NS$$module$build$src$core$utils$dom,\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\"});a.append(b);return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},b)}createAnimationLayer(a){const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{\"class\":\"blocklyAnimationLayer\",xmlns:SVG_NS$$module$build$src$core$utils$dom,\n\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\"});a.append(b);return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},b)}appendToAnimationLayer(a){let b;const c=(b=this.dragLayer)==null?void 0:b.getAttribute(\"transform\");if(c){let e;(e=this.animationLayer)==null||e.setAttribute(\"transform\",c)}let d;(d=this.animationLayer)==null||d.appendChild(a.getSvgRoot())}translateLayers(a,b){a=\n`translate(${a.x}, ${a.y}) scale(${b})`;let c;(c=this.dragLayer)==null||c.setAttribute(\"transform\",a);for(const [,d]of this.layers)d.setAttribute(\"transform\",a)}moveToDragLayer(a){let b;(b=this.dragLayer)==null||b.appendChild(a.getSvgRoot());a.canBeFocused()&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}moveOffDragLayer(a,b){this.append(a,b);a.canBeFocused()&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}append(a,b){this.layers.has(b)||this.createLayer(b);\na=a.getSvgRoot();let c;if(((c=this.layers.get(b))==null?void 0:c.lastChild)!==a){let d;(d=this.layers.get(b))==null||d.appendChild(a)}}createLayer(a){const b=this.workspace.getSvgGroup(),c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});let d=!1;const e=[...this.layers].sort((f,g)=>f[0]-g[0]);for(const [f,g]of e)if(a{let c;return b instanceof BlockSvg$$module$build$src$core$block_svg&&!((c=b.outputConnection)==null?0:c.targetBlock())||b instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment},\n!0))&&this.setCurNode(a);return a}in(){var a=this.getCurNode();if(!a)return null;(a=this.getNextNode(a,()=>!0,!0))&&this.setCurNode(a);return a}prev(){var a=this.getCurNode();if(!a)return null;(a=this.getPreviousNode(a,b=>{let c;return b instanceof BlockSvg$$module$build$src$core$block_svg&&!((c=b.outputConnection)==null?0:c.targetBlock())||b instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment},!0))&&this.setCurNode(a);return a}out(){var a=this.getCurNode();\nif(!a)return null;(a=this.getPreviousNode(a,()=>!0,!0))&&this.setCurNode(a);return a}atEndOfLine(){var a=this.getCurNode();if(!a)return!1;const b=this.getNextNode(a,()=>!0,!0);a=this.getNextNode(a,c=>{let d;return c instanceof BlockSvg$$module$build$src$core$block_svg&&!((d=c.outputConnection)==null?0:d.targetBlock())},!0);return b===a}getNextNodeImpl(a,b,c=new Set){if(!a||c.has(a))return null;let d=this.workspace.getNavigator().getFirstChild(a)||this.workspace.getNavigator().getNextSibling(a);for(var e=\na;e&&!d;){e=this.workspace.getNavigator().getParent(e);if(!e)break;d=this.workspace.getNavigator().getNextSibling(e)}return b(d)?d:d?(c.add(a),this.getNextNodeImpl(d,b,c)):null}getNextNode(a,b,c){return!a||!c&&this.getLastNode()===a?null:this.getNextNodeImpl(a,b)}getPreviousNodeImpl(a,b,c=new Set){if(!a||c.has(a))return null;const d=this.getRightMostChild(this.workspace.getNavigator().getPreviousSibling(a),a)||this.workspace.getNavigator().getParent(a);return b(d)?d:d?(c.add(a),this.getPreviousNodeImpl(d,\nb,c)):null}getPreviousNode(a,b,c){return!a||!c&&this.getFirstNode()===a?null:this.getPreviousNodeImpl(a,b)}getRightMostChild(a,b){if(!a)return a;let c=this.workspace.getNavigator().getFirstChild(a);if(!c||c===b)return a;for(a=c;a&&a!==b;a=this.workspace.getNavigator().getNextSibling(c))c=a;return this.getRightMostChild(c,b)}preDelete(a){var b=this.getCurNode();b=b?[b]:[];var c;let d,e;const f=(e=(c=a.previousConnection)==null?void 0:c.targetConnection)!=null?e:(d=a.outputConnection)==null?void 0:\nd.targetConnection;f&&b.push(f);(c=a.getNextBlock())&&b.push(c);(a=a.getParent())&&b.push(a);b.push(this.workspace);this.potentialNodes=b}postDelete(){const a=this.potentialNodes;this.potentialNodes=null;if(!a)throw Error(\"must call preDelete first\");for(const b of a){let c;if((c=this.getSourceBlockFromNode(b))==null||!c.disposed){this.setCurNode(b);return}}throw Error(\"no valid nodes in this.potentialNodes\");}getCurNode(){return $.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()}setCurNode(a){$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}getFirstNode(){return this.workspace.getNavigator().getFirstChild(this.workspace)}getLastNode(){const a=\nthis.getFirstNode();return this.getPreviousNode(a,()=>!0,!0)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.CURSOR,DEFAULT$$module$build$src$core$registry,LineCursor$$module$build$src$core$keyboard_nav$line_cursor);var module$build$src$core$keyboard_nav$line_cursor={};module$build$src$core$keyboard_nav$line_cursor.LineCursor=LineCursor$$module$build$src$core$keyboard_nav$line_cursor;var MarkerManager$$module$build$src$core$marker_manager=class{constructor(a){this.workspace=a;this.markers=new Map;this.cursor=new LineCursor$$module$build$src$core$keyboard_nav$line_cursor(this.workspace)}registerMarker(a,b){this.markers.has(a)&&this.unregisterMarker(a);this.markers.set(a,b)}unregisterMarker(a){const b=this.markers.get(a);if(b)b.dispose(),this.markers.delete(a);else throw Error(\"Marker with ID \"+a+\" does not exist. Can only unregister markers that exist.\");}getCursor(){return this.cursor}getMarker(a){return this.markers.get(a)||\nnull}setCursor(a){this.cursor=a}dispose(){const a=Object.keys(this.markers);for(let b=0,c;c=a[b];b++)this.unregisterMarker(c);this.markers.clear();this.cursor.dispose()}};MarkerManager$$module$build$src$core$marker_manager.LOCAL_MARKER=\"local_marker_1\";var module$build$src$core$marker_manager={};module$build$src$core$marker_manager.MarkerManager=MarkerManager$$module$build$src$core$marker_manager;var module$build$src$core$icons={};module$build$src$core$icons.CommentIcon=CommentIcon$$module$build$src$core$icons$comment_icon;module$build$src$core$icons.Icon=Icon$$module$build$src$core$icons$icon;module$build$src$core$icons.IconType=IconType$$module$build$src$core$icons$icon_types;module$build$src$core$icons.MutatorIcon=$.MutatorIcon$$module$build$src$core$icons$mutator_icon;module$build$src$core$icons.WarningIcon=WarningIcon$$module$build$src$core$icons$warning_icon;\nmodule$build$src$core$icons.exceptions=module$build$src$core$icons$exceptions;module$build$src$core$icons.registry=module$build$src$core$icons$registry;var module$build$src$core$interfaces$i_procedure_block={};module$build$src$core$interfaces$i_procedure_block.isProcedureBlock=isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block;$.Names$$module$build$src$core$names=class{constructor(a,b){this.db=new Map;this.dbReverse=new Set;this.variableMap=null;this.variablePrefix=b||\"\";this.reservedWords=new Set(a?a.split(\",\"):[])}reset(){this.db.clear();this.dbReverse.clear();this.variableMap=null}setVariableMap(a){this.variableMap=a}getNameForUserVariable(a){return this.variableMap?(a=this.variableMap.getVariableById(a))?a.getName():null:(console.warn(\"Deprecated call to Names.prototype.getName without defining a variable map. To fix, add the following code in your generator's init() function:\\nBlockly.YourGeneratorName.nameDB_.setVariableMap(workspace.getVariableMap());\"),\nnull)}populateVariables(a){a=$.allUsedVarModels$$module$build$src$core$variables(a);for(let b=0;b=1}isHat(a){return(a.type&this.HAT)>=1}isIcon(a){return(a.type&\nthis.ICON)>=1}isSpacer(a){return(a.type&this.SPACER)>=1}isInRowSpacer(a){return(a.type&this.IN_ROW_SPACER)>=1}isSpacerRow(a){return(a.type&this.BETWEEN_ROW_SPACER)>=1}isInput(a){return(a.type&this.INPUT)>=1}isExternalInput(a){return(a.type&this.EXTERNAL_VALUE_INPUT)>=1}isInlineInput(a){return(a.type&this.INLINE_INPUT)>=1}isStatementInput(a){return(a.type&this.STATEMENT_INPUT)>=1}isPreviousConnection(a){return(a.type&this.PREVIOUS_CONNECTION)>=1}isNextConnection(a){return(a.type&this.NEXT_CONNECTION)>=\n1}isPreviousOrNextConnection(a){return this.isPreviousConnection(a)||this.isNextConnection(a)}isRoundCorner(a){return(a.type&this.LEFT_ROUND_CORNER)>=1||(a.type&this.RIGHT_ROUND_CORNER)>=1}isLeftRoundedCorner(a){return this.isRoundCorner(a)&&(a.type&this.LEFT_ROUND_CORNER)>=1}isRightRoundedCorner(a){return this.isRoundCorner(a)&&(a.type&this.RIGHT_ROUND_CORNER)>=1}isLeftSquareCorner(a){return(a.type&this.LEFT_SQUARE_CORNER)>=1}isRightSquareCorner(a){return(a.type&this.RIGHT_SQUARE_CORNER)>=1}isCorner(a){return(a.type&\nthis.CORNER)>=1}isJaggedEdge(a){return(a.type&this.JAGGED_EDGE)>=1}isRow(a){return(a.type&this.ROW)>=1}isBetweenRowSpacer(a){return(a.type&this.BETWEEN_ROW_SPACER)>=1}isTopRow(a){return(a.type&this.TOP_ROW)>=1}isBottomRow(a){return(a.type&this.BOTTOM_ROW)>=1}isTopOrBottomRow(a){return this.isTopRow(a)||this.isBottomRow(a)}isInputRow(a){return(a.type&this.INPUT_ROW)>=1}},Types$$module$build$src$core$renderers$measurables$types=new TypesContainer$$module$build$src$core$renderers$measurables$types,module$build$src$core$renderers$measurables$types=\n{Types:Types$$module$build$src$core$renderers$measurables$types};var Measurable$$module$build$src$core$renderers$measurables$base=class{constructor(a){this.centerline=this.xPos=this.height=this.width=0;this.constants_=a;this.type=Types$$module$build$src$core$renderers$measurables$types.NONE;this.notchOffset=this.constants_.NOTCH_OFFSET_LEFT}},module$build$src$core$renderers$measurables$base={};module$build$src$core$renderers$measurables$base.Measurable=Measurable$$module$build$src$core$renderers$measurables$base;var Row$$module$build$src$core$renderers$measurables$row=class{constructor(a){this.elements=[];this.xPos=this.yPos=this.widthWithConnectedBlocks=this.minWidth=this.minHeight=this.width=this.height=0;this.hasStatement=this.hasExternalInput=!1;this.statementEdge=0;this.hasJaggedEdge=this.hasDummyInput=this.hasInlineInput=!1;this.align=null;this.constants_=a;this.type=Types$$module$build$src$core$renderers$measurables$types.ROW;this.notchOffset=this.constants_.NOTCH_OFFSET_LEFT}getLastInput(){for(let a=\nthis.elements.length-1;a>=0;a--){const b=this.elements[a];if(Types$$module$build$src$core$renderers$measurables$types.isInput(b))return b}return null}measure(){throw Error(\"Unexpected attempt to measure a base Row.\");}startsWithElemSpacer(){return!0}endsWithElemSpacer(){return!0}getFirstSpacer(){for(let a=0;a=0;a--){const b=this.elements[a];if(Types$$module$build$src$core$renderers$measurables$types.isInRowSpacer(b))return b}return null}},module$build$src$core$renderers$measurables$row={};module$build$src$core$renderers$measurables$row.Row=Row$$module$build$src$core$renderers$measurables$row;var BottomRow$$module$build$src$core$renderers$measurables$bottom_row=class extends Row$$module$build$src$core$renderers$measurables$row{constructor(a){super(a);this.hasNextConnection=!1;this.connection=null;this.baseline=this.descenderHeight=0;this.type|=Types$$module$build$src$core$renderers$measurables$types.BOTTOM_ROW}hasLeftSquareCorner(a){return!!a.outputConnection||!!a.getNextBlock()}hasRightSquareCorner(a){return!0}measure(){let a=0,b=0,c=0;for(let d=0;drect,`,`${a} .blocklyEditableField>rect {`,`fill: ${this.FIELD_BORDER_RECT_COLOUR};`,\"fill-opacity: .6;\",\"stroke: none;\",\"}\",`${a} .blocklyNonEditableField>text,`,`${a} .blocklyEditableField>text {`,\n\"fill: #000;\",\"}\",`${a} .blocklyFlyoutLabelText {`,\"fill: #000;\",\"}\",`${a} .blocklyText.blocklyBubbleText {`,\"fill: #000;\",\"}\",`${a} .blocklyEditableField:not(.blocklyEditing):hover>rect {`,\"stroke: #fff;\",\"stroke-width: 2;\",\"}\",`${a} .blocklyHtmlInput {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,`font-weight: ${this.FIELD_TEXT_FONTWEIGHT};`,\"}\",`${a} .blocklySelected>.blocklyPath {`,\"stroke: #fc3;\",\"stroke-width: 3px;\",\"}\",`${a} .blocklyHighlightedConnectionPath {`,\"stroke: #fc3;\",\"}\",`${a} .blocklyReplaceable .blocklyPath {`,\n\"fill-opacity: .5;\",\"}\",`${a} .blocklyReplaceable .blocklyPathLight,`,`${a} .blocklyReplaceable .blocklyPathDark {`,\"display: none;\",\"}\",`${a} .blocklyInsertionMarker>.blocklyPath {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\"stroke: none;\",\"}\"]}},module$build$src$core$renderers$common$constants={};module$build$src$core$renderers$common$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$common$constants;\nmodule$build$src$core$renderers$common$constants.isDynamicShape=isDynamicShape$$module$build$src$core$renderers$common$constants;module$build$src$core$renderers$common$constants.isNotch=isNotch$$module$build$src$core$renderers$common$constants;module$build$src$core$renderers$common$constants.isPuzzleTab=isPuzzleTab$$module$build$src$core$renderers$common$constants;var Drawer$$module$build$src$core$renderers$common$drawer=class{constructor(a,b){this.inlinePath_=this.outlinePath_=\"\";this.block_=a;this.info_=b;this.topLeft_=a.getRelativeToSurfaceXY();this.constants_=b.getRenderer().getConstants()}draw(){this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();this.block_.pathObject.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);this.info_.RTL&&this.block_.pathObject.flipRTL();this.recordSizeOnBlock_()}recordSizeOnBlock_(){this.block_.height=\nthis.info_.height;this.block_.width=this.info_.widthWithChildren;this.block_.childlessWidth=this.info_.width}drawOutline_(){this.drawTop_();for(let a=1;a0&&this.addAlignmentPadding_(c,a);Types$$module$build$src$core$renderers$measurables$types.isTopOrBottomRow(c)&&(c.widthWithConnectedBlocks=c.width)}}getDesiredRowWidth_(a){return this.width-this.startX}addAlignmentPadding_(a,\nb){const c=a.getFirstSpacer(),d=a.getLastSpacer();if(a.hasExternalInput||a.hasStatement)a.widthWithConnectedBlocks+=b;if(a.align===$.Align$$module$build$src$core$inputs$align.LEFT&&d)d.width+=b;else if(a.align===$.Align$$module$build$src$core$inputs$align.CENTRE&&c&&d)c.width+=b/2,d.width+=b/2;else if(a.align===$.Align$$module$build$src$core$inputs$align.RIGHT&&c)c.width+=b;else if(d)d.width+=b;else return;a.width+=b}alignStatementRow_(a){const b=a.getLastInput();if(b){var c=a.width-b.width,d=this.statementEdge;\nc=d-c;c>0&&this.addAlignmentPadding_(a,c);c=a.width;d=this.getDesiredRowWidth_(a);b.width+=d-c;b.height=Math.max(b.height,a.height);a.width+=d-c;a.widthWithConnectedBlocks=Math.max(a.width,this.statementEdge+a.connectedBlockWidths)}}addRowSpacing_(){const a=this.rows;this.rows=[];for(let b=0;b=0;d--)c[d].element===a&&c.splice(d,1);c.length||this.componentDB.delete(b)}}dispose(){this.subscribedWorkspaces.length=0;this.componentDB.clear()}},module$build$src$core$theme_manager={};module$build$src$core$theme_manager.ThemeManager=ThemeManager$$module$build$src$core$theme_manager;var CATEGORY_NAME$$module$build$src$core$variables_dynamic=\"VARIABLE_DYNAMIC\",onCreateVariableButtonClick_String$$module$build$src$core$variables_dynamic=stringButtonClickHandler$$module$build$src$core$variables_dynamic,onCreateVariableButtonClick_Number$$module$build$src$core$variables_dynamic=numberButtonClickHandler$$module$build$src$core$variables_dynamic,onCreateVariableButtonClick_Colour$$module$build$src$core$variables_dynamic=colourButtonClickHandler$$module$build$src$core$variables_dynamic,\nmodule$build$src$core$variables_dynamic={CATEGORY_NAME:CATEGORY_NAME$$module$build$src$core$variables_dynamic};module$build$src$core$variables_dynamic.flyoutCategory=flyoutCategory$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.flyoutCategoryBlocks=flyoutCategoryBlocks$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.internalFlyoutCategory=internalFlyoutCategory$$module$build$src$core$variables_dynamic;\nmodule$build$src$core$variables_dynamic.onCreateVariableButtonClick_Colour=colourButtonClickHandler$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.onCreateVariableButtonClick_Number=numberButtonClickHandler$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.onCreateVariableButtonClick_String=stringButtonClickHandler$$module$build$src$core$variables_dynamic;var ConnectionChecker$$module$build$src$core$connection_checker=class{canConnect(a,b,c,d){return this.canConnectWithReason(a,b,c,d)===Connection$$module$build$src$core$connection.CAN_CONNECT}canConnectWithReason(a,b,c,d){const e=this.doSafetyChecks(a,b);return e!==Connection$$module$build$src$core$connection.CAN_CONNECT?e:this.doTypeChecks(a,b)?c&&!this.doDragChecks(a,b,d||0)?Connection$$module$build$src$core$connection.REASON_DRAG_CHECKS_FAILED:Connection$$module$build$src$core$connection.CAN_CONNECT:\nConnection$$module$build$src$core$connection.REASON_CHECKS_FAILED}getErrorMessage(a,b,c){switch(a){case Connection$$module$build$src$core$connection.REASON_SELF_CONNECTION:return\"Attempted to connect a block to itself.\";case Connection$$module$build$src$core$connection.REASON_DIFFERENT_WORKSPACES:return\"Blocks not on same workspace.\";case Connection$$module$build$src$core$connection.REASON_WRONG_TYPE:return\"Attempt to connect incompatible types.\";case Connection$$module$build$src$core$connection.REASON_TARGET_NULL:return\"Target connection is null.\";\ncase Connection$$module$build$src$core$connection.REASON_CHECKS_FAILED:return\"Connection checks failed. \"+(b+\" expected \"+b.getCheck()+\", found \"+c.getCheck());case Connection$$module$build$src$core$connection.REASON_SHADOW_PARENT:return\"Connecting non-shadow to shadow block.\";case Connection$$module$build$src$core$connection.REASON_DRAG_CHECKS_FAILED:return\"Drag checks failed.\";case Connection$$module$build$src$core$connection.REASON_PREVIOUS_AND_OUTPUT:return\"Block would have an output and a previous connection.\";\ndefault:return\"Unknown connection failure: this should never happen!\"}}doSafetyChecks(a,b){if(!a||!b)return Connection$$module$build$src$core$connection.REASON_TARGET_NULL;let c,d,e;a.isSuperior()?(c=a.getSourceBlock(),d=b.getSourceBlock(),e=b):(d=a.getSourceBlock(),c=b.getSourceBlock(),e=a,a=b);return c===d?Connection$$module$build$src$core$connection.REASON_SELF_CONNECTION:e.type!==OPPOSITE_TYPE$$module$build$src$core$internal_constants[a.type]?Connection$$module$build$src$core$connection.REASON_WRONG_TYPE:\nc.workspace!==d.workspace?Connection$$module$build$src$core$connection.REASON_DIFFERENT_WORKSPACES:c.isShadow()&&!d.isShadow()?Connection$$module$build$src$core$connection.REASON_SHADOW_PARENT:e.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE&&d.previousConnection&&d.previousConnection.isConnected()||e.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT&&d.outputConnection&&d.outputConnection.isConnected()?Connection$$module$build$src$core$connection.REASON_PREVIOUS_AND_OUTPUT:\nConnection$$module$build$src$core$connection.CAN_CONNECT}doTypeChecks(a,b){a=a.getCheck();b=b.getCheck();if(!a||!b)return!0;for(let c=0;cc||b.getSourceBlock().isInsertionMarker())return!1;switch(b.type){case ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT:return this.canConnectToPrevious_(a,b);case ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE:if(b.isConnected()&&\n!b.targetBlock().isInsertionMarker()||a.isConnected())return!1;break;case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:if(b.isConnected()&&!b.targetBlock().isMovable()&&!b.targetBlock().isShadow())return!1;break;case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:if(b.isConnected()&&!a.getSourceBlock().nextConnection&&!b.targetBlock().isShadow()&&b.targetBlock().nextConnection||b.targetBlock()&&!b.targetBlock().isMovable()&&!b.targetBlock().isShadow())return!1;\nbreak;default:return!1}return draggingConnections$$module$build$src$core$common.includes(b)?!1:!0}canConnectToPrevious_(a,b){if(a.targetConnection||draggingConnections$$module$build$src$core$common.includes(b))return!1;if(!b.targetConnection)return!0;a=b.targetBlock();return a.isInsertionMarker()?!a.getPreviousBlock():!1}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_CHECKER,DEFAULT$$module$build$src$core$registry,ConnectionChecker$$module$build$src$core$connection_checker);\nvar module$build$src$core$connection_checker={};module$build$src$core$connection_checker.ConnectionChecker=ConnectionChecker$$module$build$src$core$connection_checker;var Workspace$$module$build$src$core$workspace=class{get isFlyout(){return this.internalIsFlyout}get isMutator(){return this.internalIsMutator}constructor(a){this.isClearing=this.internalIsMutator=this.internalIsFlyout=this.rendered=!1;this.MAX_UNDO=1024;this.connectionDBList=[];this.topBlocks=[];this.topComments=[];this.commentDB=new Map;this.listeners=[];this.undoStack_=[];this.redoStack_=[];this.blockDB=new Map;this.typedBlocksDB=new Map;this.procedureMap=new ObservableProcedureMap$$module$build$src$core$observable_procedure_map;\nthis.readOnly=!1;this.potentialVariableMap=null;this.id=genUid$$module$build$src$core$utils$idgenerator();registerWorkspace$$module$build$src$core$common(this);this.options=a||new Options$$module$build$src$core$options({});this.RTL=!!this.options.RTL;this.horizontalLayout=!!this.options.horizontalLayout;this.toolboxPosition=this.options.toolboxPosition;this.connectionChecker=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_CHECKER,this.options,\n!0))(this);this.variableMap=new (this.getVariableMapClass())(this);this.setIsReadOnly(this.options.readOnly)}dispose(){this.listeners.length=0;this.clear();unregisterWorkpace$$module$build$src$core$common(this)}sortObjects(a,b){const c=d=>({getBoundingRectangle:()=>{const e=d.getRelativeToSurfaceXY();return new Rect$$module$build$src$core$utils$rect(e.y,e.y,e.x,e.x)},moveBy:()=>{}});return this.sortByOrigin(c(a),c(b))}sortByOrigin(a,b){const c=Math.sin(toRadians$$module$build$src$core$utils$math(Workspace$$module$build$src$core$workspace.SCAN_ANGLE))*\n(this.RTL?-1:1);a=a.getBoundingRectangle().getOrigin();b=b.getBoundingRectangle().getOrigin();return a.y+c*a.x-(b.y+c*b.x)}addTopBlock(a){this.topBlocks.push(a)}removeTopBlock(a){if(!removeElem$$module$build$src$core$utils$array(this.topBlocks,a))throw Error(\"Block not present in workspace's list of top-most blocks.\");}getTopBlocks(a=!1){const b=[].concat(this.topBlocks);a&&b.length>1&&b.sort(this.sortObjects.bind(this));return b}addTypedBlock(a){this.typedBlocksDB.has(a.type)||this.typedBlocksDB.set(a.type,\n[]);this.typedBlocksDB.get(a.type).push(a)}removeTypedBlock(a){removeElem$$module$build$src$core$utils$array(this.typedBlocksDB.get(a.type),a);this.typedBlocksDB.get(a.type).length||this.typedBlocksDB.delete(a.type)}getBlocksByType(a,b=!1){if(!this.typedBlocksDB.has(a))return[];a=this.typedBlocksDB.get(a).slice(0);b&&a&&a.length>1&&a.sort(this.sortObjects.bind(this));return a.filter(c=>!c.isInsertionMarker())}addTopComment(a){this.topComments.push(a);this.commentDB.has(a.id)&&console.warn('Overriding an existing comment on this workspace, with id \"'+\na.id+'\"');this.commentDB.set(a.id,a)}removeTopComment(a){if(!removeElem$$module$build$src$core$utils$array(this.topComments,a))throw Error(\"Comment not present in workspace's list of top-most comments.\");this.commentDB.delete(a.id)}getTopComments(a=!1){const b=[].concat(this.topComments);a&&b.length>1&&b.sort(this.sortObjects.bind(this));return b}getAllBlocks(a=!1){if(a){var b=this.getTopBlocks(!0);a=[];for(let c=0;c!c.isInsertionMarker())}clear(){this.isClearing=!0;try{const a=$.getGroup$$module$build$src$core$events$utils();for(a||$.setGroup$$module$build$src$core$events$utils(!0);this.topBlocks.length;)this.topBlocks[0].dispose(!1);for(;this.topComments.length;)this.topComments[this.topComments.length-1].dispose();$.setGroup$$module$build$src$core$events$utils(a);this.isFlyout||this.variableMap.clear();this.potentialVariableMap&&this.potentialVariableMap.clear()}finally{this.isClearing=\n!1}}renameVariableById(a,b){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.renameVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().renameVariable\");(a=this.variableMap.getVariableById(a))&&this.variableMap.renameVariable(a,b)}createVariable(a,b,c){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.createVariable\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().createVariable\");return this.variableMap.createVariable(a,b!=null?b:void 0,c!=null?c:void 0)}getVariableUsesById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariableUsesById\",\n\"v12\",\"v13\",\"Blockly.Variables.getVariableUsesById\");return getVariableUsesById$$module$build$src$core$variables(this,a)}deleteVariableById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.deleteVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().deleteVariable\");const b=this.variableMap.getVariableById(a);b?$.deleteVariable$$module$build$src$core$variables(this,b):console.warn(`Can't delete non-existent variable: ${a}`)}getVariable(a,b){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariable\",\n\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariable\");return this.variableMap.getVariable(a,b)}getVariableById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariableById\");return this.variableMap.getVariableById(a)}getVariablesOfType(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariablesOfType\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariablesOfType\");return this.variableMap.getVariablesOfType(a!=\nnull?a:\"\")}getAllVariables(){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getAllVariables\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getAllVariables\");return this.variableMap.getAllVariables()}getAllVariableNames(){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getAllVariableNames\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getAllVariables\");return this.variableMap.getAllVariables().map(a=>a.getName())}getWidth(){return 0}newBlock(a,b){throw Error(\"The implementation of newBlock should be monkey-patched in by blockly.ts\");\n}newComment(a){throw Error(\"The implementation of newComment should be monkey-patched in by blockly.ts\");}remainingCapacity(){return isNaN(this.options.maxBlocks)?Infinity:this.options.maxBlocks-this.getAllBlocks(!1).length}remainingCapacityOfType(a){return this.options.maxInstances?(this.options.maxInstances[a]!==void 0?this.options.maxInstances[a]:Infinity)-this.getBlocksByType(a,!1).length:Infinity}isCapacityAvailable(a){if(!this.hasBlockLimits())return!0;let b=0;for(const c in a){if(a[c]>this.remainingCapacityOfType(c))return!1;\nb+=a[c]}return b>this.remainingCapacity()?!1:!0}hasBlockLimits(){return this.options.maxBlocks!==Infinity||!!this.options.maxInstances}getUndoStack(){return this.undoStack_}getRedoStack(){return this.redoStack_}undo(a){var b=a?this.redoStack_:this.undoStack_,c=a?this.undoStack_:this.redoStack_;const d=b.pop();if(d){for(var e=[d];b.length&&d.group&&d.group===b[b.length-1].group;){const f=b.pop();f&&e.push(f)}for(b=0;bthis.MAX_UNDO&&this.MAX_UNDO>=\n0;)this.undoStack_.shift();for(let b=0;b!!b.getStyleName()));this.refreshToolboxSelection();this.toolbox&&this.toolbox.refreshTheme();this.isVisible()&&this.setVisible(!0);a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.THEME_CHANGE))(this.getTheme().name,this.id);fire$$module$build$src$core$events$utils(a)}updateBlockStyles(a){for(let b=0,c;c=a[b];b++){const d=\nc.getStyleName();d&&c.setStyle(d)}}getInverseScreenCTM(){if(this.inverseScreenCTMDirty){const a=this.getParentSvg().getScreenCTM();a&&(this.inverseScreenCTM=a.inverse(),this.inverseScreenCTMDirty=!1)}return this.inverseScreenCTM}updateInverseScreenCTM(){this.inverseScreenCTMDirty=!0}isVisible(){return this.visible}getSvgXY(a){let b=0,c=0,d=1;if(this.getCanvas().contains(a)||this.getBubbleCanvas().contains(a))d=this.scale;do{const e=getRelativeXY$$module$build$src$core$utils$svg_math(a);if(a===this.getCanvas()||\na===this.getBubbleCanvas())d=1;b+=e.x*d;c+=e.y*d;a=a.parentNode}while(a&&a!==this.getParentSvg()&&a!==this.getInjectionDiv());return new Coordinate$$module$build$src$core$utils$coordinate(b,c)}getCachedParentSvgSize(){const a=this.cachedParentSvgSize;return new Size$$module$build$src$core$utils$size(a.width,a.height)}getOriginOffsetInPixels(){return getInjectionDivXY$$module$build$src$core$utils$svg_math(this.getCanvas())}getInjectionDiv(){if(!this.injectionDiv){let a=this.svgGroup_;for(;a;){if((\" \"+\n(a.getAttribute(\"class\")||\"\")+\" \").includes(\" injectionDiv \")){this.injectionDiv=a;break}a=a.parentNode}}return this.injectionDiv}getSvgGroup(){return this.svgGroup_}getBlockCanvas(){return this.getCanvas()}setResizeHandlerWrapper(a){this.resizeHandlerWrapper=a}createDom(a,b){this.injectionDiv||(this.injectionDiv=b!=null?b:null);this.svgGroup_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyWorkspace\",id:this.id});b&&setState$$module$build$src$core$utils$aria(this.svgGroup_,\nState$$module$build$src$core$utils$aria.LABEL,$.Msg$$module$build$src$core$msg.WORKSPACE_ARIA_LABEL);a&&(this.svgBackground_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{height:\"100%\",width:\"100%\",\"class\":a},this.svgGroup_),a===\"blocklyMainBackground\"&&this.grid?this.svgBackground_.style.fill=\"var(--blocklyGridPattern)\":this.themeManager_.subscribe(this.svgBackground_,\"workspaceBackgroundColour\",\"fill\"));this.layerManager=new LayerManager$$module$build$src$core$layer_manager(this);\nthis.svgBlockCanvas_=this.layerManager.getBlockLayer();this.svgBubbleCanvas_=this.layerManager.getBubbleLayer();this.isFlyout||(conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"pointerdown\",this,this.onMouseDown,!1),this.dummyWheelListener=()=>{},document.body.addEventListener(\"wheel\",this.dummyWheelListener),conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"wheel\",this,this.onMouseWheel));this.options.hasCategories&&(this.toolbox=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX,\nthis.options,!0))(this));this.grid&&this.grid.update(this.scale);this.recordDragTargets();(a=getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CURSOR,this.options))&&this.markerManager.setCursor(new a(this));a=this.options.parentWorkspace===null;this.renderer.createDom(this.svgGroup_,this.getTheme(),a?this.getInjectionDiv():void 0);$.getFocusManager$$module$build$src$core$focus_manager().registerTree(this,!!this.injectionDiv||this.isFlyout);return this.svgGroup_}dispose(){this.rendered=\n!1;this.currentGesture_&&this.currentGesture_.cancel();this.svgGroup_&&removeNode$$module$build$src$core$utils$dom(this.svgGroup_);this.toolbox&&(this.toolbox.dispose(),this.toolbox=null);this.flyout&&(this.flyout.dispose(),this.flyout=null);this.trashcan&&(this.trashcan.dispose(),this.trashcan=null);this.scrollbar&&(this.scrollbar.dispose(),this.scrollbar=null);this.zoomControls_&&this.zoomControls_.dispose();this.audioManager&&this.audioManager.dispose();this.grid&&(this.grid=null);this.renderer.dispose();\nthis.markerManager.dispose();super.dispose();this.themeManager_&&(this.themeManager_.unsubscribeWorkspace(this),this.themeManager_.unsubscribe(this.svgBackground_),this.options.parentWorkspace||this.themeManager_.dispose());this.connectionDBList.length=0;this.toolboxCategoryCallbacks.clear();this.flyoutButtonCallbacks.clear();if(!this.options.parentWorkspace){const a=this.getParentSvg();a&&a.parentNode&&removeNode$$module$build$src$core$utils$dom(a.parentNode)}this.resizeHandlerWrapper&&(unbind$$module$build$src$core$browser_events(this.resizeHandlerWrapper),\nthis.resizeHandlerWrapper=null);this.dummyWheelListener&&(document.body.removeEventListener(\"wheel\",this.dummyWheelListener),this.dummyWheelListener=null);$.getFocusManager$$module$build$src$core$focus_manager().isRegistered(this)&&$.getFocusManager$$module$build$src$core$focus_manager().unregisterTree(this)}addTrashcan(){this.trashcan=WorkspaceSvg$$module$build$src$core$workspace_svg.newTrashcan(this);const a=this.trashcan.createDom();this.svgGroup_.insertBefore(a,this.getCanvas())}static newTrashcan(a){throw Error(\"The implementation of newTrashcan should be monkey-patched in by blockly.ts\");\n}addZoomControls(){this.zoomControls_=new ZoomControls$$module$build$src$core$zoom_controls(this);const a=this.zoomControls_.createDom();this.svgGroup_.appendChild(a)}copyOptionsForFlyout(){return new Options$$module$build$src$core$options({parentWorkspace:this,rtl:this.RTL,oneBasedIndex:this.options.oneBasedIndex,horizontalLayout:this.horizontalLayout,renderer:this.options.renderer,rendererOverrides:this.options.rendererOverrides,plugins:this.options.plugins,modalInputs:this.options.modalInputs,\nmove:{scrollbars:!0}})}addFlyout(a){const b=this.copyOptionsForFlyout();b.toolboxPosition=this.options.toolboxPosition;this.flyout=this.horizontalLayout?new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,this.options,!0))(b):new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,this.options,!0))(b);this.flyout.autoClose=!1;this.flyout.getWorkspace().setVisible(!0);\nreturn this.flyout.createDom(a)}getFlyout(a){return this.flyout||a?this.flyout:this.toolbox?this.toolbox.getFlyout():null}getToolbox(){return this.toolbox}updateScreenCalculations(){this.updateInverseScreenCTM();this.recordDragTargets()}resizeContents(){this.resizesEnabled&&this.rendered&&(this.scrollbar&&this.scrollbar.resize(),this.updateInverseScreenCTM())}resize(){this.toolbox?this.toolbox.position():this.flyout&&this.flyout.position();const a=this.componentManager.getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE,\n!0),b=this.getMetricsManager().getUiMetrics(),c=[];for(let d=0,e;e=a[d];d++){e.position(b,c);const f=e.getBoundingRectangle();f&&c.push(f)}this.scrollbar&&this.scrollbar.resize();this.updateScreenCalculations()}updateScreenCalculationsIfScrolled(){const a=getDocumentScroll$$module$build$src$core$utils$svg_math();Coordinate$$module$build$src$core$utils$coordinate.equals(this.lastRecordedPageScroll,a)||(this.lastRecordedPageScroll=a,this.updateScreenCalculations())}getLayerManager(){return this.layerManager}getCanvas(){return this.layerManager.getBlockLayer()}setCachedParentSvgSize(a,\nb){const c=this.getParentSvg();a!=null&&(this.cachedParentSvgSize.width=a,c.setAttribute(\"data-cached-width\",`${a}`));b!=null&&(this.cachedParentSvgSize.height=b,c.setAttribute(\"data-cached-height\",`${b}`))}getBubbleCanvas(){return this.layerManager.getBubbleLayer()}getParentSvg(){if(!this.cachedParentSvg){let a=this.svgGroup_;for(;a;){if(a.tagName===\"svg\"){this.cachedParentSvg=a;break}a=a.parentNode}}return this.cachedParentSvg}maybeFireViewportChangeEvent(){if(isEnabled$$module$build$src$core$events$utils()){var a=\nthis.scale,b=-this.scrollY,c=-this.scrollX;if(!(a===this.oldScale&&Math.abs(b-this.oldTop)<1&&Math.abs(c-this.oldLeft)<1)){var d=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE))(b,c,a,this.id,this.oldScale);this.oldScale=a;this.oldTop=b;this.oldLeft=c;fire$$module$build$src$core$events$utils(d)}}}translate(a,b){let c;(c=this.layerManager)==null||c.translateLayers(new Coordinate$$module$build$src$core$utils$coordinate(a,b),this.scale);let d;\n(d=this.grid)==null||d.moveTo(a,b);this.maybeFireViewportChangeEvent()}getWidth(){const a=this.getMetrics();return a?a.viewWidth/this.scale:0}setVisible(a){this.visible=a;this.svgGroup_&&(this.scrollbar&&this.scrollbar.setContainerVisible(a),this.getFlyout()&&this.getFlyout().setContainerVisible(a),this.getParentSvg().style.display=a?\"block\":\"none\",this.toolbox&&this.toolbox.setVisible(a),a||this.hideChaff(!0))}render(){const a=this.getAllBlocks(!1);for(let b=a.length-1;b>=0;b--)a[b].queueRender();\nthis.getTopBlocks().flatMap(b=>b.getDescendants(!1)).filter(b=>b.isInsertionMarker()).forEach(b=>b.queueRender())}highlightBlock(a,b){if(b===void 0){for(let c=0,d;d=this.highlightedBlocks[c];c++)d.setHighlighted(!1);this.highlightedBlocks.length=0}if(a=a?this.getBlockById(a):null)(b=b===void 0||b)?this.highlightedBlocks.includes(a)||this.highlightedBlocks.push(a):removeElem$$module$build$src$core$utils$array(this.highlightedBlocks,a),a.setHighlighted(b)}variableChangeCallback(a){switch(a.type){case EventType$$module$build$src$core$events$type.VAR_CREATE:case EventType$$module$build$src$core$events$type.VAR_DELETE:case EventType$$module$build$src$core$events$type.VAR_RENAME:case EventType$$module$build$src$core$events$type.VAR_TYPE_CHANGE:this.refreshToolboxSelection()}}refreshToolboxSelection(){const a=\nthis.isFlyout?this.targetWorkspace:this;a&&!a.currentGesture_&&a.toolbox&&a.toolbox.getFlyout()&&a.toolbox.refreshSelection()}recordDragTargets(){const a=this.componentManager.getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET,!0);this.dragTargetAreas=[];for(let b=0,c;c=a[b];b++){const d=c.getClientRect();d&&this.dragTargetAreas.push({component:c,clientRect:d})}}newBlock(a,b){throw Error(\"The implementation of newBlock should be monkey-patched in by blockly.ts\");\n}newComment(a){throw Error(\"The implementation of newComment should be monkey-patched in by blockly.ts\");}getDragTarget(a){for(let b=0,c;c=this.dragTargetAreas[b];b++)if(c.clientRect.contains(a.clientX,a.clientY))return c.component;return null}onMouseDown(a){const b=this.getGesture(a);b&&b.handleWsStart(a,this)}startDrag(a,b){start$$module$build$src$core$utils$drag(this,a,b)}moveDrag(a){return move$$module$build$src$core$utils$drag(this,a)}setKeyboardMoveInProgress(a){this.keyboardMoveInProgress=\na}isDragging(){return this.keyboardMoveInProgress||this.currentGesture_!==null&&this.currentGesture_.isDragging()}isDraggable(){return this.options.moveOptions&&this.options.moveOptions.drag}isMovable(){return this.options.moveOptions&&!!this.options.moveOptions.scrollbars||this.options.moveOptions&&this.options.moveOptions.wheel||this.options.moveOptions&&this.options.moveOptions.drag||this.options.zoomOptions&&this.options.zoomOptions.wheel||this.options.zoomOptions&&this.options.zoomOptions.pinch}isMovableHorizontally(){const a=\n!!this.scrollbar;return this.isMovable()&&(!a||a&&this.scrollbar.canScrollHorizontally())}isMovableVertically(){const a=!!this.scrollbar;return this.isMovable()&&(!a||a&&this.scrollbar.canScrollVertically())}onMouseWheel(a){if(Gesture$$module$build$src$core$gesture.inProgress())a.preventDefault(),a.stopPropagation();else{var b=this.options.zoomOptions&&this.options.zoomOptions.wheel,c=this.options.moveOptions&&this.options.moveOptions.wheel;if(b||c){var d=getScrollDeltaPixels$$module$build$src$core$browser_events(a);\nif(MAC$$module$build$src$core$utils$useragent)var e=a.metaKey;b&&(a.ctrlKey||e||!c)?(d=-d.y/50,b=mouseToSvg$$module$build$src$core$browser_events(a,this.getParentSvg(),this.getInverseScreenCTM()),this.zoom(b.x,b.y,d)):(b=this.scrollX-d.x,c=this.scrollY-d.y,a.shiftKey&&!d.x&&(b=this.scrollX-d.y,c=this.scrollY),this.scroll(b,c));a.preventDefault()}}}getBlocksBoundingBox(){const a=this.getTopBoundedElements();if(!a.length)return new Rect$$module$build$src$core$utils$rect(0,0,0,0);const b=a[0].getBoundingRectangle();\nfor(let d=1;db.bottom&&(b.bottom=c.bottom),c.leftb.right&&(b.right=c.right))}return b}cleanUp(){this.setResizesEnabled(!1);const a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);var b=this.getTopBlocks(!0),c=b.filter(g=>g.isMovable());const d=b.filter(g=>!g.isMovable()).map(g=>\ng.getBoundingRectangle());b=function(g){for(const h of d)if(g.intersects(h))return h;return null};var e=0;const f=this.renderer.getConstants().MIN_BLOCK_HEIGHT;for(const g of c){c=g.getBoundingRectangle();g.moveBy(-c.left,e-c.top,[\"cleanup\"]);g.snapToGrid();c=g.getBoundingRectangle();for(e=b(c);e!=null;)e=e.top+e.getHeight()+f,g.moveBy(0,e-c.top,[\"cleanup\"]),g.snapToGrid(),c=g.getBoundingRectangle(),e=b(c);e=g.getRelativeToSurfaceXY().y+g.getHeightWidth().height+f}$.setGroup$$module$build$src$core$events$utils(a);\nthis.setResizesEnabled(!0)}showContextMenu(a){if(!this.isReadOnly()&&!this.isFlyout){var b=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({workspace:this,focusedNode:this},a);this.configureContextMenu&&this.configureContextMenu(b,a);var c=a instanceof PointerEvent?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this,new Coordinate$$module$build$src$core$utils$coordinate(5,\n5));show$$module$build$src$core$contextmenu(a,b,this.RTL,this,c)}}updateToolbox(a){if(a=convertToolboxDefToJson$$module$build$src$core$utils$toolbox(a)){if(!this.options.languageTree)throw Error(\"Existing toolbox is null. Can't create new toolbox.\");if(hasCategories$$module$build$src$core$utils$toolbox(a)){if(!this.toolbox)throw Error(\"Existing toolbox has no categories. Can't change mode.\");this.options.languageTree=a;this.toolbox.render(a)}else{if(!this.flyout)throw Error(\"Existing toolbox has categories. Can't change mode.\");\nthis.options.languageTree=a;this.flyout.show(a)}}else if(this.options.languageTree)throw Error(\"Can't nullify an existing toolbox.\");}markFocused(){this.options.parentWorkspace?this.options.parentWorkspace.markFocused():(setMainWorkspace$$module$build$src$core$common(this),this.getParentSvg().focus({preventScroll:!0}))}zoom(a,b,c){c=Math.pow(this.options.zoomOptions.scaleSpeed,c);const d=this.scale*c;if(this.scale!==d){d>this.options.zoomOptions.maxScale?c=this.options.zoomOptions.maxScale/this.scale:\ndthis.options.zoomOptions.maxScale?a=this.options.zoomOptions.maxScale:this.options.zoomOptions.minScale&&a{if(c.isFlyout){let d;const e=(d=c.targetWorkspace)==null?void 0:d.getFlyout();if(e instanceof Flyout$$module$build$src$core$flyout_base)return e.getFlyoutScale()}return c.getScale()},b=(c,d)=>c.options.parentWorkspace&&c.options.parentWorkspace.getSvgGroup().contains(c.getSvgGroup())?b(c.options.parentWorkspace,d*a(c)):d*a(c);return b(this,1)}scroll(a,b){this.hideChaff(!0);\nconst c=this.getMetrics();a=Math.min(a,-c.scrollLeft);b=Math.min(b,-c.scrollTop);const d=c.scrollTop+Math.max(0,c.scrollHeight-c.viewHeight);a=Math.max(a,-(c.scrollLeft+Math.max(0,c.scrollWidth-c.viewWidth)));b=Math.max(b,-d);this.scrollX=a;this.scrollY=b;this.scrollbar&&this.scrollbar.set(-(a+c.scrollLeft),-(b+c.scrollTop),!1);a+=c.absoluteLeft;b+=c.absoluteTop;this.translate(a,b)}getBlockById(a){return super.getBlockById(a)}getAllBlocks(a=!1){return super.getAllBlocks(a)}getTopBlocks(a=!1){return super.getTopBlocks(a)}addTopBlock(a){this.addTopBoundedElement(a);\nsuper.addTopBlock(a)}removeTopBlock(a){this.removeTopBoundedElement(a);super.removeTopBlock(a)}addTopComment(a){this.addTopBoundedElement(a);super.addTopComment(a)}removeTopComment(a){this.removeTopBoundedElement(a);super.removeTopComment(a)}getTopComments(a=!1){return super.getTopComments(a)}getCommentById(a){return super.getCommentById(a)}getRootWorkspace(){return super.getRootWorkspace()}addTopBoundedElement(a){this.topBoundedElements.push(a)}removeTopBoundedElement(a){removeElem$$module$build$src$core$utils$array(this.topBoundedElements,\na)}getTopBoundedElements(a=!1){const b=[].concat(this.topBoundedElements);a&&b.sort(this.sortByOrigin.bind(this));return b}setResizesEnabled(a){const b=!this.resizesEnabled&&a;this.resizesEnabled=a;b&&this.resizeContents()}clear(){this.setResizesEnabled(!1);super.clear();this.topBoundedElements=[];this.setResizesEnabled(!0)}registerButtonCallback(a,b){if(typeof b!==\"function\")throw TypeError(\"Button callbacks must be functions.\");this.flyoutButtonCallbacks.set(a,b)}getButtonCallback(a){let b;return(b=\nthis.flyoutButtonCallbacks.get(a))!=null?b:null}removeButtonCallback(a){this.flyoutButtonCallbacks.delete(a)}registerToolboxCategoryCallback(a,b){if(typeof b!==\"function\")throw TypeError(\"Toolbox category callbacks must be functions.\");this.toolboxCategoryCallbacks.set(a,b)}getToolboxCategoryCallback(a){return this.toolboxCategoryCallbacks.get(a)||null}removeToolboxCategoryCallback(a){this.toolboxCategoryCallbacks.delete(a)}getGesture(a){if(this.keyboardMoveInProgress)return a.preventDefault(),a.stopPropagation(),\nnull;const b=a.type===\"pointerdown\";let c;b&&((c=this.currentGesture_)==null?0:c.hasStarted())&&(console.warn(\"Tried to start the same gesture twice.\"),this.currentGesture_.cancel());!this.currentGesture_&&b&&(this.currentGesture_=new Gesture$$module$build$src$core$gesture(a,this));return this.currentGesture_}clearGesture(){this.currentGesture_=null}cancelCurrentGesture(){this.currentGesture_&&this.currentGesture_.cancel()}getAudioManager(){return this.audioManager}getGrid(){return this.grid}hideChaff(a=\n!1){hide$$module$build$src$core$tooltip();hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv(this);hideWithoutAnimation$$module$build$src$core$dropdowndiv();this.hideComponents(a)}hideComponents(a=!1){this.getComponentManager().getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,!0).forEach(b=>b.autoHide(a))}static setTopLevelWorkspaceMetrics(a){const b=this.getMetrics();typeof a.x===\"number\"&&(this.scrollX=-(b.scrollLeft+(b.scrollWidth-b.viewWidth)*\na.x));typeof a.y===\"number\"&&(this.scrollY=-(b.scrollTop+(b.scrollHeight-b.viewHeight)*a.y));this.translate(this.scrollX+b.absoluteLeft,this.scrollY+b.absoluteTop)}addClass(a){this.injectionDiv&&addClass$$module$build$src$core$utils$dom(this.injectionDiv,a)}removeClass(a){this.injectionDiv&&removeClass$$module$build$src$core$utils$dom(this.injectionDiv,a)}setIsReadOnly(a){super.setIsReadOnly(a);a?this.addClass(\"blocklyReadOnly\"):this.removeClass(\"blocklyReadOnly\")}scrollBoundsIntoView(a,b=10){if(!Gesture$$module$build$src$core$gesture.inProgress()){var c=\nthis.getScale(),d=this.getMetricsManager().getViewMetrics(!0);d=new Rect$$module$build$src$core$utils$rect(d.top,d.top+d.height,d.left,d.left+d.width);if(!(a.left>=d.left&&a.top>=d.top&&a.right<=d.right&&a.bottom<=d.bottom)){a=a.clone();a.top-=b;a.bottom+=b;a.left-=b;a.right+=b;var e=b=0;a.leftd.right&&(b=this.RTL?d.right-a.right:Math.max(d.right-a.right,d.left-a.left));a.topd.bottom&&(e=\nMath.max(d.bottom-a.bottom,d.top-a.top));this.scroll(this.scrollX+b*c,this.scrollY+e*c)}}}getFocusableElement(){return this.svgGroup_}getFocusableTree(){return this.isMutator&&this.options.parentWorkspace||this}onNodeFocus(){}onNodeBlur(){}canBeFocused(){return!0}getRootFocusableNode(){return this}getRestoredFocusableNode(a){if(a)return null;let b;a=(b=this.targetWorkspace)==null?void 0:b.getFlyout();if(this.isFlyout&&a){let d,e;return(e=(d=a.getContents().find(f=>{f=f.getElement();return isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(f)&&\nf.canBeFocused()}))==null?void 0:d.getElement())!=null?e:null}let c;return(c=this.getTopBlocks(!0)[0])!=null?c:null}getNestedTrees(){const a=this.getAllBlocks().map(c=>c.getIcons()).flat().filter(c=>c instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&c.bubbleIsVisible()).map(c=>{let d;return(d=c.getBubble())==null?void 0:d.getWorkspace()}).filter(c=>!!c),b=this.getFlyout(!0);b&&a.push(b.getWorkspace());return a}searchForWorkspaceComment(a){for(const b of this.getTopComments())if(b instanceof\nRenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment&&b.canBeFocused()&&b.getFocusableElement().id===a)return b}lookUpFocusableNode(a){var b;const c=(b=this.targetWorkspace)==null?void 0:b.getFlyout();if(this.isFlyout&&c)for(var d of c.getContents())if(b=d.getElement(),isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(b)&&b.canBeFocused()&&b.getFocusableElement().id===a)return b;d=a.indexOf(\"_field_\");b=a.indexOf(\"_connection_\");if(d!==-1){var e=a.substring(0,\nd);if(e=this.getBlockById(e))for(var f of e.getFields())if(f.canBeFocused()&&f.getFocusableElement().id===a)return f;return null}if(b!==-1){e=a.substring(0,b);if(e=this.getBlockById(e))for(const h of e.getConnections_(!0))if(h.id===a)return h;return null}f=Math.max(a.indexOf(COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor),a.indexOf(COMMENT_COLLAPSE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$collapse_comment_bar_button),a.indexOf(COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button));\nif(f!==-1&&(f=a.substring(0,f),f=this.searchForWorkspaceComment(f))){if(a.indexOf(COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor)>-1)return f.getEditorFocusableNode();var g;return(g=f.view.getCommentBarButtons().find(h=>h.getFocusableElement().id.includes(a)))!=null?g:null}if((g=this.getAllBlocks(!1).find(h=>h.getFocusableElement().id===a))||(g=this.searchForWorkspaceComment(a)))return g;g=this.getAllBlocks().map(h=>h.getIcons()).flat();for(e of g){if(e.canBeFocused()&&\ne.getFocusableElement().id===a)return e;if(hasBubble$$module$build$src$core$interfaces$i_has_bubble(e)){if((g=e.getBubble())&&g.canBeFocused()&&g.getFocusableElement().id===a)return g;if(g instanceof TextInputBubble$$module$build$src$core$bubbles$textinput_bubble&&g.getEditor().getFocusableElement().id===a)return g.getEditor()}}return null}onTreeFocus(a,b){}onTreeBlur(a){if(this.isFlyout&&this.targetWorkspace&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()){var b=\nthis.targetWorkspace.getToolbox();b&&a===b||isAutoHideable$$module$build$src$core$interfaces$i_autohideable(b)&&b.autoHide(!1)}}getNavigator(){return this.navigator}setNavigator(a){this.navigator=a}},module$build$src$core$workspace_svg={};module$build$src$core$workspace_svg.WorkspaceSvg=WorkspaceSvg$$module$build$src$core$workspace_svg;module$build$src$core$workspace_svg.resizeSvgContents=resizeSvgContents$$module$build$src$core$workspace_svg;var VarBase$$module$build$src$core$events$events_var_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.isBlank=typeof a===\"undefined\";a&&(this.varId=a.getId(),this.workspaceId=a.getWorkspace().id)}toJson(){const a=super.toJson();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");a.varId=this.varId;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarBase$$module$build$src$core$events$events_var_base);\nb.varId=a.varId;return b}},module$build$src$core$events$events_var_base={};module$build$src$core$events$events_var_base.VarBase=VarBase$$module$build$src$core$events$events_var_base;var VarCreate$$module$build$src$core$events$events_var_create=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_CREATE;a&&(this.varType=a.getType(),this.varName=a.getName())}toJson(){const a=super.toJson();if(this.varType===void 0)throw Error(\"The var type is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");\na.varType=this.varType;a.varName=this.varName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarCreate$$module$build$src$core$events$events_var_create);b.varType=a.varType;b.varName=a.varName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");b=b.getVariableMap();\na?b.createVariable(this.varName,this.varType,this.varId):(a=b.getVariableById(this.varId))&&b.deleteVariable(a)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_CREATE,VarCreate$$module$build$src$core$events$events_var_create);var module$build$src$core$events$events_var_create={};module$build$src$core$events$events_var_create.VarCreate=VarCreate$$module$build$src$core$events$events_var_create;var VariableModel$$module$build$src$core$variable_model=class{constructor(a,b,c,d){this.workspace=a;this.name=b;this.type=c||\"\";this.id=d||genUid$$module$build$src$core$utils$idgenerator()}getId(){return this.id}getName(){return this.name}setName(a){this.name=a;return this}getType(){return this.type}setType(a){this.type=a;return this}getWorkspace(){return this.workspace}save(){const a={name:this.getName(),id:this.getId()},b=this.getType();b&&(a.type=b);return a}static load(a,b){a=new this(b,a.name,\na.type,a.id);b.getVariableMap().addVariable(a);fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_CREATE))(a))}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MODEL,DEFAULT$$module$build$src$core$registry,VariableModel$$module$build$src$core$variable_model);var module$build$src$core$variable_model={};module$build$src$core$variable_model.VariableModel=VariableModel$$module$build$src$core$variable_model;var VarDelete$$module$build$src$core$events$events_var_delete=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_DELETE;a&&(this.varType=a.getType(),this.varName=a.getName())}toJson(){const a=super.toJson();if(this.varType===void 0)throw Error(\"The var type is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");\na.varType=this.varType;a.varName=this.varName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarDelete$$module$build$src$core$events$events_var_delete);b.varType=a.varType;b.varName=a.varName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");b=b.getVariableMap();\na?(a=b.getVariableById(this.varId))&&b.deleteVariable(a):b.createVariable(this.varName,this.varType,this.varId)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_DELETE,VarDelete$$module$build$src$core$events$events_var_delete);var module$build$src$core$events$events_var_delete={};module$build$src$core$events$events_var_delete.VarDelete=VarDelete$$module$build$src$core$events$events_var_delete;var VarRename$$module$build$src$core$events$events_var_rename=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a,b){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_RENAME;a&&(this.oldName=a.getName(),this.newName=typeof b===\"undefined\"?\"\":b)}toJson(){const a=super.toJson();if(!this.oldName)throw Error(\"The old var name is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.newName)throw Error(\"The new var name is undefined. Either pass a value to the constructor, or call fromJson\");\na.oldName=this.oldName;a.newName=this.newName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarRename$$module$build$src$core$events$events_var_rename);b.oldName=a.oldName;b.newName=a.newName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.oldName)throw Error(\"The old var name is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.newName)throw Error(\"The new var name is undefined. Either pass a value to the constructor, or call fromJson\");\nb=b.getVariableMap();const c=b.getVariableById(this.varId);a?c&&b.renameVariable(c,this.newName):c&&b.renameVariable(c,this.oldName)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_RENAME,VarRename$$module$build$src$core$events$events_var_rename);var module$build$src$core$events$events_var_rename={};module$build$src$core$events$events_var_rename.VarRename=VarRename$$module$build$src$core$events$events_var_rename;var VariableMap$$module$build$src$core$variable_map=class{constructor(a,b=!1){this.workspace=a;this.potentialMap=b;this.variableMap=new Map}clear(){for(const a of this.variableMap.values())for(const b of a.values())this.deleteVariable(b);if(this.variableMap.size!==0)throw Error(\"Non-empty variable map\");}renameVariable(a,b){if(a.getName()===b)return a;var c=a.getType();c=this.getVariable(b,c);const d=this.workspace.getAllBlocks(!1);let e=\"\";this.potentialMap||(e=$.getGroup$$module$build$src$core$events$utils())||\n$.setGroup$$module$build$src$core$events$utils(!0);try{c&&c.getId()!==a.getId()?this.renameVariableWithConflict(a,b,c,d):this.renameVariableAndUses(a,b,d)}finally{this.potentialMap||$.setGroup$$module$build$src$core$events$utils(e)}return a}changeVariableType(a,b){const c=a.getType();if(c===b)return a;var d=this.variableMap.get(c);d==null||d.delete(a.getId());(d==null?void 0:d.size)===0&&this.variableMap.delete(c);a.setType(b);let e;d=(e=this.variableMap.get(b))!=null?e:new Map;d.set(a.getId(),a);\nthis.variableMap.has(b)||this.variableMap.set(b,d);fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_TYPE_CHANGE))(a,c,b));return a}renameVariableById(a,b){warn$$module$build$src$core$utils$deprecation(\"VariableMap.renameVariableById\",\"v12\",\"v13\",\"VariableMap.renameVariable\");const c=this.getVariableById(a);if(!c)throw Error(\"Tried to rename a variable that didn't exist. ID: \"+a);this.renameVariable(c,b)}renameVariableAndUses(a,\nb,c){this.potentialMap||fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_RENAME))(a,b));a.setName(b);for(b=0;b$.Names$$module$build$src$core$names.equals(d.getName(),\na)))!=null?c:null}getVariableById(a){for(const b of this.variableMap.values())if(b.has(a)){let c;return(c=b.get(a))!=null?c:null}return null}getVariablesOfType(a){return(a=this.variableMap.get(a||\"\"))?[...a.values()]:[]}getTypes(){return[...this.variableMap.keys()]}getAllVariables(){let a=[];for(const b of this.variableMap.values())a=a.concat(...b.values());return a}getAllVariableNames(){warn$$module$build$src$core$utils$deprecation(\"VariableMap.getAllVariableNames\",\"v12\",\"v13\",\"Blockly.Variables.getAllVariables\");\nconst a=[];for(const b of this.variableMap.values())for(const c of b.values())a.push(c.getName());return a}getVariableUsesById(a){warn$$module$build$src$core$utils$deprecation(\"VariableMap.getVariableUsesById\",\"v12\",\"v13\",\"Blockly.Variables.getVariableUsesById\");return getVariableUsesById$$module$build$src$core$variables(this.workspace,a)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MAP,DEFAULT$$module$build$src$core$registry,VariableMap$$module$build$src$core$variable_map);\nvar module$build$src$core$variable_map={};module$build$src$core$variable_map.VariableMap=VariableMap$$module$build$src$core$variable_map;var TrashcanOpen$$module$build$src$core$events$events_trashcan_open=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b){super(b);this.type=EventType$$module$build$src$core$events$type.TRASHCAN_OPEN;this.isOpen=a}toJson(){const a=super.toJson();if(this.isOpen===void 0)throw Error(\"Whether this is already open or not is undefined. Either pass a value to the constructor, or call fromJson\");a.isOpen=this.isOpen;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?\nc:new TrashcanOpen$$module$build$src$core$events$events_trashcan_open);b.isOpen=a.isOpen;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.TRASHCAN_OPEN,TrashcanOpen$$module$build$src$core$events$events_trashcan_open);var module$build$src$core$events$events_trashcan_open={};module$build$src$core$events$events_trashcan_open.TrashcanOpen=TrashcanOpen$$module$build$src$core$events$events_trashcan_open;var Trashcan$$module$build$src$core$trashcan=class extends DeleteArea$$module$build$src$core$delete_area{constructor(a){super();this.workspace=a;this.id=\"trashcan\";this.contents=[];this.flyout=null;this.isLidOpen=!1;this.minOpenness=0;this.lidTask=this.svgLid=this.svgGroup=null;this.top=this.left=this.lidOpen=0;this.initialized=!1;this.workspace.options.maxTrashcanContents<=0||(a=this.workspace.copyOptionsForFlyout(),this.workspace.horizontalLayout?(a.toolboxPosition=this.workspace.toolboxPosition===\nPosition$$module$build$src$core$utils$toolbox.TOP?Position$$module$build$src$core$utils$toolbox.BOTTOM:Position$$module$build$src$core$utils$toolbox.TOP,this.flyout=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,this.workspace.options,!0))(a)):(a.toolboxPosition=this.workspace.toolboxPosition===Position$$module$build$src$core$utils$toolbox.RIGHT?Position$$module$build$src$core$utils$toolbox.LEFT:Position$$module$build$src$core$utils$toolbox.RIGHT,\nthis.flyout=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,this.workspace.options,!0))(a)),this.workspace.addChangeListener(this.onDelete.bind(this)))}createDom(){this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyTrash\"});let a;const b=String(Math.random()).substring(2);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,\n{id:\"blocklyTrashBodyClipPath\"+b},this.svgGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:WIDTH$$module$build$src$core$trashcan,height:BODY_HEIGHT$$module$build$src$core$trashcan,y:LID_HEIGHT$$module$build$src$core$trashcan},a);const c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,x:-SPRITE_LEFT$$module$build$src$core$trashcan,height:SPRITE$$module$build$src$core$sprites.height,\ny:-SPRITE_TOP$$module$build$src$core$trashcan,\"clip-path\":\"url(#blocklyTrashBodyClipPath\"+b+\")\"},this.svgGroup);c.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyTrashLidClipPath\"+b},this.svgGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:WIDTH$$module$build$src$core$trashcan,\nheight:LID_HEIGHT$$module$build$src$core$trashcan},a);this.svgLid=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,x:-SPRITE_LEFT$$module$build$src$core$trashcan,height:SPRITE$$module$build$src$core$sprites.height,y:-SPRITE_TOP$$module$build$src$core$trashcan,\"clip-path\":\"url(#blocklyTrashLidClipPath\"+b+\")\"},this.svgGroup);this.svgLid.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);bind$$module$build$src$core$browser_events(this.svgGroup,\"pointerdown\",this,this.blockMouseDownWhenOpenable);bind$$module$build$src$core$browser_events(this.svgGroup,\"pointerup\",this,this.click);bind$$module$build$src$core$browser_events(c,\"pointerover\",this,this.mouseOver);bind$$module$build$src$core$browser_events(c,\"pointerout\",this,this.mouseOut);this.animateLid();return this.svgGroup}init(){if(this.workspace.options.maxTrashcanContents>\n0){const a=this.flyout.createDom(Svg$$module$build$src$core$utils$svg.SVG);addClass$$module$build$src$core$utils$dom(a,\"blocklyTrashcanFlyout\");insertAfter$$module$build$src$core$utils$dom(a,this.workspace.getParentSvg());this.flyout.init(this.workspace)}this.workspace.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.TRASHCAN_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,\nComponentManager$$module$build$src$core$component_manager.Capability.DELETE_AREA,ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET,ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE]});this.initialized=!0;this.setLidOpen(!1)}dispose(){this.workspace.getComponentManager().removeComponent(\"trashcan\");this.svgGroup&&removeNode$$module$build$src$core$utils$dom(this.svgGroup);this.lidTask&&clearTimeout(this.lidTask)}hasContents(){return!!this.contents.length}contentsIsOpen(){return!!this.flyout&&\nthis.flyout.isVisible()}openFlyout(){if(!this.contentsIsOpen()){var a=this.contents.map(function(c){return JSON.parse(c)}),b=this.workspace.getParentSvg().style;b.cursor=\"wait\";setTimeout(()=>{let c;(c=this.flyout)==null||c.show(a);b.cursor=\"\";let d;(d=this.workspace.scrollbar)==null||d.setVisible(!1)},10);this.fireUiEvent(!0)}}closeFlyout(){if(this.contentsIsOpen()){var a;(a=this.flyout)==null||a.hide();var b;(b=this.workspace.scrollbar)==null||b.setVisible(!0);this.fireUiEvent(!1);this.workspace.recordDragTargets()}}autoHide(a){!a&&\nthis.flyout&&this.closeFlyout()}emptyContents(){this.hasContents()&&(this.contents.length=0,this.setMinOpenness(0),this.closeFlyout())}position(a,b){if(this.initialized){var c=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers(this.workspace,a);a=getStartPositionRect$$module$build$src$core$positionable_helpers(c,new Size$$module$build$src$core$utils$size(WIDTH$$module$build$src$core$trashcan,BODY_HEIGHT$$module$build$src$core$trashcan+LID_HEIGHT$$module$build$src$core$trashcan),\nMARGIN_HORIZONTAL$$module$build$src$core$trashcan,MARGIN_VERTICAL$$module$build$src$core$trashcan,a,this.workspace);b=bumpPositionRect$$module$build$src$core$positionable_helpers(a,MARGIN_VERTICAL$$module$build$src$core$trashcan,c.vertical===verticalPosition$$module$build$src$core$positionable_helpers.TOP?bumpDirection$$module$build$src$core$positionable_helpers.DOWN:bumpDirection$$module$build$src$core$positionable_helpers.UP,b);this.top=b.top;this.left=b.left;var d;(d=this.svgGroup)==null||d.setAttribute(\"transform\",\n\"translate(\"+this.left+\",\"+this.top+\")\");var e;(e=this.flyout)==null||e.position()}}getBoundingRectangle(){return new Rect$$module$build$src$core$utils$rect(this.top,this.top+BODY_HEIGHT$$module$build$src$core$trashcan+LID_HEIGHT$$module$build$src$core$trashcan,this.left,this.left+WIDTH$$module$build$src$core$trashcan)}getClientRect(){if(!this.svgGroup)return null;var a=this.svgGroup.getBoundingClientRect();const b=a.top+SPRITE_TOP$$module$build$src$core$trashcan-MARGIN_HOTSPOT$$module$build$src$core$trashcan;\na=a.left+SPRITE_LEFT$$module$build$src$core$trashcan-MARGIN_HOTSPOT$$module$build$src$core$trashcan;return new Rect$$module$build$src$core$utils$rect(b,b+LID_HEIGHT$$module$build$src$core$trashcan+BODY_HEIGHT$$module$build$src$core$trashcan+2*MARGIN_HOTSPOT$$module$build$src$core$trashcan,a,a+WIDTH$$module$build$src$core$trashcan+2*MARGIN_HOTSPOT$$module$build$src$core$trashcan)}onDragOver(a){this.setLidOpen(this.wouldDelete_)}onDragExit(a){this.setLidOpen(!1)}onDrop(a){setTimeout(this.setLidOpen.bind(this,\n!1),100)}setLidOpen(a){this.isLidOpen!==a&&(this.lidTask&&clearTimeout(this.lidTask),this.isLidOpen=a,this.animateLid())}animateLid(){const a=ANIMATION_FRAMES$$module$build$src$core$trashcan;var b=1/(a+1);this.lidOpen+=this.isLidOpen?b:-b;this.lidOpen=Math.min(Math.max(this.lidOpen,this.minOpenness),1);this.setLidAngle(this.lidOpen*MAX_LID_ANGLE$$module$build$src$core$trashcan);b=OPACITY_MIN$$module$build$src$core$trashcan+this.lidOpen*(OPACITY_MAX$$module$build$src$core$trashcan-OPACITY_MIN$$module$build$src$core$trashcan);\nthis.svgGroup&&(this.svgGroup.style.opacity=`${b}`);this.lidOpen>this.minOpenness&&this.lidOpen<1&&(this.lidTask=setTimeout(this.animateLid.bind(this),ANIMATION_LENGTH$$module$build$src$core$trashcan/a))}setLidAngle(a){const b=this.workspace.toolboxPosition===Position$$module$build$src$core$utils$toolbox.RIGHT||this.workspace.horizontalLayout&&this.workspace.RTL;let c;(c=this.svgLid)==null||c.setAttribute(\"transform\",\"rotate(\"+(b?-a:a)+\",\"+(b?4:WIDTH$$module$build$src$core$trashcan-4)+\",\"+(LID_HEIGHT$$module$build$src$core$trashcan-\n2)+\")\")}setMinOpenness(a){this.minOpenness=a;this.isLidOpen||this.setLidAngle(a*MAX_LID_ANGLE$$module$build$src$core$trashcan)}closeLid(){this.setLidOpen(!1)}click(){this.hasContents()&&!this.workspace.isDragging()&&this.openFlyout()}fireUiEvent(a){a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.TRASHCAN_OPEN))(a,this.workspace.id);fire$$module$build$src$core$events$utils(a)}blockMouseDownWhenOpenable(a){!this.contentsIsOpen()&&this.hasContents()&&a.stopPropagation()}mouseOver(){this.hasContents()&&\nthis.setLidOpen(!0)}mouseOut(){this.setLidOpen(!1)}onDelete(a){if(!(this.workspace.options.maxTrashcanContents<=0||!isBlockDelete$$module$build$src$core$events$predicates(a)||a.wasShadow)){if(!a.oldJson)throw Error(\"Encountered a delete event without proper oldJson\");a=JSON.stringify(this.cleanBlockJson(a.oldJson));if(!this.contents.includes(a)){for(this.contents.unshift(a);this.contents.length>this.workspace.options.maxTrashcanContents;)this.contents.pop();this.setMinOpenness(HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan)}}}cleanBlockJson(a){function b(c){if(c){delete c.id;\ndelete c.x;delete c.y;delete c.enabled;delete c.disabledReasons;if(c.icons&&c.icons.comment){var d=c.icons.comment;delete d.height;delete d.width;delete d.pinned}d=c.inputs;for(var e in d){var f=d[e];const g=f.block;f=f.shadow;g&&b(g);f&&b(f)}c.next&&(e=c.next,c=e.block,e=e.shadow,c&&b(c),e&&b(e))}}a=JSON.parse(JSON.stringify(a));b(a);return Object.assign({},{kind:\"BLOCK\"},a)}},WIDTH$$module$build$src$core$trashcan=47,BODY_HEIGHT$$module$build$src$core$trashcan=44,LID_HEIGHT$$module$build$src$core$trashcan=\n16,MARGIN_VERTICAL$$module$build$src$core$trashcan=20,MARGIN_HORIZONTAL$$module$build$src$core$trashcan=20,MARGIN_HOTSPOT$$module$build$src$core$trashcan=10,SPRITE_LEFT$$module$build$src$core$trashcan=0,SPRITE_TOP$$module$build$src$core$trashcan=32,HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan=.1,ANIMATION_LENGTH$$module$build$src$core$trashcan=80,ANIMATION_FRAMES$$module$build$src$core$trashcan=4,OPACITY_MIN$$module$build$src$core$trashcan=.4,OPACITY_MAX$$module$build$src$core$trashcan=.8,\nMAX_LID_ANGLE$$module$build$src$core$trashcan=45,module$build$src$core$trashcan={};module$build$src$core$trashcan.Trashcan=Trashcan$$module$build$src$core$trashcan;var stashedCopyData$$module$build$src$core$clipboard=null,stashedWorkspace$$module$build$src$core$clipboard=null,stashedCoordinates$$module$build$src$core$clipboard=void 0,module$build$src$core$clipboard={};module$build$src$core$clipboard.BlockPaster=BlockPaster$$module$build$src$core$clipboard$block_paster;module$build$src$core$clipboard.copy=copy$$module$build$src$core$clipboard;module$build$src$core$clipboard.getLastCopiedData=getLastCopiedData$$module$build$src$core$clipboard;\nmodule$build$src$core$clipboard.getLastCopiedLocation=getLastCopiedLocation$$module$build$src$core$clipboard;module$build$src$core$clipboard.getLastCopiedWorkspace=getLastCopiedWorkspace$$module$build$src$core$clipboard;module$build$src$core$clipboard.paste=paste$$module$build$src$core$clipboard;module$build$src$core$clipboard.registry=module$build$src$core$clipboard$registry;module$build$src$core$clipboard.setLastCopiedData=setLastCopiedData$$module$build$src$core$clipboard;\nmodule$build$src$core$clipboard.setLastCopiedLocation=setLastCopiedLocation$$module$build$src$core$clipboard;module$build$src$core$clipboard.setLastCopiedWorkspace=setLastCopiedWorkspace$$module$build$src$core$clipboard;var module$build$src$core$comments={};module$build$src$core$comments.CollapseCommentBarButton=CollapseCommentBarButton$$module$build$src$core$comments$collapse_comment_bar_button;module$build$src$core$comments.CommentBarButton=CommentBarButton$$module$build$src$core$comments$comment_bar_button;module$build$src$core$comments.CommentEditor=CommentEditor$$module$build$src$core$comments$comment_editor;module$build$src$core$comments.CommentView=CommentView$$module$build$src$core$comments$comment_view;\nmodule$build$src$core$comments.DeleteCommentBarButton=DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button;module$build$src$core$comments.RenderedWorkspaceComment=RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment;module$build$src$core$comments.WorkspaceComment=WorkspaceComment$$module$build$src$core$comments$workspace_comment;var module$build$src$core$interfaces$i_copyable={};module$build$src$core$interfaces$i_copyable.isCopyable=isCopyable$$module$build$src$core$interfaces$i_copyable;var names$$module$build$src$core$shortcut_items;(function(a){a.ESCAPE=\"escape\";a.DELETE=\"delete\";a.COPY=\"copy\";a.CUT=\"cut\";a.PASTE=\"paste\";a.UNDO=\"undo\";a.REDO=\"redo\"})(names$$module$build$src$core$shortcut_items||(names$$module$build$src$core$shortcut_items={}));registerDefaultShortcuts$$module$build$src$core$shortcut_items();var module$build$src$core$shortcut_items={};module$build$src$core$shortcut_items.names=names$$module$build$src$core$shortcut_items;\nmodule$build$src$core$shortcut_items.registerCopy=registerCopy$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerCut=registerCut$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerDefaultShortcuts=registerDefaultShortcuts$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerDelete=registerDelete$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerEscape=registerEscape$$module$build$src$core$shortcut_items;\nmodule$build$src$core$shortcut_items.registerPaste=registerPaste$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerRedo=registerRedo$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerUndo=registerUndo$$module$build$src$core$shortcut_items;var ProcedureSerializer$$module$build$src$core$serialization$procedures=class{constructor(a,b){this.procedureModelClass=a;this.parameterModelClass=b;this.priority=PROCEDURES$$module$build$src$core$serialization$priorities}save(a){a=a.getProcedureMap().getProcedures().map(b=>saveProcedure$$module$build$src$core$serialization$procedures(b));return a.length?a:null}load(a,b){const c=b.getProcedureMap();for(const d of a)c.add(loadProcedure$$module$build$src$core$serialization$procedures(this.procedureModelClass,\nthis.parameterModelClass,d,b))}clear(a){a.getProcedureMap().clear()}},module$build$src$core$serialization$procedures={};module$build$src$core$serialization$procedures.ProcedureSerializer=ProcedureSerializer$$module$build$src$core$serialization$procedures;module$build$src$core$serialization$procedures.loadProcedure=loadProcedure$$module$build$src$core$serialization$procedures;module$build$src$core$serialization$procedures.saveProcedure=saveProcedure$$module$build$src$core$serialization$procedures;var VariableSerializer$$module$build$src$core$serialization$variables=class{constructor(){this.priority=VARIABLES$$module$build$src$core$serialization$priorities}save(a){a=a.getAllVariables().map(b=>b.save());return a.length?a:null}load(a,b){const c=getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MODEL,DEFAULT$$module$build$src$core$registry);a.forEach(d=>{c==null||c.load(d,b)})}clear(a){a.getVariableMap().clear()}};\nregister$$module$build$src$core$serialization$registry(\"variables\",new VariableSerializer$$module$build$src$core$serialization$variables);var module$build$src$core$serialization$variables={};module$build$src$core$serialization$variables.VariableSerializer=VariableSerializer$$module$build$src$core$serialization$variables;var module$build$src$core$serialization$workspaces={};module$build$src$core$serialization$workspaces.load=load$$module$build$src$core$serialization$workspaces;module$build$src$core$serialization$workspaces.save=save$$module$build$src$core$serialization$workspaces;var module$build$src$core$serialization={blocks:module$build$src$core$serialization$blocks,exceptions:module$build$src$core$serialization$exceptions,priorities:module$build$src$core$serialization$priorities,procedures:module$build$src$core$serialization$procedures,registry:module$build$src$core$serialization$registry,variables:module$build$src$core$serialization$variables,workspaceComments:module$build$src$core$serialization$workspace_comments,workspaces:module$build$src$core$serialization$workspaces};\"Blockly\"in globalThis||(globalThis.Blockly={Msg:module$build$src$core$msg});var module$build$src$core$main={};var LABEL_TYPE$$module$build$src$core$label_flyout_inflater=\"label\",LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater=class{load(a,b){a=new FlyoutButton$$module$build$src$core$flyout_button(b.getWorkspace(),b.targetWorkspace,a,!0);a.show();return new FlyoutItem$$module$build$src$core$flyout_item(a,LABEL_TYPE$$module$build$src$core$label_flyout_inflater)}gapForItem(a,b){return b}disposeItem(a){a=a.getElement();a instanceof FlyoutButton$$module$build$src$core$flyout_button&&a.dispose()}getType(){return LABEL_TYPE$$module$build$src$core$label_flyout_inflater}};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,LABEL_TYPE$$module$build$src$core$label_flyout_inflater,LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater);var module$build$src$core$label_flyout_inflater={};module$build$src$core$label_flyout_inflater.LabelFlyoutInflater=LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater;var ConstantProvider$$module$build$src$core$renderers$zelos$constants=class extends ConstantProvider$$module$build$src$core$renderers$common$constants{constructor(a){super();this.GRID_UNIT=4;this.CURSOR_COLOUR=\"#ffa200\";this.CURSOR_RADIUS=5;this.JAGGED_TEETH_WIDTH=this.JAGGED_TEETH_HEIGHT=0;this.START_HAT_HEIGHT=22;this.START_HAT_WIDTH=96;this.SHAPES={HEXAGONAL:1,ROUND:2,SQUARE:3,PUZZLE:4,NOTCH:5};this.SHAPE_IN_SHAPE_PADDING={1:{0:5*this.GRID_UNIT,1:2*this.GRID_UNIT,2:5*this.GRID_UNIT,3:5*this.GRID_UNIT},\n2:{0:3*this.GRID_UNIT,1:3*this.GRID_UNIT,2:1*this.GRID_UNIT,3:2*this.GRID_UNIT},3:{0:2*this.GRID_UNIT,1:2*this.GRID_UNIT,2:2*this.GRID_UNIT,3:2*this.GRID_UNIT}};this.FULL_BLOCK_FIELDS=!0;this.FIELD_TEXT_FONTWEIGHT=\"bold\";this.FIELD_TEXT_FONTFAMILY='\"Helvetica Neue\", \"Segoe UI\", Helvetica, sans-serif';this.FIELD_COLOUR_FULL_BLOCK=this.FIELD_TEXTINPUT_BOX_SHADOW=this.FIELD_DROPDOWN_SVG_ARROW=this.FIELD_DROPDOWN_COLOURED_DIV=this.FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW=!0;this.SELECTED_GLOW_COLOUR=\"#fff200\";\nthis.SELECTED_GLOW_SIZE=.5;this.REPLACEMENT_GLOW_COLOUR=\"#fff200\";this.REPLACEMENT_GLOW_SIZE=2;this.selectedGlowFilterId=\"\";this.selectedGlowFilter=null;this.replacementGlowFilterId=\"\";this.SQUARED=this.ROUNDED=this.HEXAGONAL=this.replacementGlowFilter=null;a&&(this.GRID_UNIT=a);this.SMALL_PADDING=this.GRID_UNIT;this.MEDIUM_PADDING=2*this.GRID_UNIT;this.MEDIUM_LARGE_PADDING=3*this.GRID_UNIT;this.LARGE_PADDING=4*this.GRID_UNIT;this.CORNER_RADIUS=1*this.GRID_UNIT;this.NOTCH_WIDTH=9*this.GRID_UNIT;this.NOTCH_HEIGHT=\n2*this.GRID_UNIT;this.STATEMENT_INPUT_NOTCH_OFFSET=this.NOTCH_OFFSET_LEFT=3*this.GRID_UNIT;this.MIN_BLOCK_WIDTH=2*this.GRID_UNIT;this.MIN_BLOCK_HEIGHT=12*this.GRID_UNIT;this.EMPTY_STATEMENT_INPUT_HEIGHT=6*this.GRID_UNIT;this.TOP_ROW_MIN_HEIGHT=this.CORNER_RADIUS;this.TOP_ROW_PRECEDES_STATEMENT_MIN_HEIGHT=this.LARGE_PADDING;this.BOTTOM_ROW_MIN_HEIGHT=this.CORNER_RADIUS;this.BOTTOM_ROW_AFTER_STATEMENT_MIN_HEIGHT=6*this.GRID_UNIT;this.STATEMENT_BOTTOM_SPACER=-this.NOTCH_HEIGHT;this.STATEMENT_INPUT_SPACER_MIN_WIDTH=\n40*this.GRID_UNIT;this.STATEMENT_INPUT_PADDING_LEFT=4*this.GRID_UNIT;this.EMPTY_INLINE_INPUT_PADDING=4*this.GRID_UNIT;this.EMPTY_INLINE_INPUT_HEIGHT=8*this.GRID_UNIT;this.DUMMY_INPUT_MIN_HEIGHT=8*this.GRID_UNIT;this.DUMMY_INPUT_SHADOW_MIN_HEIGHT=6*this.GRID_UNIT;this.CURSOR_WS_WIDTH=20*this.GRID_UNIT;this.FIELD_TEXT_FONTSIZE=3*this.GRID_UNIT;this.FIELD_BORDER_RECT_RADIUS=this.CORNER_RADIUS;this.FIELD_BORDER_RECT_X_PADDING=2*this.GRID_UNIT;this.FIELD_BORDER_RECT_Y_PADDING=1.625*this.GRID_UNIT;this.FIELD_BORDER_RECT_HEIGHT=\n8*this.GRID_UNIT;this.FIELD_DROPDOWN_BORDER_RECT_HEIGHT=8*this.GRID_UNIT;this.FIELD_DROPDOWN_SVG_ARROW_PADDING=this.FIELD_BORDER_RECT_X_PADDING;this.FIELD_COLOUR_DEFAULT_WIDTH=6*this.GRID_UNIT;this.FIELD_COLOUR_DEFAULT_HEIGHT=8*this.GRID_UNIT;this.FIELD_CHECKBOX_X_OFFSET=1*this.GRID_UNIT;this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH=12*this.GRID_UNIT}setFontConstants_(a){super.setFontConstants_(a);this.FIELD_DROPDOWN_BORDER_RECT_HEIGHT=this.FIELD_BORDER_RECT_HEIGHT=this.FIELD_TEXT_HEIGHT+this.FIELD_BORDER_RECT_Y_PADDING*\n2}init(){super.init();this.HEXAGONAL=this.makeHexagonal();this.ROUNDED=this.makeRounded();this.SQUARED=this.makeSquared();this.STATEMENT_INPUT_NOTCH_OFFSET=this.NOTCH_OFFSET_LEFT+this.INSIDE_CORNERS.rightWidth}setDynamicProperties_(a){super.setDynamicProperties_(a);this.SELECTED_GLOW_COLOUR=a.getComponentStyle(\"selectedGlowColour\")||this.SELECTED_GLOW_COLOUR;const b=Number(a.getComponentStyle(\"selectedGlowSize\"));this.SELECTED_GLOW_SIZE=b&&!isNaN(b)?b:this.SELECTED_GLOW_SIZE;this.REPLACEMENT_GLOW_COLOUR=\na.getComponentStyle(\"replacementGlowColour\")||this.REPLACEMENT_GLOW_COLOUR;this.REPLACEMENT_GLOW_SIZE=(a=Number(a.getComponentStyle(\"replacementGlowSize\")))&&!isNaN(a)?a:this.REPLACEMENT_GLOW_SIZE}dispose(){super.dispose();this.selectedGlowFilter&&removeNode$$module$build$src$core$utils$dom(this.selectedGlowFilter);this.replacementGlowFilter&&removeNode$$module$build$src$core$utils$dom(this.replacementGlowFilter)}makeStartHat(){const a=this.START_HAT_HEIGHT,b=this.START_HAT_WIDTH,c=curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(25,-a),point$$module$build$src$core$utils$svg_paths(71,-a),point$$module$build$src$core$utils$svg_paths(b,0)]);return{height:a*.75,width:b,path:c}}makeHexagonal(){function a(c,d,e){var f=c/2;f=f>b?b:f;e=e?-1:1;c=(d?-1:1)*c/2;return lineTo$$module$build$src$core$utils$svg_paths(-e*f,c)+lineTo$$module$build$src$core$utils$svg_paths(e*f,c)}const b=this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH;return{type:this.SHAPES.HEXAGONAL,isDynamic:!0,width(c){c/=2;return c>\nb?b:c},height(c){return c},connectionOffsetY(c){return c/2},connectionOffsetX(c){return-c},pathDown(c){return a(c,!1,!1)},pathUp(c){return a(c,!0,!1)},pathRightDown(c){return a(c,!1,!0)},pathRightUp(c){return a(c,!1,!0)}}}makeRounded(){function a(d,e,f){const g=d>c?d-c:0;d=(d>c?c:d)/2;const h=f===e?\"0\":\"1\";return arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+h,d,point$$module$build$src$core$utils$svg_paths((f?1:-1)*d,(e?-1:1)*d))+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",(e?-1:\n1)*g)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+h,d,point$$module$build$src$core$utils$svg_paths((f?-1:1)*d,(e?-1:1)*d))}const b=this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH,c=b*2;return{type:this.SHAPES.ROUND,isDynamic:!0,width(d){d/=2;return d>b?b:d},height(d){return d},connectionOffsetY(d){return d/2},connectionOffsetX(d){return-d},pathDown(d){return a(d,!1,!1)},pathUp(d){return a(d,!0,!1)},pathRightDown(d){return a(d,!1,!0)},pathRightUp(d){return a(d,!1,!0)}}}makeSquared(){function a(c,\nd,e){c-=b*2;const f=e===d?\"0\":\"1\";return arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+f,b,point$$module$build$src$core$utils$svg_paths((e?1:-1)*b,(d?-1:1)*b))+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",(d?-1:1)*c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+f,b,point$$module$build$src$core$utils$svg_paths((e?-1:1)*b,(d?-1:1)*b))}const b=this.CORNER_RADIUS;return{type:this.SHAPES.SQUARE,isDynamic:!0,width(c){return b},height(c){return c},connectionOffsetY(c){return c/\n2},connectionOffsetX(c){return-c},pathDown(c){return a(c,!1,!1)},pathUp(c){return a(c,!0,!1)},pathRightDown(c){return a(c,!1,!0)},pathRightUp(c){return a(c,!1,!0)}}}shapeFor(a){let b=a.getCheck();!b&&a.targetConnection&&(b=a.targetConnection.getCheck());switch(a.type){case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:case ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE:a=a.getSourceBlock().getOutputShape();if(a!==null)switch(a){case this.SHAPES.HEXAGONAL:return this.HEXAGONAL;\ncase this.SHAPES.ROUND:return this.ROUNDED;case this.SHAPES.SQUARE:return this.SQUARED}if(b&&b.includes(\"Boolean\"))return this.HEXAGONAL;if(b&&b.includes(\"Number\"))return this.ROUNDED;b&&b.includes(\"String\");return this.ROUNDED;case ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT:case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:return this.NOTCH;default:throw Error(\"Unknown type\");}}makeNotch(){function a(l){return curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(l*e/2,0),point$$module$build$src$core$utils$svg_paths(l*e*3/4,g/2),point$$module$build$src$core$utils$svg_paths(l*e,g)])+line$$module$build$src$core$utils$svg_paths([point$$module$build$src$core$utils$svg_paths(l*e,f)])+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/4,g/2),point$$module$build$src$core$utils$svg_paths(l*e/2,g),point$$module$build$src$core$utils$svg_paths(l*e,g)])+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",\nl*d)+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/2,0),point$$module$build$src$core$utils$svg_paths(l*e*3/4,-(g/2)),point$$module$build$src$core$utils$svg_paths(l*e,-g)])+line$$module$build$src$core$utils$svg_paths([point$$module$build$src$core$utils$svg_paths(l*e,-f)])+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/4,-(g/2)),point$$module$build$src$core$utils$svg_paths(l*e/2,-g),point$$module$build$src$core$utils$svg_paths(l*\ne,-g)])}const b=this.NOTCH_WIDTH,c=this.NOTCH_HEIGHT,d=b/3,e=d/3,f=c/2,g=f/2,h=a(1),k=a(-1);return{type:this.SHAPES.NOTCH,width:b,height:c,pathLeft:h,pathRight:k}}makeInsideCorners(){const a=this.CORNER_RADIUS,b=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(-a,a)),c=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a,point$$module$build$src$core$utils$svg_paths(-a,a)),d=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(a,\na)),e=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a,point$$module$build$src$core$utils$svg_paths(a,a));return{width:a,height:a,pathTop:b,pathBottom:d,rightWidth:a,rightHeight:a,pathTopRight:c,pathBottomRight:e}}generateSecondaryColour_(a){return blend$$module$build$src$core$utils$colour(\"#000\",a,.15)||a}generateTertiaryColour_(a){return blend$$module$build$src$core$utils$colour(\"#000\",a,.25)||a}createDom(a,b,c,d){super.createDom(a,b,c,d);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.DEFS,\n{},a);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FILTER,{id:\"blocklySelectedGlowFilter\"+this.randomIdentifier,height:\"160%\",width:\"180%\",y:\"-30%\",x:\"-40%\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR,{\"in\":\"SourceGraphic\",stdDeviation:this.SELECTED_GLOW_SIZE},b);c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER,{result:\"outBlur\"},b);\ncreateSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFUNCA,{type:\"table\",tableValues:\"0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\"},c);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFLOOD,{\"flood-color\":this.SELECTED_GLOW_COLOUR,\"flood-opacity\":1,result:\"outColor\"},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"outColor\",in2:\"outBlur\",operator:\"in\",result:\"outGlow\"},b);\nthis.selectedGlowFilterId=b.id;this.selectedGlowFilter=b;a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FILTER,{id:\"blocklyReplacementGlowFilter\"+this.randomIdentifier,height:\"160%\",width:\"180%\",y:\"-30%\",x:\"-40%\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR,{\"in\":\"SourceGraphic\",stdDeviation:this.REPLACEMENT_GLOW_SIZE},a);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER,\n{result:\"outBlur\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFUNCA,{type:\"table\",tableValues:\"0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\"},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFLOOD,{\"flood-color\":this.REPLACEMENT_GLOW_COLOUR,\"flood-opacity\":1,result:\"outColor\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"outColor\",in2:\"outBlur\",operator:\"in\",\nresult:\"outGlow\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"SourceGraphic\",in2:\"outGlow\",operator:\"over\"},a);this.replacementGlowFilterId=a.id;this.replacementGlowFilter=a;d&&(d.style.setProperty(\"--blocklySelectedGlowFilter\",`url(#${this.selectedGlowFilterId})`),d.style.setProperty(\"--blocklyReplacementGlowFilter\",`url(#${this.replacementGlowFilterId})`))}getCSS_(a){return[`${a} .blocklyText,`,`${a} .blocklyFlyoutLabelText {`,`font: ${this.FIELD_TEXT_FONTWEIGHT} ${this.FIELD_TEXT_FONTSIZE}`+\n`pt ${this.FIELD_TEXT_FONTFAMILY};`,\"}\",`${a} .blocklyTextInputBubble textarea {`,\"font-weight: normal;\",\"}\",`${a} .blocklyText {`,\"fill: #fff;\",\"}\",`${a} .blocklyNonEditableField>rect:not(.blocklyDropdownRect),`,`${a} .blocklyEditableField>rect:not(.blocklyDropdownRect) {`,`fill: ${this.FIELD_BORDER_RECT_COLOUR};`,\"}\",`${a} .blocklyNonEditableField>text,`,`${a} .blocklyEditableField>text,`,`${a} .blocklyNonEditableField>g>text,`,`${a} .blocklyEditableField>g>text {`,\"fill: #575E75;\",\"}\",`${a} .blocklyFlyoutLabelText {`,\n\"fill: #575E75;\",\"}\",`${a} .blocklyText.blocklyBubbleText {`,\"fill: #575E75;\",\"}\",`${a} .blocklyDraggable:not(.blocklyDisabled)`,\" .blocklyEditableField:not(.blocklyEditing):hover>rect,\",`${a} .blocklyDraggable:not(.blocklyDisabled)`,\" .blocklyEditableField:not(.blocklyEditing):hover>.blocklyPath {\",\"stroke: #fff;\",\"stroke-width: 2;\",\"}\",`${a} .blocklyHtmlInput {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,`font-weight: ${this.FIELD_TEXT_FONTWEIGHT};`,\"color: #575E75;\",\"}\",`${a} .blocklyDropdownText {`,\n\"fill: #fff !important;\",\"}\",`${a}.blocklyWidgetDiv .blocklyMenuItem,`,`${a}.blocklyDropDownDiv .blocklyMenuItem {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,\"}\",`${a}.blocklyDropDownDiv .blocklyMenuItemContent {`,\"color: #fff;\",\"}\",`${a} .blocklyHighlightedConnectionPath {`,`stroke: ${this.SELECTED_GLOW_COLOUR};`,\"}\",`${a} .blocklyDisabledPattern > .blocklyOutlinePath {`,\"fill: var(--blocklyDisabledPattern)\",\"}\",`${a} .blocklyInsertionMarker>.blocklyPath {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\n\"stroke: none;\",\"}\",`${a} .blocklySelected>.blocklyPath.blocklyPathSelected {`,\"fill: none;\",\"filter: var(--blocklySelectedGlowFilter);\",\"}\",`${a} .blocklyReplaceable>.blocklyPath {`,\"filter: var(--blocklyReplacementGlowFilter);\",\"}\"]}},module$build$src$core$renderers$zelos$constants={};module$build$src$core$renderers$zelos$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$zelos$constants;var Drawer$$module$build$src$core$renderers$zelos$drawer=class extends Drawer$$module$build$src$core$renderers$common$drawer{constructor(a,b){super(a,b)}draw(){const a=this.block_.pathObject;a.beginDrawing();this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();a.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);this.info_.RTL&&a.flipRTL();this.recordSizeOnBlock_();this.info_.outputConnection&&(a.outputShapeType=this.info_.outputConnection.shape.type);a.endDrawing()}drawOutline_(){this.info_.outputConnection&&\nthis.info_.outputConnection.isDynamicShape&&!this.info_.hasStatementInput&&!this.info_.bottomRow.hasNextConnection?(this.drawFlatTop_(),this.drawRightDynamicConnection_(),this.drawFlatBottom_(),this.drawLeftDynamicConnection_()):super.drawOutline_()}drawLeft_(){this.info_.outputConnection&&this.info_.outputConnection.isDynamicShape?this.drawLeftDynamicConnection_():super.drawLeft_()}drawRightSideRow_(a){if(!(a.height<=0)){if(Types$$module$build$src$core$renderers$measurables$types.isSpacer(a)){const d=\na.precedesStatement;var b=a.followsStatement;if(d||b){const e=this.constants_.INSIDE_CORNERS;var c=e.rightHeight;c=a.height-(d?c:0);b=b?e.pathBottomRight:\"\";a=c>0?lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+c):\"\";this.outlinePath_+=b+a+(d?e.pathTopRight:\"\");return}}this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+a.height)}}drawRightDynamicConnection_(){if(!this.info_.outputConnection)throw Error(\"Cannot draw the output connection of a block that doesn't have one\");\nthis.outlinePath_+=this.info_.outputConnection.shape.pathRightDown(this.info_.outputConnection.height)}drawLeftDynamicConnection_(){if(!this.info_.outputConnection)throw Error(\"Cannot draw the output connection of a block that doesn't have one\");this.positionOutputConnection_();this.outlinePath_+=this.info_.outputConnection.shape.pathUp(this.info_.outputConnection.height);this.outlinePath_+=\"z\"}drawFlatTop_(){const a=this.info_.topRow;this.positionPreviousConnection_();this.outlinePath_+=moveBy$$module$build$src$core$utils$svg_paths(a.xPos,\nthis.info_.startY);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",a.width)}drawFlatBottom_(){const a=this.info_.bottomRow;this.positionNextConnection_();this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.baseline);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-a.width)}drawInlineInput_(a){this.positionInlineInputConnection_(a);const b=a.input.name;a.connectedBlock||this.info_.isInsertionMarker||(a=moveTo$$module$build$src$core$utils$svg_paths(a.xPos+\na.connectionWidth,a.centerline-a.height/2)+this.getInlineInputPath(a),this.block_.pathObject.setOutlinePath(b,a))}getInlineInputPath(a){const b=a.width-a.connectionWidth*2,c=a.height;return lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",b)+a.shape.pathRightDown(c)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-b)+a.shape.pathUp(c)+\"z\"}drawStatementInput_(a){var b=a.getLastInput();const c=b.xPos+b.notchOffset+b.shape.width,d=this.constants_.INSIDE_CORNERS,e=b.shape.pathRight+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",\n-(b.notchOffset-d.width))+d.pathTop,f=a.height-2*d.height;b=d.pathBottom+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",b.notchOffset-d.width)+(b.connectedBottomNextConnection?\"\":b.shape.pathLeft);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",c)+e+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",f)+b+lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",a.xPos+a.width);this.positionStatementInputConnection_(a)}drawConnectionHighlightPath(a){const b=a.connectionModel;\nif(b.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE&&!a.isDynamicShape)return super.drawConnectionHighlightPath(a);a=b.type===ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE?moveTo$$module$build$src$core$utils$svg_paths(a.connectionWidth,-a.height/2)+this.getInlineInputPath(a):moveTo$$module$build$src$core$utils$svg_paths(a.width,\n-a.height/2)+a.shape.pathDown(a.height);const c=b.getSourceBlock();let d,e;return(e=(d=c.pathObject).addConnectionHighlight)==null?void 0:e.call(d,b,a,b.getOffsetInBlock(),c.RTL)}},module$build$src$core$renderers$zelos$drawer={};module$build$src$core$renderers$zelos$drawer.Drawer=Drawer$$module$build$src$core$renderers$zelos$drawer;var FieldImage$$module$build$src$core$field_image=class extends Field$$module$build$src$core$field{constructor(a,b,c,d,e,f,g){super(Field$$module$build$src$core$field.SKIP_SETUP);this.imageElement=this.clickHandler=null;this.flipRtl=this.isDirty_=this.EDITABLE=!1;this.altText=\"\";c=Number(replaceMessageReferences$$module$build$src$core$utils$parsing(c));b=Number(replaceMessageReferences$$module$build$src$core$utils$parsing(b));if(isNaN(c)||isNaN(b))throw Error(\"Height and width values of an image field must cast to numbers.\");\nif(c<=0||b<=0)throw Error(\"Height and width values of an image field must be greater than 0.\");this.size_=new Size$$module$build$src$core$utils$size(b,c+FieldImage$$module$build$src$core$field_image.Y_PADDING);this.imageHeight=c;typeof e===\"function\"&&(this.clickHandler=e);a!==Field$$module$build$src$core$field.SKIP_SETUP&&(g?this.configure_(g):(this.flipRtl=!!f,this.altText=replaceMessageReferences$$module$build$src$core$utils$parsing(d)||\"\"),this.setValue(replaceMessageReferences$$module$build$src$core$utils$parsing(a)))}configure_(a){super.configure_(a);\na.flipRtl&&(this.flipRtl=a.flipRtl);a.alt&&(this.altText=replaceMessageReferences$$module$build$src$core$utils$parsing(a.alt))}initView(){this.imageElement=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{height:this.imageHeight+\"px\",width:this.size_.width+\"px\",alt:this.altText},this.fieldGroup_);this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.value_);this.fieldGroup_&&addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\n\"blocklyImageField\");this.clickHandler&&(this.imageElement.style.cursor=\"pointer\")}updateSize_(){}doClassValidation_(a){return typeof a!==\"string\"?null:a}doValueUpdate_(a){this.value_=a;this.imageElement&&this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.value_)}getFlipRtl(){return this.flipRtl}setAlt(a){a!==this.altText&&(this.altText=a||\"\",this.imageElement&&this.imageElement.setAttribute(\"alt\",this.altText))}isClickable(){return super.isClickable()&&!!this.clickHandler}showEditor_(){this.clickHandler&&\nthis.clickHandler(this)}setOnClickHandler(a){this.clickHandler=a}getText_(){return this.altText}static fromJson(a){if(!a.src||!a.width||!a.height)throw Error(\"src, width, and height values for an image field arerequired. The width and height must be non-zero.\");return new this(a.src,a.width,a.height,void 0,void 0,void 0,a)}};FieldImage$$module$build$src$core$field_image.Y_PADDING=1;register$$module$build$src$core$field_registry(\"field_image\",FieldImage$$module$build$src$core$field_image);\nFieldImage$$module$build$src$core$field_image.prototype.DEFAULT_VALUE=\"\";var module$build$src$core$field_image={};module$build$src$core$field_image.FieldImage=FieldImage$$module$build$src$core$field_image;var MINIMUM_WIDTH$$module$build$src$core$field_input=14,FieldInput$$module$build$src$core$field_input=class extends Field$$module$build$src$core$field{set size_(a){super.size_=a}get size_(){const a=super.size_;a.width{a!==null&&this.setValue(this.getValueFromEditorText_(a));this.onFinishEditing_(this.value_)})}showInlineEditor(a,b){const c=this.getSourceBlock();if(!c)throw new UnattachedFieldError$$module$build$src$core$field;show$$module$build$src$core$widgetdiv(this,c.RTL,this.widgetDispose_.bind(this),this.workspace_,b);this.htmlInput_=this.widgetCreate_();this.isBeingEdited_=!0;this.valueWhenEditorWasOpened_=this.value_;a||(this.htmlInput_.focus({preventScroll:!0}),this.htmlInput_.select())}widgetCreate_(){var a=\nthis.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;$.setGroup$$module$build$src$core$events$utils(!0);const b=getDiv$$module$build$src$core$widgetdiv();var c=this.getClickTarget_();if(!c)throw Error(\"A click target has not been set.\");addClass$$module$build$src$core$utils$dom(c,\"blocklyEditing\");c=document.createElement(\"input\");c.className=\"blocklyHtmlInput\";c.setAttribute(\"spellcheck\",this.spellcheck_);const d=this.workspace_.getAbsoluteScale();var e=this.getConstants().FIELD_TEXT_FONTSIZE*\nd+\"pt\";b.style.fontSize=e;c.style.fontSize=e;e=FieldInput$$module$build$src$core$field_input.BORDERRADIUS*d+\"px\";this.isFullBlockField()&&(e=this.getScaledBBox(),e=(e.bottom-e.top)/2+\"px\",a=a.getParent()?a.getParent().getColourTertiary():this.sourceBlock_.getColourTertiary(),c.style.border=1*d+\"px solid \"+a,b.style.borderRadius=e,b.style.transition=\"box-shadow 0.25s ease 0s\",this.getConstants().FIELD_TEXTINPUT_BOX_SHADOW&&(b.style.boxShadow=\"rgba(255, 255, 255, 0.3) 0 0 0 \"+4*d+\"px\"));c.style.borderRadius=\ne;b.appendChild(c);c.value=c.defaultValue=this.getEditorText_(this.value_);c.setAttribute(\"data-untyped-default-value\",String(this.value_));this.resizeEditor_();this.bindInputEvents_(c);return c}widgetDispose_(){this.isBeingEdited_=!1;this.isTextValid_=!0;this.forceRerender();this.onFinishEditing_(this.value_);this.sourceBlock_&&isEnabled$$module$build$src$core$events$utils()&&this.valueWhenEditorWasOpened_!==null&&this.valueWhenEditorWasOpened_!==this.value_&&(fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock_,\n\"field\",this.name||null,this.valueWhenEditorWasOpened_,this.value_)),this.valueWhenEditorWasOpened_=null);$.setGroup$$module$build$src$core$events$utils(!1);this.unbindInputEvents_();var a=getDiv$$module$build$src$core$widgetdiv().style;a.width=\"auto\";a.height=\"auto\";a.fontSize=\"\";a.transition=\"\";a.boxShadow=\"\";this.htmlInput_=null;a=this.getClickTarget_();if(!a)throw Error(\"A click target has not been set.\");removeClass$$module$build$src$core$utils$dom(a,\"blocklyEditing\")}onFinishEditing_(a){}bindInputEvents_(a){this.onKeyDownWrapper=\nconditionalBind$$module$build$src$core$browser_events(a,\"keydown\",this,this.onHtmlInputKeyDown_);this.onInputWrapper=conditionalBind$$module$build$src$core$browser_events(a,\"input\",this,this.onHtmlInputChange)}unbindInputEvents_(){this.onKeyDownWrapper&&(unbind$$module$build$src$core$browser_events(this.onKeyDownWrapper),this.onKeyDownWrapper=null);this.onInputWrapper&&(unbind$$module$build$src$core$browser_events(this.onInputWrapper),this.onInputWrapper=null)}onHtmlInputKeyDown_(a){if(a.key===\"Enter\")hideIfOwner$$module$build$src$core$widgetdiv(this),\nhideWithoutAnimation$$module$build$src$core$dropdowndiv();else if(a.key===\"Escape\")this.setValue(this.htmlInput_.getAttribute(\"data-untyped-default-value\"),!1),hideIfOwner$$module$build$src$core$widgetdiv(this),hideWithoutAnimation$$module$build$src$core$dropdowndiv();else if(a.key===\"Tab\"){a.preventDefault();var b,c=(b=this.workspace_)==null?void 0:b.getCursor();b=d=>(d instanceof FieldInput$$module$build$src$core$field_input||d instanceof BlockSvg$$module$build$src$core$block_svg&&d.isSimpleReporter())&&\nd!==this.getSourceBlock();a=a.shiftKey?c==null?void 0:c.getPreviousNode(this,b,!1):c==null?void 0:c.getNextNode(this,b,!1);a=a instanceof BlockSvg$$module$build$src$core$block_svg&&a.isSimpleReporter()?a.getFields().next().value:a;a instanceof FieldInput$$module$build$src$core$field_input&&(hideIfOwner$$module$build$src$core$widgetdiv(this),hideWithoutAnimation$$module$build$src$core$dropdowndiv(),c=a.getSourceBlock(),a.isFullBlockField()&&c&&c instanceof BlockSvg$$module$build$src$core$block_svg?\n$.getFocusManager$$module$build$src$core$focus_manager().focusNode(c):$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a),a.showEditor())}}onHtmlInputChange(a){a=this.value_;this.setValue(this.getValueFromEditorText_(this.htmlInput_.value),!1);this.sourceBlock_&&isEnabled$$module$build$src$core$events$utils()&&this.value_!==a&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_FIELD_INTERMEDIATE_CHANGE))(this.sourceBlock_,\nthis.name||null,a,this.value_))}setEditorValue_(a,b=!0){this.isDirty_=!0;this.isBeingEdited_&&(this.htmlInput_.value=this.getEditorText_(a));this.setValue(a,b)}resizeEditor_(){finishQueuedRenders$$module$build$src$core$render_management().then(()=>{const a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;const b=getDiv$$module$build$src$core$widgetdiv(),c=this.getScaledBBox();b.style.width=c.right-c.left+\"px\";b.style.height=c.bottom-c.top+\"px\";const d=c.top;\nb.style.left=`${a.RTL?c.right-b.offsetWidth:c.left}px`;b.style.top=`${d}px`})}repositionForWindowResize(){let a;const b=(a=this.getSourceBlock())==null?void 0:a.getRootBlock();if(!(b instanceof BlockSvg$$module$build$src$core$block_svg))return!1;bumpObjectIntoBounds$$module$build$src$core$bump_objects(this.workspace_,this.workspace_.getMetricsManager().getViewMetrics(!0),b)||this.resizeEditor_();return!0}positionTextElement_(a,b){const c=a*2+b;super.positionTextElement_(a+(c0;this.rightSide=this.outputConnection?new RightConnectionShape$$module$build$src$core$renderers$zelos$measurables$row_elements(this.constants_):null;this.rightAlignedDummyInputs=new WeakMap}getRenderer(){return this.renderer_}measure(){this.createRows_();this.addElemSpacing_();this.addRowSpacing_();this.adjustXPosition_();this.computeBounds_();this.alignRowElements_();this.finalize_()}shouldStartNewRow_(a,b){return b?b instanceof EndRowInput$$module$build$src$core$inputs$end_row_input||\na instanceof StatementInput$$module$build$src$core$inputs$statement_input||b instanceof StatementInput$$module$build$src$core$inputs$statement_input?!0:a instanceof $.ValueInput$$module$build$src$core$inputs$value_input||a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input?!this.isInline||this.isMultiRow:!1:!1}getDesiredRowWidth_(a){return a.hasStatement?this.width-this.startX-(this.constants_.INSIDE_CORNERS.rightWidth||\n0):super.getDesiredRowWidth_(a)}getInRowSpacing_(a,b){return a&&b||!this.outputConnection||!this.outputConnection.isDynamicShape||this.hasStatementInput||this.bottomRow.hasNextConnection?!a&&b&&Types$$module$build$src$core$renderers$measurables$types.isStatementInput(b)?this.constants_.STATEMENT_INPUT_PADDING_LEFT:a&&Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(a)&&b&&(Types$$module$build$src$core$renderers$measurables$types.isPreviousConnection(b)||Types$$module$build$src$core$renderers$measurables$types.isNextConnection(b))?\nb.notchOffset-this.constants_.CORNER_RADIUS:a&&Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(a)&&b&&Types$$module$build$src$core$renderers$measurables$types.isHat(b)||a&&Types$$module$build$src$core$renderers$measurables$types.isField(a)&&a.width===0?this.constants_.NO_PADDING:this.constants_.MEDIUM_PADDING:this.constants_.NO_PADDING}getSpacerRowHeight_(a,b){if(Types$$module$build$src$core$renderers$measurables$types.isTopRow(a)&&Types$$module$build$src$core$renderers$measurables$types.isBottomRow(b))return this.constants_.EMPTY_BLOCK_SPACER_HEIGHT;\nconst c=Types$$module$build$src$core$renderers$measurables$types.isInputRow(a)&&a.hasStatement,d=Types$$module$build$src$core$renderers$measurables$types.isInputRow(b)&&b.hasStatement;return d||c?(a=Math.max(this.constants_.NOTCH_HEIGHT,this.constants_.INSIDE_CORNERS.rightHeight||0),d&&c?Math.max(a,this.constants_.DUMMY_INPUT_MIN_HEIGHT):a):Types$$module$build$src$core$renderers$measurables$types.isTopRow(a)?a.hasPreviousConnection||this.outputConnection&&!this.hasStatementInput?this.constants_.NO_PADDING:\nMath.abs(this.constants_.NOTCH_HEIGHT-this.constants_.CORNER_RADIUS):Types$$module$build$src$core$renderers$measurables$types.isBottomRow(b)?this.outputConnection?!b.hasNextConnection&&this.hasStatementInput?Math.abs(this.constants_.NOTCH_HEIGHT-this.constants_.CORNER_RADIUS):this.constants_.NO_PADDING:Math.max(this.topRow.minHeight,Math.max(this.constants_.NOTCH_HEIGHT,this.constants_.CORNER_RADIUS))-this.constants_.CORNER_RADIUS:this.constants_.MEDIUM_PADDING}getSpacerRowWidth_(a,b){const c=this.width-\nthis.startX;return Types$$module$build$src$core$renderers$measurables$types.isInputRow(a)&&a.hasStatement||Types$$module$build$src$core$renderers$measurables$types.isInputRow(b)&&b.hasStatement?Math.max(c,this.constants_.STATEMENT_INPUT_SPACER_MIN_WIDTH):c}getElemCenterline_(a,b){if(a.hasStatement&&!Types$$module$build$src$core$renderers$measurables$types.isSpacer(b)&&!Types$$module$build$src$core$renderers$measurables$types.isStatementInput(b))return a.yPos+this.constants_.EMPTY_STATEMENT_INPUT_HEIGHT/\n2;if(Types$$module$build$src$core$renderers$measurables$types.isInlineInput(b)){const c=b.connectedBlock;if(c&&c.outputConnection&&c.nextConnection)return a.yPos+c.height/2}return super.getElemCenterline_(a,b)}addInput_(a,b){if((a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input)&&b.hasDummyInput&&b.align===$.Align$$module$build$src$core$inputs$align.LEFT&&a.align===$.Align$$module$build$src$core$inputs$align.RIGHT)this.rightAlignedDummyInputs.set(b,\na);else if(a instanceof StatementInput$$module$build$src$core$inputs$statement_input){b.elements.push(new StatementInput$$module$build$src$core$renderers$zelos$measurables$inputs(this.constants_,a));b.hasStatement=!0;b.align===null&&(b.align=a.align);return}super.addInput_(a,b)}addAlignmentPadding_(a,b){if(this.rightAlignedDummyInputs.get(a)){let c;for(let d=0;d=this.rows.length-1?!!this.bottomRow.hasNextConnection:!!d.precedesStatement;if(Types$$module$build$src$core$renderers$measurables$types.isInputRow(f)&&\nf.hasStatement){f.measure();let g,h;b=f.width-((h=(g=f.getLastInput())==null?void 0:g.width)!=null?h:0)+a}else if(c&&(e===2||d)&&Types$$module$build$src$core$renderers$measurables$types.isInputRow(f)&&!f.hasStatement){d=f.xPos;c=null;for(let g=0;g1)switch(c){case d.SHAPES.ROUND:return c=this.constants_.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH,c=this.height/2>c?c:this.height/2,b-c*(1-Math.sin(Math.acos((c-this.constants_.SMALL_PADDING)/c)));default:return 0}if(Types$$module$build$src$core$renderers$measurables$types.isInlineInput(a)){const e=a.connectedBlock;a=\ne?e.pathObject.outputShapeType:a.shape.type;return a==null||e&&e.outputConnection&&(e.statementInputCount||e.nextConnection)||c===d.SHAPES.HEXAGONAL&&c!==a?0:b-this.constants_.SHAPE_IN_SHAPE_PADDING[c][a]}return Types$$module$build$src$core$renderers$measurables$types.isField(a)?c===d.SHAPES.ROUND&&a.field instanceof $.FieldTextInput$$module$build$src$core$field_textinput?b-2.75*d.GRID_UNIT:b-this.constants_.SHAPE_IN_SHAPE_PADDING[c][0]:Types$$module$build$src$core$renderers$measurables$types.isIcon(a)?\nthis.constants_.SMALL_PADDING:0}finalizeVerticalAlignment_(){if(!this.outputConnection)for(let d=2;d=this.rows.length-1?!!this.bottomRow.hasNextConnection:!!g.precedesStatement;if(a?this.topRow.hasPreviousConnection:e.followsStatement){var c=f.elements[1];c=f.elements.length===3&&c instanceof Field$$module$build$src$core$renderers$measurables$field&&(c.field instanceof FieldLabel$$module$build$src$core$field_label||\nc.field instanceof FieldImage$$module$build$src$core$field_image);if(!a&&c)e.height-=this.constants_.SMALL_PADDING,g.height-=this.constants_.SMALL_PADDING,f.height-=this.constants_.MEDIUM_PADDING;else if(!a&&!b)e.height+=this.constants_.SMALL_PADDING;else if(b){a=!1;for(b=0;b=40){a=!0;break}a&&\n(e.height-=this.constants_.SMALL_PADDING,g.height-=this.constants_.SMALL_PADDING)}}}}finalize_(){this.finalizeOutputConnection_();this.finalizeHorizontalAlignment_();this.finalizeVerticalAlignment_();super.finalize_();this.rightSide&&(this.widthWithChildren+=this.rightSide.width)}},module$build$src$core$renderers$zelos$info={};module$build$src$core$renderers$zelos$info.RenderInfo=RenderInfo$$module$build$src$core$renderers$zelos$info;var PathObject$$module$build$src$core$renderers$zelos$path_object=class extends PathObject$$module$build$src$core$renderers$common$path_object{constructor(a,b,c){super(a,b,c);this.svgPathSelected=null;this.outlines=new Map;this.remainingOutlines=new Set;this.outputShapeType=null;this.constants=c}setPath(a){super.setPath(a);this.svgPathSelected&&this.svgPathSelected.setAttribute(\"d\",a)}applyColour(a){super.applyColour(a);const b=a.getParent();a.isShadow()&&b&&this.svgPath.setAttribute(\"stroke\",b.getColourTertiary());\nfor(const c of this.outlines.values())c.setAttribute(\"fill\",this.style.colourTertiary)}flipRTL(){super.flipRTL();for(const a of this.outlines.values())a.setAttribute(\"transform\",\"scale(-1 1)\")}updateSelected(a){this.setClass_(\"blocklySelected\",a);a?this.svgPathSelected||(this.svgPathSelected=this.svgPath.cloneNode(!0),this.svgPathSelected.classList.add(\"blocklyPathSelected\"),removeClass$$module$build$src$core$utils$dom(this.svgPathSelected,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME),\nremoveClass$$module$build$src$core$utils$dom(this.svgPathSelected,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME),this.svgPathSelected.removeAttribute(\"tabindex\"),this.svgPathSelected.removeAttribute(\"id\"),this.svgRoot.appendChild(this.svgPathSelected)):this.svgPathSelected&&(this.svgRoot.removeChild(this.svgPathSelected),this.svgPathSelected=null)}updateReplacementFade(a){this.setClass_(\"blocklyReplaceable\",a)}updateShapeForInputHighlight(a,b){a=a.getParentInput().name;\n(a=this.getOutlinePath(a))&&(b?a.setAttribute(\"filter\",\"url(#\"+this.constants.replacementGlowFilterId+\")\"):a.removeAttribute(\"filter\"))}beginDrawing(){this.remainingOutlines.clear();for(const a of this.outlines.keys())this.remainingOutlines.add(a)}endDrawing(){if(this.remainingOutlines.size)for(const a of this.remainingOutlines)this.removeOutlinePath(a);this.remainingOutlines.clear()}setOutlinePath(a,b){a=this.getOutlinePath(a);a.setAttribute(\"d\",b);a.setAttribute(\"fill\",this.style.colourTertiary)}getOutlinePath(a){this.outlines.has(a)||\nthis.outlines.set(a,createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyOutlinePath\",d:\"\"},this.svgRoot));this.remainingOutlines.delete(a);return this.outlines.get(a)}removeOutlinePath(a){let b,c;(b=this.outlines.get(a))==null||(c=b.parentNode)==null||c.removeChild(this.outlines.get(a));this.outlines.delete(a)}},module$build$src$core$renderers$zelos$path_object={};module$build$src$core$renderers$zelos$path_object.PathObject=PathObject$$module$build$src$core$renderers$zelos$path_object;var Renderer$$module$build$src$core$renderers$zelos$renderer=class extends Renderer$$module$build$src$core$renderers$common$renderer{constructor(a){super(a)}makeConstants_(){return new ConstantProvider$$module$build$src$core$renderers$zelos$constants}makeRenderInfo_(a){return new RenderInfo$$module$build$src$core$renderers$zelos$info(this,a)}makeDrawer_(a,b){return new Drawer$$module$build$src$core$renderers$zelos$drawer(a,b)}makePathObject(a,b){return new PathObject$$module$build$src$core$renderers$zelos$path_object(a,\nb,this.getConstants())}getConstants(){return this.constants_}};register$$module$build$src$core$renderers$common$block_rendering(\"zelos\",Renderer$$module$build$src$core$renderers$zelos$renderer);var module$build$src$core$renderers$zelos$renderer={};module$build$src$core$renderers$zelos$renderer.Renderer=Renderer$$module$build$src$core$renderers$zelos$renderer;var InsertionMarkerPreviewer$$module$build$src$core$insertion_marker_previewer=class{constructor(a){this.staticConn=this.draggedConn=this.markerConn=this.fadedBlock=null;this.workspace=a.workspace}previewReplacement(a,b,c){$.disable$$module$build$src$core$events$utils();try{this.hidePreview(),this.fadedBlock=c,c.fadeForReplacement(!0),this.workspace.getRenderer().shouldHighlightConnection(b)&&(b.highlight(),this.staticConn=b)}finally{$.enable$$module$build$src$core$events$utils()}}previewConnection(a,\nb){if(a!==this.draggedConn||b!==this.staticConn){$.disable$$module$build$src$core$events$utils();try{this.hidePreview(),this.shouldUseMarkerPreview(a,b)&&(this.markerConn=this.previewMarker(a,b)),this.workspace.getRenderer().shouldHighlightConnection(b)&&b.highlight(),this.draggedConn=a,this.staticConn=b}finally{$.enable$$module$build$src$core$events$utils()}}}shouldUseMarkerPreview(a,b){return b.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||\n!(this.workspace.getRenderer()instanceof Renderer$$module$build$src$core$renderers$zelos$renderer)}previewMarker(a,b){const c=a.getSourceBlock(),d=this.createInsertionMarker(c),e=this.getMatchingConnection(c,d,a);if(!e)return null;d.queueRender();triggerQueuedRenders$$module$build$src$core$render_management();e.connect(b);const f={x:b.x-e.x,y:b.y-e.y},g=e.getOffsetInBlock().clone();finishQueuedRenders$$module$build$src$core$render_management().then(()=>{if(!d.isDeadOrDying()){$.disable$$module$build$src$core$events$utils();\ntry{d==null||d.positionNearConnection(e,f,g),d==null||d.getSvgRoot().setAttribute(\"visibility\",\"visible\")}finally{$.enable$$module$build$src$core$events$utils()}}});return e}serializeBlockToInsertionMarker(a){const b=save$$module$build$src$core$serialization$blocks(a,{addCoordinates:!1,addInputBlocks:!1,addNextBlocks:!1,doFullSerialization:!1});if(!b)throw Error(`Failed to serialize source block. ${a.toDevString()}`);return b}createInsertionMarker(a){a=this.serializeBlockToInsertionMarker(a);a=append$$module$build$src$core$serialization$blocks(a,\nthis.workspace);for(const b of a.getDescendants(!1))b.setInsertionMarker(!0);a.initSvg();a.getSvgRoot().setAttribute(\"visibility\",\"hidden\");return a}getMatchingConnection(a,b,c){a=a.getConnections_(!0);b=b.getConnections_(!0);if(a.length!==b.length)return null;for(let d=0;d-b||a<-180+b||a>180-b?!0:!1}getClientRect(){if(!this.svgGroup_||this.autoClose||!this.isVisible())return null;const a=this.svgGroup_.getBoundingClientRect(),b=a.left;return this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.LEFT?new Rect$$module$build$src$core$utils$rect(-1E9,1E9,-1E9,b+a.width):new Rect$$module$build$src$core$utils$rect(-1E9,1E9,b,1E9)}reflowInternal_(){this.workspace_.scale=this.getFlyoutScale();\nlet a=this.getContents().reduce((b,c)=>Math.max(b,c.getElement().getBoundingRectangle().getWidth()),0);a+=this.MARGIN*1.5+this.tabWidth_;a*=this.workspace_.scale;a+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;if(this.getWidth()!==a){if(this.RTL)for(const b of this.getContents()){const c=b.getElement().getBoundingRectangle().left,d=a/this.workspace_.scale-b.getElement().getBoundingRectangle().getWidth()-this.MARGIN-this.tabWidth_;b.getElement().moveBy(d-c,0)}this.targetWorkspace.scrollbar||\nthis.autoClose||this.targetWorkspace.getFlyout()!==this||this.toolboxPosition_!==Position$$module$build$src$core$utils$toolbox.LEFT||this.targetWorkspace.translate(this.targetWorkspace.scrollX+a,this.targetWorkspace.scrollY);this.width_=a;this.position();this.targetWorkspace.resizeContents();this.targetWorkspace.recordDragTargets()}}};VerticalFlyout$$module$build$src$core$flyout_vertical.registryName=\"verticalFlyout\";\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,DEFAULT$$module$build$src$core$registry,VerticalFlyout$$module$build$src$core$flyout_vertical);var module$build$src$core$flyout_vertical={};module$build$src$core$flyout_vertical.VerticalFlyout=VerticalFlyout$$module$build$src$core$flyout_vertical;var HorizontalFlyout$$module$build$src$core$flyout_horizontal=class extends Flyout$$module$build$src$core$flyout_base{constructor(a){super(a);this.horizontalLayout=!0}setMetrics_(a){if(this.isVisible()){var b=this.workspace_.getMetricsManager(),c=b.getScrollMetrics(),d=b.getViewMetrics();b=b.getAbsoluteMetrics();typeof a.x===\"number\"&&(this.workspace_.scrollX=-(c.left+(c.width-d.width)*a.x));this.workspace_.translate(this.workspace_.scrollX+b.left,this.workspace_.scrollY+b.top)}}getX(){return 0}getY(){if(!this.isVisible())return 0;\nvar a=this.targetWorkspace.getMetricsManager();const b=a.getAbsoluteMetrics(),c=a.getViewMetrics();a=a.getToolboxMetrics();const d=this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.TOP;return this.targetWorkspace.toolboxPosition===this.toolboxPosition_?this.targetWorkspace.getToolbox()?d?a.height:c.height-this.getHeight():d?0:c.height:d?0:c.height+b.top-this.getHeight()}position(){if(this.isVisible()&&this.targetWorkspace.isVisible()){var a=this.targetWorkspace.getMetricsManager().getViewMetrics();\nthis.width_=a.width;a=a.width-2*this.CORNER_RADIUS;var b=this.getHeight()-this.CORNER_RADIUS;this.setBackgroundPath(a,b);a=this.getX();b=this.getY();this.positionAt_(this.getWidth(),this.getHeight(),a,b)}}setBackgroundPath(a,b){const c=this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.TOP,d=[\"M 0,\"+(c?0:this.CORNER_RADIUS)];c?(d.push(\"h\",a+2*this.CORNER_RADIUS),d.push(\"v\",b),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,-this.CORNER_RADIUS,this.CORNER_RADIUS),d.push(\"h\",\n-a),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,-this.CORNER_RADIUS,-this.CORNER_RADIUS)):(d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,this.CORNER_RADIUS,-this.CORNER_RADIUS),d.push(\"h\",a),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,this.CORNER_RADIUS,this.CORNER_RADIUS),d.push(\"v\",b),d.push(\"h\",-a-2*this.CORNER_RADIUS));d.push(\"z\");this.svgBackground_.setAttribute(\"d\",d.join(\" \"))}scrollToStart(){let a;(a=this.workspace_.scrollbar)==null||a.setX(this.RTL?Infinity:\n0)}wheel_(a){var b=getScrollDeltaPixels$$module$build$src$core$browser_events(a);if(b=b.x||b.y){const c=this.workspace_.getMetricsManager(),d=c.getScrollMetrics();b=c.getViewMetrics().left-d.left+b;let e;(e=this.workspace_.scrollbar)==null||e.setX(b);hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv(this.workspace_);hideWithoutAnimation$$module$build$src$core$dropdowndiv()}a.preventDefault();a.stopPropagation()}layout_(a){this.workspace_.scale=this.targetWorkspace.scale;const b=this.MARGIN;\nlet c=b+this.tabWidth_;this.RTL&&(a=a.reverse());for(const d of a)a=d.getElement().getBoundingRectangle(),a=this.RTL?c+a.getWidth():c,d.getElement().moveBy(a,b),c+=d.getElement().getBoundingRectangle().getWidth()}isDragTowardWorkspace(a){a=Math.atan2(a.y,a.x)/Math.PI*180;const b=this.dragAngleRange_;return a<90+b&&a>90-b||a>-90-b&&a<-90+b?!0:!1}getClientRect(){if(!this.svgGroup_||this.autoClose||!this.isVisible())return null;const a=this.svgGroup_.getBoundingClientRect(),b=a.top;return this.toolboxPosition_===\nPosition$$module$build$src$core$utils$toolbox.TOP?new Rect$$module$build$src$core$utils$rect(-1E9,b+a.height,-1E9,1E9):new Rect$$module$build$src$core$utils$rect(b,1E9,-1E9,1E9)}reflowInternal_(){this.workspace_.scale=this.getFlyoutScale();let a=this.getContents().reduce((b,c)=>Math.max(b,c.getElement().getBoundingRectangle().getHeight()),0);a+=this.MARGIN*1.5;a*=this.workspace_.scale;a+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;this.getHeight()!==a&&(this.targetWorkspace.scrollbar||\nthis.autoClose||this.targetWorkspace.getFlyout()!==this||this.toolboxPosition_!==Position$$module$build$src$core$utils$toolbox.TOP||this.targetWorkspace.translate(this.targetWorkspace.scrollX,this.targetWorkspace.scrollY+a),this.height_=a,this.position(),this.targetWorkspace.resizeContents(),this.targetWorkspace.recordDragTargets())}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,DEFAULT$$module$build$src$core$registry,HorizontalFlyout$$module$build$src$core$flyout_horizontal);\nvar module$build$src$core$flyout_horizontal={};module$build$src$core$flyout_horizontal.HorizontalFlyout=HorizontalFlyout$$module$build$src$core$flyout_horizontal;var FieldVariable$$module$build$src$core$field_variable=class extends FieldDropdown$$module$build$src$core$field_dropdown{constructor(a,b,c,d,e){super(Field$$module$build$src$core$field.SKIP_SETUP);this.defaultType=\"\";this.variableTypes=[];this.variable=null;this.SERIALIZABLE=!0;this.menuGenerator_=FieldVariable$$module$build$src$core$field_variable.dropdownCreate;this.defaultVariableName=typeof a===\"string\"?a:\"\";this.size_=new Size$$module$build$src$core$utils$size(0,0);a!==Field$$module$build$src$core$field.SKIP_SETUP&&\n(e?this.configure_(e):this.setTypes(c,d),b&&this.setValidator(b))}configure_(a){super.configure_(a);this.setTypes(a.variableTypes,a.defaultType)}initModel(){var a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;this.variable||(a=$.getOrCreateVariablePackage$$module$build$src$core$variables(a.workspace,null,this.defaultVariableName,this.defaultType),this.doValueUpdate_(a.getId()))}initView(){super.initView();addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\n\"blocklyVariableField\")}shouldAddBorderRect_(){const a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;return super.shouldAddBorderRect_()&&(!this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW||a.type!==\"variables_get\")}fromXml(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;const c=a.getAttribute(\"id\"),d=a.textContent,e=a.getAttribute(\"variabletype\")||a.getAttribute(\"variableType\")||\"\";b=$.getOrCreateVariablePackage$$module$build$src$core$variables(b.workspace,\nc,d,e);if(e!==null&&e!==b.getType())throw Error(\"Serialized variable type with id '\"+b.getId()+\"' had type \"+b.getType()+\", and does not match variable field that references it: \"+domToText$$module$build$src$core$xml(a)+\".\");this.setValue(b.getId())}toXml(a){this.initModel();a.id=this.variable.getId();a.textContent=this.variable.getName();this.variable.getType()&&a.setAttribute(\"variabletype\",this.variable.getType());return a}saveState(a){var b=this.saveLegacyState(FieldVariable$$module$build$src$core$field_variable);\nif(b!==null)return b;this.initModel();b={id:this.variable.getId()};a&&(b.name=this.variable.getName(),b.type=this.variable.getType());return b}loadState(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.loadLegacyState(FieldVariable$$module$build$src$core$field_variable,a)||(a=$.getOrCreateVariablePackage$$module$build$src$core$variables(b.workspace,a.id||null,a.name,a.type||\"\"),this.setValue(a.getId()))}setSourceBlock(a){if(a.isShadow())throw Error(\"Variable fields are not allowed to exist on shadow blocks.\");\nsuper.setSourceBlock(a)}getValue(){return this.variable?this.variable.getId():null}getText(){return this.variable?this.variable.getName():\"\"}getVariable(){return this.variable}getDefaultType(){return this.defaultType}getValidator(){return this.variable?this.validator_:null}doClassValidation_(a){if(a===null)return null;var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;b=$.getVariable$$module$build$src$core$variables(b.workspace,a);if(!b)return console.warn(\"Variable id doesn't point to a real variable! ID was \"+\na),null;b=b.getType();return this.typeIsAllowed(b)?a:(console.warn(\"Variable type doesn't match this field! Type was \"+b),null)}doValueUpdate_(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.variable=$.getVariable$$module$build$src$core$variables(b.workspace,a);super.doValueUpdate_(a)}typeIsAllowed(a){const b=this.getVariableTypes();if(!b)return!0;for(let c=0;c-Infinity&&(a.min=`${this.min_}`,setState$$module$build$src$core$utils$aria(a,State$$module$build$src$core$utils$aria.VALUEMIN,this.min_));this.max_c.isInFlyout=!0);this.addBlockListeners(a);return new FlyoutItem$$module$build$src$core$flyout_item(a,BLOCK_TYPE$$module$build$src$core$block_flyout_inflater)}createBlock(a,b){a.blockxml?(a=typeof a.blockxml===\"string\"?$.textToDom$$module$build$src$core$utils$xml(a.blockxml):a.blockxml,b=domToBlockInternal$$module$build$src$core$xml(a,b)):(a.enabled===void 0&&(a.enabled=a.disabled!==\"true\"&&a.disabled!==!0),a.disabledReasons===\nvoid 0&&a.enabled===!1&&(a.disabledReasons=[MANUALLY_DISABLED$$module$build$src$core$constants]),\"x\"in a&&delete a.x,\"y\"in a&&delete a.y,b=appendInternal$$module$build$src$core$serialization$blocks(a,b));return b}gapForItem(a,b){let c;a.gap?c=parseInt(String(a.gap)):a.blockxml&&(a=typeof a.blockxml===\"string\"?$.textToDom$$module$build$src$core$utils$xml(a.blockxml):a.blockxml,c=parseInt(a.getAttribute(\"gap\")));return!c||isNaN(c)?b:c}disposeItem(a){a=a.getElement();a instanceof BlockSvg$$module$build$src$core$block_svg&&\n(this.removeListeners(a.id),a.dispose(!1,!1))}removeListeners(a){let b;((b=this.listeners.get(a))!=null?b:[]).forEach(c=>unbind$$module$build$src$core$browser_events(c));this.listeners.delete(a)}setFlyout(a){if(this.flyout!==a){if(this.flyout){let c;(c=this.flyout.targetWorkspace)==null||c.removeChangeListener(this.capacityWrapper)}this.flyout=a;var b;(b=this.flyout.targetWorkspace)==null||b.addChangeListener(this.capacityWrapper)}}updateStateBasedOnCapacity(a){let b,c;const d=(b=this.flyout)==null?\nvoid 0:(c=b.targetWorkspace)==null?void 0:c.isCapacityAvailable(getBlockTypeCounts$$module$build$src$core$common(a));for(;a;)a.setDisabledReason(!d,WORKSPACE_AT_BLOCK_CAPACITY_DISABLED_REASON$$module$build$src$core$block_flyout_inflater),a=a.getNextBlock()}addBlockListeners(a){const b=[];b.push(conditionalBind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointerdown\",a,c=>{let d,e;const f=(d=this.flyout)==null?void 0:(e=d.targetWorkspace)==null?void 0:e.getGesture(c);f&&this.flyout&&(f.setStartBlock(a),\nf.handleFlyoutStart(c,this.flyout))}));b.push(bind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointermove\",null,()=>{let c,d;((c=this.flyout)==null?0:(d=c.targetWorkspace)==null?0:d.isDragging())||a.addSelect()}));b.push(bind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointerleave\",null,()=>{let c,d;((c=this.flyout)==null?0:(d=c.targetWorkspace)==null?0:d.isDragging())||a.removeSelect()}));this.listeners.set(a.id,b)}filterFlyoutBasedOnCapacity(a){!this.flyout||a&&a.type!==EventType$$module$build$src$core$events$type.BLOCK_CREATE&&\na.type!==EventType$$module$build$src$core$events$type.BLOCK_DELETE||this.flyout.getWorkspace().getTopBlocks(!1).forEach(b=>{this.permanentlyDisabledBlocks.has(b)||this.updateStateBasedOnCapacity(b)})}getType(){return BLOCK_TYPE$$module$build$src$core$block_flyout_inflater}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,BLOCK_TYPE$$module$build$src$core$block_flyout_inflater,BlockFlyoutInflater$$module$build$src$core$block_flyout_inflater);\nvar module$build$src$core$block_flyout_inflater={};module$build$src$core$block_flyout_inflater.BlockFlyoutInflater=BlockFlyoutInflater$$module$build$src$core$block_flyout_inflater;var module$build$src$core$interfaces$i_paster={};module$build$src$core$interfaces$i_paster.isPaster=isPaster$$module$build$src$core$interfaces$i_paster;var module$build$src$core$interfaces$i_rendered_element={};module$build$src$core$interfaces$i_rendered_element.isRenderedElement=isRenderedElement$$module$build$src$core$interfaces$i_rendered_element;var ConstantProvider$$module$build$src$core$renderers$geras$constants=class extends ConstantProvider$$module$build$src$core$renderers$common$constants{constructor(){super();this.FIELD_TEXT_BASELINE_CENTER=!1;this.DARK_PATH_OFFSET=1;this.MAX_BOTTOM_WIDTH=30;this.STATEMENT_BOTTOM_SPACER=-this.NOTCH_HEIGHT/2}getCSS_(a){return super.getCSS_(a).concat([`${a} .blocklyInsertionMarker>.blocklyPathLight,`,`${a} .blocklyInsertionMarker>.blocklyPathDark {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\"stroke: none;\",\n\"}\"])}},module$build$src$core$renderers$geras$constants={};module$build$src$core$renderers$geras$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$geras$constants;var Highlighter$$module$build$src$core$renderers$geras$highlighter=class{constructor(a){this.inlineSteps_=this.steps_=\"\";this.info_=a;this.RTL_=this.info_.RTL;a=a.getRenderer();this.constants_=a.getConstants();this.highlightConstants_=a.getHighlightConstants();this.highlightOffset=this.highlightConstants_.OFFSET;this.outsideCornerPaths_=this.highlightConstants_.OUTSIDE_CORNER;this.insideCornerPaths_=this.highlightConstants_.INSIDE_CORNER;this.puzzleTabPaths_=this.highlightConstants_.PUZZLE_TAB;this.notchPaths_=\nthis.highlightConstants_.NOTCH;this.startPaths_=this.highlightConstants_.START_HAT;this.jaggedTeethPaths_=this.highlightConstants_.JAGGED_TEETH}getPath(){return this.steps_+\"\\n\"+this.inlineSteps_}drawTopCorner(a){this.steps_+=moveBy$$module$build$src$core$utils$svg_paths(a.xPos,this.info_.startY);for(let b=0,c;c=a.elements[b];b++)Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(c)?this.steps_+=this.highlightConstants_.START_POINT:Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(c)?\nthis.steps_+=this.outsideCornerPaths_.topLeft(this.RTL_):Types$$module$build$src$core$renderers$measurables$types.isPreviousConnection(c)?this.steps_+=this.notchPaths_.pathLeft:Types$$module$build$src$core$renderers$measurables$types.isHat(c)?this.steps_+=this.startPaths_.path(this.RTL_):Types$$module$build$src$core$renderers$measurables$types.isSpacer(c)&&c.width!==0&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",c.xPos+c.width-this.highlightOffset));this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",\na.xPos+a.width-this.highlightOffset)}drawJaggedEdge_(a){this.info_.RTL&&(this.steps_+=this.jaggedTeethPaths_.pathLeft+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a.height-this.jaggedTeethPaths_.height-this.highlightOffset))}drawValueInput(a){const b=a.getLastInput();if(this.RTL_){const c=a.height-b.connectionHeight;this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos+b.width-this.highlightOffset,a.yPos)+this.puzzleTabPaths_.pathDown(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",\nc)}else this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos+b.width,a.yPos)+this.puzzleTabPaths_.pathDown(this.RTL_)}drawStatementInput(a){const b=a.getLastInput();if(b)if(this.RTL_){const c=a.height-2*this.insideCornerPaths_.height;this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos,a.yPos)+this.insideCornerPaths_.pathTop(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",c)+this.insideCornerPaths_.pathBottom(this.RTL_)+lineTo$$module$build$src$core$utils$svg_paths(a.width-\nb.xPos-this.insideCornerPaths_.width,0)}else this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos,a.yPos+a.height)+this.insideCornerPaths_.pathBottom(this.RTL_)+lineTo$$module$build$src$core$utils$svg_paths(a.width-b.xPos-this.insideCornerPaths_.width,0)}drawRightSideRow(a){const b=a.xPos+a.width-this.highlightOffset;a instanceof SpacerRow$$module$build$src$core$renderers$measurables$spacer_row&&a.followsStatement&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",b));\nthis.RTL_&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",b),a.height>this.highlightOffset&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+a.height-this.highlightOffset)))}drawBottomRow(a){if(this.RTL_)this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.baseline-this.highlightOffset);else{const b=this.info_.bottomRow.elements[0];Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(b)?this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(a.xPos+\nthis.highlightOffset,a.baseline-this.highlightOffset):Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(b)&&(this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(a.xPos,a.baseline),this.steps_+=this.outsideCornerPaths_.bottomLeft())}}drawLeft(){var a=this.info_.outputConnection;a&&(a=a.connectionOffsetY+a.height,this.RTL_?this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(this.info_.startX,a):(this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(this.info_.startX+\nthis.highlightOffset,this.info_.bottomRow.baseline-this.highlightOffset),this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a)),this.steps_+=this.puzzleTabPaths_.pathUp(this.RTL_));this.RTL_||(a=this.info_.topRow,Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(a.elements[0])?this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",this.outsideCornerPaths_.height):this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.capline+this.highlightOffset))}drawInlineInput(a){const b=\nthis.highlightOffset,c=a.xPos+a.connectionWidth;var d=a.centerline-a.height/2;const e=a.width-a.connectionWidth,f=d+b;this.RTL_?(d=a.connectionOffsetY-b,a=a.height-(a.connectionOffsetY+a.connectionHeight)+b,this.inlineSteps_+=moveTo$$module$build$src$core$utils$svg_paths(c-b,f)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",d)+this.puzzleTabPaths_.pathDown(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",e)):this.inlineSteps_+=\nmoveTo$$module$build$src$core$utils$svg_paths(a.xPos+a.width+b,f)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a.height)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-e)+moveTo$$module$build$src$core$utils$svg_paths(c,d+a.connectionOffsetY)+this.puzzleTabPaths_.pathDown(this.RTL_)}},module$build$src$core$renderers$geras$highlighter={};module$build$src$core$renderers$geras$highlighter.Highlighter=Highlighter$$module$build$src$core$renderers$geras$highlighter;var Drawer$$module$build$src$core$renderers$geras$drawer=class extends Drawer$$module$build$src$core$renderers$common$drawer{constructor(a,b){super(a,b);this.highlighter_=new Highlighter$$module$build$src$core$renderers$geras$highlighter(b)}draw(){this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();const a=this.block_.pathObject;a.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);a.setHighlightPath(this.highlighter_.getPath());this.info_.RTL&&a.flipRTL();this.recordSizeOnBlock_()}drawTop_(){this.highlighter_.drawTopCorner(this.info_.topRow);\nthis.highlighter_.drawRightSideRow(this.info_.topRow);super.drawTop_()}drawJaggedEdge_(a){this.highlighter_.drawJaggedEdge_(a);super.drawJaggedEdge_(a)}drawValueInput_(a){this.highlighter_.drawValueInput(a);super.drawValueInput_(a)}drawStatementInput_(a){this.highlighter_.drawStatementInput(a);super.drawStatementInput_(a)}drawRightSideRow_(a){this.highlighter_.drawRightSideRow(a);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",a.xPos+a.width)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",\na.yPos+a.height)}drawBottom_(){this.highlighter_.drawBottomRow(this.info_.bottomRow);super.drawBottom_()}drawLeft_(){this.highlighter_.drawLeft();super.drawLeft_()}drawInlineInput_(a){this.highlighter_.drawInlineInput(a);super.drawInlineInput_(a)}positionInlineInputConnection_(a){const b=a.centerline-a.height/2;if(a.connectionModel){let c=a.xPos+a.connectionWidth+this.constants_.DARK_PATH_OFFSET;this.info_.RTL&&(c*=-1);a.connectionModel.setOffsetInBlock(c,b+a.connectionOffsetY+this.constants_.DARK_PATH_OFFSET)}}positionStatementInputConnection_(a){const b=\na.getLastInput();if(b==null?0:b.connectionModel){let c=a.xPos+a.statementEdge+b.notchOffset;c=this.info_.RTL?c*-1:c+this.constants_.DARK_PATH_OFFSET;b.connectionModel.setOffsetInBlock(c,a.yPos+this.constants_.DARK_PATH_OFFSET)}}positionExternalValueConnection_(a){const b=a.getLastInput();if(b&&b.connectionModel){let c=a.xPos+a.width+this.constants_.DARK_PATH_OFFSET;this.info_.RTL&&(c*=-1);b.connectionModel.setOffsetInBlock(c,a.yPos)}}positionNextConnection_(){const a=this.info_.bottomRow;if(a.connection){const b=\na.connection,c=b.xPos;b.connectionModel.setOffsetInBlock((this.info_.RTL?-c:c)+this.constants_.DARK_PATH_OFFSET/2,a.baseline+this.constants_.DARK_PATH_OFFSET)}}},module$build$src$core$renderers$geras$drawer={};module$build$src$core$renderers$geras$drawer.Drawer=Drawer$$module$build$src$core$renderers$geras$drawer;var HighlightConstantProvider$$module$build$src$core$renderers$geras$highlight_constants=class{constructor(a){this.OFFSET=.5;this.constantProvider=a;this.START_POINT=moveBy$$module$build$src$core$utils$svg_paths(this.OFFSET,this.OFFSET)}init(){this.INSIDE_CORNER=this.makeInsideCorner();this.OUTSIDE_CORNER=this.makeOutsideCorner();this.PUZZLE_TAB=this.makePuzzleTab();this.NOTCH=this.makeNotch();this.JAGGED_TEETH=this.makeJaggedTeeth();this.START_HAT=this.makeStartHat()}makeInsideCorner(){const a=this.constantProvider.CORNER_RADIUS,\nb=this.OFFSET,c=(1-Math.SQRT1_2)*(a+b)-b,d=moveBy$$module$build$src$core$utils$svg_paths(c,c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(-c-b,a-c)),e=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a+b,point$$module$build$src$core$utils$svg_paths(a+b,a+b)),f=moveBy$$module$build$src$core$utils$svg_paths(c,-c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a+b,point$$module$build$src$core$utils$svg_paths(a-c,c+b));return{width:a+\nb,height:a,pathTop(g){return g?d:\"\"},pathBottom(g){return g?e:f}}}makeOutsideCorner(){const a=this.constantProvider.CORNER_RADIUS,b=this.OFFSET,c=(1-Math.SQRT1_2)*(a-b)+b,d=moveBy$$module$build$src$core$utils$svg_paths(c,c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(a-c,-c+b)),e=moveBy$$module$build$src$core$utils$svg_paths(b,a)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(a,-a+\nb)),f=-c,g=moveBy$$module$build$src$core$utils$svg_paths(c,f)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(-c+b,-f-a));return{height:a,topLeft(h){return h?d:e},bottomLeft(){return g}}}makePuzzleTab(){const a=this.constantProvider.TAB_WIDTH,b=this.constantProvider.TAB_HEIGHT,c=moveBy$$module$build$src$core$utils$svg_paths(-2,-b+2.5+.9)+lineTo$$module$build$src$core$utils$svg_paths(a*-.45,-2.1),d=lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",\n2.5)+moveBy$$module$build$src$core$utils$svg_paths(-a*.97,2.5)+curve$$module$build$src$core$utils$svg_paths(\"q\",[point$$module$build$src$core$utils$svg_paths(-a*.05,10),point$$module$build$src$core$utils$svg_paths(a*.3,9.5)])+moveBy$$module$build$src$core$utils$svg_paths(a*.67,-1.9)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",2.5),e=lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",-1.5)+moveBy$$module$build$src$core$utils$svg_paths(a*-.92,-.5)+curve$$module$build$src$core$utils$svg_paths(\"q\",\n[point$$module$build$src$core$utils$svg_paths(a*-.19,-5.5),point$$module$build$src$core$utils$svg_paths(0,-11)])+moveBy$$module$build$src$core$utils$svg_paths(a*.92,1),f=moveBy$$module$build$src$core$utils$svg_paths(-5,b-.7)+lineTo$$module$build$src$core$utils$svg_paths(a*.46,-2.1);return{width:a,height:b,pathUp(g){return g?c:e},pathDown(g){return g?d:f}}}makeNotch(){return{pathLeft:lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",this.OFFSET)+this.constantProvider.NOTCH.pathLeft}}makeJaggedTeeth(){return{pathLeft:lineTo$$module$build$src$core$utils$svg_paths(5.1,\n2.6)+moveBy$$module$build$src$core$utils$svg_paths(-10.2,6.8)+lineTo$$module$build$src$core$utils$svg_paths(5.1,2.6),height:12,width:10.2}}makeStartHat(){const a=this.constantProvider.START_HAT.height,b=moveBy$$module$build$src$core$utils$svg_paths(25,-8.7)+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(29.7,-6.2),point$$module$build$src$core$utils$svg_paths(57.2,-.5),point$$module$build$src$core$utils$svg_paths(75,8.7)]),c=curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(17.8,-9.2),point$$module$build$src$core$utils$svg_paths(45.3,-14.9),point$$module$build$src$core$utils$svg_paths(75,-8.7)])+moveTo$$module$build$src$core$utils$svg_paths(100.5,a+.5);return{path(d){return d?b:c}}}},module$build$src$core$renderers$geras$highlight_constants={};module$build$src$core$renderers$geras$highlight_constants.HighlightConstantProvider=HighlightConstantProvider$$module$build$src$core$renderers$geras$highlight_constants;var InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input=class extends InlineInput$$module$build$src$core$renderers$measurables$inline_input{constructor(a,b){super(a,b);this.constants_=a;this.connectedBlock&&(this.width+=this.constants_.DARK_PATH_OFFSET,this.height+=this.constants_.DARK_PATH_OFFSET)}},module$build$src$core$renderers$geras$measurables$inline_input={};module$build$src$core$renderers$geras$measurables$inline_input.InlineInput=InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input;var StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input=class extends StatementInput$$module$build$src$core$renderers$measurables$statement_input{constructor(a,b){super(a,b);this.constants_=a;this.connectedBlock&&(this.height+=this.constants_.DARK_PATH_OFFSET)}},module$build$src$core$renderers$geras$measurables$statement_input={};module$build$src$core$renderers$geras$measurables$statement_input.StatementInput=StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input;var RenderInfo$$module$build$src$core$renderers$geras$info=class extends RenderInfo$$module$build$src$core$renderers$common$info{constructor(a,b){super(a,b);this.renderer_=a}getRenderer(){return this.renderer_}populateBottomRow_(){super.populateBottomRow_();this.block_.inputList.length&&this.block_.inputList[this.block_.inputList.length-1]instanceof StatementInput$$module$build$src$core$inputs$statement_input||(this.bottomRow.minHeight=this.constants_.MEDIUM_PADDING-this.constants_.DARK_PATH_OFFSET)}addInput_(a,\nb){if(this.isInline&&a instanceof $.ValueInput$$module$build$src$core$inputs$value_input)b.elements.push(new InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input(this.constants_,a)),b.hasInlineInput=!0;else if(a instanceof StatementInput$$module$build$src$core$inputs$statement_input)b.elements.push(new StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input(this.constants_,a)),b.hasStatement=!0;else if(a instanceof $.ValueInput$$module$build$src$core$inputs$value_input)b.elements.push(new ExternalValueInput$$module$build$src$core$renderers$measurables$external_value_input(this.constants_,\na)),b.hasExternalInput=!0;else if(a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input)b.minHeight=Math.max(b.minHeight,this.constants_.DUMMY_INPUT_MIN_HEIGHT),b.hasDummyInput=!0;this.isInline||b.align!==null||(b.align=a.align)}addElemSpacing_(){let a=!1;for(let c=0,d;d=this.rows[c];c++)d.hasExternalInput&&(a=!0);for(let c=0,d;d=this.rows[c];c++){var b=d.elements;d.elements=[];d.startsWithElemSpacer()&&d.elements.push(new InRowSpacer$$module$build$src$core$renderers$measurables$in_row_spacer(this.constants_,\nthis.getInRowSpacing_(null,b[0])));if(b.length){for(let e=0;e0&&this.addAlignmentPadding_(e,a),a=e.width)}else super.alignRowElements_()}getDesiredRowWidth_(a){return this.isInline&&a.hasStatement?this.statementEdge+\nthis.constants_.MAX_BOTTOM_WIDTH+this.startX:super.getDesiredRowWidth_(a)}finalize_(){let a=0,b=0;for(let d=0,e;e=this.rows[d];d++){e.yPos=b;e.xPos=this.startX;b+=e.height;a=Math.max(a,e.widthWithConnectedBlocks);var c=b-this.topRow.ascenderHeight;e===this.bottomRow&&c>>/sprites.png);\\n height: 16px;\\n vertical-align: middle;\\n visibility: hidden;\\n width: 16px;\\n}\\n\\n.blocklyToolboxCategoryIconClosed {\\n background-position: -32px -1px;\\n}\\n\\n.blocklyToolbox[dir=\"RTL\"] .blocklyToolboxCategoryIconClosed {\\n background-position: 0 -1px;\\n}\\n\\n.blocklyToolboxSelected>.blocklyToolboxCategoryIconClosed {\\n background-position: -32px -17px;\\n}\\n\\n.blocklyToolbox[dir=\"RTL\"] .blocklyToolboxSelected>.blocklyToolboxCategoryIconClosed {\\n background-position: 0 -17px;\\n}\\n\\n.blocklyToolboxCategoryIconOpen {\\n background-position: -16px -1px;\\n}\\n\\n.blocklyToolboxSelected>.blocklyToolboxCategoryIconOpen {\\n background-position: -16px -17px;\\n}\\n\\n.blocklyToolboxCategoryLabel {\\n cursor: default;\\n font: 16px sans-serif;\\n padding: 0 3px;\\n vertical-align: middle;\\n}\\n\\n.blocklyToolboxDelete .blocklyToolboxCategoryLabel {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyToolboxSelected .blocklyToolboxCategoryLabel {\\n color: #fff;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX_ITEM,ToolboxCategory$$module$build$src$core$toolbox$category.registrationName,ToolboxCategory$$module$build$src$core$toolbox$category);var module$build$src$core$toolbox$category={};module$build$src$core$toolbox$category.ToolboxCategory=ToolboxCategory$$module$build$src$core$toolbox$category;var ToolboxSeparator$$module$build$src$core$toolbox$separator=class extends ToolboxItem$$module$build$src$core$toolbox$toolbox_item{constructor(a,b){super(a,b);this.cssConfig_={container:\"blocklyTreeSeparator\"};this.htmlDiv=null;Object.assign(this.cssConfig_,a.cssconfig||a.cssConfig)}init(){this.createDom_()}createDom_(){const a=document.createElement(\"div\");a.tabIndex=-1;a.id=this.getId();const b=this.cssConfig_.container;b&&addClass$$module$build$src$core$utils$dom(a,b);return this.htmlDiv=a}getDiv(){return this.htmlDiv}dispose(){removeNode$$module$build$src$core$utils$dom(this.htmlDiv)}};\nToolboxSeparator$$module$build$src$core$toolbox$separator.registrationName=\"sep\";register$$module$build$src$core$css('\\n.blocklyTreeSeparator {\\n border-bottom: solid #e5e5e5 1px;\\n height: 0;\\n margin: 5px 0;\\n}\\n\\n.blocklyToolbox[layout=\"h\"] .blocklyTreeSeparator {\\n border-right: solid #e5e5e5 1px;\\n border-bottom: none;\\n height: auto;\\n margin: 0 5px 0 5px;\\n padding: 5px 0;\\n width: 0;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX_ITEM,ToolboxSeparator$$module$build$src$core$toolbox$separator.registrationName,ToolboxSeparator$$module$build$src$core$toolbox$separator);var module$build$src$core$toolbox$separator={};module$build$src$core$toolbox$separator.ToolboxSeparator=ToolboxSeparator$$module$build$src$core$toolbox$separator;var CollapsibleToolboxCategory$$module$build$src$core$toolbox$collapsible_category=class extends ToolboxCategory$$module$build$src$core$toolbox$category{constructor(a,b,c){super(a,b,c);this.subcategoriesDiv_=null;this.expanded_=!1;this.toolboxItems_=[]}makeDefaultCssConfig_(){const a=super.makeDefaultCssConfig_();a.contents=\"blocklyToolboxCategoryGroup\";return a}parseContents_(a){if(\"custom\"in a)this.flyoutItems_=a.custom;else{const b=a.contents;if(b){this.flyoutItems_=[];a=!0;for(let c=0;cb.dispose());this.contents.clear();this.renderContents_(a.contents);this.position();this.handleToolboxItemResize()}renderContents_(a){const b=document.createDocumentFragment();\nfor(let c=0;c\n{a.refreshTheme&&a.refreshTheme()})}refreshSelection(){this.selectedItem_&&this.selectedItem_.isSelectable()&&this.selectedItem_.getContents().length&&this.flyout.show(this.selectedItem_.getContents())}setVisible(a){this.isVisible_!==a&&(this.HtmlDiv.style.display=a?\"block\":\"none\",this.isVisible_=a,this.workspace_.recordDragTargets())}autoHide(a){!a&&this.flyout&&this.flyout.autoClose&&this.clearSelection()}setSelectedItem(a){const b=this.selectedItem_;!a&&!b||a&&!isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item(a)||\n(this.shouldDeselectItem_(b,a)&&b!==null&&this.deselectItem_(b),this.shouldSelectItem_(b,a)&&a!==null&&this.selectItem_(b,a),this.updateFlyout_(b,a),this.fireSelectEvent(b,a))}shouldDeselectItem_(a,b){return a!==null&&(!a.isCollapsible()||a!==b)}shouldSelectItem_(a,b){return b!==null&&b!==a}deselectItem_(a){this.selectedItem_=null;this.previouslySelectedItem_=a;a.setSelected(!1);setState$$module$build$src$core$utils$aria(this.contentsDiv_,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,\"\")}selectItem_(a,\nb){this.selectedItem_=b;this.previouslySelectedItem_=a;b.setSelected(!0);setState$$module$build$src$core$utils$aria(this.contentsDiv_,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,b.getId())}selectItemByPosition(a){(a=this.getToolboxItems()[a])&&this.setSelectedItem(a)}updateFlyout_(a,b){b&&(a!==b||b.isCollapsible())&&b.getContents().length?(this.flyout.show(b.getContents()),this.flyout.scrollToStart()):this.flyout.hide()}fireSelectEvent(a,b){const c=a&&a.getName();let d=b&&b.getName();\na===b&&(d=null);a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.TOOLBOX_ITEM_SELECT))(c,d,this.workspace_.id);fire$$module$build$src$core$events$utils(a)}selectParent(){return this.selectedItem_?this.selectedItem_.isCollapsible()&&this.selectedItem_.isExpanded()?(this.selectedItem_.toggleExpanded(),!0):this.selectedItem_.getParent()&&this.selectedItem_.getParent().isSelectable()?(this.setSelectedItem(this.selectedItem_.getParent()),!0):!1:!1}selectChild(){if(!this.selectedItem_||\n!this.selectedItem_.isCollapsible())return!1;const a=this.selectedItem_;a.isExpanded()?this.selectNext():a.toggleExpanded();return!0}selectNext(){if(!this.selectedItem_)return!1;const a=[...this.contents.values()];let b=a.indexOf(this.selectedItem_)+1;if(b>-1&&b-1&&ba.dispose());for(let a=0;ac.isSelectable()))!=null?b:null}return null}getNestedTrees(){return[]}lookUpFocusableNode(a){return this.getToolboxItemById(a)}onTreeFocus(a,\nb){a!==this?this.getSelectedItem()!==a&&this.setSelectedItem(a):this.clearSelection()}onTreeBlur(a){let b;a&&a===((b=this.flyout)==null?void 0:b.getWorkspace())||this.autoHide(!1)}};register$$module$build$src$core$css('\\n.blocklyToolboxDelete {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyToolboxGrab {\\n cursor: url(\"<<>>/handclosed.cur\"), auto;\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n}\\n\\n/* Category tree in Toolbox. */\\n.blocklyToolbox {\\n box-sizing: border-box;\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background-color: #ddd;\\n overflow-x: visible;\\n overflow-y: auto;\\n padding: 4px 0 4px 0;\\n position: absolute;\\n z-index: 70; /* so blocks go under toolbox when dragging */\\n -webkit-tap-highlight-color: transparent; /* issue #1345 */\\n}\\n\\n.blocklyToolboxCategoryGroup {\\n display: flex;\\n flex-wrap: wrap;\\n flex-direction: column;\\n}\\n\\n.blocklyToolboxCategoryGroup:focus {\\n outline: none;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX,DEFAULT$$module$build$src$core$registry,Toolbox$$module$build$src$core$toolbox$toolbox);var module$build$src$core$toolbox$toolbox={};module$build$src$core$toolbox$toolbox.Toolbox=Toolbox$$module$build$src$core$toolbox$toolbox;var module$build$src$core$interfaces$i_navigation_policy={};var VERSION$$module$build$src$core$blockly=\"12.3.1\",INPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE,OUTPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE,NEXT_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT,PREVIOUS_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT,\nTOOLBOX_AT_TOP$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.TOP,TOOLBOX_AT_BOTTOM$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.BOTTOM,TOOLBOX_AT_LEFT$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.LEFT,TOOLBOX_AT_RIGHT$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.RIGHT,svgResize$$module$build$src$core$blockly=svgResize$$module$build$src$core$common,getMainWorkspace$$module$build$src$core$blockly=\ngetMainWorkspace$$module$build$src$core$common,getSelected$$module$build$src$core$blockly=getSelected$$module$build$src$core$common,defineBlocksWithJsonArray$$module$build$src$core$blockly=defineBlocksWithJsonArray$$module$build$src$core$common,setParentContainer$$module$build$src$core$blockly=setParentContainer$$module$build$src$core$common,COLLAPSE_CHARS$$module$build$src$core$blockly=COLLAPSE_CHARS$$module$build$src$core$internal_constants,OPPOSITE_TYPE$$module$build$src$core$blockly=OPPOSITE_TYPE$$module$build$src$core$internal_constants,\nRENAME_VARIABLE_ID$$module$build$src$core$blockly=RENAME_VARIABLE_ID$$module$build$src$core$internal_constants,DELETE_VARIABLE_ID$$module$build$src$core$blockly=DELETE_VARIABLE_ID$$module$build$src$core$internal_constants,COLLAPSED_INPUT_NAME$$module$build$src$core$blockly=COLLAPSED_INPUT_NAME$$module$build$src$core$constants,COLLAPSED_FIELD_NAME$$module$build$src$core$blockly=COLLAPSED_FIELD_NAME$$module$build$src$core$constants,VARIABLE_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$variables,\nVARIABLE_DYNAMIC_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$variables_dynamic,PROCEDURE_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$procedures;Workspace$$module$build$src$core$workspace.prototype.newBlock=function(a,b){return new Block$$module$build$src$core$block(this,a,b)};WorkspaceSvg$$module$build$src$core$workspace_svg.prototype.newBlock=function(a,b){return new BlockSvg$$module$build$src$core$block_svg(this,a,b)};\nWorkspace$$module$build$src$core$workspace.prototype.newComment=function(a){return new WorkspaceComment$$module$build$src$core$comments$workspace_comment(this,a)};WorkspaceSvg$$module$build$src$core$workspace_svg.prototype.newComment=function(a){return new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(this,a)};WorkspaceSvg$$module$build$src$core$workspace_svg.newTrashcan=function(a){return new Trashcan$$module$build$src$core$trashcan(a)};\nMiniWorkspaceBubble$$module$build$src$core$bubbles$mini_workspace_bubble.prototype.newWorkspaceSvg=function(a){return new WorkspaceSvg$$module$build$src$core$workspace_svg(a)};$.Names$$module$build$src$core$names.prototype.populateProcedures=function(a){a=allProcedures$$module$build$src$core$procedures(a);a=a[0].concat(a[1]);for(let b=0;b0,text:c.replace(\"%1\",d.getText()),callback:$.callbackFactory$$module$build$src$core$contextmenu(this,b)})}else if(this.type===\"variables_get_dynamic\"||this.type===\"variables_get_reporter_dynamic\")c={text:$.Msg$$module$build$src$core$msg.RENAME_VARIABLE,\nenabled:!0,callback:renameOptionCallbackFactory$$module$build$src$blocks$variables_dynamic(this)},d=this.getField(\"VAR\").getText(),d={text:$.Msg$$module$build$src$core$msg.DELETE_VARIABLE.replace(\"%1\",d),enabled:!0,callback:deleteOptionCallbackFactory$$module$build$src$blocks$variables_dynamic(this)},a.unshift(c),a.unshift(d)},onchange:function(a){a=this.getFieldValue(\"VAR\");a=$.getVariable$$module$build$src$core$variables(this.workspace,a);this.type===\"variables_get_dynamic\"?this.outputConnection.setCheck(a.getType()):\nthis.getInput(\"VALUE\").connection.setCheck(a.getType())}},renameOptionCallbackFactory$$module$build$src$blocks$variables_dynamic=function(a){return function(){const b=a.workspace,c=a.getField(\"VAR\").getVariable();$.renameVariable$$module$build$src$core$variables(b,c)}},deleteOptionCallbackFactory$$module$build$src$blocks$variables_dynamic=function(a){return function(){const b=a.getField(\"VAR\").getVariable();b&&$.deleteVariable$$module$build$src$core$variables(b.getWorkspace(),b,a)}};\n$.registerMixin$$module$build$src$core$extensions(\"contextMenu_variableDynamicSetterGetter\",CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables_dynamic);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$variables_dynamic);var module$build$src$blocks$variables_dynamic={blocks:blocks$$module$build$src$blocks$variables_dynamic};var blocks$$module$build$src$blocks$variables=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"variables_get\",message0:\"%1\",args0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_VARIABLES_DEFAULT_NAME}\"}],output:null,style:\"variable_blocks\",helpUrl:\"%{BKY_VARIABLES_GET_HELPURL}\",tooltip:\"%{BKY_VARIABLES_GET_TOOLTIP}\",extensions:[\"contextMenu_variableSetterGetter\"]},{type:\"variables_set\",message0:\"%{BKY_VARIABLES_SET}\",args0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_VARIABLES_DEFAULT_NAME}\"},\n{type:\"input_value\",name:\"VALUE\"}],previousStatement:null,nextStatement:null,style:\"variable_blocks\",tooltip:\"%{BKY_VARIABLES_SET_TOOLTIP}\",helpUrl:\"%{BKY_VARIABLES_SET_HELPURL}\",extensions:[\"contextMenu_variableSetterGetter\"]}]),CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables={customContextMenu:function(a){if(!this.isInFlyout){if(this.type===\"variables_get\"){var b=\"variables_set\";var c=$.Msg$$module$build$src$core$msg.VARIABLES_GET_CREATE_SET}else b=\"variables_get\",\nc=$.Msg$$module$build$src$core$msg.VARIABLES_SET_CREATE_GET;var d=this.getField(\"VAR\");b={type:b,fields:{VAR:d.saveState(!0)}};a.push({enabled:this.workspace.remainingCapacity()>0,text:c.replace(\"%1\",d.getText()),callback:$.callbackFactory$$module$build$src$core$contextmenu(this,b)})}else if(this.type===\"variables_get\"||this.type===\"variables_get_reporter\")c={text:$.Msg$$module$build$src$core$msg.RENAME_VARIABLE,enabled:!0,callback:renameOptionCallbackFactory$$module$build$src$blocks$variables(this)},\nd=this.getField(\"VAR\").getText(),d={text:$.Msg$$module$build$src$core$msg.DELETE_VARIABLE.replace(\"%1\",d),enabled:!0,callback:deleteOptionCallbackFactory$$module$build$src$blocks$variables(this)},a.unshift(c),a.unshift(d)}},renameOptionCallbackFactory$$module$build$src$blocks$variables=function(a){return function(){const b=a.workspace,c=a.getField(\"VAR\").getVariable();$.renameVariable$$module$build$src$core$variables(b,c)}},deleteOptionCallbackFactory$$module$build$src$blocks$variables=function(a){return function(){const b=\na.getField(\"VAR\").getVariable();b&&$.deleteVariable$$module$build$src$core$variables(b.getWorkspace(),b,a)}};$.registerMixin$$module$build$src$core$extensions(\"contextMenu_variableSetterGetter\",CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$variables);var module$build$src$blocks$variables={blocks:blocks$$module$build$src$blocks$variables};var blocks$$module$build$src$blocks$text=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"text\",message0:\"%1\",args0:[{type:\"field_input\",name:\"TEXT\",text:\"\"}],output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_TEXT_HELPURL}\",tooltip:\"%{BKY_TEXT_TEXT_TOOLTIP}\",extensions:[\"text_quotes\",\"parent_tooltip_when_inline\"]},{type:\"text_join\",message0:\"\",output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_JOIN_HELPURL}\",tooltip:\"%{BKY_TEXT_JOIN_TOOLTIP}\",mutator:\"text_join_mutator\"},\n{type:\"text_create_join_container\",message0:\"%{BKY_TEXT_CREATE_JOIN_TITLE_JOIN} %1 %2\",args0:[{type:\"input_dummy\"},{type:\"input_statement\",name:\"STACK\"}],style:\"text_blocks\",tooltip:\"%{BKY_TEXT_CREATE_JOIN_TOOLTIP}\",enableContextMenu:!1},{type:\"text_create_join_item\",message0:\"%{BKY_TEXT_CREATE_JOIN_ITEM_TITLE_ITEM}\",previousStatement:null,nextStatement:null,style:\"text_blocks\",tooltip:\"%{BKY_TEXT_CREATE_JOIN_ITEM_TOOLTIP}\",enableContextMenu:!1},{type:\"text_append\",message0:\"%{BKY_TEXT_APPEND_TITLE}\",\nargs0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_TEXT_APPEND_VARIABLE}\"},{type:\"input_value\",name:\"TEXT\"}],previousStatement:null,nextStatement:null,style:\"text_blocks\",extensions:[\"text_append_tooltip\"]},{type:\"text_length\",message0:\"%{BKY_TEXT_LENGTH_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Number\",style:\"text_blocks\",tooltip:\"%{BKY_TEXT_LENGTH_TOOLTIP}\",helpUrl:\"%{BKY_TEXT_LENGTH_HELPURL}\"},{type:\"text_isEmpty\",message0:\"%{BKY_TEXT_ISEMPTY_TITLE}\",\nargs0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Boolean\",style:\"text_blocks\",tooltip:\"%{BKY_TEXT_ISEMPTY_TOOLTIP}\",helpUrl:\"%{BKY_TEXT_ISEMPTY_HELPURL}\"},{type:\"text_indexOf\",message0:\"%{BKY_TEXT_INDEXOF_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:\"String\"},{type:\"field_dropdown\",name:\"END\",options:[[\"%{BKY_TEXT_INDEXOF_OPERATOR_FIRST}\",\"FIRST\"],[\"%{BKY_TEXT_INDEXOF_OPERATOR_LAST}\",\"LAST\"]]},{type:\"input_value\",name:\"FIND\",check:\"String\"}],output:\"Number\",style:\"text_blocks\",\nhelpUrl:\"%{BKY_TEXT_INDEXOF_HELPURL}\",inputsInline:!0,extensions:[\"text_indexOf_tooltip\"]},{type:\"text_charAt\",message0:\"%{BKY_TEXT_CHARAT_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:\"String\"},{type:\"field_dropdown\",name:\"WHERE\",options:[[\"%{BKY_TEXT_CHARAT_FROM_START}\",\"FROM_START\"],[\"%{BKY_TEXT_CHARAT_FROM_END}\",\"FROM_END\"],[\"%{BKY_TEXT_CHARAT_FIRST}\",\"FIRST\"],[\"%{BKY_TEXT_CHARAT_LAST}\",\"LAST\"],[\"%{BKY_TEXT_CHARAT_RANDOM}\",\"RANDOM\"]]}],output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_CHARAT_HELPURL}\",\ninputsInline:!0,mutator:\"text_charAt_mutator\"}]),GET_SUBSTRING_BLOCK$$module$build$src$blocks$text={init:function(){this.WHERE_OPTIONS_1=[[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FIRST,\"FIRST\"]];this.WHERE_OPTIONS_2=[[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_FROM_END,\n\"FROM_END\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_LAST,\"LAST\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"STRING\").setCheck(\"String\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_INPUT_IN_TEXT);const a=b=>{const c=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this[\"WHERE_OPTIONS_\"+b]});c.setValidator(function(d){const e=this.getValue();d=d===\n\"FROM_START\"||d===\"FROM_END\";d!==(e===\"FROM_START\"||e===\"FROM_END\")&&this.getSourceBlock().updateAt_(b,d)});return c};this.appendDummyInput(\"WHERE1_INPUT\").appendField(a(1),\"WHERE1\");this.appendDummyInput(\"AT1\");this.appendDummyInput(\"WHERE2_INPUT\").appendField(a(2),\"WHERE2\");this.appendDummyInput(\"AT2\");$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL);this.setInputsInline(!0);this.setOutput(!0,\n\"String\");this.updateAt_(1,!0);this.updateAt_(2,!0);this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");var b=this.getInput(\"AT1\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at1\",`${b}`);b=this.getInput(\"AT2\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at2\",`${b}`);return a},domToMutation:function(a){const b=\na.getAttribute(\"at1\")===\"true\";a=a.getAttribute(\"at2\")===\"true\";this.updateAt_(1,b);this.updateAt_(2,a)},updateAt_:function(a,b){this.removeInput(\"AT\"+a);this.removeInput(\"ORDINAL\"+a,!0);b?(this.appendValueInput(\"AT\"+a).setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\"+a).appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\"+a);a===2&&$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL&&(this.removeInput(\"TAIL\",\n!0),this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL));a===1&&(this.moveInputBefore(\"AT1\",\"WHERE2_INPUT\"),this.getInput(\"ORDINAL1\")&&this.moveInputBefore(\"ORDINAL1\",\"WHERE2_INPUT\"))}};blocks$$module$build$src$blocks$text.text_getSubstring=GET_SUBSTRING_BLOCK$$module$build$src$blocks$text;\nblocks$$module$build$src$blocks$text.text_changeCase={init:function(){const a=[[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_UPPERCASE,\"UPPERCASE\"],[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_LOWERCASE,\"LOWERCASE\"],[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_TITLECASE,\"TITLECASE\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"TEXT\").setCheck(\"String\").appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",\noptions:a}),\"CASE\");this.setOutput(!0,\"String\");this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_TOOLTIP)}};\nblocks$$module$build$src$blocks$text.text_trim={init:function(){const a=[[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_BOTH,\"BOTH\"],[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_LEFT,\"LEFT\"],[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_RIGHT,\"RIGHT\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_TRIM_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"TEXT\").setCheck(\"String\").appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a}),\n\"MODE\");this.setOutput(!0,\"String\");this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_TRIM_TOOLTIP)}};blocks$$module$build$src$blocks$text.text_print={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_PRINT_TITLE,args0:[{type:\"input_value\",name:\"TEXT\"}],previousStatement:null,nextStatement:null,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_PRINT_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_PRINT_HELPURL})}};\nvar PROMPT_COMMON$$module$build$src$blocks$text={updateType_:function(a){this.outputConnection.setCheck(a===\"NUMBER\"?\"Number\":\"String\")},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"type\",this.getFieldValue(\"TYPE\"));return a},domToMutation:function(a){this.updateType_(a.getAttribute(\"type\"))}};\nblocks$$module$build$src$blocks$text.text_prompt_ext=Object.assign({},PROMPT_COMMON$$module$build$src$blocks$text,{init:function(){var a=[[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_TEXT,\"TEXT\"],[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_NUMBER,\"NUMBER\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_PROMPT_HELPURL);this.setStyle(\"text_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});a.setValidator(b=>{this.updateType_(b)});this.appendValueInput(\"TEXT\").appendField(a,\n\"TYPE\");this.setOutput(!0,\"String\");this.setTooltip(()=>this.getFieldValue(\"TYPE\")===\"TEXT\"?$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_TEXT:$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_NUMBER)}});\nblocks$$module$build$src$blocks$text.text_prompt=Object.assign({},PROMPT_COMMON$$module$build$src$blocks$text,{init:function(){this.mixin(QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);var a=[[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_TEXT,\"TEXT\"],[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_NUMBER,\"NUMBER\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_PROMPT_HELPURL);this.setStyle(\"text_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});\na.setValidator(b=>{this.updateType_(b)});this.appendDummyInput().appendField(a,\"TYPE\").appendField(this.newQuote_(!0)).appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_input\",text:\"\"}),\"TEXT\").appendField(this.newQuote_(!1));this.setOutput(!0,\"String\");this.setTooltip(()=>this.getFieldValue(\"TYPE\")===\"TEXT\"?$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_TEXT:$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_NUMBER)}});\nblocks$$module$build$src$blocks$text.text_count={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_COUNT_MESSAGE0,args0:[{type:\"input_value\",name:\"SUB\",check:\"String\"},{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"Number\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_COUNT_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_COUNT_HELPURL})}};\nblocks$$module$build$src$blocks$text.text_replace={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_MESSAGE0,args0:[{type:\"input_value\",name:\"FROM\",check:\"String\"},{type:\"input_value\",name:\"TO\",check:\"String\"},{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"String\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_HELPURL})}};\nblocks$$module$build$src$blocks$text.text_reverse={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_MESSAGE0,args0:[{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"String\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_HELPURL})}};\nvar QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text={QUOTE_IMAGE_LEFT_DATAURI:\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC\",QUOTE_IMAGE_RIGHT_DATAURI:\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==\",\nQUOTE_IMAGE_WIDTH:12,QUOTE_IMAGE_HEIGHT:12,quoteField_:function(a){for(let b=0,c;c=this.inputList[b];b++)for(let d=0,e;e=c.fieldRow[d];d++)if(a===e.name){c.insertFieldAt(d,this.newQuote_(!0));c.insertFieldAt(d+2,this.newQuote_(!1));return}console.warn('field named \"'+a+'\" not found in '+this.toDevString())},newQuote_:function(a){a=this.RTL?!a:a;return $.fromJson$$module$build$src$core$field_registry({type:\"field_image\",src:a?this.QUOTE_IMAGE_LEFT_DATAURI:this.QUOTE_IMAGE_RIGHT_DATAURI,width:this.QUOTE_IMAGE_WIDTH,\nheight:this.QUOTE_IMAGE_HEIGHT,alt:a?\"\\u201c\":\"\\u201d\"})}},QUOTES_EXTENSION$$module$build$src$blocks$text=function(){this.mixin(QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);this.quoteField_(\"TEXT\")},JOIN_MUTATOR_MIXIN$$module$build$src$blocks$text={itemCount_:0,mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"items\",`${this.itemCount_}`);return a},domToMutation:function(a){this.itemCount_=parseInt(a.getAttribute(\"items\"),10);this.updateShape_()},\nsaveExtraState:function(){return{itemCount:this.itemCount_}},loadExtraState:function(a){this.itemCount_=a.itemCount;this.updateShape_()},decompose:function(a){const b=a.newBlock(\"text_create_join_container\");b.initSvg();let c=b.getInput(\"STACK\").connection;for(let d=0;d$.Msg$$module$build$src$core$msg.TEXT_INDEXOF_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\"0\":\"-1\"))},CHARAT_MUTATOR_MIXIN$$module$build$src$blocks$text={isAt_:!1,mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"at\",`${this.isAt_}`);return a},domToMutation:function(a){a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},updateAt_:function(a){this.removeInput(\"AT\",\n!0);this.removeInput(\"ORDINAL\",!0);a&&(this.appendValueInput(\"AT\").setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX));$.Msg$$module$build$src$core$msg.TEXT_CHARAT_TAIL&&(this.removeInput(\"TAIL\",!0),this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_CHARAT_TAIL));this.isAt_=a}},CHARAT_EXTENSION$$module$build$src$blocks$text=function(){this.getField(\"WHERE\").setValidator(function(a){a=\na===\"FROM_START\"||a===\"FROM_END\";const b=this.getSourceBlock();a!==b.isAt_&&b.updateAt_(a)});this.updateAt_(!0);this.setTooltip(()=>{var a=this.getFieldValue(\"WHERE\");let b=$.Msg$$module$build$src$core$msg.TEXT_CHARAT_TOOLTIP;(a===\"FROM_START\"||a===\"FROM_END\")&&(a=a===\"FROM_START\"?$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP:$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_END_TOOLTIP)&&(b+=\" \"+a.replace(\"%1\",this.workspace.options.oneBasedIndex?\"#1\":\"#0\"));return b})};\n$.register$$module$build$src$core$extensions(\"text_indexOf_tooltip\",INDEXOF_TOOLTIP_EXTENSION$$module$build$src$blocks$text);$.register$$module$build$src$core$extensions(\"text_quotes\",QUOTES_EXTENSION$$module$build$src$blocks$text);$.registerMixin$$module$build$src$core$extensions(\"quote_image_mixin\",QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);$.registerMutator$$module$build$src$core$extensions(\"text_join_mutator\",JOIN_MUTATOR_MIXIN$$module$build$src$blocks$text,JOIN_EXTENSION$$module$build$src$blocks$text);\n$.registerMutator$$module$build$src$core$extensions(\"text_charAt_mutator\",CHARAT_MUTATOR_MIXIN$$module$build$src$blocks$text,CHARAT_EXTENSION$$module$build$src$blocks$text);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$text);var module$build$src$blocks$text={blocks:blocks$$module$build$src$blocks$text};var blocks$$module$build$src$blocks$procedures={},PROCEDURE_DEF_COMMON$$module$build$src$blocks$procedures={setStatements_:function(a){this.hasStatements_!==a&&(a?(this.appendStatementInput(\"STACK\").appendField($.Msg$$module$build$src$core$msg.PROCEDURES_DEFNORETURN_DO),this.getInput(\"RETURN\")&&this.moveInputBefore(\"STACK\",\"RETURN\")):this.removeInput(\"STACK\",!0),this.hasStatements_=a)},updateParams_:function(){let a=\"\";this.arguments_.length&&(a=$.Msg$$module$build$src$core$msg.PROCEDURES_BEFORE_PARAMS+\n\" \"+this.arguments_.join(\", \"));$.disable$$module$build$src$core$events$utils();try{this.setFieldValue(a,\"PARAMS\")}finally{$.enable$$module$build$src$core$events$utils()}},mutationToDom:function(a){const b=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a&&b.setAttribute(\"name\",this.getFieldValue(\"NAME\"));for(let c=0;c\",\"GT\"],[\"\\u200f\\u2265\",\"GTE\"]]},{type:\"input_value\",name:\"B\"}],\ninputsInline:!0,output:\"Boolean\",style:\"logic_blocks\",helpUrl:\"%{BKY_LOGIC_COMPARE_HELPURL}\",extensions:[\"logic_compare\",\"logic_op_tooltip\"]},{type:\"logic_operation\",message0:\"%1 %2 %3\",args0:[{type:\"input_value\",name:\"A\",check:\"Boolean\"},{type:\"field_dropdown\",name:\"OP\",options:[[\"%{BKY_LOGIC_OPERATION_AND}\",\"AND\"],[\"%{BKY_LOGIC_OPERATION_OR}\",\"OR\"]]},{type:\"input_value\",name:\"B\",check:\"Boolean\"}],inputsInline:!0,output:\"Boolean\",style:\"logic_blocks\",helpUrl:\"%{BKY_LOGIC_OPERATION_HELPURL}\",extensions:[\"logic_op_tooltip\"]},\n{type:\"logic_negate\",message0:\"%{BKY_LOGIC_NEGATE_TITLE}\",args0:[{type:\"input_value\",name:\"BOOL\",check:\"Boolean\"}],output:\"Boolean\",style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_NEGATE_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_NEGATE_HELPURL}\"},{type:\"logic_null\",message0:\"%{BKY_LOGIC_NULL}\",output:null,style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_NULL_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_NULL_HELPURL}\"},{type:\"logic_ternary\",message0:\"%{BKY_LOGIC_TERNARY_CONDITION} %1\",args0:[{type:\"input_value\",name:\"IF\",check:\"Boolean\"}],\nmessage1:\"%{BKY_LOGIC_TERNARY_IF_TRUE} %1\",args1:[{type:\"input_value\",name:\"THEN\"}],message2:\"%{BKY_LOGIC_TERNARY_IF_FALSE} %1\",args2:[{type:\"input_value\",name:\"ELSE\"}],output:null,style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_TERNARY_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_TERNARY_HELPURL}\",extensions:[\"logic_ternary\"]},{type:\"controls_if_if\",message0:\"%{BKY_CONTROLS_IF_IF_TITLE_IF}\",nextStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_IF_TOOLTIP}\"},{type:\"controls_if_elseif\",\nmessage0:\"%{BKY_CONTROLS_IF_ELSEIF_TITLE_ELSEIF}\",previousStatement:null,nextStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_ELSEIF_TOOLTIP}\"},{type:\"controls_if_else\",message0:\"%{BKY_CONTROLS_IF_ELSE_TITLE_ELSE}\",previousStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_ELSE_TOOLTIP}\"}]),TOOLTIPS_BY_OP$$module$build$src$blocks$logic={EQ:\"%{BKY_LOGIC_COMPARE_TOOLTIP_EQ}\",NEQ:\"%{BKY_LOGIC_COMPARE_TOOLTIP_NEQ}\",LT:\"%{BKY_LOGIC_COMPARE_TOOLTIP_LT}\",\nLTE:\"%{BKY_LOGIC_COMPARE_TOOLTIP_LTE}\",GT:\"%{BKY_LOGIC_COMPARE_TOOLTIP_GT}\",GTE:\"%{BKY_LOGIC_COMPARE_TOOLTIP_GTE}\",AND:\"%{BKY_LOGIC_OPERATION_TOOLTIP_AND}\",OR:\"%{BKY_LOGIC_OPERATION_TOOLTIP_OR}\"};$.register$$module$build$src$core$extensions(\"logic_op_tooltip\",$.buildTooltipForDropdown$$module$build$src$core$extensions(\"OP\",TOOLTIPS_BY_OP$$module$build$src$blocks$logic));\nvar CONTROLS_IF_MUTATOR_MIXIN$$module$build$src$blocks$logic={elseifCount_:0,elseCount_:0,mutationToDom:function(){if(!this.elseifCount_&&!this.elseCount_)return null;const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");this.elseifCount_&&a.setAttribute(\"elseif\",String(this.elseifCount_));this.elseCount_&&a.setAttribute(\"else\",\"1\");return a},domToMutation:function(a){this.elseifCount_=parseInt(a.getAttribute(\"elseif\"),10)||0;this.elseCount_=parseInt(a.getAttribute(\"else\"),10)||0;this.rebuildShape_()},\nsaveExtraState:function(){if(!this.elseifCount_&&!this.elseCount_)return null;const a=Object.create(null);this.elseifCount_&&(a.elseIfCount=this.elseifCount_);this.elseCount_&&(a.hasElse=!0);return a},loadExtraState:function(a){this.elseifCount_=a.elseIfCount||0;this.elseCount_=a.hasElse?1:0;this.updateShape_()},decompose:function(a){const b=a.newBlock(\"controls_if_if\");b.initSvg();let c=b.nextConnection;for(let d=1;d<=this.elseifCount_;d++){const e=a.newBlock(\"controls_if_elseif\");e.initSvg();c.connect(e.previousConnection);\nc=e.nextConnection}this.elseCount_&&(a=a.newBlock(\"controls_if_else\"),a.initSvg(),c.connect(a.previousConnection));return b},compose:function(a){a=a.nextConnection.targetBlock();this.elseCount_=this.elseifCount_=0;const b=[null],c=[null];let d=null;for(;a;){if(!a.isInsertionMarker())switch(a.type){case \"controls_if_elseif\":this.elseifCount_++;b.push(a.valueConnection_);c.push(a.statementConnection_);break;case \"controls_if_else\":this.elseCount_++;d=a.statementConnection_;break;default:throw TypeError(\"Unknown block type: \"+\na.type);}a=a.getNextBlock()}this.updateShape_();this.reconnectChildBlocks_(b,c,d)},saveConnections:function(a){a=a.nextConnection.targetBlock();let b=1;for(;a;){if(!a.isInsertionMarker())switch(a.type){case \"controls_if_elseif\":var c=this.getInput(\"IF\"+b);const d=this.getInput(\"DO\"+b);a.valueConnection_=c&&c.connection.targetConnection;a.statementConnection_=d&&d.connection.targetConnection;b++;break;case \"controls_if_else\":c=this.getInput(\"ELSE\");a.statementConnection_=c&&c.connection.targetConnection;\nbreak;default:throw TypeError(\"Unknown block type: \"+a.type);}a=a.getNextBlock()}},rebuildShape_:function(){const a=[null],b=[null];let c=null;this.getInput(\"ELSE\")&&(c=this.getInput(\"ELSE\").connection.targetConnection);for(let d=1;this.getInput(\"IF\"+d);d++){const e=this.getInput(\"IF\"+d),f=this.getInput(\"DO\"+d);a.push(e.connection.targetConnection);b.push(f.connection.targetConnection)}this.updateShape_();this.reconnectChildBlocks_(a,b,c)},updateShape_:function(){this.getInput(\"ELSE\")&&this.removeInput(\"ELSE\");\nfor(var a=1;this.getInput(\"IF\"+a);a++)this.removeInput(\"IF\"+a),this.removeInput(\"DO\"+a);for(a=1;a<=this.elseifCount_;a++)this.appendValueInput(\"IF\"+a).setCheck(\"Boolean\").appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_ELSEIF),this.appendStatementInput(\"DO\"+a).appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_THEN);this.elseCount_&&this.appendStatementInput(\"ELSE\").appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_ELSE)},reconnectChildBlocks_:function(a,b,c){for(let d=\n1;d<=this.elseifCount_;d++){let e;(e=a[d])==null||e.reconnect(this,\"IF\"+d);let f;(f=b[d])==null||f.reconnect(this,\"DO\"+d)}c==null||c.reconnect(this,\"ELSE\")}};$.registerMutator$$module$build$src$core$extensions(\"controls_if_mutator\",CONTROLS_IF_MUTATOR_MIXIN$$module$build$src$blocks$logic,null,[\"controls_if_elseif\",\"controls_if_else\"]);\nvar CONTROLS_IF_TOOLTIP_EXTENSION$$module$build$src$blocks$logic=function(){this.setTooltip(function(){if(this.elseifCount_||this.elseCount_){if(!this.elseifCount_&&this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_2;if(this.elseifCount_&&!this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_3;if(this.elseifCount_&&this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_4}else return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_1;\nreturn\"\"}.bind(this))};$.register$$module$build$src$core$extensions(\"controls_if_tooltip\",CONTROLS_IF_TOOLTIP_EXTENSION$$module$build$src$blocks$logic);\nvar LOGIC_COMPARE_ONCHANGE_MIXIN$$module$build$src$blocks$logic={onchange:function(a){this.prevBlocks_||(this.prevBlocks_=[null,null]);var b=this.getInputTargetBlock(\"A\");const c=this.getInputTargetBlock(\"B\");b&&c&&!this.workspace.connectionChecker.doTypeChecks(b.outputConnection,c.outputConnection)&&($.setGroup$$module$build$src$core$events$utils(a.group),a=this.prevBlocks_[0],a!==b&&(b.unplug(),!a||a.isDisposed()||a.isShadow()||this.getInput(\"A\").connection.connect(a.outputConnection)),b=this.prevBlocks_[1],\nb!==c&&(c.unplug(),!b||b.isDisposed()||b.isShadow()||this.getInput(\"B\").connection.connect(b.outputConnection)),this.bumpNeighbours(),$.setGroup$$module$build$src$core$events$utils(!1));this.prevBlocks_[0]=this.getInputTargetBlock(\"A\");this.prevBlocks_[1]=this.getInputTargetBlock(\"B\")}},LOGIC_COMPARE_EXTENSION$$module$build$src$blocks$logic=function(){this.mixin(LOGIC_COMPARE_ONCHANGE_MIXIN$$module$build$src$blocks$logic)};$.register$$module$build$src$core$extensions(\"logic_compare\",LOGIC_COMPARE_EXTENSION$$module$build$src$blocks$logic);\nvar LOGIC_TERNARY_ONCHANGE_MIXIN$$module$build$src$blocks$logic={prevParentConnection_:null,onchange:function(a){const b=this.getInputTargetBlock(\"THEN\"),c=this.getInputTargetBlock(\"ELSE\"),d=this.outputConnection.targetConnection;if((b||c)&&d)for(let e=0;e<2;e++){const f=e===1?b:c;f&&!f.workspace.connectionChecker.doTypeChecks(f.outputConnection,d)&&($.setGroup$$module$build$src$core$events$utils(a.group),d===this.prevParentConnection_?(this.unplug(),d.getSourceBlock().bumpNeighbours()):(f.unplug(),\nf.bumpNeighbours()),$.setGroup$$module$build$src$core$events$utils(!1))}this.prevParentConnection_=d}};$.registerMixin$$module$build$src$core$extensions(\"logic_ternary\",LOGIC_TERNARY_ONCHANGE_MIXIN$$module$build$src$blocks$logic);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$logic);var module$build$src$blocks$logic={blocks:blocks$$module$build$src$blocks$logic};var blocks$$module$build$src$blocks$lists=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"lists_create_empty\",message0:\"%{BKY_LISTS_CREATE_EMPTY_TITLE}\",output:\"Array\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_CREATE_EMPTY_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_CREATE_EMPTY_HELPURL}\"},{type:\"lists_repeat\",message0:\"%{BKY_LISTS_REPEAT_TITLE}\",args0:[{type:\"input_value\",name:\"ITEM\"},{type:\"input_value\",name:\"NUM\",check:\"Number\"}],output:\"Array\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_REPEAT_TOOLTIP}\",\nhelpUrl:\"%{BKY_LISTS_REPEAT_HELPURL}\"},{type:\"lists_reverse\",message0:\"%{BKY_LISTS_REVERSE_MESSAGE0}\",args0:[{type:\"input_value\",name:\"LIST\",check:\"Array\"}],output:\"Array\",inputsInline:!0,style:\"list_blocks\",tooltip:\"%{BKY_LISTS_REVERSE_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_REVERSE_HELPURL}\"},{type:\"lists_isEmpty\",message0:\"%{BKY_LISTS_ISEMPTY_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Boolean\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_ISEMPTY_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_ISEMPTY_HELPURL}\"},\n{type:\"lists_length\",message0:\"%{BKY_LISTS_LENGTH_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Number\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_LENGTH_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_LENGTH_HELPURL}\"}]),LISTS_CREATE_WITH$$module$build$src$blocks$lists={init:function(){this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_CREATE_WITH_HELPURL);this.setStyle(\"list_blocks\");this.itemCount_=3;this.updateShape_();this.setOutput(!0,\"Array\");this.setMutator(new $.MutatorIcon$$module$build$src$core$icons$mutator_icon([\"lists_create_with_item\"],\nthis));this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_CREATE_WITH_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"items\",String(this.itemCount_));return a},domToMutation:function(a){a=a.getAttribute(\"items\");if(!a)throw new TypeError(\"element did not have items\");this.itemCount_=parseInt(a,10);this.updateShape_()},saveExtraState:function(){return{itemCount:this.itemCount_}},loadExtraState:function(a){this.itemCount_=a.itemCount;\nthis.updateShape_()},decompose:function(a){const b=a.newBlock(\"lists_create_with_container\");b.initSvg();let c=b.getInput(\"STACK\").connection;for(let d=0;d$.Msg$$module$build$src$core$msg.LISTS_INDEX_OF_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\"0\":\"-1\"))}};blocks$$module$build$src$blocks$lists.lists_indexOf=LISTS_INDEXOF$$module$build$src$blocks$lists;\nvar LISTS_GETINDEX$$module$build$src$blocks$lists={init:function(){var a=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_GET,\"GET\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_GET_REMOVE,\"GET_REMOVE\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_REMOVE,\"REMOVE\"]];this.WHERE_OPTIONS=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FIRST,\"FIRST\"],\n[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_LAST,\"LAST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_RANDOM,\"RANDOM\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_HELPURL);this.setStyle(\"list_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});a.setValidator(function(b){b=b===\"REMOVE\";this.getSourceBlock().updateStatement_(b)});this.appendValueInput(\"VALUE\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_INPUT_IN_LIST);\nthis.appendDummyInput().appendField(a,\"MODE\").appendField(\"\",\"SPACE\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this.WHERE_OPTIONS});a.setValidator(function(b){const c=this.getValue();b=b===\"FROM_START\"||b===\"FROM_END\";b!==(c===\"FROM_START\"||c===\"FROM_END\")&&this.getSourceBlock().updateAt_(b)});this.appendDummyInput().appendField(a,\"WHERE\");this.appendDummyInput(\"AT\");$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL);\nthis.setInputsInline(!0);this.setOutput(!0);this.updateAt_(!0);this.setTooltip(()=>{const b=this.getFieldValue(\"MODE\"),c=this.getFieldValue(\"WHERE\");let d=\"\";switch(b+\" \"+c){case \"GET FROM_START\":case \"GET FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM;break;case \"GET FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_FIRST;break;case \"GET LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_LAST;break;case \"GET RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM;\nbreak;case \"GET_REMOVE FROM_START\":case \"GET_REMOVE FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM;break;case \"GET_REMOVE FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST;break;case \"GET_REMOVE LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST;break;case \"GET_REMOVE RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM;break;case \"REMOVE FROM_START\":case \"REMOVE FROM_END\":d=\n$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM;break;case \"REMOVE FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST;break;case \"REMOVE LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST;break;case \"REMOVE RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM}if(c===\"FROM_START\"||c===\"FROM_END\")d+=\" \"+(c===\"FROM_START\"?$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP:$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_END_TOOLTIP).replace(\"%1\",\nthis.workspace.options.oneBasedIndex?\"#1\":\"#0\");return d})},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"statement\",String(!this.outputConnection));const b=this.getInput(\"AT\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at\",String(b));return a},domToMutation:function(a){const b=a.getAttribute(\"statement\")===\"true\";this.updateStatement_(b);a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},saveExtraState:function(){return this.outputConnection?\nnull:{isStatement:!0}},loadExtraState:function(a){a.isStatement?this.updateStatement_(!0):typeof a===\"string\"&&this.domToMutation($.textToDom$$module$build$src$core$utils$xml(a))},updateStatement_:function(a){a!==!this.outputConnection&&(this.unplug(!0,!0),a?(this.setOutput(!1),this.setPreviousStatement(!0),this.setNextStatement(!0)):(this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0)))},updateAt_:function(a){this.removeInput(\"AT\");this.removeInput(\"ORDINAL\",!0);a?(this.appendValueInput(\"AT\").setCheck(\"Number\"),\n$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\");$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL&&this.moveInputBefore(\"TAIL\",null)}};blocks$$module$build$src$blocks$lists.lists_getIndex=LISTS_GETINDEX$$module$build$src$blocks$lists;\nvar LISTS_SETINDEX$$module$build$src$blocks$lists={init:function(){var a=[[$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_SET,\"SET\"],[$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INSERT,\"INSERT\"]];this.WHERE_OPTIONS=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FIRST,\"FIRST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_LAST,\"LAST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_RANDOM,\n\"RANDOM\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"LIST\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INPUT_IN_LIST);a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});this.appendDummyInput().appendField(a,\"MODE\").appendField(\"\",\"SPACE\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this.WHERE_OPTIONS});a.setValidator(function(b){const c=\nthis.getValue();b=b===\"FROM_START\"||b===\"FROM_END\";b!==(c===\"FROM_START\"||c===\"FROM_END\")&&this.getSourceBlock().updateAt_(b)});this.appendDummyInput().appendField(a,\"WHERE\");this.appendDummyInput(\"AT\");this.appendValueInput(\"TO\").appendField($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INPUT_TO);this.setInputsInline(!0);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP);this.updateAt_(!0);this.setTooltip(()=>{const b=\nthis.getFieldValue(\"MODE\"),c=this.getFieldValue(\"WHERE\");let d=\"\";switch(b+\" \"+c){case \"SET FROM_START\":case \"SET FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_FROM;break;case \"SET FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_FIRST;break;case \"SET LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_LAST;break;case \"SET RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_RANDOM;break;case \"INSERT FROM_START\":case \"INSERT FROM_END\":d=\n$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FROM;break;case \"INSERT FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST;break;case \"INSERT LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_LAST;break;case \"INSERT RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM}if(c===\"FROM_START\"||c===\"FROM_END\")d+=\" \"+$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\n\"#1\":\"#0\");return d})},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\"),b=this.getInput(\"AT\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at\",String(b));return a},domToMutation:function(a){a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},saveExtraState:function(){return null},loadExtraState:function(){},updateAt_:function(a){this.removeInput(\"AT\");this.removeInput(\"ORDINAL\",!0);a?(this.appendValueInput(\"AT\").setCheck(\"Number\"),\n$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\");this.moveInputBefore(\"AT\",\"TO\");this.getInput(\"ORDINAL\")&&this.moveInputBefore(\"ORDINAL\",\"TO\")}};blocks$$module$build$src$blocks$lists.lists_setIndex=LISTS_SETINDEX$$module$build$src$blocks$lists;\nvar LISTS_GETSUBLIST$$module$build$src$blocks$lists={init:function(){this.WHERE_OPTIONS_1=[[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FIRST,\"FIRST\"]];this.WHERE_OPTIONS_2=[[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_FROM_END,\"FROM_END\"],\n[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_LAST,\"LAST\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"LIST\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_INPUT_IN_LIST);const a=b=>{const c=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this[\"WHERE_OPTIONS_\"+b]});c.setValidator(function(d){const e=this.getValue();d=d===\"FROM_START\"||d===\n\"FROM_END\";d!==(e===\"FROM_START\"||e===\"FROM_END\")&&this.getSourceBlock().updateAt_(b,d)});return c};this.appendDummyInput(\"WHERE1_INPUT\").appendField(a(1),\"WHERE1\");this.appendDummyInput(\"AT1\");this.appendDummyInput(\"WHERE2_INPUT\").appendField(a(2),\"WHERE2\");this.appendDummyInput(\"AT2\");$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL);this.setInputsInline(!0);this.setOutput(!0,\"Array\");this.updateAt_(1,\n!0);this.updateAt_(2,!0);this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");var b=this.getInput(\"AT1\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at1\",String(b));b=this.getInput(\"AT2\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at2\",String(b));return a},domToMutation:function(a){const b=a.getAttribute(\"at1\")===\n\"true\";a=a.getAttribute(\"at2\")===\"true\";this.updateAt_(1,b);this.updateAt_(2,a)},saveExtraState:function(){return null},loadExtraState:function(){},updateAt_:function(a,b){this.removeInput(\"AT\"+a);this.removeInput(\"ORDINAL\"+a,!0);b?(this.appendValueInput(\"AT\"+a).setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\"+a).appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\"+a);a===1&&(this.moveInputBefore(\"AT1\",\n\"WHERE2_INPUT\"),this.getInput(\"ORDINAL1\")&&this.moveInputBefore(\"ORDINAL1\",\"WHERE2_INPUT\"));$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL&&this.moveInputBefore(\"TAIL\",null)}};blocks$$module$build$src$blocks$lists.lists_getSublist=LISTS_GETSUBLIST$$module$build$src$blocks$lists;\nblocks$$module$build$src$blocks$lists.lists_sort={init:function(){this.jsonInit({message0:\"%{BKY_LISTS_SORT_TITLE}\",args0:[{type:\"field_dropdown\",name:\"TYPE\",options:[[\"%{BKY_LISTS_SORT_TYPE_NUMERIC}\",\"NUMERIC\"],[\"%{BKY_LISTS_SORT_TYPE_TEXT}\",\"TEXT\"],[\"%{BKY_LISTS_SORT_TYPE_IGNORECASE}\",\"IGNORE_CASE\"]]},{type:\"field_dropdown\",name:\"DIRECTION\",options:[[\"%{BKY_LISTS_SORT_ORDER_ASCENDING}\",\"1\"],[\"%{BKY_LISTS_SORT_ORDER_DESCENDING}\",\"-1\"]]},{type:\"input_value\",name:\"LIST\",check:\"Array\"}],output:\"Array\",\nstyle:\"list_blocks\",tooltip:\"%{BKY_LISTS_SORT_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_SORT_HELPURL}\"})}};\nblocks$$module$build$src$blocks$lists.lists_split={init:function(){const a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:[[$.Msg$$module$build$src$core$msg.LISTS_SPLIT_LIST_FROM_TEXT,\"SPLIT\"],[$.Msg$$module$build$src$core$msg.LISTS_SPLIT_TEXT_FROM_LIST,\"JOIN\"]]});if(!a)throw Error(\"field_dropdown not found\");a.setValidator(b=>{this.updateType_(b)});this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_SPLIT_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"INPUT\").setCheck(\"String\").appendField(a,\n\"MODE\");this.appendValueInput(\"DELIM\").setCheck(\"String\").appendField($.Msg$$module$build$src$core$msg.LISTS_SPLIT_WITH_DELIMITER);this.setInputsInline(!0);this.setOutput(!0,\"Array\");this.setTooltip(()=>{const b=this.getFieldValue(\"MODE\");if(b===\"SPLIT\")return $.Msg$$module$build$src$core$msg.LISTS_SPLIT_TOOLTIP_SPLIT;if(b===\"JOIN\")return $.Msg$$module$build$src$core$msg.LISTS_SPLIT_TOOLTIP_JOIN;throw Error(\"Unknown mode: \"+b);})},updateType_:function(a){if(this.getFieldValue(\"MODE\")!==a){const b=\nthis.getInput(\"INPUT\").connection;b.setShadowDom(null);const c=b.targetBlock();c&&(b.disconnect(),c.isShadow()?c.dispose(!1):this.bumpNeighbours())}a===\"SPLIT\"?(this.outputConnection.setCheck(\"Array\"),this.getInput(\"INPUT\").setCheck(\"String\")):(this.outputConnection.setCheck(\"String\"),this.getInput(\"INPUT\").setCheck(\"Array\"))},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"mode\",this.getFieldValue(\"MODE\"));return a},domToMutation:function(a){this.updateType_(a.getAttribute(\"mode\"))},\nsaveExtraState:function(){return{mode:this.getFieldValue(\"MODE\")}},loadExtraState:function(a){this.updateType_(a.mode)}};$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$lists);var module$build$src$blocks$lists={blocks:blocks$$module$build$src$blocks$lists};var blocks$$module$build$src$blocks$blocks=Object.assign({},blocks$$module$build$src$blocks$lists,blocks$$module$build$src$blocks$logic,blocks$$module$build$src$blocks$loops,blocks$$module$build$src$blocks$math,blocks$$module$build$src$blocks$procedures,blocks$$module$build$src$blocks$text,blocks$$module$build$src$blocks$variables,blocks$$module$build$src$blocks$variables_dynamic),module$build$src$blocks$blocks={blocks:blocks$$module$build$src$blocks$blocks,lists:module$build$src$blocks$lists,logic:module$build$src$blocks$logic,\nloops:module$build$src$blocks$loops,math:module$build$src$blocks$math,procedures:module$build$src$blocks$procedures,texts:module$build$src$blocks$text,variables:module$build$src$blocks$variables,variablesDynamic:module$build$src$blocks$variables_dynamic};\nmodule$build$src$blocks$blocks.__namespace__=$;\nreturn module$build$src$blocks$blocks;\n}));\n\n\n//# sourceMappingURL=blocks_compressed.js.map\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/blocks_compressed.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/index.js": +/*!***************************************!*\ + !*** ./node_modules/blockly/index.js ***! + \***************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! blockly/core */ \"./node_modules/blockly/blockly_compressed.js\"), __webpack_require__(/*! blockly/msg/en */ \"./node_modules/blockly/msg/en.js\"), __webpack_require__(/*! blockly/blocks */ \"./node_modules/blockly/blocks_compressed.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function(Blockly, en, blocks) {\n/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Main entrypoint for blockly package. Via its UMD wrapper,\n * this module loads blockly/core, blockly/blocks and blockly/msg/en\n * and then calls setLocale(en).\n *\n * This entrypoint previously also loaded one or more generators\n * (JavaScript in browser, all five in node.js environments) but it no\n * longer makes sense to do so because of changes to generators\n * exports (they no longer have the side effect of defining\n * Blockly.JavaScript, etc., when loaded as modules).\n */\n\n/* eslint-disable */\n'use strict';\n\n// Include the EN Locale by default.\nBlockly.setLocale(en);\n\nreturn Blockly;\n}));\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/index.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/index.mjs": +/*!****************************************!*\ + !*** ./node_modules/blockly/index.mjs ***! + \****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Block: () => (/* binding */ Block),\n/* harmony export */ BlockFlyoutInflater: () => (/* binding */ BlockFlyoutInflater),\n/* harmony export */ BlockNavigationPolicy: () => (/* binding */ BlockNavigationPolicy),\n/* harmony export */ BlockSvg: () => (/* binding */ BlockSvg),\n/* harmony export */ Blocks: () => (/* binding */ Blocks),\n/* harmony export */ ButtonFlyoutInflater: () => (/* binding */ ButtonFlyoutInflater),\n/* harmony export */ COLLAPSED_FIELD_NAME: () => (/* binding */ COLLAPSED_FIELD_NAME),\n/* harmony export */ COLLAPSED_INPUT_NAME: () => (/* binding */ COLLAPSED_INPUT_NAME),\n/* harmony export */ COLLAPSE_CHARS: () => (/* binding */ COLLAPSE_CHARS),\n/* harmony export */ CodeGenerator: () => (/* binding */ CodeGenerator),\n/* harmony export */ CollapsibleToolboxCategory: () => (/* binding */ CollapsibleToolboxCategory),\n/* harmony export */ ComponentManager: () => (/* binding */ ComponentManager),\n/* harmony export */ Connection: () => (/* binding */ Connection),\n/* harmony export */ ConnectionChecker: () => (/* binding */ ConnectionChecker),\n/* harmony export */ ConnectionDB: () => (/* binding */ ConnectionDB),\n/* harmony export */ ConnectionNavigationPolicy: () => (/* binding */ ConnectionNavigationPolicy),\n/* harmony export */ ConnectionType: () => (/* binding */ ConnectionType),\n/* harmony export */ ContextMenu: () => (/* binding */ ContextMenu),\n/* harmony export */ ContextMenuItems: () => (/* binding */ ContextMenuItems),\n/* harmony export */ ContextMenuRegistry: () => (/* binding */ ContextMenuRegistry),\n/* harmony export */ Css: () => (/* binding */ Css),\n/* harmony export */ DELETE_VARIABLE_ID: () => (/* binding */ DELETE_VARIABLE_ID),\n/* harmony export */ DeleteArea: () => (/* binding */ DeleteArea),\n/* harmony export */ DragTarget: () => (/* binding */ DragTarget),\n/* harmony export */ DropDownDiv: () => (/* binding */ DropDownDiv),\n/* harmony export */ Events: () => (/* binding */ Events),\n/* harmony export */ Extensions: () => (/* binding */ Extensions),\n/* harmony export */ Field: () => (/* binding */ Field),\n/* harmony export */ FieldCheckbox: () => (/* binding */ FieldCheckbox),\n/* harmony export */ FieldDropdown: () => (/* binding */ FieldDropdown),\n/* harmony export */ FieldImage: () => (/* binding */ FieldImage),\n/* harmony export */ FieldLabel: () => (/* binding */ FieldLabel),\n/* harmony export */ FieldLabelSerializable: () => (/* binding */ FieldLabelSerializable),\n/* harmony export */ FieldNavigationPolicy: () => (/* binding */ FieldNavigationPolicy),\n/* harmony export */ FieldNumber: () => (/* binding */ FieldNumber),\n/* harmony export */ FieldTextInput: () => (/* binding */ FieldTextInput),\n/* harmony export */ FieldVariable: () => (/* binding */ FieldVariable),\n/* harmony export */ Flyout: () => (/* binding */ Flyout),\n/* harmony export */ FlyoutButton: () => (/* binding */ FlyoutButton),\n/* harmony export */ FlyoutButtonNavigationPolicy: () => (/* binding */ FlyoutButtonNavigationPolicy),\n/* harmony export */ FlyoutItem: () => (/* binding */ FlyoutItem),\n/* harmony export */ FlyoutMetricsManager: () => (/* binding */ FlyoutMetricsManager),\n/* harmony export */ FlyoutNavigationPolicy: () => (/* binding */ FlyoutNavigationPolicy),\n/* harmony export */ FlyoutNavigator: () => (/* binding */ FlyoutNavigator),\n/* harmony export */ FlyoutSeparator: () => (/* binding */ FlyoutSeparator),\n/* harmony export */ FlyoutSeparatorNavigationPolicy: () => (/* binding */ FlyoutSeparatorNavigationPolicy),\n/* harmony export */ FocusManager: () => (/* binding */ FocusManager),\n/* harmony export */ FocusableTreeTraverser: () => (/* binding */ FocusableTreeTraverser),\n/* harmony export */ Generator: () => (/* binding */ Generator),\n/* harmony export */ Gesture: () => (/* binding */ Gesture),\n/* harmony export */ Grid: () => (/* binding */ Grid),\n/* harmony export */ HorizontalFlyout: () => (/* binding */ HorizontalFlyout),\n/* harmony export */ INPUT_VALUE: () => (/* binding */ INPUT_VALUE),\n/* harmony export */ Input: () => (/* binding */ Input),\n/* harmony export */ InsertionMarkerPreviewer: () => (/* binding */ InsertionMarkerPreviewer),\n/* harmony export */ KeyboardNavigationController: () => (/* binding */ KeyboardNavigationController),\n/* harmony export */ LabelFlyoutInflater: () => (/* binding */ LabelFlyoutInflater),\n/* harmony export */ LineCursor: () => (/* binding */ LineCursor),\n/* harmony export */ Marker: () => (/* binding */ Marker),\n/* harmony export */ MarkerManager: () => (/* binding */ MarkerManager),\n/* harmony export */ Menu: () => (/* binding */ Menu),\n/* harmony export */ MenuItem: () => (/* binding */ MenuItem),\n/* harmony export */ MetricsManager: () => (/* binding */ MetricsManager),\n/* harmony export */ Msg: () => (/* binding */ Msg),\n/* harmony export */ NEXT_STATEMENT: () => (/* binding */ NEXT_STATEMENT),\n/* harmony export */ Names: () => (/* binding */ Names),\n/* harmony export */ Navigator: () => (/* binding */ Navigator),\n/* harmony export */ OPPOSITE_TYPE: () => (/* binding */ OPPOSITE_TYPE),\n/* harmony export */ OUTPUT_VALUE: () => (/* binding */ OUTPUT_VALUE),\n/* harmony export */ Options: () => (/* binding */ Options),\n/* harmony export */ PREVIOUS_STATEMENT: () => (/* binding */ PREVIOUS_STATEMENT),\n/* harmony export */ PROCEDURE_CATEGORY_NAME: () => (/* binding */ PROCEDURE_CATEGORY_NAME),\n/* harmony export */ Procedures: () => (/* binding */ Procedures),\n/* harmony export */ RENAME_VARIABLE_ID: () => (/* binding */ RENAME_VARIABLE_ID),\n/* harmony export */ RenderedConnection: () => (/* binding */ RenderedConnection),\n/* harmony export */ Scrollbar: () => (/* binding */ Scrollbar),\n/* harmony export */ ScrollbarPair: () => (/* binding */ ScrollbarPair),\n/* harmony export */ SeparatorFlyoutInflater: () => (/* binding */ SeparatorFlyoutInflater),\n/* harmony export */ ShortcutItems: () => (/* binding */ ShortcutItems),\n/* harmony export */ ShortcutRegistry: () => (/* binding */ ShortcutRegistry),\n/* harmony export */ TOOLBOX_AT_BOTTOM: () => (/* binding */ TOOLBOX_AT_BOTTOM),\n/* harmony export */ TOOLBOX_AT_LEFT: () => (/* binding */ TOOLBOX_AT_LEFT),\n/* harmony export */ TOOLBOX_AT_RIGHT: () => (/* binding */ TOOLBOX_AT_RIGHT),\n/* harmony export */ TOOLBOX_AT_TOP: () => (/* binding */ TOOLBOX_AT_TOP),\n/* harmony export */ Theme: () => (/* binding */ Theme),\n/* harmony export */ ThemeManager: () => (/* binding */ ThemeManager),\n/* harmony export */ Themes: () => (/* binding */ Themes),\n/* harmony export */ Toast: () => (/* binding */ Toast),\n/* harmony export */ Toolbox: () => (/* binding */ Toolbox),\n/* harmony export */ ToolboxCategory: () => (/* binding */ ToolboxCategory),\n/* harmony export */ ToolboxItem: () => (/* binding */ ToolboxItem),\n/* harmony export */ ToolboxSeparator: () => (/* binding */ ToolboxSeparator),\n/* harmony export */ Tooltip: () => (/* binding */ Tooltip),\n/* harmony export */ Touch: () => (/* binding */ Touch),\n/* harmony export */ Trashcan: () => (/* binding */ Trashcan),\n/* harmony export */ UnattachedFieldError: () => (/* binding */ UnattachedFieldError),\n/* harmony export */ VARIABLE_CATEGORY_NAME: () => (/* binding */ VARIABLE_CATEGORY_NAME),\n/* harmony export */ VARIABLE_DYNAMIC_CATEGORY_NAME: () => (/* binding */ VARIABLE_DYNAMIC_CATEGORY_NAME),\n/* harmony export */ VERSION: () => (/* binding */ VERSION),\n/* harmony export */ VariableMap: () => (/* binding */ VariableMap),\n/* harmony export */ VariableModel: () => (/* binding */ VariableModel),\n/* harmony export */ Variables: () => (/* binding */ Variables),\n/* harmony export */ VariablesDynamic: () => (/* binding */ VariablesDynamic),\n/* harmony export */ VerticalFlyout: () => (/* binding */ VerticalFlyout),\n/* harmony export */ WidgetDiv: () => (/* binding */ WidgetDiv),\n/* harmony export */ Workspace: () => (/* binding */ Workspace),\n/* harmony export */ WorkspaceAudio: () => (/* binding */ WorkspaceAudio),\n/* harmony export */ WorkspaceDragger: () => (/* binding */ WorkspaceDragger),\n/* harmony export */ WorkspaceNavigationPolicy: () => (/* binding */ WorkspaceNavigationPolicy),\n/* harmony export */ WorkspaceSvg: () => (/* binding */ WorkspaceSvg),\n/* harmony export */ Xml: () => (/* binding */ Xml),\n/* harmony export */ ZoomControls: () => (/* binding */ ZoomControls),\n/* harmony export */ blockAnimations: () => (/* binding */ blockAnimations),\n/* harmony export */ blockRendering: () => (/* binding */ blockRendering),\n/* harmony export */ browserEvents: () => (/* binding */ browserEvents),\n/* harmony export */ bubbles: () => (/* binding */ bubbles),\n/* harmony export */ bumpObjects: () => (/* binding */ bumpObjects),\n/* harmony export */ clipboard: () => (/* binding */ clipboard),\n/* harmony export */ comments: () => (/* binding */ comments),\n/* harmony export */ common: () => (/* binding */ common),\n/* harmony export */ config: () => (/* binding */ config),\n/* harmony export */ constants: () => (/* binding */ constants),\n/* harmony export */ defineBlocksWithJsonArray: () => (/* binding */ defineBlocksWithJsonArray),\n/* harmony export */ dialog: () => (/* binding */ dialog),\n/* harmony export */ dragging: () => (/* binding */ dragging),\n/* harmony export */ fieldRegistry: () => (/* binding */ fieldRegistry),\n/* harmony export */ geras: () => (/* binding */ geras),\n/* harmony export */ getFocusManager: () => (/* binding */ getFocusManager),\n/* harmony export */ getMainWorkspace: () => (/* binding */ getMainWorkspace),\n/* harmony export */ getSelected: () => (/* binding */ getSelected),\n/* harmony export */ hasBubble: () => (/* binding */ hasBubble),\n/* harmony export */ hideChaff: () => (/* binding */ hideChaff),\n/* harmony export */ icons: () => (/* binding */ icons),\n/* harmony export */ inject: () => (/* binding */ inject),\n/* harmony export */ inputs: () => (/* binding */ inputs),\n/* harmony export */ isCopyable: () => (/* binding */ isCopyable),\n/* harmony export */ isDeletable: () => (/* binding */ isDeletable),\n/* harmony export */ isDraggable: () => (/* binding */ isDraggable),\n/* harmony export */ isIcon: () => (/* binding */ isIcon),\n/* harmony export */ isObservable: () => (/* binding */ isObservable),\n/* harmony export */ isPaster: () => (/* binding */ isPaster),\n/* harmony export */ isRenderedElement: () => (/* binding */ isRenderedElement),\n/* harmony export */ isSelectable: () => (/* binding */ isSelectable),\n/* harmony export */ isSerializable: () => (/* binding */ isSerializable),\n/* harmony export */ isVariableBackedParameterModel: () => (/* binding */ isVariableBackedParameterModel),\n/* harmony export */ keyboardNavigationController: () => (/* binding */ keyboardNavigationController),\n/* harmony export */ layers: () => (/* binding */ layers),\n/* harmony export */ navigateBlock: () => (/* binding */ navigateBlock),\n/* harmony export */ navigateStacks: () => (/* binding */ navigateStacks),\n/* harmony export */ procedures: () => (/* binding */ procedures),\n/* harmony export */ registry: () => (/* binding */ registry),\n/* harmony export */ renderManagement: () => (/* binding */ renderManagement),\n/* harmony export */ serialization: () => (/* binding */ serialization),\n/* harmony export */ setLocale: () => (/* binding */ setLocale),\n/* harmony export */ setParentContainer: () => (/* binding */ setParentContainer),\n/* harmony export */ svgResize: () => (/* binding */ svgResize),\n/* harmony export */ thrasos: () => (/* binding */ thrasos),\n/* harmony export */ uiPosition: () => (/* binding */ uiPosition),\n/* harmony export */ utils: () => (/* binding */ utils),\n/* harmony export */ zelos: () => (/* binding */ zelos)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"./node_modules/blockly/index.js\");\n\nconst {\n Block,\n BlockFlyoutInflater,\n BlockNavigationPolicy,\n BlockSvg,\n Blocks,\n ButtonFlyoutInflater,\n COLLAPSED_FIELD_NAME,\n COLLAPSED_INPUT_NAME,\n COLLAPSE_CHARS,\n CodeGenerator,\n CollapsibleToolboxCategory,\n ComponentManager,\n Connection,\n ConnectionChecker,\n ConnectionDB,\n ConnectionNavigationPolicy,\n ConnectionType,\n ContextMenu,\n ContextMenuItems,\n ContextMenuRegistry,\n Css,\n DELETE_VARIABLE_ID,\n DeleteArea,\n DragTarget,\n DropDownDiv,\n Events,\n Extensions,\n Field,\n FieldCheckbox,\n FieldDropdown,\n FieldImage,\n FieldLabel,\n FieldLabelSerializable,\n FieldNavigationPolicy,\n FieldNumber,\n FieldTextInput,\n FieldVariable,\n Flyout,\n FlyoutButton,\n FlyoutButtonNavigationPolicy,\n FlyoutItem,\n FlyoutMetricsManager,\n FlyoutNavigationPolicy,\n FlyoutNavigator,\n FlyoutSeparator,\n FlyoutSeparatorNavigationPolicy,\n FocusManager,\n FocusableTreeTraverser,\n Generator,\n Gesture,\n Grid,\n HorizontalFlyout,\n INPUT_VALUE,\n Input,\n InsertionMarkerPreviewer,\n KeyboardNavigationController,\n LabelFlyoutInflater,\n LineCursor,\n Marker,\n MarkerManager,\n Menu,\n MenuItem,\n MetricsManager,\n Msg,\n NEXT_STATEMENT,\n Names,\n Navigator,\n OPPOSITE_TYPE,\n OUTPUT_VALUE,\n Options,\n PREVIOUS_STATEMENT,\n PROCEDURE_CATEGORY_NAME,\n Procedures,\n RENAME_VARIABLE_ID,\n RenderedConnection,\n Scrollbar,\n ScrollbarPair,\n SeparatorFlyoutInflater,\n ShortcutItems,\n ShortcutRegistry,\n TOOLBOX_AT_BOTTOM,\n TOOLBOX_AT_LEFT,\n TOOLBOX_AT_RIGHT,\n TOOLBOX_AT_TOP,\n Theme,\n ThemeManager,\n Themes,\n Toast,\n Toolbox,\n ToolboxCategory,\n ToolboxItem,\n ToolboxSeparator,\n Tooltip,\n Touch,\n Trashcan,\n UnattachedFieldError,\n VARIABLE_CATEGORY_NAME,\n VARIABLE_DYNAMIC_CATEGORY_NAME,\n VERSION,\n VariableMap,\n VariableModel,\n Variables,\n VariablesDynamic,\n VerticalFlyout,\n WidgetDiv,\n Workspace,\n WorkspaceAudio,\n WorkspaceDragger,\n WorkspaceNavigationPolicy,\n WorkspaceSvg,\n Xml,\n ZoomControls,\n blockAnimations,\n blockRendering,\n browserEvents,\n bubbles,\n bumpObjects,\n clipboard,\n comments,\n common,\n config,\n constants,\n defineBlocksWithJsonArray,\n dialog,\n dragging,\n fieldRegistry,\n geras,\n getFocusManager,\n getMainWorkspace,\n getSelected,\n hasBubble,\n hideChaff,\n icons,\n inject,\n inputs,\n isCopyable,\n isDeletable,\n isDraggable,\n isIcon,\n isObservable,\n isPaster,\n isRenderedElement,\n isSelectable,\n isSerializable,\n isVariableBackedParameterModel,\n keyboardNavigationController,\n layers,\n navigateBlock,\n navigateStacks,\n procedures,\n registry,\n renderManagement,\n serialization,\n setLocale,\n setParentContainer,\n svgResize,\n thrasos,\n uiPosition,\n utils,\n zelos,\n} = _index_js__WEBPACK_IMPORTED_MODULE_0__;\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/index.mjs?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/msg/en.js": +/*!****************************************!*\ + !*** ./node_modules/blockly/msg/en.js ***! + \****************************************/ +/***/ (function(module, exports) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{ var key, messages; }\n}(this, function() {\n// This file was automatically generated. Do not modify.\n\n'use strict';\n\nvar Blockly = Blockly || { Msg: Object.create(null) };\n\nBlockly.Msg[\"ADD_COMMENT\"] = \"Add Comment\";\nBlockly.Msg[\"ALT_KEY\"] = \"Alt\";\nBlockly.Msg[\"CANNOT_DELETE_VARIABLE_PROCEDURE\"] = \"Can't delete the variable '%1' because it's part of the definition of the function '%2'\";\nBlockly.Msg[\"CHANGE_VALUE_TITLE\"] = \"Change value:\";\nBlockly.Msg[\"CHROME_OS\"] = \"ChromeOS\";\nBlockly.Msg[\"CLEAN_UP\"] = \"Clean up Blocks\";\nBlockly.Msg[\"CLOSE\"] = \"Close\";\nBlockly.Msg[\"COLLAPSED_WARNINGS_WARNING\"] = \"Collapsed blocks contain warnings.\";\nBlockly.Msg[\"COLLAPSE_ALL\"] = \"Collapse Blocks\";\nBlockly.Msg[\"COLLAPSE_BLOCK\"] = \"Collapse Block\";\nBlockly.Msg[\"COLOUR_BLEND_COLOUR1\"] = \"colour 1\";\nBlockly.Msg[\"COLOUR_BLEND_COLOUR2\"] = \"colour 2\";\nBlockly.Msg[\"COLOUR_BLEND_HELPURL\"] = \"https://meyerweb.com/eric/tools/color-blend/#:::rgbp\";\nBlockly.Msg[\"COLOUR_BLEND_RATIO\"] = \"ratio\";\nBlockly.Msg[\"COLOUR_BLEND_TITLE\"] = \"blend\";\nBlockly.Msg[\"COLOUR_BLEND_TOOLTIP\"] = \"Blends two colours together with a given ratio (0.0 - 1.0).\";\nBlockly.Msg[\"COLOUR_PICKER_HELPURL\"] = \"https://en.wikipedia.org/wiki/Color\";\nBlockly.Msg[\"COLOUR_PICKER_TOOLTIP\"] = \"Choose a colour from the palette.\";\nBlockly.Msg[\"COLOUR_RANDOM_HELPURL\"] = \"http://randomcolour.com\";\nBlockly.Msg[\"COLOUR_RANDOM_TITLE\"] = \"random colour\";\nBlockly.Msg[\"COLOUR_RANDOM_TOOLTIP\"] = \"Choose a colour at random.\";\nBlockly.Msg[\"COLOUR_RGB_BLUE\"] = \"blue\";\nBlockly.Msg[\"COLOUR_RGB_GREEN\"] = \"green\";\nBlockly.Msg[\"COLOUR_RGB_HELPURL\"] = \"https://www.december.com/html/spec/colorpercompact.html\";\nBlockly.Msg[\"COLOUR_RGB_RED\"] = \"red\";\nBlockly.Msg[\"COLOUR_RGB_TITLE\"] = \"colour with\";\nBlockly.Msg[\"COLOUR_RGB_TOOLTIP\"] = \"Create a colour with the specified amount of red, green, and blue. All values must be between 0 and 100.\";\nBlockly.Msg[\"COMMAND_KEY\"] = \"⌘ Command\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#loop-termination-blocks\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK\"] = \"break out of loop\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE\"] = \"continue with next iteration of loop\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK\"] = \"Break out of the containing loop.\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE\"] = \"Skip the rest of this loop, and continue with the next iteration.\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_WARNING\"] = \"Warning: This block may only be used within a loop.\";\nBlockly.Msg[\"CONTROLS_FOREACH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#for-each\";\nBlockly.Msg[\"CONTROLS_FOREACH_TITLE\"] = \"for each item %1 in list %2\";\nBlockly.Msg[\"CONTROLS_FOREACH_TOOLTIP\"] = \"For each item in a list, set the variable '%1' to the item, and then do some statements.\";\nBlockly.Msg[\"CONTROLS_FOR_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#count-with\";\nBlockly.Msg[\"CONTROLS_FOR_TITLE\"] = \"count with %1 from %2 to %3 by %4\";\nBlockly.Msg[\"CONTROLS_FOR_TOOLTIP\"] = \"Have the variable '%1' take on the values from the start number to the end number, counting by the specified interval, and do the specified blocks.\";\nBlockly.Msg[\"CONTROLS_IF_ELSEIF_TOOLTIP\"] = \"Add a condition to the if block.\";\nBlockly.Msg[\"CONTROLS_IF_ELSE_TOOLTIP\"] = \"Add a final, catch-all condition to the if block.\";\nBlockly.Msg[\"CONTROLS_IF_HELPURL\"] = \"https://github.com/google/blockly/wiki/IfElse\";\nBlockly.Msg[\"CONTROLS_IF_IF_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this if block.\";\nBlockly.Msg[\"CONTROLS_IF_MSG_ELSE\"] = \"else\";\nBlockly.Msg[\"CONTROLS_IF_MSG_ELSEIF\"] = \"else if\";\nBlockly.Msg[\"CONTROLS_IF_MSG_IF\"] = \"if\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_1\"] = \"If a value is true, then do some statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_2\"] = \"If a value is true, then do the first block of statements. Otherwise, do the second block of statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_3\"] = \"If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_4\"] = \"If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements. If none of the values are true, do the last block of statements.\";\nBlockly.Msg[\"CONTROLS_REPEAT_HELPURL\"] = \"https://en.wikipedia.org/wiki/For_loop\";\nBlockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"] = \"do\";\nBlockly.Msg[\"CONTROLS_REPEAT_TITLE\"] = \"repeat %1 times\";\nBlockly.Msg[\"CONTROLS_REPEAT_TOOLTIP\"] = \"Do some statements several times.\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#repeat\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_OPERATOR_UNTIL\"] = \"repeat until\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_OPERATOR_WHILE\"] = \"repeat while\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL\"] = \"While a value is false, then do some statements.\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_TOOLTIP_WHILE\"] = \"While a value is true, then do some statements.\";\nBlockly.Msg[\"CONTROL_KEY\"] = \"Ctrl\";\nBlockly.Msg[\"COPY_SHORTCUT\"] = \"Copy\";\nBlockly.Msg[\"CUT_SHORTCUT\"] = \"Cut\";\nBlockly.Msg[\"DELETE_ALL_BLOCKS\"] = \"Delete all %1 blocks?\";\nBlockly.Msg[\"DELETE_BLOCK\"] = \"Delete Block\";\nBlockly.Msg[\"DELETE_VARIABLE\"] = \"Delete the '%1' variable\";\nBlockly.Msg[\"DELETE_VARIABLE_CONFIRMATION\"] = \"Delete %1 uses of the '%2' variable?\";\nBlockly.Msg[\"DELETE_X_BLOCKS\"] = \"Delete %1 Blocks\";\nBlockly.Msg[\"DIALOG_CANCEL\"] = \"Cancel\";\nBlockly.Msg[\"DIALOG_OK\"] = \"OK\";\nBlockly.Msg[\"DISABLE_BLOCK\"] = \"Disable Block\";\nBlockly.Msg[\"DUPLICATE_BLOCK\"] = \"Duplicate\";\nBlockly.Msg[\"DUPLICATE_COMMENT\"] = \"Duplicate Comment\";\nBlockly.Msg[\"EDIT_BLOCK_CONTENTS\"] = \"Edit Block contents\";\nBlockly.Msg[\"ENABLE_BLOCK\"] = \"Enable Block\";\nBlockly.Msg[\"EXPAND_ALL\"] = \"Expand Blocks\";\nBlockly.Msg[\"EXPAND_BLOCK\"] = \"Expand Block\";\nBlockly.Msg[\"EXTERNAL_INPUTS\"] = \"External Inputs\";\nBlockly.Msg[\"HELP\"] = \"Help\";\nBlockly.Msg[\"HELP_PROMPT\"] = \"Press %1 for help on keyboard controls\";\nBlockly.Msg[\"INLINE_INPUTS\"] = \"Inline Inputs\";\nBlockly.Msg[\"KEYBOARD_NAV_CONSTRAINED_MOVE_HINT\"] = \"Use the arrow keys to move, then %1 to accept the position\";\nBlockly.Msg[\"KEYBOARD_NAV_COPIED_HINT\"] = \"Copied. Press %1 to paste.\";\nBlockly.Msg[\"KEYBOARD_NAV_CUT_HINT\"] = \"Cut. Press %1 to paste.\";\nBlockly.Msg[\"KEYBOARD_NAV_UNCONSTRAINED_MOVE_HINT\"] = \"Hold %1 and use arrow keys to move freely, then %2 to accept the position\";\nBlockly.Msg[\"LINUX\"] = \"Linux\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-empty-list\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_TITLE\"] = \"create empty list\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_TOOLTIP\"] = \"Returns a list, of length 0, containing no data records\";\nBlockly.Msg[\"LISTS_CREATE_WITH_CONTAINER_TITLE_ADD\"] = \"list\";\nBlockly.Msg[\"LISTS_CREATE_WITH_CONTAINER_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this list block.\";\nBlockly.Msg[\"LISTS_CREATE_WITH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-list-with\";\nBlockly.Msg[\"LISTS_CREATE_WITH_INPUT_WITH\"] = \"create list with\";\nBlockly.Msg[\"LISTS_CREATE_WITH_ITEM_TOOLTIP\"] = \"Add an item to the list.\";\nBlockly.Msg[\"LISTS_CREATE_WITH_TOOLTIP\"] = \"Create a list with any number of items.\";\nBlockly.Msg[\"LISTS_GET_INDEX_FIRST\"] = \"first\";\nBlockly.Msg[\"LISTS_GET_INDEX_FROM_END\"] = \"# from end\";\nBlockly.Msg[\"LISTS_GET_INDEX_FROM_START\"] = \"#\";\nBlockly.Msg[\"LISTS_GET_INDEX_GET\"] = \"get\";\nBlockly.Msg[\"LISTS_GET_INDEX_GET_REMOVE\"] = \"get and remove\";\nBlockly.Msg[\"LISTS_GET_INDEX_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list\";\nBlockly.Msg[\"LISTS_GET_INDEX_LAST\"] = \"last\";\nBlockly.Msg[\"LISTS_GET_INDEX_RANDOM\"] = \"random\";\nBlockly.Msg[\"LISTS_GET_INDEX_REMOVE\"] = \"remove\";\nBlockly.Msg[\"LISTS_GET_INDEX_TAIL\"] = \"\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_FIRST\"] = \"Returns the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_FROM\"] = \"Returns the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_LAST\"] = \"Returns the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_RANDOM\"] = \"Returns a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST\"] = \"Removes and returns the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM\"] = \"Removes and returns the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST\"] = \"Removes and returns the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM\"] = \"Removes and returns a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST\"] = \"Removes the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM\"] = \"Removes the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST\"] = \"Removes the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM\"] = \"Removes a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_FROM_END\"] = \"to # from end\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_FROM_START\"] = \"to #\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_LAST\"] = \"to last\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#getting-a-sublist\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FIRST\"] = \"get sub-list from first\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FROM_END\"] = \"get sub-list from # from end\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FROM_START\"] = \"get sub-list from #\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_TAIL\"] = \"\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_TOOLTIP\"] = \"Creates a copy of the specified portion of a list.\";\nBlockly.Msg[\"LISTS_INDEX_FROM_END_TOOLTIP\"] = \"%1 is the last item.\";\nBlockly.Msg[\"LISTS_INDEX_FROM_START_TOOLTIP\"] = \"%1 is the first item.\";\nBlockly.Msg[\"LISTS_INDEX_OF_FIRST\"] = \"find first occurrence of item\";\nBlockly.Msg[\"LISTS_INDEX_OF_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#finding-items-in-a-list\";\nBlockly.Msg[\"LISTS_INDEX_OF_LAST\"] = \"find last occurrence of item\";\nBlockly.Msg[\"LISTS_INDEX_OF_TOOLTIP\"] = \"Returns the index of the first/last occurrence of the item in the list. Returns %1 if item is not found.\";\nBlockly.Msg[\"LISTS_INLIST\"] = \"in list\";\nBlockly.Msg[\"LISTS_ISEMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#is-empty\";\nBlockly.Msg[\"LISTS_ISEMPTY_TITLE\"] = \"%1 is empty\";\nBlockly.Msg[\"LISTS_ISEMPTY_TOOLTIP\"] = \"Returns true if the list is empty.\";\nBlockly.Msg[\"LISTS_LENGTH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#length-of\";\nBlockly.Msg[\"LISTS_LENGTH_TITLE\"] = \"length of %1\";\nBlockly.Msg[\"LISTS_LENGTH_TOOLTIP\"] = \"Returns the length of a list.\";\nBlockly.Msg[\"LISTS_REPEAT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-list-with\";\nBlockly.Msg[\"LISTS_REPEAT_TITLE\"] = \"create list with item %1 repeated %2 times\";\nBlockly.Msg[\"LISTS_REPEAT_TOOLTIP\"] = \"Creates a list consisting of the given value repeated the specified number of times.\";\nBlockly.Msg[\"LISTS_REVERSE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#reversing-a-list\";\nBlockly.Msg[\"LISTS_REVERSE_MESSAGE0\"] = \"reverse %1\";\nBlockly.Msg[\"LISTS_REVERSE_TOOLTIP\"] = \"Reverse a copy of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#in-list--set\";\nBlockly.Msg[\"LISTS_SET_INDEX_INPUT_TO\"] = \"as\";\nBlockly.Msg[\"LISTS_SET_INDEX_INSERT\"] = \"insert at\";\nBlockly.Msg[\"LISTS_SET_INDEX_SET\"] = \"set\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST\"] = \"Inserts the item at the start of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_FROM\"] = \"Inserts the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_LAST\"] = \"Append the item to the end of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM\"] = \"Inserts the item randomly in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_FIRST\"] = \"Sets the first item in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_FROM\"] = \"Sets the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_LAST\"] = \"Sets the last item in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_RANDOM\"] = \"Sets a random item in a list.\";\nBlockly.Msg[\"LISTS_SORT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#sorting-a-list\";\nBlockly.Msg[\"LISTS_SORT_ORDER_ASCENDING\"] = \"ascending\";\nBlockly.Msg[\"LISTS_SORT_ORDER_DESCENDING\"] = \"descending\";\nBlockly.Msg[\"LISTS_SORT_TITLE\"] = \"sort %1 %2 %3\";\nBlockly.Msg[\"LISTS_SORT_TOOLTIP\"] = \"Sort a copy of a list.\";\nBlockly.Msg[\"LISTS_SORT_TYPE_IGNORECASE\"] = \"alphabetic, ignore case\";\nBlockly.Msg[\"LISTS_SORT_TYPE_NUMERIC\"] = \"numeric\";\nBlockly.Msg[\"LISTS_SORT_TYPE_TEXT\"] = \"alphabetic\";\nBlockly.Msg[\"LISTS_SPLIT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists\";\nBlockly.Msg[\"LISTS_SPLIT_LIST_FROM_TEXT\"] = \"make list from text\";\nBlockly.Msg[\"LISTS_SPLIT_TEXT_FROM_LIST\"] = \"make text from list\";\nBlockly.Msg[\"LISTS_SPLIT_TOOLTIP_JOIN\"] = \"Join a list of texts into one text, separated by a delimiter.\";\nBlockly.Msg[\"LISTS_SPLIT_TOOLTIP_SPLIT\"] = \"Split text into a list of texts, breaking at each delimiter.\";\nBlockly.Msg[\"LISTS_SPLIT_WITH_DELIMITER\"] = \"with delimiter\";\nBlockly.Msg[\"LOGIC_BOOLEAN_FALSE\"] = \"false\";\nBlockly.Msg[\"LOGIC_BOOLEAN_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#values\";\nBlockly.Msg[\"LOGIC_BOOLEAN_TOOLTIP\"] = \"Returns either true or false.\";\nBlockly.Msg[\"LOGIC_BOOLEAN_TRUE\"] = \"true\";\nBlockly.Msg[\"LOGIC_COMPARE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Inequality_(mathematics)\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_EQ\"] = \"Return true if both inputs equal each other.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_GT\"] = \"Return true if the first input is greater than the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_GTE\"] = \"Return true if the first input is greater than or equal to the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_LT\"] = \"Return true if the first input is smaller than the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_LTE\"] = \"Return true if the first input is smaller than or equal to the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_NEQ\"] = \"Return true if both inputs are not equal to each other.\";\nBlockly.Msg[\"LOGIC_NEGATE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#not\";\nBlockly.Msg[\"LOGIC_NEGATE_TITLE\"] = \"not %1\";\nBlockly.Msg[\"LOGIC_NEGATE_TOOLTIP\"] = \"Returns true if the input is false. Returns false if the input is true.\";\nBlockly.Msg[\"LOGIC_NULL\"] = \"null\";\nBlockly.Msg[\"LOGIC_NULL_HELPURL\"] = \"https://en.wikipedia.org/wiki/Nullable_type\";\nBlockly.Msg[\"LOGIC_NULL_TOOLTIP\"] = \"Returns null.\";\nBlockly.Msg[\"LOGIC_OPERATION_AND\"] = \"and\";\nBlockly.Msg[\"LOGIC_OPERATION_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#logical-operations\";\nBlockly.Msg[\"LOGIC_OPERATION_OR\"] = \"or\";\nBlockly.Msg[\"LOGIC_OPERATION_TOOLTIP_AND\"] = \"Return true if both inputs are true.\";\nBlockly.Msg[\"LOGIC_OPERATION_TOOLTIP_OR\"] = \"Return true if at least one of the inputs is true.\";\nBlockly.Msg[\"LOGIC_TERNARY_CONDITION\"] = \"test\";\nBlockly.Msg[\"LOGIC_TERNARY_HELPURL\"] = \"https://en.wikipedia.org/wiki/%3F:\";\nBlockly.Msg[\"LOGIC_TERNARY_IF_FALSE\"] = \"if false\";\nBlockly.Msg[\"LOGIC_TERNARY_IF_TRUE\"] = \"if true\";\nBlockly.Msg[\"LOGIC_TERNARY_TOOLTIP\"] = \"Check the condition in 'test'. If the condition is true, returns the 'if true' value; otherwise returns the 'if false' value.\";\nBlockly.Msg[\"MAC_OS\"] = \"macOS\";\nBlockly.Msg[\"MATH_ADDITION_SYMBOL\"] = \"+\";\nBlockly.Msg[\"MATH_ARITHMETIC_HELPURL\"] = \"https://en.wikipedia.org/wiki/Arithmetic\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_ADD\"] = \"Return the sum of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_DIVIDE\"] = \"Return the quotient of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_MINUS\"] = \"Return the difference of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_MULTIPLY\"] = \"Return the product of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_POWER\"] = \"Return the first number raised to the power of the second number.\";\nBlockly.Msg[\"MATH_ATAN2_HELPURL\"] = \"https://en.wikipedia.org/wiki/Atan2\";\nBlockly.Msg[\"MATH_ATAN2_TITLE\"] = \"atan2 of X:%1 Y:%2\";\nBlockly.Msg[\"MATH_ATAN2_TOOLTIP\"] = \"Return the arctangent of point (X, Y) in degrees from -180 to 180.\";\nBlockly.Msg[\"MATH_CHANGE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter\";\nBlockly.Msg[\"MATH_CHANGE_TITLE\"] = \"change %1 by %2\";\nBlockly.Msg[\"MATH_CHANGE_TOOLTIP\"] = \"Add a number to variable '%1'.\";\nBlockly.Msg[\"MATH_CONSTANT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Mathematical_constant\";\nBlockly.Msg[\"MATH_CONSTANT_TOOLTIP\"] = \"Return one of the common constants: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (infinity).\";\nBlockly.Msg[\"MATH_CONSTRAIN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Clamping_(graphics)\";\nBlockly.Msg[\"MATH_CONSTRAIN_TITLE\"] = \"constrain %1 low %2 high %3\";\nBlockly.Msg[\"MATH_CONSTRAIN_TOOLTIP\"] = \"Constrain a number to be between the specified limits (inclusive).\";\nBlockly.Msg[\"MATH_DIVISION_SYMBOL\"] = \"÷\";\nBlockly.Msg[\"MATH_IS_DIVISIBLE_BY\"] = \"is divisible by\";\nBlockly.Msg[\"MATH_IS_EVEN\"] = \"is even\";\nBlockly.Msg[\"MATH_IS_NEGATIVE\"] = \"is negative\";\nBlockly.Msg[\"MATH_IS_ODD\"] = \"is odd\";\nBlockly.Msg[\"MATH_IS_POSITIVE\"] = \"is positive\";\nBlockly.Msg[\"MATH_IS_PRIME\"] = \"is prime\";\nBlockly.Msg[\"MATH_IS_TOOLTIP\"] = \"Check if a number is an even, odd, prime, whole, positive, negative, or if it is divisible by certain number. Returns true or false.\";\nBlockly.Msg[\"MATH_IS_WHOLE\"] = \"is whole\";\nBlockly.Msg[\"MATH_MODULO_HELPURL\"] = \"https://en.wikipedia.org/wiki/Modulo_operation\";\nBlockly.Msg[\"MATH_MODULO_TITLE\"] = \"remainder of %1 ÷ %2\";\nBlockly.Msg[\"MATH_MODULO_TOOLTIP\"] = \"Return the remainder from dividing the two numbers.\";\nBlockly.Msg[\"MATH_MULTIPLICATION_SYMBOL\"] = \"×\";\nBlockly.Msg[\"MATH_NUMBER_HELPURL\"] = \"https://en.wikipedia.org/wiki/Number\";\nBlockly.Msg[\"MATH_NUMBER_TOOLTIP\"] = \"A number.\";\nBlockly.Msg[\"MATH_ONLIST_HELPURL\"] = \"\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_AVERAGE\"] = \"average of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MAX\"] = \"max of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MEDIAN\"] = \"median of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MIN\"] = \"min of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MODE\"] = \"modes of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_RANDOM\"] = \"random item of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_STD_DEV\"] = \"standard deviation of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_SUM\"] = \"sum of list\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_AVERAGE\"] = \"Return the average (arithmetic mean) of the numeric values in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MAX\"] = \"Return the largest number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MEDIAN\"] = \"Return the median number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MIN\"] = \"Return the smallest number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MODE\"] = \"Return a list of the most common item(s) in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_RANDOM\"] = \"Return a random element from the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_STD_DEV\"] = \"Return the standard deviation of the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_SUM\"] = \"Return the sum of all the numbers in the list.\";\nBlockly.Msg[\"MATH_POWER_SYMBOL\"] = \"^\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Random_number_generation\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_TITLE_RANDOM\"] = \"random fraction\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_TOOLTIP\"] = \"Return a random fraction between 0.0 (inclusive) and 1.0 (exclusive).\";\nBlockly.Msg[\"MATH_RANDOM_INT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Random_number_generation\";\nBlockly.Msg[\"MATH_RANDOM_INT_TITLE\"] = \"random integer from %1 to %2\";\nBlockly.Msg[\"MATH_RANDOM_INT_TOOLTIP\"] = \"Return a random integer between the two specified limits, inclusive.\";\nBlockly.Msg[\"MATH_ROUND_HELPURL\"] = \"https://en.wikipedia.org/wiki/Rounding\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUND\"] = \"round\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUNDDOWN\"] = \"round down\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUNDUP\"] = \"round up\";\nBlockly.Msg[\"MATH_ROUND_TOOLTIP\"] = \"Round a number up or down.\";\nBlockly.Msg[\"MATH_SINGLE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Square_root\";\nBlockly.Msg[\"MATH_SINGLE_OP_ABSOLUTE\"] = \"absolute\";\nBlockly.Msg[\"MATH_SINGLE_OP_ROOT\"] = \"square root\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_ABS\"] = \"Return the absolute value of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_EXP\"] = \"Return e to the power of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_LN\"] = \"Return the natural logarithm of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_LOG10\"] = \"Return the base 10 logarithm of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_NEG\"] = \"Return the negation of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_POW10\"] = \"Return 10 to the power of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_ROOT\"] = \"Return the square root of a number.\";\nBlockly.Msg[\"MATH_SUBTRACTION_SYMBOL\"] = \"-\";\nBlockly.Msg[\"MATH_TRIG_ACOS\"] = \"acos\";\nBlockly.Msg[\"MATH_TRIG_ASIN\"] = \"asin\";\nBlockly.Msg[\"MATH_TRIG_ATAN\"] = \"atan\";\nBlockly.Msg[\"MATH_TRIG_COS\"] = \"cos\";\nBlockly.Msg[\"MATH_TRIG_HELPURL\"] = \"https://en.wikipedia.org/wiki/Trigonometric_functions\";\nBlockly.Msg[\"MATH_TRIG_SIN\"] = \"sin\";\nBlockly.Msg[\"MATH_TRIG_TAN\"] = \"tan\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ACOS\"] = \"Return the arccosine of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ASIN\"] = \"Return the arcsine of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ATAN\"] = \"Return the arctangent of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_COS\"] = \"Return the cosine of a degree (not radian).\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_SIN\"] = \"Return the sine of a degree (not radian).\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_TAN\"] = \"Return the tangent of a degree (not radian).\";\nBlockly.Msg[\"MOVE_BLOCK\"] = \"Move Block\";\nBlockly.Msg[\"NEW_COLOUR_VARIABLE\"] = \"Create colour variable...\";\nBlockly.Msg[\"NEW_NUMBER_VARIABLE\"] = \"Create number variable...\";\nBlockly.Msg[\"NEW_STRING_VARIABLE\"] = \"Create string variable...\";\nBlockly.Msg[\"NEW_VARIABLE\"] = \"Create variable...\";\nBlockly.Msg[\"NEW_VARIABLE_TITLE\"] = \"New variable name:\";\nBlockly.Msg[\"NEW_VARIABLE_TYPE_TITLE\"] = \"New variable type:\";\nBlockly.Msg[\"OPTION_KEY\"] = \"⌥ Option\";\nBlockly.Msg[\"ORDINAL_NUMBER_SUFFIX\"] = \"\";\nBlockly.Msg[\"PASTE_SHORTCUT\"] = \"Paste\";\nBlockly.Msg[\"PROCEDURES_ALLOW_STATEMENTS\"] = \"allow statements\";\nBlockly.Msg[\"PROCEDURES_BEFORE_PARAMS\"] = \"with:\";\nBlockly.Msg[\"PROCEDURES_CALLNORETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_CALLNORETURN_TOOLTIP\"] = \"Run the user-defined function '%1'.\";\nBlockly.Msg[\"PROCEDURES_CALLRETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_CALLRETURN_TOOLTIP\"] = \"Run the user-defined function '%1' and use its output.\";\nBlockly.Msg[\"PROCEDURES_CALL_BEFORE_PARAMS\"] = \"with:\";\nBlockly.Msg[\"PROCEDURES_CALL_DISABLED_DEF_WARNING\"] = \"Can't run the user-defined function '%1' because the definition block is disabled.\";\nBlockly.Msg[\"PROCEDURES_CREATE_DO\"] = \"Create '%1'\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_COMMENT\"] = \"Describe this function...\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_DO\"] = \"\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_PROCEDURE\"] = \"do something\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_TITLE\"] = \"to\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_TOOLTIP\"] = \"Creates a function with no output.\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_RETURN\"] = \"return\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_TOOLTIP\"] = \"Creates a function with an output.\";\nBlockly.Msg[\"PROCEDURES_DEF_DUPLICATE_WARNING\"] = \"Warning: This function has duplicate parameters.\";\nBlockly.Msg[\"PROCEDURES_HIGHLIGHT_DEF\"] = \"Highlight function definition\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_HELPURL\"] = \"https://c2.com/cgi/wiki?GuardClause\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_TOOLTIP\"] = \"If a value is true, then return a second value.\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_WARNING\"] = \"Warning: This block may be used only within a function definition.\";\nBlockly.Msg[\"PROCEDURES_MUTATORARG_TITLE\"] = \"input name:\";\nBlockly.Msg[\"PROCEDURES_MUTATORARG_TOOLTIP\"] = \"Add an input to the function.\";\nBlockly.Msg[\"PROCEDURES_MUTATORCONTAINER_TITLE\"] = \"inputs\";\nBlockly.Msg[\"PROCEDURES_MUTATORCONTAINER_TOOLTIP\"] = \"Add, remove, or reorder inputs to this function.\";\nBlockly.Msg[\"REDO\"] = \"Redo\";\nBlockly.Msg[\"REMOVE_COMMENT\"] = \"Remove Comment\";\nBlockly.Msg[\"RENAME_VARIABLE\"] = \"Rename variable...\";\nBlockly.Msg[\"RENAME_VARIABLE_TITLE\"] = \"Rename all '%1' variables to:\";\nBlockly.Msg[\"SHORTCUTS_CODE_NAVIGATION\"] = \"Code navigation\";\nBlockly.Msg[\"SHORTCUTS_EDITING\"] = \"Editing\";\nBlockly.Msg[\"SHORTCUTS_GENERAL\"] = \"General\";\nBlockly.Msg[\"TEXT_APPEND_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-modification\";\nBlockly.Msg[\"TEXT_APPEND_TITLE\"] = \"to %1 append text %2\";\nBlockly.Msg[\"TEXT_APPEND_TOOLTIP\"] = \"Append some text to variable '%1'.\";\nBlockly.Msg[\"TEXT_CHANGECASE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#adjusting-text-case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_LOWERCASE\"] = \"to lower case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_TITLECASE\"] = \"to Title Case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_UPPERCASE\"] = \"to UPPER CASE\";\nBlockly.Msg[\"TEXT_CHANGECASE_TOOLTIP\"] = \"Return a copy of the text in a different case.\";\nBlockly.Msg[\"TEXT_CHARAT_FIRST\"] = \"get first letter\";\nBlockly.Msg[\"TEXT_CHARAT_FROM_END\"] = \"get letter # from end\";\nBlockly.Msg[\"TEXT_CHARAT_FROM_START\"] = \"get letter #\";\nBlockly.Msg[\"TEXT_CHARAT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#extracting-text\";\nBlockly.Msg[\"TEXT_CHARAT_LAST\"] = \"get last letter\";\nBlockly.Msg[\"TEXT_CHARAT_RANDOM\"] = \"get random letter\";\nBlockly.Msg[\"TEXT_CHARAT_TAIL\"] = \"\";\nBlockly.Msg[\"TEXT_CHARAT_TITLE\"] = \"in text %1 %2\";\nBlockly.Msg[\"TEXT_CHARAT_TOOLTIP\"] = \"Returns the letter at the specified position.\";\nBlockly.Msg[\"TEXT_COUNT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#counting-substrings\";\nBlockly.Msg[\"TEXT_COUNT_MESSAGE0\"] = \"count %1 in %2\";\nBlockly.Msg[\"TEXT_COUNT_TOOLTIP\"] = \"Count how many times some text occurs within some other text.\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_ITEM_TOOLTIP\"] = \"Add an item to the text.\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_TITLE_JOIN\"] = \"join\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this text block.\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_FROM_END\"] = \"to letter # from end\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_FROM_START\"] = \"to letter #\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_LAST\"] = \"to last letter\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_INPUT_IN_TEXT\"] = \"in text\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FIRST\"] = \"get substring from first letter\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FROM_END\"] = \"get substring from letter # from end\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FROM_START\"] = \"get substring from letter #\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_TAIL\"] = \"\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_TOOLTIP\"] = \"Returns a specified portion of the text.\";\nBlockly.Msg[\"TEXT_INDEXOF_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#finding-text\";\nBlockly.Msg[\"TEXT_INDEXOF_OPERATOR_FIRST\"] = \"find first occurrence of text\";\nBlockly.Msg[\"TEXT_INDEXOF_OPERATOR_LAST\"] = \"find last occurrence of text\";\nBlockly.Msg[\"TEXT_INDEXOF_TITLE\"] = \"in text %1 %2 %3\";\nBlockly.Msg[\"TEXT_INDEXOF_TOOLTIP\"] = \"Returns the index of the first/last occurrence of the first text in the second text. Returns %1 if text is not found.\";\nBlockly.Msg[\"TEXT_ISEMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#checking-for-empty-text\";\nBlockly.Msg[\"TEXT_ISEMPTY_TITLE\"] = \"%1 is empty\";\nBlockly.Msg[\"TEXT_ISEMPTY_TOOLTIP\"] = \"Returns true if the provided text is empty.\";\nBlockly.Msg[\"TEXT_JOIN_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-creation\";\nBlockly.Msg[\"TEXT_JOIN_TITLE_CREATEWITH\"] = \"create text with\";\nBlockly.Msg[\"TEXT_JOIN_TOOLTIP\"] = \"Create a piece of text by joining together any number of items.\";\nBlockly.Msg[\"TEXT_LENGTH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-modification\";\nBlockly.Msg[\"TEXT_LENGTH_TITLE\"] = \"length of %1\";\nBlockly.Msg[\"TEXT_LENGTH_TOOLTIP\"] = \"Returns the number of letters (including spaces) in the provided text.\";\nBlockly.Msg[\"TEXT_PRINT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#printing-text\";\nBlockly.Msg[\"TEXT_PRINT_TITLE\"] = \"print %1\";\nBlockly.Msg[\"TEXT_PRINT_TOOLTIP\"] = \"Print the specified text, number or other value.\";\nBlockly.Msg[\"TEXT_PROMPT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#getting-input-from-the-user\";\nBlockly.Msg[\"TEXT_PROMPT_TOOLTIP_NUMBER\"] = \"Prompt for user for a number.\";\nBlockly.Msg[\"TEXT_PROMPT_TOOLTIP_TEXT\"] = \"Prompt for user for some text.\";\nBlockly.Msg[\"TEXT_PROMPT_TYPE_NUMBER\"] = \"prompt for number with message\";\nBlockly.Msg[\"TEXT_PROMPT_TYPE_TEXT\"] = \"prompt for text with message\";\nBlockly.Msg[\"TEXT_REPLACE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#replacing-substrings\";\nBlockly.Msg[\"TEXT_REPLACE_MESSAGE0\"] = \"replace %1 with %2 in %3\";\nBlockly.Msg[\"TEXT_REPLACE_TOOLTIP\"] = \"Replace all occurances of some text within some other text.\";\nBlockly.Msg[\"TEXT_REVERSE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#reversing-text\";\nBlockly.Msg[\"TEXT_REVERSE_MESSAGE0\"] = \"reverse %1\";\nBlockly.Msg[\"TEXT_REVERSE_TOOLTIP\"] = \"Reverses the order of the characters in the text.\";\nBlockly.Msg[\"TEXT_TEXT_HELPURL\"] = \"https://en.wikipedia.org/wiki/String_(computer_science)\";\nBlockly.Msg[\"TEXT_TEXT_TOOLTIP\"] = \"A letter, word, or line of text.\";\nBlockly.Msg[\"TEXT_TRIM_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#trimming-removing-spaces\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_BOTH\"] = \"trim spaces from both sides of\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_LEFT\"] = \"trim spaces from left side of\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_RIGHT\"] = \"trim spaces from right side of\";\nBlockly.Msg[\"TEXT_TRIM_TOOLTIP\"] = \"Return a copy of the text with spaces removed from one or both ends.\";\nBlockly.Msg[\"TODAY\"] = \"Today\";\nBlockly.Msg[\"UNDO\"] = \"Undo\";\nBlockly.Msg[\"UNKNOWN\"] = \"Unknown\";\nBlockly.Msg[\"UNNAMED_KEY\"] = \"unnamed\";\nBlockly.Msg[\"VARIABLES_DEFAULT_NAME\"] = \"item\";\nBlockly.Msg[\"VARIABLES_GET_CREATE_SET\"] = \"Create 'set %1'\";\nBlockly.Msg[\"VARIABLES_GET_HELPURL\"] = \"https://github.com/google/blockly/wiki/Variables#get\";\nBlockly.Msg[\"VARIABLES_GET_TOOLTIP\"] = \"Returns the value of this variable.\";\nBlockly.Msg[\"VARIABLES_SET\"] = \"set %1 to %2\";\nBlockly.Msg[\"VARIABLES_SET_CREATE_GET\"] = \"Create 'get %1'\";\nBlockly.Msg[\"VARIABLES_SET_HELPURL\"] = \"https://github.com/google/blockly/wiki/Variables#set\";\nBlockly.Msg[\"VARIABLES_SET_TOOLTIP\"] = \"Sets this variable to be equal to the input.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS\"] = \"A variable named '%1' already exists.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE\"] = \"A variable named '%1' already exists for another type: '%2'.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS_FOR_A_PARAMETER\"] = \"A variable named '%1' already exists as a parameter in the procedure '%2'.\";\nBlockly.Msg[\"WINDOWS\"] = \"Windows\";\nBlockly.Msg[\"WORKSPACE_ARIA_LABEL\"] = \"Blockly Workspace\";\nBlockly.Msg[\"WORKSPACE_COMMENT_DEFAULT_TEXT\"] = \"Say something...\";\nBlockly.Msg[\"CONTROLS_FOREACH_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_FOR_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_IF_ELSEIF_TITLE_ELSEIF\"] = Blockly.Msg[\"CONTROLS_IF_MSG_ELSEIF\"];\nBlockly.Msg[\"CONTROLS_IF_ELSE_TITLE_ELSE\"] = Blockly.Msg[\"CONTROLS_IF_MSG_ELSE\"];\nBlockly.Msg[\"CONTROLS_IF_IF_TITLE_IF\"] = Blockly.Msg[\"CONTROLS_IF_MSG_IF\"];\nBlockly.Msg[\"CONTROLS_IF_MSG_THEN\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"LISTS_CREATE_WITH_ITEM_TITLE\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"LISTS_GET_INDEX_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_GET_SUBLIST_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_INDEX_OF_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_SET_INDEX_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"MATH_CHANGE_TITLE_ITEM\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_COMMENT\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_COMMENT\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_DO\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_DO\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_PROCEDURE\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_PROCEDURE\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_TITLE\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_TITLE\"];\nBlockly.Msg[\"TEXT_APPEND_VARIABLE\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"TEXT_CREATE_JOIN_ITEM_TITLE_ITEM\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\n\nBlockly.Msg[\"COLOUR_HUE\"] = \"20\";\nBlockly.Msg[\"LISTS_HUE\"] = \"260\";\nBlockly.Msg[\"LOGIC_HUE\"] = \"210\";\nBlockly.Msg[\"LOOPS_HUE\"] = \"120\";\nBlockly.Msg[\"MATH_HUE\"] = \"230\";\nBlockly.Msg[\"PROCEDURES_HUE\"] = \"290\";\nBlockly.Msg[\"TEXTS_HUE\"] = \"160\";\nBlockly.Msg[\"VARIABLES_DYNAMIC_HUE\"] = \"310\";\nBlockly.Msg[\"VARIABLES_HUE\"] = \"330\";\nreturn Blockly.Msg;\n}));\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/msg/en.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/python.mjs": +/*!*****************************************!*\ + !*** ./node_modules/blockly/python.mjs ***! + \*****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Order: () => (/* binding */ Order),\n/* harmony export */ PythonGenerator: () => (/* binding */ PythonGenerator),\n/* harmony export */ pythonGenerator: () => (/* binding */ pythonGenerator)\n/* harmony export */ });\n/* harmony import */ var _python_compressed_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./python_compressed.js */ \"./node_modules/blockly/python_compressed.js\");\n\nconst {\n Order,\n PythonGenerator,\n pythonGenerator,\n} = _python_compressed_js__WEBPACK_IMPORTED_MODULE_0__;\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/python.mjs?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/python_compressed.js": +/*!***************************************************!*\ + !*** ./node_modules/blockly/python_compressed.js ***! + \***************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Do not edit this file; automatically generated.\n\n/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ./blockly_compressed.js */ \"./node_modules/blockly/blockly_compressed.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function(__parent__) {\nvar $=__parent__.__namespace__;\nvar lists_create_empty$$module$build$src$generators$python$lists=function(a,b){return[\"[]\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},lists_create_with$$module$build$src$generators$python$lists=function(a,b){const c=Array(a.itemCount_);for(let d=0;d\",GTE:\">=\"}[a.getFieldValue(\"OP\")],d=Order$$module$build$src$generators$python$python_generator.RELATIONAL,e=b.valueToCode(a,\"A\",d)||\"0\";a=b.valueToCode(a,\"B\",d)||\"0\";return[e+\" \"+c+\" \"+a,d]},logic_operation$$module$build$src$generators$python$logic=function(a,\nb){const c=a.getFieldValue(\"OP\")===\"AND\"?\"and\":\"or\",d=c===\"and\"?Order$$module$build$src$generators$python$python_generator.LOGICAL_AND:Order$$module$build$src$generators$python$python_generator.LOGICAL_OR;let e=b.valueToCode(a,\"A\",d);a=b.valueToCode(a,\"B\",d);e||a?(b=c===\"and\"?\"True\":\"False\",e||(e=b),a||(a=b)):a=e=\"False\";return[e+\" \"+c+\" \"+a,d]},logic_negate$$module$build$src$generators$python$logic=function(a,b){return[\"not \"+(b.valueToCode(a,\"BOOL\",Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT)||\n\"True\"),Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT]},logic_boolean$$module$build$src$generators$python$logic=function(a,b){return[a.getFieldValue(\"BOOL\")===\"TRUE\"?\"True\":\"False\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},logic_null$$module$build$src$generators$python$logic=function(a,b){return[\"None\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},logic_ternary$$module$build$src$generators$python$logic=function(a,b){const c=\nb.valueToCode(a,\"IF\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"False\",d=b.valueToCode(a,\"THEN\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"None\";a=b.valueToCode(a,\"ELSE\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"None\";return[d+\" if \"+c+\" else \"+a,Order$$module$build$src$generators$python$python_generator.CONDITIONAL]},controls_repeat_ext$$module$build$src$generators$python$loops=function(a,b){let c;c=a.getField(\"TIMES\")?\nString(parseInt(a.getFieldValue(\"TIMES\"),10)):b.valueToCode(a,\"TIMES\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";c=$.isNumber$$module$build$src$core$utils$string(c)?parseInt(c,10):\"int(\"+c+\")\";let d=b.statementToCode(a,\"DO\");d=b.addLoopTrap(d,a)||b.PASS;return\"for \"+b.nameDB_.getDistinctName(\"count\",$.NameType$$module$build$src$core$names.VARIABLE)+\" in range(\"+c+\"):\\n\"+d},controls_whileUntil$$module$build$src$generators$python$loops=function(a,b){const c=a.getFieldValue(\"MODE\")===\n\"UNTIL\";let d=b.valueToCode(a,\"BOOL\",c?Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT:Order$$module$build$src$generators$python$python_generator.NONE)||\"False\",e=b.statementToCode(a,\"DO\");e=b.addLoopTrap(e,a)||b.PASS;c&&(d=\"not \"+d);return\"while \"+d+\":\\n\"+e},controls_for$$module$build$src$generators$python$loops=function(a,b){const c=b.getVariableName(a.getFieldValue(\"VAR\"));var d=b.valueToCode(a,\"FROM\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",\ne=b.valueToCode(a,\"TO\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",f=b.valueToCode(a,\"BY\",Order$$module$build$src$generators$python$python_generator.NONE)||\"1\";let g=b.statementToCode(a,\"DO\");g=b.addLoopTrap(g,a)||b.PASS;let h=\"\";a=function(){return b.provideFunction_(\"upRange\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):\n while start <= stop:\n yield start\n start += abs(step)\n`)};const k=function(){return b.provideFunction_(\"downRange\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):\n while start >= stop:\n yield start\n start -= abs(step)\n`)};if($.isNumber$$module$build$src$core$utils$string(d)&&$.isNumber$$module$build$src$core$utils$string(e)&&$.isNumber$$module$build$src$core$utils$string(f))d=Number(d),e=Number(e),f=Math.abs(Number(f)),d%1===0&&e%1===0&&f%1===0?(d<=e?(e++,a=d===0&&f===1?e:d+\", \"+e,f!==1&&(a+=\", \"+f)):(e--,a=d+\", \"+e+\", -\"+f),a=\"range(\"+a+\")\"):(a=d 0\",Order$$module$build$src$generators$python$python_generator.RELATIONAL,Order$$module$build$src$generators$python$python_generator.RELATIONAL],NEGATIVE:[\" < 0\",\nOrder$$module$build$src$generators$python$python_generator.RELATIONAL,Order$$module$build$src$generators$python$python_generator.RELATIONAL],DIVISIBLE_BY:[null,Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE,Order$$module$build$src$generators$python$python_generator.RELATIONAL],PRIME:[null,Order$$module$build$src$generators$python$python_generator.NONE,Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]};const d=a.getFieldValue(\"PROPERTY\"),[e,f,g]=c[d];\nc=b.valueToCode(a,\"NUMBER_TO_CHECK\",f)||\"0\";if(d===\"PRIME\")b.definitions_.import_math=\"import math\",b.definitions_.from_numbers_import_Number=\"from numbers import Number\",a=b.provideFunction_(\"math_isPrime\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(n):\n # https://en.wikipedia.org/wiki/Primality_test#Naive_methods\n # If n is not a number but a string, try parsing it.\n if not isinstance(n, Number):\n try:\n n = float(n)\n except:\n return False\n if n == 2 or n == 3:\n return True\n # False if n is negative, is 1, or not whole, or if n is divisible by 2 or 3.\n if n <= 1 or n % 1 != 0 or n % 2 == 0 or n % 3 == 0:\n return False\n # Check all the numbers of form 6k +/- 1, up to sqrt(n).\n for x in range(6, int(math.sqrt(n)) + 2, 6):\n if n % (x - 1) == 0 or n % (x + 1) == 0:\n return False\n return True\n`)+\"(\"+c+\")\";else if(d===\"DIVISIBLE_BY\"){a=b.valueToCode(a,\"DIVISOR\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\"0\";if(a===\"0\")return[\"False\",Order$$module$build$src$generators$python$python_generator.ATOMIC];a=c+\" % \"+a+\" == 0\"}else a=c+e;return[a,g]},math_change$$module$build$src$generators$python$math=function(a,b){b.definitions_.from_numbers_import_Number=\"from numbers import Number\";const c=b.valueToCode(a,\"DELTA\",Order$$module$build$src$generators$python$python_generator.ADDITIVE)||\n\"0\";a=b.getVariableName(a.getFieldValue(\"VAR\"));return a+\" = (\"+a+\" if isinstance(\"+a+\", Number) else 0) + \"+c+\"\\n\"},math_on_list$$module$build$src$generators$python$math=function(a,b){const c=a.getFieldValue(\"OP\");a=b.valueToCode(a,\"LIST\",Order$$module$build$src$generators$python$python_generator.NONE)||\"[]\";switch(c){case \"SUM\":b=\"sum(\"+a+\")\";break;case \"MIN\":b=\"min(\"+a+\")\";break;case \"MAX\":b=\"max(\"+a+\")\";break;case \"AVERAGE\":b.definitions_.from_numbers_import_Number=\"from numbers import Number\";\nb=b.provideFunction_(\"math_mean\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(myList):\n localList = [e for e in myList if isinstance(e, Number)]\n if not localList: return\n return float(sum(localList)) / len(localList)\n`)+\"(\"+a+\")\";break;case \"MEDIAN\":b.definitions_.from_numbers_import_Number=\"from numbers import Number\";b=b.provideFunction_(\"math_median\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(myList):\n localList = sorted([e for e in myList if isinstance(e, Number)])\n if not localList: return\n if len(localList) % 2 == 0:\n return (localList[len(localList) // 2 - 1] + localList[len(localList) // 2]) / 2.0\n else:\n return localList[(len(localList) - 1) // 2]\n`)+\"(\"+a+\")\";break;case \"MODE\":b=b.provideFunction_(\"math_modes\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(some_list):\n modes = []\n # Using a lists of [item, count] to keep count rather than dict\n # to avoid \"unhashable\" errors when the counted item is itself a list or dict.\n counts = []\n maxCount = 1\n for item in some_list:\n found = False\n for count in counts:\n if count[0] == item:\n count[1] += 1\n maxCount = max(maxCount, count[1])\n found = True\n if not found:\n counts.append([item, 1])\n for counted_item, item_count in counts:\n if item_count == maxCount:\n modes.append(counted_item)\n return modes\n`)+\"(\"+a+\")\";break;case \"STD_DEV\":b.definitions_.import_math=\"import math\";b=b.provideFunction_(\"math_standard_deviation\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(numbers):\n n = len(numbers)\n if n == 0: return\n mean = float(sum(numbers)) / n\n variance = sum((x - mean) ** 2 for x in numbers) / n\n return math.sqrt(variance)\n`)+\"(\"+a+\")\";break;case \"RANDOM\":b.definitions_.import_random=\"import random\";b=\"random.choice(\"+a+\")\";break;default:throw Error(\"Unknown operator: \"+c);}return[b,Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_modulo$$module$build$src$generators$python$math=function(a,b){const c=b.valueToCode(a,\"DIVIDEND\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\"0\";a=b.valueToCode(a,\"DIVISOR\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\n\"0\";return[c+\" % \"+a,Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE]},math_constrain$$module$build$src$generators$python$math=function(a,b){const c=b.valueToCode(a,\"VALUE\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",d=b.valueToCode(a,\"LOW\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";a=b.valueToCode(a,\"HIGH\",Order$$module$build$src$generators$python$python_generator.NONE)||\"float('inf')\";return[\"min(max(\"+c+\", \"+d+\"), \"+\na+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_random_int$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_random=\"import random\";const c=b.valueToCode(a,\"FROM\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";a=b.valueToCode(a,\"TO\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";return[\"random.randint(\"+c+\", \"+a+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},\nmath_random_float$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_random=\"import random\";return[\"random.random()\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_atan2$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_math=\"import math\";const c=b.valueToCode(a,\"X\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";return[\"math.atan2(\"+(b.valueToCode(a,\"Y\",Order$$module$build$src$generators$python$python_generator.NONE)||\n\"0\")+\", \"+c+\") / math.pi * 180\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE]},procedures_defreturn$$module$build$src$generators$python$procedures=function(a,b){var c=[],d=a.workspace,e=$.allUsedVarModels$$module$build$src$core$variables(d)||[];for(var f of e)e=f.getName(),a.getVars().includes(e)||c.push(b.getVariableName(e));d=$.allDeveloperVariables$$module$build$src$core$variables(d);for(f=0;f0?\"int(\"+a+\" + \"+c+\")\":c<0?\"int(\"+a+\" - \"+-c+\")\":\"int(\"+a+\")\",d&&(a=\"-\"+a));return a}},module$build$src$generators$python$python_generator={};module$build$src$generators$python$python_generator.Order=Order$$module$build$src$generators$python$python_generator;module$build$src$generators$python$python_generator.PythonGenerator=PythonGenerator$$module$build$src$generators$python$python_generator;var module$build$src$generators$python$lists={};module$build$src$generators$python$lists.lists_create_empty=lists_create_empty$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_create_with=lists_create_with$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_getIndex=lists_getIndex$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_getSublist=lists_getSublist$$module$build$src$generators$python$lists;\nmodule$build$src$generators$python$lists.lists_indexOf=lists_indexOf$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_isEmpty=lists_isEmpty$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_length=lists_length$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_repeat=lists_repeat$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_reverse=lists_reverse$$module$build$src$generators$python$lists;\nmodule$build$src$generators$python$lists.lists_setIndex=lists_setIndex$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_sort=lists_sort$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_split=lists_split$$module$build$src$generators$python$lists;var controls_ifelse$$module$build$src$generators$python$logic=controls_if$$module$build$src$generators$python$logic,module$build$src$generators$python$logic={};module$build$src$generators$python$logic.controls_if=controls_if$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.controls_ifelse=controls_if$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_boolean=logic_boolean$$module$build$src$generators$python$logic;\nmodule$build$src$generators$python$logic.logic_compare=logic_compare$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_negate=logic_negate$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_null=logic_null$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_operation=logic_operation$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_ternary=logic_ternary$$module$build$src$generators$python$logic;var controls_repeat$$module$build$src$generators$python$loops=controls_repeat_ext$$module$build$src$generators$python$loops,module$build$src$generators$python$loops={};module$build$src$generators$python$loops.controls_flow_statements=controls_flow_statements$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_for=controls_for$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_forEach=controls_forEach$$module$build$src$generators$python$loops;\nmodule$build$src$generators$python$loops.controls_repeat=controls_repeat_ext$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_repeat_ext=controls_repeat_ext$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_whileUntil=controls_whileUntil$$module$build$src$generators$python$loops;var math_round$$module$build$src$generators$python$math=math_single$$module$build$src$generators$python$math,math_trig$$module$build$src$generators$python$math=math_single$$module$build$src$generators$python$math,module$build$src$generators$python$math={};module$build$src$generators$python$math.math_arithmetic=math_arithmetic$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_atan2=math_atan2$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_change=math_change$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_constant=math_constant$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_constrain=math_constrain$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_modulo=math_modulo$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_number=math_number$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_number_property=math_number_property$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_on_list=math_on_list$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_random_float=math_random_float$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_random_int=math_random_int$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_round=math_single$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_single=math_single$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_trig=math_single$$module$build$src$generators$python$math;var procedures_defnoreturn$$module$build$src$generators$python$procedures=procedures_defreturn$$module$build$src$generators$python$procedures,module$build$src$generators$python$procedures={};module$build$src$generators$python$procedures.procedures_callnoreturn=procedures_callnoreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_callreturn=procedures_callreturn$$module$build$src$generators$python$procedures;\nmodule$build$src$generators$python$procedures.procedures_defnoreturn=procedures_defreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_defreturn=procedures_defreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_ifreturn=procedures_ifreturn$$module$build$src$generators$python$procedures;var strRegExp$$module$build$src$generators$python$text=/^\\s*'([^']|\\\\')*'\\s*$/,forceString$$module$build$src$generators$python$text=function(a){return strRegExp$$module$build$src$generators$python$text.test(a)?[a,Order$$module$build$src$generators$python$python_generator.ATOMIC]:[\"str(\"+a+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},text_prompt$$module$build$src$generators$python$text=text_prompt_ext$$module$build$src$generators$python$text,module$build$src$generators$python$text=\n{};module$build$src$generators$python$text.text=text$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_append=text_append$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_changeCase=text_changeCase$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_charAt=text_charAt$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_count=text_count$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_getSubstring=text_getSubstring$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_indexOf=text_indexOf$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_isEmpty=text_isEmpty$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_join=text_join$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_length=text_length$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_print=text_print$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_prompt=text_prompt_ext$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_prompt_ext=text_prompt_ext$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_replace=text_replace$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_reverse=text_reverse$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_trim=text_trim$$module$build$src$generators$python$text;var module$build$src$generators$python$variables={};module$build$src$generators$python$variables.variables_get=variables_get$$module$build$src$generators$python$variables;module$build$src$generators$python$variables.variables_set=variables_set$$module$build$src$generators$python$variables;var module$build$src$generators$python$variables_dynamic={};module$build$src$generators$python$variables_dynamic.variables_get_dynamic=variables_get$$module$build$src$generators$python$variables;module$build$src$generators$python$variables_dynamic.variables_set_dynamic=variables_set$$module$build$src$generators$python$variables;var pythonGenerator$$module$build$src$generators$python=new PythonGenerator$$module$build$src$generators$python$python_generator;pythonGenerator$$module$build$src$generators$python.addReservedWords(\"math,random,Number\");\nvar generators$$module$build$src$generators$python=Object.assign({},module$build$src$generators$python$lists,module$build$src$generators$python$logic,module$build$src$generators$python$loops,module$build$src$generators$python$math,module$build$src$generators$python$procedures,module$build$src$generators$python$text,module$build$src$generators$python$variables,module$build$src$generators$python$variables_dynamic);\nfor(const a in generators$$module$build$src$generators$python)pythonGenerator$$module$build$src$generators$python.forBlock[a]=generators$$module$build$src$generators$python[a];var module$build$src$generators$python={};module$build$src$generators$python.Order=Order$$module$build$src$generators$python$python_generator;module$build$src$generators$python.PythonGenerator=PythonGenerator$$module$build$src$generators$python$python_generator;module$build$src$generators$python.pythonGenerator=pythonGenerator$$module$build$src$generators$python;\nmodule$build$src$generators$python.__namespace__=$;\nreturn module$build$src$generators$python;\n}));\n\n\n//# sourceMappingURL=python_compressed.js.map\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/python_compressed.js?\n}"); + +/***/ }), + +/***/ "./src/steps/step4.js": +/*!****************************!*\ + !*** ./src/steps/step4.js ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var blockly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly */ \"./node_modules/blockly/index.mjs\");\n/* harmony import */ var blockly_python__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! blockly/python */ \"./node_modules/blockly/python.mjs\");\n/**\n * Blockly OT-2 Integration Application\n * \n * This application demonstrates real Blockly installation with custom blocks\n * for OT-2 liquid handler functions from OT2mqtt.py\n */\n\n\n\n\n// Define custom block: OT-2 Home\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_home'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('🏠 OT-2: Home Robot');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Home the OT-2 robot to its initial position');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_home'] = function(block, generator) {\n const code = 'protocol.home()\\n';\n return code;\n};\n\n// Define custom block: OT-2 Mix Color\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_mix_color'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('🎨 OT-2: Mix Color');\n this.appendValueInput('R')\n .setCheck('Number')\n .appendField('Red (µL)');\n this.appendValueInput('Y')\n .setCheck('Number')\n .appendField('Yellow (µL)');\n this.appendValueInput('B')\n .setCheck('Number')\n .appendField('Blue (µL)');\n this.appendValueInput('WELL')\n .setCheck('String')\n .appendField('Well');\n this.appendValueInput('SESSION_ID')\n .setCheck('String')\n .appendField('Session ID');\n this.appendValueInput('EXPERIMENT_ID')\n .setCheck('String')\n .appendField('Experiment ID');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Mix RGB colors in a well using the OT-2 pipette');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_mix_color'] = function(block, generator) {\n const value_r = generator.valueToCode(block, 'R', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_y = generator.valueToCode(block, 'Y', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_b = generator.valueToCode(block, 'B', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_well = generator.valueToCode(block, 'WELL', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"A1\"';\n const value_session_id = generator.valueToCode(block, 'SESSION_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"session_001\"';\n const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"exp_001\"';\n \n const code = `payload = {\n \"command\": {\n \"R\": ${value_r},\n \"Y\": ${value_y},\n \"B\": ${value_b},\n \"well\": ${value_well}\n },\n \"session_id\": ${value_session_id},\n \"experiment_id\": ${value_experiment_id}\n}\nmix_color(payload)\n`;\n return code;\n};\n\n// Define custom block: OT-2 Move Sensor Back\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_move_sensor_back'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('↩️ OT-2: Move Sensor Back');\n this.appendValueInput('SENSOR_STATUS')\n .setCheck('String')\n .appendField('Sensor Status');\n this.appendValueInput('SESSION_ID')\n .setCheck('String')\n .appendField('Session ID');\n this.appendValueInput('EXPERIMENT_ID')\n .setCheck('String')\n .appendField('Experiment ID');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Move the sensor back to charging position');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_move_sensor_back'] = function(block, generator) {\n const value_sensor_status = generator.valueToCode(block, 'SENSOR_STATUS', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"complete\"';\n const value_session_id = generator.valueToCode(block, 'SESSION_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"session_001\"';\n const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"exp_001\"';\n \n const code = `payload = {\n \"command\": {\n \"sensor_status\": ${value_sensor_status}\n },\n \"session_id\": ${value_session_id},\n \"experiment_id\": ${value_experiment_id}\n}\nmove_sensor_back(payload)\n`;\n return code;\n};\n\n// Create toolbox\nconst toolbox = {\n \"kind\": \"categoryToolbox\",\n \"contents\": [\n {\n \"kind\": \"category\",\n \"name\": \"OT-2 Commands\",\n \"colour\": \"#5C81A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"ot2_home\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"ot2_mix_color\",\n \"inputs\": {\n \"R\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 100\n }\n }\n },\n \"Y\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 50\n }\n }\n },\n \"B\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 75\n }\n }\n },\n \"WELL\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"A1\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n },\n {\n \"kind\": \"block\",\n \"type\": \"ot2_move_sensor_back\",\n \"inputs\": {\n \"SENSOR_STATUS\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"complete\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Logic\",\n \"colour\": \"#5C68A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"controls_if\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"logic_compare\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Loops\",\n \"colour\": \"#5CA65C\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"controls_repeat_ext\",\n \"inputs\": {\n \"TIMES\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 3\n }\n }\n }\n }\n },\n {\n \"kind\": \"block\",\n \"type\": \"controls_whileUntil\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Math\",\n \"colour\": \"#5C68A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"math_number\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"math_arithmetic\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Text\",\n \"colour\": \"#5CA68A\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"text\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"text_print\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Variables\",\n \"colour\": \"#A65C81\",\n \"custom\": \"VARIABLE\"\n }\n ]\n};\n\n// Initialize Blockly workspace\nconst workspace = blockly__WEBPACK_IMPORTED_MODULE_0__.inject('blocklyDiv', {\n toolbox: toolbox,\n grid: {\n spacing: 20,\n length: 3,\n colour: '#ccc',\n snap: true\n },\n zoom: {\n controls: true,\n wheel: true,\n startScale: 1.0,\n maxScale: 3,\n minScale: 0.3,\n scaleSpeed: 1.2\n },\n trashcan: true\n});\n\n// Load initial workspace\n\n// Load initial workspace - Step 4: Home + Repeat + Mix Color\nconst startBlocks = {\n \"blocks\": {\n \"languageVersion\": 0,\n \"blocks\": [\n {\n \"type\": \"ot2_home\",\n \"id\": \"start_home\",\n \"x\": 50,\n \"y\": 50\n },\n {\n \"type\": \"controls_repeat_ext\",\n \"id\": \"repeat_loop\",\n \"x\": 50,\n \"y\": 120,\n \"inputs\": {\n \"TIMES\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"id\": \"repeat_times\",\n \"fields\": {\n \"NUM\": 3\n }\n }\n },\n \"DO\": {\n \"block\": {\n \"type\": \"ot2_mix_color\",\n \"id\": \"mix_block\",\n \"inputs\": {\n \"R\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 100\n }\n }\n },\n \"Y\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 50\n }\n }\n },\n \"B\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 75\n }\n }\n },\n \"WELL\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"A1\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n }\n }\n }\n }\n ]\n }\n};\n\nblockly__WEBPACK_IMPORTED_MODULE_0__.serialization.workspaces.load(startBlocks, workspace);\n\n// Generate code function\nfunction generateCode() {\n const code = blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.workspaceToCode(workspace);\n const fullCode = `# Generated from Blockly visual programming\n# This code uses functions from OT2mqtt.py\n\nfrom OT2mqtt import mix_color, move_sensor_back, protocol\n\n# Main workflow\n${code}`;\n \n document.getElementById('codeOutput').textContent = fullCode;\n}\n\n// Update code on workspace change\nworkspace.addChangeListener(generateCode);\n\n// Generate initial code\ngenerateCode();\n\n// Expose generate function to button\nwindow.generateCode = generateCode;\n\n\n//# sourceURL=webpack://blockly_app/./src/steps/step4.js?\n}"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./src/steps/step4.js"); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/scripts/blockly_app/dist/step5.html b/scripts/blockly_app/dist/step5.html new file mode 100644 index 00000000..cee95d43 --- /dev/null +++ b/scripts/blockly_app/dist/step5.html @@ -0,0 +1,84 @@ + + + + + Blockly OT-2 - Step 5 + + + +

Blockly OT-2 Custom Functions - Building Workflow Step by Step

+
Step 5
+
+
+
+

Generated Python Code

+
+ Watch as we build the workflow block by block +
+
# Waiting for blocks...
+
+
+ + + diff --git a/scripts/blockly_app/dist/step5.js b/scripts/blockly_app/dist/step5.js new file mode 100644 index 00000000..d04df0eb --- /dev/null +++ b/scripts/blockly_app/dist/step5.js @@ -0,0 +1,170 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/blockly/blockly_compressed.js": +/*!****************************************************!*\ + !*** ./node_modules/blockly/blockly_compressed.js ***! + \****************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Do not edit this file; automatically generated.\n\n/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function() {\nvar $={};\nvar register$$module$build$src$core$registry,validate$$module$build$src$core$registry,unregister$$module$build$src$core$registry,getItem$$module$build$src$core$registry,hasItem$$module$build$src$core$registry,getClass$$module$build$src$core$registry,getObject$$module$build$src$core$registry,getAllItems$$module$build$src$core$registry,getClassFromOptions$$module$build$src$core$registry,longStart$$module$build$src$core$touch,longStop$$module$build$src$core$touch,clearTouchIdentifier$$module$build$src$core$touch,\nshouldHandleEvent$$module$build$src$core$touch,getTouchIdentifierFromEvent$$module$build$src$core$touch,checkTouchIdentifier$$module$build$src$core$touch,conditionalBind$$module$build$src$core$browser_events,bind$$module$build$src$core$browser_events,unbind$$module$build$src$core$browser_events,isTargetInput$$module$build$src$core$browser_events,isRightButton$$module$build$src$core$browser_events,mouseToSvg$$module$build$src$core$browser_events,getScrollDeltaPixels$$module$build$src$core$browser_events,\ngetNextUniqueId$$module$build$src$core$utils$idgenerator,genUid$$module$build$src$core$utils$idgenerator,isBlockCreate$$module$build$src$core$events$predicates,isBlockDelete$$module$build$src$core$events$predicates,isBlockChange$$module$build$src$core$events$predicates,isBlockFieldIntermediateChange$$module$build$src$core$events$predicates,isBlockMove$$module$build$src$core$events$predicates,isVarCreate$$module$build$src$core$events$predicates,isVarDelete$$module$build$src$core$events$predicates,\nisVarRename$$module$build$src$core$events$predicates,isBlockDrag$$module$build$src$core$events$predicates,isSelected$$module$build$src$core$events$predicates,isClick$$module$build$src$core$events$predicates,isBubbleOpen$$module$build$src$core$events$predicates,isTrashcanOpen$$module$build$src$core$events$predicates,isToolboxItemSelect$$module$build$src$core$events$predicates,isThemeChange$$module$build$src$core$events$predicates,isViewportChange$$module$build$src$core$events$predicates,isCommentCreate$$module$build$src$core$events$predicates,\nisCommentDelete$$module$build$src$core$events$predicates,isCommentChange$$module$build$src$core$events$predicates,isCommentMove$$module$build$src$core$events$predicates,isCommentResize$$module$build$src$core$events$predicates,isCommentDrag$$module$build$src$core$events$predicates,isCommentCollapse$$module$build$src$core$events$predicates,isFinishedLoading$$module$build$src$core$events$predicates,getRecordUndo$$module$build$src$core$events$utils,fire$$module$build$src$core$events$utils,fireInternal$$module$build$src$core$events$utils,\nfireNow$$module$build$src$core$events$utils,enqueueEvent$$module$build$src$core$events$utils,filter$$module$build$src$core$events$utils,clearPendingUndo$$module$build$src$core$events$utils,isEnabled$$module$build$src$core$events$utils,setGroupInternal$$module$build$src$core$events$utils,getDescendantIds$$module$build$src$core$events$utils,fromJson$$module$build$src$core$events$utils,get$$module$build$src$core$events$utils,disableOrphans$$module$build$src$core$events$utils,createSvgElement$$module$build$src$core$utils$dom,\naddClass$$module$build$src$core$utils$dom,removeClasses$$module$build$src$core$utils$dom,removeClass$$module$build$src$core$utils$dom,hasClass$$module$build$src$core$utils$dom,removeNode$$module$build$src$core$utils$dom,insertAfter$$module$build$src$core$utils$dom,setCssTransform$$module$build$src$core$utils$dom,startTextWidthCache$$module$build$src$core$utils$dom,stopTextWidthCache$$module$build$src$core$utils$dom,getTextWidth$$module$build$src$core$utils$dom,getFastTextWidth$$module$build$src$core$utils$dom,\ngetFastTextWidthWithSizeString$$module$build$src$core$utils$dom,measureFontMetrics$$module$build$src$core$utils$dom,isFocusableNode$$module$build$src$core$interfaces$i_focusable_node,isSelectable$$module$build$src$core$interfaces$i_selectable,deepMerge$$module$build$src$core$utils$object,getWorkspaceById$$module$build$src$core$common,getAllWorkspaces$$module$build$src$core$common,registerWorkspace$$module$build$src$core$common,unregisterWorkpace$$module$build$src$core$common,getMainWorkspace$$module$build$src$core$common,\nsetMainWorkspace$$module$build$src$core$common,getSelected$$module$build$src$core$common,setSelected$$module$build$src$core$common,fireSelectedEvent$$module$build$src$core$common,getParentContainer$$module$build$src$core$common,setParentContainer$$module$build$src$core$common,svgResize$$module$build$src$core$common,getBlockTypeCounts$$module$build$src$core$common,jsonInitFactory$$module$build$src$core$common,defineBlocksWithJsonArray$$module$build$src$core$common,defineBlocksWithJsonArrayInternal$$module$build$src$core$common,\nglobalShortcutHandler$$module$build$src$core$common,removeElem$$module$build$src$core$utils$array,register$$module$build$src$core$css,inject$$module$build$src$core$css,getSize$$module$build$src$core$utils$style,getSizeInternal$$module$build$src$core$utils$style,getSizeWithDisplay$$module$build$src$core$utils$style,getComputedStyle$$module$build$src$core$utils$style,getPageOffset$$module$build$src$core$utils$style,getViewportPageOffset$$module$build$src$core$utils$style,getBorderBox$$module$build$src$core$utils$style,\nscrollIntoContainerView$$module$build$src$core$utils$style,getContainerOffsetToScrollInto$$module$build$src$core$utils$style,getRelativeXY$$module$build$src$core$utils$svg_math,getInjectionDivXY$$module$build$src$core$utils$svg_math,getViewportBBox$$module$build$src$core$utils$svg_math,getDocumentScroll$$module$build$src$core$utils$svg_math,screenToWsCoordinates$$module$build$src$core$utils$svg_math,wsToScreenCoordinates$$module$build$src$core$utils$svg_math,injectDependencies$$module$build$src$core$utils$xml,\ndomToText$$module$build$src$core$utils$xml,sanitizeText$$module$build$src$core$utils$xml,convertToolboxDefToJson$$module$build$src$core$utils$toolbox,validateToolbox$$module$build$src$core$utils$toolbox,convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox,hasCategories$$module$build$src$core$utils$toolbox,hasCategoriesInternal$$module$build$src$core$utils$toolbox,isCategoryCollapsible$$module$build$src$core$utils$toolbox,convertToToolboxJson$$module$build$src$core$utils$toolbox,xmlToJsonArray$$module$build$src$core$utils$toolbox,\naddAttributes$$module$build$src$core$utils$toolbox,parseToolboxTree$$module$build$src$core$utils$toolbox,getStartPositionRect$$module$build$src$core$positionable_helpers,getCornerOppositeToolbox$$module$build$src$core$positionable_helpers,bumpPositionRect$$module$build$src$core$positionable_helpers,register$$module$build$src$core$serialization$registry,unregister$$module$build$src$core$serialization$registry,save$$module$build$src$core$serialization$workspace_comments,append$$module$build$src$core$serialization$workspace_comments,\nregister$$module$build$src$core$clipboard$registry,unregister$$module$build$src$core$clipboard$registry,moveCommentToNotConflict$$module$build$src$core$clipboard$workspace_comment_paster,commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster,setRole$$module$build$src$core$utils$aria,setState$$module$build$src$core$utils$aria,isSerializable$$module$build$src$core$interfaces$i_serializable,queueRender$$module$build$src$core$render_management,finishQueuedRenders$$module$build$src$core$render_management,\ntriggerQueuedRenders$$module$build$src$core$render_management,alwaysImmediatelyRender$$module$build$src$core$render_management,queueBlock$$module$build$src$core$render_management,doRenders$$module$build$src$core$render_management,dequeueBlock$$module$build$src$core$render_management,shouldRenderRootBlock$$module$build$src$core$render_management,renderBlock$$module$build$src$core$render_management,alert$$module$build$src$core$dialog,setAlert$$module$build$src$core$dialog,confirm$$module$build$src$core$dialog,\nsetConfirm$$module$build$src$core$dialog,prompt$$module$build$src$core$dialog,setPrompt$$module$build$src$core$dialog,toast$$module$build$src$core$dialog,setToast$$module$build$src$core$dialog,isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks,isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks,isVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model,warn$$module$build$src$core$utils$deprecation,\ninternalFlyoutCategory$$module$build$src$core$variables,flyoutCategory$$module$build$src$core$variables,generateVariableFieldJson$$module$build$src$core$variables,jsonFlyoutCategoryBlocks$$module$build$src$core$variables,xmlFlyoutCategory$$module$build$src$core$variables,flyoutCategoryBlocks$$module$build$src$core$variables,generateUniqueName$$module$build$src$core$variables,generateUniqueNameInternal$$module$build$src$core$variables,generateUniqueNameFromOptions$$module$build$src$core$variables,\ncreateVariableButtonHandler$$module$build$src$core$variables,promptName$$module$build$src$core$variables,nameUsedWithOtherType$$module$build$src$core$variables,nameUsedWithAnyType$$module$build$src$core$variables,nameUsedWithConflictingParam$$module$build$src$core$variables,checkForConflictingParamWithProcedureModels$$module$build$src$core$variables,checkForConflictingParamWithLegacyProcedures$$module$build$src$core$variables,generateVariableFieldDom$$module$build$src$core$variables,createVariable$$module$build$src$core$variables,\ngetAddedVariables$$module$build$src$core$variables,compareByName$$module$build$src$core$variables,getVariableUsesById$$module$build$src$core$variables,save$$module$build$src$core$serialization$blocks,saveAttributes$$module$build$src$core$serialization$blocks,saveCoords$$module$build$src$core$serialization$blocks,saveExtraState$$module$build$src$core$serialization$blocks,saveIcons$$module$build$src$core$serialization$blocks,saveFields$$module$build$src$core$serialization$blocks,saveInputBlocks$$module$build$src$core$serialization$blocks,\nsaveNextBlocks$$module$build$src$core$serialization$blocks,saveConnection$$module$build$src$core$serialization$blocks,append$$module$build$src$core$serialization$blocks,appendInternal$$module$build$src$core$serialization$blocks,appendPrivate$$module$build$src$core$serialization$blocks,checkNewVariables$$module$build$src$core$serialization$blocks,loadCoords$$module$build$src$core$serialization$blocks,loadAttributes$$module$build$src$core$serialization$blocks,loadExtraState$$module$build$src$core$serialization$blocks,\ntryToConnectParent$$module$build$src$core$serialization$blocks,loadIcons$$module$build$src$core$serialization$blocks,loadFields$$module$build$src$core$serialization$blocks,loadInputBlocks$$module$build$src$core$serialization$blocks,loadNextBlocks$$module$build$src$core$serialization$blocks,loadConnection$$module$build$src$core$serialization$blocks,initBlock$$module$build$src$core$serialization$blocks,hasBubble$$module$build$src$core$interfaces$i_has_bubble,toRadians$$module$build$src$core$utils$math,\ntoDegrees$$module$build$src$core$utils$math,clamp$$module$build$src$core$utils$math,createDom$$module$build$src$core$dropdowndiv,setBoundsElement$$module$build$src$core$dropdowndiv,getOwner$$module$build$src$core$dropdowndiv,getContentDiv$$module$build$src$core$dropdowndiv,clearContent$$module$build$src$core$dropdowndiv,setColour$$module$build$src$core$dropdowndiv,showPositionedByBlock$$module$build$src$core$dropdowndiv,showPositionedByField$$module$build$src$core$dropdowndiv,getScaledBboxOfBlock$$module$build$src$core$dropdowndiv,\ngetScaledBboxOfField$$module$build$src$core$dropdowndiv,showPositionedByRect$$module$build$src$core$dropdowndiv,show$$module$build$src$core$dropdowndiv,getPositionBelowMetrics$$module$build$src$core$dropdowndiv,getPositionAboveMetrics$$module$build$src$core$dropdowndiv,getPositionTopOfPageMetrics$$module$build$src$core$dropdowndiv,getPositionX$$module$build$src$core$dropdowndiv,isVisible$$module$build$src$core$dropdowndiv,hideIfOwner$$module$build$src$core$dropdowndiv,hide$$module$build$src$core$dropdowndiv,\nhideWithoutAnimation$$module$build$src$core$dropdowndiv,positionInternal$$module$build$src$core$dropdowndiv,repositionForWindowResize$$module$build$src$core$dropdowndiv,shortestStringLength$$module$build$src$core$utils$string,commonWordPrefix$$module$build$src$core$utils$string,commonWordSuffix$$module$build$src$core$utils$string,wrapLine$$module$build$src$core$utils$string,wrapScore$$module$build$src$core$utils$string,wrapMutate$$module$build$src$core$utils$string,wrapToText$$module$build$src$core$utils$string,\nsetCustomTooltip$$module$build$src$core$tooltip,getCustomTooltip$$module$build$src$core$tooltip,isVisible$$module$build$src$core$tooltip,getDiv$$module$build$src$core$tooltip,getTooltipOfObject$$module$build$src$core$tooltip,getTargetObject$$module$build$src$core$tooltip,createDom$$module$build$src$core$tooltip,bindMouseEvents$$module$build$src$core$tooltip,unbindMouseEvents$$module$build$src$core$tooltip,onMouseOver$$module$build$src$core$tooltip,onMouseOut$$module$build$src$core$tooltip,onMouseMove$$module$build$src$core$tooltip,\ndispose$$module$build$src$core$tooltip,hide$$module$build$src$core$tooltip,block$$module$build$src$core$tooltip,unblock$$module$build$src$core$tooltip,renderContent$$module$build$src$core$tooltip,renderDefaultContent$$module$build$src$core$tooltip,getPosition$$module$build$src$core$tooltip,show$$module$build$src$core$tooltip,getHsvSaturation$$module$build$src$core$utils$colour,setHsvSaturation$$module$build$src$core$utils$colour,getHsvValue$$module$build$src$core$utils$colour,setHsvValue$$module$build$src$core$utils$colour,\nparse$$module$build$src$core$utils$colour,rgbToHex$$module$build$src$core$utils$colour,hexToRgb$$module$build$src$core$utils$colour,hsvToHex$$module$build$src$core$utils$colour,blend$$module$build$src$core$utils$colour,hueToHex$$module$build$src$core$utils$colour,tokenizeInterpolationInternal$$module$build$src$core$utils$parsing,tokenizeInterpolation$$module$build$src$core$utils$parsing,replaceMessageReferences$$module$build$src$core$utils$parsing,checkMessageReferences$$module$build$src$core$utils$parsing,\nparseBlockColour$$module$build$src$core$utils$parsing,getDiv$$module$build$src$core$widgetdiv,testOnly_setDiv$$module$build$src$core$widgetdiv,createDom$$module$build$src$core$widgetdiv,show$$module$build$src$core$widgetdiv,hide$$module$build$src$core$widgetdiv,isVisible$$module$build$src$core$widgetdiv,hideIfOwner$$module$build$src$core$widgetdiv,hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv,positionInternal$$module$build$src$core$widgetdiv,positionWithAnchor$$module$build$src$core$widgetdiv,\ncalculateX$$module$build$src$core$widgetdiv,calculateY$$module$build$src$core$widgetdiv,isRepositionable$$module$build$src$core$widgetdiv,repositionForWindowResize$$module$build$src$core$widgetdiv,getCurrentBlock$$module$build$src$core$contextmenu,setCurrentBlock$$module$build$src$core$contextmenu,show$$module$build$src$core$contextmenu,populate_$$module$build$src$core$contextmenu,position_$$module$build$src$core$contextmenu,createWidget_$$module$build$src$core$contextmenu,haltPropagation$$module$build$src$core$contextmenu,\nhide$$module$build$src$core$contextmenu,dispose$$module$build$src$core$contextmenu,mouseToWorkspacePoint$$module$build$src$core$utils$drag,start$$module$build$src$core$utils$drag,move$$module$build$src$core$utils$drag,workspaceToDom$$module$build$src$core$xml,saveWorkspaceComment$$module$build$src$core$xml,variablesToDom$$module$build$src$core$xml,blockToDomWithXY$$module$build$src$core$xml,fieldToDom$$module$build$src$core$xml,allFieldsToDom$$module$build$src$core$xml,blockToDom$$module$build$src$core$xml,\ncloneShadow$$module$build$src$core$xml,domToText$$module$build$src$core$xml,domToPrettyText$$module$build$src$core$xml,clearWorkspaceAndLoadFromXml$$module$build$src$core$xml,loadWorkspaceComment$$module$build$src$core$xml,appendDomToWorkspace$$module$build$src$core$xml,domToBlockInternal$$module$build$src$core$xml,domToVariables$$module$build$src$core$xml,mapSupportedXmlTags$$module$build$src$core$xml,applyMutationTagNodes$$module$build$src$core$xml,applyCommentTagNodes$$module$build$src$core$xml,\napplyDataTagNodes$$module$build$src$core$xml,applyFieldTagNodes$$module$build$src$core$xml,findChildBlocks$$module$build$src$core$xml,applyInputTagNodes$$module$build$src$core$xml,applyNextTagNodes$$module$build$src$core$xml,domToBlockHeadless$$module$build$src$core$xml,domToField$$module$build$src$core$xml,deleteNext$$module$build$src$core$xml,isElement$$module$build$src$core$xml,register$$module$build$src$core$field_registry,unregister$$module$build$src$core$field_registry,fromJsonInternal$$module$build$src$core$field_registry,\nisImageProperties$$module$build$src$core$field_dropdown,unregister$$module$build$src$core$extensions,isRegistered$$module$build$src$core$extensions,apply$$module$build$src$core$extensions,checkNoMutatorProperties$$module$build$src$core$extensions,checkXmlHooks$$module$build$src$core$extensions,checkJsonHooks$$module$build$src$core$extensions,checkMutatorDialog$$module$build$src$core$extensions,checkHasFunctionPair$$module$build$src$core$extensions,checkHasMutatorProperties$$module$build$src$core$extensions,\ngetMutatorProperties$$module$build$src$core$extensions,mutatorPropertiesMatch$$module$build$src$core$extensions,runAfterPageLoad$$module$build$src$core$extensions,checkDropdownOptionsInTable$$module$build$src$core$extensions,extensionParentTooltip$$module$build$src$core$extensions,point$$module$build$src$core$utils$svg_paths,curve$$module$build$src$core$utils$svg_paths,moveTo$$module$build$src$core$utils$svg_paths,moveBy$$module$build$src$core$utils$svg_paths,lineTo$$module$build$src$core$utils$svg_paths,\nline$$module$build$src$core$utils$svg_paths,lineOnAxis$$module$build$src$core$utils$svg_paths,arc$$module$build$src$core$utils$svg_paths,connectReciprocally$$module$build$src$core$connection,getSingleConnection$$module$build$src$core$connection,getConnectionForOrphanedOutput$$module$build$src$core$connection,isIcon$$module$build$src$core$interfaces$i_icon,isCommentIcon$$module$build$src$core$interfaces$i_comment_icon,disposeUiEffect$$module$build$src$core$block_animations,disposeUiStep$$module$build$src$core$block_animations,\nconnectionUiEffect$$module$build$src$core$block_animations,disconnectUiEffect$$module$build$src$core$block_animations,disconnectUiStep$$module$build$src$core$block_animations,disconnectUiStop$$module$build$src$core$block_animations,moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster,blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster,blockIsInSnapRadius$$module$build$src$core$clipboard$block_paster,bumpObjectIntoBounds$$module$build$src$core$bump_objects,bumpIntoBoundsHandler$$module$build$src$core$bump_objects,\nextractObjectFromEvent$$module$build$src$core$bump_objects,bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects,isDeletable$$module$build$src$core$interfaces$i_deletable,getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy,navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy,navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy,register$$module$build$src$core$icons$registry,unregister$$module$build$src$core$icons$registry,\nisDraggable$$module$build$src$core$interfaces$i_draggable,isAutoHideable$$module$build$src$core$interfaces$i_autohideable,isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block,isObservable$$module$build$src$core$interfaces$i_observable,allProcedures$$module$build$src$core$procedures,procTupleComparator$$module$build$src$core$procedures,isLegalName$$module$build$src$core$procedures,isNameUsed$$module$build$src$core$procedures,xmlFlyoutCategory$$module$build$src$core$procedures,internalFlyoutCategory$$module$build$src$core$procedures,\nflyoutCategory$$module$build$src$core$procedures,updateMutatorFlyout$$module$build$src$core$procedures,mutatorOpenListener$$module$build$src$core$procedures,mutatorChangeListener$$module$build$src$core$procedures,getCallers$$module$build$src$core$procedures,blockIsModernCallerFor$$module$build$src$core$procedures,isDynamicShape$$module$build$src$core$renderers$common$constants,isPuzzleTab$$module$build$src$core$renderers$common$constants,isNotch$$module$build$src$core$renderers$common$constants,register$$module$build$src$core$renderers$common$block_rendering,\nunregister$$module$build$src$core$renderers$common$block_rendering,init$$module$build$src$core$renderers$common$block_rendering,stringButtonClickHandler$$module$build$src$core$variables_dynamic,numberButtonClickHandler$$module$build$src$core$variables_dynamic,colourButtonClickHandler$$module$build$src$core$variables_dynamic,internalFlyoutCategory$$module$build$src$core$variables_dynamic,flyoutCategory$$module$build$src$core$variables_dynamic,xmlFlyoutCategory$$module$build$src$core$variables_dynamic,\nflyoutCategoryBlocks$$module$build$src$core$variables_dynamic,resizeSvgContents$$module$build$src$core$workspace_svg,copy$$module$build$src$core$clipboard,getLastCopiedData$$module$build$src$core$clipboard,setLastCopiedData$$module$build$src$core$clipboard,getLastCopiedWorkspace$$module$build$src$core$clipboard,setLastCopiedWorkspace$$module$build$src$core$clipboard,getLastCopiedLocation$$module$build$src$core$clipboard,setLastCopiedLocation$$module$build$src$core$clipboard,paste$$module$build$src$core$clipboard,\npasteFromData$$module$build$src$core$clipboard,isCopyable$$module$build$src$core$interfaces$i_copyable,registerEscape$$module$build$src$core$shortcut_items,registerDelete$$module$build$src$core$shortcut_items,isCopyable$$module$build$src$core$shortcut_items,isCuttable$$module$build$src$core$shortcut_items,registerCopy$$module$build$src$core$shortcut_items,registerCut$$module$build$src$core$shortcut_items,registerPaste$$module$build$src$core$shortcut_items,registerUndo$$module$build$src$core$shortcut_items,\nregisterRedo$$module$build$src$core$shortcut_items,registerDefaultShortcuts$$module$build$src$core$shortcut_items,saveProcedure$$module$build$src$core$serialization$procedures,loadProcedure$$module$build$src$core$serialization$procedures,save$$module$build$src$core$serialization$workspaces,load$$module$build$src$core$serialization$workspaces,inject$$module$build$src$core$inject,createDom$$module$build$src$core$inject,createMainWorkspace$$module$build$src$core$inject,init$$module$build$src$core$inject,\nbindDocumentEvents$$module$build$src$core$inject,loadSounds$$module$build$src$core$inject,isFullBlockField$$module$build$src$core$contextmenu_items,registerUndo$$module$build$src$core$contextmenu_items,registerRedo$$module$build$src$core$contextmenu_items,registerCleanup$$module$build$src$core$contextmenu_items,toggleOption_$$module$build$src$core$contextmenu_items,registerCollapse$$module$build$src$core$contextmenu_items,registerExpand$$module$build$src$core$contextmenu_items,addDeletableBlocks_$$module$build$src$core$contextmenu_items,\ngetDeletableBlocks_$$module$build$src$core$contextmenu_items,deleteNext_$$module$build$src$core$contextmenu_items,registerDeleteAll$$module$build$src$core$contextmenu_items,registerWorkspaceOptions_$$module$build$src$core$contextmenu_items,registerDuplicate$$module$build$src$core$contextmenu_items,registerComment$$module$build$src$core$contextmenu_items,registerInline$$module$build$src$core$contextmenu_items,registerCollapseExpandBlock$$module$build$src$core$contextmenu_items,registerDisable$$module$build$src$core$contextmenu_items,\nregisterDelete$$module$build$src$core$contextmenu_items,registerHelp$$module$build$src$core$contextmenu_items,registerCommentDelete$$module$build$src$core$contextmenu_items,registerCommentDuplicate$$module$build$src$core$contextmenu_items,registerCommentCreate$$module$build$src$core$contextmenu_items,registerBlockOptions_$$module$build$src$core$contextmenu_items,registerCommentOptions$$module$build$src$core$contextmenu_items,registerDefaultOptions$$module$build$src$core$contextmenu_items,isPaster$$module$build$src$core$interfaces$i_paster,\nisRenderedElement$$module$build$src$core$interfaces$i_rendered_element,isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item,hideChaff$$module$build$src$core$blockly,isFocusableTree$$module$build$src$core$interfaces$i_focusable_tree,$jscomp;\nregister$$module$build$src$core$registry=function(a,b,c,d){if(!(a instanceof Type$$module$build$src$core$registry)&&typeof a!==\"string\"||`${a}`.trim()===\"\")throw Error('Invalid type \"'+a+'\". The type must be a non-empty string or a Blockly.registry.Type.');a=`${a}`.toLowerCase();if(typeof b!==\"string\"||b.trim()===\"\")throw Error('Invalid name \"'+b+'\". The name must be a non-empty string.');const e=b.toLowerCase();if(!c)throw Error(\"Can not register a null value\");let f=typeMap$$module$build$src$core$registry[a],\ng=nameMap$$module$build$src$core$registry[a];f||(f=typeMap$$module$build$src$core$registry[a]=Object.create(null),g=nameMap$$module$build$src$core$registry[a]=Object.create(null));validate$$module$build$src$core$registry(a,c);if(!d&&f[e]&&f[e]!==c)throw Error('Name \"'+e+'\" with type \"'+a+'\" already registered.');f[e]=c;g[e]=b};\nvalidate$$module$build$src$core$registry=function(a,b){switch(a){case String(Type$$module$build$src$core$registry.FIELD):if(typeof b.fromJson!==\"function\")throw Error('Type \"'+a+'\" must have a fromJson function');}};\nunregister$$module$build$src$core$registry=function(a,b){a=`${a}`.toLowerCase();b=b.toLowerCase();const c=typeMap$$module$build$src$core$registry[a];c&&c[b]?(delete typeMap$$module$build$src$core$registry[a][b],delete nameMap$$module$build$src$core$registry[a][b]):console.warn(\"Unable to unregister [\"+b+\"][\"+a+\"] from the registry.\")};\ngetItem$$module$build$src$core$registry=function(a,b,c){a=`${a}`.toLowerCase();b=b.toLowerCase();const d=typeMap$$module$build$src$core$registry[a];if(!d||!d[b]){b=\"Unable to find [\"+b+\"][\"+a+\"] in the registry.\";if(c)throw Error(b+\" You must require or register a \"+a+\" plugin.\");console.warn(b);return null}return d[b]};hasItem$$module$build$src$core$registry=function(a,b){a=`${a}`.toLowerCase();b=b.toLowerCase();return(a=typeMap$$module$build$src$core$registry[a])?!!a[b]:!1};\ngetClass$$module$build$src$core$registry=function(a,b,c){return getItem$$module$build$src$core$registry(a,b,c)};getObject$$module$build$src$core$registry=function(a,b,c){return getItem$$module$build$src$core$registry(a,b,c)};\ngetAllItems$$module$build$src$core$registry=function(a,b,c){a=`${a}`.toLowerCase();var d=typeMap$$module$build$src$core$registry[a];if(!d){d=`Unable to find [${a}] in the registry.`;if(c)throw Error(`${d} You must require or register a ${a} plugin.`);console.warn(d);return null}if(!b)return d;a=nameMap$$module$build$src$core$registry[a];c=Object.create(null);for(const e of Object.keys(d))c[a[e]]=d[e];return c};\ngetClassFromOptions$$module$build$src$core$registry=function(a,b,c){b=b.plugins[String(a)]||DEFAULT$$module$build$src$core$registry;return typeof b===\"function\"?b:getClass$$module$build$src$core$registry(a,b,c)};longStart$$module$build$src$core$touch=function(a,b){longStop$$module$build$src$core$touch();longPid_$$module$build$src$core$touch=setTimeout(function(){b&&b.handleRightClick(a)},LONGPRESS$$module$build$src$core$touch)};\nlongStop$$module$build$src$core$touch=function(){longPid_$$module$build$src$core$touch&&(clearTimeout(longPid_$$module$build$src$core$touch),longPid_$$module$build$src$core$touch=0)};clearTouchIdentifier$$module$build$src$core$touch=function(){touchIdentifier_$$module$build$src$core$touch=null};shouldHandleEvent$$module$build$src$core$touch=function(a){return!a.type.startsWith(\"pointer\")||a instanceof PointerEvent&&checkTouchIdentifier$$module$build$src$core$touch(a)};\ngetTouchIdentifierFromEvent$$module$build$src$core$touch=function(a){return`${a.pointerId}`};checkTouchIdentifier$$module$build$src$core$touch=function(a){const b=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);return touchIdentifier_$$module$build$src$core$touch?touchIdentifier_$$module$build$src$core$touch===b:a.type===\"pointerdown\"?(touchIdentifier_$$module$build$src$core$touch=b,!0):!1};\nconditionalBind$$module$build$src$core$browser_events=function(a,b,c,d,e){function f(h){if(e||shouldHandleEvent$$module$build$src$core$touch(h))c?d.call(c,h):d(h)}const g=[];if(b in TOUCH_MAP$$module$build$src$core$touch)for(let h=0;h{setTimeout(fireNow$$module$build$src$core$events$utils,0)})}catch(b){setTimeout(fireNow$$module$build$src$core$events$utils,0)}enqueueEvent$$module$build$src$core$events$utils(a)}};\nfireNow$$module$build$src$core$events$utils=function(){const a=filter$$module$build$src$core$events$utils(FIRE_QUEUE$$module$build$src$core$events$utils);FIRE_QUEUE$$module$build$src$core$events$utils.length=0;for(const b of a){if(!b.workspaceId)continue;let c;(c=getWorkspaceById$$module$build$src$core$common(b.workspaceId))==null||c.fireChangeListener(b)}};\nenqueueEvent$$module$build$src$core$events$utils=function(a){if(isBlockChange$$module$build$src$core$events$predicates(a)&&a.element===\"mutation\"){let b;for(b=FIRE_QUEUE$$module$build$src$core$events$utils.length;b>0;b--){const c=FIRE_QUEUE$$module$build$src$core$events$utils[b-1];if(c.group!==a.group||c.workspaceId!==a.workspaceId||!isBlockMove$$module$build$src$core$events$predicates(c)||c.newParentId!==a.blockId)break}FIRE_QUEUE$$module$build$src$core$events$utils.splice(b,0,a)}else FIRE_QUEUE$$module$build$src$core$events$utils.push(a)};\nfilter$$module$build$src$core$events$utils=function(a){const b=[];for(const c of a)if(a=b[b.length-1],!c.isNull())if(a&&a.workspaceId===c.workspaceId&&a.group===c.group)if(isBlockMove$$module$build$src$core$events$predicates(c)&&isBlockMove$$module$build$src$core$events$predicates(a)&&c.blockId===a.blockId){if(a.newParentId=c.newParentId,a.newInputName=c.newInputName,a.newCoordinate=c.newCoordinate,a.reason||c.reason){let d,e;a.reason=Array.from(new Set(((d=a.reason)!=null?d:[]).concat((e=c.reason)!=\nnull?e:[])))}}else isBlockChange$$module$build$src$core$events$predicates(c)&&isBlockChange$$module$build$src$core$events$predicates(a)&&c.blockId===a.blockId&&c.element===a.element&&c.name===a.name?a.newValue=c.newValue:isViewportChange$$module$build$src$core$events$predicates(c)&&isViewportChange$$module$build$src$core$events$predicates(a)?(a.viewTop=c.viewTop,a.viewLeft=c.viewLeft,a.scale=c.scale,a.oldScale=c.oldScale):isClick$$module$build$src$core$events$predicates(c)&&isBubbleOpen$$module$build$src$core$events$predicates(a)||\nb.push(c);else b.push(c);return a=b.filter(c=>!c.isNull())};clearPendingUndo$$module$build$src$core$events$utils=function(){for(let a=0,b;b=FIRE_QUEUE$$module$build$src$core$events$utils[a];a++)b.recordUndo=!1};$.disable$$module$build$src$core$events$utils=function(){disabled$$module$build$src$core$events$utils++};$.enable$$module$build$src$core$events$utils=function(){disabled$$module$build$src$core$events$utils--};\nisEnabled$$module$build$src$core$events$utils=function(){return disabled$$module$build$src$core$events$utils===0};$.getGroup$$module$build$src$core$events$utils=function(){return group$$module$build$src$core$events$utils};$.setGroup$$module$build$src$core$events$utils=function(a){TEST_ONLY$$module$build$src$core$events$utils.setGroupInternal(a)};\nsetGroupInternal$$module$build$src$core$events$utils=function(a){group$$module$build$src$core$events$utils=typeof a===\"boolean\"?a?genUid$$module$build$src$core$utils$idgenerator():\"\":a};getDescendantIds$$module$build$src$core$events$utils=function(a){const b=[];a=a.getDescendants(!1);for(let c=0,d;d=a[c];c++)b[c]=d.id;return b};\nfromJson$$module$build$src$core$events$utils=function(a,b){const c=get$$module$build$src$core$events$utils(a.type);if(!c)throw Error(\"Unknown event type.\");return c.fromJson(a,b)};get$$module$build$src$core$events$utils=function(a){const b=getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,a);if(!b)throw Error(`Event type ${a} not found in registry.`);return b};\ndisableOrphans$$module$build$src$core$events$utils=function(a){if((isBlockMove$$module$build$src$core$events$predicates(a)||isBlockCreate$$module$build$src$core$events$predicates(a))&&a.workspaceId){var b=getWorkspaceById$$module$build$src$core$common(a.workspaceId);if(!a.blockId)throw Error(\"Encountered a blockEvent without a proper blockId\");if(a=b.getBlockById(a.blockId)){const c=recordUndo$$module$build$src$core$events$utils;try{recordUndo$$module$build$src$core$events$utils=!1;const d=a.getParent();\nif(d&&!d.hasDisabledReason(ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils)){const e=a.getDescendants(!1);for(let f=0,g;g=e[f];f++)g.setDisabledReason(!1,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils)}else if((a.outputConnection||a.previousConnection)&&!b.isDragging()){do a.setDisabledReason(!0,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils),a=a.getNextBlock();while(a)}}finally{recordUndo$$module$build$src$core$events$utils=c}}}};\ncreateSvgElement$$module$build$src$core$utils$dom=function(a,b,c){a=document.createElementNS(SVG_NS$$module$build$src$core$utils$dom,`${a}`);for(const d in b)a.setAttribute(d,`${b[d]}`);c&&c.appendChild(a);return a};addClass$$module$build$src$core$utils$dom=function(a,b){b=b.split(\" \");if(b.every(c=>a.classList.contains(c)))return!1;a.classList.add(...b);return!0};removeClasses$$module$build$src$core$utils$dom=function(a,b){a.classList.remove(...b.split(\" \"))};\nremoveClass$$module$build$src$core$utils$dom=function(a,b){b=b.split(\" \");if(b.every(c=>!a.classList.contains(c)))return!1;a.classList.remove(...b);return!0};hasClass$$module$build$src$core$utils$dom=function(a,b){return a.classList.contains(b)};removeNode$$module$build$src$core$utils$dom=function(a){return a&&a.parentNode?a.parentNode.removeChild(a):null};\ninsertAfter$$module$build$src$core$utils$dom=function(a,b){const c=b.nextSibling;b=b.parentNode;if(!b)throw Error(\"Reference node has no parent.\");c?b.insertBefore(a,c):b.appendChild(a)};setCssTransform$$module$build$src$core$utils$dom=function(a,b){a.style.transform=b;a.style[\"-webkit-transform\"]=b};\nstartTextWidthCache$$module$build$src$core$utils$dom=function(){cacheReference$$module$build$src$core$utils$dom++;cacheWidths$$module$build$src$core$utils$dom||(cacheWidths$$module$build$src$core$utils$dom=Object.create(null))};stopTextWidthCache$$module$build$src$core$utils$dom=function(){cacheReference$$module$build$src$core$utils$dom--;cacheReference$$module$build$src$core$utils$dom||(cacheWidths$$module$build$src$core$utils$dom=null)};\ngetTextWidth$$module$build$src$core$utils$dom=function(a){const b=a.textContent+\"\\n\"+a.className.baseVal;var c;if(cacheWidths$$module$build$src$core$utils$dom&&(c=cacheWidths$$module$build$src$core$utils$dom[b]))return c;c=window.getComputedStyle(a);c=getFastTextWidthWithSizeString$$module$build$src$core$utils$dom(a,c.fontSize,c.fontWeight,c.fontFamily);cacheWidths$$module$build$src$core$utils$dom&&(cacheWidths$$module$build$src$core$utils$dom[b]=c);return c};\ngetFastTextWidth$$module$build$src$core$utils$dom=function(a,b,c,d){return getFastTextWidthWithSizeString$$module$build$src$core$utils$dom(a,b+\"pt\",c,d)};\ngetFastTextWidthWithSizeString$$module$build$src$core$utils$dom=function(a,b,c,d){const e=a.textContent;a=e+\"\\n\"+a.className.baseVal;var f;if(cacheWidths$$module$build$src$core$utils$dom&&(f=cacheWidths$$module$build$src$core$utils$dom[a]))return f;canvasContext$$module$build$src$core$utils$dom||(f=document.createElement(\"canvas\"),f.className=\"blocklyComputeCanvas\",document.body.appendChild(f),canvasContext$$module$build$src$core$utils$dom=f.getContext(\"2d\"));e&&canvasContext$$module$build$src$core$utils$dom?\n(canvasContext$$module$build$src$core$utils$dom.font=c+\" \"+b+\" \"+d,f=canvasContext$$module$build$src$core$utils$dom.measureText(e).width):f=0;cacheWidths$$module$build$src$core$utils$dom&&(cacheWidths$$module$build$src$core$utils$dom[a]=f);return f};\nmeasureFontMetrics$$module$build$src$core$utils$dom=function(a,b,c,d){const e=document.createElement(\"span\");e.style.font=c+\" \"+b+\" \"+d;e.textContent=a;a=document.createElement(\"div\");a.style.width=\"1px\";a.style.height=\"0\";b=document.createElement(\"div\");b.style.display=\"flex\";b.style.position=\"fixed\";b.style.top=\"0\";b.style.left=\"0\";b.appendChild(e);b.appendChild(a);document.body.appendChild(b);c={height:0,baseline:0};try{b.style.alignItems=\"baseline\",c.baseline=a.offsetTop-e.offsetTop,b.style.alignItems=\n\"flex-end\",c.height=a.offsetTop-e.offsetTop}finally{document.body.removeChild(b)}return c};$.getFocusManager$$module$build$src$core$focus_manager=function(){return FocusManager$$module$build$src$core$focus_manager.getFocusManager()};isFocusableNode$$module$build$src$core$interfaces$i_focusable_node=function(a){return a&&typeof a.getFocusableElement===\"function\"&&typeof a.getFocusableTree===\"function\"&&typeof a.onNodeFocus===\"function\"&&typeof a.onNodeBlur===\"function\"&&typeof a.canBeFocused===\"function\"};\nisSelectable$$module$build$src$core$interfaces$i_selectable=function(a){return isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(a)&&typeof a.id===\"string\"&&typeof a.workspace===\"object\"&&typeof a.select===\"function\"&&typeof a.unselect===\"function\"};\ndeepMerge$$module$build$src$core$utils$object=function(a,b){for(const c in b)b[c]!==null&&Array.isArray(b[c])?a[c]=deepMerge$$module$build$src$core$utils$object(a[c]||[],b[c]):a[c]=b[c]!==null&&typeof b[c]===\"object\"?deepMerge$$module$build$src$core$utils$object(a[c]||Object.create(null),b[c]):b[c];return a};getWorkspaceById$$module$build$src$core$common=function(a){return WorkspaceDB_$$module$build$src$core$common[a]||null};\ngetAllWorkspaces$$module$build$src$core$common=function(){const a=[];for(const b in WorkspaceDB_$$module$build$src$core$common)a.push(WorkspaceDB_$$module$build$src$core$common[b]);return a};registerWorkspace$$module$build$src$core$common=function(a){WorkspaceDB_$$module$build$src$core$common[a.id]=a};unregisterWorkpace$$module$build$src$core$common=function(a){delete WorkspaceDB_$$module$build$src$core$common[a.id]};getMainWorkspace$$module$build$src$core$common=function(){return mainWorkspace$$module$build$src$core$common};\nsetMainWorkspace$$module$build$src$core$common=function(a){mainWorkspace$$module$build$src$core$common=a};getSelected$$module$build$src$core$common=function(){const a=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode();return a&&isSelectable$$module$build$src$core$interfaces$i_selectable(a)?a:null};setSelected$$module$build$src$core$common=function(a){$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)};\nfireSelectedEvent$$module$build$src$core$common=function(a){const b=getSelected$$module$build$src$core$common();let c,d,e,f;const g=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.SELECTED))((c=b==null?void 0:b.id)!=null?c:null,(d=a==null?void 0:a.id)!=null?d:null,(f=(e=a==null?void 0:a.workspace.id)!=null?e:b==null?void 0:b.workspace.id)!=null?f:\"\");fire$$module$build$src$core$events$utils(g)};getParentContainer$$module$build$src$core$common=function(){return parentContainer$$module$build$src$core$common};\nsetParentContainer$$module$build$src$core$common=function(a){parentContainer$$module$build$src$core$common=a};\nsvgResize$$module$build$src$core$common=function(a){for(;a.options.parentWorkspace;)a=a.options.parentWorkspace;const b=a.getParentSvg(),c=a.getCachedParentSvgSize();var d=b.parentElement;if(d instanceof HTMLElement){var e=d.offsetWidth;d=d.offsetHeight;c.width!==e&&(b.setAttribute(\"width\",e+\"px\"),a.setCachedParentSvgSize(e,null));c.height!==d&&(b.setAttribute(\"height\",d+\"px\"),a.setCachedParentSvgSize(null,d));a.resize()}};\ngetBlockTypeCounts$$module$build$src$core$common=function(a,b){const c=Object.create(null),d=a.getDescendants(!0);b&&(a=a.getNextBlock())&&(a=d.indexOf(a),d.splice(a,d.length-a));for(let e=0,f;f=d[e];e++)c[f.type]?c[f.type]++:c[f.type]=1;return c};jsonInitFactory$$module$build$src$core$common=function(a){return function(){this.jsonInit(a)}};defineBlocksWithJsonArray$$module$build$src$core$common=function(a){TEST_ONLY$$module$build$src$core$common.defineBlocksWithJsonArrayInternal(a)};\ndefineBlocksWithJsonArrayInternal$$module$build$src$core$common=function(a){$.defineBlocks$$module$build$src$core$common($.createBlockDefinitionsFromJsonArray$$module$build$src$core$common(a))};\n$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common=function(a){const b={};for(let c=0;c>>/g,a),content$$module$build$src$core$css=\"\",a=document.createElement(\"style\"),a.id=\"blockly-common-style\",b=document.createTextNode(b),a.appendChild(b),document.head.insertBefore(a,document.head.firstChild)))};getSize$$module$build$src$core$utils$style=function(a){return TEST_ONLY$$module$build$src$core$utils$style.getSizeInternal(a)};\ngetSizeInternal$$module$build$src$core$utils$style=function(a){if(getComputedStyle$$module$build$src$core$utils$style(a,\"display\")!==\"none\")return getSizeWithDisplay$$module$build$src$core$utils$style(a);const b=a.style,c=b.display,d=b.visibility,e=b.position;b.visibility=\"hidden\";b.position=\"absolute\";b.display=\"inline\";const f=a.offsetWidth;a=a.offsetHeight;b.display=c;b.position=e;b.visibility=d;return new Size$$module$build$src$core$utils$size(f,a)};\ngetSizeWithDisplay$$module$build$src$core$utils$style=function(a){return new Size$$module$build$src$core$utils$size(a.offsetWidth,a.offsetHeight)};getComputedStyle$$module$build$src$core$utils$style=function(a,b){a=window.getComputedStyle(a);return a[b]||a.getPropertyValue(b)};\ngetPageOffset$$module$build$src$core$utils$style=function(a){const b=new Coordinate$$module$build$src$core$utils$coordinate(0,0);a=a.getBoundingClientRect();var c=document.documentElement;c=new Coordinate$$module$build$src$core$utils$coordinate(window.pageXOffset||c.scrollLeft,window.pageYOffset||c.scrollTop);b.x=a.left+c.x;b.y=a.top+c.y;return b};\ngetViewportPageOffset$$module$build$src$core$utils$style=function(){const a=document.body,b=document.documentElement;return new Coordinate$$module$build$src$core$utils$coordinate(a.scrollLeft||b.scrollLeft,a.scrollTop||b.scrollTop)};\ngetBorderBox$$module$build$src$core$utils$style=function(a){const b=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderLeftWidth\")),c=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderRightWidth\")),d=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderTopWidth\"));a=parseFloat(getComputedStyle$$module$build$src$core$utils$style(a,\"borderBottomWidth\"));return new Rect$$module$build$src$core$utils$rect(d,a,b,c)};\nscrollIntoContainerView$$module$build$src$core$utils$style=function(a,b,c){a=getContainerOffsetToScrollInto$$module$build$src$core$utils$style(a,b,c);b.scrollLeft=a.x;b.scrollTop=a.y};\ngetContainerOffsetToScrollInto$$module$build$src$core$utils$style=function(a,b,c){var d=getPageOffset$$module$build$src$core$utils$style(a),e=getPageOffset$$module$build$src$core$utils$style(b),f=getBorderBox$$module$build$src$core$utils$style(b);const g=d.x-e.x-f.left;d=d.y-e.y-f.top;e=getSizeWithDisplay$$module$build$src$core$utils$style(a);a=b.clientWidth-e.width;e=b.clientHeight-e.height;f=b.scrollLeft;b=b.scrollTop;c?(f+=g-a/2,b+=d-e/2):(f+=Math.min(g,Math.max(g-a,0)),b+=Math.min(d,Math.max(d-\ne,0)));return new Coordinate$$module$build$src$core$utils$coordinate(f,b)};\ngetRelativeXY$$module$build$src$core$utils$svg_math=function(a){const b=new Coordinate$$module$build$src$core$utils$coordinate(0,0);var c=a.x&&a.getAttribute(\"x\");const d=a.y&&a.getAttribute(\"y\");c&&(b.x=parseInt(c));d&&(b.y=parseInt(d));if(c=(c=a.getAttribute(\"transform\"))&&c.match(XY_REGEX$$module$build$src$core$utils$svg_math))b.x+=Number(c[1]),c[3]&&(b.y+=Number(c[3]));(a=a.getAttribute(\"style\"))&&a.includes(\"translate\")&&(a=a.match(XY_STYLE_REGEX$$module$build$src$core$utils$svg_math))&&(b.x+=\nNumber(a[1]),a[3]&&(b.y+=Number(a[3])));return b};getInjectionDivXY$$module$build$src$core$utils$svg_math=function(a){let b=0,c=0;for(;a;){const d=getRelativeXY$$module$build$src$core$utils$svg_math(a);b+=d.x;c+=d.y;if((\" \"+(a.getAttribute(\"class\")||\"\")+\" \").includes(\" injectionDiv \"))break;a=a.parentNode}return new Coordinate$$module$build$src$core$utils$coordinate(b,c)};\ngetViewportBBox$$module$build$src$core$utils$svg_math=function(){const a=getViewportPageOffset$$module$build$src$core$utils$style();return new Rect$$module$build$src$core$utils$rect(a.y,document.documentElement.clientHeight+a.y,a.x,document.documentElement.clientWidth+a.x)};getDocumentScroll$$module$build$src$core$utils$svg_math=function(){const a=document.documentElement,b=window;return new Coordinate$$module$build$src$core$utils$coordinate(b.pageXOffset||a.scrollLeft,b.pageYOffset||a.scrollTop)};\nscreenToWsCoordinates$$module$build$src$core$utils$svg_math=function(a,b){var c=b.x;b=b.y;const d=a.getInjectionDiv().getBoundingClientRect();c=new Coordinate$$module$build$src$core$utils$coordinate(c-d.left,b-d.top);b=a.getOriginOffsetInPixels();return Coordinate$$module$build$src$core$utils$coordinate.difference(c,b).scale(1/a.scale)};\nwsToScreenCoordinates$$module$build$src$core$utils$svg_math=function(a,b){var c=b.scale(a.scale);b=c.x;c=c.y;const d=a.getInjectionDiv().getBoundingClientRect();a=a.getOriginOffsetInPixels();return new Coordinate$$module$build$src$core$utils$coordinate(b+d.left+a.x,c+d.top+a.y)};\ninjectDependencies$$module$build$src$core$utils$xml=function(a){({document:document$$module$build$src$core$utils$xml=document$$module$build$src$core$utils$xml,DOMParser:DOMParser$$module$build$src$core$utils$xml=DOMParser$$module$build$src$core$utils$xml,XMLSerializer:XMLSerializer$$module$build$src$core$utils$xml=XMLSerializer$$module$build$src$core$utils$xml}=a);domParser$$module$build$src$core$utils$xml=new DOMParser$$module$build$src$core$utils$xml;xmlSerializer$$module$build$src$core$utils$xml=\nnew XMLSerializer$$module$build$src$core$utils$xml};$.createElement$$module$build$src$core$utils$xml=function(a){return document$$module$build$src$core$utils$xml.createElementNS(NAME_SPACE$$module$build$src$core$utils$xml,a)};$.createTextNode$$module$build$src$core$utils$xml=function(a){return document$$module$build$src$core$utils$xml.createTextNode(a)};\n$.textToDom$$module$build$src$core$utils$xml=function(a){let b=domParser$$module$build$src$core$utils$xml.parseFromString(a,\"text/xml\");if(b&&b.documentElement&&!b.getElementsByTagName(\"parsererror\").length)return b.documentElement;if((b=domParser$$module$build$src$core$utils$xml.parseFromString(a,\"text/html\"))&&b.body.firstChild&&b.body.firstChild.nodeName.toLowerCase()===\"xml\")return b.body.firstChild;throw Error(`DOMParser was unable to parse: ${a}`);};\ndomToText$$module$build$src$core$utils$xml=function(a){return sanitizeText$$module$build$src$core$utils$xml(xmlSerializer$$module$build$src$core$utils$xml.serializeToString(a))};sanitizeText$$module$build$src$core$utils$xml=function(a){return a.replace(INVALID_CONTROL_CHARS$$module$build$src$core$utils$xml,b=>`&#${b.charCodeAt(0)};`)};\nconvertToolboxDefToJson$$module$build$src$core$utils$toolbox=function(a){if(!a)return null;if(a instanceof Element||typeof a===\"string\")a=parseToolboxTree$$module$build$src$core$utils$toolbox(a),a=convertToToolboxJson$$module$build$src$core$utils$toolbox(a);validateToolbox$$module$build$src$core$utils$toolbox(a);return a};\nvalidateToolbox$$module$build$src$core$utils$toolbox=function(a){const b=a.kind;a=a.contents;if(b&&b!==FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox&&b!==CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox)throw Error(\"Invalid toolbox kind \"+b+\". Please supply either \"+FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox+\" or \"+CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox);if(!a)throw Error(\"Toolbox must have a contents attribute.\");};\nconvertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox=function(a){return a?a.contents?a.contents:Array.isArray(a)&&a.length>0&&!a[0].nodeType?a:xmlToJsonArray$$module$build$src$core$utils$toolbox(a):[]};hasCategories$$module$build$src$core$utils$toolbox=function(a){return TEST_ONLY$$module$build$src$core$utils$toolbox.hasCategoriesInternal(a)};\nhasCategoriesInternal$$module$build$src$core$utils$toolbox=function(a){if(!a)return!1;const b=a.kind;return b?b===CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox:!!a.contents.filter(c=>c.kind.toUpperCase()===\"CATEGORY\").length};isCategoryCollapsible$$module$build$src$core$utils$toolbox=function(a){return a&&a.contents?!!a.contents.filter(function(b){return b.kind.toUpperCase()===\"CATEGORY\"}).length:!1};\nconvertToToolboxJson$$module$build$src$core$utils$toolbox=function(a){const b={contents:xmlToJsonArray$$module$build$src$core$utils$toolbox(a)};a instanceof Node&&addAttributes$$module$build$src$core$utils$toolbox(a,b);return b};\nxmlToJsonArray$$module$build$src$core$utils$toolbox=function(a){const b=[];let c=a.childNodes;c||(c=a);for(let d=0,e;e=c[d];d++){if(!e.tagName)continue;a={};const f=e.tagName.toUpperCase();a.kind=f;f===\"BLOCK\"?a.blockxml=e:e.childNodes&&e.childNodes.length>0&&(a.contents=xmlToJsonArray$$module$build$src$core$utils$toolbox(e));addAttributes$$module$build$src$core$utils$toolbox(e,a);b.push(a)}return b};\naddAttributes$$module$build$src$core$utils$toolbox=function(a,b){for(let c=0;c document.\");}else a instanceof Element&&(b=a);return b};\ngetStartPositionRect$$module$build$src$core$positionable_helpers=function(a,b,c,d,e,f){const g=f.scrollbar&&f.scrollbar.canScrollVertically();a.horizontal===horizontalPosition$$module$build$src$core$positionable_helpers.LEFT?(c=e.absoluteMetrics.left+c,g&&f.RTL&&(c+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness)):(c=e.absoluteMetrics.left+e.viewMetrics.width-b.width-c,g&&!f.RTL&&(c-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness));a.vertical===verticalPosition$$module$build$src$core$positionable_helpers.TOP?\na=e.absoluteMetrics.top+d:(a=e.absoluteMetrics.top+e.viewMetrics.height-b.height-d,f.scrollbar&&f.scrollbar.canScrollHorizontally()&&(a-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness));return new Rect$$module$build$src$core$utils$rect(a,a+b.height,c,c+b.width)};\ngetCornerOppositeToolbox$$module$build$src$core$positionable_helpers=function(a,b){return{horizontal:b.toolboxMetrics.position===Position$$module$build$src$core$utils$toolbox.LEFT||a.horizontalLayout&&!a.RTL?horizontalPosition$$module$build$src$core$positionable_helpers.RIGHT:horizontalPosition$$module$build$src$core$positionable_helpers.LEFT,vertical:b.toolboxMetrics.position===Position$$module$build$src$core$utils$toolbox.BOTTOM?verticalPosition$$module$build$src$core$positionable_helpers.TOP:verticalPosition$$module$build$src$core$positionable_helpers.BOTTOM}};\nbumpPositionRect$$module$build$src$core$positionable_helpers=function(a,b,c,d){const e=a.left,f=a.right-a.left,g=a.bottom-a.top;for(let h=0;hf.id!==a.id).map(f=>f.getRelativeToSurfaceXY());for(;commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster(Coordinate$$module$build$src$core$utils$coordinate.sum(c,d),e);)d.translate(b.RTL?-30:30,30);a.moveTo(Coordinate$$module$build$src$core$utils$coordinate.sum(c,\nd))};commentOverlapsOtherExactly$$module$build$src$core$clipboard$workspace_comment_paster=function(a,b){return b.some(c=>Math.abs(c.x-a.x)<=1&&Math.abs(c.y-a.y)<=1)};setRole$$module$build$src$core$utils$aria=function(a,b){a.setAttribute(ROLE_ATTRIBUTE$$module$build$src$core$utils$aria,b)};setState$$module$build$src$core$utils$aria=function(a,b,c){Array.isArray(c)&&(c=c.join(\" \"));a.setAttribute(ARIA_PREFIX$$module$build$src$core$utils$aria+b,`${c}`)};\nisSerializable$$module$build$src$core$interfaces$i_serializable=function(a){return a&&typeof a.saveState===\"function\"&&typeof a.loadState===\"function\"};\nqueueRender$$module$build$src$core$render_management=function(a){queueBlock$$module$build$src$core$render_management(a);if(alwaysImmediatelyRender$$module$build$src$core$render_management())return doRenders$$module$build$src$core$render_management(),Promise.resolve();afterRendersPromise$$module$build$src$core$render_management||(afterRendersPromise$$module$build$src$core$render_management=new Promise(b=>{afterRendersResolver$$module$build$src$core$render_management=b;animationRequestId$$module$build$src$core$render_management=\nwindow.requestAnimationFrame(()=>{doRenders$$module$build$src$core$render_management();b()})}));return afterRendersPromise$$module$build$src$core$render_management};finishQueuedRenders$$module$build$src$core$render_management=function(){return afterRendersPromise$$module$build$src$core$render_management?afterRendersPromise$$module$build$src$core$render_management:Promise.resolve()};\ntriggerQueuedRenders$$module$build$src$core$render_management=function(a){a||window.cancelAnimationFrame(animationRequestId$$module$build$src$core$render_management);doRenders$$module$build$src$core$render_management(a);!a&&afterRendersResolver$$module$build$src$core$render_management&&afterRendersResolver$$module$build$src$core$render_management()};alwaysImmediatelyRender$$module$build$src$core$render_management=function(){return JavaFx$$module$build$src$core$utils$useragent};\nqueueBlock$$module$build$src$core$render_management=function(a){dirtyBlocks$$module$build$src$core$render_management.add(a);eventGroups$$module$build$src$core$render_management.set(a,$.getGroup$$module$build$src$core$events$utils());const b=a.getParent();b?queueBlock$$module$build$src$core$render_management(b):rootBlocks$$module$build$src$core$render_management.add(a)};\ndoRenders$$module$build$src$core$render_management=function(a){const b=a?new Set([a]):new Set([...rootBlocks$$module$build$src$core$render_management].map(f=>f.workspace)),c=[...rootBlocks$$module$build$src$core$render_management].filter(shouldRenderRootBlock$$module$build$src$core$render_management).filter(f=>b.has(f.workspace));for(var d of c)renderBlock$$module$build$src$core$render_management(d);for(const f of b)f.resizeContents();for(var e of c)d=e.getRelativeToSurfaceXY(),e.updateComponentLocations(d);\nfor(const f of c)e=$.getGroup$$module$build$src$core$events$utils(),(d=eventGroups$$module$build$src$core$render_management.get(f))&&$.setGroup$$module$build$src$core$events$utils(d),f.bumpNeighbours(),$.setGroup$$module$build$src$core$events$utils(e);for(const f of c)dequeueBlock$$module$build$src$core$render_management(f);a||(afterRendersPromise$$module$build$src$core$render_management=null)};\ndequeueBlock$$module$build$src$core$render_management=function(a){rootBlocks$$module$build$src$core$render_management.delete(a);dirtyBlocks$$module$build$src$core$render_management.delete(a);eventGroups$$module$build$src$core$render_management.delete(a);for(const b of a.getChildren(!1))dequeueBlock$$module$build$src$core$render_management(b)};shouldRenderRootBlock$$module$build$src$core$render_management=function(a){return!a.isDisposed()&&!a.getParent()};\nrenderBlock$$module$build$src$core$render_management=function(a){if(dirtyBlocks$$module$build$src$core$render_management.has(a)&&a.initialized){for(const b of a.getChildren(!1))renderBlock$$module$build$src$core$render_management(b);a.renderEfficiently()}};alert$$module$build$src$core$dialog=function(a,b){alertImplementation$$module$build$src$core$dialog(a,b)};\nsetAlert$$module$build$src$core$dialog=function(a=defaultAlert$$module$build$src$core$dialog){alertImplementation$$module$build$src$core$dialog=a};confirm$$module$build$src$core$dialog=function(a,b){confirmImplementation$$module$build$src$core$dialog(a,b)};setConfirm$$module$build$src$core$dialog=function(a=defaultConfirm$$module$build$src$core$dialog){confirmImplementation$$module$build$src$core$dialog=a};\nprompt$$module$build$src$core$dialog=function(a,b,c){promptImplementation$$module$build$src$core$dialog(a,b,c)};setPrompt$$module$build$src$core$dialog=function(a=defaultPrompt$$module$build$src$core$dialog){promptImplementation$$module$build$src$core$dialog=a};toast$$module$build$src$core$dialog=function(a,b){toastImplementation$$module$build$src$core$dialog(a,b)};\nsetToast$$module$build$src$core$dialog=function(a=defaultToast$$module$build$src$core$dialog){toastImplementation$$module$build$src$core$dialog=a};isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks=function(a){return a&&typeof a.getProcedureDef===\"function\"};isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks=function(a){return a&&typeof a.getProcedureCall===\"function\"&&typeof a.renameProcedure===\"function\"};\nisVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model=function(a){return a.getVariableModel!==void 0};warn$$module$build$src$core$utils$deprecation=function(a,b,c,d){a=a+\" was deprecated in \"+b+\" and will be deleted in \"+c+\".\";d&&(a+=\"\\nUse \"+d+\" instead.\");previousWarnings$$module$build$src$core$utils$deprecation.has(a)||(previousWarnings$$module$build$src$core$utils$deprecation.add(a),console.warn(a))};\n$.allUsedVarModels$$module$build$src$core$variables=function(a){a=a.getAllBlocks(!1);const b=new Set;for(let c=0;c({kind:\"block\",type:d,gap:8,fields:generateVariableFieldJson$$module$build$src$core$variables(g)})));return a};\nxmlFlyoutCategory$$module$build$src$core$variables=function(a){let b=[];const c=document.createElement(\"button\");c.setAttribute(\"text\",\"%{BKY_NEW_VARIABLE}\");c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE\");a.registerButtonCallback(\"CREATE_VARIABLE\",function(d){createVariableButtonHandler$$module$build$src$core$variables(d.getTargetWorkspace())});b.push(c);a=flyoutCategoryBlocks$$module$build$src$core$variables(a);return b=b.concat(a)};\nflyoutCategoryBlocks$$module$build$src$core$variables=function(a){a=a.getVariableMap().getVariablesOfType(\"\");const b=[];if(a.length>0){var c=a[a.length-1];if(Blocks$$module$build$src$core$blocks.variables_set){var d=$.createElement$$module$build$src$core$utils$xml(\"block\");d.setAttribute(\"type\",\"variables_set\");d.setAttribute(\"gap\",Blocks$$module$build$src$core$blocks.math_change?\"8\":\"24\");d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c));b.push(d)}Blocks$$module$build$src$core$blocks.math_change&&\n(d=$.createElement$$module$build$src$core$utils$xml(\"block\"),d.setAttribute(\"type\",\"math_change\"),d.setAttribute(\"gap\",Blocks$$module$build$src$core$blocks.variables_get?\"20\":\"8\"),d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c)),c=$.textToDom$$module$build$src$core$utils$xml('1'),d.appendChild(c),b.push(d));if(Blocks$$module$build$src$core$blocks.variables_get){a.sort(compareByName$$module$build$src$core$variables);\nfor(let e=0,f;f=a[e];e++)c=$.createElement$$module$build$src$core$utils$xml(\"block\"),c.setAttribute(\"type\",\"variables_get\"),c.setAttribute(\"gap\",\"8\"),c.appendChild(generateVariableFieldDom$$module$build$src$core$variables(f)),b.push(c)}}return b};generateUniqueName$$module$build$src$core$variables=function(a){return TEST_ONLY$$module$build$src$core$variables.generateUniqueNameInternal(a)};\ngenerateUniqueNameInternal$$module$build$src$core$variables=function(a){return generateUniqueNameFromOptions$$module$build$src$core$variables(VAR_LETTER_OPTIONS$$module$build$src$core$variables.charAt(0),a.getVariableMap().getAllVariables().map(b=>b.getName()))};\ngenerateUniqueNameFromOptions$$module$build$src$core$variables=function(a,b){if(!b.length)return a;const c=VAR_LETTER_OPTIONS$$module$build$src$core$variables;let d=\"\",e=c.indexOf(a);for(;;){let f=!1;for(let g=0;gf.getVariableModel().getName());if(d&&(c=d.some(f=>f.toLowerCase()===a),d=d.some(f=>f.toLowerCase()===b),c&&d))return e.getName()}return null};\ncheckForConflictingParamWithLegacyProcedures$$module$build$src$core$variables=function(a,b,c){a=a.toLowerCase();b=b.toLowerCase();c=c.getAllBlocks(!1);for(const e of c){if(!isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(e))continue;c=e.getProcedureDef();var d=c[1];const f=d.some(g=>g.toLowerCase()===a);d=d.some(g=>g.toLowerCase()===b);if(f&&d)return c[0]}return null};\ngenerateVariableFieldDom$$module$build$src$core$variables=function(a){const b=$.createElement$$module$build$src$core$utils$xml(\"field\");b.setAttribute(\"name\",\"VAR\");b.setAttribute(\"id\",a.getId());b.setAttribute(\"variabletype\",a.getType());a=$.createTextNode$$module$build$src$core$utils$xml(a.getName());b.appendChild(a);return b};\n$.getOrCreateVariablePackage$$module$build$src$core$variables=function(a,b,c,d){let e=$.getVariable$$module$build$src$core$variables(a,b,c,d);e||(e=createVariable$$module$build$src$core$variables(a,b,c,d));return e};\n$.getVariable$$module$build$src$core$variables=function(a,b,c,d){const e=a.getPotentialVariableMap();let f=null;if(b&&(f=a.getVariableById(b),!f&&e&&(f=e.getVariableById(b)),f))return f;if(c){if(d===void 0)throw Error(\"Tried to look up a variable by name without a type\");f=a.getVariable(c,d);!f&&e&&(f=e.getVariable(c,d))}return f};\ncreateVariable$$module$build$src$core$variables=function(a,b,c,d){const e=a.getVariableMap(),f=a.getPotentialVariableMap();c||(c=generateUniqueName$$module$build$src$core$variables(a.isFlyout?a.targetWorkspace:a));return f?f.createVariable(c,d,b!=null?b:void 0):e.createVariable(c,d,b)};getAddedVariables$$module$build$src$core$variables=function(a,b){a=a.getAllVariables();const c=[];if(b.length!==a.length)for(let d=0;d=0;f--){const g=e[f];if(g.type===\"procedures_defnoreturn\"||g.type===\"procedures_defreturn\"){c=String(g.getFieldValue(\"NAME\"));d=$.Msg$$module$build$src$core$msg.CANNOT_DELETE_VARIABLE_PROCEDURE.replace(\"%1\",d).replace(\"%2\",c);alert$$module$build$src$core$dialog(d);return}g===c&&e.splice(f,1)}c&&e.length||e.length>1?(d=\n$.Msg$$module$build$src$core$msg.DELETE_VARIABLE_CONFIRMATION.replace(\"%1\",String(e.length+(c&&!c.workspace.isFlyout?1:0))).replace(\"%2\",d),confirm$$module$build$src$core$dialog(d,f=>{f&&b&&a.getVariableMap().deleteVariable(b)})):a.getVariableMap().deleteVariable(b)};\nsave$$module$build$src$core$serialization$blocks=function(a,{addCoordinates:b=!1,addInputBlocks:c=!0,addNextBlocks:d=!0,doFullSerialization:e=!0,saveIds:f=!0}={}){if(a.isInsertionMarker())return null;const g={type:a.type,id:f?a.id:void 0};b&&saveCoords$$module$build$src$core$serialization$blocks(a,g);saveAttributes$$module$build$src$core$serialization$blocks(a,g);saveExtraState$$module$build$src$core$serialization$blocks(a,g,e);saveIcons$$module$build$src$core$serialization$blocks(a,g,e);saveFields$$module$build$src$core$serialization$blocks(a,\ng,e);c&&saveInputBlocks$$module$build$src$core$serialization$blocks(a,g,e,f);d&&saveNextBlocks$$module$build$src$core$serialization$blocks(a,g,e,f);return g};\nsaveAttributes$$module$build$src$core$serialization$blocks=function(a,b){a.isCollapsed()&&(b.collapsed=!0);a.isEnabled()||(b.disabledReasons=Array.from(a.getDisabledReasons()));a.isOwnDeletable()||(b.deletable=!1);a.isOwnMovable()||(b.movable=!1);a.isOwnEditable()||(b.editable=!1);a.inputsInline!==void 0&&a.inputsInline!==a.inputsInlineDefault&&(b.inline=a.inputsInline);a.data&&(b.data=a.data)};\nsaveCoords$$module$build$src$core$serialization$blocks=function(a,b){const c=a.workspace;a=a.getRelativeToSurfaceXY();b.x=Math.round(c.RTL?c.getWidth()-a.x:a.x);b.y=Math.round(a.y)};saveExtraState$$module$build$src$core$serialization$blocks=function(a,b,c){a.saveExtraState?(a=a.saveExtraState(c),a!==null&&(b.extraState=a)):a.mutationToDom&&(a=a.mutationToDom(),a!==null&&(b.extraState=domToText$$module$build$src$core$xml(a).replace(' xmlns=\"https://developers.google.com/blockly/xml\"',\"\")))};\nsaveIcons$$module$build$src$core$serialization$blocks=function(a,b,c){const d=Object.create(null);for(const e of a.getIcons())isSerializable$$module$build$src$core$interfaces$i_serializable(e)&&(a=e.saveState(c))&&(d[e.getType().toString()]=a);Object.keys(d).length&&(b.icons=d)};saveFields$$module$build$src$core$serialization$blocks=function(a,b,c){const d=Object.create(null);for(const e of a.getFields())e.isSerializable()&&(d[e.name]=e.saveState(c));Object.keys(d).length&&(b.fields=d)};\nsaveInputBlocks$$module$build$src$core$serialization$blocks=function(a,b,c,d){const e=Object.create(null);for(let f=0;f{k.disposed||k.setConnectionTracking(!0)},\n1)}return h};\nappendPrivate$$module$build$src$core$serialization$blocks=function(a,b,{parentConnection:c,isShadow:d=!1}={}){if(!a.type)throw new MissingBlockType$$module$build$src$core$serialization$exceptions(a);const e=b.newBlock(a.type,a.id);e.setShadow(d);loadCoords$$module$build$src$core$serialization$blocks(e,a);loadAttributes$$module$build$src$core$serialization$blocks(e,a);loadExtraState$$module$build$src$core$serialization$blocks(e,a);tryToConnectParent$$module$build$src$core$serialization$blocks(c,e,\na);loadIcons$$module$build$src$core$serialization$blocks(e,a);loadFields$$module$build$src$core$serialization$blocks(e,a);loadInputBlocks$$module$build$src$core$serialization$blocks(e,a);loadNextBlocks$$module$build$src$core$serialization$blocks(e,a);initBlock$$module$build$src$core$serialization$blocks(e,b.rendered);return e};\ncheckNewVariables$$module$build$src$core$serialization$blocks=function(a,b){if(isEnabled$$module$build$src$core$events$utils())for(a=getAddedVariables$$module$build$src$core$variables(a,b),b=0;bb&&(b=c[d].length);var e=-Infinity;let f,g=1;do{d=e;f=a;a=[];e=c.length/g;let h=1;for(let k=0;kd);return f};\nwrapScore$$module$build$src$core$utils$string=function(a,b,c){const d=[0],e=[];for(var f=0;f1&&d[d.length-1]<=d[d.length-2]&&(b+=.5);return b};\nwrapMutate$$module$build$src$core$utils$string=function(a,b,c){let d=wrapScore$$module$build$src$core$utils$string(a,b,c),e;for(let f=0;fd&&(d=h,e=g)}return e?wrapMutate$$module$build$src$core$utils$string(a,e,c):b};\nwrapToText$$module$build$src$core$utils$string=function(a,b){const c=[];for(let d=0;dRADIUS_OK$$module$build$src$core$tooltip&&hide$$module$build$src$core$tooltip()}else poisonedElement$$module$build$src$core$tooltip!==element$$module$build$src$core$tooltip&&\n(clearTimeout(showPid$$module$build$src$core$tooltip),lastX$$module$build$src$core$tooltip=a.pageX,lastY$$module$build$src$core$tooltip=a.pageY,showPid$$module$build$src$core$tooltip=setTimeout(show$$module$build$src$core$tooltip,HOVER_MS$$module$build$src$core$tooltip))};dispose$$module$build$src$core$tooltip=function(){poisonedElement$$module$build$src$core$tooltip=element$$module$build$src$core$tooltip=null;hide$$module$build$src$core$tooltip()};\nhide$$module$build$src$core$tooltip=function(){visible$$module$build$src$core$tooltip&&(visible$$module$build$src$core$tooltip=!1,containerDiv$$module$build$src$core$tooltip&&(containerDiv$$module$build$src$core$tooltip.style.display=\"none\"));showPid$$module$build$src$core$tooltip&&(clearTimeout(showPid$$module$build$src$core$tooltip),showPid$$module$build$src$core$tooltip=0)};\nblock$$module$build$src$core$tooltip=function(){hide$$module$build$src$core$tooltip();blocked$$module$build$src$core$tooltip=!0};unblock$$module$build$src$core$tooltip=function(){blocked$$module$build$src$core$tooltip=!1};\nrenderContent$$module$build$src$core$tooltip=function(){containerDiv$$module$build$src$core$tooltip&&element$$module$build$src$core$tooltip&&(typeof customTooltip$$module$build$src$core$tooltip===\"function\"?customTooltip$$module$build$src$core$tooltip(containerDiv$$module$build$src$core$tooltip,element$$module$build$src$core$tooltip):renderDefaultContent$$module$build$src$core$tooltip())};\nrenderDefaultContent$$module$build$src$core$tooltip=function(){var a=getTooltipOfObject$$module$build$src$core$tooltip(element$$module$build$src$core$tooltip);a=$.wrap$$module$build$src$core$utils$string(a,LIMIT$$module$build$src$core$tooltip);a=a.split(\"\\n\");for(let b=0;bc+window.scrollY&&(e-=containerDiv$$module$build$src$core$tooltip.offsetHeight+\n2*OFFSET_Y$$module$build$src$core$tooltip);a?d=Math.max(MARGINS$$module$build$src$core$tooltip-window.scrollX,d):d+containerDiv$$module$build$src$core$tooltip.offsetWidth>b+window.scrollX-2*MARGINS$$module$build$src$core$tooltip&&(d=b-containerDiv$$module$build$src$core$tooltip.offsetWidth-2*MARGINS$$module$build$src$core$tooltip);return{x:d,y:e}};\nshow$$module$build$src$core$tooltip=function(){if(!blocked$$module$build$src$core$tooltip&&(poisonedElement$$module$build$src$core$tooltip=element$$module$build$src$core$tooltip,containerDiv$$module$build$src$core$tooltip)){containerDiv$$module$build$src$core$tooltip.textContent=\"\";renderContent$$module$build$src$core$tooltip();var a=element$$module$build$src$core$tooltip.RTL;containerDiv$$module$build$src$core$tooltip.style.direction=a?\"rtl\":\"ltr\";containerDiv$$module$build$src$core$tooltip.style.display=\n\"block\";visible$$module$build$src$core$tooltip=!0;var {x:b,y:c}=getPosition$$module$build$src$core$tooltip(a);containerDiv$$module$build$src$core$tooltip.style.left=b+\"px\";containerDiv$$module$build$src$core$tooltip.style.top=c+\"px\"}};getHsvSaturation$$module$build$src$core$utils$colour=function(){return hsvSaturation$$module$build$src$core$utils$colour};setHsvSaturation$$module$build$src$core$utils$colour=function(a){hsvSaturation$$module$build$src$core$utils$colour=a};\ngetHsvValue$$module$build$src$core$utils$colour=function(){return hsvValue$$module$build$src$core$utils$colour};setHsvValue$$module$build$src$core$utils$colour=function(a){hsvValue$$module$build$src$core$utils$colour=a};\nparse$$module$build$src$core$utils$colour=function(a){a=`${a}`.toLowerCase().trim();var b=names$$module$build$src$core$utils$colour[a];if(b)return b;b=a.substring(0,2)===\"0x\"?\"#\"+a.substring(2):a;b=b[0]===\"#\"?b:\"#\"+b;if(/^#[0-9a-f]{6}$/.test(b))return b;if(/^#[0-9a-f]{3}$/.test(b))return[\"#\",b[1],b[1],b[2],b[2],b[3],b[3]].join(\"\");var c=a.match(/^(?:rgb)?\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/);return c&&(a=Number(c[1]),b=Number(c[2]),c=Number(c[3]),a>=0&&a<256&&b>=0&&b<256&&c>=0&&c<256)?rgbToHex$$module$build$src$core$utils$colour(a,\nb,c):null};rgbToHex$$module$build$src$core$utils$colour=function(a,b,c){b=a<<16|b<<8|c;return a<16?\"#\"+(16777216|b).toString(16).substr(1):\"#\"+b.toString(16)};hexToRgb$$module$build$src$core$utils$colour=function(a){a=parse$$module$build$src$core$utils$colour(a);if(!a)return[0,0,0];a=parseInt(a.substr(1),16);return[a>>16,a>>8&255,a&255]};\nhsvToHex$$module$build$src$core$utils$colour=function(a,b,c){let d=0,e=0,f=0;if(b===0)f=e=d=c;else{const g=Math.floor(a/60),h=a/60-g;a=c*(1-b);const k=c*(1-b*h);b=c*(1-b*(1-h));switch(g){case 1:d=k;e=c;f=a;break;case 2:d=a;e=c;f=b;break;case 3:d=a;e=k;f=c;break;case 4:d=b;e=a;f=c;break;case 5:d=c;e=a;f=k;break;case 6:case 0:d=c,e=b,f=a}}return rgbToHex$$module$build$src$core$utils$colour(Math.floor(d),Math.floor(e),Math.floor(f))};\nblend$$module$build$src$core$utils$colour=function(a,b,c){a=parse$$module$build$src$core$utils$colour(a);if(!a)return null;b=parse$$module$build$src$core$utils$colour(b);if(!b)return null;a=hexToRgb$$module$build$src$core$utils$colour(a);b=hexToRgb$$module$build$src$core$utils$colour(b);return rgbToHex$$module$build$src$core$utils$colour(Math.round(b[0]+c*(a[0]-b[0])),Math.round(b[1]+c*(a[1]-b[1])),Math.round(b[2]+c*(a[2]-b[2])))};\nhueToHex$$module$build$src$core$utils$colour=function(a){return hsvToHex$$module$build$src$core$utils$colour(a,hsvSaturation$$module$build$src$core$utils$colour,hsvValue$$module$build$src$core$utils$colour*255)};\ntokenizeInterpolationInternal$$module$build$src$core$utils$parsing=function(a,b,c){const d=[];var e=a.split(\"\");e.push(\"\");var f=0;a=[];let g=null;for(let l=0;l=a.bottom?b.top-c.height:b.bottom};isRepositionable$$module$build$src$core$widgetdiv=function(a){return!(a==null||!a.repositionForWindowResize)};repositionForWindowResize$$module$build$src$core$widgetdiv=function(){isRepositionable$$module$build$src$core$widgetdiv(owner$$module$build$src$core$widgetdiv)&&owner$$module$build$src$core$widgetdiv.repositionForWindowResize()||hide$$module$build$src$core$widgetdiv()};\ngetCurrentBlock$$module$build$src$core$contextmenu=function(){return currentBlock$$module$build$src$core$contextmenu};setCurrentBlock$$module$build$src$core$contextmenu=function(a){currentBlock$$module$build$src$core$contextmenu=a};\nshow$$module$build$src$core$contextmenu=function(a,b,c,d,e){show$$module$build$src$core$widgetdiv(dummyOwner$$module$build$src$core$contextmenu,c,dispose$$module$build$src$core$contextmenu,d);if(b.length){e||(a instanceof PointerEvent?e=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):(console.warn(\"Context menu opened with keyboard but no location given\"),e=new Coordinate$$module$build$src$core$utils$coordinate(0,0)));var f=populate_$$module$build$src$core$contextmenu(b,\nc,a,e);menu_$$module$build$src$core$contextmenu=f;position_$$module$build$src$core$contextmenu(f,c,e);setTimeout(function(){f.focus()},1);currentBlock$$module$build$src$core$contextmenu=null}else hide$$module$build$src$core$contextmenu()};\npopulate_$$module$build$src$core$contextmenu=function(a,b,c,d){const e=new Menu$$module$build$src$core$menu;e.setRole(Role$$module$build$src$core$utils$aria.MENU);for(let f=0;f{setTimeout(()=>{g.callback(g.scope,c,l,d)},0)})},{})}return e};\nposition_$$module$build$src$core$contextmenu=function(a,b,c){const d=getViewportBBox$$module$build$src$core$utils$svg_math();c=new Rect$$module$build$src$core$utils$rect(c.y+d.top,c.y+d.top,c.x+d.left,c.x+d.left);createWidget_$$module$build$src$core$contextmenu(a);const e=a.getSize();b&&(c.left+=e.width,c.right+=e.width,d.left+=e.width,d.right+=e.width);positionWithAnchor$$module$build$src$core$widgetdiv(d,c,e,b);a.focus()};\ncreateWidget_$$module$build$src$core$contextmenu=function(a){var b=getDiv$$module$build$src$core$widgetdiv();if(!b)throw Error(\"Attempting to create a context menu when widget div is null\");b=a.render(b);addClass$$module$build$src$core$utils$dom(b,\"blocklyContextMenu\");conditionalBind$$module$build$src$core$browser_events(b,\"contextmenu\",null,haltPropagation$$module$build$src$core$contextmenu);a.focus()};haltPropagation$$module$build$src$core$contextmenu=function(a){a.preventDefault();a.stopPropagation()};\nhide$$module$build$src$core$contextmenu=function(){hideIfOwner$$module$build$src$core$widgetdiv(dummyOwner$$module$build$src$core$contextmenu);currentBlock$$module$build$src$core$contextmenu=null};dispose$$module$build$src$core$contextmenu=function(){menu_$$module$build$src$core$contextmenu&&(menu_$$module$build$src$core$contextmenu.dispose(),menu_$$module$build$src$core$contextmenu=null)};\n$.callbackFactory$$module$build$src$core$contextmenu=function(a,b){return()=>{$.disable$$module$build$src$core$events$utils();let c;try{c=b instanceof Element?domToBlockInternal$$module$build$src$core$xml(b,a.workspace):appendInternal$$module$build$src$core$serialization$blocks(b,a.workspace);const d=a.getRelativeToSurfaceXY();d.x=a.RTL?d.x-$.config$$module$build$src$core$config.snapRadius:d.x+$.config$$module$build$src$core$config.snapRadius;d.y+=$.config$$module$build$src$core$config.snapRadius*\n2;c.moveBy(d.x,d.y)}finally{$.enable$$module$build$src$core$events$utils()}isEnabled$$module$build$src$core$events$utils()&&!c.isShadow()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(c));$.getFocusManager$$module$build$src$core$focus_manager().focusNode(c);return c}};\nmouseToWorkspacePoint$$module$build$src$core$utils$drag=function(a,b){b=mouseToSvg$$module$build$src$core$browser_events(b,a.getParentSvg(),a.getInverseScreenCTM());b.x/=a.scale;b.y/=a.scale;return b};start$$module$build$src$core$utils$drag=function(a,b,c){b=mouseToWorkspacePoint$$module$build$src$core$utils$drag(a,b);workspaceToDragDelta$$module$build$src$core$utils$drag.set(a,Coordinate$$module$build$src$core$utils$coordinate.difference(c,b))};\nmove$$module$build$src$core$utils$drag=function(a,b){b=mouseToWorkspacePoint$$module$build$src$core$utils$drag(a,b);a=workspaceToDragDelta$$module$build$src$core$utils$drag.get(a);if(!a)throw Error(\"Drag not initialized\");return Coordinate$$module$build$src$core$utils$coordinate.sum(a,b)};\nworkspaceToDom$$module$build$src$core$xml=function(a,b=!1){const c=$.createElement$$module$build$src$core$utils$xml(\"xml\");var d=variablesToDom$$module$build$src$core$xml($.allUsedVarModels$$module$build$src$core$variables(a));d.hasChildNodes()&&c.appendChild(d);for(const e of a.getTopComments())c.appendChild(saveWorkspaceComment$$module$build$src$core$xml(e,b));a=a.getTopBlocks(!0);for(d=0;d/g,\"<$1$2>\")};\ndomToPrettyText$$module$build$src$core$xml=function(a){a=domToText$$module$build$src$core$xml(a).split(\"<\");let b=\"\";for(let c=1;c\"&&(b+=\" \")}a=a.join(\"\\n\");a=a.replace(/(<(\\w+)\\b[^>]*>[^\\n]*)\\n *<\\/\\2>/g,\"$1\");return a.replace(/^\\n/,\"\")};\nclearWorkspaceAndLoadFromXml$$module$build$src$core$xml=function(a,b){b.setResizesEnabled(!1);b.clear();a=$.domToWorkspace$$module$build$src$core$xml(a,b);b.setResizesEnabled(!0);return a};\n$.domToWorkspace$$module$build$src$core$xml=function(a,b){let c=0;b.RTL&&(c=b.getWidth());const d=[];startTextWidthCache$$module$build$src$core$utils$dom();const e=$.getGroup$$module$build$src$core$events$utils();e||$.setGroup$$module$build$src$core$events$utils(!0);b.setResizesEnabled&&b.setResizesEnabled(!1);let f=!0;try{for(let g=0,h;h=a.childNodes[g];g++){const k=h.nodeName.toLowerCase(),l=h;if(k===\"block\"||k===\"shadow\"&&!getRecordUndo$$module$build$src$core$events$utils()){const m=domToBlockInternal$$module$build$src$core$xml(l,\nb);d.push(m.id);let n;const p=parseInt((n=l.getAttribute(\"x\"))!=null?n:\"10\",10);let r;const q=parseInt((r=l.getAttribute(\"y\"))!=null?r:\"10\",10);isNaN(p)||isNaN(q)||m.moveBy(b.RTL?c-p:p,q,[\"create\"]);f=!1}else{if(k===\"shadow\")throw TypeError(\"Shadow block cannot be a top-level block.\");if(k===\"comment\")loadWorkspaceComment$$module$build$src$core$xml(l,b);else if(k===\"variables\"){if(f)domToVariables$$module$build$src$core$xml(l,b);else throw Error(\"'variables' tag must exist once before block and shadow tag elements in the workspace XML, but it was found in another location.\");\nf=!1}}}}finally{$.setGroup$$module$build$src$core$events$utils(e),b.setResizesEnabled&&b.setResizesEnabled(!0),b.rendered&&triggerQueuedRenders$$module$build$src$core$render_management(),stopTextWidthCache$$module$build$src$core$utils$dom()}fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.FINISHED_LOADING))(b));return d};\nloadWorkspaceComment$$module$build$src$core$xml=function(a,b){var c;const d=(c=a.getAttribute(\"id\"))!=null?c:void 0;c=b.rendered?new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(b,d):new WorkspaceComment$$module$build$src$core$comments$workspace_comment(b,d);var e;c.setText((e=a.textContent)!=null?e:\"\");var f;e=parseInt((f=a.getAttribute(\"x\"))!=null?f:\"\",10);let g;f=parseInt((g=a.getAttribute(\"y\"))!=null?g:\"\",10);isNaN(e)||isNaN(f)||(e=b.RTL?b.getWidth()-e:e,\nc.moveTo(new Coordinate$$module$build$src$core$utils$coordinate(e,f)));var h;b=parseInt((h=a.getAttribute(\"w\"))!=null?h:\"\",10);let k;h=parseInt((k=a.getAttribute(\"h\"))!=null?k:\"\",10);isNaN(b)||isNaN(h)||c.setSize(new Size$$module$build$src$core$utils$size(b,h));a.getAttribute(\"collapsed\")===\"true\"&&c.setCollapsed(!0);a.getAttribute(\"editable\")===\"false\"&&c.setEditable(!1);a.getAttribute(\"movable\")===\"false\"&&c.setMovable(!1);a.getAttribute(\"deletable\")===\"false\"&&c.setDeletable(!1);return c};\nappendDomToWorkspace$$module$build$src$core$xml=function(a,b){if(!b.getBlocksBoundingBox)return $.domToWorkspace$$module$build$src$core$xml(a,b);var c=b.getBlocksBoundingBox();a=$.domToWorkspace$$module$build$src$core$xml(a,b);if(c&&c.top!==c.bottom){var d=c.bottom;c=b.RTL?c.right:c.left;var e=Infinity;let f=-Infinity,g=Infinity;for(let h=0;hf&&(f=k.x)}d=d-g+10;c=b.RTL?c-f:c-e;for(e=0;e=0;g--)f[g].initSvg();for(let g=f.length-1;g>=0;g--)f[g].queueRender();setTimeout(function(){e.disposed||e.setConnectionTracking(!0)},1);b.resizeContents()}else{const e=d.getDescendants(!1);for(let f=e.length-\n1;f>=0;f--)e[f].initModel()}}finally{$.enable$$module$build$src$core$events$utils()}if(isEnabled$$module$build$src$core$events$utils()){a=getAddedVariables$$module$build$src$core$variables(b,c);for(b=0;b{isNaN(n)||isNaN(r)||(n=b.workspace.RTL?b.workspace.getWidth()-(n+h):n,q.setBubbleLocation(new Coordinate$$module$build$src$core$utils$coordinate(n,r)));q.setBubbleVisible(f)},1)}};applyDataTagNodes$$module$build$src$core$xml=function(a,b){for(let c=0;c100)){var b=a.workspace,c=a.getSvgRoot();b.getAudioManager().play(\"delete\");var d=a.getRelativeToSurfaceXY(),e=c.cloneNode(!0);e.setAttribute(\"transform\",\"translate(\"+d.x+\",\"+d.y+\")\");var f;(f=b.getLayerManager())==null||f.appendToAnimationLayer({getSvgRoot:()=>e});disposeUiStep$$module$build$src$core$block_animations(e,{x:d.x,y:d.y,width:a.width,height:a.height},b.RTL,new Date)}};\ndisposeUiStep$$module$build$src$core$block_animations=function(a,b,c,d){const e=((new Date).getTime()-d.getTime())/150;e>1?removeNode$$module$build$src$core$utils$dom(a):(a.setAttribute(\"transform\",\"translate(\"+(b.x+(c?-1:1)*b.width/2*e)+\",\"+(b.y+b.height/2*e)+\") scale(\"+(1-e)+\")\"),setTimeout(disposeUiStep$$module$build$src$core$block_animations,10,a,b,c,d))};\nconnectionUiEffect$$module$build$src$core$block_animations=function(a){var b=a.workspace;const c=b.scale;b.getAudioManager().play(\"click\");if(!(c<1)){var d=b.getSvgXY(a.getSvgRoot());a.outputConnection?(d.x+=(a.RTL?3:-3)*c,d.y+=13*c):a.previousConnection&&(d.x+=(a.RTL?-23:23)*c,d.y+=3*c);var e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CIRCLE,{cx:d.x,cy:d.y,r:0,fill:\"none\",stroke:\"#888\",\"stroke-width\":10},b.getParentSvg());a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.ANIMATE,\n{id:\"animationCircle\",begin:\"indefinite\",attributeName:\"r\",dur:\"150ms\",from:0,to:25*c},e);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.ANIMATE,{id:\"animationOpacity\",begin:\"indefinite\",attributeName:\"opacity\",dur:\"150ms\",from:1,to:0},e);a.beginElement();b.beginElement();setTimeout(()=>void removeNode$$module$build$src$core$utils$dom(e),150)}};\ndisconnectUiEffect$$module$build$src$core$block_animations=function(a){disconnectUiStop$$module$build$src$core$block_animations();a.workspace.getAudioManager().play(\"disconnect\");if(!(a.workspace.scale<1)){var b=a.getHeightWidth().height;b=Math.atan(10/b)/Math.PI*180;a.RTL||(b*=-1);wobblingBlock$$module$build$src$core$block_animations=a;disconnectUiStep$$module$build$src$core$block_animations(a,b,new Date,0)}};\ndisconnectUiStep$$module$build$src$core$block_animations=function(a,b,c,d){const e=[.66,1,.66,0,-.66,-1,-.66,0];let f=\"\";c.getTime()+200>(new Date).getTime()&&(f=`skewX(${Math.round(e[d%e.length]*b)})`,disconnectPid$$module$build$src$core$block_animations=setTimeout(disconnectUiStep$$module$build$src$core$block_animations,15,a,b,c,d+1));a.getSvgRoot().setAttribute(\"transform\",`${a.getTranslation()} ${f}`)};\ndisconnectUiStop$$module$build$src$core$block_animations=function(){wobblingBlock$$module$build$src$core$block_animations&&(disconnectPid$$module$build$src$core$block_animations&&(clearTimeout(disconnectPid$$module$build$src$core$block_animations),disconnectPid$$module$build$src$core$block_animations=null),wobblingBlock$$module$build$src$core$block_animations.getSvgRoot().setAttribute(\"transform\",wobblingBlock$$module$build$src$core$block_animations.getTranslation()),wobblingBlock$$module$build$src$core$block_animations=\nnull)};\nmoveBlockToNotConflict$$module$build$src$core$clipboard$block_paster=function(a,b){a.workspace.RTL&&(b.x=a.workspace.getWidth()-b.x);const c=a.workspace,d=$.config$$module$build$src$core$config.snapRadius,e=Coordinate$$module$build$src$core$utils$coordinate.difference(b,a.getRelativeToSurfaceXY()),f=new Coordinate$$module$build$src$core$utils$coordinate(0,0),g=c.getAllBlocks(!1).filter(h=>h.id!=a.id).map(h=>h.getRelativeToSurfaceXY());for(;blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster(Coordinate$$module$build$src$core$utils$coordinate.sum(b,f),\ng)||blockIsInSnapRadius$$module$build$src$core$clipboard$block_paster(a,Coordinate$$module$build$src$core$utils$coordinate.sum(e,f),d);)c.RTL?f.translate(-d,d*2):f.translate(d,d*2);a.moveTo(Coordinate$$module$build$src$core$utils$coordinate.sum(b,f))};blockOverlapsOtherExactly$$module$build$src$core$clipboard$block_paster=function(a,b){return b.some(c=>Math.abs(c.x-a.x)<=1&&Math.abs(c.y-a.y)<=1)};\nblockIsInSnapRadius$$module$build$src$core$clipboard$block_paster=function(a,b,c){return a.getConnections_(!1).some(d=>!!d.closest(c,b).connection)};\nbumpObjectIntoBounds$$module$build$src$core$bump_objects=function(a,b,c){const d=c.getBoundingRectangle(),e=d.right-d.left,f=clamp$$module$build$src$core$utils$math(b.top,d.top,b.top+b.height-(d.bottom-d.top))-d.top;let g=b.left;b=b.left+b.width-e;a.RTL?g=Math.min(b,g):b=Math.max(g,b);return(a=clamp$$module$build$src$core$utils$math(g,d.left,b)-d.left)||f?(c.moveBy(a,f,[\"inbounds\"]),!0):!1};\nbumpIntoBoundsHandler$$module$build$src$core$bump_objects=function(a){return b=>{var c=a.getMetricsManager();if(c.hasFixedEdges()&&!a.isDragging()){var d;if(BUMP_EVENTS$$module$build$src$core$events$type.includes((d=b.type)!=null?d:\"\")){d=c.getScrollMetrics(!0);const e=extractObjectFromEvent$$module$build$src$core$bump_objects(a,b);e&&(c=$.getGroup$$module$build$src$core$events$utils()||!1,$.setGroup$$module$build$src$core$events$utils(b.group),bumpObjectIntoBounds$$module$build$src$core$bump_objects(a,\nd,e)&&!b.group&&console.warn(\"Moved object in bounds but there was no event group. This may break undo.\"),$.setGroup$$module$build$src$core$events$utils(c))}else isViewportChange$$module$build$src$core$events$predicates(b)&&b.scale&&b.oldScale&&b.scale>b.oldScale&&bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects(a)}}};\nextractObjectFromEvent$$module$build$src$core$bump_objects=function(a,b){let c=null;switch(b.type){case EventType$$module$build$src$core$events$type.BLOCK_CREATE:case EventType$$module$build$src$core$events$type.BLOCK_MOVE:(c=a.getBlockById(b.blockId))&&(c=c.getRootBlock());break;case EventType$$module$build$src$core$events$type.COMMENT_CREATE:case EventType$$module$build$src$core$events$type.COMMENT_MOVE:case EventType$$module$build$src$core$events$type.COMMENT_RESIZE:c=a.getCommentById(b.commentId)}return c};\nbumpTopObjectsIntoBounds$$module$build$src$core$bump_objects=function(a){var b=a.getMetricsManager();if(b.hasFixedEdges()&&!a.isDragging()){b=b.getScrollMetrics(!0);var c=a.getTopBoundedElements();for(let d=0,e;e=c[d];d++)bumpObjectIntoBounds$$module$build$src$core$bump_objects(a,b,e)}};isDeletable$$module$build$src$core$interfaces$i_deletable=function(a){return a&&typeof a.isDeletable===\"function\"&&typeof a.dispose===\"function\"&&typeof a.setDeleteStyle===\"function\"};\ngetBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){const c=a.getIcons();for(const d of a.inputList){if(!d.isVisible())continue;c.push(...d.fieldRow);let e;if((e=d.connection)==null?0:e.targetBlock())if(a=d.connection.targetBlock(),d.connection.type!==ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||b)c.push(a);else{let f;(a=(f=a.lastConnectionInStack(!1))==null?void 0:f.getSourceBlock())&&c.push(a)}else{let f;((f=d.connection)==\nnull?void 0:f.type)===ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE&&c.push(d.connection)}}return c};\nnavigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){const c=a.workspace.getTopBoundedElements(!0).filter(e=>isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(e));a=c.indexOf(a instanceof BlockSvg$$module$build$src$core$block_svg?a.getRootBlock():a)+b;let d=null;a>=0&&a=c.length&&(d=c[0]);if(b<0&&d instanceof BlockSvg$$module$build$src$core$block_svg){let e,f;return(f=(e=d.lastConnectionInStack(!1))==null?\nvoid 0:e.getSourceBlock())!=null?f:d}return d};\nnavigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy=function(a,b){var c;let d;const e=a instanceof BlockSvg$$module$build$src$core$block_svg?(d=(c=a.outputConnection)==null?void 0:c.targetBlock())!=null?d:a.getSurroundParent():a.getSourceBlock();if(!(e instanceof BlockSvg$$module$build$src$core$block_svg))return null;c=getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy(e,b>0);a=c.indexOf(a);if(a===-1)return null;b=a+b;return b>=0&&b!d.getReturnTypes()).map(d=>[d.getName(),d.getParameters().map(e=>e.getName()),!1]);a.getBlocksByType(\"procedures_defnoreturn\",!1).forEach(d=>{!isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(d)&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&b.push(d.getProcedureDef())});const c=a.getProcedureMap().getProcedures().filter(d=>\n!!d.getReturnTypes()).map(d=>[d.getName(),d.getParameters().map(e=>e.getName()),!0]);a.getBlocksByType(\"procedures_defreturn\",!1).forEach(d=>{!isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(d)&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&c.push(d.getProcedureDef())});b.sort(procTupleComparator$$module$build$src$core$procedures);c.sort(procTupleComparator$$module$build$src$core$procedures);return[b,c]};\nprocTupleComparator$$module$build$src$core$procedures=function(a,b){return a[0].localeCompare(b[0],void 0,{sensitivity:\"base\"})};$.findLegalName$$module$build$src$core$procedures=function(a,b){if(b.isInFlyout)return a;for(a=a||$.Msg$$module$build$src$core$msg.UNNAMED_KEY||\"unnamed\";!isLegalName$$module$build$src$core$procedures(a,b.workspace,b);){const c=a.match(/^(.*?)(\\d+)$/);a=c?c[1]+(parseInt(c[2])+1):a+\"2\"}return a};\nisLegalName$$module$build$src$core$procedures=function(a,b,c){return!isNameUsed$$module$build$src$core$procedures(a,b,c)};\nisNameUsed$$module$build$src$core$procedures=function(a,b,c){for(const d of b.getAllBlocks(!1))if(d!==c&&isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(d)&&$.Names$$module$build$src$core$names.equals(d.getProcedureDef()[0],a))return!0;c=c&&isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(c)?c==null?void 0:c.getProcedureModel():void 0;for(const d of b.getProcedureMap().getProcedures())if(d!==c&&$.Names$$module$build$src$core$names.equals(d.getName(),\na))return!0;return!1};\n$.rename$$module$build$src$core$procedures=function(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;a=a.trim();const c=$.findLegalName$$module$build$src$core$procedures(a,b);isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(b)&&!b.isInsertionMarker()&&b.getProcedureModel().setName(c);const d=this.getValue();if(d!==a&&d!==c)for(a=b.workspace.getAllBlocks(!1),b=0;bblockIsModernCallerFor$$module$build$src$core$procedures(c,a)||isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(c)&&$.Names$$module$build$src$core$names.equals(c.getProcedureCall(),a))};\nblockIsModernCallerFor$$module$build$src$core$procedures=function(a,b){return isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(a)&&!a.isProcedureDef()&&a.getProcedureModel()&&$.Names$$module$build$src$core$names.equals(a.getProcedureModel().getName(),b)};\n$.mutateCallers$$module$build$src$core$procedures=function(a){const b=getRecordUndo$$module$build$src$core$events$utils();var c=a.getProcedureDef()[0];const d=a.mutationToDom(!0);a=getCallers$$module$build$src$core$procedures(c,a.workspace);for(let f=0,g;g=a[f];f++){c=(c=g.mutationToDom())&&domToText$$module$build$src$core$utils$xml(c);g.domToMutation&&g.domToMutation(d);var e=g.mutationToDom();e=e&&domToText$$module$build$src$core$utils$xml(e);c!==e&&($.setRecordUndo$$module$build$src$core$events$utils(!1),\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(g,\"mutation\",null,c,e)),$.setRecordUndo$$module$build$src$core$events$utils(b))}};\n$.getDefinition$$module$build$src$core$procedures=function(a,b){for(const c of b.getAllBlocks(!1))if(isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block(c)&&c.isProcedureDef()&&$.Names$$module$build$src$core$names.equals(c.getProcedureModel().getName(),a)||isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks(c)&&$.Names$$module$build$src$core$names.equals(c.getProcedureDef()[0],a))return c;return null};\nisDynamicShape$$module$build$src$core$renderers$common$constants=function(a){return a.isDynamic};isPuzzleTab$$module$build$src$core$renderers$common$constants=function(a){return a.pathDown!==void 0&&a.pathUp!==void 0};isNotch$$module$build$src$core$renderers$common$constants=function(a){return a.pathLeft!==void 0&&a.pathRight!==void 0};\nregister$$module$build$src$core$renderers$common$block_rendering=function(a,b){register$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a,b)};unregister$$module$build$src$core$renderers$common$block_rendering=function(a){unregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a)};\ninit$$module$build$src$core$renderers$common$block_rendering=function(a,b,c){a=new (getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.RENDERER,a))(a);a.init(b,c);return a};stringButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"String\")};\nnumberButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"Number\")};colourButtonClickHandler$$module$build$src$core$variables_dynamic=function(a){createVariableButtonHandler$$module$build$src$core$variables(a.getTargetWorkspace(),void 0,\"Colour\")};\ninternalFlyoutCategory$$module$build$src$core$variables_dynamic=function(a){return flyoutCategory$$module$build$src$core$variables_dynamic(a,!1)};\nflyoutCategory$$module$build$src$core$variables_dynamic=function(a,b=!0){Blocks$$module$build$src$core$blocks.variables_set_dynamic||Blocks$$module$build$src$core$blocks.variables_get_dynamic||console.warn(\"There are no dynamic variable blocks, but there is a dynamic variable category.\");if(b)return warn$$module$build$src$core$utils$deprecation(\"The XML return value of Blockly.VariablesDynamic.flyoutCategory()\",\"v12\",\"v13\",\"the same method, but handle a return type of FlyoutItemInfo[] (JSON) instead.\"),\nxmlFlyoutCategory$$module$build$src$core$variables_dynamic(a);a.registerButtonCallback(\"CREATE_VARIABLE_STRING\",stringButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_NUMBER\",numberButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_COLOUR\",colourButtonClickHandler$$module$build$src$core$variables_dynamic);return[{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_STRING_VARIABLE,callbackkey:\"CREATE_VARIABLE_STRING\"},\n{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_NUMBER_VARIABLE,callbackkey:\"CREATE_VARIABLE_NUMBER\"},{kind:\"button\",text:$.Msg$$module$build$src$core$msg.NEW_COLOUR_VARIABLE,callbackkey:\"CREATE_VARIABLE_COLOUR\"},...jsonFlyoutCategoryBlocks$$module$build$src$core$variables(a,a.getVariableMap().getAllVariables(),!1,\"variables_get_dynamic\",\"variables_set_dynamic\")]};\nxmlFlyoutCategory$$module$build$src$core$variables_dynamic=function(a){let b=[],c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_STRING_VARIABLE);c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_STRING\");b.push(c);c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_NUMBER_VARIABLE);c.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_NUMBER\");b.push(c);c=document.createElement(\"button\");c.setAttribute(\"text\",$.Msg$$module$build$src$core$msg.NEW_COLOUR_VARIABLE);\nc.setAttribute(\"callbackKey\",\"CREATE_VARIABLE_COLOUR\");b.push(c);a.registerButtonCallback(\"CREATE_VARIABLE_STRING\",stringButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_NUMBER\",numberButtonClickHandler$$module$build$src$core$variables_dynamic);a.registerButtonCallback(\"CREATE_VARIABLE_COLOUR\",colourButtonClickHandler$$module$build$src$core$variables_dynamic);a=flyoutCategoryBlocks$$module$build$src$core$variables_dynamic(a);return b=b.concat(a)};\nflyoutCategoryBlocks$$module$build$src$core$variables_dynamic=function(a){a=a.getVariableMap().getAllVariables();const b=[];if(a.length>0){if(Blocks$$module$build$src$core$blocks.variables_set_dynamic){var c=a[a.length-1];const d=$.createElement$$module$build$src$core$utils$xml(\"block\");d.setAttribute(\"type\",\"variables_set_dynamic\");d.setAttribute(\"gap\",\"24\");d.appendChild(generateVariableFieldDom$$module$build$src$core$variables(c));b.push(d)}if(Blocks$$module$build$src$core$blocks.variables_get_dynamic){a.sort(compareByName$$module$build$src$core$variables);\nfor(let d=0,e;e=a[d];d++)c=$.createElement$$module$build$src$core$utils$xml(\"block\"),c.setAttribute(\"type\",\"variables_get_dynamic\"),c.setAttribute(\"gap\",\"8\"),c.appendChild(generateVariableFieldDom$$module$build$src$core$variables(e)),b.push(c)}}return b};resizeSvgContents$$module$build$src$core$workspace_svg=function(a){a.resizeContents()};\ncopy$$module$build$src$core$clipboard=function(a,b){const c=a.toCopyData();stashedCopyData$$module$build$src$core$clipboard=c;stashedWorkspace$$module$build$src$core$clipboard=isSelectable$$module$build$src$core$interfaces$i_selectable(a)&&a.workspace instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?a.workspace:null;stashedCoordinates$$module$build$src$core$clipboard=b;return c};getLastCopiedData$$module$build$src$core$clipboard=function(){return stashedCopyData$$module$build$src$core$clipboard};\nsetLastCopiedData$$module$build$src$core$clipboard=function(a){stashedCopyData$$module$build$src$core$clipboard=a};getLastCopiedWorkspace$$module$build$src$core$clipboard=function(){return stashedWorkspace$$module$build$src$core$clipboard};setLastCopiedWorkspace$$module$build$src$core$clipboard=function(a){stashedWorkspace$$module$build$src$core$clipboard=a};getLastCopiedLocation$$module$build$src$core$clipboard=function(){return stashedCoordinates$$module$build$src$core$clipboard};\nsetLastCopiedLocation$$module$build$src$core$clipboard=function(a){stashedCoordinates$$module$build$src$core$clipboard=a};\npaste$$module$build$src$core$clipboard=function(a,b,c){return a&&b?pasteFromData$$module$build$src$core$clipboard(a,b,c):stashedCopyData$$module$build$src$core$clipboard&&stashedWorkspace$$module$build$src$core$clipboard?pasteFromData$$module$build$src$core$clipboard(stashedCopyData$$module$build$src$core$clipboard,stashedWorkspace$$module$build$src$core$clipboard,stashedCoordinates$$module$build$src$core$clipboard):null};\npasteFromData$$module$build$src$core$clipboard=function(a,b,c){let d;b=b.isMutator?b:(d=b.options.parentWorkspace)!=null?d:b;let e,f;return(f=(e=getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.PASTER,a.paster,!1))==null?void 0:e.paste(a,b,c))!=null?f:null};isCopyable$$module$build$src$core$interfaces$i_copyable=function(a){return a&&typeof a.toCopyData===\"function\"};\nregisterEscape$$module$build$src$core$shortcut_items=function(){ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.ESCAPE,preconditionFn(a){return!a.isReadOnly()},callback(a){a.hideChaff();return!0},keyCodes:[KeyCodes$$module$build$src$core$utils$keycodes.ESC]})};\nregisterDelete$$module$build$src$core$shortcut_items=function(){ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.DELETE,preconditionFn(a,b){b=b.focusedNode;return!a.isReadOnly()&&b!=null&&isDeletable$$module$build$src$core$interfaces$i_deletable(b)&&b.isDeletable()&&!a.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(a,b,c,d){b.preventDefault();a=d.focusedNode;a instanceof\nBlockSvg$$module$build$src$core$block_svg?a.checkAndDelete():isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&a.isDeletable()&&($.setGroup$$module$build$src$core$events$utils(!0),a.dispose(),$.setGroup$$module$build$src$core$events$utils(!1));return!0},keyCodes:[KeyCodes$$module$build$src$core$utils$keycodes.DELETE,KeyCodes$$module$build$src$core$utils$keycodes.BACKSPACE]})};\nisCopyable$$module$build$src$core$shortcut_items=function(a){return isCopyable$$module$build$src$core$interfaces$i_copyable(a)&&isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&isDraggable$$module$build$src$core$interfaces$i_draggable(a)?a.isCopyable?a.isCopyable():a instanceof BlockSvg$$module$build$src$core$block_svg||a instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment?a.isOwnDeletable()&&a.isOwnMovable():a.isDeletable()&&a.isMovable():!1};\nisCuttable$$module$build$src$core$shortcut_items=function(a){return isCopyable$$module$build$src$core$shortcut_items(a)&&isDeletable$$module$build$src$core$interfaces$i_deletable(a)&&a.isDeletable()};\nregisterCopy$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.C,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.C,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.COPY,\npreconditionFn(c,d){d=d.focusedNode;c=c.isFlyout?c.targetWorkspace:c;return!!d&&!!c&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()&&isCopyable$$module$build$src$core$shortcut_items(d)},callback(c,d,e,f){d.preventDefault();d=f.focusedNode;if(!d||!isCopyable$$module$build$src$core$interfaces$i_copyable(d)||!isCopyable$$module$build$src$core$shortcut_items(d))return!1;c=c.isFlyout?c.targetWorkspace:c;if(!c)return!1;d.workspace.isFlyout||c.hideChaff();\nc=isDraggable$$module$build$src$core$interfaces$i_draggable(d)&&d.workspace==c?d.getRelativeToSurfaceXY():void 0;return!!copy$$module$build$src$core$clipboard(d,c)},keyCodes:[a,b]})};\nregisterCut$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.X,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.X,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.CUT,\npreconditionFn(c,d){d=d.focusedNode;return!!d&&!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()&&isCuttable$$module$build$src$core$shortcut_items(d)},callback(c,d,e,f){c=f.focusedNode;if(!c||!isCuttable$$module$build$src$core$shortcut_items(c)||!isCopyable$$module$build$src$core$interfaces$i_copyable(c))return!1;d=isDraggable$$module$build$src$core$interfaces$i_draggable(c)?c.getRelativeToSurfaceXY():void 0;d=copy$$module$build$src$core$clipboard(c,\nd);c instanceof BlockSvg$$module$build$src$core$block_svg?c.checkAndDelete():isDeletable$$module$build$src$core$interfaces$i_deletable(c)&&c.dispose();return!!d},keyCodes:[a,b]})};\nregisterPaste$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.V,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.V,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.PASTE,\npreconditionFn(){var c=getLastCopiedWorkspace$$module$build$src$core$clipboard();if(!c||!c.rendered)return!1;c=c.isFlyout?c.targetWorkspace:c;return!!getLastCopiedData$$module$build$src$core$clipboard()&&!!c&&!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(c,d){c=getLastCopiedData$$module$build$src$core$clipboard();if(!c)return!1;var e=getLastCopiedWorkspace$$module$build$src$core$clipboard();if(!e)return!1;e=e.isFlyout?e.targetWorkspace:\ne;if(!e||e.isReadOnly())return!1;if(d instanceof PointerEvent)return d=screenToWsCoordinates$$module$build$src$core$utils$svg_math(e,new Coordinate$$module$build$src$core$utils$coordinate(d.clientX,d.clientY)),!!paste$$module$build$src$core$clipboard(c,e,d);d=getLastCopiedLocation$$module$build$src$core$clipboard();if(!d)return!!paste$$module$build$src$core$clipboard(c,e);const {left:f,top:g,width:h,height:k}=e.getMetricsManager().getViewMetrics(!0);if((new Rect$$module$build$src$core$utils$rect(g,\ng+k,f,f+h)).contains(d.x,d.y))return!!paste$$module$build$src$core$clipboard(c,e);d=new Coordinate$$module$build$src$core$utils$coordinate(f+h/2,g+k/2);return!!paste$$module$build$src$core$clipboard(c,e,d)},keyCodes:[a,b]})};\nregisterUndo$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.META]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.UNDO,\npreconditionFn(c){return!c.isReadOnly()&&!c.isDragging()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},callback(c,d){c.hideChaff();c.undo(!1);d.preventDefault();return!0},keyCodes:[a,b]})};\nregisterRedo$$module$build$src$core$shortcut_items=function(){const a=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL,KeyCodes$$module$build$src$core$utils$keycodes.SHIFT]),b=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Z,[KeyCodes$$module$build$src$core$utils$keycodes.META,\nKeyCodes$$module$build$src$core$utils$keycodes.SHIFT]),c=ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.createSerializedKey(KeyCodes$$module$build$src$core$utils$keycodes.Y,[KeyCodes$$module$build$src$core$utils$keycodes.CTRL]);ShortcutRegistry$$module$build$src$core$shortcut_registry.registry.register({name:names$$module$build$src$core$shortcut_items.REDO,preconditionFn(d){return!d.isDragging()&&!d.isReadOnly()&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()},\ncallback(d,e){d.hideChaff();d.undo(!0);e.preventDefault();return!0},keyCodes:[a,b,c]})};registerDefaultShortcuts$$module$build$src$core$shortcut_items=function(){registerEscape$$module$build$src$core$shortcut_items();registerDelete$$module$build$src$core$shortcut_items();registerCopy$$module$build$src$core$shortcut_items();registerCut$$module$build$src$core$shortcut_items();registerPaste$$module$build$src$core$shortcut_items();registerUndo$$module$build$src$core$shortcut_items();registerRedo$$module$build$src$core$shortcut_items()};\nsaveProcedure$$module$build$src$core$serialization$procedures=function(a){const b=a.saveState();if(!a.getParameters().length)return b;b.parameters=a.getParameters().map(c=>c.saveState());return b};loadProcedure$$module$build$src$core$serialization$procedures=function(a,b,c,d){a=a.loadState(c,d);if(!c.parameters)return a;for(const [e,f]of c.parameters.entries())a.insertParameter(b.loadState(f,d),e);return a};\nsave$$module$build$src$core$serialization$workspaces=function(a){const b=Object.create(null),c=getAllItems$$module$build$src$core$registry(Type$$module$build$src$core$registry.SERIALIZER,!0);for(const d in c){let e;const f=(e=c[d])==null?void 0:e.save(a);f&&(b[d]=f)}return b};\nload$$module$build$src$core$serialization$workspaces=function(a,b,{recordUndo:c=!1}={}){var d=getAllItems$$module$build$src$core$registry(Type$$module$build$src$core$registry.SERIALIZER,!0);if(d){d=Object.entries(d).sort((f,g)=>g[1].priority-f[1].priority);var e=getRecordUndo$$module$build$src$core$events$utils();$.setRecordUndo$$module$build$src$core$events$utils(c);(c=$.getGroup$$module$build$src$core$events$utils())||$.setGroup$$module$build$src$core$events$utils(!0);startTextWidthCache$$module$build$src$core$utils$dom();\nb instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&b.setResizesEnabled(!1);for(const [,f]of d.reverse()){let g;(g=f)==null||g.clear(b)}for(const [f,g]of d.reverse())if(a[f]){let h;(h=g)==null||h.load(a[f],b)}b instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&b.setResizesEnabled(!0);stopTextWidthCache$$module$build$src$core$utils$dom();fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.FINISHED_LOADING))(b));\n$.setGroup$$module$build$src$core$events$utils(c);$.setRecordUndo$$module$build$src$core$events$utils(e)}};\ninject$$module$build$src$core$inject=function(a,b){let c=null;c=typeof a===\"string\"?document.getElementById(a)||document.querySelector(a):a;var d;if(!document.contains(c)&&document!==((d=c)==null?void 0:d.ownerDocument))throw Error(\"Error: container is not in current document\");a=new Options$$module$build$src$core$options(b||{});d=document.createElement(\"div\");addClass$$module$build$src$core$utils$dom(d,\"injectionDiv\");(b==null?0:b.rtl)&&addClass$$module$build$src$core$utils$dom(d,\"blocklyRTL\");c.appendChild(d);\nb=createDom$$module$build$src$core$inject(d,a);const e=createMainWorkspace$$module$build$src$core$inject(d,b,a);init$$module$build$src$core$inject(e);setMainWorkspace$$module$build$src$core$common(e);svgResize$$module$build$src$core$common(e);d.addEventListener(\"focusin\",function(){setMainWorkspace$$module$build$src$core$common(e)});conditionalBind$$module$build$src$core$browser_events(d,\"keydown\",null,globalShortcutHandler$$module$build$src$core$common);return e};\ncreateDom$$module$build$src$core$inject=function(a,b){a.setAttribute(\"dir\",\"LTR\");inject$$module$build$src$core$css(b.hasCss,b.pathToMedia);const c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{xmlns:SVG_NS$$module$build$src$core$utils$dom,\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\",\"class\":\"blocklySvg\"},a),d=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.DEFS,\n{},c),e=String(Math.random()).substring(2);b.gridPattern=Grid$$module$build$src$core$grid.createDom(e,b.gridOptions,d,a);return c};\ncreateMainWorkspace$$module$build$src$core$inject=function(a,b,c){c.parentWorkspace=null;c=new WorkspaceSvg$$module$build$src$core$workspace_svg(c);const d=c.options;c.scale=d.zoomOptions.startScale;b.appendChild(c.createDom(\"blocklyMainBackground\",a));var e=c.getRenderer().getClassName();e&&addClass$$module$build$src$core$utils$dom(a,e);(e=c.getTheme().getClassName())&&addClass$$module$build$src$core$utils$dom(a,e);!d.hasCategories&&d.languageTree&&(a=c.addFlyout(Svg$$module$build$src$core$utils$svg.SVG),\ninsertAfter$$module$build$src$core$utils$dom(a,b));d.hasTrashcan&&c.addTrashcan();d.zoomOptions&&d.zoomOptions.controls&&c.addZoomControls();c.getThemeManager().subscribe(b,\"workspaceBackgroundColour\",\"background-color\");c.translate(0,0);c.addChangeListener(bumpIntoBoundsHandler$$module$build$src$core$bump_objects(c));svgResize$$module$build$src$core$common(c);createDom$$module$build$src$core$widgetdiv();createDom$$module$build$src$core$dropdowndiv();createDom$$module$build$src$core$tooltip();return c};\ninit$$module$build$src$core$inject=function(a){const b=a.options;var c=a.getParentSvg();conditionalBind$$module$build$src$core$browser_events(c.parentNode,\"contextmenu\",null,function(d){isTargetInput$$module$build$src$core$browser_events(d)||d.preventDefault()});c=conditionalBind$$module$build$src$core$browser_events(window,\"resize\",null,function(){hide$$module$build$src$core$tooltip();a.hideComponents(!0);repositionForWindowResize$$module$build$src$core$dropdowndiv();repositionForWindowResize$$module$build$src$core$widgetdiv();\nsvgResize$$module$build$src$core$common(a);bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects(a)});a.setResizeHandlerWrapper(c);bindDocumentEvents$$module$build$src$core$inject();if(b.languageTree){c=a.getToolbox();const d=a.getFlyout(!0);c?c.init():d&&(d.init(a),d.show(b.languageTree),typeof d.scrollToStart===\"function\"&&d.scrollToStart())}b.hasTrashcan&&a.trashcan.init();b.zoomOptions&&b.zoomOptions.controls&&a.zoomControls_.init();b.moveOptions&&b.moveOptions.scrollbars?(a.scrollbar=\nnew ScrollbarPair$$module$build$src$core$scrollbar_pair(a,b.moveOptions.scrollbars===!0||!!b.moveOptions.scrollbars.horizontal,b.moveOptions.scrollbars===!0||!!b.moveOptions.scrollbars.vertical,\"blocklyMainWorkspaceScrollbar\"),a.scrollbar.resize()):a.setMetrics({x:.5,y:.5});b.hasSounds&&loadSounds$$module$build$src$core$inject(b.pathToMedia,a)};\nbindDocumentEvents$$module$build$src$core$inject=function(){documentEventsBound$$module$build$src$core$inject||(conditionalBind$$module$build$src$core$browser_events(document,\"scroll\",null,function(){const a=getAllWorkspaces$$module$build$src$core$common();for(let b=0,c;c=a[b];b++)c instanceof WorkspaceSvg$$module$build$src$core$workspace_svg&&c.updateInverseScreenCTM()}),bind$$module$build$src$core$browser_events(document,\"touchend\",null,longStop$$module$build$src$core$touch),bind$$module$build$src$core$browser_events(document,\n\"touchcancel\",null,longStop$$module$build$src$core$touch));documentEventsBound$$module$build$src$core$inject=!0};\nloadSounds$$module$build$src$core$inject=function(a,b){function c(){for(;e.length;){const f=e.pop();f&&unbind$$module$build$src$core$browser_events(f)}d.preload()}const d=b.getAudioManager();d.load([a+\"click.mp3\",a+\"click.wav\",a+\"click.ogg\"],\"click\");d.load([a+\"disconnect.wav\",a+\"disconnect.mp3\",a+\"disconnect.ogg\"],\"disconnect\");d.load([a+\"delete.mp3\",a+\"delete.ogg\",a+\"delete.wav\"],\"delete\");const e=[];e.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",null,c,!0));\ne.push(conditionalBind$$module$build$src$core$browser_events(document,\"touchstart\",null,c,!0))};isFullBlockField$$module$build$src$core$contextmenu_items=function(a){if(!a||!a.isSimpleReporter())return!1;let b;return(b=a.getFields().next().value)==null?void 0:b.isFullBlockField()};\nregisterUndo$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.UNDO},preconditionFn(a){return a.workspace.getUndoStack().length>0?\"enabled\":\"disabled\"},callback(a){a.workspace.undo(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"undoWorkspace\",weight:1})};\nregisterRedo$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.REDO},preconditionFn(a){return a.workspace.getRedoStack().length>0?\"enabled\":\"disabled\"},callback(a){a.workspace.undo(!0)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"redoWorkspace\",weight:2})};\nregisterCleanup$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.CLEAN_UP},preconditionFn(a){return a.workspace.isMovable()?a.workspace.getTopBlocks(!1).length>1?\"enabled\":\"disabled\":\"hidden\"},callback(a){a.workspace.cleanUp()},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"cleanWorkspace\",weight:3})};\ntoggleOption_$$module$build$src$core$contextmenu_items=function(a,b){function c(f){e--;f.setCollapsed(a);e===0&&$.setGroup$$module$build$src$core$events$utils(!1)}let d=0,e=0;$.setGroup$$module$build$src$core$events$utils(!0);for(let f=0;f\n0?\"enabled\":\"disabled\":\"disabled\"},callback(a){if(a.workspace){a.workspace.cancelCurrentGesture();var b=getDeletableBlocks_$$module$build$src$core$contextmenu_items(a.workspace);b.length<2?deleteNext_$$module$build$src$core$contextmenu_items(b):confirm$$module$build$src$core$dialog($.Msg$$module$build$src$core$msg.DELETE_ALL_BLOCKS.replace(\"%1\",String(b.length)),function(c){c&&deleteNext_$$module$build$src$core$contextmenu_items(b)})}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,\nid:\"workspaceDelete\",weight:6})};registerWorkspaceOptions_$$module$build$src$core$contextmenu_items=function(){registerUndo$$module$build$src$core$contextmenu_items();registerRedo$$module$build$src$core$contextmenu_items();registerCleanup$$module$build$src$core$contextmenu_items();registerCollapse$$module$build$src$core$contextmenu_items();registerExpand$$module$build$src$core$contextmenu_items();registerDeleteAll$$module$build$src$core$contextmenu_items()};\nregisterDuplicate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.DUPLICATE_BLOCK},preconditionFn(a){a=a.block;return!a.isInFlyout&&a.isDeletable()&&a.isMovable()?a.isDuplicatable()?\"enabled\":\"disabled\":\"hidden\"},callback(a){if(a.block){var b=a.block.toCopyData();b&&paste$$module$build$src$core$clipboard(b,a.block.workspace)}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,\nid:\"blockDuplicate\",weight:1})};\nregisterComment$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){return a.block.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)?$.Msg$$module$build$src$core$msg.REMOVE_COMMENT:$.Msg$$module$build$src$core$msg.ADD_COMMENT},preconditionFn(a){a=a.block;return!a||a.isInFlyout||!a.workspace.options.comments||a.isCollapsed()||!a.isEditable()||!a.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)&&isFullBlockField$$module$build$src$core$contextmenu_items(a)?\n\"hidden\":\"enabled\"},callback(a){(a=a.block)&&a.hasIcon(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE)?a.setCommentText(null):a.setCommentText(\"\")},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockComment\",weight:2})};\nregisterInline$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){return a.block.getInputsInline()?$.Msg$$module$build$src$core$msg.EXTERNAL_INPUTS:$.Msg$$module$build$src$core$msg.INLINE_INPUTS},preconditionFn(a){a=a.block;if(!a.isInFlyout&&a.isMovable()&&!a.isCollapsed())for(let b=1;b(b.has(MANUALLY_DISABLED$$module$build$src$core$constants)?\n1:0);return a.getInheritedDisabled()||b?\"disabled\":\"enabled\"}return\"hidden\"},callback(a){a=a.block;const b=$.getGroup$$module$build$src$core$events$utils();b||$.setGroup$$module$build$src$core$events$utils(!0);a.setDisabledReason(!a.hasDisabledReason(MANUALLY_DISABLED$$module$build$src$core$constants),MANUALLY_DISABLED$$module$build$src$core$constants);$.setGroup$$module$build$src$core$events$utils(b)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockDisable\",\nweight:5})};\nregisterDelete$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(a){var b=a.block;a=b.getDescendants(!1).length;(b=b.getNextBlock())&&(a-=b.getDescendants(!1).length);return a===1?$.Msg$$module$build$src$core$msg.DELETE_BLOCK:$.Msg$$module$build$src$core$msg.DELETE_X_BLOCKS.replace(\"%1\",`${a}`)},preconditionFn(a){return!a.block.isInFlyout&&a.block.isDeletable()?\"enabled\":\"hidden\"},callback(a){a.block&&a.block.checkAndDelete()},\nscopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockDelete\",weight:6})};\nregisterHelp$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText(){return $.Msg$$module$build$src$core$msg.HELP},preconditionFn(a){a=a.block;return(typeof a.helpUrl===\"function\"?a.helpUrl():a.helpUrl)?\"enabled\":\"hidden\"},callback(a){a.block.showHelp()},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.BLOCK,id:\"blockHelp\",weight:7})};\nregisterCommentDelete$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.REMOVE_COMMENT,preconditionFn(a){let b;return((b=a.comment)==null?0:b.isDeletable())?\"enabled\":\"hidden\"},callback(a){$.setGroup$$module$build$src$core$events$utils(!0);let b;(b=a.comment)==null||b.dispose();$.setGroup$$module$build$src$core$events$utils(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.COMMENT,\nid:\"commentDelete\",weight:6})};\nregisterCommentDuplicate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.DUPLICATE_COMMENT,preconditionFn(a){let b;return((b=a.comment)==null?0:b.isMovable())?\"enabled\":\"hidden\"},callback(a){if(a.comment){var b=a.comment.toCopyData();b&&paste$$module$build$src$core$clipboard(b,a.comment.workspace)}},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.COMMENT,id:\"commentDuplicate\",\nweight:1})};\nregisterCommentCreate$$module$build$src$core$contextmenu_items=function(){ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.register({displayText:()=>$.Msg$$module$build$src$core$msg.ADD_COMMENT,preconditionFn:a=>{let b;return((b=a.workspace)==null?0:b.isMutator)?\"hidden\":\"enabled\"},callback:(a,b,c,d)=>{if(a=a.workspace)$.setGroup$$module$build$src$core$events$utils(!0),b=new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(a),b.setPlaceholderText($.Msg$$module$build$src$core$msg.WORKSPACE_COMMENT_DEFAULT_TEXT),\nb.moveTo(screenToWsCoordinates$$module$build$src$core$utils$svg_math(a,new Coordinate$$module$build$src$core$utils$coordinate(d.x,d.y))),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b),$.setGroup$$module$build$src$core$events$utils(!1)},scopeType:ContextMenuRegistry$$module$build$src$core$contextmenu_registry.ScopeType.WORKSPACE,id:\"commentCreate\",weight:8})};\nregisterBlockOptions_$$module$build$src$core$contextmenu_items=function(){registerDuplicate$$module$build$src$core$contextmenu_items();registerComment$$module$build$src$core$contextmenu_items();registerInline$$module$build$src$core$contextmenu_items();registerCollapseExpandBlock$$module$build$src$core$contextmenu_items();registerDisable$$module$build$src$core$contextmenu_items();registerDelete$$module$build$src$core$contextmenu_items();registerHelp$$module$build$src$core$contextmenu_items()};\nregisterCommentOptions$$module$build$src$core$contextmenu_items=function(){registerCommentDuplicate$$module$build$src$core$contextmenu_items();registerCommentDelete$$module$build$src$core$contextmenu_items();registerCommentCreate$$module$build$src$core$contextmenu_items()};registerDefaultOptions$$module$build$src$core$contextmenu_items=function(){registerWorkspaceOptions_$$module$build$src$core$contextmenu_items();registerBlockOptions_$$module$build$src$core$contextmenu_items()};\nisPaster$$module$build$src$core$interfaces$i_paster=function(a){return a&&typeof a.paste===\"function\"};isRenderedElement$$module$build$src$core$interfaces$i_rendered_element=function(a){return a&&typeof a.getSvgRoot===\"function\"};isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item=function(a){return a.isSelectable()};hideChaff$$module$build$src$core$blockly=function(a){getMainWorkspace$$module$build$src$core$common().hideChaff(a)};\nisFocusableTree$$module$build$src$core$interfaces$i_focusable_tree=function(a){return a&&typeof a.getRootFocusableNode===\"function\"&&typeof a.getRestoredFocusableNode===\"function\"&&typeof a.getNestedTrees===\"function\"&&typeof a.lookUpFocusableNode===\"function\"&&typeof a.onTreeFocus===\"function\"&&typeof a.onTreeBlur===\"function\"};$jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_ES6=!1;$jscomp.ASSUME_ES2020=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;\n$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.INSTRUMENT_ASYNC_CONTEXT=!0;$jscomp.objectCreate=$jscomp.ASSUME_ES5||typeof Object.create==\"function\"?Object.create:function(a){var b=function(){};b.prototype=a;return new b};$jscomp.defineProperty=$jscomp.ASSUME_ES5||typeof Object.defineProperties==\"function\"?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};\n$jscomp.getGlobal=function(a){a=[\"object\"==typeof globalThis&&globalThis,a,\"object\"==typeof window&&window,\"object\"==typeof self&&self,\"object\"==typeof __webpack_require__.g&&__webpack_require__.g];for(var b=0;b>>0,$jscomp.propertyToPolyfillSymbol[e]=$jscomp.IS_SYMBOL_NATIVE?\n$jscomp.global.Symbol(e):$jscomp.POLYFILL_PREFIX+c+\"$\"+e),$jscomp.defineProperty(d,$jscomp.propertyToPolyfillSymbol[e],{configurable:!0,writable:!0,value:b})))};\n$jscomp.getConstructImplementation=function(){function a(){function c(){}new c;Reflect.construct(c,[],function(){});return new c instanceof c}if($jscomp.TRUST_ES6_POLYFILLS&&typeof Reflect!=\"undefined\"&&Reflect.construct){if(a())return Reflect.construct;var b=Reflect.construct;return function(c,d,e){c=b(c,d);e&&Reflect.setPrototypeOf(c,e.prototype);return c}}return function(c,d,e){e===void 0&&(e=c);e=$jscomp.objectCreate(e.prototype||Object.prototype);return Function.prototype.apply.call(c,e,d)||\ne}};$jscomp.construct={valueOf:$jscomp.getConstructImplementation}.valueOf();$jscomp.underscoreProtoCanBeSet=function(){var a={a:!0},b={};try{return b.__proto__=a,b.a}catch(c){}return!1};$jscomp.setPrototypeOf=$jscomp.ASSUME_ES6||$jscomp.TRUST_ES6_POLYFILLS&&typeof Object.setPrototypeOf==\"function\"?Object.setPrototypeOf:$jscomp.underscoreProtoCanBeSet()?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+\" is not extensible\");return a}:null;\n$jscomp.inherits=function(a,b){a.prototype=$jscomp.objectCreate(b.prototype);a.prototype.constructor=a;if($jscomp.ASSUME_ES6||$jscomp.setPrototypeOf){var c=$jscomp.setPrototypeOf;c(a,b)}else for(c in b)if(c!=\"prototype\")if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.superClass_=b.prototype};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b0;){var a=this.properties_.pop();if(a in this.object_)return a}return null};$jscomp.generator.Engine_=function(a){this.context_=new $jscomp.generator.Context;this.program_=a};\n$jscomp.generator.Engine_.prototype.next_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,a,this.context_.next_);this.context_.next_(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.return_=function(a){this.context_.start_();var b=this.context_.yieldAllIterator_;if(b)return this.yieldAllStep_(\"return\"in b?b[\"return\"]:function(c){return{value:c,done:!0}},a,this.context_.return);this.context_.return(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.throw_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_[\"throw\"],a,this.context_.next_);this.context_.throw_(a);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.yieldAllStep_=function(a,b,c){try{var d=a.call(this.context_.yieldAllIterator_,b);$jscomp.generator.ensureIteratorResultIsObject_(d);if(!d.done)return this.context_.stop_(),d;var e=d.value}catch(f){return this.context_.yieldAllIterator_=null,this.context_.throw_(f),this.nextStep_()}this.context_.yieldAllIterator_=null;c.call(this.context_,e);return this.nextStep_()};\n$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var a=this.program_(this.context_);if(a)return this.context_.stop_(),{value:a.value,done:!1}}catch(b){this.context_.yieldResult=void 0,this.context_.throw_(b)}this.context_.stop_();if(this.context_.abruptCompletion_){a=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(a.isException)throw a.exception;return{value:a.return,done:!0}}return{value:void 0,done:!0}};\n$jscomp.generator.Generator_=function(a){this.next=function(b){return a.next_(b)};this.throw=function(b){return a.throw_(b)};this.return=function(b){return a.return_(b)};this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(a,b){b=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(b));$jscomp.setPrototypeOf&&a.prototype&&$jscomp.setPrototypeOf(b,a.prototype);return b};\n$jscomp.asyncExecutePromiseGenerator=function(a){function b(d){return a.next(d)}function c(d){return a.throw(d)}return new Promise(function(d,e){function f(g){g.done?d(g.value):Promise.resolve(g.value).then(b,c).then(f,e)}f(a.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(a){return $jscomp.asyncExecutePromiseGenerator(a())};$jscomp.asyncExecutePromiseGeneratorProgram=function(a){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(a)))};\n$jscomp.polyfill(\"globalThis\",function(a){return a||$jscomp.global},\"es_2020\",\"es3\");$jscomp.polyfill(\"Array.prototype.includes\",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var e=d.length;c=c||0;for(c<0&&(c=Math.max(c+e,0));c0?(d=Array.prototype.flat.call(d,b-1),c.push.apply(c,d)):c.push(d)});return c}},\"es9\",\"es5\");\n$jscomp.polyfill(\"Object.entries\",function(a){return a?a:function(b){var c=[],d;for(d in b)$jscomp.owns(b,d)&&c.push([d,b[d]]);return c}},\"es8\",\"es3\");$jscomp.polyfill(\"Object.values\",function(a){return a?a:function(b){var c=[],d;for(d in b)$jscomp.owns(b,d)&&c.push(b[d]);return c}},\"es8\",\"es3\");\nvar typeMap$$module$build$src$core$registry=Object.create(null),TEST_ONLY$$module$build$src$core$registry={typeMap:typeMap$$module$build$src$core$registry},nameMap$$module$build$src$core$registry=Object.create(null),DEFAULT$$module$build$src$core$registry=\"default\",Type$$module$build$src$core$registry=class{constructor(a){this.name=a}toString(){return this.name}};Type$$module$build$src$core$registry.CONNECTION_CHECKER=new Type$$module$build$src$core$registry(\"connectionChecker\");\nType$$module$build$src$core$registry.CONNECTION_PREVIEWER=new Type$$module$build$src$core$registry(\"connectionPreviewer\");Type$$module$build$src$core$registry.CURSOR=new Type$$module$build$src$core$registry(\"cursor\");Type$$module$build$src$core$registry.EVENT=new Type$$module$build$src$core$registry(\"event\");Type$$module$build$src$core$registry.FIELD=new Type$$module$build$src$core$registry(\"field\");Type$$module$build$src$core$registry.INPUT=new Type$$module$build$src$core$registry(\"input\");\nType$$module$build$src$core$registry.RENDERER=new Type$$module$build$src$core$registry(\"renderer\");Type$$module$build$src$core$registry.TOOLBOX=new Type$$module$build$src$core$registry(\"toolbox\");Type$$module$build$src$core$registry.THEME=new Type$$module$build$src$core$registry(\"theme\");Type$$module$build$src$core$registry.TOOLBOX_ITEM=new Type$$module$build$src$core$registry(\"toolboxItem\");Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX=new Type$$module$build$src$core$registry(\"flyoutsVerticalToolbox\");\nType$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX=new Type$$module$build$src$core$registry(\"flyoutsHorizontalToolbox\");Type$$module$build$src$core$registry.FLYOUT_INFLATER=new Type$$module$build$src$core$registry(\"flyoutInflater\");Type$$module$build$src$core$registry.METRICS_MANAGER=new Type$$module$build$src$core$registry(\"metricsManager\");Type$$module$build$src$core$registry.BLOCK_DRAGGER=new Type$$module$build$src$core$registry(\"blockDragger\");\nType$$module$build$src$core$registry.SERIALIZER=new Type$$module$build$src$core$registry(\"serializer\");Type$$module$build$src$core$registry.ICON=new Type$$module$build$src$core$registry(\"icon\");Type$$module$build$src$core$registry.PASTER=new Type$$module$build$src$core$registry(\"paster\");Type$$module$build$src$core$registry.VARIABLE_MODEL=new Type$$module$build$src$core$registry(\"variableModel\");Type$$module$build$src$core$registry.VARIABLE_MAP=new Type$$module$build$src$core$registry(\"variableMap\");\nvar module$build$src$core$registry={DEFAULT:DEFAULT$$module$build$src$core$registry,TEST_ONLY:TEST_ONLY$$module$build$src$core$registry};module$build$src$core$registry.Type=Type$$module$build$src$core$registry;module$build$src$core$registry.getAllItems=getAllItems$$module$build$src$core$registry;module$build$src$core$registry.getClass=getClass$$module$build$src$core$registry;module$build$src$core$registry.getClassFromOptions=getClassFromOptions$$module$build$src$core$registry;\nmodule$build$src$core$registry.getObject=getObject$$module$build$src$core$registry;module$build$src$core$registry.hasItem=hasItem$$module$build$src$core$registry;module$build$src$core$registry.register=register$$module$build$src$core$registry;module$build$src$core$registry.unregister=unregister$$module$build$src$core$registry;var Blocks$$module$build$src$core$blocks=Object.create(null),module$build$src$core$blocks={Blocks:Blocks$$module$build$src$core$blocks};var LONGPRESS$$module$build$src$core$touch=750,TOUCH_ENABLED$$module$build$src$core$touch=\"ontouchstart\"in globalThis||!!(globalThis.document&&document.documentElement&&\"ontouchstart\"in document.documentElement)||!(!globalThis.navigator||!globalThis.navigator.maxTouchPoints&&!globalThis.navigator.msMaxTouchPoints),touchIdentifier_$$module$build$src$core$touch=null,TOUCH_MAP$$module$build$src$core$touch={mousedown:[\"pointerdown\"],mouseenter:[\"pointerenter\"],mouseleave:[\"pointerleave\"],mousemove:[\"pointermove\"],\nmouseout:[\"pointerout\"],mouseover:[\"pointerover\"],mouseup:[\"pointerup\",\"pointercancel\"],touchend:[\"pointerup\"],touchcancel:[\"pointercancel\"]},longPid_$$module$build$src$core$touch=0,module$build$src$core$touch={TOUCH_ENABLED:TOUCH_ENABLED$$module$build$src$core$touch,TOUCH_MAP:TOUCH_MAP$$module$build$src$core$touch};module$build$src$core$touch.checkTouchIdentifier=checkTouchIdentifier$$module$build$src$core$touch;module$build$src$core$touch.clearTouchIdentifier=clearTouchIdentifier$$module$build$src$core$touch;\nmodule$build$src$core$touch.getTouchIdentifierFromEvent=getTouchIdentifierFromEvent$$module$build$src$core$touch;module$build$src$core$touch.longStart=longStart$$module$build$src$core$touch;module$build$src$core$touch.longStop=longStop$$module$build$src$core$touch;module$build$src$core$touch.shouldHandleEvent=shouldHandleEvent$$module$build$src$core$touch;var rawUserAgent$$module$build$src$core$utils$useragent,isJavaFx$$module$build$src$core$utils$useragent,isWebKit$$module$build$src$core$utils$useragent,isGecko$$module$build$src$core$utils$useragent,isAndroid$$module$build$src$core$utils$useragent,isIPad$$module$build$src$core$utils$useragent,isIPhone$$module$build$src$core$utils$useragent,isMac$$module$build$src$core$utils$useragent,isTablet$$module$build$src$core$utils$useragent,isMobile$$module$build$src$core$utils$useragent;\n(function(a){function b(d){return c.includes(d.toUpperCase())}rawUserAgent$$module$build$src$core$utils$useragent=a;const c=rawUserAgent$$module$build$src$core$utils$useragent.toUpperCase();isJavaFx$$module$build$src$core$utils$useragent=b(\"JavaFX\");isWebKit$$module$build$src$core$utils$useragent=b(\"WebKit\");isGecko$$module$build$src$core$utils$useragent=b(\"Gecko\")&&!isWebKit$$module$build$src$core$utils$useragent;isAndroid$$module$build$src$core$utils$useragent=b(\"Android\");a=globalThis.navigator&&\nglobalThis.navigator.maxTouchPoints;isIPad$$module$build$src$core$utils$useragent=b(\"iPad\")||b(\"Macintosh\")&&a>0;isIPhone$$module$build$src$core$utils$useragent=b(\"iPhone\")&&!isIPad$$module$build$src$core$utils$useragent;isMac$$module$build$src$core$utils$useragent=b(\"Macintosh\");isTablet$$module$build$src$core$utils$useragent=isIPad$$module$build$src$core$utils$useragent||isAndroid$$module$build$src$core$utils$useragent&&!b(\"Mobile\")||b(\"Silk\");isMobile$$module$build$src$core$utils$useragent=!isTablet$$module$build$src$core$utils$useragent&&\n(isIPhone$$module$build$src$core$utils$useragent||isAndroid$$module$build$src$core$utils$useragent)})(globalThis.navigator&&globalThis.navigator.userAgent||\"\");\nvar raw$$module$build$src$core$utils$useragent=rawUserAgent$$module$build$src$core$utils$useragent,JavaFx$$module$build$src$core$utils$useragent=isJavaFx$$module$build$src$core$utils$useragent,GECKO$$module$build$src$core$utils$useragent=isGecko$$module$build$src$core$utils$useragent,ANDROID$$module$build$src$core$utils$useragent=isAndroid$$module$build$src$core$utils$useragent,IPAD$$module$build$src$core$utils$useragent=isIPad$$module$build$src$core$utils$useragent,IPHONE$$module$build$src$core$utils$useragent=\nisIPhone$$module$build$src$core$utils$useragent,MAC$$module$build$src$core$utils$useragent=isMac$$module$build$src$core$utils$useragent,MOBILE$$module$build$src$core$utils$useragent=isMobile$$module$build$src$core$utils$useragent,module$build$src$core$utils$useragent={ANDROID:ANDROID$$module$build$src$core$utils$useragent,GECKO:GECKO$$module$build$src$core$utils$useragent,IPAD:IPAD$$module$build$src$core$utils$useragent,IPHONE:IPHONE$$module$build$src$core$utils$useragent,JavaFx:JavaFx$$module$build$src$core$utils$useragent,\nMAC:MAC$$module$build$src$core$utils$useragent,MOBILE:MOBILE$$module$build$src$core$utils$useragent,raw:raw$$module$build$src$core$utils$useragent};var LINE_MODE_MULTIPLIER$$module$build$src$core$browser_events=40,PAGE_MODE_MULTIPLIER$$module$build$src$core$browser_events=125,module$build$src$core$browser_events={};module$build$src$core$browser_events.bind=bind$$module$build$src$core$browser_events;module$build$src$core$browser_events.conditionalBind=conditionalBind$$module$build$src$core$browser_events;module$build$src$core$browser_events.getScrollDeltaPixels=getScrollDeltaPixels$$module$build$src$core$browser_events;\nmodule$build$src$core$browser_events.isRightButton=isRightButton$$module$build$src$core$browser_events;module$build$src$core$browser_events.isTargetInput=isTargetInput$$module$build$src$core$browser_events;module$build$src$core$browser_events.mouseToSvg=mouseToSvg$$module$build$src$core$browser_events;module$build$src$core$browser_events.unbind=unbind$$module$build$src$core$browser_events;var EventType$$module$build$src$core$events$type;\n(function(a){a.BLOCK_CREATE=\"create\";a.BLOCK_DELETE=\"delete\";a.BLOCK_CHANGE=\"change\";a.BLOCK_FIELD_INTERMEDIATE_CHANGE=\"block_field_intermediate_change\";a.BLOCK_MOVE=\"move\";a.VAR_CREATE=\"var_create\";a.VAR_DELETE=\"var_delete\";a.VAR_RENAME=\"var_rename\";a.VAR_TYPE_CHANGE=\"var_type_change\";a.UI=\"ui\";a.BLOCK_DRAG=\"drag\";a.SELECTED=\"selected\";a.CLICK=\"click\";a.MARKER_MOVE=\"marker_move\";a.BUBBLE_OPEN=\"bubble_open\";a.TRASHCAN_OPEN=\"trashcan_open\";a.TOOLBOX_ITEM_SELECT=\"toolbox_item_select\";a.THEME_CHANGE=\n\"theme_change\";a.VIEWPORT_CHANGE=\"viewport_change\";a.COMMENT_CREATE=\"comment_create\";a.COMMENT_DELETE=\"comment_delete\";a.COMMENT_CHANGE=\"comment_change\";a.COMMENT_MOVE=\"comment_move\";a.COMMENT_RESIZE=\"comment_resize\";a.COMMENT_DRAG=\"comment_drag\";a.COMMENT_COLLAPSE=\"comment_collapse\";a.FINISHED_LOADING=\"finished_loading\"})(EventType$$module$build$src$core$events$type||(EventType$$module$build$src$core$events$type={}));\nvar BUMP_EVENTS$$module$build$src$core$events$type=[EventType$$module$build$src$core$events$type.BLOCK_CREATE,EventType$$module$build$src$core$events$type.BLOCK_MOVE,EventType$$module$build$src$core$events$type.COMMENT_CREATE,EventType$$module$build$src$core$events$type.COMMENT_MOVE],module$build$src$core$events$type={BUMP_EVENTS:BUMP_EVENTS$$module$build$src$core$events$type};module$build$src$core$events$type.EventType=EventType$$module$build$src$core$events$type;var soup$$module$build$src$core$utils$idgenerator=\"!#$%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",internal$$module$build$src$core$utils$idgenerator={genUid:()=>{const a=soup$$module$build$src$core$utils$idgenerator.length,b=[];for(let c=0;c<20;c++)b[c]=soup$$module$build$src$core$utils$idgenerator.charAt(Math.random()*a);return b.join(\"\")}},TEST_ONLY$$module$build$src$core$utils$idgenerator=internal$$module$build$src$core$utils$idgenerator,nextId$$module$build$src$core$utils$idgenerator=\n0,module$build$src$core$utils$idgenerator={TEST_ONLY:internal$$module$build$src$core$utils$idgenerator};module$build$src$core$utils$idgenerator.genUid=genUid$$module$build$src$core$utils$idgenerator;module$build$src$core$utils$idgenerator.getNextUniqueId=getNextUniqueId$$module$build$src$core$utils$idgenerator;var module$build$src$core$events$predicates={};module$build$src$core$events$predicates.isBlockChange=isBlockChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockCreate=isBlockCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockDelete=isBlockDelete$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockDrag=isBlockDrag$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isBlockFieldIntermediateChange=isBlockFieldIntermediateChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBlockMove=isBlockMove$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isBubbleOpen=isBubbleOpen$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isClick=isClick$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isCommentChange=isCommentChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentCollapse=isCommentCollapse$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentCreate=isCommentCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentDelete=isCommentDelete$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isCommentDrag=isCommentDrag$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentMove=isCommentMove$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isCommentResize=isCommentResize$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isFinishedLoading=isFinishedLoading$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isSelected=isSelected$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isThemeChange=isThemeChange$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isToolboxItemSelect=isToolboxItemSelect$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isTrashcanOpen=isTrashcanOpen$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isVarCreate=isVarCreate$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isVarDelete=isVarDelete$$module$build$src$core$events$predicates;\nmodule$build$src$core$events$predicates.isVarRename=isVarRename$$module$build$src$core$events$predicates;module$build$src$core$events$predicates.isViewportChange=isViewportChange$$module$build$src$core$events$predicates;var group$$module$build$src$core$events$utils=\"\",recordUndo$$module$build$src$core$events$utils=!0,disabled$$module$build$src$core$events$utils=0,ORPHANED_BLOCK_DISABLED_REASON$$module$build$src$core$events$utils=\"ORPHANED_BLOCK\",FIRE_QUEUE$$module$build$src$core$events$utils=[],TEST_ONLY$$module$build$src$core$events$utils={FIRE_QUEUE:FIRE_QUEUE$$module$build$src$core$events$utils,enqueueEvent:enqueueEvent$$module$build$src$core$events$utils,fireNow:fireNow$$module$build$src$core$events$utils,fireInternal:fireInternal$$module$build$src$core$events$utils,\nsetGroupInternal:setGroupInternal$$module$build$src$core$events$utils},module$build$src$core$events$utils={TEST_ONLY:TEST_ONLY$$module$build$src$core$events$utils};module$build$src$core$events$utils.clearPendingUndo=clearPendingUndo$$module$build$src$core$events$utils;module$build$src$core$events$utils.disable=$.disable$$module$build$src$core$events$utils;module$build$src$core$events$utils.disableOrphans=disableOrphans$$module$build$src$core$events$utils;\nmodule$build$src$core$events$utils.enable=$.enable$$module$build$src$core$events$utils;module$build$src$core$events$utils.filter=filter$$module$build$src$core$events$utils;module$build$src$core$events$utils.fire=fire$$module$build$src$core$events$utils;module$build$src$core$events$utils.fromJson=fromJson$$module$build$src$core$events$utils;module$build$src$core$events$utils.get=get$$module$build$src$core$events$utils;module$build$src$core$events$utils.getDescendantIds=getDescendantIds$$module$build$src$core$events$utils;\nmodule$build$src$core$events$utils.getGroup=$.getGroup$$module$build$src$core$events$utils;module$build$src$core$events$utils.getRecordUndo=getRecordUndo$$module$build$src$core$events$utils;module$build$src$core$events$utils.isEnabled=isEnabled$$module$build$src$core$events$utils;module$build$src$core$events$utils.setGroup=$.setGroup$$module$build$src$core$events$utils;module$build$src$core$events$utils.setRecordUndo=$.setRecordUndo$$module$build$src$core$events$utils;var SVG_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/2000/svg\",HTML_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/1999/xhtml\",XLINK_NS$$module$build$src$core$utils$dom=\"http://www.w3.org/1999/xlink\",NodeType$$module$build$src$core$utils$dom;(function(a){a[a.ELEMENT_NODE=1]=\"ELEMENT_NODE\";a[a.TEXT_NODE=3]=\"TEXT_NODE\";a[a.COMMENT_NODE=8]=\"COMMENT_NODE\"})(NodeType$$module$build$src$core$utils$dom||(NodeType$$module$build$src$core$utils$dom={}));\nvar cacheWidths$$module$build$src$core$utils$dom=null,cacheReference$$module$build$src$core$utils$dom=0,canvasContext$$module$build$src$core$utils$dom=null,module$build$src$core$utils$dom={HTML_NS:HTML_NS$$module$build$src$core$utils$dom};module$build$src$core$utils$dom.NodeType=NodeType$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.SVG_NS=SVG_NS$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.XLINK_NS=XLINK_NS$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.addClass=addClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.createSvgElement=createSvgElement$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getFastTextWidth=getFastTextWidth$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getFastTextWidthWithSizeString=getFastTextWidthWithSizeString$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.getTextWidth=getTextWidth$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.hasClass=hasClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.insertAfter=insertAfter$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.measureFontMetrics=measureFontMetrics$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeClass=removeClass$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeClasses=removeClasses$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.removeNode=removeNode$$module$build$src$core$utils$dom;\nmodule$build$src$core$utils$dom.setCssTransform=setCssTransform$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.startTextWidthCache=startTextWidthCache$$module$build$src$core$utils$dom;module$build$src$core$utils$dom.stopTextWidthCache=stopTextWidthCache$$module$build$src$core$utils$dom;var FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser=class{static findFocusedNode(a){var b=a.getRootFocusableNode();if(!b.canBeFocused())return null;var c=b.getFocusableElement();if(hasClass$$module$build$src$core$utils$dom(c,FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME)||hasClass$$module$build$src$core$utils$dom(c,FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME))return b;\nb=c.querySelector(this.ACTIVE_FOCUS_NODE_CSS_SELECTOR);if(b instanceof HTMLElement||b instanceof SVGElement)if(b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(b,a))return b;c=c.querySelector(this.PASSIVE_FOCUS_NODE_CSS_SELECTOR);if(c instanceof HTMLElement||c instanceof SVGElement)if(a=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(c,a))return a;return null}static findFocusableNodeFor(a,b){if(!a.id||\na.id===\"null\"||b.getNestedTrees().map(e=>FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(a,e)).findIndex(e=>!!e)!==-1)return null;var c=b.getRootFocusableNode();if(c.canBeFocused()&&a===c.getFocusableElement())return c;var d;if(c=(d=b.lookUpFocusableNode(a.id))!=null?d:null)return c;d=a.parentElement;return!c&&d?FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(d,b):null}};\nFocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME=\"blocklyActiveFocus\";FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME=\"blocklyPassiveFocus\";FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_FOCUS_NODE_CSS_SELECTOR=`.${FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.ACTIVE_CLASS_NAME}`;\nFocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_FOCUS_NODE_CSS_SELECTOR=`.${FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.PASSIVE_CSS_CLASS_NAME}`;var module$build$src$core$utils$focusable_tree_traverser={};module$build$src$core$utils$focusable_tree_traverser.FocusableTreeTraverser=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser;var TreeRegistration$$module$build$src$core$focus_manager=class{constructor(a,b){this.tree=a;this.rootShouldBeAutoTabbable=b}},FocusManager$$module$build$src$core$focus_manager=class{constructor(a){this.previouslyFocusedNode=this.focusedNode=null;this.registeredTrees=[];this.isUpdatingFocusedNode=this.recentlyLostAllFocus=this.lockFocusStateChanges=this.currentlyHoldsEphemeralFocus=!1;const b=c=>{if(!this.isUpdatingFocusedNode){this.recentlyLostAllFocus=!c;var d=null;if(c instanceof HTMLElement||\nc instanceof SVGElement)for(var e of this.registeredTrees)if(d=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(c,e.tree))break;if(d&&d.canBeFocused()){c=d.getFocusableTree();let f;e=(f=this.focusedNode)==null?void 0:f.getFocusableTree();d===c.getRootFocusableNode()&&c!==e?this.focusTree(c):this.focusNode(d)}else this.defocusCurrentFocusedNode()}};a(\"focusin\",c=>{c instanceof FocusEvent&&b(document.activeElement)});a(\"focusout\",c=>{c instanceof FocusEvent&&\nb(c.relatedTarget)})}registerTree(a,b=!1){this.ensureManagerIsUnlocked();if(this.isRegistered(a))throw Error(`Attempted to re-register already registered tree: ${a}.`);this.registeredTrees.push(new TreeRegistration$$module$build$src$core$focus_manager(a,b));const c=a.getRootFocusableNode().getFocusableElement();if(!c.id||c.id===\"null\")throw Error(\"Attempting to register a tree with a root element that has an \"+`invalid ID: ${a}.`);b&&(c.tabIndex=0)}isRegistered(a){return!!this.lookUpRegistration(a)}lookUpRegistration(a){let b;\nreturn(b=this.registeredTrees.find(c=>c.tree===a))!=null?b:null}unregisterTree(a){this.ensureManagerIsUnlocked();if(!this.isRegistered(a))throw Error(`Attempted to unregister not registered tree: ${a}.`);var b=this.registeredTrees.findIndex(e=>e.tree===a);const c=this.registeredTrees[b];this.registeredTrees.splice(b,1);b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(a);const d=a.getRootFocusableNode();b&&this.removeHighlight(b);this.focusedNode!==b&&\nthis.focusedNode!==d||this.updateFocusedNode(null);this.removeHighlight(d);c.rootShouldBeAutoTabbable&&a.getRootFocusableNode().getFocusableElement().removeAttribute(\"tabindex\")}getFocusedTree(){let a,b;return(b=(a=this.focusedNode)==null?void 0:a.getFocusableTree())!=null?b:null}getFocusedNode(){return this.focusedNode}focusTree(a){this.ensureManagerIsUnlocked();if(!this.isRegistered(a))throw Error(`Attempted to focus unregistered tree: ${a}.`);const b=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(a),\nc=a.getRestoredFocusableNode(b);a=a.getRootFocusableNode();let d;this.focusNode((d=c!=null?c:b)!=null?d:a)}focusNode(a){this.ensureManagerIsUnlocked();const b=!this.currentlyHoldsEphemeralFocus;b&&(this.isUpdatingFocusedNode=!0);var c,d=((c=this.focusedNode)==null?void 0:c.getFocusableElement())!==document.activeElement;if(this.focusedNode!==a||d)if(a.canBeFocused()){c=a.getFocusableTree();if(!this.isRegistered(c))throw Error(`Attempted to focus unregistered node: ${a}.`);d=a.getFocusableElement();\nd.id&&d.id!==\"null\"||console.warn(\"Trying to focus a node that has an invalid ID.\");var e=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusableNodeFor(d,c);d=FocusableTreeTraverser$$module$build$src$core$utils$focusable_tree_traverser.findFocusedNode(c);var f=a;if(e!==a){f=c.getRestoredFocusableNode(d);a=c.getRootFocusableNode();var g;f=(g=f!=null?f:d)!=null?g:a}a=this.focusedNode;g=a==null?void 0:a.getFocusableTree();a&&this.passivelyFocusNode(a,c);c=c.getRootFocusableNode();\nd&&this.removeHighlight(d);c!==f&&this.removeHighlight(c);this.currentlyHoldsEphemeralFocus||this.activelyFocusNode(f,g!=null?g:null);this.updateFocusedNode(f)}else console.warn(\"Trying to focus a node that can't be focused.\");b&&(this.isUpdatingFocusedNode=!1)}takeEphemeralFocus(a){this.ensureManagerIsUnlocked();if(this.currentlyHoldsEphemeralFocus)throw Error(\"Attempted to take ephemeral focus when it's already held, \"+`with new element: ${a}.`);this.currentlyHoldsEphemeralFocus=!0;this.focusedNode&&\nthis.passivelyFocusNode(this.focusedNode,null);a.focus({preventScroll:!0});let b=!1;return()=>{if(b)throw Error(\"Attempted to finish ephemeral focus twice for element: \"+`${a}.`);b=!0;this.currentlyHoldsEphemeralFocus=!1;if(this.focusedNode){this.activelyFocusNode(this.focusedNode,null);const c=this.focusedNode;setTimeout(()=>{!this.focusedNode&&this.previouslyFocusedNode===c&&this.recentlyLostAllFocus&&this.focusNode(c)},0)}}}ephemeralFocusTaken(){return this.currentlyHoldsEphemeralFocus}ensureManagerIsUnlocked(){if(this.lockFocusStateChanges)throw Error(\"FocusManager state changes cannot happen in a tree/node focus/blur callback.\");\n}updateFocusedNode(a){this.previouslyFocusedNode=this.focusedNode;this.focusedNode=a}defocusCurrentFocusedNode(){this.focusedNode&&!this.currentlyHoldsEphemeralFocus&&(this.passivelyFocusNode(this.focusedNode,null),this.updateFocusedNode(null))}activelyFocusNode(a,b){this.lockFocusStateChanges=!0;const c=a.getFocusableTree(),d=a.getFocusableElement();let e;const f=(e=this.lookUpRegistration(c))==null?void 0:e.rootShouldBeAutoTabbable;c!==b&&(c.onTreeFocus(a,b),f&&(c.getRootFocusableNode().getFocusableElement().tabIndex=\n-1));a.onNodeFocus();this.lockFocusStateChanges=!1;f&&a===c.getRootFocusableNode()||d.hasAttribute(\"tabindex\")||(d.tabIndex=-1);this.setNodeToVisualActiveFocus(a);d.focus({preventScroll:!0})}passivelyFocusNode(a,b){this.lockFocusStateChanges=!0;const c=a.getFocusableTree();if(c!==b){c.onTreeBlur(b);let d;if((d=this.lookUpRegistration(c))==null?0:d.rootShouldBeAutoTabbable)c.getRootFocusableNode().getFocusableElement().tabIndex=0}a.onNodeBlur();this.lockFocusStateChanges=!1;c!==b&&this.setNodeToVisualPassiveFocus(a)}setNodeToVisualActiveFocus(a){a=\na.getFocusableElement();addClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}setNodeToVisualPassiveFocus(a){a=a.getFocusableElement();removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);addClass$$module$build$src$core$utils$dom(a,\nFocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}removeHighlight(a){a=a.getFocusableElement();removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME);removeClass$$module$build$src$core$utils$dom(a,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME)}static getFocusManager(){FocusManager$$module$build$src$core$focus_manager.focusManager||(FocusManager$$module$build$src$core$focus_manager.focusManager=\nnew FocusManager$$module$build$src$core$focus_manager(document.addEventListener));return FocusManager$$module$build$src$core$focus_manager.focusManager}};FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME=\"blocklyActiveFocus\";FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME=\"blocklyPassiveFocus\";FocusManager$$module$build$src$core$focus_manager.focusManager=null;var module$build$src$core$focus_manager={};\nmodule$build$src$core$focus_manager.FocusManager=FocusManager$$module$build$src$core$focus_manager;module$build$src$core$focus_manager.getFocusManager=$.getFocusManager$$module$build$src$core$focus_manager;var module$build$src$core$interfaces$i_focusable_node={};module$build$src$core$interfaces$i_focusable_node.isFocusableNode=isFocusableNode$$module$build$src$core$interfaces$i_focusable_node;var module$build$src$core$interfaces$i_selectable={};module$build$src$core$interfaces$i_selectable.isSelectable=isSelectable$$module$build$src$core$interfaces$i_selectable;var module$build$src$core$utils$object={};module$build$src$core$utils$object.deepMerge=deepMerge$$module$build$src$core$utils$object;var ShortcutRegistry$$module$build$src$core$shortcut_registry=class{constructor(){this.shortcuts=new Map;this.keyMap=new Map;this.reset()}reset(){this.shortcuts.clear();this.keyMap.clear()}register(a,b){if(this.shortcuts.get(a.name)&&!b)throw Error(`Shortcut named \"${a.name}\" already exists.`);this.shortcuts.set(a.name,a);b=a.keyCodes;if(b==null?0:b.length)for(const c of b)this.addKeyMapping(c,a.name,!!a.allowCollision)}unregister(a){if(!this.shortcuts.get(a))return console.warn(`Keyboard shortcut named \"${a}\" not found.`),\n!1;this.removeAllKeyMappings(a);this.shortcuts.delete(a);return!0}addKeyMapping(a,b,c){a=`${a}`;const d=this.keyMap.get(a);if(d&&!c)throw Error(`Shortcut named \"${b}\" collides with shortcuts \"${d}\"`);d&&c?d.unshift(b):this.keyMap.set(a,[b])}removeKeyMapping(a,b,c){const d=this.keyMap.get(a);if(!d)return c||console.warn(`No keyboard shortcut named \"${b}\" registered with key code \"${a}\"`),!1;const e=d.indexOf(b);if(e>-1)return d.splice(e,1),d.length===0&&this.keyMap.delete(a),!0;c||console.warn(`No keyboard shortcut named \"${b}\" registered with key code \"${a}\"`);\nreturn!1}removeAllKeyMappings(a){for(const b of this.keyMap.keys())this.removeKeyMapping(b,a,!0)}setKeyMap(a){this.keyMap.clear();for(const b in a)this.keyMap.set(b,a[b])}getKeyMap(){const a=Object.create(null);for(const [b,c]of this.keyMap)a[b]=c;return a}getRegistry(){const a=Object.create(null);for(const [b,c]of this.shortcuts)a[b]=c;return deepMerge$$module$build$src$core$utils$object(Object.create(null),a)}onKeyDown(a,b){var c=this.serializeKeyEvent(b);c=this.getShortcutNamesByKeyCode(c);if(!c)return!1;\nfor(const d of c){c=this.shortcuts.get(d);let e;if(!c||c.preconditionFn&&!c.preconditionFn(a,{focusedNode:(e=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode())!=null?e:void 0}))continue;let f,g,h;if((g=(f=c).callback)==null?0:g.call(f,a,b,c,{focusedNode:(h=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode())!=null?h:void 0}))return!0}return!1}getShortcutNamesByKeyCode(a){let b;return((b=this.keyMap.get(a))==null?void 0:b.slice())||[]}getKeyCodesByShortcutName(a){const b=\n[];for(const [c,d]of this.keyMap)d.indexOf(a)>-1&&b.push(c);return b}serializeKeyEvent(a){let b=\"\";for(const c in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys)a.getModifierState(c)&&(b!==\"\"&&(b+=\"+\"),b+=c);b!==\"\"&&a.keyCode?b+=\"+\"+a.keyCode:a.keyCode&&(b=String(a.keyCode));return b}checkModifiers(a){for(const b of a)if(!(b in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys))throw Error(b+\" is not a valid modifier key.\");}createSerializedKey(a,b){let c=\n\"\";if(b){this.checkModifiers(b);for(const d in ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys)b.includes(ShortcutRegistry$$module$build$src$core$shortcut_registry.modifierKeys[d])&&(c!==\"\"&&(c+=\"+\"),c+=d)}c!==\"\"&&a?c+=\"+\"+a:a&&(c=`${a}`);return c}};ShortcutRegistry$$module$build$src$core$shortcut_registry.registry=new ShortcutRegistry$$module$build$src$core$shortcut_registry;\n(function(a){a=a.modifierKeys||(a.modifierKeys={});a[a.Shift=16]=\"Shift\";a[a.Control=17]=\"Control\";a[a.Alt=18]=\"Alt\";a[a.Meta=91]=\"Meta\"})(ShortcutRegistry$$module$build$src$core$shortcut_registry||(ShortcutRegistry$$module$build$src$core$shortcut_registry={}));var module$build$src$core$shortcut_registry={};module$build$src$core$shortcut_registry.ShortcutRegistry=ShortcutRegistry$$module$build$src$core$shortcut_registry;var WorkspaceDB_$$module$build$src$core$common=Object.create(null),mainWorkspace$$module$build$src$core$common,parentContainer$$module$build$src$core$common,draggingConnections$$module$build$src$core$common=[],TEST_ONLY$$module$build$src$core$common={defineBlocksWithJsonArrayInternal:defineBlocksWithJsonArrayInternal$$module$build$src$core$common},module$build$src$core$common={TEST_ONLY:TEST_ONLY$$module$build$src$core$common};module$build$src$core$common.createBlockDefinitionsFromJsonArray=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common;\nmodule$build$src$core$common.defineBlocks=$.defineBlocks$$module$build$src$core$common;module$build$src$core$common.defineBlocksWithJsonArray=defineBlocksWithJsonArray$$module$build$src$core$common;module$build$src$core$common.draggingConnections=draggingConnections$$module$build$src$core$common;module$build$src$core$common.fireSelectedEvent=fireSelectedEvent$$module$build$src$core$common;module$build$src$core$common.getAllWorkspaces=getAllWorkspaces$$module$build$src$core$common;\nmodule$build$src$core$common.getBlockTypeCounts=getBlockTypeCounts$$module$build$src$core$common;module$build$src$core$common.getMainWorkspace=getMainWorkspace$$module$build$src$core$common;module$build$src$core$common.getParentContainer=getParentContainer$$module$build$src$core$common;module$build$src$core$common.getSelected=getSelected$$module$build$src$core$common;module$build$src$core$common.getWorkspaceById=getWorkspaceById$$module$build$src$core$common;\nmodule$build$src$core$common.globalShortcutHandler=globalShortcutHandler$$module$build$src$core$common;module$build$src$core$common.registerWorkspace=registerWorkspace$$module$build$src$core$common;module$build$src$core$common.setMainWorkspace=setMainWorkspace$$module$build$src$core$common;module$build$src$core$common.setParentContainer=setParentContainer$$module$build$src$core$common;module$build$src$core$common.setSelected=setSelected$$module$build$src$core$common;\nmodule$build$src$core$common.svgResize=svgResize$$module$build$src$core$common;module$build$src$core$common.unregisterWorkpace=unregisterWorkpace$$module$build$src$core$common;var Abstract$$module$build$src$core$events$events_abstract=class{constructor(){this.workspaceId=void 0;this.isUiEvent=!1;this.type=\"\";this.group=$.getGroup$$module$build$src$core$events$utils();this.recordUndo=getRecordUndo$$module$build$src$core$events$utils()}toJson(){return{type:this.type,group:this.group}}static fromJson(a,b,c){c.isBlank=!1;c.group=a.group||\"\";c.workspaceId=b.id;return c}isNull(){return!1}run(a){}getEventWorkspace_(){let a;this.workspaceId&&(a=getWorkspaceById$$module$build$src$core$common(this.workspaceId));\nif(!a)throw Error(\"Workspace is null. Event must have been generated from real Blockly events.\");return a}},module$build$src$core$events$events_abstract={};module$build$src$core$events$events_abstract.Abstract=Abstract$$module$build$src$core$events$events_abstract;var UiBase$$module$build$src$core$events$events_ui_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.recordUndo=!1;this.isUiEvent=!0;this.isBlank=typeof a===\"undefined\";this.workspaceId=a?a:\"\"}},module$build$src$core$events$events_ui_base={};module$build$src$core$events$events_ui_base.UiBase=UiBase$$module$build$src$core$events$events_ui_base;var Click$$module$build$src$core$events$events_click=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b,c){b=a?a.workspace.id:b;b===null&&(b=void 0);super(b);this.type=EventType$$module$build$src$core$events$type.CLICK;this.blockId=a?a.id:void 0;this.targetType=c}toJson(){const a=super.toJson();if(!this.targetType)throw Error(\"The click target type is undefined. Either pass a block to the constructor, or call fromJson\");a.targetType=this.targetType;a.blockId=this.blockId;\nreturn a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new Click$$module$build$src$core$events$events_click);b.targetType=a.targetType;b.blockId=a.blockId;return b}},ClickTarget$$module$build$src$core$events$events_click;(function(a){a.BLOCK=\"block\";a.WORKSPACE=\"workspace\";a.ZOOM_CONTROLS=\"zoom_controls\"})(ClickTarget$$module$build$src$core$events$events_click||(ClickTarget$$module$build$src$core$events$events_click={}));\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.CLICK,Click$$module$build$src$core$events$events_click);var module$build$src$core$events$events_click={};module$build$src$core$events$events_click.Click=Click$$module$build$src$core$events$events_click;module$build$src$core$events$events_click.ClickTarget=ClickTarget$$module$build$src$core$events$events_click;var module$build$src$core$utils$array={};module$build$src$core$utils$array.removeElem=removeElem$$module$build$src$core$utils$array;var Capability$$module$build$src$core$component_manager=class{constructor(a){this.name=a}toString(){return this.name}};Capability$$module$build$src$core$component_manager.POSITIONABLE=new Capability$$module$build$src$core$component_manager(\"positionable\");Capability$$module$build$src$core$component_manager.DRAG_TARGET=new Capability$$module$build$src$core$component_manager(\"drag_target\");Capability$$module$build$src$core$component_manager.DELETE_AREA=new Capability$$module$build$src$core$component_manager(\"delete_area\");\nCapability$$module$build$src$core$component_manager.AUTOHIDEABLE=new Capability$$module$build$src$core$component_manager(\"autohideable\");\nvar ComponentManager$$module$build$src$core$component_manager=class{constructor(){this.componentData=new Map;this.capabilityToComponentIds=new Map}addComponent(a,b){const c=a.component.id;if(!b&&this.componentData.has(c)){var d;throw Error('Plugin \"'+c+'\" with capabilities \"'+((d=this.componentData.get(c))==null?void 0:d.capabilities)+'\" already added.');}this.componentData.set(c,a);b=[];for(d=0;d\n{d.push(this.componentData.get(e))});d.sort(function(e,f){return e.weight-f.weight});d.forEach(function(e){c.push(e.component)})}else a.forEach(d=>{c.push(this.componentData.get(d).component)});return c}};ComponentManager$$module$build$src$core$component_manager.Capability=Capability$$module$build$src$core$component_manager;\n(function(a){a=a.ComponentWeight||(a.ComponentWeight={});a[a.TOOLBOX_WEIGHT=0]=\"TOOLBOX_WEIGHT\";a[a.FLYOUT_WEIGHT=1]=\"FLYOUT_WEIGHT\";a[a.TRASHCAN_WEIGHT=2]=\"TRASHCAN_WEIGHT\";a[a.ZOOM_CONTROLS_WEIGHT=3]=\"ZOOM_CONTROLS_WEIGHT\"})(ComponentManager$$module$build$src$core$component_manager||(ComponentManager$$module$build$src$core$component_manager={}));\nvar ComponentWeight$$module$build$src$core$component_manager=ComponentManager$$module$build$src$core$component_manager.ComponentWeight,module$build$src$core$component_manager={};module$build$src$core$component_manager.ComponentManager=ComponentManager$$module$build$src$core$component_manager;module$build$src$core$component_manager.ComponentWeight=ComponentWeight$$module$build$src$core$component_manager;var injected$$module$build$src$core$css=!1,content$$module$build$src$core$css='\\n.blocklySvg {\\n background-color: #fff;\\n outline: none;\\n overflow: hidden; /* IE overflows by default. */\\n position: absolute;\\n display: block;\\n}\\n\\n.blocklyWidgetDiv {\\n display: none;\\n position: absolute;\\n z-index: 99999; /* big value for bootstrap3 compatibility */\\n}\\n\\n.injectionDiv {\\n height: 100%;\\n position: relative;\\n overflow: hidden; /* So blocks in drag surface disappear at edges */\\n touch-action: none;\\n user-select: none;\\n -webkit-user-select: none;\\n}\\n\\n.blocklyBlockCanvas.blocklyCanvasTransitioning,\\n.blocklyBubbleCanvas.blocklyCanvasTransitioning {\\n transition: transform .5s;\\n}\\n\\n.blocklyEmboss {\\n filter: var(--blocklyEmbossFilter);\\n}\\n\\n.blocklyTooltipDiv {\\n background-color: #ffffc7;\\n border: 1px solid #ddc;\\n box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15);\\n color: #000;\\n display: none;\\n font: 9pt sans-serif;\\n opacity: .9;\\n padding: 2px;\\n position: absolute;\\n z-index: 100000; /* big value for bootstrap3 compatibility */\\n}\\n\\n.blocklyDropDownDiv {\\n position: absolute;\\n left: 0;\\n top: 0;\\n z-index: 1000;\\n display: none;\\n border: 1px solid;\\n border-color: #dadce0;\\n background-color: #fff;\\n border-radius: 2px;\\n padding: 4px;\\n box-shadow: 0 0 3px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownDiv:focus {\\n box-shadow: 0 0 6px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownContent {\\n max-height: 300px; /* @todo: spec for maximum height. */\\n}\\n\\n.blocklyDropDownArrow {\\n position: absolute;\\n left: 0;\\n top: 0;\\n width: 16px;\\n height: 16px;\\n z-index: -1;\\n background-color: inherit;\\n border-color: inherit;\\n border-top: 1px solid;\\n border-left: 1px solid;\\n border-top-left-radius: 4px;\\n border-color: inherit;\\n}\\n\\n.blocklyHighlighted>.blocklyPath {\\n filter: var(--blocklyEmbossFilter);\\n}\\n\\n.blocklyHighlightedConnectionPath {\\n fill: none;\\n stroke: #fc3;\\n stroke-width: 4px;\\n}\\n\\n.blocklyPathLight {\\n fill: none;\\n stroke-linecap: round;\\n stroke-width: 1;\\n}\\n\\n.blocklySelected>.blocklyPathLight {\\n display: none;\\n}\\n\\n.blocklyDraggable {\\n cursor: grab;\\n cursor: -webkit-grab;\\n}\\n\\n.blocklyDragging {\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n /* Drag surface disables events to not block the toolbox, so we have to\\n * reenable them here for the cursor values to work. */\\n pointer-events: auto;\\n}\\n\\n /* Changes cursor on mouse down. Not effective in Firefox because of\\n https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */\\n.blocklyDraggable:active {\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n}\\n\\n.blocklyDragging.blocklyDraggingDelete,\\n.blocklyDragging.blocklyDraggingDelete .blocklyField {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyDragging>.blocklyPath,\\n.blocklyDragging>.blocklyPathLight {\\n fill-opacity: .8;\\n stroke-opacity: .8;\\n}\\n\\n.blocklyDragging>.blocklyPathDark {\\n display: none;\\n}\\n\\n.blocklyDisabledPattern>.blocklyPath {\\n fill: var(--blocklyDisabledPattern);\\n fill-opacity: .5;\\n stroke-opacity: .5;\\n}\\n\\n.blocklyDisabled>.blocklyPathLight,\\n.blocklyDisabled>.blocklyPathDark {\\n display: none;\\n}\\n\\n.blocklyInsertionMarker>.blocklyPath,\\n.blocklyInsertionMarker>.blocklyPathLight,\\n.blocklyInsertionMarker>.blocklyPathDark {\\n fill-opacity: .2;\\n stroke: none;\\n}\\n\\n.blocklyNonEditableField>text {\\n pointer-events: none;\\n}\\n\\n.blocklyFlyout {\\n position: absolute;\\n z-index: 20;\\n}\\n\\n.blocklyText text {\\n cursor: default;\\n}\\n\\n/*\\n Don\\'t allow users to select text. It gets annoying when trying to\\n drag a block and selected text moves instead.\\n*/\\n.blocklySvg text {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n cursor: inherit;\\n}\\n\\n.blocklyIconGroup {\\n cursor: default;\\n}\\n\\n.blocklyIconGroup:not(:hover):not(:focus),\\n.blocklyIconGroupReadonly {\\n opacity: .6;\\n}\\n\\n.blocklyIconShape {\\n fill: #00f;\\n stroke: #fff;\\n stroke-width: 1px;\\n}\\n\\n.blocklyIconSymbol {\\n fill: #fff;\\n}\\n\\n.blocklyMinimalBody {\\n margin: 0;\\n padding: 0;\\n height: 100%;\\n}\\n\\n.blocklyHtmlInput {\\n border: none;\\n border-radius: 4px;\\n height: 100%;\\n margin: 0;\\n outline: none;\\n padding: 0;\\n width: 100%;\\n text-align: center;\\n display: block;\\n box-sizing: border-box;\\n}\\n\\n/* Remove the increase and decrease arrows on the field number editor */\\ninput.blocklyHtmlInput[type=number]::-webkit-inner-spin-button,\\ninput.blocklyHtmlInput[type=number]::-webkit-outer-spin-button {\\n -webkit-appearance: none;\\n margin: 0;\\n}\\n\\ninput[type=number] {\\n -moz-appearance: textfield;\\n}\\n\\n.blocklyMainBackground {\\n stroke-width: 1;\\n stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */\\n}\\n\\n.blocklyMutatorBackground {\\n fill: #fff;\\n stroke: #ddd;\\n stroke-width: 1;\\n}\\n\\n.blocklyFlyoutBackground {\\n fill: #ddd;\\n fill-opacity: .8;\\n}\\n\\n.blocklyMainWorkspaceScrollbar {\\n z-index: 20;\\n}\\n\\n.blocklyFlyoutScrollbar {\\n z-index: 30;\\n}\\n\\n.blocklyScrollbarHorizontal,\\n.blocklyScrollbarVertical {\\n position: absolute;\\n outline: none;\\n}\\n\\n.blocklyScrollbarBackground {\\n opacity: 0;\\n pointer-events: none;\\n}\\n\\n.blocklyScrollbarHandle {\\n fill: #ccc;\\n}\\n\\n.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,\\n.blocklyScrollbarHandle:hover {\\n fill: #bbb;\\n}\\n\\n/* Darken flyout scrollbars due to being on a grey background. */\\n/* By contrast, workspace scrollbars are on a white background. */\\n.blocklyFlyout .blocklyScrollbarHandle {\\n fill: #bbb;\\n}\\n\\n.blocklyFlyout .blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,\\n.blocklyFlyout .blocklyScrollbarHandle:hover {\\n fill: #aaa;\\n}\\n\\n.blocklyInvalidInput {\\n background: #faa;\\n}\\n\\n.blocklyVerticalMarker {\\n stroke-width: 3px;\\n fill: rgba(255,255,255,.5);\\n pointer-events: none;\\n}\\n\\n.blocklyComputeCanvas {\\n position: absolute;\\n width: 0;\\n height: 0;\\n}\\n\\n.blocklyNoPointerEvents {\\n pointer-events: none;\\n}\\n\\n.blocklyContextMenu {\\n border-radius: 4px;\\n max-height: 100%;\\n}\\n\\n.blocklyDropdownMenu {\\n border-radius: 2px;\\n padding: 0 !important;\\n}\\n\\n.blocklyDropdownMenu .blocklyMenuItem {\\n /* 28px on the left for icon or checkbox. */\\n padding-left: 28px;\\n}\\n\\n/* BiDi override for the resting state. */\\n.blocklyDropdownMenu .blocklyMenuItemRtl {\\n /* Flip left/right padding for BiDi. */\\n padding-left: 5px;\\n padding-right: 28px;\\n}\\n\\n.blocklyWidgetDiv .blocklyMenu {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background: #fff;\\n border: 1px solid transparent;\\n box-shadow: 0 0 3px 1px rgba(0,0,0,.3);\\n font: normal 13px Arial, sans-serif;\\n margin: 0;\\n outline: none;\\n padding: 4px 0;\\n position: absolute;\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 100%;\\n z-index: 20000; /* Arbitrary, but some apps depend on it... */\\n}\\n\\n.blocklyWidgetDiv .blocklyMenu:focus {\\n box-shadow: 0 0 6px 1px rgba(0,0,0,.3);\\n}\\n\\n.blocklyDropDownDiv .blocklyMenu {\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background: inherit; /* Compatibility with gapi, reset from goog-menu */\\n border: inherit; /* Compatibility with gapi, reset from goog-menu */\\n font: normal 13px \"Helvetica Neue\", Helvetica, sans-serif;\\n outline: none;\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 100%;\\n z-index: 20000; /* Arbitrary, but some apps depend on it... */\\n}\\n\\n/* State: resting. */\\n.blocklyMenuItem {\\n border: none;\\n color: #000;\\n cursor: pointer;\\n list-style: none;\\n margin: 0;\\n /* 7em on the right for shortcut. */\\n min-width: 7em;\\n padding: 6px 15px;\\n white-space: nowrap;\\n}\\n\\n/* State: disabled. */\\n.blocklyMenuItemDisabled {\\n color: #ccc;\\n cursor: inherit;\\n}\\n\\n/* State: hover. */\\n.blocklyMenuItemHighlight {\\n background-color: rgba(0,0,0,.1);\\n}\\n\\n/* State: selected/checked. */\\n.blocklyMenuItemCheckbox {\\n height: 16px;\\n position: absolute;\\n width: 16px;\\n}\\n\\n.blocklyMenuItemSelected .blocklyMenuItemCheckbox {\\n background: url(<<>>/sprites.png) no-repeat -48px -16px;\\n float: left;\\n margin-left: -24px;\\n position: static; /* Scroll with the menu. */\\n}\\n\\n.blocklyMenuItemRtl .blocklyMenuItemCheckbox {\\n float: right;\\n margin-right: -24px;\\n}\\n\\n.blocklyMenuSeparator {\\n background-color: #ccc;\\n height: 1px;\\n border: 0;\\n margin-left: 4px;\\n margin-right: 4px;\\n}\\n\\n.blocklyBlockDragSurface, .blocklyAnimationLayer {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n overflow: visible !important;\\n z-index: 80;\\n pointer-events: none;\\n}\\n\\n.blocklyField {\\n cursor: default;\\n}\\n\\n.blocklyInputField {\\n cursor: text;\\n}\\n\\n.blocklyDragging .blocklyField,\\n.blocklyDragging .blocklyIconGroup {\\n cursor: grabbing;\\n}\\n\\n.blocklyActiveFocus:is(\\n .blocklyFlyout,\\n .blocklyWorkspace,\\n .blocklyField,\\n .blocklyPath,\\n .blocklyHighlightedConnectionPath,\\n .blocklyComment,\\n .blocklyBubble,\\n .blocklyIconGroup,\\n .blocklyTextarea\\n) {\\n outline: none;\\n}\\n',\nmodule$build$src$core$css={};module$build$src$core$css.inject=inject$$module$build$src$core$css;module$build$src$core$css.register=register$$module$build$src$core$css;var Coordinate$$module$build$src$core$utils$coordinate=class{constructor(a,b){this.x=a;this.y=b}clone(){return new Coordinate$$module$build$src$core$utils$coordinate(this.x,this.y)}scale(a){this.x*=a;this.y*=a;return this}translate(a,b){this.x+=a;this.y+=b;return this}static equals(a,b){return a===b?!0:a&&b?a.x===b.x&&a.y===b.y:!1}static distance(a,b){const c=a.x-b.x;a=a.y-b.y;return Math.sqrt(c*c+a*a)}static magnitude(a){return Math.sqrt(a.x*a.x+a.y*a.y)}static difference(a,b){return new Coordinate$$module$build$src$core$utils$coordinate(a.x-\nb.x,a.y-b.y)}static sum(a,b){return new Coordinate$$module$build$src$core$utils$coordinate(a.x+b.x,a.y+b.y)}},module$build$src$core$utils$coordinate={};module$build$src$core$utils$coordinate.Coordinate=Coordinate$$module$build$src$core$utils$coordinate;var Svg$$module$build$src$core$utils$svg=class{constructor(a){this.tagName=a}toString(){return this.tagName}};Svg$$module$build$src$core$utils$svg.ANIMATE=new Svg$$module$build$src$core$utils$svg(\"animate\");Svg$$module$build$src$core$utils$svg.CIRCLE=new Svg$$module$build$src$core$utils$svg(\"circle\");Svg$$module$build$src$core$utils$svg.CLIPPATH=new Svg$$module$build$src$core$utils$svg(\"clipPath\");Svg$$module$build$src$core$utils$svg.DEFS=new Svg$$module$build$src$core$utils$svg(\"defs\");\nSvg$$module$build$src$core$utils$svg.FECOMPOSITE=new Svg$$module$build$src$core$utils$svg(\"feComposite\");Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER=new Svg$$module$build$src$core$utils$svg(\"feComponentTransfer\");Svg$$module$build$src$core$utils$svg.FEFLOOD=new Svg$$module$build$src$core$utils$svg(\"feFlood\");Svg$$module$build$src$core$utils$svg.FEFUNCA=new Svg$$module$build$src$core$utils$svg(\"feFuncA\");Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR=new Svg$$module$build$src$core$utils$svg(\"feGaussianBlur\");\nSvg$$module$build$src$core$utils$svg.FEPOINTLIGHT=new Svg$$module$build$src$core$utils$svg(\"fePointLight\");Svg$$module$build$src$core$utils$svg.FESPECULARLIGHTING=new Svg$$module$build$src$core$utils$svg(\"feSpecularLighting\");Svg$$module$build$src$core$utils$svg.FILTER=new Svg$$module$build$src$core$utils$svg(\"filter\");Svg$$module$build$src$core$utils$svg.FOREIGNOBJECT=new Svg$$module$build$src$core$utils$svg(\"foreignObject\");Svg$$module$build$src$core$utils$svg.G=new Svg$$module$build$src$core$utils$svg(\"g\");\nSvg$$module$build$src$core$utils$svg.IMAGE=new Svg$$module$build$src$core$utils$svg(\"image\");Svg$$module$build$src$core$utils$svg.LINE=new Svg$$module$build$src$core$utils$svg(\"line\");Svg$$module$build$src$core$utils$svg.PATH=new Svg$$module$build$src$core$utils$svg(\"path\");Svg$$module$build$src$core$utils$svg.PATTERN=new Svg$$module$build$src$core$utils$svg(\"pattern\");Svg$$module$build$src$core$utils$svg.POLYGON=new Svg$$module$build$src$core$utils$svg(\"polygon\");\nSvg$$module$build$src$core$utils$svg.RECT=new Svg$$module$build$src$core$utils$svg(\"rect\");Svg$$module$build$src$core$utils$svg.SVG=new Svg$$module$build$src$core$utils$svg(\"svg\");Svg$$module$build$src$core$utils$svg.TEXT=new Svg$$module$build$src$core$utils$svg(\"text\");Svg$$module$build$src$core$utils$svg.TSPAN=new Svg$$module$build$src$core$utils$svg(\"tspan\");var module$build$src$core$utils$svg={};module$build$src$core$utils$svg.Svg=Svg$$module$build$src$core$utils$svg;var Rect$$module$build$src$core$utils$rect=class{constructor(a,b,c,d){this.top=a;this.bottom=b;this.left=c;this.right=d}static from(a){return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}clone(){return new Rect$$module$build$src$core$utils$rect(this.top,this.bottom,this.left,this.right)}getHeight(){return this.bottom-this.top}getWidth(){return this.right-this.left}getOrigin(){return new Coordinate$$module$build$src$core$utils$coordinate(this.left,this.top)}contains(a,\nb){return a>=this.left&&a<=this.right&&b>=this.top&&b<=this.bottom}intersects(a){return this.left<=a.right&&this.right>=a.left&&this.bottom>=a.top&&this.top<=a.bottom}static equals(a,b){return a===b?!0:a&&b?a.top===b.top&&a.bottom===b.bottom&&a.left===b.left&&a.right===b.right:!1}static createFromPoint(a,b,c){const d=a.x;a=a.y;return new Rect$$module$build$src$core$utils$rect(a,a+c,d,d+b)}},module$build$src$core$utils$rect={};module$build$src$core$utils$rect.Rect=Rect$$module$build$src$core$utils$rect;var Size$$module$build$src$core$utils$size=class{constructor(a,b){this.width=a;this.height=b}static equals(a,b){return a===b?!0:a&&b?a.width===b.width&&a.height===b.height:!1}static max(a,b){return new Size$$module$build$src$core$utils$size(Math.max(a.width,b.width),Math.max(a.height,b.height))}static min(a,b){return new Size$$module$build$src$core$utils$size(Math.min(a.width,b.width),Math.min(a.height,b.height))}},module$build$src$core$utils$size={};module$build$src$core$utils$size.Size=Size$$module$build$src$core$utils$size;var TEST_ONLY$$module$build$src$core$utils$style={getSizeInternal:getSizeInternal$$module$build$src$core$utils$style},module$build$src$core$utils$style={TEST_ONLY:TEST_ONLY$$module$build$src$core$utils$style};module$build$src$core$utils$style.getBorderBox=getBorderBox$$module$build$src$core$utils$style;module$build$src$core$utils$style.getComputedStyle=getComputedStyle$$module$build$src$core$utils$style;module$build$src$core$utils$style.getContainerOffsetToScrollInto=getContainerOffsetToScrollInto$$module$build$src$core$utils$style;\nmodule$build$src$core$utils$style.getPageOffset=getPageOffset$$module$build$src$core$utils$style;module$build$src$core$utils$style.getSize=getSize$$module$build$src$core$utils$style;module$build$src$core$utils$style.getViewportPageOffset=getViewportPageOffset$$module$build$src$core$utils$style;module$build$src$core$utils$style.scrollIntoContainerView=scrollIntoContainerView$$module$build$src$core$utils$style;var XY_REGEX$$module$build$src$core$utils$svg_math=/translate\\(\\s*([-+\\d.e]+)([ ,]\\s*([-+\\d.e]+)\\s*)?/,XY_STYLE_REGEX$$module$build$src$core$utils$svg_math=/transform:\\s*translate(?:3d)?\\(\\s*([-+\\d.e]+)\\s*px([ ,]\\s*([-+\\d.e]+)\\s*px)?/,TEST_ONLY$$module$build$src$core$utils$svg_math={XY_REGEX:XY_REGEX$$module$build$src$core$utils$svg_math,XY_STYLE_REGEX:XY_STYLE_REGEX$$module$build$src$core$utils$svg_math},module$build$src$core$utils$svg_math={TEST_ONLY:TEST_ONLY$$module$build$src$core$utils$svg_math};\nmodule$build$src$core$utils$svg_math.getDocumentScroll=getDocumentScroll$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getInjectionDivXY=getInjectionDivXY$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getRelativeXY=getRelativeXY$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.getViewportBBox=getViewportBBox$$module$build$src$core$utils$svg_math;module$build$src$core$utils$svg_math.screenToWsCoordinates=screenToWsCoordinates$$module$build$src$core$utils$svg_math;\nmodule$build$src$core$utils$svg_math.wsToScreenCoordinates=wsToScreenCoordinates$$module$build$src$core$utils$svg_math;var Scrollbar$$module$build$src$core$scrollbar=class{constructor(a,b,c,d,e){this.workspace=a;this.horizontal=b;this.oldHostMetrics=null;this.ratio=1;this.origin=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.startDragHandle=this.handlePosition=this.handleLength=this.scrollbarLength=this.startDragMouse=0;this.containerVisible=this.isHandleVisible=!0;this.position=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.onMouseMoveWrapper_=this.onMouseUpWrapper_=null;this.pair=\nc||!1;this.margin=e!==void 0?e:Scrollbar$$module$build$src$core$scrollbar.DEFAULT_SCROLLBAR_MARGIN;a=\"blocklyScrollbar\"+(this.horizontal?\"Horizontal\":\"Vertical\");d&&(a+=\" \"+d);this.outerSvg=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{\"class\":a});d=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},this.outerSvg);this.svgBackground=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{\"class\":\"blocklyScrollbarBackground\"},d);a=Math.floor((Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-5)/2);this.svgHandle=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyScrollbarHandle\",rx:a,ry:a},d);this.workspace.getThemeManager().subscribe(this.svgHandle,\"scrollbarColour\",\"fill\");this.workspace.getThemeManager().subscribe(this.svgHandle,\"scrollbarOpacity\",\"fill-opacity\");insertAfter$$module$build$src$core$utils$dom(this.outerSvg,\nthis.workspace.getParentSvg());this.setInitialThickness();b?(this.lengthAttribute_=\"width\",this.positionAttribute_=\"x\"):(this.lengthAttribute_=\"height\",this.positionAttribute_=\"y\");this.onMouseDownBarWrapper_=conditionalBind$$module$build$src$core$browser_events(this.svgBackground,\"pointerdown\",this,this.onMouseDownBar);this.onMouseDownHandleWrapper_=conditionalBind$$module$build$src$core$browser_events(this.svgHandle,\"pointerdown\",this,this.onMouseDownHandle)}setInitialThickness(){const a=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;\nthis.horizontal?(this.svgBackground.setAttribute(\"height\",String(a)),this.outerSvg.setAttribute(\"height\",String(a)),this.svgHandle.setAttribute(\"height\",String(a-5)),this.svgHandle.setAttribute(\"y\",\"2.5\")):(this.svgBackground.setAttribute(\"width\",String(a)),this.outerSvg.setAttribute(\"width\",String(a)),this.svgHandle.setAttribute(\"width\",String(a-5)),this.svgHandle.setAttribute(\"x\",\"2.5\"))}dispose(){this.cleanUp();unbind$$module$build$src$core$browser_events(this.onMouseDownBarWrapper_);unbind$$module$build$src$core$browser_events(this.onMouseDownHandleWrapper_);\nremoveNode$$module$build$src$core$utils$dom(this.outerSvg);this.workspace.getThemeManager().unsubscribe(this.svgHandle)}constrainHandleLength(a){return a=a<=0||isNaN(a)?0:Math.min(a,this.scrollbarLength)}setHandleLength(a){this.handleLength=a;this.svgHandle.setAttribute(this.lengthAttribute_,String(this.handleLength))}constrainHandlePosition(a){return a=a<=0||isNaN(a)?0:Math.min(a,this.scrollbarLength-this.handleLength)}setHandlePosition(a){this.handlePosition=a;this.svgHandle.setAttribute(this.positionAttribute_,\nString(this.handlePosition))}setScrollbarLength(a){this.scrollbarLength=a;this.outerSvg.setAttribute(this.lengthAttribute_,String(this.scrollbarLength));this.svgBackground.setAttribute(this.lengthAttribute_,String(this.scrollbarLength))}setPosition(a,b){this.position.x=a;this.position.y=b;setCssTransform$$module$build$src$core$utils$dom(this.outerSvg,\"translate(\"+(this.position.x+this.origin.x)+\"px,\"+(this.position.y+this.origin.y)+\"px)\")}resize(a){if(!a&&(a=this.workspace.getMetrics(),!a))return;\nthis.oldHostMetrics&&Scrollbar$$module$build$src$core$scrollbar.metricsAreEquivalent(a,this.oldHostMetrics)||(this.horizontal?this.resizeHorizontal(a):this.resizeVertical(a),this.oldHostMetrics=a,this.updateMetrics())}requiresViewResize(a){return this.oldHostMetrics?this.oldHostMetrics.viewWidth!==a.viewWidth||this.oldHostMetrics.viewHeight!==a.viewHeight||this.oldHostMetrics.absoluteLeft!==a.absoluteLeft||this.oldHostMetrics.absoluteTop!==a.absoluteTop:!0}resizeHorizontal(a){this.requiresViewResize(a)?\nthis.resizeViewHorizontal(a):this.resizeContentHorizontal(a)}resizeViewHorizontal(a){var b=a.viewWidth-this.margin*2;this.pair&&(b-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setScrollbarLength(Math.max(0,b));b=a.absoluteLeft+this.margin;this.pair&&this.workspace.RTL&&(b+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setPosition(b,a.absoluteTop+a.viewHeight-Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-this.margin);this.resizeContentHorizontal(a)}resizeContentHorizontal(a){if(a.viewWidth>=\na.scrollWidth)this.setHandleLength(this.scrollbarLength),this.setHandlePosition(0),this.pair||this.setVisible(!1);else{this.pair||this.setVisible(!0);var b=this.scrollbarLength*a.viewWidth/a.scrollWidth;b=this.constrainHandleLength(b);this.setHandleLength(b);b=a.scrollWidth-a.viewWidth;var c=this.scrollbarLength-this.handleLength;a=(a.viewLeft-a.scrollLeft)/b*c;a=this.constrainHandlePosition(a);this.setHandlePosition(a);this.ratio=c/b}}resizeVertical(a){this.requiresViewResize(a)?this.resizeViewVertical(a):\nthis.resizeContentVertical(a)}resizeViewVertical(a){let b=a.viewHeight-this.margin*2;this.pair&&(b-=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness);this.setScrollbarLength(Math.max(0,b));this.setPosition(this.workspace.RTL?a.absoluteLeft+this.margin:a.absoluteLeft+a.viewWidth-Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness-this.margin,a.absoluteTop+this.margin);this.resizeContentVertical(a)}resizeContentVertical(a){if(a.viewHeight>=a.scrollHeight)this.setHandleLength(this.scrollbarLength),\nthis.setHandlePosition(0),this.pair||this.setVisible(!1);else{this.pair||this.setVisible(!0);var b=this.scrollbarLength*a.viewHeight/a.scrollHeight;b=this.constrainHandleLength(b);this.setHandleLength(b);b=a.scrollHeight-a.viewHeight;var c=this.scrollbarLength-this.handleLength;a=(a.viewTop-a.scrollTop)/b*c;a=this.constrainHandlePosition(a);this.setHandlePosition(a);this.ratio=c/b}}isVisible(){return this.isHandleVisible}setContainerVisible(a){const b=a!==this.containerVisible;this.containerVisible=\na;b&&this.updateDisplay_()}setVisible(a){if(this.pair)throw Error(\"Unable to toggle visibility of paired scrollbars.\");this.setVisibleInternal(a)}setVisibleInternal(a){const b=a!==this.isVisible();this.isHandleVisible=a;b&&this.updateDisplay_()}updateDisplay_(){this.containerVisible&&this.isVisible()?this.outerSvg.setAttribute(\"display\",\"block\"):this.outerSvg.setAttribute(\"display\",\"none\")}onMouseDownBar(a){this.workspace.markFocused();clearTouchIdentifier$$module$build$src$core$touch();this.cleanUp();\nif(isRightButton$$module$build$src$core$browser_events(a))a.stopPropagation();else{var b=mouseToSvg$$module$build$src$core$browser_events(a,this.workspace.getParentSvg(),this.workspace.getInverseScreenCTM());b=this.horizontal?b.x:b.y;var c=getInjectionDivXY$$module$build$src$core$utils$svg_math(this.svgHandle);c=this.horizontal?c.x:c.y;var d=this.handlePosition,e=this.handleLength*.95;b<=c?d-=e:b>=c+this.handleLength&&(d+=e);this.setHandlePosition(this.constrainHandlePosition(d));this.updateMetrics();\na.stopPropagation();a.preventDefault()}}onMouseDownHandle(a){this.workspace.markFocused();this.cleanUp();isRightButton$$module$build$src$core$browser_events(a)?a.stopPropagation():(this.startDragHandle=this.handlePosition,this.startDragMouse=this.horizontal?a.clientX:a.clientY,this.onMouseUpWrapper_=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onMouseUpHandle),this.onMouseMoveWrapper_=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",\nthis,this.onMouseMoveHandle),a.stopPropagation(),a.preventDefault())}onMouseMoveHandle(a){this.setHandlePosition(this.constrainHandlePosition(this.startDragHandle+((this.horizontal?a.clientX:a.clientY)-this.startDragMouse)));this.updateMetrics()}onMouseUpHandle(){clearTouchIdentifier$$module$build$src$core$touch();this.cleanUp()}cleanUp(){this.workspace.hideChaff(!0);this.onMouseUpWrapper_&&(unbind$$module$build$src$core$browser_events(this.onMouseUpWrapper_),this.onMouseUpWrapper_=null);this.onMouseMoveWrapper_&&\n(unbind$$module$build$src$core$browser_events(this.onMouseMoveWrapper_),this.onMouseMoveWrapper_=null)}getRatio_(){let a=this.handlePosition/(this.scrollbarLength-this.handleLength);isNaN(a)&&(a=0);return a}updateMetrics(){const a=this.getRatio_();this.horizontal?this.workspace.setMetrics({x:a}):this.workspace.setMetrics({y:a})}set(a,b){this.setHandlePosition(this.constrainHandlePosition(a*this.ratio));(b||b===void 0)&&this.updateMetrics()}setOrigin(a,b){this.origin=new Coordinate$$module$build$src$core$utils$coordinate(a,\nb)}static metricsAreEquivalent(a,b){return a.viewWidth===b.viewWidth&&a.viewHeight===b.viewHeight&&a.viewLeft===b.viewLeft&&a.viewTop===b.viewTop&&a.absoluteTop===b.absoluteTop&&a.absoluteLeft===b.absoluteLeft&&a.scrollWidth===b.scrollWidth&&a.scrollHeight===b.scrollHeight&&a.scrollLeft===b.scrollLeft&&a.scrollTop===b.scrollTop}};Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness=TOUCH_ENABLED$$module$build$src$core$touch?25:15;\nScrollbar$$module$build$src$core$scrollbar.DEFAULT_SCROLLBAR_MARGIN=.5;var module$build$src$core$scrollbar={};module$build$src$core$scrollbar.Scrollbar=Scrollbar$$module$build$src$core$scrollbar;var domParser$$module$build$src$core$utils$xml={parseFromString:function(){throw Error(\"DOMParser was not found in the global scope and was not properly injected using injectDependencies\");}},xmlSerializer$$module$build$src$core$utils$xml={serializeToString:function(){throw Error(\"XMLSerializer was not foundin the global scope and was not properly injected using injectDependencies\");}},{document:document$$module$build$src$core$utils$xml,DOMParser:DOMParser$$module$build$src$core$utils$xml,XMLSerializer:XMLSerializer$$module$build$src$core$utils$xml}=\nglobalThis;DOMParser$$module$build$src$core$utils$xml&&(domParser$$module$build$src$core$utils$xml=new DOMParser$$module$build$src$core$utils$xml);XMLSerializer$$module$build$src$core$utils$xml&&(xmlSerializer$$module$build$src$core$utils$xml=new XMLSerializer$$module$build$src$core$utils$xml);\nvar NAME_SPACE$$module$build$src$core$utils$xml=\"https://developers.google.com/blockly/xml\",INVALID_CONTROL_CHARS$$module$build$src$core$utils$xml=/[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F]/g,module$build$src$core$utils$xml={NAME_SPACE:NAME_SPACE$$module$build$src$core$utils$xml};module$build$src$core$utils$xml.createElement=$.createElement$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.createTextNode=$.createTextNode$$module$build$src$core$utils$xml;\nmodule$build$src$core$utils$xml.domToText=domToText$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.injectDependencies=injectDependencies$$module$build$src$core$utils$xml;module$build$src$core$utils$xml.textToDom=$.textToDom$$module$build$src$core$utils$xml;var CATEGORY_TOOLBOX_KIND$$module$build$src$core$utils$toolbox=\"categoryToolbox\",FLYOUT_TOOLBOX_KIND$$module$build$src$core$utils$toolbox=\"flyoutToolbox\",Position$$module$build$src$core$utils$toolbox;(function(a){a[a.TOP=0]=\"TOP\";a[a.BOTTOM=1]=\"BOTTOM\";a[a.LEFT=2]=\"LEFT\";a[a.RIGHT=3]=\"RIGHT\"})(Position$$module$build$src$core$utils$toolbox||(Position$$module$build$src$core$utils$toolbox={}));\nvar TEST_ONLY$$module$build$src$core$utils$toolbox={hasCategoriesInternal:hasCategoriesInternal$$module$build$src$core$utils$toolbox},module$build$src$core$utils$toolbox={};module$build$src$core$utils$toolbox.Position=Position$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.TEST_ONLY=TEST_ONLY$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.convertFlyoutDefToJsonArray=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox;\nmodule$build$src$core$utils$toolbox.convertToolboxDefToJson=convertToolboxDefToJson$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.hasCategories=hasCategories$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.isCategoryCollapsible=isCategoryCollapsible$$module$build$src$core$utils$toolbox;module$build$src$core$utils$toolbox.parseToolboxTree=parseToolboxTree$$module$build$src$core$utils$toolbox;var verticalPosition$$module$build$src$core$positionable_helpers;(function(a){a[a.TOP=0]=\"TOP\";a[a.BOTTOM=1]=\"BOTTOM\"})(verticalPosition$$module$build$src$core$positionable_helpers||(verticalPosition$$module$build$src$core$positionable_helpers={}));var horizontalPosition$$module$build$src$core$positionable_helpers;(function(a){a[a.LEFT=0]=\"LEFT\";a[a.RIGHT=1]=\"RIGHT\"})(horizontalPosition$$module$build$src$core$positionable_helpers||(horizontalPosition$$module$build$src$core$positionable_helpers={}));\nvar bumpDirection$$module$build$src$core$positionable_helpers;(function(a){a[a.UP=0]=\"UP\";a[a.DOWN=1]=\"DOWN\"})(bumpDirection$$module$build$src$core$positionable_helpers||(bumpDirection$$module$build$src$core$positionable_helpers={}));var module$build$src$core$positionable_helpers={};module$build$src$core$positionable_helpers.bumpDirection=bumpDirection$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.bumpPositionRect=bumpPositionRect$$module$build$src$core$positionable_helpers;\nmodule$build$src$core$positionable_helpers.getCornerOppositeToolbox=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.getStartPositionRect=getStartPositionRect$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.horizontalPosition=horizontalPosition$$module$build$src$core$positionable_helpers;module$build$src$core$positionable_helpers.verticalPosition=verticalPosition$$module$build$src$core$positionable_helpers;var SPRITE$$module$build$src$core$sprites={width:96,height:124,url:\"sprites.png\"},module$build$src$core$sprites={SPRITE:SPRITE$$module$build$src$core$sprites};var ZoomControls$$module$build$src$core$zoom_controls=class{constructor(a){this.workspace=a;this.id=\"zoomControls\";this.boundEvents=[];this.zoomResetGroup=this.zoomOutGroup=this.zoomInGroup=null;this.HEIGHT=this.WIDTH=32;this.SMALL_SPACING=2;this.LARGE_SPACING=11;this.MARGIN_HORIZONTAL=this.MARGIN_VERTICAL=20;this.svgGroup=null;this.top=this.left=0;this.initialized=!1}createDom(){this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});const a=String(Math.random()).substring(2);\nthis.createZoomOutSvg(a);this.createZoomInSvg(a);this.workspace.isMovable()&&this.createZoomResetSvg(a);return this.svgGroup}init(){this.workspace.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.ZOOM_CONTROLS_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE]});this.initialized=!0}dispose(){this.workspace.getComponentManager().removeComponent(\"zoomControls\");this.svgGroup&&\nremoveNode$$module$build$src$core$utils$dom(this.svgGroup);for(const a of this.boundEvents)unbind$$module$build$src$core$browser_events(a);this.boundEvents.length=0}getBoundingRectangle(){let a=this.SMALL_SPACING+2*this.HEIGHT;this.zoomResetGroup&&(a+=this.LARGE_SPACING+this.HEIGHT);return new Rect$$module$build$src$core$utils$rect(this.top,this.top+a,this.left,this.left+this.WIDTH)}position(a,b){if(this.initialized){var c=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers(this.workspace,\na),d=this.SMALL_SPACING+2*this.HEIGHT;this.zoomResetGroup&&(d+=this.LARGE_SPACING+this.HEIGHT);a=getStartPositionRect$$module$build$src$core$positionable_helpers(c,new Size$$module$build$src$core$utils$size(this.WIDTH,d),this.MARGIN_HORIZONTAL,this.MARGIN_VERTICAL,a,this.workspace);c=c.vertical;b=bumpPositionRect$$module$build$src$core$positionable_helpers(a,this.MARGIN_VERTICAL,c===verticalPosition$$module$build$src$core$positionable_helpers.TOP?bumpDirection$$module$build$src$core$positionable_helpers.DOWN:\nbumpDirection$$module$build$src$core$positionable_helpers.UP,b);if(c===verticalPosition$$module$build$src$core$positionable_helpers.TOP){var e=this.SMALL_SPACING+this.HEIGHT,f;(f=this.zoomInGroup)==null||f.setAttribute(\"transform\",\"translate(0, \"+e+\")\");this.zoomResetGroup&&this.zoomResetGroup.setAttribute(\"transform\",\"translate(0, \"+(e+this.LARGE_SPACING+this.HEIGHT)+\")\")}else{f=this.zoomResetGroup?this.LARGE_SPACING+this.HEIGHT:0;let h;(h=this.zoomInGroup)==null||h.setAttribute(\"transform\",\"translate(0, \"+\nf+\")\");f=f+this.SMALL_SPACING+this.HEIGHT;(e=this.zoomOutGroup)==null||e.setAttribute(\"transform\",\"translate(0, \"+f+\")\")}this.top=b.top;this.left=b.left;var g;(g=this.svgGroup)==null||g.setAttribute(\"transform\",\"translate(\"+this.left+\",\"+this.top+\")\")}}createZoomOutSvg(a){this.zoomOutGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomOut\"},this.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,\n{id:\"blocklyZoomoutClipPath\"+a},this.zoomOutGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,x:-64,y:-92,\"clip-path\":\"url(#blocklyZoomoutClipPath\"+a+\")\"},this.zoomOutGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomOutGroup,\"pointerdown\",null,this.zoom.bind(this,-1)))}createZoomInSvg(a){this.zoomInGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomIn\"},this.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyZoominClipPath\"+\na},this.zoomInGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,x:-32,y:-92,\"clip-path\":\"url(#blocklyZoominClipPath\"+a+\")\"},this.zoomInGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+\nSPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomInGroup,\"pointerdown\",null,this.zoom.bind(this,1)))}zoom(a,b){this.workspace.markFocused();this.workspace.zoomCenter(a);this.fireZoomEvent();clearTouchIdentifier$$module$build$src$core$touch();b.stopPropagation();b.preventDefault()}createZoomResetSvg(a){this.zoomResetGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyZoom blocklyZoomReset\"},\nthis.svgGroup);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyZoomresetClipPath\"+a},this.zoomResetGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:32,height:32},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,height:SPRITE$$module$build$src$core$sprites.height,y:-92,\"clip-path\":\"url(#blocklyZoomresetClipPath\"+\na+\")\"},this.zoomResetGroup).setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.zoomResetGroup,\"pointerdown\",null,this.resetZoom.bind(this)))}resetZoom(a){this.workspace.markFocused();const b=Math.log(this.workspace.options.zoomOptions.startScale/this.workspace.scale)/Math.log(this.workspace.options.zoomOptions.scaleSpeed);\nthis.workspace.beginCanvasTransition();this.workspace.zoomCenter(b);this.workspace.scrollCenter();setTimeout(this.workspace.endCanvasTransition.bind(this.workspace),500);this.fireZoomEvent();clearTouchIdentifier$$module$build$src$core$touch();a.stopPropagation();a.preventDefault()}fireZoomEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(null,this.workspace.id,\"zoom_controls\");fire$$module$build$src$core$events$utils(a)}};register$$module$build$src$core$css(\"\\n.blocklyZoom>image, .blocklyZoom>svg>image {\\n opacity: .4;\\n}\\n\\n.blocklyZoom>image:hover, .blocklyZoom>svg>image:hover {\\n opacity: .6;\\n}\\n\\n.blocklyZoom>image:active, .blocklyZoom>svg>image:active {\\n opacity: .8;\\n}\\n\");\nvar module$build$src$core$zoom_controls={};module$build$src$core$zoom_controls.ZoomControls=ZoomControls$$module$build$src$core$zoom_controls;var VARIABLES$$module$build$src$core$serialization$priorities=100,PROCEDURES$$module$build$src$core$serialization$priorities=75,BLOCKS$$module$build$src$core$serialization$priorities=50,WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities=25,module$build$src$core$serialization$priorities={BLOCKS:BLOCKS$$module$build$src$core$serialization$priorities,PROCEDURES:PROCEDURES$$module$build$src$core$serialization$priorities,VARIABLES:VARIABLES$$module$build$src$core$serialization$priorities,\nWORKSPACE_COMMENTS:WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities};var module$build$src$core$serialization$registry={};module$build$src$core$serialization$registry.register=register$$module$build$src$core$serialization$registry;module$build$src$core$serialization$registry.unregister=unregister$$module$build$src$core$serialization$registry;var saveComment$$module$build$src$core$serialization$workspace_comments=save$$module$build$src$core$serialization$workspace_comments,WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments=class{constructor(){this.priority=WORKSPACE_COMMENTS$$module$build$src$core$serialization$priorities}save(a){const b=[];for(const c of a.getTopComments())(a=save$$module$build$src$core$serialization$workspace_comments(c,{addCoordinates:!0,saveIds:!0}))&&b.push(a);return b.length?b:null}load(a,\nb){for(const c of a)append$$module$build$src$core$serialization$workspace_comments(c,b,{recordUndo:getRecordUndo$$module$build$src$core$events$utils()})}clear(a){for(const b of a.getTopComments())b.dispose()}};register$$module$build$src$core$serialization$registry(\"workspaceComments\",new WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments);var module$build$src$core$serialization$workspace_comments={};\nmodule$build$src$core$serialization$workspace_comments.WorkspaceCommentSerializer=WorkspaceCommentSerializer$$module$build$src$core$serialization$workspace_comments;module$build$src$core$serialization$workspace_comments.append=append$$module$build$src$core$serialization$workspace_comments;module$build$src$core$serialization$workspace_comments.save=save$$module$build$src$core$serialization$workspace_comments;var module$build$src$core$clipboard$registry={};module$build$src$core$clipboard$registry.register=register$$module$build$src$core$clipboard$registry;module$build$src$core$clipboard$registry.unregister=unregister$$module$build$src$core$clipboard$registry;var WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster=class{paste(a,b,c){a=a.commentState;c&&(a.x=c.x,a.y=c.y);$.disable$$module$build$src$core$events$utils();let d;try{d=append$$module$build$src$core$serialization$workspace_comments(a,b),moveCommentToNotConflict$$module$build$src$core$clipboard$workspace_comment_paster(d)}finally{$.enable$$module$build$src$core$events$utils()}if(!d)return null;isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CREATE))(d));\n$.getFocusManager$$module$build$src$core$focus_manager().focusNode(d);return d}};WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE=\"workspace-comment\";register$$module$build$src$core$clipboard$registry(WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE,new WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster);var module$build$src$core$clipboard$workspace_comment_paster={};\nmodule$build$src$core$clipboard$workspace_comment_paster.WorkspaceCommentPaster=WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster;var DEFAULT_SNAP_RADIUS$$module$build$src$core$config,module$build$src$core$config;DEFAULT_SNAP_RADIUS$$module$build$src$core$config=28;$.config$$module$build$src$core$config={dragRadius:5,flyoutDragRadius:10,snapRadius:DEFAULT_SNAP_RADIUS$$module$build$src$core$config,connectingSnapRadius:DEFAULT_SNAP_RADIUS$$module$build$src$core$config,currentConnectionPreference:8,bumpDelay:250};module$build$src$core$config={config:$.config$$module$build$src$core$config};var ARIA_PREFIX$$module$build$src$core$utils$aria=\"aria-\",ROLE_ATTRIBUTE$$module$build$src$core$utils$aria=\"role\",Role$$module$build$src$core$utils$aria;\n(function(a){a.GRID=\"grid\";a.GRIDCELL=\"gridcell\";a.GROUP=\"group\";a.LISTBOX=\"listbox\";a.MENU=\"menu\";a.MENUITEM=\"menuitem\";a.MENUITEMCHECKBOX=\"menuitemcheckbox\";a.OPTION=\"option\";a.PRESENTATION=\"presentation\";a.ROW=\"row\";a.TREE=\"tree\";a.TREEITEM=\"treeitem\";a.SEPARATOR=\"separator\";a.STATUS=\"status\"})(Role$$module$build$src$core$utils$aria||(Role$$module$build$src$core$utils$aria={}));var State$$module$build$src$core$utils$aria;\n(function(a){a.ACTIVEDESCENDANT=\"activedescendant\";a.COLCOUNT=\"colcount\";a.DISABLED=\"disabled\";a.EXPANDED=\"expanded\";a.INVALID=\"invalid\";a.LABEL=\"label\";a.LABELLEDBY=\"labelledby\";a.LEVEL=\"level\";a.ORIENTATION=\"orientation\";a.POSINSET=\"posinset\";a.ROWCOUNT=\"rowcount\";a.SELECTED=\"selected\";a.SETSIZE=\"setsize\";a.VALUEMAX=\"valuemax\";a.VALUEMIN=\"valuemin\";a.LIVE=\"live\";a.HIDDEN=\"hidden\"})(State$$module$build$src$core$utils$aria||(State$$module$build$src$core$utils$aria={}));\nvar module$build$src$core$utils$aria={};module$build$src$core$utils$aria.Role=Role$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.State=State$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.setRole=setRole$$module$build$src$core$utils$aria;module$build$src$core$utils$aria.setState=setState$$module$build$src$core$utils$aria;var MenuItem$$module$build$src$core$menuitem=class{constructor(a,b){this.content=a;this.opt_value=b;this.enabled=!0;this.element=null;this.rightToLeft=!1;this.roleName=null;this.highlight=this.checked=this.checkable=!1;this.actionHandler=null}createDom(){const a=document.createElement(\"div\");a.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();this.element=a;a.className=\"blocklyMenuItem \"+(this.enabled?\"\":\"blocklyMenuItemDisabled \")+(this.checked?\"blocklyMenuItemSelected \":\"\")+(this.highlight?\n\"blocklyMenuItemHighlight \":\"\")+(this.rightToLeft?\"blocklyMenuItemRtl \":\"\");const b=document.createElement(\"div\");b.className=\"blocklyMenuItemContent\";if(this.checkable){var c=document.createElement(\"div\");c.className=\"blocklyMenuItemCheckbox \";b.appendChild(c)}c=this.content;typeof this.content===\"string\"&&(c=document.createTextNode(this.content));b.appendChild(c);a.appendChild(b);this.roleName&&setRole$$module$build$src$core$utils$aria(a,this.roleName);setState$$module$build$src$core$utils$aria(a,\nState$$module$build$src$core$utils$aria.SELECTED,this.checkable&&this.checked||!1);setState$$module$build$src$core$utils$aria(a,State$$module$build$src$core$utils$aria.DISABLED,!this.enabled);return a}dispose(){this.element=null}getElement(){return this.element}getId(){return this.element.id}getValue(){let a;return(a=this.opt_value)!=null?a:null}setRightToLeft(a){this.rightToLeft=a}setRole(a){this.roleName=a}setCheckable(a){this.checkable=a}setChecked(a){this.checked=a}setHighlighted(a){this.highlight=\na;const b=this.getElement();b&&this.isEnabled()&&(a?addClass$$module$build$src$core$utils$dom(b,\"blocklyMenuItemHighlight\"):removeClass$$module$build$src$core$utils$dom(b,\"blocklyMenuItemHighlight\"))}isEnabled(){return this.enabled}setEnabled(a){this.enabled=a}performAction(a){this.isEnabled()&&this.actionHandler&&this.actionHandler(this,a)}onAction(a,b){this.actionHandler=a.bind(b)}},module$build$src$core$menuitem={};module$build$src$core$menuitem.MenuItem=MenuItem$$module$build$src$core$menuitem;var Menu$$module$build$src$core$menu=class{constructor(){this.menuItems=[];this.roleName=this.element=this.onKeyDownHandler=this.pointerLeaveHandler=this.pointerEnterHandler=this.clickHandler=this.pointerMoveHandler=this.highlightedItem=this.openingCoords=null}addChild(a){this.menuItems.push(a)}render(a){const b=document.createElement(\"div\");b.className=\"blocklyMenu\";b.tabIndex=0;this.roleName&&setRole$$module$build$src$core$utils$aria(b,this.roleName);this.element=b;for(let c=0,d;d=this.menuItems[c];c++)b.appendChild(d.createDom());\nthis.pointerMoveHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointermove\",this,this.handlePointerMove,!0);this.clickHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerup\",this,this.handleClick,!0);this.pointerEnterHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerenter\",this,this.handlePointerEnter,!0);this.pointerLeaveHandler=conditionalBind$$module$build$src$core$browser_events(b,\"pointerleave\",this,this.handlePointerLeave,!0);this.onKeyDownHandler=\nconditionalBind$$module$build$src$core$browser_events(b,\"keydown\",this,this.handleKeyEvent);a.appendChild(b);return b}getElement(){return this.element}focus(){const a=this.getElement();a&&a.focus({preventScroll:!0})}blur(){const a=this.getElement();a&&a.blur()}setRole(a){this.roleName=a}dispose(){this.pointerMoveHandler&&(unbind$$module$build$src$core$browser_events(this.pointerMoveHandler),this.pointerMoveHandler=null);this.clickHandler&&(unbind$$module$build$src$core$browser_events(this.clickHandler),\nthis.clickHandler=null);this.pointerEnterHandler&&(unbind$$module$build$src$core$browser_events(this.pointerEnterHandler),this.pointerEnterHandler=null);this.pointerLeaveHandler&&(unbind$$module$build$src$core$browser_events(this.pointerLeaveHandler),this.pointerLeaveHandler=null);this.onKeyDownHandler&&(unbind$$module$build$src$core$browser_events(this.onKeyDownHandler),this.onKeyDownHandler=null);for(let a=0,b;b=this.menuItems[a];a++)b.dispose();this.element=null}getMenuItem(a){const b=this.getElement();\nfor(;a&&a!==b;){if(a.classList.contains(\"blocklyMenuItem\")){const c=this.getMenuItems();for(let d=0,e;e=c[d];d++)if(e.getElement()===a)return e}a=a.parentElement}return null}setHighlighted(a){var b=this.highlightedItem;b&&(b.setHighlighted(!1),this.highlightedItem=null);if(a){a.setHighlighted(!0);this.highlightedItem=a;b=this.getElement();const c=a.getElement();b&&c&&(scrollIntoContainerView$$module$build$src$core$utils$style(c,b),setState$$module$build$src$core$utils$aria(b,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,\na.getId()))}}highlightNext(){const a=this.highlightedItem?this.menuItems.indexOf(this.highlightedItem):-1;this.highlightHelper(a,1)}highlightPrevious(){const a=this.highlightedItem?this.menuItems.indexOf(this.highlightedItem):-1;this.highlightHelper(a<0?this.menuItems.length:a,-1)}highlightFirst(){this.highlightHelper(-1,1)}highlightLast(){this.highlightHelper(this.menuItems.length,-1)}highlightHelper(a,b){a+=b;let c;const d=this.getMenuItems();for(;c=d[a];){if(c.isEnabled()){this.setHighlighted(c);\nbreak}a+=b}}handlePointerMove(a){Math.max(Math.abs(a.movementX),Math.abs(a.movementY))!==0&&(a=this.getMenuItem(a.target))&&(a.isEnabled()?this.highlightedItem!==a&&this.setHighlighted(a):this.setHighlighted(null))}handleClick(a){var b=this.openingCoords;this.openingCoords=null;if(b&&typeof a.clientX===\"number\"){const c=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY);if(Coordinate$$module$build$src$core$utils$coordinate.distance(b,c)<1)return}(b=this.getMenuItem(a.target))&&\nb.performAction(a)}handlePointerEnter(a){this.focus()}handlePointerLeave(a){this.getElement()&&this.setHighlighted(null)}handleKeyEvent(a){if(this.menuItems.length&&!(a.shiftKey||a.ctrlKey||a.metaKey||a.altKey)){var b=this.highlightedItem;switch(a.key){case \"Enter\":case \" \":b&&b.performAction(a);break;case \"ArrowUp\":this.highlightPrevious();break;case \"ArrowDown\":this.highlightNext();break;case \"PageUp\":case \"Home\":this.highlightFirst();break;case \"PageDown\":case \"End\":this.highlightLast();break;\ndefault:return}a.preventDefault();a.stopPropagation()}}getSize(){const a=this.getElement(),b=getSize$$module$build$src$core$utils$style(a);b.height=a.scrollHeight;return b}getMenuItems(){return this.menuItems.filter(a=>a instanceof MenuItem$$module$build$src$core$menuitem)}},module$build$src$core$menu={};module$build$src$core$menu.Menu=Menu$$module$build$src$core$menu;var MenuSeparator$$module$build$src$core$menu_separator=class{constructor(){this.element=null}createDom(){this.element=document.createElement(\"hr\");this.element.className=\"blocklyMenuSeparator\";setRole$$module$build$src$core$utils$aria(this.element,Role$$module$build$src$core$utils$aria.SEPARATOR);return this.element}dispose(){let a;(a=this.element)==null||a.remove();this.element=null}},module$build$src$core$menu_separator={};module$build$src$core$menu_separator.MenuSeparator=MenuSeparator$$module$build$src$core$menu_separator;var COLLAPSED_INPUT_NAME$$module$build$src$core$constants=\"_TEMP_COLLAPSED_INPUT\",COLLAPSED_FIELD_NAME$$module$build$src$core$constants=\"_TEMP_COLLAPSED_FIELD\",MANUALLY_DISABLED$$module$build$src$core$constants=\"MANUALLY_DISABLED\",module$build$src$core$constants={COLLAPSED_FIELD_NAME:COLLAPSED_FIELD_NAME$$module$build$src$core$constants,COLLAPSED_INPUT_NAME:COLLAPSED_INPUT_NAME$$module$build$src$core$constants,MANUALLY_DISABLED:MANUALLY_DISABLED$$module$build$src$core$constants};(function(a){a[a.VALUE=1]=\"VALUE\";a[a.STATEMENT=3]=\"STATEMENT\";a[a.DUMMY=5]=\"DUMMY\";a[a.CUSTOM=6]=\"CUSTOM\";a[a.END_ROW=7]=\"END_ROW\"})($.inputTypes$$module$build$src$core$inputs$input_types||($.inputTypes$$module$build$src$core$inputs$input_types={}));var module$build$src$core$inputs$input_types={};module$build$src$core$inputs$input_types.inputTypes=$.inputTypes$$module$build$src$core$inputs$input_types;var module$build$src$core$interfaces$i_serializable={};module$build$src$core$interfaces$i_serializable.isSerializable=isSerializable$$module$build$src$core$interfaces$i_serializable;var rootBlocks$$module$build$src$core$render_management=new Set,dirtyBlocks$$module$build$src$core$render_management=new WeakSet,eventGroups$$module$build$src$core$render_management=new WeakMap,afterRendersPromise$$module$build$src$core$render_management=null,afterRendersResolver$$module$build$src$core$render_management=null,animationRequestId$$module$build$src$core$render_management=0,module$build$src$core$render_management={};module$build$src$core$render_management.finishQueuedRenders=finishQueuedRenders$$module$build$src$core$render_management;\nmodule$build$src$core$render_management.queueRender=queueRender$$module$build$src$core$render_management;module$build$src$core$render_management.triggerQueuedRenders=triggerQueuedRenders$$module$build$src$core$render_management;var setLocale$$module$build$src$core$msg,module$build$src$core$msg;$.Msg$$module$build$src$core$msg=Object.create(null);setLocale$$module$build$src$core$msg=function(a){Object.keys(a).forEach(function(b){$.Msg$$module$build$src$core$msg[b]=a[b]})};module$build$src$core$msg={Msg:$.Msg$$module$build$src$core$msg,setLocale:setLocale$$module$build$src$core$msg};var CLASS_NAME$$module$build$src$core$toast=\"blocklyToast\",MESSAGE_CLASS_NAME$$module$build$src$core$toast=\"blocklyToastMessage\",CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast=\"blocklyToastCloseButton\",Toast$$module$build$src$core$toast=class{static show(a,b){if(b.oncePerSession&&b.id){if(this.shownIds.has(b.id))return;this.shownIds.add(b.id)}this.hide(a);const c=this.createDom(a,b);requestAnimationFrame(()=>{c.style.bottom=\"2rem\"})}static createDom(a,b){const {message:c,duration:d=5,assertiveness:e=\nToast$$module$build$src$core$toast.Assertiveness.POLITE}=b,f=document.createElement(\"div\");a.getInjectionDiv().appendChild(f);f.dataset.toastId=b.id;f.className=CLASS_NAME$$module$build$src$core$toast;setRole$$module$build$src$core$utils$aria(f,Role$$module$build$src$core$utils$aria.STATUS);setState$$module$build$src$core$utils$aria(f,State$$module$build$src$core$utils$aria.LIVE,e);b=f.appendChild(document.createElement(\"div\"));b.className=MESSAGE_CLASS_NAME$$module$build$src$core$toast;b.innerText=\nc;b=f.appendChild(document.createElement(\"button\"));b.className=CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast;setState$$module$build$src$core$utils$aria(b,State$$module$build$src$core$utils$aria.LABEL,$.Msg$$module$build$src$core$msg.CLOSE);var g=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{width:24,height:24,viewBox:\"0 0 24 24\",fill:\"none\"},b);setState$$module$build$src$core$utils$aria(g,State$$module$build$src$core$utils$aria.HIDDEN,!0);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{x:19.7782,y:2.80762,width:2,height:24,transform:\"rotate(45, 19.7782, 2.80762)\",fill:\"black\"},g);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{x:2.80762,y:4.22183,width:2,height:24,transform:\"rotate(-45, 2.80762, 4.22183)\",fill:\"black\"},g);b.addEventListener(\"click\",()=>{f.remove();a.markFocused()});let h;b=()=>{h=setTimeout(()=>f.remove(),d*1E3)};g=()=>clearTimeout(h);f.addEventListener(\"focusin\",g);f.addEventListener(\"focusout\",b);f.addEventListener(\"mouseenter\",\ng);f.addEventListener(\"mousemove\",g);f.addEventListener(\"mouseleave\",b);b();return f}static hide(a,b){a=a.getInjectionDiv().querySelector(`.${CLASS_NAME$$module$build$src$core$toast}`);a instanceof HTMLElement&&(!b||b===a.dataset.toastId)&&a.remove()}};Toast$$module$build$src$core$toast.shownIds=new Set;(function(a){a=a.Assertiveness||(a.Assertiveness={});a.ASSERTIVE=\"assertive\";a.POLITE=\"polite\"})(Toast$$module$build$src$core$toast||(Toast$$module$build$src$core$toast={}));register$$module$build$src$core$css(`\n.${CLASS_NAME$$module$build$src$core$toast} {\n font-size: 1.2rem;\n position: absolute;\n bottom: -10rem;\n right: 2rem;\n padding: 1rem;\n color: black;\n background-color: white;\n border: 2px solid black;\n border-radius: 0.4rem;\n z-index: 999;\n display: flex;\n align-items: center;\n gap: 0.8rem;\n line-height: 1.5;\n transition: bottom 0.3s ease-out;\n}\n\n.${CLASS_NAME$$module$build$src$core$toast} .${MESSAGE_CLASS_NAME$$module$build$src$core$toast} {\n maxWidth: 18rem;\n}\n\n.${CLASS_NAME$$module$build$src$core$toast} .${CLOSE_BUTTON_CLASS_NAME$$module$build$src$core$toast} {\n margin: 0;\n padding: 0.2rem;\n background-color: transparent;\n color: black;\n border: none;\n cursor: pointer;\n}\n`);var module$build$src$core$toast={};module$build$src$core$toast.Toast=Toast$$module$build$src$core$toast;var defaultAlert$$module$build$src$core$dialog=function(a,b){window.alert(a);b&&b()},alertImplementation$$module$build$src$core$dialog=defaultAlert$$module$build$src$core$dialog,defaultConfirm$$module$build$src$core$dialog=function(a,b){b(window.confirm(a))},confirmImplementation$$module$build$src$core$dialog=defaultConfirm$$module$build$src$core$dialog,defaultPrompt$$module$build$src$core$dialog=function(a,b,c){c(window.prompt(a,b))},promptImplementation$$module$build$src$core$dialog=defaultPrompt$$module$build$src$core$dialog,\ndefaultToast$$module$build$src$core$dialog=Toast$$module$build$src$core$toast.show.bind(Toast$$module$build$src$core$toast),toastImplementation$$module$build$src$core$dialog=defaultToast$$module$build$src$core$dialog,module$build$src$core$dialog={};module$build$src$core$dialog.alert=alert$$module$build$src$core$dialog;module$build$src$core$dialog.confirm=confirm$$module$build$src$core$dialog;module$build$src$core$dialog.prompt=prompt$$module$build$src$core$dialog;\nmodule$build$src$core$dialog.setAlert=setAlert$$module$build$src$core$dialog;module$build$src$core$dialog.setConfirm=setConfirm$$module$build$src$core$dialog;module$build$src$core$dialog.setPrompt=setPrompt$$module$build$src$core$dialog;module$build$src$core$dialog.setToast=setToast$$module$build$src$core$dialog;module$build$src$core$dialog.toast=toast$$module$build$src$core$dialog;var module$build$src$core$interfaces$i_legacy_procedure_blocks={};module$build$src$core$interfaces$i_legacy_procedure_blocks.isLegacyProcedureCallBlock=isLegacyProcedureCallBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks;module$build$src$core$interfaces$i_legacy_procedure_blocks.isLegacyProcedureDefBlock=isLegacyProcedureDefBlock$$module$build$src$core$interfaces$i_legacy_procedure_blocks;var module$build$src$core$interfaces$i_variable_backed_parameter_model={};module$build$src$core$interfaces$i_variable_backed_parameter_model.isVariableBackedParameterModel=isVariableBackedParameterModel$$module$build$src$core$interfaces$i_variable_backed_parameter_model;var previousWarnings$$module$build$src$core$utils$deprecation=new Set,module$build$src$core$utils$deprecation={};module$build$src$core$utils$deprecation.warn=warn$$module$build$src$core$utils$deprecation;var CATEGORY_NAME$$module$build$src$core$variables=\"VARIABLE\",VAR_LETTER_OPTIONS$$module$build$src$core$variables=\"ijkmnopqrstuvwxyzabcdefgh\",TEST_ONLY$$module$build$src$core$variables={generateUniqueNameInternal:generateUniqueNameInternal$$module$build$src$core$variables},module$build$src$core$variables={CATEGORY_NAME:CATEGORY_NAME$$module$build$src$core$variables,TEST_ONLY:TEST_ONLY$$module$build$src$core$variables,VAR_LETTER_OPTIONS:VAR_LETTER_OPTIONS$$module$build$src$core$variables};\nmodule$build$src$core$variables.allDeveloperVariables=$.allDeveloperVariables$$module$build$src$core$variables;module$build$src$core$variables.allUsedVarModels=$.allUsedVarModels$$module$build$src$core$variables;module$build$src$core$variables.compareByName=compareByName$$module$build$src$core$variables;module$build$src$core$variables.createVariableButtonHandler=createVariableButtonHandler$$module$build$src$core$variables;module$build$src$core$variables.deleteVariable=$.deleteVariable$$module$build$src$core$variables;\nmodule$build$src$core$variables.flyoutCategory=flyoutCategory$$module$build$src$core$variables;module$build$src$core$variables.flyoutCategoryBlocks=flyoutCategoryBlocks$$module$build$src$core$variables;module$build$src$core$variables.generateUniqueName=generateUniqueName$$module$build$src$core$variables;module$build$src$core$variables.generateUniqueNameFromOptions=generateUniqueNameFromOptions$$module$build$src$core$variables;module$build$src$core$variables.generateVariableFieldDom=generateVariableFieldDom$$module$build$src$core$variables;\nmodule$build$src$core$variables.getAddedVariables=getAddedVariables$$module$build$src$core$variables;module$build$src$core$variables.getOrCreateVariablePackage=$.getOrCreateVariablePackage$$module$build$src$core$variables;module$build$src$core$variables.getVariable=$.getVariable$$module$build$src$core$variables;module$build$src$core$variables.getVariableUsesById=getVariableUsesById$$module$build$src$core$variables;module$build$src$core$variables.internalFlyoutCategory=internalFlyoutCategory$$module$build$src$core$variables;\nmodule$build$src$core$variables.jsonFlyoutCategoryBlocks=jsonFlyoutCategoryBlocks$$module$build$src$core$variables;module$build$src$core$variables.nameUsedWithAnyType=nameUsedWithAnyType$$module$build$src$core$variables;module$build$src$core$variables.nameUsedWithConflictingParam=nameUsedWithConflictingParam$$module$build$src$core$variables;module$build$src$core$variables.promptName=promptName$$module$build$src$core$variables;module$build$src$core$variables.renameVariable=$.renameVariable$$module$build$src$core$variables;var DeserializationError$$module$build$src$core$serialization$exceptions=class extends Error{},MissingBlockType$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a){super(\"Expected to find a 'type' property, defining the block type\");this.state=a}},MissingConnection$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,\nb,c){super(`The block ${b.toDevString()} is missing a(n) ${a}\nconnection`);this.block=b;this.state=c}},BadConnectionCheck$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,b,c,d){super(`The block ${c.toDevString()} could not connect its\n${b} to its parent, because: ${a}`);this.childBlock=c;this.childState=d}},RealChildOfShadow$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a){super(\"Encountered a real block which is defined as a child of a shadow\\nblock. It is an invariant of Blockly that shadow blocks only have shadow\\nchildren\");this.state=a}},UnregisteredIcon$$module$build$src$core$serialization$exceptions=class extends DeserializationError$$module$build$src$core$serialization$exceptions{constructor(a,\nb,c){super(`Cannot add an icon of type '${a}' to the block `+`${b.toDevString()}, because there is no icon registered with `+`type '${a}'. Make sure that all of your icons have been `+\"registered.\");this.block=b;this.state=c}},module$build$src$core$serialization$exceptions={};module$build$src$core$serialization$exceptions.BadConnectionCheck=BadConnectionCheck$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.DeserializationError=DeserializationError$$module$build$src$core$serialization$exceptions;\nmodule$build$src$core$serialization$exceptions.MissingBlockType=MissingBlockType$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.MissingConnection=MissingConnection$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.RealChildOfShadow=RealChildOfShadow$$module$build$src$core$serialization$exceptions;module$build$src$core$serialization$exceptions.UnregisteredIcon=UnregisteredIcon$$module$build$src$core$serialization$exceptions;var saveBlock$$module$build$src$core$serialization$blocks=save$$module$build$src$core$serialization$blocks,BlockSerializer$$module$build$src$core$serialization$blocks=class{constructor(){this.priority=BLOCKS$$module$build$src$core$serialization$priorities}save(a){const b=[];for(const c of a.getTopBlocks(!1))(a=save$$module$build$src$core$serialization$blocks(c,{addCoordinates:!0,doFullSerialization:!1}))&&b.push(a);return b.length?{languageVersion:0,blocks:b}:null}load(a,b){a=a.blocks;for(const c of a)append$$module$build$src$core$serialization$blocks(c,\nb,{recordUndo:getRecordUndo$$module$build$src$core$events$utils()})}clear(a){for(const b of a.getTopBlocks(!1))b.dispose(!1)}};register$$module$build$src$core$serialization$registry(\"blocks\",new BlockSerializer$$module$build$src$core$serialization$blocks);var module$build$src$core$serialization$blocks={};module$build$src$core$serialization$blocks.BlockSerializer=BlockSerializer$$module$build$src$core$serialization$blocks;module$build$src$core$serialization$blocks.append=append$$module$build$src$core$serialization$blocks;\nmodule$build$src$core$serialization$blocks.appendInternal=appendInternal$$module$build$src$core$serialization$blocks;module$build$src$core$serialization$blocks.save=save$$module$build$src$core$serialization$blocks;var IconType$$module$build$src$core$icons$icon_types=class{constructor(a){this.name=a}toString(){return this.name}equals(a){return this.name===a.toString()}};IconType$$module$build$src$core$icons$icon_types.MUTATOR=new IconType$$module$build$src$core$icons$icon_types(\"mutator\");IconType$$module$build$src$core$icons$icon_types.WARNING=new IconType$$module$build$src$core$icons$icon_types(\"warning\");IconType$$module$build$src$core$icons$icon_types.COMMENT=new IconType$$module$build$src$core$icons$icon_types(\"comment\");\nvar module$build$src$core$icons$icon_types={};module$build$src$core$icons$icon_types.IconType=IconType$$module$build$src$core$icons$icon_types;var module$build$src$core$interfaces$i_has_bubble={};module$build$src$core$interfaces$i_has_bubble.hasBubble=hasBubble$$module$build$src$core$interfaces$i_has_bubble;var BlockBase$$module$build$src$core$events$events_block_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.isBlank=!a;a&&(this.blockId=a.id,this.workspaceId=a.workspace.id)}toJson(){const a=super.toJson();if(!this.blockId)throw Error(\"The block ID is undefined. Either pass a block to the constructor, or call fromJson\");a.blockId=this.blockId;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new BlockBase$$module$build$src$core$events$events_block_base);\nb.blockId=a.blockId;return b}},module$build$src$core$events$events_block_base={};module$build$src$core$events$events_block_base.BlockBase=BlockBase$$module$build$src$core$events$events_block_base;var BlockChange$$module$build$src$core$events$events_block_change=class extends BlockBase$$module$build$src$core$events$events_block_base{constructor(a,b,c,d,e){super(a);this.type=EventType$$module$build$src$core$events$type.BLOCK_CHANGE;a&&(this.element=b,this.name=c||void 0,this.oldValue=d,this.newValue=e)}toJson(){const a=super.toJson();if(!this.element)throw Error(\"The changed element is undefined. Either pass an element to the constructor, or call fromJson\");a.element=this.element;a.name=this.name;\na.oldValue=this.oldValue;a.newValue=this.newValue;this.disabledReason&&(a.disabledReason=this.disabledReason);return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new BlockChange$$module$build$src$core$events$events_block_change);b.element=a.element;b.name=a.name;b.oldValue=a.oldValue;b.newValue=a.newValue;a.disabledReason!==void 0&&(b.disabledReason=a.disabledReason);return b}setDisabledReason(a){if(this.element!==\"disabled\")throw Error('Cannot set the disabled reason for a BlockChange event if the element is not \"disabled\".');\nthis.disabledReason=a}isNull(){return this.oldValue===this.newValue}run(a){var b=this.getEventWorkspace_();if(!this.blockId)throw Error(\"The block ID is undefined. Either pass a block to the constructor, or call fromJson\");b=b.getBlockById(this.blockId);if(!b)throw Error(\"The associated block is undefined. Either pass a block to the constructor, or call fromJson\");const c=b.getIcon(IconType$$module$build$src$core$icons$icon_types.MUTATOR);c&&hasBubble$$module$build$src$core$interfaces$i_has_bubble(c)&&\nc.bubbleIsVisible()&&c.setBubbleVisible(!1);a=a?this.newValue:this.oldValue;switch(this.element){case \"field\":(b=b.getField(this.name))?b.setValue(a):console.warn(\"Can't set non-existent field: \"+this.name);break;case \"comment\":b.setCommentText(a||null);break;case \"collapsed\":b.setCollapsed(!!a);break;case \"disabled\":var d;b.setDisabledReason(!!a,(d=this.disabledReason)!=null?d:MANUALLY_DISABLED$$module$build$src$core$constants);break;case \"inline\":b.setInputsInline(!!a);break;case \"mutation\":d=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(b);\nb.loadExtraState?b.loadExtraState(JSON.parse(a||\"{}\")):b.domToMutation&&b.domToMutation($.textToDom$$module$build$src$core$utils$xml(a||\"\"));fire$$module$build$src$core$events$utils(new BlockChange$$module$build$src$core$events$events_block_change(b,\"mutation\",null,d,a));break;default:console.warn(\"Unknown change type: \"+this.element)}}static getExtraBlockState_(a){return a.saveExtraState?(a=a.saveExtraState(!0))?JSON.stringify(a):\"\":a.mutationToDom?(a=a.mutationToDom())?domToText$$module$build$src$core$xml(a):\n\"\":\"\"}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.BLOCK_CHANGE,BlockChange$$module$build$src$core$events$events_block_change);var module$build$src$core$events$events_block_change={};module$build$src$core$events$events_block_change.BlockChange=BlockChange$$module$build$src$core$events$events_block_change;var module$build$src$core$utils$math={};module$build$src$core$utils$math.clamp=clamp$$module$build$src$core$utils$math;module$build$src$core$utils$math.toDegrees=toDegrees$$module$build$src$core$utils$math;module$build$src$core$utils$math.toRadians=toRadians$$module$build$src$core$utils$math;var ARROW_SIZE$$module$build$src$core$dropdowndiv=16,BORDER_SIZE$$module$build$src$core$dropdowndiv=1,ARROW_HORIZONTAL_PADDING$$module$build$src$core$dropdowndiv=12,PADDING_Y$$module$build$src$core$dropdowndiv=16,ANIMATION_TIME$$module$build$src$core$dropdowndiv=.25,animateOutTimer$$module$build$src$core$dropdowndiv=null,onHide$$module$build$src$core$dropdowndiv=null,renderedClassName$$module$build$src$core$dropdowndiv=\"\",themeClassName$$module$build$src$core$dropdowndiv=\"\",div$$module$build$src$core$dropdowndiv,\ncontent$$module$build$src$core$dropdowndiv,arrow$$module$build$src$core$dropdowndiv,boundsElement$$module$build$src$core$dropdowndiv=null,owner$$module$build$src$core$dropdowndiv=null,positionToField$$module$build$src$core$dropdowndiv=null,returnEphemeralFocus$$module$build$src$core$dropdowndiv=null,keydownListener$$module$build$src$core$dropdowndiv=null,internal$$module$build$src$core$dropdowndiv={getBoundsInfo:function(){const a=getPageOffset$$module$build$src$core$utils$style(boundsElement$$module$build$src$core$dropdowndiv),\nb=getSize$$module$build$src$core$utils$style(boundsElement$$module$build$src$core$dropdowndiv);return{left:a.x,right:a.x+b.width,top:a.y,bottom:a.y+b.height,width:b.width,height:b.height}},getPositionMetrics:function(a,b,c,d){const e=internal$$module$build$src$core$dropdowndiv.getBoundsInfo(),f=getSize$$module$build$src$core$utils$style(div$$module$build$src$core$dropdowndiv);return b+f.heighte.top?getPositionAboveMetrics$$module$build$src$core$dropdowndiv(c,\nd,e,f):b+f.heightdocument.documentElement.clientTop?getPositionAboveMetrics$$module$build$src$core$dropdowndiv(c,d,e,f):getPositionTopOfPageMetrics$$module$build$src$core$dropdowndiv(a,e,f)}},TEST_ONLY$$module$build$src$core$dropdowndiv=internal$$module$build$src$core$dropdowndiv,module$build$src$core$dropdowndiv={ANIMATION_TIME:ANIMATION_TIME$$module$build$src$core$dropdowndiv,ARROW_HORIZONTAL_PADDING:ARROW_HORIZONTAL_PADDING$$module$build$src$core$dropdowndiv,\nARROW_SIZE:ARROW_SIZE$$module$build$src$core$dropdowndiv,BORDER_SIZE:BORDER_SIZE$$module$build$src$core$dropdowndiv,PADDING_Y:PADDING_Y$$module$build$src$core$dropdowndiv,TEST_ONLY:internal$$module$build$src$core$dropdowndiv};module$build$src$core$dropdowndiv.clearContent=clearContent$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.createDom=createDom$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.getContentDiv=getContentDiv$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.getOwner=getOwner$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.getPositionX=getPositionX$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hide=hide$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hideIfOwner=hideIfOwner$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.hideWithoutAnimation=hideWithoutAnimation$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.isVisible=isVisible$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.repositionForWindowResize=repositionForWindowResize$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.setBoundsElement=setBoundsElement$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.setColour=setColour$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.show=show$$module$build$src$core$dropdowndiv;\nmodule$build$src$core$dropdowndiv.showPositionedByBlock=showPositionedByBlock$$module$build$src$core$dropdowndiv;module$build$src$core$dropdowndiv.showPositionedByField=showPositionedByField$$module$build$src$core$dropdowndiv;var module$build$src$core$utils$string={};module$build$src$core$utils$string.commonWordPrefix=commonWordPrefix$$module$build$src$core$utils$string;module$build$src$core$utils$string.commonWordSuffix=commonWordSuffix$$module$build$src$core$utils$string;module$build$src$core$utils$string.isNumber=$.isNumber$$module$build$src$core$utils$string;module$build$src$core$utils$string.shortestStringLength=shortestStringLength$$module$build$src$core$utils$string;module$build$src$core$utils$string.wrap=$.wrap$$module$build$src$core$utils$string;var customTooltip$$module$build$src$core$tooltip=void 0,visible$$module$build$src$core$tooltip=!1,blocked$$module$build$src$core$tooltip=!1,LIMIT$$module$build$src$core$tooltip=50,mouseOutPid$$module$build$src$core$tooltip=0,showPid$$module$build$src$core$tooltip=0,lastX$$module$build$src$core$tooltip=0,lastY$$module$build$src$core$tooltip=0,element$$module$build$src$core$tooltip=null,poisonedElement$$module$build$src$core$tooltip=null,OFFSET_X$$module$build$src$core$tooltip=0,OFFSET_Y$$module$build$src$core$tooltip=\n10,RADIUS_OK$$module$build$src$core$tooltip=10,HOVER_MS$$module$build$src$core$tooltip=750,MARGINS$$module$build$src$core$tooltip=5,containerDiv$$module$build$src$core$tooltip=null,module$build$src$core$tooltip={HOVER_MS:HOVER_MS$$module$build$src$core$tooltip,LIMIT:LIMIT$$module$build$src$core$tooltip,MARGINS:MARGINS$$module$build$src$core$tooltip,OFFSET_X:OFFSET_X$$module$build$src$core$tooltip,OFFSET_Y:OFFSET_Y$$module$build$src$core$tooltip,RADIUS_OK:RADIUS_OK$$module$build$src$core$tooltip};\nmodule$build$src$core$tooltip.bindMouseEvents=bindMouseEvents$$module$build$src$core$tooltip;module$build$src$core$tooltip.block=block$$module$build$src$core$tooltip;module$build$src$core$tooltip.createDom=createDom$$module$build$src$core$tooltip;module$build$src$core$tooltip.dispose=dispose$$module$build$src$core$tooltip;module$build$src$core$tooltip.getCustomTooltip=getCustomTooltip$$module$build$src$core$tooltip;module$build$src$core$tooltip.getDiv=getDiv$$module$build$src$core$tooltip;\nmodule$build$src$core$tooltip.getTooltipOfObject=getTooltipOfObject$$module$build$src$core$tooltip;module$build$src$core$tooltip.hide=hide$$module$build$src$core$tooltip;module$build$src$core$tooltip.isVisible=isVisible$$module$build$src$core$tooltip;module$build$src$core$tooltip.setCustomTooltip=setCustomTooltip$$module$build$src$core$tooltip;module$build$src$core$tooltip.unbindMouseEvents=unbindMouseEvents$$module$build$src$core$tooltip;module$build$src$core$tooltip.unblock=unblock$$module$build$src$core$tooltip;var hsvSaturation$$module$build$src$core$utils$colour=.45,hsvValue$$module$build$src$core$utils$colour=.65,names$$module$build$src$core$utils$colour={aqua:\"#00ffff\",black:\"#000000\",blue:\"#0000ff\",fuchsia:\"#ff00ff\",gray:\"#808080\",green:\"#008000\",lime:\"#00ff00\",maroon:\"#800000\",navy:\"#000080\",olive:\"#808000\",purple:\"#800080\",red:\"#ff0000\",silver:\"#c0c0c0\",teal:\"#008080\",white:\"#ffffff\",yellow:\"#ffff00\"},module$build$src$core$utils$colour={};module$build$src$core$utils$colour.blend=blend$$module$build$src$core$utils$colour;\nmodule$build$src$core$utils$colour.getHsvSaturation=getHsvSaturation$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.getHsvValue=getHsvValue$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hexToRgb=hexToRgb$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hsvToHex=hsvToHex$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.hueToHex=hueToHex$$module$build$src$core$utils$colour;\nmodule$build$src$core$utils$colour.names=names$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.parse=parse$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.rgbToHex=rgbToHex$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.setHsvSaturation=setHsvSaturation$$module$build$src$core$utils$colour;module$build$src$core$utils$colour.setHsvValue=setHsvValue$$module$build$src$core$utils$colour;var module$build$src$core$utils$parsing={};module$build$src$core$utils$parsing.checkMessageReferences=checkMessageReferences$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.parseBlockColour=parseBlockColour$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.replaceMessageReferences=replaceMessageReferences$$module$build$src$core$utils$parsing;module$build$src$core$utils$parsing.tokenizeInterpolation=tokenizeInterpolation$$module$build$src$core$utils$parsing;var Field$$module$build$src$core$field=class{get size_(){return this.size}set size_(a){this.size=a}constructor(a,b,c){this.DEFAULT_VALUE=null;this.name=void 0;this.tooltip=this.validator_=null;this.size=new Size$$module$build$src$core$utils$size(0,0);this.constants_=this.mouseDownWrapper=this.textContent_=this.textElement_=this.borderRect_=this.fieldGroup_=null;this.disposed=!1;this.maxDisplayLength=50;this.sourceBlock_=null;this.enabled_=this.visible_=this.isDirty_=!0;this.suffixField=this.prefixField=\nthis.clickTarget_=null;this.EDITABLE=!0;this.SERIALIZABLE=!1;this.id_=null;this.value_=\"DEFAULT_VALUE\"in new.target.prototype?new.target.prototype.DEFAULT_VALUE:this.DEFAULT_VALUE;this.size_=new Size$$module$build$src$core$utils$size(0,0);a!==Field$$module$build$src$core$field.SKIP_SETUP&&(c&&this.configure_(c),this.setValue(a),b&&this.setValidator(b))}configure_(a){a.tooltip&&this.setTooltip(replaceMessageReferences$$module$build$src$core$utils$parsing(a.tooltip))}setSourceBlock(a){if(this.sourceBlock_)throw Error(\"Field already bound to a block\");\nthis.sourceBlock_=a;if(a.id.includes(\"_field\"))throw Error(\"Field ID indicator is contained in block ID. This may cause \"+`problems with focus: ${a.id}.`);this.id_=`${a.id}_field_${getNextUniqueId$$module$build$src$core$utils$idgenerator()}`}getConstants(){!this.constants_&&this.sourceBlock_&&!this.sourceBlock_.isDeadOrDying()&&this.sourceBlock_.workspace.rendered&&(this.constants_=this.sourceBlock_.workspace.getRenderer().getConstants());return this.constants_}getSourceBlock(){return this.sourceBlock_}init(){if(!this.fieldGroup_){var a=\nthis.id_;if(!a)throw Error(\"Expected ID to be defined prior to init.\");this.fieldGroup_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{id:a});this.isVisible()||(this.fieldGroup_.style.display=\"none\");this.sourceBlock_.getSvgRoot().appendChild(this.fieldGroup_);this.initView();this.updateEditable();this.setTooltip(this.tooltip);this.bindEvents_();this.initModel();this.applyColour()}}initView(){this.createBorderRect_();this.createTextElement_();this.fieldGroup_&&\naddClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyField\")}initModel(){}isFullBlockField(){return!this.borderRect_}createBorderRect_(){this.borderRect_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{rx:this.getConstants().FIELD_BORDER_RECT_RADIUS,ry:this.getConstants().FIELD_BORDER_RECT_RADIUS,x:0,y:0,height:this.size_.height,width:this.size_.width,\"class\":\"blocklyFieldRect\"},this.fieldGroup_)}createTextElement_(){this.textElement_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,\n{\"class\":\"blocklyText blocklyFieldText\"},this.fieldGroup_);this.getConstants().FIELD_TEXT_BASELINE_CENTER&&this.textElement_.setAttribute(\"dominant-baseline\",\"central\");this.textContent_=document.createTextNode(\"\");this.textElement_.appendChild(this.textContent_)}bindEvents_(){const a=this.getClickTarget_();if(!a)throw Error(\"A click target has not been set.\");bindMouseEvents$$module$build$src$core$tooltip(a);this.mouseDownWrapper=conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",\nthis,this.onMouseDown_)}fromXml(a){this.setValue(a.textContent)}toXml(a){a.textContent=this.getValue();return a}saveState(a){a=this.saveLegacyState(Field$$module$build$src$core$field);return a!==null?a:this.getValue()}loadState(a){this.loadLegacyState(Field$$module$build$src$core$field,a)||this.setValue(a)}saveLegacyState(a){return a.prototype.saveState===this.saveState&&a.prototype.toXml!==this.toXml?(a=$.createElement$$module$build$src$core$utils$xml(\"field\"),a.setAttribute(\"name\",this.name||\"\"),\ndomToText$$module$build$src$core$utils$xml(this.toXml(a)).replace(' xmlns=\"https://developers.google.com/blockly/xml\"',\"\")):null}loadLegacyState(a,b){return a.prototype.loadState===this.loadState&&a.prototype.fromXml!==this.fromXml?(this.fromXml($.textToDom$$module$build$src$core$utils$xml(b)),!0):!1}dispose(){hideIfOwner$$module$build$src$core$dropdowndiv(this);hideIfOwner$$module$build$src$core$widgetdiv(this);let a;((a=this.getSourceBlock())==null?0:a.isDeadOrDying())||removeNode$$module$build$src$core$utils$dom(this.fieldGroup_);\nthis.disposed=!0}updateEditable(){const a=this.fieldGroup_,b=this.getSourceBlock();this.EDITABLE&&a&&b&&(this.enabled_&&b.isEditable()?(addClass$$module$build$src$core$utils$dom(a,\"blocklyEditableField\"),removeClass$$module$build$src$core$utils$dom(a,\"blocklyNonEditableField\")):(addClass$$module$build$src$core$utils$dom(a,\"blocklyNonEditableField\"),removeClass$$module$build$src$core$utils$dom(a,\"blocklyEditableField\")))}setEnabled(a){this.enabled_=a;this.updateEditable()}isEnabled(){return this.enabled_}isClickable(){return this.enabled_&&\n!!this.sourceBlock_&&this.sourceBlock_.isEditable()&&this.showEditor_!==Field$$module$build$src$core$field.prototype.showEditor_}isClickableInFlyout(a){return!a}isCurrentlyEditable(){return this.enabled_&&this.EDITABLE&&!!this.sourceBlock_&&this.sourceBlock_.isEditable()}isSerializable(){let a=!1;this.name&&(this.SERIALIZABLE?a=!0:this.EDITABLE&&(console.warn(\"Detected an editable field that was not serializable. Please define SERIALIZABLE property as true on all editable custom fields. Proceeding with serialization.\"),\na=!0));return a}isVisible(){return this.visible_}setVisible(a){if(this.visible_!==a){this.visible_=a;var b=this.fieldGroup_;b&&(b.style.display=a?\"block\":\"none\")}}setValidator(a){this.validator_=a}getValidator(){return this.validator_}getSvgRoot(){return this.fieldGroup_}getBorderRect(){if(!this.borderRect_)throw Error(`The border rectangle is ${this.borderRect_}.`);return this.borderRect_}getTextElement(){if(!this.textElement_)throw Error(`The text element is ${this.textElement_}.`);return this.textElement_}getTextContent(){if(!this.textContent_)throw Error(`The text content is ${this.textContent_}.`);\nreturn this.textContent_}applyColour(){}render_(){this.textContent_&&(this.textContent_.nodeValue=this.getDisplayText_());this.updateSize_()}showEditor(a){this.isClickable()&&this.showEditor_(a)}showEditor_(a){}repositionForWindowResize(){return!1}updateSize_(a){const b=this.getConstants();a=a!==void 0?a:this.isFullBlockField()?0:this.getConstants().FIELD_BORDER_RECT_X_PADDING;let c=a*2,d=b.FIELD_TEXT_HEIGHT,e=0;this.textElement_&&(e=getTextWidth$$module$build$src$core$utils$dom(this.textElement_),\nc+=e);this.isFullBlockField()||(d=Math.max(d,b.FIELD_BORDER_RECT_HEIGHT));this.size_=new Size$$module$build$src$core$utils$size(c,d);this.positionTextElement_(a,e);this.positionBorderRect_()}positionTextElement_(a,b){if(this.textElement_){var c=this.getConstants(),d=this.size_.height/2,e;this.textElement_.setAttribute(\"x\",String(((e=this.getSourceBlock())==null?0:e.RTL)?this.size_.width-b-a:a));this.textElement_.setAttribute(\"y\",String(c.FIELD_TEXT_BASELINE_CENTER?d:d-c.FIELD_TEXT_HEIGHT/2+c.FIELD_TEXT_BASELINE))}}positionBorderRect_(){this.borderRect_&&\n(this.borderRect_.setAttribute(\"width\",String(this.size_.width)),this.borderRect_.setAttribute(\"height\",String(this.size_.height)),this.borderRect_.setAttribute(\"rx\",String(this.getConstants().FIELD_BORDER_RECT_RADIUS)),this.borderRect_.setAttribute(\"ry\",String(this.getConstants().FIELD_BORDER_RECT_RADIUS)))}getSize(){if(!this.isVisible())return new Size$$module$build$src$core$utils$size(0,0);this.isDirty_&&(this.render_(),this.isDirty_=!1);return this.size_}getScaledBBox(){let a;var b=this.getSourceBlock();\nif(!b)throw new UnattachedFieldError$$module$build$src$core$field;if(this.isFullBlockField()){var c=this.sourceBlock_.getHeightWidth();const d=b.workspace.scale;a=this.getAbsoluteXY_();b=(c.width+1)*d;c=(c.height+1)*d;GECKO$$module$build$src$core$utils$useragent?(a.x+=1.5*d,a.y+=1.5*d):(a.x-=.5*d,a.y-=.5*d)}else c=this.borderRect_.getBoundingClientRect(),a=getPageOffset$$module$build$src$core$utils$style(this.borderRect_),b=c.width,c=c.height;return new Rect$$module$build$src$core$utils$rect(a.y,\na.y+c,a.x,a.x+b)}onLocationChange(a){}getDisplayText_(){let a=this.getText();a.length>this.maxDisplayLength&&(a=a.substring(0,this.maxDisplayLength-2)+\"\\u2026\");a=a.replace(/\\s/g,Field$$module$build$src$core$field.NBSP);this.sourceBlock_&&this.sourceBlock_.RTL&&(a+=\"\\u200f\");return a}getText(){const a=this.getText_();return a!==null?String(a):String(this.getValue())}getText_(){return null}markDirty(){this.isDirty_=!0;this.constants_=null}forceRerender(){this.isDirty_=!0;this.sourceBlock_&&this.sourceBlock_.rendered&&\nthis.sourceBlock_.queueRender()}setValue(a,b=!0){if(a!==null){var c=$.getGroup$$module$build$src$core$events$utils();c||$.setGroup$$module$build$src$core$events$utils(!0);try{const k=this.doClassValidation_(a),l=this.processValidation(a,k,b);if(!(l instanceof Error)){var d,e=(d=this.getValidator())==null?void 0:d.call(this,l),f=this.processValidation(l,e,b);if(!(f instanceof Error)){var g=this.sourceBlock_;if(!g||!g.disposed){var h=this.getValue();h===f?this.doValueUpdate_(f):(this.doValueUpdate_(f),\nb&&g&&isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(g,\"field\",this.name||null,h,f)),this.isDirty_&&this.forceRerender())}}}}finally{$.setGroup$$module$build$src$core$events$utils(c)}}}processValidation(a,b,c){return b===null?(this.doValueInvalid_(a,c),this.isDirty_&&this.forceRerender(),Error()):b===void 0?a:b}getValue(){return this.value_}doClassValidation_(a){return a===\nnull||a===void 0?null:a}doValueUpdate_(a){this.value_=a;this.isDirty_=!0}doValueInvalid_(a,b){}onMouseDown_(a){this.sourceBlock_&&!this.sourceBlock_.isDeadOrDying()&&(a=this.sourceBlock_.workspace.getGesture(a))&&a.setStartField(this)}setTooltip(a){a||a===\"\"||(a=this.sourceBlock_);const b=this.getClickTarget_();b?b.tooltip=a:this.tooltip=a}getTooltip(){const a=this.getClickTarget_();return a?getTooltipOfObject$$module$build$src$core$tooltip(a):getTooltipOfObject$$module$build$src$core$tooltip({tooltip:this.tooltip})}getClickTarget_(){return this.clickTarget_||\nthis.getSvgRoot()}getAbsoluteXY_(){return getPageOffset$$module$build$src$core$utils$style(this.getClickTarget_())}referencesVariables(){return!1}refreshVariableName(){}getParentInput(){let a=null;const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;const c=b.inputList;for(let d=0;d{d.stopPropagation();$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this);clearTouchIdentifier$$module$build$src$core$touch()});\nconditionalBind$$module$build$src$core$browser_events(this.textArea,\"wheel\",this,d=>{d.stopPropagation()});conditionalBind$$module$build$src$core$browser_events(this.textArea,\"keydown\",this,this.handleKeyDown)}getDom(){return this.foreignObject}getText(){return this.text}setText(a){this.textArea.value=a;this.onTextChange()}onTextChange(){const a=this.text;this.text=this.textArea.value;for(let b=this.textChangeListeners.length-1;b>=0;b--)this.textChangeListeners[b](a,this.text)}handleKeyDown(a){if(a.key===\n\"Escape\"||a.key===\"Enter\"&&(a.ctrlKey||a.metaKey)){if(this.onFinishEditing)this.onFinishEditing();a.stopPropagation()}}addTextChangeListener(a){this.textChangeListeners.push(a)}removeTextChangeListener(a){this.textChangeListeners.splice(this.textChangeListeners.indexOf(a),1)}setPlaceholderText(a){this.textArea.placeholder=a}setEditable(a){a?this.textArea.removeAttribute(\"readonly\"):this.textArea.setAttribute(\"readonly\",\"true\")}updateSize(a,b){this.foreignObject.setAttribute(\"height\",`${a.height-b.height}`);\nthis.foreignObject.setAttribute(\"width\",`${a.width}`);this.foreignObject.setAttribute(\"y\",`${b.height}`);this.workspace.RTL&&this.foreignObject.setAttribute(\"x\",`${-a.width}`)}getFocusableElement(){return this.textArea}getFocusableTree(){return this.workspace}onNodeFocus(){const a=Rect$$module$build$src$core$utils$rect.from(this.foreignObject.getBoundingClientRect());this.workspace.scrollBoundsIntoView(Rect$$module$build$src$core$utils$rect.createFromPoint(screenToWsCoordinates$$module$build$src$core$utils$svg_math(this.workspace,\na.getOrigin()),a.getWidth(),a.getHeight()))}onNodeBlur(){}canBeFocused(){return this.id?!0:!1}},module$build$src$core$comments$comment_editor={COMMENT_EDITOR_FOCUS_IDENTIFIER:COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor};module$build$src$core$comments$comment_editor.CommentEditor=CommentEditor$$module$build$src$core$comments$comment_editor;var COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button=\"_delete_bar_button\",DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button=class extends CommentBarButton$$module$build$src$core$comments$comment_bar_button{constructor(a,b,c,d){super(a,b,c,d);this.id=a;this.workspace=b;this.container=c;this.commentView=d;this.icon=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{\"class\":\"blocklyDeleteIcon\",\nhref:`${this.workspace.options.pathToMedia}delete-icon.svg`,id:`${this.id}${COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button}`},c);this.bindId=conditionalBind$$module$build$src$core$browser_events(this.icon,\"pointerdown\",this,this.performAction.bind(this))}dispose(){unbind$$module$build$src$core$browser_events(this.bindId)}reposition(){const a=this.getMargin();this.icon.setAttribute(\"x\",\"0\");const b=this.container.getBBox();this.icon.setAttribute(\"y\",\n`${a}`);this.icon.setAttribute(\"x\",`${b.width-this.getSize(!0).getWidth()}`)}performAction(a){clearTouchIdentifier$$module$build$src$core$touch();a&&a instanceof PointerEvent&&isRightButton$$module$build$src$core$browser_events(a)?a.stopPropagation():(this.getCommentView().dispose(),a==null||a.stopPropagation(),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.workspace))}},module$build$src$core$comments$delete_comment_bar_button={COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER:COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button};\nmodule$build$src$core$comments$delete_comment_bar_button.DeleteCommentBarButton=DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button;var CommentView$$module$build$src$core$comments$comment_view=class{constructor(a,b){this.workspace=a;this.commentId=b;this.collapsed=!1;this.editable=!0;this.location=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.sizeChangeListeners=[];this.disposeListeners=[];this.collapseChangeListeners=[];this.resizePointerMoveListener=this.resizePointerUpListener=null;this.disposed=this.disposing=!1;this.svgRoot=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,\n{\"class\":\"blocklyComment blocklyEditable blocklyDraggable\"});this.highlightRect=this.createHighlightRect(this.svgRoot);({topBarGroup:this.topBarGroup,topBarBackground:this.topBarBackground,deleteButton:this.deleteButton,foldoutButton:this.foldoutButton,textPreview:this.textPreview,textPreviewNode:this.textPreviewNode}=this.createTopBar(this.svgRoot));this.commentEditor=this.createTextArea();this.resizeHandle=this.createResizeHandle(this.svgRoot,a);let c;(c=a.getLayerManager())==null||c.append(this,\nBLOCK$$module$build$src$core$layers);this.size=CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize;this.setSizeWithoutFiringEvents(this.size);this.moveTo(new Coordinate$$module$build$src$core$utils$coordinate(0,0))}createHighlightRect(a){return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyCommentHighlight\"},a)}createTopBar(a){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,\n{\"class\":\"blocklyCommentTopbar\"},a);const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyCommentTopbarBackground\"},a),c=new DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button(this.commentId,this.workspace,a,this),d=new CollapseCommentBarButton$$module$build$src$core$comments$collapse_comment_bar_button(this.commentId,this.workspace,a,this);this.addDisposeListener(()=>{c.dispose();d.dispose()});const e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,\n{\"class\":\"blocklyCommentPreview blocklyCommentText blocklyText\"},a),f=document.createTextNode(\"\");e.appendChild(f);return{topBarGroup:a,topBarBackground:b,deleteButton:c,foldoutButton:d,textPreview:e,textPreviewNode:f}}createTextArea(){const a=new CommentEditor$$module$build$src$core$comments$comment_editor(this.workspace,this.commentId,()=>this.svgRoot.focus());this.svgRoot.appendChild(a.getDom());a.addTextChangeListener((b,c)=>{this.updateTextPreview(c);this.setSize(this.size)});return a}getEditorFocusableNode(){return this.commentEditor}createResizeHandle(a,\nb){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{\"class\":\"blocklyResizeHandle\",href:`${b.options.pathToMedia}resize-handle.svg`},a);conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onResizePointerDown);return a}getSvgRoot(){return this.svgRoot}getSize(){return this.collapsed?this.topBarBackground.getBBox():this.size}setSizeWithoutFiringEvents(a){const b=this.topBarBackground.getBBox(),c=this.textPreview.getBBox(),d=this.resizeHandle.getBBox();\nthis.size=a=Size$$module$build$src$core$utils$size.max(a,this.calcMinSize(b));this.svgRoot.setAttribute(\"height\",`${a.height}`);this.svgRoot.setAttribute(\"width\",`${a.width}`);this.updateHighlightRect(a);this.updateTopBarSize(a);this.commentEditor.updateSize(a,b);this.deleteButton.reposition();this.foldoutButton.reposition();this.updateTextPreviewSize(a,b,c);this.updateResizeHandlePosition(a,d)}setSize(a){const b=this.preResizeSize||this.size;this.setSizeWithoutFiringEvents(a);this.onSizeChange(b,\nthis.size)}calcMinSize(a){var b;this.updateTextPreview((b=this.commentEditor.getText())!=null?b:\"\");let c=b=getTextWidth$$module$build$src$core$utils$dom(this.textPreview);this.foldoutButton.isVisible()?c+=this.foldoutButton.getSize(!0).getWidth():b&&(c+=4);this.deleteButton.isVisible()?c+=this.deleteButton.getSize(!0).getWidth():b&&(c+=4);return new Size$$module$build$src$core$utils$size(c,a.height+20)}updateHighlightRect(a){this.highlightRect.setAttribute(\"height\",`${a.height}`);this.highlightRect.setAttribute(\"width\",\n`${a.width}`);this.workspace.RTL&&this.highlightRect.setAttribute(\"x\",`${-a.width}`)}updateTopBarSize(a){this.topBarBackground.setAttribute(\"width\",`${a.width}`)}updateTextPreviewSize(a,b,c){b=(b.height-c.height)/2;const d=this.foldoutButton.getSize(!0),e=this.deleteButton.getSize(!0);a=a.width-d.getWidth()-e.getWidth();this.textPreview.setAttribute(\"x\",`${(this.workspace.RTL?-1:1)*d.getWidth()}`);this.textPreview.setAttribute(\"y\",`${b+c.height/2}`);this.textPreview.setAttribute(\"width\",`${a}`)}updateResizeHandlePosition(a,\nb){this.resizeHandle.setAttribute(\"y\",`${a.height-b.height}`);this.resizeHandle.setAttribute(\"x\",`${a.width-b.width}`)}onSizeChange(a,b){for(let c=this.sizeChangeListeners.length-1;c>=0;c--)this.sizeChangeListeners[c](a,b)}addSizeChangeListener(a){this.sizeChangeListeners.push(a)}removeSizeChangeListener(a){this.sizeChangeListeners.splice(this.sizeChangeListeners.indexOf(a),1)}onResizePointerDown(a){this.isEditable()&&(this.bringToFront(),isRightButton$$module$build$src$core$browser_events(a)||(this.preResizeSize=\nthis.getSize(),start$$module$build$src$core$utils$drag(this.workspace,a,new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.getSize().width:this.getSize().width,this.getSize().height)),this.resizePointerUpListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onResizePointerUp),this.resizePointerMoveListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",this,this.onResizePointerMove),this.workspace.hideChaff()),\na.stopPropagation())}onResizePointerUp(a){clearTouchIdentifier$$module$build$src$core$touch();this.resizePointerUpListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerUpListener),this.resizePointerUpListener=null);this.resizePointerMoveListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerMoveListener),this.resizePointerMoveListener=null);this.setSize(this.size);this.preResizeSize=void 0}onResizePointerMove(a){a=move$$module$build$src$core$utils$drag(this.workspace,\na);this.setSizeWithoutFiringEvents(new Size$$module$build$src$core$utils$size(this.workspace.RTL?-a.x:a.x,a.y))}isCollapsed(){return this.collapsed}setCollapsed(a){(this.collapsed=a)?addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCollapsed\"):removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCollapsed\");this.setSizeWithoutFiringEvents(this.size);this.onCollapse()}onCollapse(){for(let a=this.collapseChangeListeners.length-1;a>=0;a--)this.collapseChangeListeners[a](this.collapsed)}addOnCollapseListener(a){this.collapseChangeListeners.push(a)}removeOnCollapseListener(a){this.collapseChangeListeners.splice(this.collapseChangeListeners.indexOf(a),\n1)}isEditable(){return this.editable}setEditable(a){(this.editable=a)?(addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyEditable\"),removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyReadonly\")):(removeClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyEditable\"),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyReadonly\"));this.commentEditor.setEditable(a)}getRelativeToSurfaceXY(){return this.location}moveTo(a){this.location=a;this.svgRoot.setAttribute(\"transform\",\n`translate(${a.x}, ${a.y})`)}getText(){return this.commentEditor.getText()}setText(a){this.commentEditor.setText(a)}setPlaceholderText(a){this.commentEditor.setPlaceholderText(a)}addTextChangeListener(a){this.commentEditor.addTextChangeListener(a)}removeTextChangeListener(a){this.commentEditor.removeTextChangeListener(a)}updateTextPreview(a){this.textPreviewNode.textContent=this.truncateText(a)}truncateText(a){return a.length>=12?`${a.substring(0,9)}...`:a}bringToFront(){const a=this.svgRoot.parentNode,\nb=a.childNodes;b[b.length-1]!==this.svgRoot&&a.appendChild(this.svgRoot)}onDeleteDown(a){clearTouchIdentifier$$module$build$src$core$touch();isRightButton$$module$build$src$core$browser_events(a)||this.dispose();a.stopPropagation()}dispose(){this.disposing=!0;removeNode$$module$build$src$core$utils$dom(this.svgRoot);for(let a=this.disposeListeners.length-1;a>=0;a--)this.disposeListeners[a]();this.disposeListeners.length=0;this.disposed=!0}isDisposed(){return this.disposed}isDeadOrDying(){return this.disposing||\nthis.disposed}addDisposeListener(a){this.disposeListeners.push(a)}removeDisposeListener(a){this.disposeListeners.splice(this.disposeListeners.indexOf(a),1)}getCommentBarButtons(){return[this.foldoutButton,this.deleteButton]}};CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize=new Size$$module$build$src$core$utils$size(120,100);register$$module$build$src$core$css(\"\\n.injectionDiv {\\n --commentFillColour: #FFFCC7;\\n --commentBorderColour: #F2E49B;\\n}\\n\\n.blocklyComment .blocklyTextarea {\\n background-color: var(--commentFillColour);\\n border: 1px solid var(--commentBorderColour);\\n box-sizing: border-box;\\n display: block;\\n outline: 0;\\n padding: 5px;\\n resize: none;\\n width: 100%;\\n height: 100%;\\n}\\n\\n.blocklyReadonly.blocklyComment .blocklyTextarea {\\n cursor: inherit;\\n}\\n\\n.blocklyDeleteIcon {\\n width: 20px;\\n height: 20px;\\n display: none;\\n cursor: pointer;\\n}\\n\\n.blocklyFoldoutIcon {\\n width: 20px;\\n height: 20px;\\n transform-origin: 12px 12px;\\n cursor: pointer;\\n}\\n.blocklyResizeHandle {\\n width: 12px;\\n height: 12px;\\n cursor: se-resize;\\n}\\n.blocklyReadonly.blocklyComment .blocklyResizeHandle {\\n cursor: inherit;\\n}\\n\\n.blocklyCommentTopbarBackground {\\n fill: var(--commentBorderColour);\\n height: 24px;\\n}\\n\\n.blocklyComment .blocklyCommentPreview.blocklyText {\\n fill: #000;\\n dominant-baseline: middle;\\n visibility: hidden;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyCommentPreview {\\n visibility: visible;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyCommentForeignObject,\\n.blocklyCollapsed.blocklyComment .blocklyResizeHandle {\\n display: none;\\n}\\n\\n.blocklyCollapsed.blocklyComment .blocklyFoldoutIcon {\\n transform: rotate(-90deg);\\n}\\n\\n.blocklyRTL .blocklyCommentTopbar {\\n transform: scale(-1, 1);\\n}\\n\\n.blocklyRTL .blocklyCommentForeignObject {\\n direction: rtl;\\n}\\n\\n.blocklyRTL .blocklyCommentPreview {\\n /* Revert the scale and control RTL using direction instead. */\\n transform: scale(-1, 1);\\n direction: rtl;\\n}\\n\\n.blocklyRTL .blocklyResizeHandle {\\n transform: scale(-1, 1);\\n cursor: sw-resize;\\n}\\n\\n.blocklyCommentHighlight {\\n fill: none;\\n}\\n\\n.blocklyCommentText.blocklyActiveFocus {\\n border-color: #fc3;\\n border-width: 2px;\\n}\\n\\n.blocklySelected .blocklyCommentHighlight {\\n stroke: #fc3;\\n stroke-width: 3px;\\n}\\n\\n.blocklyCollapsed.blocklySelected .blocklyCommentHighlight {\\n stroke: none;\\n}\\n\\n.blocklyCollapsed.blocklySelected .blocklyCommentTopbarBackground {\\n stroke: #fc3;\\n stroke-width: 3px;\\n}\\n\");\nvar module$build$src$core$comments$comment_view={};module$build$src$core$comments$comment_view.CommentView=CommentView$$module$build$src$core$comments$comment_view;var WorkspaceComment$$module$build$src$core$comments$workspace_comment=class{constructor(a,b){this.workspace=a;this.text=\"\";this.collapsed=!1;this.deletable=this.movable=this.editable=!0;this.location=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.disposing=this.disposed=!1;this.id=b&&!a.getCommentById(b)?b:genUid$$module$build$src$core$utils$idgenerator();this.size=CommentView$$module$build$src$core$comments$comment_view.defaultCommentSize;a.addTopComment(this);this.fireCreateEvent()}fireCreateEvent(){isEnabled$$module$build$src$core$events$utils()&&\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CREATE))(this))}fireDeleteEvent(){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_DELETE))(this))}fireChangeEvent(a,b){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_CHANGE))(this,\na,b))}fireCollapseEvent(a){isEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_COLLAPSE))(this,a))}setText(a){const b=this.text;this.text=a;this.fireChangeEvent(b,a)}getText(){return this.text}setSize(a){const b=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_RESIZE))(this);this.size=a;b.recordCurrentSizeAsNewSize();\nfire$$module$build$src$core$events$utils(b)}getSize(){return this.size}setCollapsed(a){this.collapsed=a;this.fireCollapseEvent(a)}isCollapsed(){return this.collapsed}setEditable(a){this.editable=a}isEditable(){return this.isOwnEditable()&&!this.workspace.isReadOnly()}isOwnEditable(){return this.editable}setMovable(a){this.movable=a}isMovable(){return this.isOwnMovable()&&!this.workspace.isReadOnly()&&!this.workspace.isFlyout}isOwnMovable(){return this.movable}setDeletable(a){this.deletable=a}isDeletable(){return this.isOwnDeletable()&&\n!this.isDeadOrDying()&&!this.workspace.isReadOnly()&&!this.workspace.isFlyout}isOwnDeletable(){return this.deletable}moveTo(a,b){const c=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.COMMENT_MOVE))(this);b&&c.setReason(b);this.location=a;c.recordNew();fire$$module$build$src$core$events$utils(c)}getRelativeToSurfaceXY(){return this.location}dispose(){this.disposing=!0;this.fireDeleteEvent();this.workspace.removeTopComment(this);this.disposed=!0}isDisposed(){return this.disposed}isDeadOrDying(){return this.disposing||\nthis.disposed}},module$build$src$core$comments$workspace_comment={};module$build$src$core$comments$workspace_comment.WorkspaceComment=WorkspaceComment$$module$build$src$core$comments$workspace_comment;var RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment=class extends WorkspaceComment$$module$build$src$core$comments$workspace_comment{constructor(a,b){super(a,b);this.dragStrategy=new CommentDragStrategy$$module$build$src$core$dragging$comment_drag_strategy(this);this.workspace=a;this.view=new CommentView$$module$build$src$core$comments$comment_view(a,this.id);this.view.setSize(this.getSize());this.view.setEditable(this.isEditable());this.view.getSvgRoot().setAttribute(\"data-id\",\nthis.id);this.view.getSvgRoot().setAttribute(\"id\",this.id);this.addModelUpdateBindings();conditionalBind$$module$build$src$core$browser_events(this.view.getSvgRoot(),\"pointerdown\",this,this.startGesture)}addModelUpdateBindings(){this.view.addTextChangeListener((a,b)=>void super.setText(b));this.view.addSizeChangeListener((a,b)=>void super.setSize(b));this.view.addOnCollapseListener(()=>void super.setCollapsed(this.view.isCollapsed()));this.view.addDisposeListener(()=>{this.isDeadOrDying()||this.dispose()})}setText(a){this.view.setText(a)}setPlaceholderText(a){this.view.setPlaceholderText(a)}setSize(a){this.view.setSize(a)}setCollapsed(a){this.view.setCollapsed(a)}setEditable(a){super.setEditable(a);\nthis.view.setEditable(this.isEditable())}getSvgRoot(){return this.view.getSvgRoot()}getSize(){return super.getSize()}getBoundingRectangle(){const a=this.getRelativeToSurfaceXY();var b,c;const d=(c=(b=this.view)==null?void 0:b.getSize())!=null?c:this.getSize();this.workspace.RTL?(b=a.x-d.width,c=a.x):(b=a.x,c=a.x+d.width);return new Rect$$module$build$src$core$utils$rect(a.y,a.y+d.height,b,c)}moveBy(a,b,c){const d=this.getRelativeToSurfaceXY();a=new Coordinate$$module$build$src$core$utils$coordinate(d.x+\na,d.y+b);this.moveTo(a,c)}moveTo(a,b){super.moveTo(a,b);this.view.moveTo(a)}moveDuringDrag(a){this.location=a;this.view.moveTo(a)}setDragging(a){a?addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDragging\"):removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDragging\")}dispose(){this.disposing=!0;const a=$.getFocusManager$$module$build$src$core$focus_manager();a.getFocusedNode()===this&&setTimeout(()=>a.focusTree(this.workspace),0);this.view.isDeadOrDying()||\nthis.view.dispose();super.dispose()}startGesture(a){const b=this.workspace.getGesture(a);b&&(b.handleCommentStart(a,this),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this))}setDeleteStyle(a){a?addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDraggingDelete\"):removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklyDraggingDelete\")}isCopyable(){return this.isOwnMovable()&&this.isOwnDeletable()}isMovable(){return this.dragStrategy.isMovable()}startDrag(){this.dragStrategy.startDrag()}drag(a){this.dragStrategy.drag(a)}endDrag(){this.dragStrategy.endDrag()}revertDrag(){this.dragStrategy.revertDrag()}select(){addClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\n\"blocklySelected\");fireSelectedEvent$$module$build$src$core$common(this)}unselect(){removeClass$$module$build$src$core$utils$dom(this.getSvgRoot(),\"blocklySelected\");fireSelectedEvent$$module$build$src$core$common(null)}toCopyData(){return{paster:WorkspaceCommentPaster$$module$build$src$core$clipboard$workspace_comment_paster.TYPE,commentState:save$$module$build$src$core$serialization$workspace_comments(this,{addCoordinates:!0,saveIds:!1})}}showContextMenu(a){const b=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({comment:this,\nfocusedNode:this},a);let c;c=a instanceof PointerEvent?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this.workspace,this.getRelativeToSurfaceXY()).translate(10,10);show$$module$build$src$core$contextmenu(a,b,this.workspace.RTL,this.workspace,c)}snapToGrid(){if(!this.isDeadOrDying()){var a=this.workspace.getGrid();if(a!=null&&a.shouldSnap()){var b=this.getRelativeToSurfaceXY();a=a.alignXY(b);a!==b&&this.moveTo(a,\n[\"snap\"])}}}getEditorFocusableNode(){return this.view.getEditorFocusableNode()}getFocusableElement(){return this.getSvgRoot()}getFocusableTree(){return this.workspace}onNodeFocus(){this.select();let a;(a=this.workspace.getLayerManager())==null||a.append(this,BLOCK$$module$build$src$core$layers);this.workspace.scrollBoundsIntoView(this.getBoundingRectangle())}onNodeBlur(){this.unselect()}canBeFocused(){return!0}},module$build$src$core$comments$rendered_workspace_comment={};\nmodule$build$src$core$comments$rendered_workspace_comment.RenderedWorkspaceComment=RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment;var module$build$src$core$xml={};module$build$src$core$xml.appendDomToWorkspace=appendDomToWorkspace$$module$build$src$core$xml;module$build$src$core$xml.blockToDom=blockToDom$$module$build$src$core$xml;module$build$src$core$xml.blockToDomWithXY=blockToDomWithXY$$module$build$src$core$xml;module$build$src$core$xml.clearWorkspaceAndLoadFromXml=clearWorkspaceAndLoadFromXml$$module$build$src$core$xml;module$build$src$core$xml.deleteNext=deleteNext$$module$build$src$core$xml;\nmodule$build$src$core$xml.domToBlock=$.domToBlock$$module$build$src$core$xml;module$build$src$core$xml.domToBlockInternal=domToBlockInternal$$module$build$src$core$xml;module$build$src$core$xml.domToPrettyText=domToPrettyText$$module$build$src$core$xml;module$build$src$core$xml.domToText=domToText$$module$build$src$core$xml;module$build$src$core$xml.domToVariables=domToVariables$$module$build$src$core$xml;module$build$src$core$xml.domToWorkspace=$.domToWorkspace$$module$build$src$core$xml;\nmodule$build$src$core$xml.loadWorkspaceComment=loadWorkspaceComment$$module$build$src$core$xml;module$build$src$core$xml.saveWorkspaceComment=saveWorkspaceComment$$module$build$src$core$xml;module$build$src$core$xml.variablesToDom=variablesToDom$$module$build$src$core$xml;module$build$src$core$xml.workspaceToDom=workspaceToDom$$module$build$src$core$xml;var BlockCreate$$module$build$src$core$events$events_block_create=class extends BlockBase$$module$build$src$core$events$events_block_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.BLOCK_CREATE;a&&(a.isShadow()&&(this.recordUndo=!1),this.xml=blockToDomWithXY$$module$build$src$core$xml(a),this.ids=getDescendantIds$$module$build$src$core$events$utils(a),this.json=save$$module$build$src$core$serialization$blocks(a,{addCoordinates:!0}))}toJson(){const a=super.toJson();\nif(!this.xml)throw Error(\"The block XML is undefined. Either pass a block to the constructor, or call fromJson\");if(!this.ids)throw Error(\"The block IDs are undefined. Either pass a block to the constructor, or call fromJson\");if(!this.json)throw Error(\"The block JSON is undefined. Either pass a block to the constructor, or call fromJson\");a.xml=domToText$$module$build$src$core$xml(this.xml);a.ids=this.ids;a.json=this.json;this.recordUndo||(a.recordUndo=this.recordUndo);return a}static fromJson(a,\nb,c){b=super.fromJson(a,b,c!=null?c:new BlockCreate$$module$build$src$core$events$events_block_create);b.xml=$.textToDom$$module$build$src$core$utils$xml(a.xml);b.ids=a.ids;b.json=a.json;a.recordUndo!==void 0&&(b.recordUndo=a.recordUndo);return b}run(a){const b=this.getEventWorkspace_();if(!this.json)throw Error(\"The block JSON is undefined. Either pass a block to the constructor, or call fromJson\");if(!this.ids)throw Error(\"The block IDs are undefined. Either pass a block to the constructor, or call fromJson\");\nif(!allShadowBlocks$$module$build$src$core$events$events_block_create(b,this.ids))if(a)append$$module$build$src$core$serialization$blocks(this.json,b);else for(a=0;aa.getBlockById(c)).filter(c=>c&&c.isShadow()).length===b.length};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.BLOCK_CREATE,BlockCreate$$module$build$src$core$events$events_block_create);var module$build$src$core$events$events_block_create={};module$build$src$core$events$events_block_create.BlockCreate=BlockCreate$$module$build$src$core$events$events_block_create;var ThemeChange$$module$build$src$core$events$events_theme_change=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b){super(b);this.type=EventType$$module$build$src$core$events$type.THEME_CHANGE;this.themeName=a}toJson(){const a=super.toJson();if(!this.themeName)throw Error(\"The theme name is undefined. Either pass a theme name to the constructor, or call fromJson\");a.themeName=this.themeName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new ThemeChange$$module$build$src$core$events$events_theme_change);\nb.themeName=a.themeName;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.THEME_CHANGE,ThemeChange$$module$build$src$core$events$events_theme_change);var module$build$src$core$events$events_theme_change={};module$build$src$core$events$events_theme_change.ThemeChange=ThemeChange$$module$build$src$core$events$events_theme_change;var ViewportChange$$module$build$src$core$events$events_viewport=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b,c,d,e){super(d);this.type=EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE;this.viewTop=a;this.viewLeft=b;this.scale=c;this.oldScale=e}toJson(){const a=super.toJson();if(this.viewTop===void 0)throw Error(\"The view top is undefined. Either pass a value to the constructor, or call fromJson\");if(this.viewLeft===void 0)throw Error(\"The view left is undefined. Either pass a value to the constructor, or call fromJson\");\nif(this.scale===void 0)throw Error(\"The scale is undefined. Either pass a value to the constructor, or call fromJson\");if(this.oldScale===void 0)throw Error(\"The old scale is undefined. Either pass a value to the constructor, or call fromJson\");a.viewTop=this.viewTop;a.viewLeft=this.viewLeft;a.scale=this.scale;a.oldScale=this.oldScale;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new ViewportChange$$module$build$src$core$events$events_viewport);b.viewTop=a.viewTop;b.viewLeft=a.viewLeft;\nb.scale=a.scale;b.oldScale=a.oldScale;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE,ViewportChange$$module$build$src$core$events$events_viewport);var module$build$src$core$events$events_viewport={};module$build$src$core$events$events_viewport.ViewportChange=ViewportChange$$module$build$src$core$events$events_viewport;var TEST_ONLY$$module$build$src$core$field_registry={fromJsonInternal:fromJsonInternal$$module$build$src$core$field_registry},module$build$src$core$field_registry={TEST_ONLY:TEST_ONLY$$module$build$src$core$field_registry};module$build$src$core$field_registry.fromJson=$.fromJson$$module$build$src$core$field_registry;module$build$src$core$field_registry.register=register$$module$build$src$core$field_registry;module$build$src$core$field_registry.unregister=unregister$$module$build$src$core$field_registry;var FieldDropdown$$module$build$src$core$field_dropdown=class extends Field$$module$build$src$core$field{constructor(a,b,c){super(Field$$module$build$src$core$field.SKIP_SETUP);this.svgArrow=this.arrow=this.imageElement=this.menu_=this.selectedMenuItem=null;this.SERIALIZABLE=!0;this.clickTarget_=this.suffixField=this.prefixField=this.generatedOptions=null;a!==Field$$module$build$src$core$field.SKIP_SETUP&&(this.setOptions(a),c&&this.configure_(c),b&&this.setValidator(b))}fromXml(a){this.isOptionListDynamic()&&\nthis.getOptions(!1);this.setValue(a.textContent)}loadState(a){this.loadLegacyState(FieldDropdown$$module$build$src$core$field_dropdown,a)||(this.isOptionListDynamic()&&this.getOptions(!1),this.setValue(a))}initView(){this.shouldAddBorderRect_()?this.createBorderRect_():this.clickTarget_=this.sourceBlock_.getSvgRoot();this.createTextElement_();this.imageElement=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{},this.fieldGroup_);this.getConstants().FIELD_DROPDOWN_SVG_ARROW?\nthis.createSVGArrow_():this.createTextArrow_();this.borderRect_&&addClass$$module$build$src$core$utils$dom(this.borderRect_,\"blocklyDropdownRect\");this.fieldGroup_&&(addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyField\"),addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\"blocklyDropdownField\"))}shouldAddBorderRect_(){let a;return!this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW||this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW&&!((a=this.getSourceBlock())==\nnull?0:a.isShadow())}createTextArrow_(){this.arrow=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TSPAN,{},this.textElement_);let a;this.arrow.appendChild(document.createTextNode(((a=this.getSourceBlock())==null?0:a.RTL)?FieldDropdown$$module$build$src$core$field_dropdown.ARROW_CHAR+\" \":\" \"+FieldDropdown$$module$build$src$core$field_dropdown.ARROW_CHAR));this.getConstants().FIELD_TEXT_BASELINE_CENTER&&this.arrow.setAttribute(\"dominant-baseline\",\"central\");let b;\n((b=this.getSourceBlock())==null?0:b.RTL)?this.getTextElement().insertBefore(this.arrow,this.textContent_):this.getTextElement().appendChild(this.arrow)}createSVGArrow_(){this.svgArrow=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{height:this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE+\"px\",width:this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE+\"px\"},this.fieldGroup_);this.svgArrow.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.getConstants().FIELD_DROPDOWN_SVG_ARROW_DATAURI)}showEditor_(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.dropdownCreate();this.menu_&&(this.menu_.openingCoords=a&&typeof a.clientX===\"number\"?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):null,clearContent$$module$build$src$core$dropdowndiv(),a=this.menu_.render(getContentDiv$$module$build$src$core$dropdowndiv()),addClass$$module$build$src$core$utils$dom(a,\n\"blocklyDropdownMenu\"),this.getConstants().FIELD_DROPDOWN_COLOURED_DIV&&(b=b.getColour(),a=this.sourceBlock_.getColourTertiary(),setColour$$module$build$src$core$dropdowndiv(b,a)),showPositionedByField$$module$build$src$core$dropdowndiv(this,this.dropdownDispose_.bind(this)),getContentDiv$$module$build$src$core$dropdowndiv().style.height=`${this.menu_.getSize().height}px`,this.menu_.focus(),this.selectedMenuItem&&this.menu_.setHighlighted(this.selectedMenuItem),this.applyColour())}dropdownCreate(){const a=\nthis.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;const b=new Menu$$module$build$src$core$menu;b.setRole(Role$$module$build$src$core$utils$aria.LISTBOX);this.menu_=b;const c=this.getOptions(!1);this.selectedMenuItem=null;for(let e=0;eb[1]===a)?a:(this.sourceBlock_&&console.warn(\"Cannot set the dropdown's value to an unavailable option. Block type: \"+this.sourceBlock_.type+\", Field name: \"+this.name+\", Value: \"+a),null)}doValueUpdate_(a){super.doValueUpdate_(a);\na=this.getOptions(!0);for(let b=0,c;c=a[b];b++)c[1]===this.value_&&(this.selectedOption=c)}applyColour(){const a=this.sourceBlock_;this.borderRect_&&(this.borderRect_.setAttribute(\"stroke\",a.getColourTertiary()),this.menu_?this.borderRect_.setAttribute(\"fill\",a.getColourTertiary()):this.borderRect_.setAttribute(\"fill\",\"transparent\"));a&&this.arrow&&(a.isShadow()?this.arrow.style.fill=a.getColourSecondary():this.arrow.style.fill=a.getColour())}render_(){this.getTextContent().nodeValue=\"\";this.imageElement.style.display=\n\"none\";const a=this.selectedOption&&this.selectedOption[0];isImageProperties$$module$build$src$core$field_dropdown(a)?this.renderSelectedImage(a):this.renderSelectedText();this.positionBorderRect_()}renderSelectedImage(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.imageElement.style.display=\"\";this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",a.src);this.imageElement.setAttribute(\"height\",String(a.height));\nthis.imageElement.setAttribute(\"width\",String(a.width));const c=Number(a.height);a=Number(a.width);var d=!!this.borderRect_;const e=Math.max(d?this.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT:0,c+FieldDropdown$$module$build$src$core$field_dropdown.IMAGE_Y_PADDING);d=d?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0;let f;f=this.svgArrow?this.positionSVGArrow(a+d,e/2-this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE/2):getTextWidth$$module$build$src$core$utils$dom(this.arrow);this.size_=new Size$$module$build$src$core$utils$size(a+\nf+d*2,e);let g=0;b.RTL?this.imageElement.setAttribute(\"x\",`${d+f}`):(g=a+f,this.getTextElement().setAttribute(\"text-anchor\",\"end\"),this.imageElement.setAttribute(\"x\",`${d}`));this.imageElement.setAttribute(\"y\",String(e/2-c/2));this.positionTextElement_(g+d,a+f)}renderSelectedText(){this.getTextContent().nodeValue=this.getDisplayText_();var a=this.getTextElement();addClass$$module$build$src$core$utils$dom(a,\"blocklyDropdownText\");a.setAttribute(\"text-anchor\",\"start\");var b=!!this.borderRect_;a=Math.max(b?\nthis.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT:0,this.getConstants().FIELD_TEXT_HEIGHT);const c=getTextWidth$$module$build$src$core$utils$dom(this.getTextElement());b=b?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0;let d=0;this.svgArrow&&(d=this.positionSVGArrow(c+b,a/2-this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE/2));this.size_=new Size$$module$build$src$core$utils$size(c+d+b*2,a);this.positionTextElement_(b,c)}positionSVGArrow(a,b){if(!this.svgArrow)return 0;const c=this.getSourceBlock();\nif(!c)throw new UnattachedFieldError$$module$build$src$core$field;const d=this.borderRect_?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0,e=this.getConstants().FIELD_DROPDOWN_SVG_ARROW_PADDING,f=this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE;this.svgArrow.setAttribute(\"transform\",\"translate(\"+(c.RTL?d:a+e)+\",\"+b+\")\");return f+e}getText_(){if(!this.selectedOption)return null;const a=this.selectedOption[0];if(isImageProperties$$module$build$src$core$field_dropdown(a))return a.alt;if(typeof HTMLElement!==\n\"undefined\"&&a instanceof HTMLElement){let b,c;return(c=(b=a.title)!=null?b:a.ariaLabel)!=null?c:a.innerText}if(typeof a===\"string\")return a;console.warn(\"Can't get text for existing dropdown option. If you're using HTMLElement dropdown options in node, ensure you're using jsdom-global or similar.\");return null}static fromJson(a){if(!a.options)throw Error(\"options are required for the dropdown field. The options property must be assigned an array of [humanReadableValue, languageNeutralValue] tuples.\");\nreturn new this(a.options,void 0,a)}trimOptions(a){let b=!1;const c=a.map(g=>{if(g===FieldDropdown$$module$build$src$core$field_dropdown.SEPARATOR)return b=!0,g;const [h,k]=g;if(typeof h===\"string\")return[replaceMessageReferences$$module$build$src$core$utils$parsing(h),k];b=!0;return[isImageProperties$$module$build$src$core$field_dropdown(h)?Object.assign({},h,{alt:replaceMessageReferences$$module$build$src$core$utils$parsing(h.alt)}):h,k]});if(b||a.length<2)return{options:c};var d=c.map(([g])=>g),\ne=shortestStringLength$$module$build$src$core$utils$string(d);a=commonWordPrefix$$module$build$src$core$utils$string(d,e);const f=commonWordSuffix$$module$build$src$core$utils$string(d,e);if(!a&&!f||e<=a+f)return{options:c};e=a?d[0].substring(0,a-1):void 0;d=f?d[0].substr(1-f):void 0;return{options:this.applyTrim(c,a,f),prefix:e,suffix:d}}applyTrim(a,b,c){return a.map(([d,e])=>[d.substring(b,d.length-c),e])}validateOptions(a){if(!Array.isArray(a))throw TypeError(\"FieldDropdown options must be an array.\");\nif(!a.length)throw TypeError(\"FieldDropdown options must not be an empty array.\");let b=!1;for(let c=0;c0&&!!a.snap;return b}static parseThemeOptions(a){a=a.theme||Classic$$module$build$src$core$theme$classic;return typeof a===\"string\"?getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.THEME,a):a instanceof Theme$$module$build$src$core$theme?a:Theme$$module$build$src$core$theme.defineTheme(a.name||\"builtin\"+getNextUniqueId$$module$build$src$core$utils$idgenerator(),a)}},module$build$src$core$options=\n{};module$build$src$core$options.Options=Options$$module$build$src$core$options;var BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy=class{constructor(a,b){this.bubble=a;this.workspace=b;this.startLoc=null}isMovable(){return!0}startDrag(){this.startLoc=this.bubble.getRelativeToSurfaceXY();this.workspace.setResizesEnabled(!1);let a;(a=this.workspace.getLayerManager())==null||a.moveToDragLayer(this.bubble);this.bubble.setDragging&&this.bubble.setDragging(!0)}drag(a){this.bubble.moveDuringDrag(a)}endDrag(){this.workspace.setResizesEnabled(!0);let a;(a=this.workspace.getLayerManager())==\nnull||a.moveOffDragLayer(this.bubble,BUBBLE$$module$build$src$core$layers);this.bubble.setDragging(!1)}revertDrag(){this.startLoc&&this.bubble.moveDuringDrag(this.startLoc)}},module$build$src$core$dragging$bubble_drag_strategy={};module$build$src$core$dragging$bubble_drag_strategy.BubbleDragStrategy=BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy;var _a$$module$build$src$core$bubbles$bubble,Bubble$$module$build$src$core$bubbles$bubble=class{constructor(a,b,c,d,e){this.workspace=a;this.anchor=b;this.ownerRect=c;this.owner=e;this.size=new Size$$module$build$src$core$utils$size(0,0);this.colour=\"#ffffff\";this.disposed=!1;this.relativeLeft=this.relativeTop=0;this.dragStrategy=new BubbleDragStrategy$$module$build$src$core$dragging$bubble_drag_strategy(this,this.workspace);this.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();this.svgRoot=\ncreateSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyBubble\"},a.getBubbleCanvas());a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyEmboss\"},this.svgRoot);this.tail=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyBubbleTail\"},a);this.background=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,\n{\"class\":\"blocklyDraggable\",x:0,y:0,rx:_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH,ry:_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},a);this.contentContainer=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},this.svgRoot);this.focusableElement=d!=null?d:this.svgRoot;this.focusableElement.setAttribute(\"id\",this.id);conditionalBind$$module$build$src$core$browser_events(this.background,\"pointerdown\",this,this.onMouseDown);conditionalBind$$module$build$src$core$browser_events(this.focusableElement,\n\"keydown\",this,this.onKeyDown)}dispose(){removeNode$$module$build$src$core$utils$dom(this.svgRoot);this.disposed=!0}setAnchorLocation(a,b=!1){this.anchor=a;b?this.positionByRect(this.ownerRect):this.positionRelativeToAnchor();this.renderTail()}setPositionRelativeToAnchor(a,b){this.relativeLeft=a;this.relativeTop=b;this.positionRelativeToAnchor();this.renderTail()}getSize(){return this.size}setSize(a,b=!1){a.width=Math.max(a.width,_a$$module$build$src$core$bubbles$bubble.MIN_SIZE);a.height=Math.max(a.height,\n_a$$module$build$src$core$bubbles$bubble.MIN_SIZE);this.size=a;this.background.setAttribute(\"width\",`${a.width}`);this.background.setAttribute(\"height\",`${a.height}`);b?this.positionByRect(this.ownerRect):this.positionRelativeToAnchor();this.renderTail()}getColour(){return this.colour}setColour(a){this.colour=a;this.tail.setAttribute(\"fill\",a);this.background.setAttribute(\"fill\",a)}onMouseDown(a){let b;(b=this.workspace.getGesture(a))==null||b.handleBubbleStart(a,this);$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this)}onKeyDown(a){a.key===\n\"Escape\"&&this.owner&&(this.owner.setBubbleVisible(!1),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.owner))}positionRelativeToAnchor(){let a=this.anchor.x;a=this.workspace.RTL?a-(this.relativeLeft+this.size.width):a+this.relativeLeft;this.moveTo(a,this.relativeTop+this.anchor.y)}moveTo(a,b){this.svgRoot.setAttribute(\"transform\",`translate(${a}, ${b})`)}positionByRect(a=new Rect$$module$build$src$core$utils$rect(0,0,0,0)){var b=this.workspace.getMetricsManager().getViewMetrics(!0),\nc=this.getOptimalRelativeLeft(b),d=this.getOptimalRelativeTop(b);const e={x:c,y:-this.size.height-this.workspace.getRenderer().getConstants().MIN_BLOCK_HEIGHT},f={x:-this.size.width-30,y:d};d={x:a.getWidth(),y:d};var g={x:c,y:a.getHeight()};c=a.getWidth()a.width)return b;a=this.getWorkspaceViewRect(a);if(this.workspace.RTL){var c=this.anchor.x-b;c-this.size.widtha.right&&(b=-(a.right-this.anchor.x))}else{c=b+this.anchor.x;const d=c+this.size.width;ca.right&&(b=a.right-this.anchor.x-this.size.width)}return b}getOptimalRelativeTop(a){let b=-this.size.height/4;if(this.size.height>a.height)return b;const c=this.anchor.y+b,d=c+this.size.height;a=this.getWorkspaceViewRect(a);\nca.bottom&&(b=a.bottom-this.anchor.y-this.size.height);return b}getWorkspaceViewRect(a){const b=a.top;let c=a.top+a.height,d=a.left;a=a.left+a.width;c-=this.getScrollbarThickness();this.workspace.RTL?d-=this.getScrollbarThickness():a-=this.getScrollbarThickness();return new Rect$$module$build$src$core$utils$rect(b,c,d,a)}getScrollbarThickness(){return Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness/this.workspace.scale}renderTail(){const a=[];var b=this.size.width/\n2,c=this.size.height/2,d=-this.relativeLeft,e=-this.relativeTop;if(b===d&&c===e)a.push(\"M \"+b+\",\"+c);else{e-=c;d-=b;this.workspace.RTL&&(d*=-1);var f=Math.sqrt(e*e+d*d),g=Math.acos(d/f);e<0&&(g=2*Math.PI-g);var h=g+Math.PI/2;h>Math.PI*2&&(h-=Math.PI*2);var k=Math.sin(h);const m=Math.cos(h);let n=(this.size.width+this.size.height)/_a$$module$build$src$core$bubbles$bubble.TAIL_THICKNESS;n=Math.min(n,this.size.width,this.size.height)/4;h=1-_a$$module$build$src$core$bubbles$bubble.ANCHOR_RADIUS/f;d=b+\nh*d;e=c+h*e;h=b+n*m;const p=c+n*k;b-=n*m;c-=n*k;k=toRadians$$module$build$src$core$utils$math(this.workspace.RTL?-_a$$module$build$src$core$bubbles$bubble.TAIL_ANGLE:_a$$module$build$src$core$bubbles$bubble.TAIL_ANGLE);k=g+k;k>Math.PI*2&&(k-=Math.PI*2);g=Math.sin(k)*f/_a$$module$build$src$core$bubbles$bubble.TAIL_BEND;f=Math.cos(k)*f/_a$$module$build$src$core$bubbles$bubble.TAIL_BEND;a.push(\"M\"+h+\",\"+p);a.push(\"C\"+(h+f)+\",\"+(p+g)+\" \"+d+\",\"+e+\" \"+d+\",\"+e);a.push(\"C\"+d+\",\"+e+\" \"+(b+f)+\",\"+(c+g)+\" \"+\nb+\",\"+c)}a.push(\"z\");let l;(l=this.tail)==null||l.setAttribute(\"d\",a.join(\" \"))}bringToFront(){let a;const b=(a=this.svgRoot)==null?void 0:a.parentNode;return this.svgRoot&&(b==null?void 0:b.lastChild)!==this.svgRoot?(b==null||b.appendChild(this.svgRoot),!0):!1}getRelativeToSurfaceXY(){return new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.relativeLeft+this.anchor.x-this.size.width:this.anchor.x+this.relativeLeft,this.anchor.y+this.relativeTop)}getSvgRoot(){return this.svgRoot}moveDuringDrag(a){this.moveTo(a.x,\na.y);this.relativeLeft=this.workspace.RTL?this.anchor.x-a.x-this.size.width:a.x-this.anchor.x;this.relativeTop=a.y-this.anchor.y;this.renderTail()}setDragging(a){}setDeleteStyle(a){}isDeletable(){return!1}showContextMenu(a){}isMovable(){return!0}startDrag(){this.dragStrategy.startDrag()}drag(a){this.dragStrategy.drag(a)}endDrag(){this.dragStrategy.endDrag()}revertDrag(){this.dragStrategy.revertDrag()}select(){fireSelectedEvent$$module$build$src$core$common(this)}unselect(){fireSelectedEvent$$module$build$src$core$common(null)}getFocusableElement(){return this.focusableElement}getFocusableTree(){return this.workspace}onNodeFocus(){this.select();\nthis.bringToFront();var a=this.getRelativeToSurfaceXY();const b=this.getSize();a=new Rect$$module$build$src$core$utils$rect(a.y,a.y+b.height,a.x,a.x+b.width);this.workspace.scrollBoundsIntoView(a)}onNodeBlur(){this.unselect()}canBeFocused(){return!0}getOwner(){return this.owner}};_a$$module$build$src$core$bubbles$bubble=Bubble$$module$build$src$core$bubbles$bubble;Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH=6;\nBubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER=_a$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2;Bubble$$module$build$src$core$bubbles$bubble.MIN_SIZE=_a$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER;Bubble$$module$build$src$core$bubbles$bubble.TAIL_THICKNESS=1;Bubble$$module$build$src$core$bubbles$bubble.TAIL_ANGLE=20;Bubble$$module$build$src$core$bubbles$bubble.TAIL_BEND=4;Bubble$$module$build$src$core$bubbles$bubble.ANCHOR_RADIUS=8;\nvar module$build$src$core$bubbles$bubble={};module$build$src$core$bubbles$bubble.Bubble=Bubble$$module$build$src$core$bubbles$bubble;var MiniWorkspaceBubble$$module$build$src$core$bubbles$mini_workspace_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(b,c,d);this.workspace=b;this.anchor=c;this.ownerRect=d;this.autoLayout=!0;b=new Options$$module$build$src$core$options(a);this.validateWorkspaceOptions(b);this.svgDialog=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{x:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH,y:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},\nthis.contentContainer);a.parentWorkspace=this.workspace;this.miniWorkspace=this.newWorkspaceSvg(new Options$$module$build$src$core$options(a));this.miniWorkspace.internalIsMutator=!0;a=this.miniWorkspace.createDom(\"blocklyMutatorBackground\");this.svgDialog.appendChild(a);b.languageTree&&(a.insertBefore(this.miniWorkspace.addFlyout(Svg$$module$build$src$core$utils$svg.G),this.miniWorkspace.getCanvas()),a=this.miniWorkspace.getFlyout(),a==null||a.init(this.miniWorkspace),a==null||a.show(b.languageTree));\naddClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyMiniWorkspaceBubble\");this.miniWorkspace.addChangeListener(this.onWorkspaceChange.bind(this));let e,f;(e=this.miniWorkspace.getFlyout())==null||(f=e.getWorkspace())==null||f.addChangeListener(this.onWorkspaceChange.bind(this));this.updateBubbleSize()}dispose(){this.miniWorkspace.dispose();super.dispose()}getWorkspace(){return this.miniWorkspace}addWorkspaceChangeListener(a){this.miniWorkspace.addChangeListener(a)}validateWorkspaceOptions(a){if(a.hasCategories)throw Error(\"The miniworkspace bubble does not support toolboxes with categories\");\nif(a.hasTrashcan)throw Error(\"The miniworkspace bubble does not support trashcans\");if(a.zoomOptions.controls||a.zoomOptions.wheel||a.zoomOptions.pinch)throw Error(\"The miniworkspace bubble does not support zooming\");if(a.moveOptions.scrollbars||a.moveOptions.wheel||a.moveOptions.drag)throw Error(\"The miniworkspace bubble does not scrolling/moving the workspace\");if(a.horizontalLayout)throw Error(\"The miniworkspace bubble does not support horizontal layouts\");}onWorkspaceChange(){this.bumpBlocksIntoBounds();\nthis.updateBubbleSize()}bumpBlocksIntoBounds(){if(!this.miniWorkspace.isDragging()||this.miniWorkspace.keyboardMoveInProgress)for(const a of this.miniWorkspace.getTopBlocks(!1)){const b=a.getRelativeToSurfaceXY();b.y<20&&a.moveBy(0,20-b.y);if(a.RTL){let c=-20;const d=this.miniWorkspace.getFlyout();d&&(c-=d.getWidth());b.x>c&&a.moveBy(c-b.x,0)}else b.x<20&&a.moveBy(20-b.x,0)}}updateBubbleSize(){if(!this.miniWorkspace.isDragging()||this.miniWorkspace.keyboardMoveInProgress){this.autoLayout&&(this.autoLayout=\n!this.miniWorkspace.keyboardMoveInProgress);var a=this.getSize(),b=this.calculateWorkspaceSize();Math.abs(a.width-b.width)({kind:\"block\",type:c}))});return b}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$mutator_icon/\n2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,new Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){const a=this.sourceBlock.getSvgRoot().getBBox();return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}createRootBlock(){if(!this.sourceBlock.decompose)throw Error(\"Blocks with mutator icons must include a decompose method\");this.rootBlock=this.sourceBlock.decompose(this.miniWorkspaceBubble.getWorkspace());\nfor(var a of this.rootBlock.getDescendants(!1))a.queueRender();this.rootBlock.setMovable(!1);this.rootBlock.setDeletable(!1);let b,c,d,e;a=(e=(b=this.miniWorkspaceBubble)==null?void 0:(c=b.getWorkspace())==null?void 0:(d=c.getFlyout())==null?void 0:d.getWidth())!=null?e:0;this.rootBlock.moveBy(this.rootBlock.RTL?-(a+WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon):WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon,WORKSPACE_MARGIN$$module$build$src$core$icons$mutator_icon)}addSaveConnectionsListener(){this.sourceBlock.saveConnections&&\nthis.rootBlock&&(this.saveConnectionsListener=()=>{this.sourceBlock.saveConnections&&this.rootBlock&&this.sourceBlock.saveConnections(this.rootBlock)},this.saveConnectionsListener(),this.sourceBlock.workspace.addChangeListener(this.saveConnectionsListener))}createMiniWorkspaceChangeListener(){return a=>{$.MutatorIcon$$module$build$src$core$icons$mutator_icon.isIgnorableMutatorEvent(a)||this.updateWorkspacePid||(this.updateWorkspacePid=setTimeout(()=>{this.updateWorkspacePid=null;this.recomposeSourceBlock()},\n0))}}static isIgnorableMutatorEvent(a){return a.isUiEvent||isBlockCreate$$module$build$src$core$events$predicates(a)||isBlockChange$$module$build$src$core$events$predicates(a)&&a.element===\"disabled\"}recomposeSourceBlock(){if(this.rootBlock){if(!this.sourceBlock.compose)throw Error(\"Blocks with mutator icons must include a compose method\");var a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);var b=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(this.sourceBlock);\nthis.sourceBlock.compose(this.rootBlock);var c=BlockChange$$module$build$src$core$events$events_block_change.getExtraBlockState_(this.sourceBlock);b!==c&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\"mutation\",null,b,c));$.setGroup$$module$build$src$core$events$utils(a)}}getWorkspace(){let a;return(a=this.miniWorkspaceBubble)==null?void 0:a.getWorkspace()}};\n$.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.MUTATOR;$.MutatorIcon$$module$build$src$core$icons$mutator_icon.WEIGHT=1;var module$build$src$core$icons$mutator_icon={};module$build$src$core$icons$mutator_icon.MutatorIcon=$.MutatorIcon$$module$build$src$core$icons$mutator_icon;var allExtensions$$module$build$src$core$extensions=Object.create(null),TEST_ONLY$$module$build$src$core$extensions={allExtensions:allExtensions$$module$build$src$core$extensions};$.register$$module$build$src$core$extensions(\"parent_tooltip_when_inline\",extensionParentTooltip$$module$build$src$core$extensions);var module$build$src$core$extensions={TEST_ONLY:TEST_ONLY$$module$build$src$core$extensions};module$build$src$core$extensions.apply=apply$$module$build$src$core$extensions;\nmodule$build$src$core$extensions.buildTooltipForDropdown=$.buildTooltipForDropdown$$module$build$src$core$extensions;module$build$src$core$extensions.buildTooltipWithFieldText=$.buildTooltipWithFieldText$$module$build$src$core$extensions;module$build$src$core$extensions.isRegistered=isRegistered$$module$build$src$core$extensions;module$build$src$core$extensions.register=$.register$$module$build$src$core$extensions;module$build$src$core$extensions.registerMixin=$.registerMixin$$module$build$src$core$extensions;\nmodule$build$src$core$extensions.registerMutator=$.registerMutator$$module$build$src$core$extensions;module$build$src$core$extensions.runAfterPageLoad=runAfterPageLoad$$module$build$src$core$extensions;module$build$src$core$extensions.unregister=unregister$$module$build$src$core$extensions;var KeyCodes$$module$build$src$core$utils$keycodes;\n(function(a){a[a.WIN_KEY_FF_LINUX=0]=\"WIN_KEY_FF_LINUX\";a[a.MAC_ENTER=3]=\"MAC_ENTER\";a[a.BACKSPACE=8]=\"BACKSPACE\";a[a.TAB=9]=\"TAB\";a[a.NUM_CENTER=12]=\"NUM_CENTER\";a[a.ENTER=13]=\"ENTER\";a[a.SHIFT=16]=\"SHIFT\";a[a.CTRL=17]=\"CTRL\";a[a.ALT=18]=\"ALT\";a[a.PAUSE=19]=\"PAUSE\";a[a.CAPS_LOCK=20]=\"CAPS_LOCK\";a[a.ESC=27]=\"ESC\";a[a.SPACE=32]=\"SPACE\";a[a.PAGE_UP=33]=\"PAGE_UP\";a[a.PAGE_DOWN=34]=\"PAGE_DOWN\";a[a.END=35]=\"END\";a[a.HOME=36]=\"HOME\";a[a.LEFT=37]=\"LEFT\";a[a.UP=38]=\"UP\";a[a.RIGHT=39]=\"RIGHT\";a[a.DOWN=40]=\n\"DOWN\";a[a.PLUS_SIGN=43]=\"PLUS_SIGN\";a[a.PRINT_SCREEN=44]=\"PRINT_SCREEN\";a[a.INSERT=45]=\"INSERT\";a[a.DELETE=46]=\"DELETE\";a[a.ZERO=48]=\"ZERO\";a[a.ONE=49]=\"ONE\";a[a.TWO=50]=\"TWO\";a[a.THREE=51]=\"THREE\";a[a.FOUR=52]=\"FOUR\";a[a.FIVE=53]=\"FIVE\";a[a.SIX=54]=\"SIX\";a[a.SEVEN=55]=\"SEVEN\";a[a.EIGHT=56]=\"EIGHT\";a[a.NINE=57]=\"NINE\";a[a.FF_SEMICOLON=59]=\"FF_SEMICOLON\";a[a.FF_EQUALS=61]=\"FF_EQUALS\";a[a.FF_DASH=173]=\"FF_DASH\";a[a.FF_HASH=163]=\"FF_HASH\";a[a.QUESTION_MARK=63]=\"QUESTION_MARK\";a[a.AT_SIGN=64]=\"AT_SIGN\";\na[a.A=65]=\"A\";a[a.B=66]=\"B\";a[a.C=67]=\"C\";a[a.D=68]=\"D\";a[a.E=69]=\"E\";a[a.F=70]=\"F\";a[a.G=71]=\"G\";a[a.H=72]=\"H\";a[a.I=73]=\"I\";a[a.J=74]=\"J\";a[a.K=75]=\"K\";a[a.L=76]=\"L\";a[a.M=77]=\"M\";a[a.N=78]=\"N\";a[a.O=79]=\"O\";a[a.P=80]=\"P\";a[a.Q=81]=\"Q\";a[a.R=82]=\"R\";a[a.S=83]=\"S\";a[a.T=84]=\"T\";a[a.U=85]=\"U\";a[a.V=86]=\"V\";a[a.W=87]=\"W\";a[a.X=88]=\"X\";a[a.Y=89]=\"Y\";a[a.Z=90]=\"Z\";a[a.META=91]=\"META\";a[a.WIN_KEY_RIGHT=92]=\"WIN_KEY_RIGHT\";a[a.CONTEXT_MENU=93]=\"CONTEXT_MENU\";a[a.NUM_ZERO=96]=\"NUM_ZERO\";a[a.NUM_ONE=97]=\n\"NUM_ONE\";a[a.NUM_TWO=98]=\"NUM_TWO\";a[a.NUM_THREE=99]=\"NUM_THREE\";a[a.NUM_FOUR=100]=\"NUM_FOUR\";a[a.NUM_FIVE=101]=\"NUM_FIVE\";a[a.NUM_SIX=102]=\"NUM_SIX\";a[a.NUM_SEVEN=103]=\"NUM_SEVEN\";a[a.NUM_EIGHT=104]=\"NUM_EIGHT\";a[a.NUM_NINE=105]=\"NUM_NINE\";a[a.NUM_MULTIPLY=106]=\"NUM_MULTIPLY\";a[a.NUM_PLUS=107]=\"NUM_PLUS\";a[a.NUM_MINUS=109]=\"NUM_MINUS\";a[a.NUM_PERIOD=110]=\"NUM_PERIOD\";a[a.NUM_DIVISION=111]=\"NUM_DIVISION\";a[a.F1=112]=\"F1\";a[a.F2=113]=\"F2\";a[a.F3=114]=\"F3\";a[a.F4=115]=\"F4\";a[a.F5=116]=\"F5\";a[a.F6=\n117]=\"F6\";a[a.F7=118]=\"F7\";a[a.F8=119]=\"F8\";a[a.F9=120]=\"F9\";a[a.F10=121]=\"F10\";a[a.F11=122]=\"F11\";a[a.F12=123]=\"F12\";a[a.NUMLOCK=144]=\"NUMLOCK\";a[a.SCROLL_LOCK=145]=\"SCROLL_LOCK\";a[a.FIRST_MEDIA_KEY=166]=\"FIRST_MEDIA_KEY\";a[a.LAST_MEDIA_KEY=183]=\"LAST_MEDIA_KEY\";a[a.SEMICOLON=186]=\"SEMICOLON\";a[a.DASH=189]=\"DASH\";a[a.EQUALS=187]=\"EQUALS\";a[a.COMMA=188]=\"COMMA\";a[a.PERIOD=190]=\"PERIOD\";a[a.SLASH=191]=\"SLASH\";a[a.APOSTROPHE=192]=\"APOSTROPHE\";a[a.TILDE=192]=\"TILDE\";a[a.SINGLE_QUOTE=222]=\"SINGLE_QUOTE\";\na[a.OPEN_SQUARE_BRACKET=219]=\"OPEN_SQUARE_BRACKET\";a[a.BACKSLASH=220]=\"BACKSLASH\";a[a.CLOSE_SQUARE_BRACKET=221]=\"CLOSE_SQUARE_BRACKET\";a[a.WIN_KEY=224]=\"WIN_KEY\";a[a.MAC_FF_META=224]=\"MAC_FF_META\";a[a.MAC_WK_CMD_LEFT=91]=\"MAC_WK_CMD_LEFT\";a[a.MAC_WK_CMD_RIGHT=93]=\"MAC_WK_CMD_RIGHT\";a[a.WIN_IME=229]=\"WIN_IME\";a[a.VK_NONAME=252]=\"VK_NONAME\";a[a.PHANTOM=255]=\"PHANTOM\"})(KeyCodes$$module$build$src$core$utils$keycodes||(KeyCodes$$module$build$src$core$utils$keycodes={}));\nvar module$build$src$core$utils$keycodes={};module$build$src$core$utils$keycodes.KeyCodes=KeyCodes$$module$build$src$core$utils$keycodes;var module$build$src$core$utils$svg_paths={};module$build$src$core$utils$svg_paths.arc=arc$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.curve=curve$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.line=line$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.lineOnAxis=lineOnAxis$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.lineTo=lineTo$$module$build$src$core$utils$svg_paths;\nmodule$build$src$core$utils$svg_paths.moveBy=moveBy$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.moveTo=moveTo$$module$build$src$core$utils$svg_paths;module$build$src$core$utils$svg_paths.point=point$$module$build$src$core$utils$svg_paths;var module$build$src$core$utils={};module$build$src$core$utils.Coordinate=Coordinate$$module$build$src$core$utils$coordinate;module$build$src$core$utils.KeyCodes=KeyCodes$$module$build$src$core$utils$keycodes;module$build$src$core$utils.Rect=Rect$$module$build$src$core$utils$rect;module$build$src$core$utils.Size=Size$$module$build$src$core$utils$size;module$build$src$core$utils.Svg=Svg$$module$build$src$core$utils$svg;module$build$src$core$utils.aria=module$build$src$core$utils$aria;\nmodule$build$src$core$utils.array=module$build$src$core$utils$array;module$build$src$core$utils.browserEvents=module$build$src$core$browser_events;module$build$src$core$utils.colour=module$build$src$core$utils$colour;module$build$src$core$utils.deprecation=module$build$src$core$utils$deprecation;module$build$src$core$utils.dom=module$build$src$core$utils$dom;module$build$src$core$utils.extensions=module$build$src$core$extensions;module$build$src$core$utils.idGenerator=module$build$src$core$utils$idgenerator;\nmodule$build$src$core$utils.math=module$build$src$core$utils$math;module$build$src$core$utils.object=module$build$src$core$utils$object;module$build$src$core$utils.parsing=module$build$src$core$utils$parsing;module$build$src$core$utils.string=module$build$src$core$utils$string;module$build$src$core$utils.style=module$build$src$core$utils$style;module$build$src$core$utils.svgMath=module$build$src$core$utils$svg_math;module$build$src$core$utils.svgPaths=module$build$src$core$utils$svg_paths;\nmodule$build$src$core$utils.toolbox=module$build$src$core$utils$toolbox;module$build$src$core$utils.userAgent=module$build$src$core$utils$useragent;module$build$src$core$utils.xml=module$build$src$core$utils$xml;var TextInputBubble$$module$build$src$core$bubbles$textinput_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(a,b,c,void 0,d);this.workspace=a;this.anchor=b;this.ownerRect=c;this.owner=d;this.resizePointerMoveListener=this.resizePointerUpListener=null;this.sizeChangeListeners=[];this.locationChangeListeners=[];this.DEFAULT_SIZE=new Size$$module$build$src$core$utils$size(160+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,80+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER);\nthis.MIN_SIZE=new Size$$module$build$src$core$utils$size(45+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,20+Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER);this.editable=!0;addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyTextInputBubble\");this.editor=new CommentEditor$$module$build$src$core$comments$comment_editor(a,this.id,()=>{$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this)});this.contentContainer.appendChild(this.editor.getDom());\nthis.resizeGroup=this.createResizeHandle(this.svgRoot,a);this.setSize(this.DEFAULT_SIZE,!0)}getText(){return this.editor.getText()}setText(a){this.editor.setText(a)}setEditable(a){this.editable=a;this.editor.setEditable(a)}isEditable(){return this.editable}addTextChangeListener(a){this.editor.addTextChangeListener(a)}addSizeChangeListener(a){this.sizeChangeListeners.push(a)}addLocationChangeListener(a){this.locationChangeListeners.push(a)}createResizeHandle(a,b){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,\n{\"class\":\"blocklyResizeHandle\",href:`${b.options.pathToMedia}resize-handle.svg`},a);conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onResizePointerDown);return a}setSize(a,b=!1){a.width=Math.max(a.width,this.MIN_SIZE.width);a.height=Math.max(a.height,this.MIN_SIZE.height);const c=a.width-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER,d=a.height-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER;this.editor.updateSize(new Size$$module$build$src$core$utils$size(c,\nd),new Size$$module$build$src$core$utils$size(0,0));this.editor.getDom().setAttribute(\"x\",`${Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER/2}`);this.editor.getDom().setAttribute(\"y\",`${Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER/2}`);this.resizeGroup.setAttribute(\"y\",`${d}`);this.workspace.RTL?this.resizeGroup.setAttribute(\"x\",`${-Bubble$$module$build$src$core$bubbles$bubble.DOUBLE_BORDER}`):this.resizeGroup.setAttribute(\"x\",`${c}`);super.setSize(a,b);this.onSizeChange()}getSize(){return super.getSize()}moveDuringDrag(a){super.moveDuringDrag(a);\nthis.onLocationChange()}setPositionRelativeToAnchor(a,b){super.setPositionRelativeToAnchor(a,b);this.onLocationChange()}positionByRect(a=new Rect$$module$build$src$core$utils$rect(0,0,0,0)){super.positionByRect(a);this.onLocationChange()}onResizePointerDown(a){this.bringToFront();isRightButton$$module$build$src$core$browser_events(a)||(start$$module$build$src$core$utils$drag(this.workspace,a,new Coordinate$$module$build$src$core$utils$coordinate(this.workspace.RTL?-this.getSize().width:this.getSize().width,\nthis.getSize().height)),this.resizePointerUpListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",this,this.onResizePointerUp),this.resizePointerMoveListener=conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",this,this.onResizePointerMove),this.workspace.hideChaff());a.stopPropagation()}onResizePointerUp(a){clearTouchIdentifier$$module$build$src$core$touch();this.resizePointerUpListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerUpListener),\nthis.resizePointerUpListener=null);this.resizePointerMoveListener&&(unbind$$module$build$src$core$browser_events(this.resizePointerMoveListener),this.resizePointerMoveListener=null)}onResizePointerMove(a){a=move$$module$build$src$core$utils$drag(this.workspace,a);this.setSize(new Size$$module$build$src$core$utils$size(this.workspace.RTL?-a.x:a.x,a.y),!1);this.onSizeChange()}onSizeChange(){for(const a of this.sizeChangeListeners)a()}onLocationChange(){for(const a of this.locationChangeListeners)a()}getEditor(){return this.editor}};\nregister$$module$build$src$core$css(\"\\n.blocklyTextInputBubble .blocklyTextarea {\\n background-color: var(--commentFillColour);\\n border: 0;\\n box-sizing: border-box;\\n display: block;\\n outline: 0;\\n padding: 5px;\\n resize: none;\\n width: 100%;\\n height: 100%;\\n}\\n\");var module$build$src$core$bubbles$textinput_bubble={};module$build$src$core$bubbles$textinput_bubble.TextInputBubble=TextInputBubble$$module$build$src$core$bubbles$textinput_bubble;var ConnectionType$$module$build$src$core$connection_type;(function(a){a[a.INPUT_VALUE=1]=\"INPUT_VALUE\";a[a.OUTPUT_VALUE=2]=\"OUTPUT_VALUE\";a[a.NEXT_STATEMENT=3]=\"NEXT_STATEMENT\";a[a.PREVIOUS_STATEMENT=4]=\"PREVIOUS_STATEMENT\"})(ConnectionType$$module$build$src$core$connection_type||(ConnectionType$$module$build$src$core$connection_type={}));var module$build$src$core$connection_type={};module$build$src$core$connection_type.ConnectionType=ConnectionType$$module$build$src$core$connection_type;var ConnectionDB$$module$build$src$core$connection_db=class{constructor(a){this.connectionChecker=a;this.connections=[]}addConnection(a,b){b=this.calculateIndexForYPos(b);this.connections.splice(b,0,a)}findIndexOfConnection(a,b){if(!this.connections.length)return-1;const c=this.calculateIndexForYPos(b);if(c>=this.connections.length)return-1;b=a.y;let d=c;for(;d>=0&&this.connections[d].y===b;){if(this.connections[d]===a)return d;d--}for(d=c;da)c=d;else{b=d;break}}return b}removeConnection(a,b){a=this.findIndexOfConnection(a,b);if(a===-1)throw Error(\"Unable to find connection in connectionDB.\");this.connections.splice(a,1)}getNeighbours(a,b){function c(l){const m=e-d[l].x,n=f-d[l].y;Math.sqrt(m*m+n*n)<=b&&k.push(d[l]);\nreturn n=0&&c(a);)a--;do g++;while(g=0&&this.isInYRange(k,a.y,b);)h=this.connections[k],\nthis.connectionChecker.canConnect(a,h,!0,g)&&(c=h,g=h.distanceFrom(a)),k--;for(;fthis.fieldRow.length)throw Error(\"index \"+a+\" out of bounds.\");if(!(b||\nb===\"\"&&c))return a;typeof b===\"string\"&&(b=$.fromJson$$module$build$src$core$field_registry({type:\"field_label\",text:b}));b.setSourceBlock(this.sourceBlock);this.sourceBlock.initialized&&this.initField(b);b.name=c;b.setVisible(this.isVisible());b.prefixField&&(a=this.insertFieldAt(a,b.prefixField));this.fieldRow.splice(a,0,b);a++;b.suffixField&&(a=this.insertFieldAt(a,b.suffixField));this.sourceBlock.rendered&&this.sourceBlock.queueRender();return a}removeField(a,b){for(let c=0,d;d=this.fieldRow[c];c++)if(d.name===\na)return d.dispose(),this.fieldRow.splice(c,1),this.sourceBlock.rendered&&this.sourceBlock.queueRender(),!0;if(b)return!1;throw Error('Field \"'+a+'\" not found.');}isVisible(){return this.visible}setVisible(a){let b=[];if(this.visible===a)return b;this.visible=a;for(let c=0,d;d=this.fieldRow[c];c++)d.setVisible(a);if(this.connection&&this.connection instanceof RenderedConnection$$module$build$src$core$rendered_connection){a?b=this.connection.startTrackingAll():this.connection.stopTrackingAll();const c=\nthis.connection.targetBlock();c&&(c.getSvgRoot().style.display=a?\"block\":\"none\")}return b}markDirty(){for(let a=0,b;b=this.fieldRow[a];a++)b.markDirty()}setCheck(a){if(!this.connection)throw Error(\"This input does not have a connection.\");this.connection.setCheck(a);return this}setAlign(a){this.align=a;this.sourceBlock.rendered&&this.sourceBlock.queueRender();return this}setShadowDom(a){if(!this.connection)throw Error(\"This input does not have a connection.\");this.connection.setShadowDom(a);return this}getShadowDom(){if(!this.connection)throw Error(\"This input does not have a connection.\");\nreturn this.connection.getShadowDom()}init(){for(const a of this.fieldRow)a.init()}initModel(){for(const a of this.fieldRow)a.initModel()}initField(a){this.sourceBlock.rendered?a.init():a.initModel()}dispose(){for(let a=0,b;b=this.fieldRow[a];a++)b.dispose();this.connection&&this.connection.dispose()}makeConnection(a){return this.sourceBlock.makeConnection_(a)}},module$build$src$core$inputs$input={};module$build$src$core$inputs$input.Input=Input$$module$build$src$core$inputs$input;var DummyInput$$module$build$src$core$inputs$dummy_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.DUMMY}},module$build$src$core$inputs$dummy_input={};module$build$src$core$inputs$dummy_input.DummyInput=DummyInput$$module$build$src$core$inputs$dummy_input;var EndRowInput$$module$build$src$core$inputs$end_row_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.END_ROW}},module$build$src$core$inputs$end_row_input={};module$build$src$core$inputs$end_row_input.EndRowInput=EndRowInput$$module$build$src$core$inputs$end_row_input;var StatementInput$$module$build$src$core$inputs$statement_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){if(!a)throw Error(\"Statement inputs must have a non-empty name\");super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.STATEMENT;this.connection=this.makeConnection(ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT)}},module$build$src$core$inputs$statement_input={};\nmodule$build$src$core$inputs$statement_input.StatementInput=StatementInput$$module$build$src$core$inputs$statement_input;var module$build$src$core$inputs$value_input;$.ValueInput$$module$build$src$core$inputs$value_input=class extends Input$$module$build$src$core$inputs$input{constructor(a,b){if(!a)throw Error(\"Value inputs must have a non-empty name\");super(a,b);this.name=a;this.type=$.inputTypes$$module$build$src$core$inputs$input_types.VALUE;this.connection=this.makeConnection(ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE)}};module$build$src$core$inputs$value_input={};\nmodule$build$src$core$inputs$value_input.ValueInput=$.ValueInput$$module$build$src$core$inputs$value_input;var module$build$src$core$interfaces$i_icon={};module$build$src$core$interfaces$i_icon.isIcon=isIcon$$module$build$src$core$interfaces$i_icon;var module$build$src$core$interfaces$i_comment_icon={};module$build$src$core$interfaces$i_comment_icon.isCommentIcon=isCommentIcon$$module$build$src$core$interfaces$i_comment_icon;var Block$$module$build$src$core$block=class{constructor(a,b,c){this.data=null;this.disposed=!1;this.hue=null;this.colour_=\"#000000\";this.styleName_=\"\";this.suppressPrefixSuffix=!1;this.previousConnection=this.nextConnection=this.outputConnection=null;this.inputList=[];this.icons=[];this.disabledReasons=new Set;this.tooltip=\"\";this.contextMenu=!0;this.parentBlock_=null;this.childBlocks_=[];this.editable=this.movable=this.deletable=!0;this.collapsed_=this.shadow=!1;this.outputShape_=null;this.rendered=\nthis.isInsertionMarker_=this.initialized=this.disposing=!1;this.onchangeWrapper=this.helpUrl=null;this.statementInputCount=0;this.workspace=a;this.id=c&&!a.getBlockById(c)?c:genUid$$module$build$src$core$utils$idgenerator();a.setBlockById(this.id,this);this.xy=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.isInFlyout=a.isFlyout;this.isInMutator=a.isMutator;this.RTL=a.RTL;if(b){this.type=b;c=Blocks$$module$build$src$core$blocks[b];if(!c||typeof c!==\"object\")throw TypeError(\"Invalid block definition for type: \"+\nb);Object.assign(this,c)}a.addTopBlock(this);a.addTypedBlock(this);new.target===Block$$module$build$src$core$block&&this.doInit_()}doInit_(){const a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);const b=getRecordUndo$$module$build$src$core$events$utils();try{typeof this.init===\"function\"&&($.setRecordUndo$$module$build$src$core$events$utils(!1),this.init(),$.setRecordUndo$$module$build$src$core$events$utils(b)),isEnabled$$module$build$src$core$events$utils()&&\nfire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(this))}finally{$.setGroup$$module$build$src$core$events$utils(a),$.setRecordUndo$$module$build$src$core$events$utils(b)}this.inputsInlineDefault=this.inputsInline;typeof this.onchange===\"function\"&&this.setOnChange(this.onchange)}dispose(a=!1){this.disposing=!0;this.onchangeWrapper&&this.workspace.removeChangeListener(this.onchangeWrapper);this.unplug(a);\nisEnabled$$module$build$src$core$events$utils()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DELETE))(this));this.workspace.removeTopBlock(this);this.disposeInternal()}disposeInternal(){this.disposing=!0;this.onchangeWrapper&&this.workspace.removeChangeListener(this.onchangeWrapper);this.workspace.removeTypedBlock(this);this.workspace.removeBlockById(this.id);typeof this.destroy===\"function\"&&this.destroy();\nthis.childBlocks_.forEach(a=>a.disposeInternal());this.inputList.forEach(a=>a.dispose());this.inputList.length=0;this.getConnections_(!0).forEach(a=>a.dispose());this.disposed=!0}isDeadOrDying(){return this.disposing||this.disposed}initModel(){if(!this.initialized){for(const a of this.inputList)a.initModel();this.initialized=!0}}unplug(a){this.outputConnection&&this.unplugFromRow(a);this.previousConnection&&this.unplugFromStack(a)}unplugFromRow(a){let b=null,c;if((c=this.outputConnection)==null?0:\nc.isConnected())b=this.outputConnection.targetConnection,this.outputConnection.disconnect();b&&a&&(a=this.getOnlyValueConnection())&&a.isConnected()&&!a.targetBlock().isShadow()&&(a=a.targetConnection,a==null||a.disconnect(),this.workspace.connectionChecker.canConnect(a,b,!1)?b.connect(a):a==null||a.onFailedConnect(b))}getOnlyValueConnection(){let a=null;for(let b=0;b1)return!1;return!0}getMatchingConnection(a,\nb){const c=this.getConnections_(!0);a=a.getConnections_(!0);if(c.length!==a.length)throw Error(\"Connection lists did not match in length.\");for(let d=0;d{d=d+(c===\"(\"||e===\")\"?\"\":\" \")+e;c=e[e.length-1];return d},\"\");b=b.trim()||\"???\";a&&b.length>a&&(b=b.substring(0,a-3)+\"...\");return b}toTokens(a=\"?\"){const b=[];for(const d of this.inputList)if(d.name!=COLLAPSED_INPUT_NAME$$module$build$src$core$constants){for(const e of d.fieldRow)b.push(e.getText());if(d.connection){const e=d.connection.targetBlock();if(e){var c=d.connection;let f=c.getCheck();\n!f&&c.targetConnection&&(f=c.targetConnection.getCheck());(c=!!f&&(f.includes(\"Boolean\")||f.includes(\"Number\")))&&b.push(\"(\");b.push(...e.toTokens(a));c&&b.push(\")\")}else b.push(a)}}return b}appendValueInput(a){return this.appendInput(new $.ValueInput$$module$build$src$core$inputs$value_input(a,this))}appendStatementInput(a){this.statementInputCount++;return this.appendInput(new StatementInput$$module$build$src$core$inputs$statement_input(a,this))}appendDummyInput(a=\"\"){return this.appendInput(new DummyInput$$module$build$src$core$inputs$dummy_input(a,\nthis))}appendEndRowInput(a=\"\"){return this.appendInput(new EndRowInput$$module$build$src$core$inputs$end_row_input(a,this))}appendInput(a){this.inputList.push(a);return a}appendInputFromRegistry(a,b){return(a=getClass$$module$build$src$core$registry(Type$$module$build$src$core$registry.INPUT,a,!1))?this.appendInput(new a(b,this)):null}jsonInit(a){var b=a.type?'Block \"'+a.type+'\": ':\"\";if(a.output&&a.previousStatement)throw Error(b+\"Must not have both an output and a previousStatement.\");for(var c=\n0;a[\"args\"+c];){if(a[\"message\"+c]===void 0)throw Error(b+`args${c} must have a corresponding message (message${c}).`);c++}a.style&&a.style.hat&&(this.hat=a.style.hat,a.style=null);if(a.style&&a.colour)throw Error(b+\"Must not have both a colour and a style.\");a.style?this.jsonInitStyle(a,b):this.jsonInitColour(a,b);for(c=0;a[\"message\"+c]!==void 0;)this.interpolate(a[\"message\"+c],a[\"args\"+c]||[],a[\"implicitAlign\"+c]||a[\"lastDummyAlign\"+c],b),c++;a.inputsInline!==void 0&&($.disable$$module$build$src$core$events$utils(),\nthis.setInputsInline(a.inputsInline),$.enable$$module$build$src$core$events$utils());a.output!==void 0&&this.setOutput(!0,a.output);a.outputShape!==void 0&&this.setOutputShape(a.outputShape);a.previousStatement!==void 0&&this.setPreviousStatement(!0,a.previousStatement);a.nextStatement!==void 0&&this.setNextStatement(!0,a.nextStatement);a.tooltip!==void 0&&(c=replaceMessageReferences$$module$build$src$core$utils$parsing(a.tooltip),this.setTooltip(c));a.enableContextMenu!==void 0&&(this.contextMenu=\n!!a.enableContextMenu);a.suppressPrefixSuffix!==void 0&&(this.suppressPrefixSuffix=!!a.suppressPrefixSuffix);a.helpUrl!==void 0&&(c=replaceMessageReferences$$module$build$src$core$utils$parsing(a.helpUrl),this.setHelpUrl(c));typeof a.extensions===\"string\"&&(console.warn(b+\"JSON attribute 'extensions' should be an array of strings. Found raw string in JSON for '\"+a.type+\"' block.\"),a.extensions=[a.extensions]);a.mutator!==void 0&&apply$$module$build$src$core$extensions(a.mutator,this,!0);a=a.extensions;\nif(Array.isArray(a))for(b=0;bb)throw Error('Block \"'+this.type+'\": Message index %'+f+\" out of range.\");if(c[f])throw Error('Block \"'+this.type+'\": Message index %'+f+\" duplicated.\");c[f]=!0;d++}}if(d!==b)throw Error('Block \"'+this.type+'\": Message does not reference all '+b+\" arg(s).\");}interpolateArguments(a,b,c){const d=[];for(let f=0;f=this.inputList.length)throw RangeError(\"Input index \"+a+\" out of bounds.\");if(b>this.inputList.length)throw RangeError(\"Reference input \"+b+\" out of bounds.\");const c=this.inputList[a];this.inputList.splice(a,1);ab.getWeight()-c.getWeight());return a}removeIcon(a){if(!this.hasIcon(a))return!1;let b;(b=this.getIcon(a))==null||b.dispose();this.icons=this.icons.filter(c=>!c.getType().equals(a));return!0}hasIcon(a){return this.icons.some(b=>b.getType().equals(a))}getIcon(a){return a instanceof IconType$$module$build$src$core$icons$icon_types?\nthis.icons.find(b=>b.getType().equals(a)):this.icons.find(b=>b.getType().toString()===a)}getIcons(){return[...this.icons]}getRelativeToSurfaceXY(){return this.xy}moveBy(a,b,c){if(this.parentBlock_)throw Error(\"Block has parent\");const d=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this);c&&d.setReason(c);this.xy.translate(a,b);d.recordNew();fire$$module$build$src$core$events$utils(d)}makeConnection_(a){return new Connection$$module$build$src$core$connection(this,\na)}allInputsFilled(a){a===void 0&&(a=!0);if(!a&&this.isShadow())return!1;for(let c=0,d;d=this.inputList[c];c++)if(d.connection){var b=d.connection.targetBlock();if(!b||!b.allInputsFilled(a))return!1}return(b=this.getNextBlock())?b.allInputsFilled(a):!0}toDevString(){let a=this.type?'\"'+this.type+'\" block':\"Block\";this.id&&(a+=' (id=\"'+this.id+'\")');return a}};Block$$module$build$src$core$block.COLLAPSED_INPUT_NAME=COLLAPSED_INPUT_NAME$$module$build$src$core$constants;\nBlock$$module$build$src$core$block.COLLAPSED_FIELD_NAME=COLLAPSED_FIELD_NAME$$module$build$src$core$constants;var module$build$src$core$block={};module$build$src$core$block.Block=Block$$module$build$src$core$block;var disconnectPid$$module$build$src$core$block_animations=null,wobblingBlock$$module$build$src$core$block_animations=null,module$build$src$core$block_animations={};module$build$src$core$block_animations.connectionUiEffect=connectionUiEffect$$module$build$src$core$block_animations;module$build$src$core$block_animations.disconnectUiEffect=disconnectUiEffect$$module$build$src$core$block_animations;module$build$src$core$block_animations.disconnectUiStop=disconnectUiStop$$module$build$src$core$block_animations;\nmodule$build$src$core$block_animations.disposeUiEffect=disposeUiEffect$$module$build$src$core$block_animations;var BlockPaster$$module$build$src$core$clipboard$block_paster=class{paste(a,b,c){if(!b.isCapacityAvailable(a.typeCounts))return null;c&&(a.blockState.x=c.x,a.blockState.y=c.y);c=c||new Coordinate$$module$build$src$core$utils$coordinate(a.blockState.x||0,a.blockState.y||0);$.disable$$module$build$src$core$events$utils();let d;try{d=append$$module$build$src$core$serialization$blocks(a.blockState,b),moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster(d,c)}finally{$.enable$$module$build$src$core$events$utils()}if(!d)return d;\nisEnabled$$module$build$src$core$events$utils()&&!d.isShadow()&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CREATE))(d));const e=d;finishQueuedRenders$$module$build$src$core$render_management().then(()=>$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e));return d}};BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE=\"block\";\nregister$$module$build$src$core$clipboard$registry(BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE,new BlockPaster$$module$build$src$core$clipboard$block_paster);var module$build$src$core$clipboard$block_paster={};module$build$src$core$clipboard$block_paster.BlockPaster=BlockPaster$$module$build$src$core$clipboard$block_paster;module$build$src$core$clipboard$block_paster.moveBlockToNotConflict=moveBlockToNotConflict$$module$build$src$core$clipboard$block_paster;var bumpIntoBounds$$module$build$src$core$bump_objects=bumpObjectIntoBounds$$module$build$src$core$bump_objects,module$build$src$core$bump_objects={};module$build$src$core$bump_objects.bumpIntoBounds=bumpObjectIntoBounds$$module$build$src$core$bump_objects;module$build$src$core$bump_objects.bumpIntoBoundsHandler=bumpIntoBoundsHandler$$module$build$src$core$bump_objects;module$build$src$core$bump_objects.bumpTopObjectsIntoBounds=bumpTopObjectsIntoBounds$$module$build$src$core$bump_objects;var BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy=class{constructor(a){this.block=a;this.connectionPreviewer=this.connectionCandidate=this.startLoc=this.startChildConn=this.startParentConn=null;this.dragging=!1;this.dragOffset=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.originalEventGroup=\"\";this.workspace=a.workspace}isMovable(){if(this.block.isShadow()){let a,b;return(b=(a=this.block.getParent())==null?void 0:a.isMovable())!=null?b:!1}return this.block.isOwnMovable()&&\n!this.block.isDeadOrDying()&&!this.workspace.isReadOnly()&&!this.block.isInFlyout}startDrag(a){if(this.block.isShadow())this.startDraggingShadow(a);else{this.dragging=!0;this.fireDragStartEvent();this.startLoc=this.block.getRelativeToSurfaceXY();this.connectionCandidate=null;this.connectionPreviewer=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_PREVIEWER,this.workspace.options))(this.block);startTextWidthCache$$module$build$src$core$utils$dom();\nthis.workspace.setResizesEnabled(!1);disconnectUiStop$$module$build$src$core$block_animations();a=this.shouldHealStack(a);this.shouldDisconnect(a)&&this.disconnectBlock(a);this.block.setDragging(!0);var b;(b=this.workspace.getLayerManager())==null||b.moveToDragLayer(this.block)}}shouldHealStack(a){return!!a&&(a.altKey||a.ctrlKey||a.metaKey)}startDraggingShadow(a){const b=this.block.getParent();if(!b)throw Error(\"Tried to drag a shadow block with no parent. Shadow blocks should always have parents.\");\nthis.dragOffset=Coordinate$$module$build$src$core$utils$coordinate.difference(b.getRelativeToSurfaceXY(),this.block.getRelativeToSurfaceXY());b.startDrag(a)}shouldDisconnect(a){return!!(this.block.getParent()||a&&this.block.nextConnection&&this.block.nextConnection.targetBlock())}disconnectBlock(a){let b,c,d;this.startParentConn=(d=(b=this.block.outputConnection)==null?void 0:b.targetConnection)!=null?d:(c=this.block.previousConnection)==null?void 0:c.targetConnection;if(a){let e;this.startChildConn=\n(e=this.block.nextConnection)==null?void 0:e.targetConnection}this.block.unplug(a);disconnectUiEffect$$module$build$src$core$block_animations(this.block)}fireDragStartEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DRAG))(this.block,!0,this.block.getDescendants(!1));fire$$module$build$src$core$events$utils(a)}fireDragEndEvent(){const a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_DRAG))(this.block,\n!1,this.block.getDescendants(!1));fire$$module$build$src$core$events$utils(a)}fireMoveEvent(){if(!this.block.isDeadOrDying()){var a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this.block);a.setReason([\"drag\"]);a.oldCoordinate=this.startLoc;a.recordNew();fire$$module$build$src$core$events$utils(a)}}drag(a){if(this.block.isShadow()){let b;(b=this.block.getParent())==null||b.drag(Coordinate$$module$build$src$core$utils$coordinate.sum(a,this.dragOffset))}else this.block.moveDuringDrag(a),\nthis.updateConnectionPreview(this.block,Coordinate$$module$build$src$core$utils$coordinate.difference(a,this.startLoc))}updateConnectionPreview(a,b){var c=this.connectionCandidate;const d=this.getConnectionCandidate(a,b);if(d){this.connectionCandidate=b=c&&this.currCandidateIsBetter(c,b,d)?c:d;var {local:e,neighbour:f}=b;b=e.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE||e.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT;var g;c=f.isConnected()&&\n!((g=f.targetBlock())==null?0:g.isInsertionMarker());if(b&&c&&!this.orphanCanConnectAtEnd(a,f.targetBlock(),e.type)){let k;(k=this.connectionPreviewer)==null||k.previewReplacement(e,f,f.targetBlock())}else{var h;(h=this.connectionPreviewer)==null||h.previewConnection(e,f)}}else{let k;(k=this.connectionPreviewer)==null||k.hidePreview();this.connectionCandidate=null}}orphanCanConnectAtEnd(a,b,c){return!!Connection$$module$build$src$core$connection.getConnectionForOrphanedConnection(a,c===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE?\nb.outputConnection:b.previousConnection)}currCandidateIsBetter(a,b,c){const {local:d,neighbour:e}=a;a=new Coordinate$$module$build$src$core$utils$coordinate(d.x,d.y);const f=new Coordinate$$module$build$src$core$utils$coordinate(e.x,e.y);b=Coordinate$$module$build$src$core$utils$coordinate.distance(Coordinate$$module$build$src$core$utils$coordinate.sum(a,b),f);return c.distance>b-$.config$$module$build$src$core$config.currentConnectionPreference}getConnectionCandidate(a,b){a=this.getLocalConnections(a);\nlet c=this.getSearchRadius(),d=null;for(const e of a){const {connection:f,radius:g}=e.closest(c,b);f&&(d={local:e,neighbour:f,distance:g},c=g)}return d}getSearchRadius(){return this.connectionCandidate?$.config$$module$build$src$core$config.connectingSnapRadius:$.config$$module$build$src$core$config.snapRadius}getLocalConnections(a){const b=a.getConnections_(!1),c=a.lastConnectionInStack(!0);c&&c!==a.nextConnection&&b.push(c);return b}endDrag(a){if(this.block.isShadow()){let c;(c=this.block.getParent())==\nnull||c.endDrag(a)}else{this.originalEventGroup=$.getGroup$$module$build$src$core$events$utils();this.fireDragEndEvent();this.fireMoveEvent();stopTextWidthCache$$module$build$src$core$utils$dom();disconnectUiStop$$module$build$src$core$block_animations();var b;(b=this.connectionPreviewer)==null||b.hidePreview();if(!this.block.isDeadOrDying()&&this.dragging){let c;(c=this.workspace.getLayerManager())==null||c.moveOffDragLayer(this.block,BLOCK$$module$build$src$core$layers);this.block.setDragging(!1)}this.connectionCandidate?\n(this.applyConnections(this.connectionCandidate),this.disposeStep()):this.block.queueRender().then(()=>this.disposeStep())}}disposeStep(){const a=$.getGroup$$module$build$src$core$events$utils();$.setGroup$$module$build$src$core$events$utils(this.originalEventGroup);this.block.snapToGrid();let b;(b=this.connectionPreviewer)==null||b.dispose();this.workspace.setResizesEnabled(!0);$.setGroup$$module$build$src$core$events$utils(a)}applyConnections(a){const {local:b,neighbour:c}=a;b.connect(c);const d=\nb.isSuperior()?c:b,e=this.block.getRootBlock();finishQueuedRenders$$module$build$src$core$render_management().then(()=>{connectionUiEffect$$module$build$src$core$block_animations(d.getSourceBlock());setTimeout(()=>{e.bringToFront()},0)})}revertDrag(){if(this.block.isShadow()){let c;(c=this.block.getParent())==null||c.revertDrag()}else{var a;(a=this.connectionPreviewer)==null||a.hidePreview();this.connectionCandidate=null;var b;(b=this.startChildConn)==null||b.connect(this.block.nextConnection);if(this.startParentConn)switch(this.startParentConn.type){case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:this.startParentConn.connect(this.block.outputConnection);\nbreak;case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:this.startParentConn.connect(this.block.previousConnection)}else{this.block.moveTo(this.startLoc,[\"drag\"]);let c;(c=this.workspace.getLayerManager())==null||c.moveOffDragLayer(this.block,BLOCK$$module$build$src$core$layers);bumpObjectIntoBounds$$module$build$src$core$bump_objects(this.workspace,this.workspace.getMetricsManager().getScrollMetrics(!0),this.block)}this.startParentConn=this.startChildConn=null;this.block.setDragging(!1);\nthis.dragging=!1}}},module$build$src$core$dragging$block_drag_strategy={};module$build$src$core$dragging$block_drag_strategy.BlockDragStrategy=BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy;var TextBubble$$module$build$src$core$bubbles$text_bubble=class extends Bubble$$module$build$src$core$bubbles$bubble{constructor(a,b,c,d){super(b,c,d);this.text=a;this.workspace=b;this.anchor=c;this.ownerRect=d;this.paragraph=this.stringToSvg(a,this.contentContainer);this.updateBubbleSize();addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyTextBubble\")}getText(){return this.text}setText(a){this.text=a;removeNode$$module$build$src$core$utils$dom(this.paragraph);this.paragraph=this.stringToSvg(a,\nthis.contentContainer);this.updateBubbleSize()}stringToSvg(a,b){b=this.createParagraph(b);a=this.createTextFragments(b,a);this.workspace.RTL&&this.rightAlignTextFragments(b.getBBox().width,a);return b}createParagraph(a){return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyText blocklyBubbleText blocklyNoPointerEvents\",transform:`translate(0,${Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH})`,style:`direction: ${this.workspace.RTL?\n\"rtl\":\"ltr\"}`},a)}createTextFragments(a,b){let c=1;return b.split(\"\\n\").map(d=>{const e=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.TEXT,{y:`${c}em`,x:Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH},a);d=document.createTextNode(d);e.appendChild(d);c+=1;return e})}rightAlignTextFragments(a,b){for(const c of b)c.setAttribute(\"text-anchor\",\"start\"),c.setAttribute(\"x\",`${a+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH}`)}updateBubbleSize(){const a=\nthis.paragraph.getBBox();this.setSize(new Size$$module$build$src$core$utils$size(a.width+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2,a.height+Bubble$$module$build$src$core$bubbles$bubble.BORDER_WIDTH*2),!0)}},module$build$src$core$bubbles$text_bubble={};module$build$src$core$bubbles$text_bubble.TextBubble=TextBubble$$module$build$src$core$bubbles$text_bubble;var SIZE$$module$build$src$core$icons$warning_icon=17,WarningIcon$$module$build$src$core$icons$warning_icon=class extends Icon$$module$build$src$core$icons$icon{constructor(a){super(a);this.sourceBlock=a;this.textMap=new Map;this.textBubble=null}getType(){return WarningIcon$$module$build$src$core$icons$warning_icon.TYPE}initView(a){this.svgRoot||(super.initView(a),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconShape\",d:\"M2,15Q-1,15 0.5,12L6.5,1.7Q8,-1 9.5,1.7L15.5,12Q17,15 14,15z\"},\nthis.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconSymbol\",d:\"m7,4.8v3.16l0.27,2.27h1.46l0.27,-2.27v-3.16z\"},this.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyIconSymbol\",x:\"7\",y:\"11\",height:\"2\",width:\"2\"},this.svgRoot),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyWarningIcon\"))}dispose(){super.dispose();let a;(a=this.textBubble)==null||\na.dispose()}getWeight(){return WarningIcon$$module$build$src$core$icons$warning_icon.WEIGHT}getSize(){return new Size$$module$build$src$core$utils$size(SIZE$$module$build$src$core$icons$warning_icon,SIZE$$module$build$src$core$icons$warning_icon)}applyColour(){super.applyColour();let a;(a=this.textBubble)==null||a.setColour(this.sourceBlock.getColour())}updateCollapsed(){}isShownWhenCollapsed(){return!0}onLocationChange(a){super.onLocationChange(a);let b;(b=this.textBubble)==null||b.setAnchorLocation(this.getAnchorLocation())}addMessage(a,\nb){if(this.textMap.get(b)===a)return this;a?this.textMap.set(b,a):this.textMap.delete(b);let c;(c=this.textBubble)==null||c.setText(this.getText());return this}getText(){return[...this.textMap.values()].join(\"\\n\")}onClick(){super.onClick();this.setBubbleVisible(!this.bubbleIsVisible())}isClickableInFlyout(){return!1}bubbleIsVisible(){return!!this.textBubble}setBubbleVisible(a){const b=this;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){if(b.bubbleIsVisible()!==a){yield finishQueuedRenders$$module$build$src$core$render_management();\nif(a)b.textBubble=new TextBubble$$module$build$src$core$bubbles$text_bubble(b.getText(),b.sourceBlock.workspace,b.getAnchorLocation(),b.getBubbleOwnerRect()),b.applyColour();else{let c;(c=b.textBubble)==null||c.dispose();b.textBubble=null}fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BUBBLE_OPEN))(b.sourceBlock,a,\"warning\"))}})}getBubble(){return this.textBubble}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$warning_icon/\n2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,new Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){const a=this.sourceBlock.getSvgRoot().getBBox();return new Rect$$module$build$src$core$utils$rect(a.y,a.y+a.height,a.x,a.x+a.width)}};WarningIcon$$module$build$src$core$icons$warning_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.WARNING;WarningIcon$$module$build$src$core$icons$warning_icon.WEIGHT=2;\nvar module$build$src$core$icons$warning_icon={};module$build$src$core$icons$warning_icon.WarningIcon=WarningIcon$$module$build$src$core$icons$warning_icon;var BlockSvg$$module$build$src$core$block_svg=class extends Block$$module$build$src$core$block{constructor(a,b,c){super(a,b,c);this.childlessWidth=this.width=this.height=0;this.warningTextDb=new Map;this.mutator=null;this.rendered=!0;this.visuallyDisabled=!1;this.translation=\"\";this.dragging=!1;this.relativeCoords=new Coordinate$$module$build$src$core$utils$coordinate(0,0);this.dragStrategy=new BlockDragStrategy$$module$build$src$core$dragging$block_drag_strategy(this);if(!a.rendered)throw TypeError(\"Cannot create a rendered block in a headless workspace\");\nthis.workspace=a;this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});b&&addClass$$module$build$src$core$utils$dom(this.svgGroup,b);this.style=a.getRenderer().getConstants().getBlockStyle(null);this.pathObject=a.getRenderer().makePathObject(this.svgGroup,this.style);a=this.pathObject.svgPath;a.tooltip=this;bindMouseEvents$$module$build$src$core$tooltip(a);this.svgGroup.setAttribute(\"data-id\",this.id);a.id=getNextUniqueId$$module$build$src$core$utils$idgenerator();\nthis.doInit_()}initSvg(){if(!this.initialized){for(var a of this.inputList)a.init();for(const b of this.getIcons())b.initView(this.createIconPointerDownListener(b)),b.updateEditable();this.applyColour();this.pathObject.updateMovable(this.isMovable()||this.isInFlyout);(a=this.getSvgRoot())&&conditionalBind$$module$build$src$core$browser_events(a,\"pointerdown\",this,this.onMouseDown);a.parentNode||this.workspace.getCanvas().appendChild(a);this.initialized=!0}}getColourSecondary(){return this.style.colourSecondary}getColourTertiary(){return this.style.colourTertiary}select(){this.addSelect();\nfireSelectedEvent$$module$build$src$core$common(this)}unselect(){this.removeSelect();fireSelectedEvent$$module$build$src$core$common(null)}setParent(a){var b=this.parentBlock_;if(a!==b){startTextWidthCache$$module$build$src$core$utils$dom();super.setParent(a);stopTextWidthCache$$module$build$src$core$utils$dom();var c=this.getSvgRoot();if(!this.workspace.isClearing&&c){var d=this.getRelativeToSurfaceXY(),e=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode(),f,g=this.getSvgRoot().contains((f=\ne==null?void 0:e.getFocusableElement())!=null?f:null);a?(a.getSvgRoot().appendChild(c),g&&e&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e)):b&&(a=this.workspace.getCanvas().querySelector(\".blocklyDragging\"),b=a==null?void 0:a.parentElement,f=this.workspace.getCanvas(),b===f?f.insertBefore(c,a):(f.appendChild(c),g&&e&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(e)),this.translate(d.x,d.y));this.applyColour()}}}getRelativeToSurfaceXY(){const a=this.workspace.getLayerManager();\nif(!a)throw Error(\"Cannot calculate position because the workspace has not been appended\");let b=0,c=0,d=this.getSvgRoot();if(d){do{const e=getRelativeXY$$module$build$src$core$utils$svg_math(d);b+=e.x;c+=e.y;d=d.parentNode}while(d&&!a.hasLayer(d))}return new Coordinate$$module$build$src$core$utils$coordinate(b,c)}moveBy(a,b,c){if(this.parentBlock_)throw Error(\"Block has parent\");const d=isEnabled$$module$build$src$core$events$utils();let e=null;d&&(e=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_MOVE))(this),\nc&&e.setReason(c));a=new Coordinate$$module$build$src$core$utils$coordinate(a,b);b=this.getRelativeToSurfaceXY();a=Coordinate$$module$build$src$core$utils$coordinate.sum(b,a);this.translate(a.x,a.y);this.updateComponentLocations(a);d&&e&&(e.recordNew(),fire$$module$build$src$core$events$utils(e));this.workspace.resizeContents()}translate(a,b){this.translation=`translate(${a}, ${b})`;this.relativeCoords=new Coordinate$$module$build$src$core$utils$coordinate(a,b);this.getSvgRoot().setAttribute(\"transform\",\nthis.getTranslation())}getTranslation(){return this.translation}moveTo(a,b){const c=this.getRelativeToSurfaceXY();this.moveBy(a.x-c.x,a.y-c.y,b)}moveDuringDrag(a){this.translate(a.x,a.y);this.getSvgRoot().setAttribute(\"transform\",this.getTranslation());this.updateComponentLocations(a)}snapToGrid(){if(!this.isDeadOrDying()&&!this.getParent()&&!this.isInFlyout){var a=this.workspace.getGrid();if(a!=null&&a.shouldSnap()){var b=this.getRelativeToSurfaceXY();a=a.alignXY(b);a!==b&&this.moveTo(a,[\"snap\"])}}}getBoundingRectangle(){return this.getBoundingRectangleWithDimensions(this.getHeightWidth())}getBoundingRectangleWithoutChildren(){return this.getBoundingRectangleWithDimensions({height:this.height,\nwidth:this.childlessWidth})}getBoundingRectangleWithDimensions(a){const b=this.getRelativeToSurfaceXY();let c,d;this.RTL?(c=b.x-a.width,d=b.x):(c=b.x,d=b.x+a.width);return new Rect$$module$build$src$core$utils$rect(b.y,b.y+a.height,c,d)}markDirty(){this.pathObject.constants=this.workspace.getRenderer().getConstants();for(let a=0,b;b=this.inputList[a];a++)b.markDirty()}setCollapsed(a){this.collapsed_!==a&&(super.setCollapsed(a),this.updateCollapsed())}childHasWarning(){const a=this.getChildren(!1);\nfor(const b of a)if(b.getIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE)||b.childHasWarning())return!0;return!1}updateCollapsed(){var a=this.isCollapsed();const b=COLLAPSED_INPUT_NAME$$module$build$src$core$constants,c=COLLAPSED_FIELD_NAME$$module$build$src$core$constants;for(let e=0,f;f=this.inputList[e];e++)f.name!==b&&f.setVisible(!a);for(var d of this.getIcons())d.updateCollapsed();a?(addClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyCollapsed\"),this.childHasWarning()&&\nthis.setWarningText($.Msg$$module$build$src$core$msg.COLLAPSED_WARNINGS_WARNING,BlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID),a=this.toString(COLLAPSE_CHARS$$module$build$src$core$internal_constants),(d=this.getField(c))?d.setValue(a):(this.getInput(b)||this.appendDummyInput(b)).appendField(new FieldLabel$$module$build$src$core$field_label(a),c)):(this.updateDisabled(),this.removeInput(b),removeClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyCollapsed\"),this.setWarningText(null,\nBlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID))}onMouseDown(a){if(!this.workspace.isReadOnly()){var b=this.workspace.getGesture(a);b&&b.handleBlockStart(a,this)}}showHelp(){const a=typeof this.helpUrl===\"function\"?this.helpUrl():this.helpUrl;a&&window.open(a)}generateContextMenu(a){if(this.workspace.isReadOnly()||!this.contextMenu)return null;a=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({block:this,focusedNode:this},a);this.customContextMenu&&\nthis.customContextMenu(a);return a}calculateContextMenuLocation(a){if(a instanceof PointerEvent)return new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY);a=wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this.workspace,this.getRelativeToSurfaceXY());let b,c;const d=(b=this.inputList.filter(e=>e.isVisible()).flatMap(e=>e.fieldRow).find(e=>e.isVisible()))==null?void 0:(c=b.getSvgRoot())==null?void 0:c.getBoundingClientRect();return new Coordinate$$module$build$src$core$utils$coordinate(this.RTL?\na.x-5:a.x+5,(d&&d.height?d.y+d.height:a.y+this.height)+5)}showContextMenu(a){const b=this.generateContextMenu(a),c=this.calculateContextMenuLocation(a);b&&b.length&&(show$$module$build$src$core$contextmenu(a,b,this.RTL,this.workspace,c),setCurrentBlock$$module$build$src$core$contextmenu(this))}updateComponentLocations(a){this.dragging||this.updateConnectionLocations(a);this.updateIconLocations(a);this.updateFieldLocations(a);for(const b of this.getChildren(!1))b.updateComponentLocations(Coordinate$$module$build$src$core$utils$coordinate.sum(a,\nb.relativeCoords))}updateConnectionLocations(a){for(const b of this.getConnections_(!1))b.moveToOffset(a)}updateIconLocations(a){for(const b of this.getIcons())b.onLocationChange(a)}updateFieldLocations(a){for(const b of this.inputList)for(const c of b.fieldRow)c.onLocationChange(a)}addClass(a){addClass$$module$build$src$core$utils$dom(this.svgGroup,a)}removeClass(a){removeClass$$module$build$src$core$utils$dom(this.svgGroup,a)}setDragging(a){(this.dragging=a)?(this.translation=\"\",draggingConnections$$module$build$src$core$common.push(...this.getConnections_(!0)),\nthis.addClass(\"blocklyDragging\")):(draggingConnections$$module$build$src$core$common.length=0,this.removeClass(\"blocklyDragging\"));for(let b=0;bc.focusTree(this.workspace),0)}b&&(this.unplug(a),disposeUiEffect$$module$build$src$core$block_animations(this));super.dispose(!!a);\nremoveNode$$module$build$src$core$utils$dom(this.svgGroup)}disposeInternal(){this.disposing=!0;super.disposeInternal();$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===this&&this.workspace.cancelCurrentGesture();[...this.warningTextDb.values()].forEach(a=>clearTimeout(a));this.warningTextDb.clear();this.getIcons().forEach(a=>a.dispose())}checkAndDelete(){this.workspace.isFlyout||($.setGroup$$module$build$src$core$events$utils(!0),this.workspace.hideChaff(),this.outputConnection?\nthis.dispose(!1,!0):this.dispose(!0,!0),$.setGroup$$module$build$src$core$events$utils(!1))}toCopyData(a=!1){return this.isInsertionMarker_?null:{paster:BlockPaster$$module$build$src$core$clipboard$block_paster.TYPE,blockState:save$$module$build$src$core$serialization$blocks(this,{addCoordinates:!0,addNextBlocks:a,saveIds:!1}),typeCounts:getBlockTypeCounts$$module$build$src$core$common(this,!0)}}applyColour(){var a,b;(b=(a=this.pathObject).applyColour)==null||b.call(a,this);a=this.getIcons();for(b=\n0;b{this.isDeadOrDying()||(this.warningTextDb.delete(b),this.setWarningText(a,b))},100));else if(this.isInFlyout&&(a=null),c=this.getIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE),a){let d=this.getSurroundParent(),e=null;for(;d;)d.isCollapsed()&&(e=d),d=d.getSurroundParent();e&&e.setWarningText($.Msg$$module$build$src$core$msg.COLLAPSED_WARNINGS_WARNING,BlockSvg$$module$build$src$core$block_svg.COLLAPSED_WARNING_ID);\nc?c.addMessage(a,b):this.addIcon((new WarningIcon$$module$build$src$core$icons$warning_icon(this)).addMessage(a,b))}else c&&(b?(c.addMessage(\"\",b),c.getText()||this.removeIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE)):this.removeIcon(WarningIcon$$module$build$src$core$icons$warning_icon.TYPE))}setMutator(a){this.removeIcon($.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE);a&&this.addIcon(a)}addIcon(a){super.addIcon(a);a instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&\n(this.mutator=a);a.initView(this.createIconPointerDownListener(a));a.applyColour();a.updateEditable();this.queueRender();return a}createIconPointerDownListener(a){return b=>{this.isDeadOrDying()||(b=this.workspace.getGesture(b))&&b.setStartIcon(a)}}removeIcon(a){const b=super.removeIcon(a);a.equals($.MutatorIcon$$module$build$src$core$icons$mutator_icon.TYPE)&&(this.mutator=null);this.queueRender();return b}setDisabledReason(a,b){const c=this.isEnabled();super.setDisabledReason(a,b);this.isEnabled()===\nc||this.getInheritedDisabled()||this.updateDisabled()}setDeletable(a){super.setDeletable(a);a?removeClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyNotDeletable\"):addClass$$module$build$src$core$utils$dom(this.svgGroup,\"blocklyNotDeletable\")}setHighlighted(a){this.pathObject.updateHighlighted(a)}addSelect(){this.pathObject.updateSelected(!0)}removeSelect(){this.pathObject.updateSelected(!1)}setDeleteStyle(a){this.pathObject.updateDraggingDelete(a)}getColour(){return this.style.colourPrimary}setColour(a){super.setColour(a);\na=this.workspace.getRenderer().getConstants().getBlockStyleForColour(this.colour_);let b,c;(c=(b=this.pathObject).setStyle)==null||c.call(b,a.style);this.style=a.style;this.styleName_=a.name;this.applyColour()}setStyle(a){const b=this.workspace.getRenderer().getConstants().getBlockStyle(a);this.styleName_&&removeClass$$module$build$src$core$utils$dom(this.svgGroup,this.styleName_);if(b){this.hat=b.hat;let c,d;(d=(c=this.pathObject).setStyle)==null||d.call(c,b);this.colour_=b.colourPrimary;this.style=\nb;this.applyColour();addClass$$module$build$src$core$utils$dom(this.svgGroup,a);this.styleName_=a}else throw Error(\"Invalid style name: \"+a);}getStyle(){return this.style}bringToFront(a=!1){const b=$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode();let c=this;if(!c.isDeadOrDying()){do{const d=c.getSvgRoot(),e=d.parentNode,f=e.childNodes;f[f.length-1]!==d&&e.appendChild(d);if(a)break;c=c.getParent()}while(c);b&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b)}}setPreviousStatement(a,\nb){super.setPreviousStatement(a,b);this.queueRender()}setNextStatement(a,b){super.setNextStatement(a,b);this.queueRender()}setOutput(a,b){super.setOutput(a,b);this.queueRender()}setInputsInline(a){super.setInputsInline(a);this.queueRender()}removeInput(a,b){a=super.removeInput(a,b);this.queueRender();return a}moveNumberedInputBefore(a,b){super.moveNumberedInputBefore(a,b);this.queueRender()}appendInput(a){super.appendInput(a);this.queueRender();return a}setConnectionTracking(a){this.previousConnection&&\nthis.previousConnection.setTracking(a);this.outputConnection&&this.outputConnection.setTracking(a);if(this.nextConnection){this.nextConnection.setTracking(a);var b=this.nextConnection.targetBlock();b&&b.setConnectionTracking(a)}if(!this.collapsed_)for(b=0;bd.getElement()===a);if(c===-1)return null;c++;c>=b.length&&(c=0);return b[c].getElement()}getPreviousSibling(a){const b=this.flyout.getContents();if(!b)return null;let c=b.findIndex(d=>d.getElement()===\na);if(c===-1)return null;c--;c<0&&(c=b.length-1);return b[c].getElement()}isNavigable(a){return this.policy.isNavigable(a)}isApplicable(a){return this.policy.isApplicable(a)}},module$build$src$core$keyboard_nav$flyout_navigation_policy={};module$build$src$core$keyboard_nav$flyout_navigation_policy.FlyoutNavigationPolicy=FlyoutNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_navigation_policy;var FlyoutSeparator$$module$build$src$core$flyout_separator=class{constructor(a,b){this.gap=a;this.axis=b;this.y=this.x=0}getBoundingRectangle(){switch(this.axis){case \"x\":return new Rect$$module$build$src$core$utils$rect(this.y,this.y,this.x,this.x+this.gap);case \"y\":return new Rect$$module$build$src$core$utils$rect(this.y,this.y+this.gap,this.x,this.x)}}moveBy(a,b,c){this.x+=a;this.y+=b}isNavigable(){return!1}getFocusableElement(){throw Error(\"Cannot be focused\");}getFocusableTree(){throw Error(\"Cannot be focused\");\n}onNodeFocus(){}onNodeBlur(){}canBeFocused(){return!1}},module$build$src$core$flyout_separator={};module$build$src$core$flyout_separator.FlyoutSeparator=FlyoutSeparator$$module$build$src$core$flyout_separator;var FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy=class{getFirstChild(a){return null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return!1}isApplicable(a){return a instanceof FlyoutSeparator$$module$build$src$core$flyout_separator}},module$build$src$core$keyboard_nav$flyout_separator_navigation_policy={};\nmodule$build$src$core$keyboard_nav$flyout_separator_navigation_policy.FlyoutSeparatorNavigationPolicy=FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy;var BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy=class{getFirstChild(a){return a.getEditor()}getParent(a){let b;return(b=a.getOwner())!=null?b:null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof TextInputBubble$$module$build$src$core$bubbles$textinput_bubble}},module$build$src$core$keyboard_nav$block_comment_navigation_policy={};\nmodule$build$src$core$keyboard_nav$block_comment_navigation_policy.BlockCommentNavigationPolicy=BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy;var BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy=class{getFirstChild(a){return getBlockNavigationCandidates$$module$build$src$core$keyboard_nav$block_navigation_policy(a,!0)[0]}getParent(a){var b;if((b=a.previousConnection)==null?0:b.targetBlock()){if(b=a.getSurroundParent())return b}else{let c;if((c=a.outputConnection)==null?0:c.targetBlock())return a.outputConnection.targetBlock()}return a.workspace}getNextSibling(a){let b;if((b=a.nextConnection)==null?0:b.targetBlock()){let d;\nreturn(d=a.nextConnection)==null?void 0:d.targetBlock()}let c;return((c=a.outputConnection)==null?0:c.targetBlock())?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1):a.getSurroundParent()?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a.getTopStackBlock(),1):this.getParent(a)instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1):null}getPreviousSibling(a){let b;\nif((b=a.previousConnection)==null?0:b.targetBlock()){let d;return(d=a.previousConnection)==null?void 0:d.targetBlock()}let c;return((c=a.outputConnection)==null?0:c.targetBlock())?navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1):this.getParent(a)instanceof WorkspaceSvg$$module$build$src$core$workspace_svg?navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1):null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof BlockSvg$$module$build$src$core$block_svg}},\nmodule$build$src$core$keyboard_nav$block_navigation_policy={};module$build$src$core$keyboard_nav$block_navigation_policy.BlockNavigationPolicy=BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy;module$build$src$core$keyboard_nav$block_navigation_policy.navigateBlock=navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy;module$build$src$core$keyboard_nav$block_navigation_policy.navigateStacks=navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy;var CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy=class{getFirstChild(a){return null}getParent(a){return a.getCommentView().workspace.getCommentById(a.getCommentView().commentId)}getNextSibling(a){const b=a.getCommentView().getCommentBarButtons();a=b.indexOf(a);return a>=0&&a+10?b[a-1]:null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof\nCommentBarButton$$module$build$src$core$comments$comment_bar_button}},module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy={};module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy.CommentBarButtonNavigationPolicy=CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy;var CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy=class{getFirstChild(a){return null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof CommentEditor$$module$build$src$core$comments$comment_editor}},module$build$src$core$keyboard_nav$comment_editor_navigation_policy={};\nmodule$build$src$core$keyboard_nav$comment_editor_navigation_policy.CommentEditorNavigationPolicy=CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy;var ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy=class{getFirstChild(a){return a.getParentInput()?a.targetConnection:null}getParent(a){return a.getSourceBlock()}getNextSibling(a){if(a.getParentInput())return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1);if(a.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT){const c=a.targetConnection;var b=a.getSourceBlock();if(!c&&b.getRootBlock().lastConnectionInStack(!1)===\na){a=b.workspace.getTopBlocks(!0);b=a.indexOf(b.getRootBlock())+1;b>=a.length&&(b=0);b=a[b];let d;return(d=this.getParentConnection(b))!=null?d:b}return c}return a.getSourceBlock()}getPreviousSibling(a){if(a.getParentInput())return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1);if(a.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||a.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE){const c=a.targetConnection&&\n!a.targetConnection.getParentInput()?a.targetConnection:null;var b=a.getSourceBlock();if(!c&&this.getParentConnection(b.getRootBlock())===a){a=b.workspace.getTopBlocks(!0);b=a.indexOf(b.getRootBlock())-1;b<0&&(b=a.length-1);b=a[b];let d;return(d=b.lastConnectionInStack(!1))!=null?d:b}return c}return a.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT?a.getSourceBlock():null}getParentConnection(a){let b;return!a.outputConnection||((b=a.previousConnection)==null?0:b.isConnected())?\na.previousConnection:a.outputConnection}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof RenderedConnection$$module$build$src$core$rendered_connection}},module$build$src$core$keyboard_nav$connection_navigation_policy={};module$build$src$core$keyboard_nav$connection_navigation_policy.ConnectionNavigationPolicy=ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy;var FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy=class{getFirstChild(a){return null}getParent(a){return a.getSourceBlock()}getNextSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){let b;return a.canBeFocused()&&a.isVisible()&&(a.isClickable()||a.isCurrentlyEditable())&&!(((b=a.getSourceBlock())==\nnull?0:b.isSimpleReporter())&&a.isFullBlockField())&&a.getParentInput().isVisible()}isApplicable(a){return a instanceof Field$$module$build$src$core$field}},module$build$src$core$keyboard_nav$field_navigation_policy={};module$build$src$core$keyboard_nav$field_navigation_policy.FieldNavigationPolicy=FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy;var module$build$src$core$icons$registry={};module$build$src$core$icons$registry.register=register$$module$build$src$core$icons$registry;module$build$src$core$icons$registry.unregister=unregister$$module$build$src$core$icons$registry;var SIZE$$module$build$src$core$icons$comment_icon=17,DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon=160,DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon=80,CommentIcon$$module$build$src$core$icons$comment_icon=class extends Icon$$module$build$src$core$icons$icon{constructor(a){super(a);this.sourceBlock=a;this.textInputBubble=null;this.text=\"\";this.bubbleSize=new Size$$module$build$src$core$utils$size(DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon,DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon);\nthis.bubbleVisiblity=!1}getType(){return CommentIcon$$module$build$src$core$icons$comment_icon.TYPE}initView(a){this.svgRoot||(super.initView(a),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CIRCLE,{\"class\":\"blocklyIconShape\",r:\"8\",cx:\"8\",cy:\"8\"},this.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyIconSymbol\",d:\"m6.8,10h2c0.003,-0.617 0.271,-0.962 0.633,-1.266 2.875,-2.4050.607,-5.534 -3.765,-3.874v1.7c3.12,-1.657 3.698,0.118 2.336,1.25-1.201,0.998 -1.201,1.528 -1.204,2.19z\"},\nthis.svgRoot),createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{\"class\":\"blocklyIconSymbol\",x:\"6.8\",y:\"10.78\",height:\"2\",width:\"2\"},this.svgRoot),addClass$$module$build$src$core$utils$dom(this.svgRoot,\"blocklyCommentIcon\"))}dispose(){super.dispose();let a;(a=this.textInputBubble)==null||a.dispose()}getWeight(){return CommentIcon$$module$build$src$core$icons$comment_icon.WEIGHT}getSize(){return new Size$$module$build$src$core$utils$size(SIZE$$module$build$src$core$icons$comment_icon,\nSIZE$$module$build$src$core$icons$comment_icon)}applyColour(){super.applyColour();const a=this.sourceBlock.getColour();let b;(b=this.textInputBubble)==null||b.setColour(a)}updateEditable(){const a=this,b=()=>super.updateEditable;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){b().call(a);a.bubbleIsVisible()&&(yield a.setBubbleVisible(!1),yield a.setBubbleVisible(!0))})}onLocationChange(a){const b=this.workspaceLocation;super.onLocationChange(a);this.bubbleLocation&&(a=Coordinate$$module$build$src$core$utils$coordinate.difference(this.workspaceLocation,\nb),this.bubbleLocation=Coordinate$$module$build$src$core$utils$coordinate.sum(this.bubbleLocation,a));a=this.getAnchorLocation();let c;(c=this.textInputBubble)==null||c.setAnchorLocation(a)}setText(a){const b=this.text;fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\"comment\",null,b,a));this.text=a;let c;(c=this.textInputBubble)==null||c.setText(this.text)}getText(){return this.text}setBubbleSize(a){this.bubbleSize=\na;let b;(b=this.textInputBubble)==null||b.setSize(this.bubbleSize,!0)}getBubbleSize(){return this.bubbleSize}setBubbleLocation(a){this.bubbleLocation=a;let b;(b=this.textInputBubble)==null||b.moveDuringDrag(a)}getBubbleLocation(){return this.bubbleLocation}saveState(){if(this.text){const a={text:this.text,pinned:this.bubbleIsVisible(),height:this.bubbleSize.height,width:this.bubbleSize.width},b=this.getBubbleLocation();b&&(a.x=this.sourceBlock.workspace.RTL?this.sourceBlock.workspace.getWidth()-(b.x+\nthis.bubbleSize.width):b.x,a.y=b.y);return a}return null}loadState(a){let b;this.text=(b=a.text)!=null?b:\"\";let c,d;this.bubbleSize=new Size$$module$build$src$core$utils$size((c=a.width)!=null?c:DEFAULT_BUBBLE_WIDTH$$module$build$src$core$icons$comment_icon,(d=a.height)!=null?d:DEFAULT_BUBBLE_HEIGHT$$module$build$src$core$icons$comment_icon);let e;this.bubbleVisiblity=(e=a.pinned)!=null?e:!1;this.setBubbleVisible(this.bubbleVisiblity);let f=a.x;const g=a.y;finishQueuedRenders$$module$build$src$core$render_management().then(()=>\n{f&&g&&(f=this.sourceBlock.workspace.RTL?this.sourceBlock.workspace.getWidth()-(f+this.bubbleSize.width):f,this.setBubbleLocation(new Coordinate$$module$build$src$core$utils$coordinate(f,g)))})}onClick(){super.onClick();this.setBubbleVisible(!this.bubbleIsVisible())}isClickableInFlyout(){return!1}onTextChange(){if(this.textInputBubble){var a=this.textInputBubble.getText();this.text!==a&&(fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock,\n\"comment\",null,this.text,a)),this.text=a)}}onSizeChange(){this.textInputBubble&&(this.bubbleSize=this.textInputBubble.getSize())}onBubbleLocationChange(){this.textInputBubble&&(this.bubbleLocation=this.textInputBubble.getRelativeToSurfaceXY())}bubbleIsVisible(){return this.bubbleVisiblity}setBubbleVisible(a){const b=this;return(0,$jscomp.asyncExecutePromiseGeneratorFunction)(function*(){b.bubbleVisiblity!==a&&(b.bubbleVisiblity=a,yield finishQueuedRenders$$module$build$src$core$render_management(),\n!b.sourceBlock.rendered||b.sourceBlock.isInFlyout||b.sourceBlock.isInsertionMarker()||(a?(b.sourceBlock.isEditable()?b.showEditableBubble():b.showNonEditableBubble(),b.applyColour()):b.hideBubble(),fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BUBBLE_OPEN))(b.sourceBlock,a,\"comment\"))))})}getBubble(){return this.textInputBubble}showEditableBubble(){this.createBubble();let a;(a=this.textInputBubble)==null||a.addTextChangeListener(()=>\nthis.onTextChange());let b;(b=this.textInputBubble)==null||b.addSizeChangeListener(()=>this.onSizeChange())}showNonEditableBubble(){this.createBubble();let a;(a=this.textInputBubble)==null||a.setEditable(!1)}createBubble(){this.textInputBubble=new TextInputBubble$$module$build$src$core$bubbles$textinput_bubble(this.sourceBlock.workspace,this.getAnchorLocation(),this.getBubbleOwnerRect(),this);this.textInputBubble.setText(this.getText());this.textInputBubble.setSize(this.bubbleSize,!0);this.bubbleLocation&&\nthis.textInputBubble.moveDuringDrag(this.bubbleLocation);this.textInputBubble.addTextChangeListener(()=>this.onTextChange());this.textInputBubble.addSizeChangeListener(()=>this.onSizeChange());this.textInputBubble.addLocationChangeListener(()=>this.onBubbleLocationChange())}hideBubble(){let a;(a=this.textInputBubble)==null||a.dispose();this.textInputBubble=null}getAnchorLocation(){const a=SIZE$$module$build$src$core$icons$comment_icon/2;return Coordinate$$module$build$src$core$utils$coordinate.sum(this.workspaceLocation,\nnew Coordinate$$module$build$src$core$utils$coordinate(a,a))}getBubbleOwnerRect(){return this.sourceBlock.getBoundingRectangleWithoutChildren()}};CommentIcon$$module$build$src$core$icons$comment_icon.TYPE=IconType$$module$build$src$core$icons$icon_types.COMMENT;CommentIcon$$module$build$src$core$icons$comment_icon.WEIGHT=3;register$$module$build$src$core$icons$registry(CommentIcon$$module$build$src$core$icons$comment_icon.TYPE,CommentIcon$$module$build$src$core$icons$comment_icon);\nvar module$build$src$core$icons$comment_icon={};module$build$src$core$icons$comment_icon.CommentIcon=CommentIcon$$module$build$src$core$icons$comment_icon;var IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy=class{getFirstChild(a){if(a instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&a.bubbleIsVisible()&&$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===a){let b,c;return(c=(b=a.getBubble())==null?void 0:b.getWorkspace())!=null?c:null}if(a instanceof CommentIcon$$module$build$src$core$icons$comment_icon&&a.bubbleIsVisible()&&$.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()===\na){let b,c;return(c=(b=a.getBubble())==null?void 0:b.getEditor())!=null?c:null}return null}getParent(a){return a.getSourceBlock()}getNextSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateBlock$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof Icon$$module$build$src$core$icons$icon}},module$build$src$core$keyboard_nav$icon_navigation_policy=\n{};module$build$src$core$keyboard_nav$icon_navigation_policy.IconNavigationPolicy=IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy;var WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy=class{getFirstChild(a){return a.view.getCommentBarButtons()[0]}getParent(a){return a.workspace}getNextSibling(a){return navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,1)}getPreviousSibling(a){return navigateStacks$$module$build$src$core$keyboard_nav$block_navigation_policy(a,-1)}isNavigable(a){return a.canBeFocused()}isApplicable(a){return a instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment}},\nmodule$build$src$core$keyboard_nav$workspace_comment_navigation_policy={};module$build$src$core$keyboard_nav$workspace_comment_navigation_policy.WorkspaceCommentNavigationPolicy=WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy;var WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy=class{getFirstChild(a){a=a.getTopBlocks(!0);return a.length?a[0]:null}getParent(a){return null}getNextSibling(a){return null}getPreviousSibling(a){return null}isNavigable(a){return a.canBeFocused()&&!a.isMutator}isApplicable(a){return a instanceof WorkspaceSvg$$module$build$src$core$workspace_svg}},module$build$src$core$keyboard_nav$workspace_navigation_policy={};\nmodule$build$src$core$keyboard_nav$workspace_navigation_policy.WorkspaceNavigationPolicy=WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy;var Navigator$$module$build$src$core$navigator=class{constructor(){this.rules=[new BlockNavigationPolicy$$module$build$src$core$keyboard_nav$block_navigation_policy,new FieldNavigationPolicy$$module$build$src$core$keyboard_nav$field_navigation_policy,new ConnectionNavigationPolicy$$module$build$src$core$keyboard_nav$connection_navigation_policy,new WorkspaceNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_navigation_policy,new IconNavigationPolicy$$module$build$src$core$keyboard_nav$icon_navigation_policy,\nnew WorkspaceCommentNavigationPolicy$$module$build$src$core$keyboard_nav$workspace_comment_navigation_policy,new CommentBarButtonNavigationPolicy$$module$build$src$core$keyboard_nav$comment_bar_button_navigation_policy,new BlockCommentNavigationPolicy$$module$build$src$core$keyboard_nav$block_comment_navigation_policy,new CommentEditorNavigationPolicy$$module$build$src$core$keyboard_nav$comment_editor_navigation_policy]}addNavigationPolicy(a){this.rules.push(a)}get(a){return this.rules.find(b=>b.isApplicable(a))}getFirstChild(a){let b;\nconst c=(b=this.get(a))==null?void 0:b.getFirstChild(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getFirstChild(c)||this.getNextSibling(c)}getParent(a){let b;const c=(b=this.get(a))==null?void 0:b.getParent(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getParent(c)}getNextSibling(a){let b;const c=(b=this.get(a))==null?void 0:b.getNextSibling(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getNextSibling(c)}getPreviousSibling(a){let b;\nconst c=(b=this.get(a))==null?void 0:b.getPreviousSibling(a);if(!c)return null;let d;return(d=this.get(c))!=null&&d.isNavigable(c)?c:this.getPreviousSibling(c)}},module$build$src$core$navigator={};module$build$src$core$navigator.Navigator=Navigator$$module$build$src$core$navigator;var FlyoutNavigator$$module$build$src$core$flyout_navigator=class extends Navigator$$module$build$src$core$navigator{constructor(a){super();this.rules.push(new FlyoutButtonNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_button_navigation_policy,new FlyoutSeparatorNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_separator_navigation_policy);this.rules=this.rules.map(b=>new FlyoutNavigationPolicy$$module$build$src$core$keyboard_nav$flyout_navigation_policy(b,a))}},module$build$src$core$flyout_navigator=\n{};module$build$src$core$flyout_navigator.FlyoutNavigator=FlyoutNavigator$$module$build$src$core$flyout_navigator;var ScrollbarPair$$module$build$src$core$scrollbar_pair=class{constructor(a,b,c,d,e){this.workspace=a;this.oldHostMetrics=this.corner_=this.vScroll=this.hScroll=null;b=b===void 0?!0:b;c=c===void 0?!0:c;const f=b&&c;b&&(this.hScroll=new Scrollbar$$module$build$src$core$scrollbar(a,!0,f,d,e));c&&(this.vScroll=new Scrollbar$$module$build$src$core$scrollbar(a,!1,f,d,e));f&&(this.corner_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{height:Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness,\nwidth:Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness,\"class\":\"blocklyScrollbarBackground\"}),insertAfter$$module$build$src$core$utils$dom(this.corner_,a.getBubbleCanvas()))}dispose(){removeNode$$module$build$src$core$utils$dom(this.corner_);this.oldHostMetrics=this.corner_=null;this.hScroll&&(this.hScroll.dispose(),this.hScroll=null);this.vScroll&&(this.vScroll.dispose(),this.vScroll=null)}resize(){const a=this.workspace.getMetrics();if(a){var b=!1,c=!1;this.oldHostMetrics&&this.oldHostMetrics.viewWidth===\na.viewWidth&&this.oldHostMetrics.viewHeight===a.viewHeight&&this.oldHostMetrics.absoluteTop===a.absoluteTop&&this.oldHostMetrics.absoluteLeft===a.absoluteLeft?(this.oldHostMetrics&&this.oldHostMetrics.scrollWidth===a.scrollWidth&&this.oldHostMetrics.viewLeft===a.viewLeft&&this.oldHostMetrics.scrollLeft===a.scrollLeft||(b=!0),this.oldHostMetrics&&this.oldHostMetrics.scrollHeight===a.scrollHeight&&this.oldHostMetrics.viewTop===a.viewTop&&this.oldHostMetrics.scrollTop===a.scrollTop||(c=!0)):c=b=!0;if(b||\nc){try{$.disable$$module$build$src$core$events$utils(),this.hScroll&&b&&this.hScroll.resize(a),this.vScroll&&c&&this.vScroll.resize(a)}finally{$.enable$$module$build$src$core$events$utils()}this.workspace.maybeFireViewportChangeEvent()}if(this.hScroll&&this.vScroll){if(!this.oldHostMetrics||this.oldHostMetrics.viewWidth!==a.viewWidth||this.oldHostMetrics.absoluteLeft!==a.absoluteLeft){let d;(d=this.corner_)==null||d.setAttribute(\"x\",String(this.vScroll.position.x))}if(!this.oldHostMetrics||this.oldHostMetrics.viewHeight!==\na.viewHeight||this.oldHostMetrics.absoluteTop!==a.absoluteTop){let d;(d=this.corner_)==null||d.setAttribute(\"y\",String(this.hScroll.position.y))}}this.oldHostMetrics=a}}canScrollHorizontally(){return!!this.hScroll}canScrollVertically(){return!!this.vScroll}setOrigin(a,b){this.hScroll&&this.hScroll.setOrigin(a,b);this.vScroll&&this.vScroll.setOrigin(a,b)}set(a,b,c){this.hScroll&&this.hScroll.set(a,!1);this.vScroll&&this.vScroll.set(b,!1);if(c||c===void 0)a={},this.hScroll&&(a.x=this.hScroll.getRatio_()),\nthis.vScroll&&(a.y=this.vScroll.getRatio_()),this.workspace.setMetrics(a)}setX(a){this.hScroll&&this.hScroll.set(a,!0)}setY(a){this.vScroll&&this.vScroll.set(a,!0)}setContainerVisible(a){this.hScroll&&this.hScroll.setContainerVisible(a);this.vScroll&&this.vScroll.setContainerVisible(a)}isVisible(){let a=!1;this.hScroll&&(a=this.hScroll.isVisible());this.vScroll&&(a=a||this.vScroll.isVisible());return a}setVisible(a){this.hScroll&&this.hScroll.setVisibleInternal(a);this.vScroll&&this.vScroll.setVisibleInternal(a)}resizeContent(a){this.hScroll&&\nthis.hScroll.resizeContentHorizontal(a);this.vScroll&&this.vScroll.resizeContentVertical(a)}resizeView(a){this.hScroll&&this.hScroll.resizeViewHorizontal(a);this.vScroll&&this.vScroll.resizeViewVertical(a)}},module$build$src$core$scrollbar_pair={};module$build$src$core$scrollbar_pair.ScrollbarPair=ScrollbarPair$$module$build$src$core$scrollbar_pair;var SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater=\"sep\",SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater=class{load(a,b){a=new FlyoutSeparator$$module$build$src$core$flyout_separator(0,b.horizontalLayout?\"x\":\"y\");return new FlyoutItem$$module$build$src$core$flyout_item(a,SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater)}gapForItem(a,b){let c;return(c=parseInt(String(a.gap)))!=null?c:b}disposeItem(a){}getType(){return SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater}};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater,SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater);var module$build$src$core$separator_flyout_inflater={SEPARATOR_TYPE:SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater};module$build$src$core$separator_flyout_inflater.SeparatorFlyoutInflater=SeparatorFlyoutInflater$$module$build$src$core$separator_flyout_inflater;var Flyout$$module$build$src$core$flyout_base=class extends DeleteArea$$module$build$src$core$delete_area{constructor(a){super();this.horizontalLayout=!1;this.boundEvents=[];this.reflowWrapper=null;this.contents=[];this.autoClose=!0;this.visible=!1;this.containerVisible=!0;this.CORNER_RADIUS=8;this.SCROLLBAR_MARGIN=2.5;this.height_=this.width_=0;this.dragAngleRange_=70;this.svgGroup_=this.svgBackground_=null;this.inflaters=new Map;a.setMetrics=this.setMetrics_.bind(this);this.workspace_=new WorkspaceSvg$$module$build$src$core$workspace_svg(a);\nthis.workspace_.setMetricsManager(new FlyoutMetricsManager$$module$build$src$core$flyout_metrics_manager(this.workspace_,this));this.workspace_.internalIsFlyout=!0;this.workspace_.setVisible(this.visible);this.workspace_.setNavigator(new FlyoutNavigator$$module$build$src$core$flyout_navigator(this));this.id=genUid$$module$build$src$core$utils$idgenerator();this.RTL=!!a.RTL;this.toolboxPosition_=a.toolboxPosition;this.tabWidth_=this.workspace_.getRenderer().getConstants().TAB_WIDTH;this.MARGIN=this.CORNER_RADIUS;\nthis.GAP_X=this.MARGIN*3;this.GAP_Y=this.MARGIN*3}createDom(a){this.svgGroup_=createSvgElement$$module$build$src$core$utils$dom(a,{\"class\":\"blocklyFlyout\"});this.svgGroup_.style.display=\"none\";this.svgBackground_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyFlyoutBackground\"},this.svgGroup_);this.svgGroup_.appendChild(this.workspace_.createDom());this.workspace_.getThemeManager().subscribe(this.svgBackground_,\"flyoutBackgroundColour\",\n\"fill\");this.workspace_.getThemeManager().subscribe(this.svgBackground_,\"flyoutOpacity\",\"fill-opacity\");return this.svgGroup_}init(a){this.targetWorkspace=a;this.workspace_.targetWorkspace=a;this.workspace_.scrollbar=new ScrollbarPair$$module$build$src$core$scrollbar_pair(this.workspace_,this.horizontalLayout,!this.horizontalLayout,\"blocklyFlyoutScrollbar\",this.SCROLLBAR_MARGIN);this.hide();this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"wheel\",this,this.wheel_));\nthis.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(this.svgBackground_,\"pointerdown\",this,this.onMouseDown));this.workspace_.getGesture=this.targetWorkspace.getGesture.bind(this.targetWorkspace);this.workspace_.setVariableMap(this.targetWorkspace.getVariableMap());this.workspace_.createPotentialVariableMap();a.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.FLYOUT_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,\nComponentManager$$module$build$src$core$component_manager.Capability.DELETE_AREA,ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET]})}dispose(){this.hide();this.targetWorkspace.getComponentManager().removeComponent(this.id);for(const a of this.boundEvents)unbind$$module$build$src$core$browser_events(a);this.boundEvents.length=0;this.workspace_&&(this.workspace_.getThemeManager().unsubscribe(this.svgBackground_),this.workspace_.dispose());this.svgGroup_&&removeNode$$module$build$src$core$utils$dom(this.svgGroup_)}getWidth(){return this.width_}getHeight(){return this.height_}getFlyoutScale(){return this.targetWorkspace.scale}getWorkspace(){return this.workspace_}setAutoClose(a){this.autoClose=\na;this.targetWorkspace.recordDragTargets();this.targetWorkspace.resizeContents()}autoHide(a){!a&&this.targetWorkspace.getFlyout(!0)===this&&this.autoClose&&this.hide()}getTargetWorkspace(){return this.targetWorkspace}isVisible(){return this.visible}setVisible(a){const b=a!==this.isVisible();this.visible=a;b&&(this.autoClose||this.targetWorkspace.recordDragTargets(),this.updateDisplay())}setContainerVisible(a){const b=a!==this.containerVisible;this.containerVisible=a;b&&this.updateDisplay()}getContents(){return this.contents}setContents(a){this.contents=\na}updateDisplay(){let a;a=this.containerVisible?this.isVisible():!1;this.svgGroup_&&(this.svgGroup_.style.display=a?\"block\":\"none\");let b;(b=this.workspace_.scrollbar)==null||b.setContainerVisible(a)}positionAt_(a,b,c,d){let e;(e=this.svgGroup_)==null||e.setAttribute(\"width\",`${a}`);let f;(f=this.svgGroup_)==null||f.setAttribute(\"height\",`${b}`);this.workspace_.setCachedParentSvgSize(a,b);this.svgGroup_&&setCssTransform$$module$build$src$core$utils$dom(this.svgGroup_,\"translate(\"+c+\"px,\"+d+\"px)\");\nif(a=this.workspace_.scrollbar)a.setOrigin(c,d),a.resize(),a.hScroll&&a.hScroll.setPosition(a.hScroll.position.x,a.hScroll.position.y),a.vScroll&&a.vScroll.setPosition(a.vScroll.position.x,a.vScroll.position.y)}hide(){this.isVisible()&&(this.setVisible(!1),this.reflowWrapper&&(this.workspace_.removeChangeListener(this.reflowWrapper),this.reflowWrapper=null))}show(a){this.workspace_.setResizesEnabled(!1);this.hide();this.clearOldBlocks();typeof a===\"string\"&&(a=this.getDynamicCategoryContents(a));\nthis.setVisible(!0);a=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox(a);a=this.createFlyoutInfo(a);triggerQueuedRenders$$module$build$src$core$render_management(this.workspace_);this.setContents(a);this.layout_(a);this.horizontalLayout?this.height_=0:this.width_=0;this.reflow();this.workspace_.setResizesEnabled(!0);this.reflowWrapper=b=>{b.type!==EventType$$module$build$src$core$events$type.BLOCK_CHANGE&&b.type!==EventType$$module$build$src$core$events$type.BLOCK_FIELD_INTERMEDIATE_CHANGE||\nthis.reflow()};this.workspace_.addChangeListener(this.reflowWrapper)}createFlyoutInfo(a){const b=[],c=this.horizontalLayout?this.GAP_X:this.GAP_Y;for(const d of a)if(\"custom\"in d&&(a=this.getDynamicCategoryContents(d.custom),a=convertFlyoutDefToJsonArray$$module$build$src$core$utils$toolbox(a),b.push(...this.createFlyoutInfo(a))),a=d.kind.toLowerCase(),a=this.getInflaterForType(a))b.push(a.load(d,this)),(a=a.gapForItem(d,c))&&b.push(new FlyoutItem$$module$build$src$core$flyout_item(new FlyoutSeparator$$module$build$src$core$flyout_separator(a,\nthis.horizontalLayout?\"x\":\"y\"),SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater));return this.normalizeSeparators(b)}normalizeSeparators(a){for(let b=a.length-1;b>0;b--){const c=a[b].getType().toLowerCase(),d=a[b-1].getType().toLowerCase();c===SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater&&d===SEPARATOR_TYPE$$module$build$src$core$separator_flyout_inflater&&a.splice(b-1,1)}return a}getDynamicCategoryContents(a){a=this.workspace_.targetWorkspace.getToolboxCategoryCallback(a);\nif(typeof a!==\"function\")throw TypeError(\"Couldn't find a callback function when opening a toolbox category.\");return a(this.workspace_.targetWorkspace)}clearOldBlocks(){this.getContents().forEach(b=>{let c;(c=this.getInflaterForType(b.getType()))==null||c.disposeItem(b)});let a;(a=this.workspace_.getPotentialVariableMap())==null||a.clear()}onMouseDown(a){const b=this.targetWorkspace.getGesture(a);b&&b.handleFlyoutStart(a,this)}isBlockCreatable(a){return a.isEnabled()&&!this.getTargetWorkspace().isReadOnly()}createBlock(a){let b=\nnull;$.disable$$module$build$src$core$events$utils();var c=this.targetWorkspace.getAllVariables();this.targetWorkspace.setResizesEnabled(!1);try{b=this.placeNewBlock(a)}finally{$.enable$$module$build$src$core$events$utils()}this.targetWorkspace.hideChaff();a=getAddedVariables$$module$build$src$core$variables(this.targetWorkspace,c);if(isEnabled$$module$build$src$core$events$utils()){$.setGroup$$module$build$src$core$events$utils(!0);for(c=0;c\n(this.flyout?$.config$$module$build$src$core$config.flyoutDragRadius:$.config$$module$build$src$core$config.dragRadius)}updateIsDraggingFromFlyout(){let a;if(!this.targetBlock||(a=this.flyout)==null||!a.isBlockCreatable(this.targetBlock))return!1;if(!this.flyout.targetWorkspace)throw Error(\"Cannot update dragging from the flyout because the ' +\\n 'flyout's target workspace is undefined\");return!this.flyout.isScrollable()||this.flyout.isDragTowardWorkspace(this.currentDragDeltaXY)?(this.startWorkspace_=\nthis.flyout.targetWorkspace,this.startWorkspace_.updateScreenCalculationsIfScrolled(),$.getGroup$$module$build$src$core$events$utils()||$.setGroup$$module$build$src$core$events$utils(!0),this.startBlock=null,this.targetBlock=this.flyout.createBlock(this.targetBlock),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.targetBlock),!0):!1}updateIsDraggingWorkspace(){if(!this.startWorkspace_)throw Error(\"Cannot update dragging the workspace because the start workspace is undefined\");\nif(this.flyout?this.flyout.isScrollable():this.startWorkspace_&&this.startWorkspace_.isDraggable())this.dragging=!0,this.workspaceDragger=new WorkspaceDragger$$module$build$src$core$workspace_dragger(this.startWorkspace_),this.workspaceDragger.startDrag()}updateIsDragging(a){if(!this.startWorkspace_)throw Error(\"Cannot update dragging because the start workspace is undefined\");if(this.calledUpdateIsDragging)throw Error(\"updateIsDragging_ should only be called once per gesture.\");this.calledUpdateIsDragging=\n!0;this.flyout&&this.updateIsDraggingFromFlyout();const b=getSelected$$module$build$src$core$common();b&&isDraggable$$module$build$src$core$interfaces$i_draggable(b)&&b.isMovable()?(this.dragging=!0,this.dragger=this.createDragger(b,this.startWorkspace_),this.dragger.onDragStart(a),this.dragger.onDrag(a,this.currentDragDeltaXY)):this.updateIsDraggingWorkspace()}createDragger(a,b){return new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.BLOCK_DRAGGER,this.creatorWorkspace.options,\n!0))(a,b)}doStart(a){if(!this.startWorkspace_)throw Error(\"Cannot start the touch gesture becauase the start workspace is undefined\");this.isPinchZoomEnabled=this.startWorkspace_.options.zoomOptions&&this.startWorkspace_.options.zoomOptions.pinch;isTargetInput$$module$build$src$core$browser_events(a)?this.cancel():(this.gestureHasStarted=!0,disconnectUiStop$$module$build$src$core$block_animations(),this.startWorkspace_.updateScreenCalculationsIfScrolled(),this.startWorkspace_.isMutator&&this.startWorkspace_.resize(),\nthis.currentDropdownOwner=getOwner$$module$build$src$core$dropdowndiv(),this.startWorkspace_.hideChaff(!!this.flyout),this.startWorkspace_.markFocused(),this.mostRecentEvent=a,block$$module$build$src$core$tooltip(),isRightButton$$module$build$src$core$browser_events(a)?this.handleRightClick(a):(a.type.toLowerCase()===\"pointerdown\"&&a.pointerType!==\"mouse\"&&longStart$$module$build$src$core$touch(a,this),this.mouseDownXY=new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY),this.bindMouseEvents(a),\nthis.isEnding_||this.handleTouchStart(a)))}bindMouseEvents(a){this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointerdown\",null,this.handleStart.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointermove\",null,this.handleMove.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\"pointerup\",null,this.handleUp.bind(this),!0));this.boundEvents.push(conditionalBind$$module$build$src$core$browser_events(document,\n\"pointercancel\",null,this.handleUp.bind(this),!0));a.preventDefault();a.stopPropagation()}handleStart(a){this.isDragging()||(this.handleTouchStart(a),this.isMultiTouch()&&longStop$$module$build$src$core$touch())}handleMove(a){if(this.isDragging()&&shouldHandleEvent$$module$build$src$core$touch(a)||!this.isMultiTouch()){this.updateFromEvent(a);if(this.workspaceDragger)this.workspaceDragger.drag(this.currentDragDeltaXY);else if(this.dragger)this.dragger.onDrag(this.mostRecentEvent,this.currentDragDeltaXY);\na.preventDefault();a.stopPropagation()}else this.isMultiTouch()&&(this.handleTouchMove(a),longStop$$module$build$src$core$touch())}handleUp(a){this.isDragging()||this.handleTouchEnd(a);if(!this.isMultiTouch()||this.isDragging()){if(!shouldHandleEvent$$module$build$src$core$touch(a))return;this.updateFromEvent(a);longStop$$module$build$src$core$touch();if(this.isEnding_){console.log(\"Trying to end a gesture recursively.\");return}this.isEnding_=!0;this.dragger?(keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1),\nthis.dragger.onDragEnd(a,this.currentDragDeltaXY)):this.workspaceDragger?(keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1),this.workspaceDragger.endDrag(this.currentDragDeltaXY)):this.isBubbleClick()||this.isCommentClick()||(this.isFieldClick()?this.doFieldClick():this.isIconClick()?this.doIconClick():this.isBlockClick()?this.doBlockClick():this.isWorkspaceClick()&&this.doWorkspaceClick(a))}a.preventDefault();a.stopPropagation();this.dispose()}handleTouchStart(a){var b=\ngetTouchIdentifierFromEvent$$module$build$src$core$touch(a);this.cachedPoints.set(b,this.getTouchPoint(a));var c=Array.from(this.cachedPoints.keys());c.length===2&&(b=this.cachedPoints.get(c[0]),c=this.cachedPoints.get(c[1]),this.startDistance=Coordinate$$module$build$src$core$utils$coordinate.distance(b,c),this.multiTouch=!0,a.preventDefault())}handleTouchMove(a){const b=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);this.cachedPoints.set(b,this.getTouchPoint(a));if(this.isPinchZoomEnabled&&\nthis.cachedPoints.size===2)this.handlePinch(a);else{this.updateFromEvent(a);if(this.workspaceDragger)this.workspaceDragger.drag(this.currentDragDeltaXY);else if(this.dragger)this.dragger.onDrag(this.mostRecentEvent,this.currentDragDeltaXY);a.preventDefault();a.stopPropagation()}}handlePinch(a){var b=Array.from(this.cachedPoints.keys()),c=this.cachedPoints.get(b[0]);b=this.cachedPoints.get(b[1]);c=Coordinate$$module$build$src$core$utils$coordinate.distance(c,b)/this.startDistance;if(this.previousScale>\n0&&this.previousScale0?b*ZOOM_IN_MULTIPLIER$$module$build$src$core$gesture:b*ZOOM_OUT_MULTIPLIER$$module$build$src$core$gesture;if(!this.startWorkspace_)throw Error(\"Cannot handle a pinch because the start workspace is undefined\");const d=this.startWorkspace_,e=mouseToSvg$$module$build$src$core$browser_events(a,d.getParentSvg(),d.getInverseScreenCTM());d.zoom(e.x,e.y,b)}this.previousScale=c;a.preventDefault()}handleTouchEnd(a){a=getTouchIdentifierFromEvent$$module$build$src$core$touch(a);\nthis.cachedPoints.has(a)&&this.cachedPoints.delete(a);this.cachedPoints.size<2&&(this.cachedPoints.clear(),this.previousScale=0)}getTouchPoint(a){return this.startWorkspace_?new Coordinate$$module$build$src$core$utils$coordinate(a.pageX,a.pageY):null}isMultiTouch(){return this.multiTouch}cancel(){if(!this.isEnding_){longStop$$module$build$src$core$touch();if(this.dragger)this.dragger.onDragEnd(this.mostRecentEvent,this.currentDragDeltaXY);else this.workspaceDragger&&this.workspaceDragger.endDrag(this.currentDragDeltaXY);\nthis.dispose()}}handleRightClick(a){this.targetBlock?(this.bringBlockToFront(),this.targetBlock.workspace.hideChaff(!!this.flyout),this.targetBlock.showContextMenu(a)):this.startBubble?this.startBubble.showContextMenu(a):this.startComment?(this.startComment.workspace.hideChaff(),this.startComment.showContextMenu(a)):this.startWorkspace_&&!this.flyout&&(this.startWorkspace_.hideChaff(),$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.startWorkspace_),this.startWorkspace_.showContextMenu(a));\na.preventDefault();a.stopPropagation();keyboardNavigationController$$module$build$src$core$keyboard_navigation_controller.setIsActive(!1);this.dispose()}handleWsStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleWsStart, but the gesture had already been started.\");this.setStartWorkspace(b);this.mostRecentEvent=a;this.startBlock||this.startBubble||this.startComment?this.startBlock&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.startBlock):$.getFocusManager$$module$build$src$core$focus_manager().focusNode(b);\nthis.doStart(a)}fireWorkspaceClick(a){fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(null,a.id,\"workspace\"))}handleFlyoutStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleFlyoutStart, but the gesture had already been started.\");this.setStartFlyout(b);this.handleWsStart(a,b.getWorkspace())}handleBlockStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleBlockStart, but the gesture had already been started.\");\nthis.setStartBlock(b);this.mostRecentEvent=a}handleBubbleStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleBubbleStart, but the gesture had already been started.\");this.setStartBubble(b);this.mostRecentEvent=a}handleCommentStart(a,b){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.handleCommentStart, but the gesture had already been started.\");this.setStartComment(b);this.mostRecentEvent=a}doFieldClick(){if(!this.startField)throw Error(\"Cannot do a field click because the start field is undefined\");\nthis.bringBlockToFront();this.currentDropdownOwner!==this.startField&&this.startField.showEditor(this.mostRecentEvent)}doIconClick(){if(!this.startIcon)throw Error(\"Cannot do an icon click because the start icon is undefined\");this.bringBlockToFront();this.startIcon.onClick()}doBlockClick(){if(this.flyout&&this.flyout.autoClose){if(!this.targetBlock)throw Error(\"Cannot do a block click because the target block is undefined\");if(this.flyout.isBlockCreatable(this.targetBlock)){$.getGroup$$module$build$src$core$events$utils()||\n$.setGroup$$module$build$src$core$events$utils(!0);var a=this.flyout.createBlock(this.targetBlock);a.snapToGrid();a.bumpNeighbours();$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}}else{if(!this.startWorkspace_)throw Error(\"Cannot do a block click because the start workspace is undefined\");a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.CLICK))(this.startBlock,this.startWorkspace_.id,\"block\");fire$$module$build$src$core$events$utils(a)}this.bringBlockToFront();\n$.setGroup$$module$build$src$core$events$utils(!1)}doWorkspaceClick(a){this.fireWorkspaceClick(this.startWorkspace_||this.creatorWorkspace)}bringBlockToFront(){this.targetBlock&&!this.flyout&&($.getFocusManager$$module$build$src$core$focus_manager().focusNode(this.targetBlock),this.targetBlock.bringToFront())}setStartField(a){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.setStartField, but the gesture had already been started.\");this.startField||(this.startField=a)}setStartIcon(a){if(this.gestureHasStarted)throw Error(\"Tried to call gesture.setStartIcon, but the gesture had already been started.\");\nthis.startIcon||(this.startIcon=a)}setStartBubble(a){this.startBubble||(this.startBubble=a)}setStartComment(a){this.startComment||(this.startComment=a)}setStartBlock(a){this.startBlock||this.startBubble||(this.startBlock=a,a.isInFlyout&&a!==a.getRootBlock()?this.setTargetBlock(a.getRootBlock()):this.setTargetBlock(a))}setTargetBlock(a){a.isShadow()?this.setTargetBlock(a.getParent()):(this.targetBlock=a,$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a))}setStartWorkspace(a){this.startWorkspace_||\n(this.startWorkspace_=a)}setStartFlyout(a){this.flyout||(this.flyout=a)}isBubbleClick(){return!!this.startBubble&&!this.hasExceededDragRadius}isCommentClick(){return!!this.startComment&&!this.hasExceededDragRadius}isBlockClick(){return!!this.startBlock&&!this.hasExceededDragRadius&&!this.isFieldClick()&&!this.isIconClick()}isFieldClick(){return this.startField?this.startField.isClickable()&&!this.hasExceededDragRadius&&(!this.flyout||this.startField.isClickableInFlyout(this.flyout.autoClose)):!1}isIconClick(){if(!this.startIcon)return!1;\nconst a=!this.flyout||!this.startIcon.isClickableInFlyout||this.startIcon.isClickableInFlyout(this.flyout.autoClose);return!this.hasExceededDragRadius&&a}isWorkspaceClick(){return!this.startBlock&&!this.startBubble&&!this.startField&&!this.hasExceededDragRadius}getCurrentDragger(){let a,b;return(b=(a=this.workspaceDragger)!=null?a:this.dragger)!=null?b:null}isDragging(){return this.dragging}hasStarted(){return this.gestureHasStarted}static inProgress(){const a=getAllWorkspaces$$module$build$src$core$common();\nfor(let b=0,c;c=a[b];b++)if(c.currentGesture_)return!0;return!1}},module$build$src$core$gesture={};module$build$src$core$gesture.Gesture=Gesture$$module$build$src$core$gesture;var Grid$$module$build$src$core$grid=class{constructor(a,b){this.pattern=a;this.scale=1;let c;this.spacing=(c=b.spacing)!=null?c:0;let d;this.length=(d=b.length)!=null?d:1;this.line2=(this.line1=a.firstChild)&&this.line1.nextSibling;let e;this.snapToGrid=(e=b.snap)!=null?e:!1}setSpacing(a){this.spacing=a;this.update(this.scale)}getSpacing(){return this.spacing}setLength(a){this.length=a;this.update(this.scale)}getLength(){return this.length}setSnapToGrid(a){this.snapToGrid=a}shouldSnap(){return this.snapToGrid}getPatternId(){return this.pattern.id}update(a){this.scale=\na;var b=this.spacing*a;this.pattern.setAttribute(\"width\",`${b}`);this.pattern.setAttribute(\"height\",`${b}`);b=Math.floor(this.spacing/2)+.5;let c=b-this.length/2,d=b+this.length/2;b*=a;c*=a;d*=a;this.setLineAttributes(this.line1,a,c,d,b,b);this.setLineAttributes(this.line2,a,b,b,c,d)}setLineAttributes(a,b,c,d,e,f){a&&(a.setAttribute(\"stroke-width\",`${b}`),a.setAttribute(\"x1\",`${c}`),a.setAttribute(\"y1\",`${e}`),a.setAttribute(\"x2\",`${d}`),a.setAttribute(\"y2\",`${f}`))}moveTo(a,b){this.pattern.setAttribute(\"x\",\n`${a}`);this.pattern.setAttribute(\"y\",`${b}`)}alignXY(a){var b=this.getSpacing();const c=b/2,d=Math.round(Math.round((a.x-c)/b)*b+c);b=Math.round(Math.round((a.y-c)/b)*b+c);return d===a.x&&b===a.y?a:new Coordinate$$module$build$src$core$utils$coordinate(d,b)}static createDom(a,b,c,d){a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATTERN,{id:\"blocklyGridPattern\"+a,patternUnits:\"userSpaceOnUse\"},c);let e,f;if(((e=b.length)!=null?e:1)>0&&((f=b.spacing)!=null?\nf:0)>0){createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{stroke:b.colour},a);let g;(g=b.length)!=null&&g&&createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{stroke:b.colour},a)}else createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.LINE,{},a);d&&d.style.setProperty(\"--blocklyGridPattern\",`url(#${a.id})`);return a}},module$build$src$core$grid={};\nmodule$build$src$core$grid.Grid=Grid$$module$build$src$core$grid;var module$build$src$core$interfaces$i_autohideable={};module$build$src$core$interfaces$i_autohideable.isAutoHideable=isAutoHideable$$module$build$src$core$interfaces$i_autohideable;var LayerManager$$module$build$src$core$layer_manager=class{constructor(a){this.workspace=a;this.layers=new Map;if(a=a.getInjectionDiv())this.dragLayer=this.createDragLayer(a),this.animationLayer=this.createAnimationLayer(a);a=this.createLayer(BLOCK$$module$build$src$core$layers);addClass$$module$build$src$core$utils$dom(a,\"blocklyBlockCanvas\");a=this.createLayer(BUBBLE$$module$build$src$core$layers);addClass$$module$build$src$core$utils$dom(a,\"blocklyBubbleCanvas\")}createDragLayer(a){const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,\n{\"class\":\"blocklyBlockDragSurface\",xmlns:SVG_NS$$module$build$src$core$utils$dom,\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\"});a.append(b);return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},b)}createAnimationLayer(a){const b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.SVG,{\"class\":\"blocklyAnimationLayer\",xmlns:SVG_NS$$module$build$src$core$utils$dom,\n\"xmlns:html\":HTML_NS$$module$build$src$core$utils$dom,\"xmlns:xlink\":XLINK_NS$$module$build$src$core$utils$dom,version:\"1.1\"});a.append(b);return createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{},b)}appendToAnimationLayer(a){let b;const c=(b=this.dragLayer)==null?void 0:b.getAttribute(\"transform\");if(c){let e;(e=this.animationLayer)==null||e.setAttribute(\"transform\",c)}let d;(d=this.animationLayer)==null||d.appendChild(a.getSvgRoot())}translateLayers(a,b){a=\n`translate(${a.x}, ${a.y}) scale(${b})`;let c;(c=this.dragLayer)==null||c.setAttribute(\"transform\",a);for(const [,d]of this.layers)d.setAttribute(\"transform\",a)}moveToDragLayer(a){let b;(b=this.dragLayer)==null||b.appendChild(a.getSvgRoot());a.canBeFocused()&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}moveOffDragLayer(a,b){this.append(a,b);a.canBeFocused()&&$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}append(a,b){this.layers.has(b)||this.createLayer(b);\na=a.getSvgRoot();let c;if(((c=this.layers.get(b))==null?void 0:c.lastChild)!==a){let d;(d=this.layers.get(b))==null||d.appendChild(a)}}createLayer(a){const b=this.workspace.getSvgGroup(),c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{});let d=!1;const e=[...this.layers].sort((f,g)=>f[0]-g[0]);for(const [f,g]of e)if(a{let c;return b instanceof BlockSvg$$module$build$src$core$block_svg&&!((c=b.outputConnection)==null?0:c.targetBlock())||b instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment},\n!0))&&this.setCurNode(a);return a}in(){var a=this.getCurNode();if(!a)return null;(a=this.getNextNode(a,()=>!0,!0))&&this.setCurNode(a);return a}prev(){var a=this.getCurNode();if(!a)return null;(a=this.getPreviousNode(a,b=>{let c;return b instanceof BlockSvg$$module$build$src$core$block_svg&&!((c=b.outputConnection)==null?0:c.targetBlock())||b instanceof RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment},!0))&&this.setCurNode(a);return a}out(){var a=this.getCurNode();\nif(!a)return null;(a=this.getPreviousNode(a,()=>!0,!0))&&this.setCurNode(a);return a}atEndOfLine(){var a=this.getCurNode();if(!a)return!1;const b=this.getNextNode(a,()=>!0,!0);a=this.getNextNode(a,c=>{let d;return c instanceof BlockSvg$$module$build$src$core$block_svg&&!((d=c.outputConnection)==null?0:d.targetBlock())},!0);return b===a}getNextNodeImpl(a,b,c=new Set){if(!a||c.has(a))return null;let d=this.workspace.getNavigator().getFirstChild(a)||this.workspace.getNavigator().getNextSibling(a);for(var e=\na;e&&!d;){e=this.workspace.getNavigator().getParent(e);if(!e)break;d=this.workspace.getNavigator().getNextSibling(e)}return b(d)?d:d?(c.add(a),this.getNextNodeImpl(d,b,c)):null}getNextNode(a,b,c){return!a||!c&&this.getLastNode()===a?null:this.getNextNodeImpl(a,b)}getPreviousNodeImpl(a,b,c=new Set){if(!a||c.has(a))return null;const d=this.getRightMostChild(this.workspace.getNavigator().getPreviousSibling(a),a)||this.workspace.getNavigator().getParent(a);return b(d)?d:d?(c.add(a),this.getPreviousNodeImpl(d,\nb,c)):null}getPreviousNode(a,b,c){return!a||!c&&this.getFirstNode()===a?null:this.getPreviousNodeImpl(a,b)}getRightMostChild(a,b){if(!a)return a;let c=this.workspace.getNavigator().getFirstChild(a);if(!c||c===b)return a;for(a=c;a&&a!==b;a=this.workspace.getNavigator().getNextSibling(c))c=a;return this.getRightMostChild(c,b)}preDelete(a){var b=this.getCurNode();b=b?[b]:[];var c;let d,e;const f=(e=(c=a.previousConnection)==null?void 0:c.targetConnection)!=null?e:(d=a.outputConnection)==null?void 0:\nd.targetConnection;f&&b.push(f);(c=a.getNextBlock())&&b.push(c);(a=a.getParent())&&b.push(a);b.push(this.workspace);this.potentialNodes=b}postDelete(){const a=this.potentialNodes;this.potentialNodes=null;if(!a)throw Error(\"must call preDelete first\");for(const b of a){let c;if((c=this.getSourceBlockFromNode(b))==null||!c.disposed){this.setCurNode(b);return}}throw Error(\"no valid nodes in this.potentialNodes\");}getCurNode(){return $.getFocusManager$$module$build$src$core$focus_manager().getFocusedNode()}setCurNode(a){$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a)}getFirstNode(){return this.workspace.getNavigator().getFirstChild(this.workspace)}getLastNode(){const a=\nthis.getFirstNode();return this.getPreviousNode(a,()=>!0,!0)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.CURSOR,DEFAULT$$module$build$src$core$registry,LineCursor$$module$build$src$core$keyboard_nav$line_cursor);var module$build$src$core$keyboard_nav$line_cursor={};module$build$src$core$keyboard_nav$line_cursor.LineCursor=LineCursor$$module$build$src$core$keyboard_nav$line_cursor;var MarkerManager$$module$build$src$core$marker_manager=class{constructor(a){this.workspace=a;this.markers=new Map;this.cursor=new LineCursor$$module$build$src$core$keyboard_nav$line_cursor(this.workspace)}registerMarker(a,b){this.markers.has(a)&&this.unregisterMarker(a);this.markers.set(a,b)}unregisterMarker(a){const b=this.markers.get(a);if(b)b.dispose(),this.markers.delete(a);else throw Error(\"Marker with ID \"+a+\" does not exist. Can only unregister markers that exist.\");}getCursor(){return this.cursor}getMarker(a){return this.markers.get(a)||\nnull}setCursor(a){this.cursor=a}dispose(){const a=Object.keys(this.markers);for(let b=0,c;c=a[b];b++)this.unregisterMarker(c);this.markers.clear();this.cursor.dispose()}};MarkerManager$$module$build$src$core$marker_manager.LOCAL_MARKER=\"local_marker_1\";var module$build$src$core$marker_manager={};module$build$src$core$marker_manager.MarkerManager=MarkerManager$$module$build$src$core$marker_manager;var module$build$src$core$icons={};module$build$src$core$icons.CommentIcon=CommentIcon$$module$build$src$core$icons$comment_icon;module$build$src$core$icons.Icon=Icon$$module$build$src$core$icons$icon;module$build$src$core$icons.IconType=IconType$$module$build$src$core$icons$icon_types;module$build$src$core$icons.MutatorIcon=$.MutatorIcon$$module$build$src$core$icons$mutator_icon;module$build$src$core$icons.WarningIcon=WarningIcon$$module$build$src$core$icons$warning_icon;\nmodule$build$src$core$icons.exceptions=module$build$src$core$icons$exceptions;module$build$src$core$icons.registry=module$build$src$core$icons$registry;var module$build$src$core$interfaces$i_procedure_block={};module$build$src$core$interfaces$i_procedure_block.isProcedureBlock=isProcedureBlock$$module$build$src$core$interfaces$i_procedure_block;$.Names$$module$build$src$core$names=class{constructor(a,b){this.db=new Map;this.dbReverse=new Set;this.variableMap=null;this.variablePrefix=b||\"\";this.reservedWords=new Set(a?a.split(\",\"):[])}reset(){this.db.clear();this.dbReverse.clear();this.variableMap=null}setVariableMap(a){this.variableMap=a}getNameForUserVariable(a){return this.variableMap?(a=this.variableMap.getVariableById(a))?a.getName():null:(console.warn(\"Deprecated call to Names.prototype.getName without defining a variable map. To fix, add the following code in your generator's init() function:\\nBlockly.YourGeneratorName.nameDB_.setVariableMap(workspace.getVariableMap());\"),\nnull)}populateVariables(a){a=$.allUsedVarModels$$module$build$src$core$variables(a);for(let b=0;b=1}isHat(a){return(a.type&this.HAT)>=1}isIcon(a){return(a.type&\nthis.ICON)>=1}isSpacer(a){return(a.type&this.SPACER)>=1}isInRowSpacer(a){return(a.type&this.IN_ROW_SPACER)>=1}isSpacerRow(a){return(a.type&this.BETWEEN_ROW_SPACER)>=1}isInput(a){return(a.type&this.INPUT)>=1}isExternalInput(a){return(a.type&this.EXTERNAL_VALUE_INPUT)>=1}isInlineInput(a){return(a.type&this.INLINE_INPUT)>=1}isStatementInput(a){return(a.type&this.STATEMENT_INPUT)>=1}isPreviousConnection(a){return(a.type&this.PREVIOUS_CONNECTION)>=1}isNextConnection(a){return(a.type&this.NEXT_CONNECTION)>=\n1}isPreviousOrNextConnection(a){return this.isPreviousConnection(a)||this.isNextConnection(a)}isRoundCorner(a){return(a.type&this.LEFT_ROUND_CORNER)>=1||(a.type&this.RIGHT_ROUND_CORNER)>=1}isLeftRoundedCorner(a){return this.isRoundCorner(a)&&(a.type&this.LEFT_ROUND_CORNER)>=1}isRightRoundedCorner(a){return this.isRoundCorner(a)&&(a.type&this.RIGHT_ROUND_CORNER)>=1}isLeftSquareCorner(a){return(a.type&this.LEFT_SQUARE_CORNER)>=1}isRightSquareCorner(a){return(a.type&this.RIGHT_SQUARE_CORNER)>=1}isCorner(a){return(a.type&\nthis.CORNER)>=1}isJaggedEdge(a){return(a.type&this.JAGGED_EDGE)>=1}isRow(a){return(a.type&this.ROW)>=1}isBetweenRowSpacer(a){return(a.type&this.BETWEEN_ROW_SPACER)>=1}isTopRow(a){return(a.type&this.TOP_ROW)>=1}isBottomRow(a){return(a.type&this.BOTTOM_ROW)>=1}isTopOrBottomRow(a){return this.isTopRow(a)||this.isBottomRow(a)}isInputRow(a){return(a.type&this.INPUT_ROW)>=1}},Types$$module$build$src$core$renderers$measurables$types=new TypesContainer$$module$build$src$core$renderers$measurables$types,module$build$src$core$renderers$measurables$types=\n{Types:Types$$module$build$src$core$renderers$measurables$types};var Measurable$$module$build$src$core$renderers$measurables$base=class{constructor(a){this.centerline=this.xPos=this.height=this.width=0;this.constants_=a;this.type=Types$$module$build$src$core$renderers$measurables$types.NONE;this.notchOffset=this.constants_.NOTCH_OFFSET_LEFT}},module$build$src$core$renderers$measurables$base={};module$build$src$core$renderers$measurables$base.Measurable=Measurable$$module$build$src$core$renderers$measurables$base;var Row$$module$build$src$core$renderers$measurables$row=class{constructor(a){this.elements=[];this.xPos=this.yPos=this.widthWithConnectedBlocks=this.minWidth=this.minHeight=this.width=this.height=0;this.hasStatement=this.hasExternalInput=!1;this.statementEdge=0;this.hasJaggedEdge=this.hasDummyInput=this.hasInlineInput=!1;this.align=null;this.constants_=a;this.type=Types$$module$build$src$core$renderers$measurables$types.ROW;this.notchOffset=this.constants_.NOTCH_OFFSET_LEFT}getLastInput(){for(let a=\nthis.elements.length-1;a>=0;a--){const b=this.elements[a];if(Types$$module$build$src$core$renderers$measurables$types.isInput(b))return b}return null}measure(){throw Error(\"Unexpected attempt to measure a base Row.\");}startsWithElemSpacer(){return!0}endsWithElemSpacer(){return!0}getFirstSpacer(){for(let a=0;a=0;a--){const b=this.elements[a];if(Types$$module$build$src$core$renderers$measurables$types.isInRowSpacer(b))return b}return null}},module$build$src$core$renderers$measurables$row={};module$build$src$core$renderers$measurables$row.Row=Row$$module$build$src$core$renderers$measurables$row;var BottomRow$$module$build$src$core$renderers$measurables$bottom_row=class extends Row$$module$build$src$core$renderers$measurables$row{constructor(a){super(a);this.hasNextConnection=!1;this.connection=null;this.baseline=this.descenderHeight=0;this.type|=Types$$module$build$src$core$renderers$measurables$types.BOTTOM_ROW}hasLeftSquareCorner(a){return!!a.outputConnection||!!a.getNextBlock()}hasRightSquareCorner(a){return!0}measure(){let a=0,b=0,c=0;for(let d=0;drect,`,`${a} .blocklyEditableField>rect {`,`fill: ${this.FIELD_BORDER_RECT_COLOUR};`,\"fill-opacity: .6;\",\"stroke: none;\",\"}\",`${a} .blocklyNonEditableField>text,`,`${a} .blocklyEditableField>text {`,\n\"fill: #000;\",\"}\",`${a} .blocklyFlyoutLabelText {`,\"fill: #000;\",\"}\",`${a} .blocklyText.blocklyBubbleText {`,\"fill: #000;\",\"}\",`${a} .blocklyEditableField:not(.blocklyEditing):hover>rect {`,\"stroke: #fff;\",\"stroke-width: 2;\",\"}\",`${a} .blocklyHtmlInput {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,`font-weight: ${this.FIELD_TEXT_FONTWEIGHT};`,\"}\",`${a} .blocklySelected>.blocklyPath {`,\"stroke: #fc3;\",\"stroke-width: 3px;\",\"}\",`${a} .blocklyHighlightedConnectionPath {`,\"stroke: #fc3;\",\"}\",`${a} .blocklyReplaceable .blocklyPath {`,\n\"fill-opacity: .5;\",\"}\",`${a} .blocklyReplaceable .blocklyPathLight,`,`${a} .blocklyReplaceable .blocklyPathDark {`,\"display: none;\",\"}\",`${a} .blocklyInsertionMarker>.blocklyPath {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\"stroke: none;\",\"}\"]}},module$build$src$core$renderers$common$constants={};module$build$src$core$renderers$common$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$common$constants;\nmodule$build$src$core$renderers$common$constants.isDynamicShape=isDynamicShape$$module$build$src$core$renderers$common$constants;module$build$src$core$renderers$common$constants.isNotch=isNotch$$module$build$src$core$renderers$common$constants;module$build$src$core$renderers$common$constants.isPuzzleTab=isPuzzleTab$$module$build$src$core$renderers$common$constants;var Drawer$$module$build$src$core$renderers$common$drawer=class{constructor(a,b){this.inlinePath_=this.outlinePath_=\"\";this.block_=a;this.info_=b;this.topLeft_=a.getRelativeToSurfaceXY();this.constants_=b.getRenderer().getConstants()}draw(){this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();this.block_.pathObject.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);this.info_.RTL&&this.block_.pathObject.flipRTL();this.recordSizeOnBlock_()}recordSizeOnBlock_(){this.block_.height=\nthis.info_.height;this.block_.width=this.info_.widthWithChildren;this.block_.childlessWidth=this.info_.width}drawOutline_(){this.drawTop_();for(let a=1;a0&&this.addAlignmentPadding_(c,a);Types$$module$build$src$core$renderers$measurables$types.isTopOrBottomRow(c)&&(c.widthWithConnectedBlocks=c.width)}}getDesiredRowWidth_(a){return this.width-this.startX}addAlignmentPadding_(a,\nb){const c=a.getFirstSpacer(),d=a.getLastSpacer();if(a.hasExternalInput||a.hasStatement)a.widthWithConnectedBlocks+=b;if(a.align===$.Align$$module$build$src$core$inputs$align.LEFT&&d)d.width+=b;else if(a.align===$.Align$$module$build$src$core$inputs$align.CENTRE&&c&&d)c.width+=b/2,d.width+=b/2;else if(a.align===$.Align$$module$build$src$core$inputs$align.RIGHT&&c)c.width+=b;else if(d)d.width+=b;else return;a.width+=b}alignStatementRow_(a){const b=a.getLastInput();if(b){var c=a.width-b.width,d=this.statementEdge;\nc=d-c;c>0&&this.addAlignmentPadding_(a,c);c=a.width;d=this.getDesiredRowWidth_(a);b.width+=d-c;b.height=Math.max(b.height,a.height);a.width+=d-c;a.widthWithConnectedBlocks=Math.max(a.width,this.statementEdge+a.connectedBlockWidths)}}addRowSpacing_(){const a=this.rows;this.rows=[];for(let b=0;b=0;d--)c[d].element===a&&c.splice(d,1);c.length||this.componentDB.delete(b)}}dispose(){this.subscribedWorkspaces.length=0;this.componentDB.clear()}},module$build$src$core$theme_manager={};module$build$src$core$theme_manager.ThemeManager=ThemeManager$$module$build$src$core$theme_manager;var CATEGORY_NAME$$module$build$src$core$variables_dynamic=\"VARIABLE_DYNAMIC\",onCreateVariableButtonClick_String$$module$build$src$core$variables_dynamic=stringButtonClickHandler$$module$build$src$core$variables_dynamic,onCreateVariableButtonClick_Number$$module$build$src$core$variables_dynamic=numberButtonClickHandler$$module$build$src$core$variables_dynamic,onCreateVariableButtonClick_Colour$$module$build$src$core$variables_dynamic=colourButtonClickHandler$$module$build$src$core$variables_dynamic,\nmodule$build$src$core$variables_dynamic={CATEGORY_NAME:CATEGORY_NAME$$module$build$src$core$variables_dynamic};module$build$src$core$variables_dynamic.flyoutCategory=flyoutCategory$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.flyoutCategoryBlocks=flyoutCategoryBlocks$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.internalFlyoutCategory=internalFlyoutCategory$$module$build$src$core$variables_dynamic;\nmodule$build$src$core$variables_dynamic.onCreateVariableButtonClick_Colour=colourButtonClickHandler$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.onCreateVariableButtonClick_Number=numberButtonClickHandler$$module$build$src$core$variables_dynamic;module$build$src$core$variables_dynamic.onCreateVariableButtonClick_String=stringButtonClickHandler$$module$build$src$core$variables_dynamic;var ConnectionChecker$$module$build$src$core$connection_checker=class{canConnect(a,b,c,d){return this.canConnectWithReason(a,b,c,d)===Connection$$module$build$src$core$connection.CAN_CONNECT}canConnectWithReason(a,b,c,d){const e=this.doSafetyChecks(a,b);return e!==Connection$$module$build$src$core$connection.CAN_CONNECT?e:this.doTypeChecks(a,b)?c&&!this.doDragChecks(a,b,d||0)?Connection$$module$build$src$core$connection.REASON_DRAG_CHECKS_FAILED:Connection$$module$build$src$core$connection.CAN_CONNECT:\nConnection$$module$build$src$core$connection.REASON_CHECKS_FAILED}getErrorMessage(a,b,c){switch(a){case Connection$$module$build$src$core$connection.REASON_SELF_CONNECTION:return\"Attempted to connect a block to itself.\";case Connection$$module$build$src$core$connection.REASON_DIFFERENT_WORKSPACES:return\"Blocks not on same workspace.\";case Connection$$module$build$src$core$connection.REASON_WRONG_TYPE:return\"Attempt to connect incompatible types.\";case Connection$$module$build$src$core$connection.REASON_TARGET_NULL:return\"Target connection is null.\";\ncase Connection$$module$build$src$core$connection.REASON_CHECKS_FAILED:return\"Connection checks failed. \"+(b+\" expected \"+b.getCheck()+\", found \"+c.getCheck());case Connection$$module$build$src$core$connection.REASON_SHADOW_PARENT:return\"Connecting non-shadow to shadow block.\";case Connection$$module$build$src$core$connection.REASON_DRAG_CHECKS_FAILED:return\"Drag checks failed.\";case Connection$$module$build$src$core$connection.REASON_PREVIOUS_AND_OUTPUT:return\"Block would have an output and a previous connection.\";\ndefault:return\"Unknown connection failure: this should never happen!\"}}doSafetyChecks(a,b){if(!a||!b)return Connection$$module$build$src$core$connection.REASON_TARGET_NULL;let c,d,e;a.isSuperior()?(c=a.getSourceBlock(),d=b.getSourceBlock(),e=b):(d=a.getSourceBlock(),c=b.getSourceBlock(),e=a,a=b);return c===d?Connection$$module$build$src$core$connection.REASON_SELF_CONNECTION:e.type!==OPPOSITE_TYPE$$module$build$src$core$internal_constants[a.type]?Connection$$module$build$src$core$connection.REASON_WRONG_TYPE:\nc.workspace!==d.workspace?Connection$$module$build$src$core$connection.REASON_DIFFERENT_WORKSPACES:c.isShadow()&&!d.isShadow()?Connection$$module$build$src$core$connection.REASON_SHADOW_PARENT:e.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE&&d.previousConnection&&d.previousConnection.isConnected()||e.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT&&d.outputConnection&&d.outputConnection.isConnected()?Connection$$module$build$src$core$connection.REASON_PREVIOUS_AND_OUTPUT:\nConnection$$module$build$src$core$connection.CAN_CONNECT}doTypeChecks(a,b){a=a.getCheck();b=b.getCheck();if(!a||!b)return!0;for(let c=0;cc||b.getSourceBlock().isInsertionMarker())return!1;switch(b.type){case ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT:return this.canConnectToPrevious_(a,b);case ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE:if(b.isConnected()&&\n!b.targetBlock().isInsertionMarker()||a.isConnected())return!1;break;case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:if(b.isConnected()&&!b.targetBlock().isMovable()&&!b.targetBlock().isShadow())return!1;break;case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:if(b.isConnected()&&!a.getSourceBlock().nextConnection&&!b.targetBlock().isShadow()&&b.targetBlock().nextConnection||b.targetBlock()&&!b.targetBlock().isMovable()&&!b.targetBlock().isShadow())return!1;\nbreak;default:return!1}return draggingConnections$$module$build$src$core$common.includes(b)?!1:!0}canConnectToPrevious_(a,b){if(a.targetConnection||draggingConnections$$module$build$src$core$common.includes(b))return!1;if(!b.targetConnection)return!0;a=b.targetBlock();return a.isInsertionMarker()?!a.getPreviousBlock():!1}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_CHECKER,DEFAULT$$module$build$src$core$registry,ConnectionChecker$$module$build$src$core$connection_checker);\nvar module$build$src$core$connection_checker={};module$build$src$core$connection_checker.ConnectionChecker=ConnectionChecker$$module$build$src$core$connection_checker;var Workspace$$module$build$src$core$workspace=class{get isFlyout(){return this.internalIsFlyout}get isMutator(){return this.internalIsMutator}constructor(a){this.isClearing=this.internalIsMutator=this.internalIsFlyout=this.rendered=!1;this.MAX_UNDO=1024;this.connectionDBList=[];this.topBlocks=[];this.topComments=[];this.commentDB=new Map;this.listeners=[];this.undoStack_=[];this.redoStack_=[];this.blockDB=new Map;this.typedBlocksDB=new Map;this.procedureMap=new ObservableProcedureMap$$module$build$src$core$observable_procedure_map;\nthis.readOnly=!1;this.potentialVariableMap=null;this.id=genUid$$module$build$src$core$utils$idgenerator();registerWorkspace$$module$build$src$core$common(this);this.options=a||new Options$$module$build$src$core$options({});this.RTL=!!this.options.RTL;this.horizontalLayout=!!this.options.horizontalLayout;this.toolboxPosition=this.options.toolboxPosition;this.connectionChecker=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CONNECTION_CHECKER,this.options,\n!0))(this);this.variableMap=new (this.getVariableMapClass())(this);this.setIsReadOnly(this.options.readOnly)}dispose(){this.listeners.length=0;this.clear();unregisterWorkpace$$module$build$src$core$common(this)}sortObjects(a,b){const c=d=>({getBoundingRectangle:()=>{const e=d.getRelativeToSurfaceXY();return new Rect$$module$build$src$core$utils$rect(e.y,e.y,e.x,e.x)},moveBy:()=>{}});return this.sortByOrigin(c(a),c(b))}sortByOrigin(a,b){const c=Math.sin(toRadians$$module$build$src$core$utils$math(Workspace$$module$build$src$core$workspace.SCAN_ANGLE))*\n(this.RTL?-1:1);a=a.getBoundingRectangle().getOrigin();b=b.getBoundingRectangle().getOrigin();return a.y+c*a.x-(b.y+c*b.x)}addTopBlock(a){this.topBlocks.push(a)}removeTopBlock(a){if(!removeElem$$module$build$src$core$utils$array(this.topBlocks,a))throw Error(\"Block not present in workspace's list of top-most blocks.\");}getTopBlocks(a=!1){const b=[].concat(this.topBlocks);a&&b.length>1&&b.sort(this.sortObjects.bind(this));return b}addTypedBlock(a){this.typedBlocksDB.has(a.type)||this.typedBlocksDB.set(a.type,\n[]);this.typedBlocksDB.get(a.type).push(a)}removeTypedBlock(a){removeElem$$module$build$src$core$utils$array(this.typedBlocksDB.get(a.type),a);this.typedBlocksDB.get(a.type).length||this.typedBlocksDB.delete(a.type)}getBlocksByType(a,b=!1){if(!this.typedBlocksDB.has(a))return[];a=this.typedBlocksDB.get(a).slice(0);b&&a&&a.length>1&&a.sort(this.sortObjects.bind(this));return a.filter(c=>!c.isInsertionMarker())}addTopComment(a){this.topComments.push(a);this.commentDB.has(a.id)&&console.warn('Overriding an existing comment on this workspace, with id \"'+\na.id+'\"');this.commentDB.set(a.id,a)}removeTopComment(a){if(!removeElem$$module$build$src$core$utils$array(this.topComments,a))throw Error(\"Comment not present in workspace's list of top-most comments.\");this.commentDB.delete(a.id)}getTopComments(a=!1){const b=[].concat(this.topComments);a&&b.length>1&&b.sort(this.sortObjects.bind(this));return b}getAllBlocks(a=!1){if(a){var b=this.getTopBlocks(!0);a=[];for(let c=0;c!c.isInsertionMarker())}clear(){this.isClearing=!0;try{const a=$.getGroup$$module$build$src$core$events$utils();for(a||$.setGroup$$module$build$src$core$events$utils(!0);this.topBlocks.length;)this.topBlocks[0].dispose(!1);for(;this.topComments.length;)this.topComments[this.topComments.length-1].dispose();$.setGroup$$module$build$src$core$events$utils(a);this.isFlyout||this.variableMap.clear();this.potentialVariableMap&&this.potentialVariableMap.clear()}finally{this.isClearing=\n!1}}renameVariableById(a,b){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.renameVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().renameVariable\");(a=this.variableMap.getVariableById(a))&&this.variableMap.renameVariable(a,b)}createVariable(a,b,c){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.createVariable\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().createVariable\");return this.variableMap.createVariable(a,b!=null?b:void 0,c!=null?c:void 0)}getVariableUsesById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariableUsesById\",\n\"v12\",\"v13\",\"Blockly.Variables.getVariableUsesById\");return getVariableUsesById$$module$build$src$core$variables(this,a)}deleteVariableById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.deleteVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().deleteVariable\");const b=this.variableMap.getVariableById(a);b?$.deleteVariable$$module$build$src$core$variables(this,b):console.warn(`Can't delete non-existent variable: ${a}`)}getVariable(a,b){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariable\",\n\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariable\");return this.variableMap.getVariable(a,b)}getVariableById(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariableById\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariableById\");return this.variableMap.getVariableById(a)}getVariablesOfType(a){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getVariablesOfType\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getVariablesOfType\");return this.variableMap.getVariablesOfType(a!=\nnull?a:\"\")}getAllVariables(){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getAllVariables\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getAllVariables\");return this.variableMap.getAllVariables()}getAllVariableNames(){warn$$module$build$src$core$utils$deprecation(\"Blockly.Workspace.getAllVariableNames\",\"v12\",\"v13\",\"Blockly.Workspace.getVariableMap().getAllVariables\");return this.variableMap.getAllVariables().map(a=>a.getName())}getWidth(){return 0}newBlock(a,b){throw Error(\"The implementation of newBlock should be monkey-patched in by blockly.ts\");\n}newComment(a){throw Error(\"The implementation of newComment should be monkey-patched in by blockly.ts\");}remainingCapacity(){return isNaN(this.options.maxBlocks)?Infinity:this.options.maxBlocks-this.getAllBlocks(!1).length}remainingCapacityOfType(a){return this.options.maxInstances?(this.options.maxInstances[a]!==void 0?this.options.maxInstances[a]:Infinity)-this.getBlocksByType(a,!1).length:Infinity}isCapacityAvailable(a){if(!this.hasBlockLimits())return!0;let b=0;for(const c in a){if(a[c]>this.remainingCapacityOfType(c))return!1;\nb+=a[c]}return b>this.remainingCapacity()?!1:!0}hasBlockLimits(){return this.options.maxBlocks!==Infinity||!!this.options.maxInstances}getUndoStack(){return this.undoStack_}getRedoStack(){return this.redoStack_}undo(a){var b=a?this.redoStack_:this.undoStack_,c=a?this.undoStack_:this.redoStack_;const d=b.pop();if(d){for(var e=[d];b.length&&d.group&&d.group===b[b.length-1].group;){const f=b.pop();f&&e.push(f)}for(b=0;bthis.MAX_UNDO&&this.MAX_UNDO>=\n0;)this.undoStack_.shift();for(let b=0;b!!b.getStyleName()));this.refreshToolboxSelection();this.toolbox&&this.toolbox.refreshTheme();this.isVisible()&&this.setVisible(!0);a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.THEME_CHANGE))(this.getTheme().name,this.id);fire$$module$build$src$core$events$utils(a)}updateBlockStyles(a){for(let b=0,c;c=a[b];b++){const d=\nc.getStyleName();d&&c.setStyle(d)}}getInverseScreenCTM(){if(this.inverseScreenCTMDirty){const a=this.getParentSvg().getScreenCTM();a&&(this.inverseScreenCTM=a.inverse(),this.inverseScreenCTMDirty=!1)}return this.inverseScreenCTM}updateInverseScreenCTM(){this.inverseScreenCTMDirty=!0}isVisible(){return this.visible}getSvgXY(a){let b=0,c=0,d=1;if(this.getCanvas().contains(a)||this.getBubbleCanvas().contains(a))d=this.scale;do{const e=getRelativeXY$$module$build$src$core$utils$svg_math(a);if(a===this.getCanvas()||\na===this.getBubbleCanvas())d=1;b+=e.x*d;c+=e.y*d;a=a.parentNode}while(a&&a!==this.getParentSvg()&&a!==this.getInjectionDiv());return new Coordinate$$module$build$src$core$utils$coordinate(b,c)}getCachedParentSvgSize(){const a=this.cachedParentSvgSize;return new Size$$module$build$src$core$utils$size(a.width,a.height)}getOriginOffsetInPixels(){return getInjectionDivXY$$module$build$src$core$utils$svg_math(this.getCanvas())}getInjectionDiv(){if(!this.injectionDiv){let a=this.svgGroup_;for(;a;){if((\" \"+\n(a.getAttribute(\"class\")||\"\")+\" \").includes(\" injectionDiv \")){this.injectionDiv=a;break}a=a.parentNode}}return this.injectionDiv}getSvgGroup(){return this.svgGroup_}getBlockCanvas(){return this.getCanvas()}setResizeHandlerWrapper(a){this.resizeHandlerWrapper=a}createDom(a,b){this.injectionDiv||(this.injectionDiv=b!=null?b:null);this.svgGroup_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyWorkspace\",id:this.id});b&&setState$$module$build$src$core$utils$aria(this.svgGroup_,\nState$$module$build$src$core$utils$aria.LABEL,$.Msg$$module$build$src$core$msg.WORKSPACE_ARIA_LABEL);a&&(this.svgBackground_=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{height:\"100%\",width:\"100%\",\"class\":a},this.svgGroup_),a===\"blocklyMainBackground\"&&this.grid?this.svgBackground_.style.fill=\"var(--blocklyGridPattern)\":this.themeManager_.subscribe(this.svgBackground_,\"workspaceBackgroundColour\",\"fill\"));this.layerManager=new LayerManager$$module$build$src$core$layer_manager(this);\nthis.svgBlockCanvas_=this.layerManager.getBlockLayer();this.svgBubbleCanvas_=this.layerManager.getBubbleLayer();this.isFlyout||(conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"pointerdown\",this,this.onMouseDown,!1),this.dummyWheelListener=()=>{},document.body.addEventListener(\"wheel\",this.dummyWheelListener),conditionalBind$$module$build$src$core$browser_events(this.svgGroup_,\"wheel\",this,this.onMouseWheel));this.options.hasCategories&&(this.toolbox=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX,\nthis.options,!0))(this));this.grid&&this.grid.update(this.scale);this.recordDragTargets();(a=getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.CURSOR,this.options))&&this.markerManager.setCursor(new a(this));a=this.options.parentWorkspace===null;this.renderer.createDom(this.svgGroup_,this.getTheme(),a?this.getInjectionDiv():void 0);$.getFocusManager$$module$build$src$core$focus_manager().registerTree(this,!!this.injectionDiv||this.isFlyout);return this.svgGroup_}dispose(){this.rendered=\n!1;this.currentGesture_&&this.currentGesture_.cancel();this.svgGroup_&&removeNode$$module$build$src$core$utils$dom(this.svgGroup_);this.toolbox&&(this.toolbox.dispose(),this.toolbox=null);this.flyout&&(this.flyout.dispose(),this.flyout=null);this.trashcan&&(this.trashcan.dispose(),this.trashcan=null);this.scrollbar&&(this.scrollbar.dispose(),this.scrollbar=null);this.zoomControls_&&this.zoomControls_.dispose();this.audioManager&&this.audioManager.dispose();this.grid&&(this.grid=null);this.renderer.dispose();\nthis.markerManager.dispose();super.dispose();this.themeManager_&&(this.themeManager_.unsubscribeWorkspace(this),this.themeManager_.unsubscribe(this.svgBackground_),this.options.parentWorkspace||this.themeManager_.dispose());this.connectionDBList.length=0;this.toolboxCategoryCallbacks.clear();this.flyoutButtonCallbacks.clear();if(!this.options.parentWorkspace){const a=this.getParentSvg();a&&a.parentNode&&removeNode$$module$build$src$core$utils$dom(a.parentNode)}this.resizeHandlerWrapper&&(unbind$$module$build$src$core$browser_events(this.resizeHandlerWrapper),\nthis.resizeHandlerWrapper=null);this.dummyWheelListener&&(document.body.removeEventListener(\"wheel\",this.dummyWheelListener),this.dummyWheelListener=null);$.getFocusManager$$module$build$src$core$focus_manager().isRegistered(this)&&$.getFocusManager$$module$build$src$core$focus_manager().unregisterTree(this)}addTrashcan(){this.trashcan=WorkspaceSvg$$module$build$src$core$workspace_svg.newTrashcan(this);const a=this.trashcan.createDom();this.svgGroup_.insertBefore(a,this.getCanvas())}static newTrashcan(a){throw Error(\"The implementation of newTrashcan should be monkey-patched in by blockly.ts\");\n}addZoomControls(){this.zoomControls_=new ZoomControls$$module$build$src$core$zoom_controls(this);const a=this.zoomControls_.createDom();this.svgGroup_.appendChild(a)}copyOptionsForFlyout(){return new Options$$module$build$src$core$options({parentWorkspace:this,rtl:this.RTL,oneBasedIndex:this.options.oneBasedIndex,horizontalLayout:this.horizontalLayout,renderer:this.options.renderer,rendererOverrides:this.options.rendererOverrides,plugins:this.options.plugins,modalInputs:this.options.modalInputs,\nmove:{scrollbars:!0}})}addFlyout(a){const b=this.copyOptionsForFlyout();b.toolboxPosition=this.options.toolboxPosition;this.flyout=this.horizontalLayout?new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,this.options,!0))(b):new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,this.options,!0))(b);this.flyout.autoClose=!1;this.flyout.getWorkspace().setVisible(!0);\nreturn this.flyout.createDom(a)}getFlyout(a){return this.flyout||a?this.flyout:this.toolbox?this.toolbox.getFlyout():null}getToolbox(){return this.toolbox}updateScreenCalculations(){this.updateInverseScreenCTM();this.recordDragTargets()}resizeContents(){this.resizesEnabled&&this.rendered&&(this.scrollbar&&this.scrollbar.resize(),this.updateInverseScreenCTM())}resize(){this.toolbox?this.toolbox.position():this.flyout&&this.flyout.position();const a=this.componentManager.getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE,\n!0),b=this.getMetricsManager().getUiMetrics(),c=[];for(let d=0,e;e=a[d];d++){e.position(b,c);const f=e.getBoundingRectangle();f&&c.push(f)}this.scrollbar&&this.scrollbar.resize();this.updateScreenCalculations()}updateScreenCalculationsIfScrolled(){const a=getDocumentScroll$$module$build$src$core$utils$svg_math();Coordinate$$module$build$src$core$utils$coordinate.equals(this.lastRecordedPageScroll,a)||(this.lastRecordedPageScroll=a,this.updateScreenCalculations())}getLayerManager(){return this.layerManager}getCanvas(){return this.layerManager.getBlockLayer()}setCachedParentSvgSize(a,\nb){const c=this.getParentSvg();a!=null&&(this.cachedParentSvgSize.width=a,c.setAttribute(\"data-cached-width\",`${a}`));b!=null&&(this.cachedParentSvgSize.height=b,c.setAttribute(\"data-cached-height\",`${b}`))}getBubbleCanvas(){return this.layerManager.getBubbleLayer()}getParentSvg(){if(!this.cachedParentSvg){let a=this.svgGroup_;for(;a;){if(a.tagName===\"svg\"){this.cachedParentSvg=a;break}a=a.parentNode}}return this.cachedParentSvg}maybeFireViewportChangeEvent(){if(isEnabled$$module$build$src$core$events$utils()){var a=\nthis.scale,b=-this.scrollY,c=-this.scrollX;if(!(a===this.oldScale&&Math.abs(b-this.oldTop)<1&&Math.abs(c-this.oldLeft)<1)){var d=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VIEWPORT_CHANGE))(b,c,a,this.id,this.oldScale);this.oldScale=a;this.oldTop=b;this.oldLeft=c;fire$$module$build$src$core$events$utils(d)}}}translate(a,b){let c;(c=this.layerManager)==null||c.translateLayers(new Coordinate$$module$build$src$core$utils$coordinate(a,b),this.scale);let d;\n(d=this.grid)==null||d.moveTo(a,b);this.maybeFireViewportChangeEvent()}getWidth(){const a=this.getMetrics();return a?a.viewWidth/this.scale:0}setVisible(a){this.visible=a;this.svgGroup_&&(this.scrollbar&&this.scrollbar.setContainerVisible(a),this.getFlyout()&&this.getFlyout().setContainerVisible(a),this.getParentSvg().style.display=a?\"block\":\"none\",this.toolbox&&this.toolbox.setVisible(a),a||this.hideChaff(!0))}render(){const a=this.getAllBlocks(!1);for(let b=a.length-1;b>=0;b--)a[b].queueRender();\nthis.getTopBlocks().flatMap(b=>b.getDescendants(!1)).filter(b=>b.isInsertionMarker()).forEach(b=>b.queueRender())}highlightBlock(a,b){if(b===void 0){for(let c=0,d;d=this.highlightedBlocks[c];c++)d.setHighlighted(!1);this.highlightedBlocks.length=0}if(a=a?this.getBlockById(a):null)(b=b===void 0||b)?this.highlightedBlocks.includes(a)||this.highlightedBlocks.push(a):removeElem$$module$build$src$core$utils$array(this.highlightedBlocks,a),a.setHighlighted(b)}variableChangeCallback(a){switch(a.type){case EventType$$module$build$src$core$events$type.VAR_CREATE:case EventType$$module$build$src$core$events$type.VAR_DELETE:case EventType$$module$build$src$core$events$type.VAR_RENAME:case EventType$$module$build$src$core$events$type.VAR_TYPE_CHANGE:this.refreshToolboxSelection()}}refreshToolboxSelection(){const a=\nthis.isFlyout?this.targetWorkspace:this;a&&!a.currentGesture_&&a.toolbox&&a.toolbox.getFlyout()&&a.toolbox.refreshSelection()}recordDragTargets(){const a=this.componentManager.getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET,!0);this.dragTargetAreas=[];for(let b=0,c;c=a[b];b++){const d=c.getClientRect();d&&this.dragTargetAreas.push({component:c,clientRect:d})}}newBlock(a,b){throw Error(\"The implementation of newBlock should be monkey-patched in by blockly.ts\");\n}newComment(a){throw Error(\"The implementation of newComment should be monkey-patched in by blockly.ts\");}getDragTarget(a){for(let b=0,c;c=this.dragTargetAreas[b];b++)if(c.clientRect.contains(a.clientX,a.clientY))return c.component;return null}onMouseDown(a){const b=this.getGesture(a);b&&b.handleWsStart(a,this)}startDrag(a,b){start$$module$build$src$core$utils$drag(this,a,b)}moveDrag(a){return move$$module$build$src$core$utils$drag(this,a)}setKeyboardMoveInProgress(a){this.keyboardMoveInProgress=\na}isDragging(){return this.keyboardMoveInProgress||this.currentGesture_!==null&&this.currentGesture_.isDragging()}isDraggable(){return this.options.moveOptions&&this.options.moveOptions.drag}isMovable(){return this.options.moveOptions&&!!this.options.moveOptions.scrollbars||this.options.moveOptions&&this.options.moveOptions.wheel||this.options.moveOptions&&this.options.moveOptions.drag||this.options.zoomOptions&&this.options.zoomOptions.wheel||this.options.zoomOptions&&this.options.zoomOptions.pinch}isMovableHorizontally(){const a=\n!!this.scrollbar;return this.isMovable()&&(!a||a&&this.scrollbar.canScrollHorizontally())}isMovableVertically(){const a=!!this.scrollbar;return this.isMovable()&&(!a||a&&this.scrollbar.canScrollVertically())}onMouseWheel(a){if(Gesture$$module$build$src$core$gesture.inProgress())a.preventDefault(),a.stopPropagation();else{var b=this.options.zoomOptions&&this.options.zoomOptions.wheel,c=this.options.moveOptions&&this.options.moveOptions.wheel;if(b||c){var d=getScrollDeltaPixels$$module$build$src$core$browser_events(a);\nif(MAC$$module$build$src$core$utils$useragent)var e=a.metaKey;b&&(a.ctrlKey||e||!c)?(d=-d.y/50,b=mouseToSvg$$module$build$src$core$browser_events(a,this.getParentSvg(),this.getInverseScreenCTM()),this.zoom(b.x,b.y,d)):(b=this.scrollX-d.x,c=this.scrollY-d.y,a.shiftKey&&!d.x&&(b=this.scrollX-d.y,c=this.scrollY),this.scroll(b,c));a.preventDefault()}}}getBlocksBoundingBox(){const a=this.getTopBoundedElements();if(!a.length)return new Rect$$module$build$src$core$utils$rect(0,0,0,0);const b=a[0].getBoundingRectangle();\nfor(let d=1;db.bottom&&(b.bottom=c.bottom),c.leftb.right&&(b.right=c.right))}return b}cleanUp(){this.setResizesEnabled(!1);const a=$.getGroup$$module$build$src$core$events$utils();a||$.setGroup$$module$build$src$core$events$utils(!0);var b=this.getTopBlocks(!0),c=b.filter(g=>g.isMovable());const d=b.filter(g=>!g.isMovable()).map(g=>\ng.getBoundingRectangle());b=function(g){for(const h of d)if(g.intersects(h))return h;return null};var e=0;const f=this.renderer.getConstants().MIN_BLOCK_HEIGHT;for(const g of c){c=g.getBoundingRectangle();g.moveBy(-c.left,e-c.top,[\"cleanup\"]);g.snapToGrid();c=g.getBoundingRectangle();for(e=b(c);e!=null;)e=e.top+e.getHeight()+f,g.moveBy(0,e-c.top,[\"cleanup\"]),g.snapToGrid(),c=g.getBoundingRectangle(),e=b(c);e=g.getRelativeToSurfaceXY().y+g.getHeightWidth().height+f}$.setGroup$$module$build$src$core$events$utils(a);\nthis.setResizesEnabled(!0)}showContextMenu(a){if(!this.isReadOnly()&&!this.isFlyout){var b=ContextMenuRegistry$$module$build$src$core$contextmenu_registry.registry.getContextMenuOptions({workspace:this,focusedNode:this},a);this.configureContextMenu&&this.configureContextMenu(b,a);var c=a instanceof PointerEvent?new Coordinate$$module$build$src$core$utils$coordinate(a.clientX,a.clientY):wsToScreenCoordinates$$module$build$src$core$utils$svg_math(this,new Coordinate$$module$build$src$core$utils$coordinate(5,\n5));show$$module$build$src$core$contextmenu(a,b,this.RTL,this,c)}}updateToolbox(a){if(a=convertToolboxDefToJson$$module$build$src$core$utils$toolbox(a)){if(!this.options.languageTree)throw Error(\"Existing toolbox is null. Can't create new toolbox.\");if(hasCategories$$module$build$src$core$utils$toolbox(a)){if(!this.toolbox)throw Error(\"Existing toolbox has no categories. Can't change mode.\");this.options.languageTree=a;this.toolbox.render(a)}else{if(!this.flyout)throw Error(\"Existing toolbox has categories. Can't change mode.\");\nthis.options.languageTree=a;this.flyout.show(a)}}else if(this.options.languageTree)throw Error(\"Can't nullify an existing toolbox.\");}markFocused(){this.options.parentWorkspace?this.options.parentWorkspace.markFocused():(setMainWorkspace$$module$build$src$core$common(this),this.getParentSvg().focus({preventScroll:!0}))}zoom(a,b,c){c=Math.pow(this.options.zoomOptions.scaleSpeed,c);const d=this.scale*c;if(this.scale!==d){d>this.options.zoomOptions.maxScale?c=this.options.zoomOptions.maxScale/this.scale:\ndthis.options.zoomOptions.maxScale?a=this.options.zoomOptions.maxScale:this.options.zoomOptions.minScale&&a{if(c.isFlyout){let d;const e=(d=c.targetWorkspace)==null?void 0:d.getFlyout();if(e instanceof Flyout$$module$build$src$core$flyout_base)return e.getFlyoutScale()}return c.getScale()},b=(c,d)=>c.options.parentWorkspace&&c.options.parentWorkspace.getSvgGroup().contains(c.getSvgGroup())?b(c.options.parentWorkspace,d*a(c)):d*a(c);return b(this,1)}scroll(a,b){this.hideChaff(!0);\nconst c=this.getMetrics();a=Math.min(a,-c.scrollLeft);b=Math.min(b,-c.scrollTop);const d=c.scrollTop+Math.max(0,c.scrollHeight-c.viewHeight);a=Math.max(a,-(c.scrollLeft+Math.max(0,c.scrollWidth-c.viewWidth)));b=Math.max(b,-d);this.scrollX=a;this.scrollY=b;this.scrollbar&&this.scrollbar.set(-(a+c.scrollLeft),-(b+c.scrollTop),!1);a+=c.absoluteLeft;b+=c.absoluteTop;this.translate(a,b)}getBlockById(a){return super.getBlockById(a)}getAllBlocks(a=!1){return super.getAllBlocks(a)}getTopBlocks(a=!1){return super.getTopBlocks(a)}addTopBlock(a){this.addTopBoundedElement(a);\nsuper.addTopBlock(a)}removeTopBlock(a){this.removeTopBoundedElement(a);super.removeTopBlock(a)}addTopComment(a){this.addTopBoundedElement(a);super.addTopComment(a)}removeTopComment(a){this.removeTopBoundedElement(a);super.removeTopComment(a)}getTopComments(a=!1){return super.getTopComments(a)}getCommentById(a){return super.getCommentById(a)}getRootWorkspace(){return super.getRootWorkspace()}addTopBoundedElement(a){this.topBoundedElements.push(a)}removeTopBoundedElement(a){removeElem$$module$build$src$core$utils$array(this.topBoundedElements,\na)}getTopBoundedElements(a=!1){const b=[].concat(this.topBoundedElements);a&&b.sort(this.sortByOrigin.bind(this));return b}setResizesEnabled(a){const b=!this.resizesEnabled&&a;this.resizesEnabled=a;b&&this.resizeContents()}clear(){this.setResizesEnabled(!1);super.clear();this.topBoundedElements=[];this.setResizesEnabled(!0)}registerButtonCallback(a,b){if(typeof b!==\"function\")throw TypeError(\"Button callbacks must be functions.\");this.flyoutButtonCallbacks.set(a,b)}getButtonCallback(a){let b;return(b=\nthis.flyoutButtonCallbacks.get(a))!=null?b:null}removeButtonCallback(a){this.flyoutButtonCallbacks.delete(a)}registerToolboxCategoryCallback(a,b){if(typeof b!==\"function\")throw TypeError(\"Toolbox category callbacks must be functions.\");this.toolboxCategoryCallbacks.set(a,b)}getToolboxCategoryCallback(a){return this.toolboxCategoryCallbacks.get(a)||null}removeToolboxCategoryCallback(a){this.toolboxCategoryCallbacks.delete(a)}getGesture(a){if(this.keyboardMoveInProgress)return a.preventDefault(),a.stopPropagation(),\nnull;const b=a.type===\"pointerdown\";let c;b&&((c=this.currentGesture_)==null?0:c.hasStarted())&&(console.warn(\"Tried to start the same gesture twice.\"),this.currentGesture_.cancel());!this.currentGesture_&&b&&(this.currentGesture_=new Gesture$$module$build$src$core$gesture(a,this));return this.currentGesture_}clearGesture(){this.currentGesture_=null}cancelCurrentGesture(){this.currentGesture_&&this.currentGesture_.cancel()}getAudioManager(){return this.audioManager}getGrid(){return this.grid}hideChaff(a=\n!1){hide$$module$build$src$core$tooltip();hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv(this);hideWithoutAnimation$$module$build$src$core$dropdowndiv();this.hideComponents(a)}hideComponents(a=!1){this.getComponentManager().getComponents(ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,!0).forEach(b=>b.autoHide(a))}static setTopLevelWorkspaceMetrics(a){const b=this.getMetrics();typeof a.x===\"number\"&&(this.scrollX=-(b.scrollLeft+(b.scrollWidth-b.viewWidth)*\na.x));typeof a.y===\"number\"&&(this.scrollY=-(b.scrollTop+(b.scrollHeight-b.viewHeight)*a.y));this.translate(this.scrollX+b.absoluteLeft,this.scrollY+b.absoluteTop)}addClass(a){this.injectionDiv&&addClass$$module$build$src$core$utils$dom(this.injectionDiv,a)}removeClass(a){this.injectionDiv&&removeClass$$module$build$src$core$utils$dom(this.injectionDiv,a)}setIsReadOnly(a){super.setIsReadOnly(a);a?this.addClass(\"blocklyReadOnly\"):this.removeClass(\"blocklyReadOnly\")}scrollBoundsIntoView(a,b=10){if(!Gesture$$module$build$src$core$gesture.inProgress()){var c=\nthis.getScale(),d=this.getMetricsManager().getViewMetrics(!0);d=new Rect$$module$build$src$core$utils$rect(d.top,d.top+d.height,d.left,d.left+d.width);if(!(a.left>=d.left&&a.top>=d.top&&a.right<=d.right&&a.bottom<=d.bottom)){a=a.clone();a.top-=b;a.bottom+=b;a.left-=b;a.right+=b;var e=b=0;a.leftd.right&&(b=this.RTL?d.right-a.right:Math.max(d.right-a.right,d.left-a.left));a.topd.bottom&&(e=\nMath.max(d.bottom-a.bottom,d.top-a.top));this.scroll(this.scrollX+b*c,this.scrollY+e*c)}}}getFocusableElement(){return this.svgGroup_}getFocusableTree(){return this.isMutator&&this.options.parentWorkspace||this}onNodeFocus(){}onNodeBlur(){}canBeFocused(){return!0}getRootFocusableNode(){return this}getRestoredFocusableNode(a){if(a)return null;let b;a=(b=this.targetWorkspace)==null?void 0:b.getFlyout();if(this.isFlyout&&a){let d,e;return(e=(d=a.getContents().find(f=>{f=f.getElement();return isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(f)&&\nf.canBeFocused()}))==null?void 0:d.getElement())!=null?e:null}let c;return(c=this.getTopBlocks(!0)[0])!=null?c:null}getNestedTrees(){const a=this.getAllBlocks().map(c=>c.getIcons()).flat().filter(c=>c instanceof $.MutatorIcon$$module$build$src$core$icons$mutator_icon&&c.bubbleIsVisible()).map(c=>{let d;return(d=c.getBubble())==null?void 0:d.getWorkspace()}).filter(c=>!!c),b=this.getFlyout(!0);b&&a.push(b.getWorkspace());return a}searchForWorkspaceComment(a){for(const b of this.getTopComments())if(b instanceof\nRenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment&&b.canBeFocused()&&b.getFocusableElement().id===a)return b}lookUpFocusableNode(a){var b;const c=(b=this.targetWorkspace)==null?void 0:b.getFlyout();if(this.isFlyout&&c)for(var d of c.getContents())if(b=d.getElement(),isFocusableNode$$module$build$src$core$interfaces$i_focusable_node(b)&&b.canBeFocused()&&b.getFocusableElement().id===a)return b;d=a.indexOf(\"_field_\");b=a.indexOf(\"_connection_\");if(d!==-1){var e=a.substring(0,\nd);if(e=this.getBlockById(e))for(var f of e.getFields())if(f.canBeFocused()&&f.getFocusableElement().id===a)return f;return null}if(b!==-1){e=a.substring(0,b);if(e=this.getBlockById(e))for(const h of e.getConnections_(!0))if(h.id===a)return h;return null}f=Math.max(a.indexOf(COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor),a.indexOf(COMMENT_COLLAPSE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$collapse_comment_bar_button),a.indexOf(COMMENT_DELETE_BAR_BUTTON_FOCUS_IDENTIFIER$$module$build$src$core$comments$delete_comment_bar_button));\nif(f!==-1&&(f=a.substring(0,f),f=this.searchForWorkspaceComment(f))){if(a.indexOf(COMMENT_EDITOR_FOCUS_IDENTIFIER$$module$build$src$core$comments$comment_editor)>-1)return f.getEditorFocusableNode();var g;return(g=f.view.getCommentBarButtons().find(h=>h.getFocusableElement().id.includes(a)))!=null?g:null}if((g=this.getAllBlocks(!1).find(h=>h.getFocusableElement().id===a))||(g=this.searchForWorkspaceComment(a)))return g;g=this.getAllBlocks().map(h=>h.getIcons()).flat();for(e of g){if(e.canBeFocused()&&\ne.getFocusableElement().id===a)return e;if(hasBubble$$module$build$src$core$interfaces$i_has_bubble(e)){if((g=e.getBubble())&&g.canBeFocused()&&g.getFocusableElement().id===a)return g;if(g instanceof TextInputBubble$$module$build$src$core$bubbles$textinput_bubble&&g.getEditor().getFocusableElement().id===a)return g.getEditor()}}return null}onTreeFocus(a,b){}onTreeBlur(a){if(this.isFlyout&&this.targetWorkspace&&!$.getFocusManager$$module$build$src$core$focus_manager().ephemeralFocusTaken()){var b=\nthis.targetWorkspace.getToolbox();b&&a===b||isAutoHideable$$module$build$src$core$interfaces$i_autohideable(b)&&b.autoHide(!1)}}getNavigator(){return this.navigator}setNavigator(a){this.navigator=a}},module$build$src$core$workspace_svg={};module$build$src$core$workspace_svg.WorkspaceSvg=WorkspaceSvg$$module$build$src$core$workspace_svg;module$build$src$core$workspace_svg.resizeSvgContents=resizeSvgContents$$module$build$src$core$workspace_svg;var VarBase$$module$build$src$core$events$events_var_base=class extends Abstract$$module$build$src$core$events$events_abstract{constructor(a){super();this.isBlank=typeof a===\"undefined\";a&&(this.varId=a.getId(),this.workspaceId=a.getWorkspace().id)}toJson(){const a=super.toJson();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");a.varId=this.varId;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarBase$$module$build$src$core$events$events_var_base);\nb.varId=a.varId;return b}},module$build$src$core$events$events_var_base={};module$build$src$core$events$events_var_base.VarBase=VarBase$$module$build$src$core$events$events_var_base;var VarCreate$$module$build$src$core$events$events_var_create=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_CREATE;a&&(this.varType=a.getType(),this.varName=a.getName())}toJson(){const a=super.toJson();if(this.varType===void 0)throw Error(\"The var type is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");\na.varType=this.varType;a.varName=this.varName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarCreate$$module$build$src$core$events$events_var_create);b.varType=a.varType;b.varName=a.varName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");b=b.getVariableMap();\na?b.createVariable(this.varName,this.varType,this.varId):(a=b.getVariableById(this.varId))&&b.deleteVariable(a)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_CREATE,VarCreate$$module$build$src$core$events$events_var_create);var module$build$src$core$events$events_var_create={};module$build$src$core$events$events_var_create.VarCreate=VarCreate$$module$build$src$core$events$events_var_create;var VariableModel$$module$build$src$core$variable_model=class{constructor(a,b,c,d){this.workspace=a;this.name=b;this.type=c||\"\";this.id=d||genUid$$module$build$src$core$utils$idgenerator()}getId(){return this.id}getName(){return this.name}setName(a){this.name=a;return this}getType(){return this.type}setType(a){this.type=a;return this}getWorkspace(){return this.workspace}save(){const a={name:this.getName(),id:this.getId()},b=this.getType();b&&(a.type=b);return a}static load(a,b){a=new this(b,a.name,\na.type,a.id);b.getVariableMap().addVariable(a);fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_CREATE))(a))}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MODEL,DEFAULT$$module$build$src$core$registry,VariableModel$$module$build$src$core$variable_model);var module$build$src$core$variable_model={};module$build$src$core$variable_model.VariableModel=VariableModel$$module$build$src$core$variable_model;var VarDelete$$module$build$src$core$events$events_var_delete=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_DELETE;a&&(this.varType=a.getType(),this.varName=a.getName())}toJson(){const a=super.toJson();if(this.varType===void 0)throw Error(\"The var type is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");\na.varType=this.varType;a.varName=this.varName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarDelete$$module$build$src$core$events$events_var_delete);b.varType=a.varType;b.varName=a.varName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.varName)throw Error(\"The var name is undefined. Either pass a variable to the constructor, or call fromJson\");b=b.getVariableMap();\na?(a=b.getVariableById(this.varId))&&b.deleteVariable(a):b.createVariable(this.varName,this.varType,this.varId)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_DELETE,VarDelete$$module$build$src$core$events$events_var_delete);var module$build$src$core$events$events_var_delete={};module$build$src$core$events$events_var_delete.VarDelete=VarDelete$$module$build$src$core$events$events_var_delete;var VarRename$$module$build$src$core$events$events_var_rename=class extends VarBase$$module$build$src$core$events$events_var_base{constructor(a,b){super(a);this.type=EventType$$module$build$src$core$events$type.VAR_RENAME;a&&(this.oldName=a.getName(),this.newName=typeof b===\"undefined\"?\"\":b)}toJson(){const a=super.toJson();if(!this.oldName)throw Error(\"The old var name is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.newName)throw Error(\"The new var name is undefined. Either pass a value to the constructor, or call fromJson\");\na.oldName=this.oldName;a.newName=this.newName;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?c:new VarRename$$module$build$src$core$events$events_var_rename);b.oldName=a.oldName;b.newName=a.newName;return b}run(a){var b=this.getEventWorkspace_();if(!this.varId)throw Error(\"The var ID is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.oldName)throw Error(\"The old var name is undefined. Either pass a variable to the constructor, or call fromJson\");if(!this.newName)throw Error(\"The new var name is undefined. Either pass a value to the constructor, or call fromJson\");\nb=b.getVariableMap();const c=b.getVariableById(this.varId);a?c&&b.renameVariable(c,this.newName):c&&b.renameVariable(c,this.oldName)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.VAR_RENAME,VarRename$$module$build$src$core$events$events_var_rename);var module$build$src$core$events$events_var_rename={};module$build$src$core$events$events_var_rename.VarRename=VarRename$$module$build$src$core$events$events_var_rename;var VariableMap$$module$build$src$core$variable_map=class{constructor(a,b=!1){this.workspace=a;this.potentialMap=b;this.variableMap=new Map}clear(){for(const a of this.variableMap.values())for(const b of a.values())this.deleteVariable(b);if(this.variableMap.size!==0)throw Error(\"Non-empty variable map\");}renameVariable(a,b){if(a.getName()===b)return a;var c=a.getType();c=this.getVariable(b,c);const d=this.workspace.getAllBlocks(!1);let e=\"\";this.potentialMap||(e=$.getGroup$$module$build$src$core$events$utils())||\n$.setGroup$$module$build$src$core$events$utils(!0);try{c&&c.getId()!==a.getId()?this.renameVariableWithConflict(a,b,c,d):this.renameVariableAndUses(a,b,d)}finally{this.potentialMap||$.setGroup$$module$build$src$core$events$utils(e)}return a}changeVariableType(a,b){const c=a.getType();if(c===b)return a;var d=this.variableMap.get(c);d==null||d.delete(a.getId());(d==null?void 0:d.size)===0&&this.variableMap.delete(c);a.setType(b);let e;d=(e=this.variableMap.get(b))!=null?e:new Map;d.set(a.getId(),a);\nthis.variableMap.has(b)||this.variableMap.set(b,d);fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_TYPE_CHANGE))(a,c,b));return a}renameVariableById(a,b){warn$$module$build$src$core$utils$deprecation(\"VariableMap.renameVariableById\",\"v12\",\"v13\",\"VariableMap.renameVariable\");const c=this.getVariableById(a);if(!c)throw Error(\"Tried to rename a variable that didn't exist. ID: \"+a);this.renameVariable(c,b)}renameVariableAndUses(a,\nb,c){this.potentialMap||fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.VAR_RENAME))(a,b));a.setName(b);for(b=0;b$.Names$$module$build$src$core$names.equals(d.getName(),\na)))!=null?c:null}getVariableById(a){for(const b of this.variableMap.values())if(b.has(a)){let c;return(c=b.get(a))!=null?c:null}return null}getVariablesOfType(a){return(a=this.variableMap.get(a||\"\"))?[...a.values()]:[]}getTypes(){return[...this.variableMap.keys()]}getAllVariables(){let a=[];for(const b of this.variableMap.values())a=a.concat(...b.values());return a}getAllVariableNames(){warn$$module$build$src$core$utils$deprecation(\"VariableMap.getAllVariableNames\",\"v12\",\"v13\",\"Blockly.Variables.getAllVariables\");\nconst a=[];for(const b of this.variableMap.values())for(const c of b.values())a.push(c.getName());return a}getVariableUsesById(a){warn$$module$build$src$core$utils$deprecation(\"VariableMap.getVariableUsesById\",\"v12\",\"v13\",\"Blockly.Variables.getVariableUsesById\");return getVariableUsesById$$module$build$src$core$variables(this.workspace,a)}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MAP,DEFAULT$$module$build$src$core$registry,VariableMap$$module$build$src$core$variable_map);\nvar module$build$src$core$variable_map={};module$build$src$core$variable_map.VariableMap=VariableMap$$module$build$src$core$variable_map;var TrashcanOpen$$module$build$src$core$events$events_trashcan_open=class extends UiBase$$module$build$src$core$events$events_ui_base{constructor(a,b){super(b);this.type=EventType$$module$build$src$core$events$type.TRASHCAN_OPEN;this.isOpen=a}toJson(){const a=super.toJson();if(this.isOpen===void 0)throw Error(\"Whether this is already open or not is undefined. Either pass a value to the constructor, or call fromJson\");a.isOpen=this.isOpen;return a}static fromJson(a,b,c){b=super.fromJson(a,b,c!=null?\nc:new TrashcanOpen$$module$build$src$core$events$events_trashcan_open);b.isOpen=a.isOpen;return b}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.EVENT,EventType$$module$build$src$core$events$type.TRASHCAN_OPEN,TrashcanOpen$$module$build$src$core$events$events_trashcan_open);var module$build$src$core$events$events_trashcan_open={};module$build$src$core$events$events_trashcan_open.TrashcanOpen=TrashcanOpen$$module$build$src$core$events$events_trashcan_open;var Trashcan$$module$build$src$core$trashcan=class extends DeleteArea$$module$build$src$core$delete_area{constructor(a){super();this.workspace=a;this.id=\"trashcan\";this.contents=[];this.flyout=null;this.isLidOpen=!1;this.minOpenness=0;this.lidTask=this.svgLid=this.svgGroup=null;this.top=this.left=this.lidOpen=0;this.initialized=!1;this.workspace.options.maxTrashcanContents<=0||(a=this.workspace.copyOptionsForFlyout(),this.workspace.horizontalLayout?(a.toolboxPosition=this.workspace.toolboxPosition===\nPosition$$module$build$src$core$utils$toolbox.TOP?Position$$module$build$src$core$utils$toolbox.BOTTOM:Position$$module$build$src$core$utils$toolbox.TOP,this.flyout=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,this.workspace.options,!0))(a)):(a.toolboxPosition=this.workspace.toolboxPosition===Position$$module$build$src$core$utils$toolbox.RIGHT?Position$$module$build$src$core$utils$toolbox.LEFT:Position$$module$build$src$core$utils$toolbox.RIGHT,\nthis.flyout=new (getClassFromOptions$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,this.workspace.options,!0))(a)),this.workspace.addChangeListener(this.onDelete.bind(this)))}createDom(){this.svgGroup=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.G,{\"class\":\"blocklyTrash\"});let a;const b=String(Math.random()).substring(2);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,\n{id:\"blocklyTrashBodyClipPath\"+b},this.svgGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:WIDTH$$module$build$src$core$trashcan,height:BODY_HEIGHT$$module$build$src$core$trashcan,y:LID_HEIGHT$$module$build$src$core$trashcan},a);const c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,x:-SPRITE_LEFT$$module$build$src$core$trashcan,height:SPRITE$$module$build$src$core$sprites.height,\ny:-SPRITE_TOP$$module$build$src$core$trashcan,\"clip-path\":\"url(#blocklyTrashBodyClipPath\"+b+\")\"},this.svgGroup);c.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.CLIPPATH,{id:\"blocklyTrashLidClipPath\"+b},this.svgGroup);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.RECT,{width:WIDTH$$module$build$src$core$trashcan,\nheight:LID_HEIGHT$$module$build$src$core$trashcan},a);this.svgLid=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{width:SPRITE$$module$build$src$core$sprites.width,x:-SPRITE_LEFT$$module$build$src$core$trashcan,height:SPRITE$$module$build$src$core$sprites.height,y:-SPRITE_TOP$$module$build$src$core$trashcan,\"clip-path\":\"url(#blocklyTrashLidClipPath\"+b+\")\"},this.svgGroup);this.svgLid.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",\nthis.workspace.options.pathToMedia+SPRITE$$module$build$src$core$sprites.url);bind$$module$build$src$core$browser_events(this.svgGroup,\"pointerdown\",this,this.blockMouseDownWhenOpenable);bind$$module$build$src$core$browser_events(this.svgGroup,\"pointerup\",this,this.click);bind$$module$build$src$core$browser_events(c,\"pointerover\",this,this.mouseOver);bind$$module$build$src$core$browser_events(c,\"pointerout\",this,this.mouseOut);this.animateLid();return this.svgGroup}init(){if(this.workspace.options.maxTrashcanContents>\n0){const a=this.flyout.createDom(Svg$$module$build$src$core$utils$svg.SVG);addClass$$module$build$src$core$utils$dom(a,\"blocklyTrashcanFlyout\");insertAfter$$module$build$src$core$utils$dom(a,this.workspace.getParentSvg());this.flyout.init(this.workspace)}this.workspace.getComponentManager().addComponent({component:this,weight:ComponentManager$$module$build$src$core$component_manager.ComponentWeight.TRASHCAN_WEIGHT,capabilities:[ComponentManager$$module$build$src$core$component_manager.Capability.AUTOHIDEABLE,\nComponentManager$$module$build$src$core$component_manager.Capability.DELETE_AREA,ComponentManager$$module$build$src$core$component_manager.Capability.DRAG_TARGET,ComponentManager$$module$build$src$core$component_manager.Capability.POSITIONABLE]});this.initialized=!0;this.setLidOpen(!1)}dispose(){this.workspace.getComponentManager().removeComponent(\"trashcan\");this.svgGroup&&removeNode$$module$build$src$core$utils$dom(this.svgGroup);this.lidTask&&clearTimeout(this.lidTask)}hasContents(){return!!this.contents.length}contentsIsOpen(){return!!this.flyout&&\nthis.flyout.isVisible()}openFlyout(){if(!this.contentsIsOpen()){var a=this.contents.map(function(c){return JSON.parse(c)}),b=this.workspace.getParentSvg().style;b.cursor=\"wait\";setTimeout(()=>{let c;(c=this.flyout)==null||c.show(a);b.cursor=\"\";let d;(d=this.workspace.scrollbar)==null||d.setVisible(!1)},10);this.fireUiEvent(!0)}}closeFlyout(){if(this.contentsIsOpen()){var a;(a=this.flyout)==null||a.hide();var b;(b=this.workspace.scrollbar)==null||b.setVisible(!0);this.fireUiEvent(!1);this.workspace.recordDragTargets()}}autoHide(a){!a&&\nthis.flyout&&this.closeFlyout()}emptyContents(){this.hasContents()&&(this.contents.length=0,this.setMinOpenness(0),this.closeFlyout())}position(a,b){if(this.initialized){var c=getCornerOppositeToolbox$$module$build$src$core$positionable_helpers(this.workspace,a);a=getStartPositionRect$$module$build$src$core$positionable_helpers(c,new Size$$module$build$src$core$utils$size(WIDTH$$module$build$src$core$trashcan,BODY_HEIGHT$$module$build$src$core$trashcan+LID_HEIGHT$$module$build$src$core$trashcan),\nMARGIN_HORIZONTAL$$module$build$src$core$trashcan,MARGIN_VERTICAL$$module$build$src$core$trashcan,a,this.workspace);b=bumpPositionRect$$module$build$src$core$positionable_helpers(a,MARGIN_VERTICAL$$module$build$src$core$trashcan,c.vertical===verticalPosition$$module$build$src$core$positionable_helpers.TOP?bumpDirection$$module$build$src$core$positionable_helpers.DOWN:bumpDirection$$module$build$src$core$positionable_helpers.UP,b);this.top=b.top;this.left=b.left;var d;(d=this.svgGroup)==null||d.setAttribute(\"transform\",\n\"translate(\"+this.left+\",\"+this.top+\")\");var e;(e=this.flyout)==null||e.position()}}getBoundingRectangle(){return new Rect$$module$build$src$core$utils$rect(this.top,this.top+BODY_HEIGHT$$module$build$src$core$trashcan+LID_HEIGHT$$module$build$src$core$trashcan,this.left,this.left+WIDTH$$module$build$src$core$trashcan)}getClientRect(){if(!this.svgGroup)return null;var a=this.svgGroup.getBoundingClientRect();const b=a.top+SPRITE_TOP$$module$build$src$core$trashcan-MARGIN_HOTSPOT$$module$build$src$core$trashcan;\na=a.left+SPRITE_LEFT$$module$build$src$core$trashcan-MARGIN_HOTSPOT$$module$build$src$core$trashcan;return new Rect$$module$build$src$core$utils$rect(b,b+LID_HEIGHT$$module$build$src$core$trashcan+BODY_HEIGHT$$module$build$src$core$trashcan+2*MARGIN_HOTSPOT$$module$build$src$core$trashcan,a,a+WIDTH$$module$build$src$core$trashcan+2*MARGIN_HOTSPOT$$module$build$src$core$trashcan)}onDragOver(a){this.setLidOpen(this.wouldDelete_)}onDragExit(a){this.setLidOpen(!1)}onDrop(a){setTimeout(this.setLidOpen.bind(this,\n!1),100)}setLidOpen(a){this.isLidOpen!==a&&(this.lidTask&&clearTimeout(this.lidTask),this.isLidOpen=a,this.animateLid())}animateLid(){const a=ANIMATION_FRAMES$$module$build$src$core$trashcan;var b=1/(a+1);this.lidOpen+=this.isLidOpen?b:-b;this.lidOpen=Math.min(Math.max(this.lidOpen,this.minOpenness),1);this.setLidAngle(this.lidOpen*MAX_LID_ANGLE$$module$build$src$core$trashcan);b=OPACITY_MIN$$module$build$src$core$trashcan+this.lidOpen*(OPACITY_MAX$$module$build$src$core$trashcan-OPACITY_MIN$$module$build$src$core$trashcan);\nthis.svgGroup&&(this.svgGroup.style.opacity=`${b}`);this.lidOpen>this.minOpenness&&this.lidOpen<1&&(this.lidTask=setTimeout(this.animateLid.bind(this),ANIMATION_LENGTH$$module$build$src$core$trashcan/a))}setLidAngle(a){const b=this.workspace.toolboxPosition===Position$$module$build$src$core$utils$toolbox.RIGHT||this.workspace.horizontalLayout&&this.workspace.RTL;let c;(c=this.svgLid)==null||c.setAttribute(\"transform\",\"rotate(\"+(b?-a:a)+\",\"+(b?4:WIDTH$$module$build$src$core$trashcan-4)+\",\"+(LID_HEIGHT$$module$build$src$core$trashcan-\n2)+\")\")}setMinOpenness(a){this.minOpenness=a;this.isLidOpen||this.setLidAngle(a*MAX_LID_ANGLE$$module$build$src$core$trashcan)}closeLid(){this.setLidOpen(!1)}click(){this.hasContents()&&!this.workspace.isDragging()&&this.openFlyout()}fireUiEvent(a){a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.TRASHCAN_OPEN))(a,this.workspace.id);fire$$module$build$src$core$events$utils(a)}blockMouseDownWhenOpenable(a){!this.contentsIsOpen()&&this.hasContents()&&a.stopPropagation()}mouseOver(){this.hasContents()&&\nthis.setLidOpen(!0)}mouseOut(){this.setLidOpen(!1)}onDelete(a){if(!(this.workspace.options.maxTrashcanContents<=0||!isBlockDelete$$module$build$src$core$events$predicates(a)||a.wasShadow)){if(!a.oldJson)throw Error(\"Encountered a delete event without proper oldJson\");a=JSON.stringify(this.cleanBlockJson(a.oldJson));if(!this.contents.includes(a)){for(this.contents.unshift(a);this.contents.length>this.workspace.options.maxTrashcanContents;)this.contents.pop();this.setMinOpenness(HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan)}}}cleanBlockJson(a){function b(c){if(c){delete c.id;\ndelete c.x;delete c.y;delete c.enabled;delete c.disabledReasons;if(c.icons&&c.icons.comment){var d=c.icons.comment;delete d.height;delete d.width;delete d.pinned}d=c.inputs;for(var e in d){var f=d[e];const g=f.block;f=f.shadow;g&&b(g);f&&b(f)}c.next&&(e=c.next,c=e.block,e=e.shadow,c&&b(c),e&&b(e))}}a=JSON.parse(JSON.stringify(a));b(a);return Object.assign({},{kind:\"BLOCK\"},a)}},WIDTH$$module$build$src$core$trashcan=47,BODY_HEIGHT$$module$build$src$core$trashcan=44,LID_HEIGHT$$module$build$src$core$trashcan=\n16,MARGIN_VERTICAL$$module$build$src$core$trashcan=20,MARGIN_HORIZONTAL$$module$build$src$core$trashcan=20,MARGIN_HOTSPOT$$module$build$src$core$trashcan=10,SPRITE_LEFT$$module$build$src$core$trashcan=0,SPRITE_TOP$$module$build$src$core$trashcan=32,HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan=.1,ANIMATION_LENGTH$$module$build$src$core$trashcan=80,ANIMATION_FRAMES$$module$build$src$core$trashcan=4,OPACITY_MIN$$module$build$src$core$trashcan=.4,OPACITY_MAX$$module$build$src$core$trashcan=.8,\nMAX_LID_ANGLE$$module$build$src$core$trashcan=45,module$build$src$core$trashcan={};module$build$src$core$trashcan.Trashcan=Trashcan$$module$build$src$core$trashcan;var stashedCopyData$$module$build$src$core$clipboard=null,stashedWorkspace$$module$build$src$core$clipboard=null,stashedCoordinates$$module$build$src$core$clipboard=void 0,module$build$src$core$clipboard={};module$build$src$core$clipboard.BlockPaster=BlockPaster$$module$build$src$core$clipboard$block_paster;module$build$src$core$clipboard.copy=copy$$module$build$src$core$clipboard;module$build$src$core$clipboard.getLastCopiedData=getLastCopiedData$$module$build$src$core$clipboard;\nmodule$build$src$core$clipboard.getLastCopiedLocation=getLastCopiedLocation$$module$build$src$core$clipboard;module$build$src$core$clipboard.getLastCopiedWorkspace=getLastCopiedWorkspace$$module$build$src$core$clipboard;module$build$src$core$clipboard.paste=paste$$module$build$src$core$clipboard;module$build$src$core$clipboard.registry=module$build$src$core$clipboard$registry;module$build$src$core$clipboard.setLastCopiedData=setLastCopiedData$$module$build$src$core$clipboard;\nmodule$build$src$core$clipboard.setLastCopiedLocation=setLastCopiedLocation$$module$build$src$core$clipboard;module$build$src$core$clipboard.setLastCopiedWorkspace=setLastCopiedWorkspace$$module$build$src$core$clipboard;var module$build$src$core$comments={};module$build$src$core$comments.CollapseCommentBarButton=CollapseCommentBarButton$$module$build$src$core$comments$collapse_comment_bar_button;module$build$src$core$comments.CommentBarButton=CommentBarButton$$module$build$src$core$comments$comment_bar_button;module$build$src$core$comments.CommentEditor=CommentEditor$$module$build$src$core$comments$comment_editor;module$build$src$core$comments.CommentView=CommentView$$module$build$src$core$comments$comment_view;\nmodule$build$src$core$comments.DeleteCommentBarButton=DeleteCommentBarButton$$module$build$src$core$comments$delete_comment_bar_button;module$build$src$core$comments.RenderedWorkspaceComment=RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment;module$build$src$core$comments.WorkspaceComment=WorkspaceComment$$module$build$src$core$comments$workspace_comment;var module$build$src$core$interfaces$i_copyable={};module$build$src$core$interfaces$i_copyable.isCopyable=isCopyable$$module$build$src$core$interfaces$i_copyable;var names$$module$build$src$core$shortcut_items;(function(a){a.ESCAPE=\"escape\";a.DELETE=\"delete\";a.COPY=\"copy\";a.CUT=\"cut\";a.PASTE=\"paste\";a.UNDO=\"undo\";a.REDO=\"redo\"})(names$$module$build$src$core$shortcut_items||(names$$module$build$src$core$shortcut_items={}));registerDefaultShortcuts$$module$build$src$core$shortcut_items();var module$build$src$core$shortcut_items={};module$build$src$core$shortcut_items.names=names$$module$build$src$core$shortcut_items;\nmodule$build$src$core$shortcut_items.registerCopy=registerCopy$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerCut=registerCut$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerDefaultShortcuts=registerDefaultShortcuts$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerDelete=registerDelete$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerEscape=registerEscape$$module$build$src$core$shortcut_items;\nmodule$build$src$core$shortcut_items.registerPaste=registerPaste$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerRedo=registerRedo$$module$build$src$core$shortcut_items;module$build$src$core$shortcut_items.registerUndo=registerUndo$$module$build$src$core$shortcut_items;var ProcedureSerializer$$module$build$src$core$serialization$procedures=class{constructor(a,b){this.procedureModelClass=a;this.parameterModelClass=b;this.priority=PROCEDURES$$module$build$src$core$serialization$priorities}save(a){a=a.getProcedureMap().getProcedures().map(b=>saveProcedure$$module$build$src$core$serialization$procedures(b));return a.length?a:null}load(a,b){const c=b.getProcedureMap();for(const d of a)c.add(loadProcedure$$module$build$src$core$serialization$procedures(this.procedureModelClass,\nthis.parameterModelClass,d,b))}clear(a){a.getProcedureMap().clear()}},module$build$src$core$serialization$procedures={};module$build$src$core$serialization$procedures.ProcedureSerializer=ProcedureSerializer$$module$build$src$core$serialization$procedures;module$build$src$core$serialization$procedures.loadProcedure=loadProcedure$$module$build$src$core$serialization$procedures;module$build$src$core$serialization$procedures.saveProcedure=saveProcedure$$module$build$src$core$serialization$procedures;var VariableSerializer$$module$build$src$core$serialization$variables=class{constructor(){this.priority=VARIABLES$$module$build$src$core$serialization$priorities}save(a){a=a.getAllVariables().map(b=>b.save());return a.length?a:null}load(a,b){const c=getObject$$module$build$src$core$registry(Type$$module$build$src$core$registry.VARIABLE_MODEL,DEFAULT$$module$build$src$core$registry);a.forEach(d=>{c==null||c.load(d,b)})}clear(a){a.getVariableMap().clear()}};\nregister$$module$build$src$core$serialization$registry(\"variables\",new VariableSerializer$$module$build$src$core$serialization$variables);var module$build$src$core$serialization$variables={};module$build$src$core$serialization$variables.VariableSerializer=VariableSerializer$$module$build$src$core$serialization$variables;var module$build$src$core$serialization$workspaces={};module$build$src$core$serialization$workspaces.load=load$$module$build$src$core$serialization$workspaces;module$build$src$core$serialization$workspaces.save=save$$module$build$src$core$serialization$workspaces;var module$build$src$core$serialization={blocks:module$build$src$core$serialization$blocks,exceptions:module$build$src$core$serialization$exceptions,priorities:module$build$src$core$serialization$priorities,procedures:module$build$src$core$serialization$procedures,registry:module$build$src$core$serialization$registry,variables:module$build$src$core$serialization$variables,workspaceComments:module$build$src$core$serialization$workspace_comments,workspaces:module$build$src$core$serialization$workspaces};\"Blockly\"in globalThis||(globalThis.Blockly={Msg:module$build$src$core$msg});var module$build$src$core$main={};var LABEL_TYPE$$module$build$src$core$label_flyout_inflater=\"label\",LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater=class{load(a,b){a=new FlyoutButton$$module$build$src$core$flyout_button(b.getWorkspace(),b.targetWorkspace,a,!0);a.show();return new FlyoutItem$$module$build$src$core$flyout_item(a,LABEL_TYPE$$module$build$src$core$label_flyout_inflater)}gapForItem(a,b){return b}disposeItem(a){a=a.getElement();a instanceof FlyoutButton$$module$build$src$core$flyout_button&&a.dispose()}getType(){return LABEL_TYPE$$module$build$src$core$label_flyout_inflater}};\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,LABEL_TYPE$$module$build$src$core$label_flyout_inflater,LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater);var module$build$src$core$label_flyout_inflater={};module$build$src$core$label_flyout_inflater.LabelFlyoutInflater=LabelFlyoutInflater$$module$build$src$core$label_flyout_inflater;var ConstantProvider$$module$build$src$core$renderers$zelos$constants=class extends ConstantProvider$$module$build$src$core$renderers$common$constants{constructor(a){super();this.GRID_UNIT=4;this.CURSOR_COLOUR=\"#ffa200\";this.CURSOR_RADIUS=5;this.JAGGED_TEETH_WIDTH=this.JAGGED_TEETH_HEIGHT=0;this.START_HAT_HEIGHT=22;this.START_HAT_WIDTH=96;this.SHAPES={HEXAGONAL:1,ROUND:2,SQUARE:3,PUZZLE:4,NOTCH:5};this.SHAPE_IN_SHAPE_PADDING={1:{0:5*this.GRID_UNIT,1:2*this.GRID_UNIT,2:5*this.GRID_UNIT,3:5*this.GRID_UNIT},\n2:{0:3*this.GRID_UNIT,1:3*this.GRID_UNIT,2:1*this.GRID_UNIT,3:2*this.GRID_UNIT},3:{0:2*this.GRID_UNIT,1:2*this.GRID_UNIT,2:2*this.GRID_UNIT,3:2*this.GRID_UNIT}};this.FULL_BLOCK_FIELDS=!0;this.FIELD_TEXT_FONTWEIGHT=\"bold\";this.FIELD_TEXT_FONTFAMILY='\"Helvetica Neue\", \"Segoe UI\", Helvetica, sans-serif';this.FIELD_COLOUR_FULL_BLOCK=this.FIELD_TEXTINPUT_BOX_SHADOW=this.FIELD_DROPDOWN_SVG_ARROW=this.FIELD_DROPDOWN_COLOURED_DIV=this.FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW=!0;this.SELECTED_GLOW_COLOUR=\"#fff200\";\nthis.SELECTED_GLOW_SIZE=.5;this.REPLACEMENT_GLOW_COLOUR=\"#fff200\";this.REPLACEMENT_GLOW_SIZE=2;this.selectedGlowFilterId=\"\";this.selectedGlowFilter=null;this.replacementGlowFilterId=\"\";this.SQUARED=this.ROUNDED=this.HEXAGONAL=this.replacementGlowFilter=null;a&&(this.GRID_UNIT=a);this.SMALL_PADDING=this.GRID_UNIT;this.MEDIUM_PADDING=2*this.GRID_UNIT;this.MEDIUM_LARGE_PADDING=3*this.GRID_UNIT;this.LARGE_PADDING=4*this.GRID_UNIT;this.CORNER_RADIUS=1*this.GRID_UNIT;this.NOTCH_WIDTH=9*this.GRID_UNIT;this.NOTCH_HEIGHT=\n2*this.GRID_UNIT;this.STATEMENT_INPUT_NOTCH_OFFSET=this.NOTCH_OFFSET_LEFT=3*this.GRID_UNIT;this.MIN_BLOCK_WIDTH=2*this.GRID_UNIT;this.MIN_BLOCK_HEIGHT=12*this.GRID_UNIT;this.EMPTY_STATEMENT_INPUT_HEIGHT=6*this.GRID_UNIT;this.TOP_ROW_MIN_HEIGHT=this.CORNER_RADIUS;this.TOP_ROW_PRECEDES_STATEMENT_MIN_HEIGHT=this.LARGE_PADDING;this.BOTTOM_ROW_MIN_HEIGHT=this.CORNER_RADIUS;this.BOTTOM_ROW_AFTER_STATEMENT_MIN_HEIGHT=6*this.GRID_UNIT;this.STATEMENT_BOTTOM_SPACER=-this.NOTCH_HEIGHT;this.STATEMENT_INPUT_SPACER_MIN_WIDTH=\n40*this.GRID_UNIT;this.STATEMENT_INPUT_PADDING_LEFT=4*this.GRID_UNIT;this.EMPTY_INLINE_INPUT_PADDING=4*this.GRID_UNIT;this.EMPTY_INLINE_INPUT_HEIGHT=8*this.GRID_UNIT;this.DUMMY_INPUT_MIN_HEIGHT=8*this.GRID_UNIT;this.DUMMY_INPUT_SHADOW_MIN_HEIGHT=6*this.GRID_UNIT;this.CURSOR_WS_WIDTH=20*this.GRID_UNIT;this.FIELD_TEXT_FONTSIZE=3*this.GRID_UNIT;this.FIELD_BORDER_RECT_RADIUS=this.CORNER_RADIUS;this.FIELD_BORDER_RECT_X_PADDING=2*this.GRID_UNIT;this.FIELD_BORDER_RECT_Y_PADDING=1.625*this.GRID_UNIT;this.FIELD_BORDER_RECT_HEIGHT=\n8*this.GRID_UNIT;this.FIELD_DROPDOWN_BORDER_RECT_HEIGHT=8*this.GRID_UNIT;this.FIELD_DROPDOWN_SVG_ARROW_PADDING=this.FIELD_BORDER_RECT_X_PADDING;this.FIELD_COLOUR_DEFAULT_WIDTH=6*this.GRID_UNIT;this.FIELD_COLOUR_DEFAULT_HEIGHT=8*this.GRID_UNIT;this.FIELD_CHECKBOX_X_OFFSET=1*this.GRID_UNIT;this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH=12*this.GRID_UNIT}setFontConstants_(a){super.setFontConstants_(a);this.FIELD_DROPDOWN_BORDER_RECT_HEIGHT=this.FIELD_BORDER_RECT_HEIGHT=this.FIELD_TEXT_HEIGHT+this.FIELD_BORDER_RECT_Y_PADDING*\n2}init(){super.init();this.HEXAGONAL=this.makeHexagonal();this.ROUNDED=this.makeRounded();this.SQUARED=this.makeSquared();this.STATEMENT_INPUT_NOTCH_OFFSET=this.NOTCH_OFFSET_LEFT+this.INSIDE_CORNERS.rightWidth}setDynamicProperties_(a){super.setDynamicProperties_(a);this.SELECTED_GLOW_COLOUR=a.getComponentStyle(\"selectedGlowColour\")||this.SELECTED_GLOW_COLOUR;const b=Number(a.getComponentStyle(\"selectedGlowSize\"));this.SELECTED_GLOW_SIZE=b&&!isNaN(b)?b:this.SELECTED_GLOW_SIZE;this.REPLACEMENT_GLOW_COLOUR=\na.getComponentStyle(\"replacementGlowColour\")||this.REPLACEMENT_GLOW_COLOUR;this.REPLACEMENT_GLOW_SIZE=(a=Number(a.getComponentStyle(\"replacementGlowSize\")))&&!isNaN(a)?a:this.REPLACEMENT_GLOW_SIZE}dispose(){super.dispose();this.selectedGlowFilter&&removeNode$$module$build$src$core$utils$dom(this.selectedGlowFilter);this.replacementGlowFilter&&removeNode$$module$build$src$core$utils$dom(this.replacementGlowFilter)}makeStartHat(){const a=this.START_HAT_HEIGHT,b=this.START_HAT_WIDTH,c=curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(25,-a),point$$module$build$src$core$utils$svg_paths(71,-a),point$$module$build$src$core$utils$svg_paths(b,0)]);return{height:a*.75,width:b,path:c}}makeHexagonal(){function a(c,d,e){var f=c/2;f=f>b?b:f;e=e?-1:1;c=(d?-1:1)*c/2;return lineTo$$module$build$src$core$utils$svg_paths(-e*f,c)+lineTo$$module$build$src$core$utils$svg_paths(e*f,c)}const b=this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH;return{type:this.SHAPES.HEXAGONAL,isDynamic:!0,width(c){c/=2;return c>\nb?b:c},height(c){return c},connectionOffsetY(c){return c/2},connectionOffsetX(c){return-c},pathDown(c){return a(c,!1,!1)},pathUp(c){return a(c,!0,!1)},pathRightDown(c){return a(c,!1,!0)},pathRightUp(c){return a(c,!1,!0)}}}makeRounded(){function a(d,e,f){const g=d>c?d-c:0;d=(d>c?c:d)/2;const h=f===e?\"0\":\"1\";return arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+h,d,point$$module$build$src$core$utils$svg_paths((f?1:-1)*d,(e?-1:1)*d))+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",(e?-1:\n1)*g)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+h,d,point$$module$build$src$core$utils$svg_paths((f?-1:1)*d,(e?-1:1)*d))}const b=this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH,c=b*2;return{type:this.SHAPES.ROUND,isDynamic:!0,width(d){d/=2;return d>b?b:d},height(d){return d},connectionOffsetY(d){return d/2},connectionOffsetX(d){return-d},pathDown(d){return a(d,!1,!1)},pathUp(d){return a(d,!0,!1)},pathRightDown(d){return a(d,!1,!0)},pathRightUp(d){return a(d,!1,!0)}}}makeSquared(){function a(c,\nd,e){c-=b*2;const f=e===d?\"0\":\"1\";return arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+f,b,point$$module$build$src$core$utils$svg_paths((e?1:-1)*b,(d?-1:1)*b))+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",(d?-1:1)*c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,\"+f,b,point$$module$build$src$core$utils$svg_paths((e?-1:1)*b,(d?-1:1)*b))}const b=this.CORNER_RADIUS;return{type:this.SHAPES.SQUARE,isDynamic:!0,width(c){return b},height(c){return c},connectionOffsetY(c){return c/\n2},connectionOffsetX(c){return-c},pathDown(c){return a(c,!1,!1)},pathUp(c){return a(c,!0,!1)},pathRightDown(c){return a(c,!1,!0)},pathRightUp(c){return a(c,!1,!0)}}}shapeFor(a){let b=a.getCheck();!b&&a.targetConnection&&(b=a.targetConnection.getCheck());switch(a.type){case ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE:case ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE:a=a.getSourceBlock().getOutputShape();if(a!==null)switch(a){case this.SHAPES.HEXAGONAL:return this.HEXAGONAL;\ncase this.SHAPES.ROUND:return this.ROUNDED;case this.SHAPES.SQUARE:return this.SQUARED}if(b&&b.includes(\"Boolean\"))return this.HEXAGONAL;if(b&&b.includes(\"Number\"))return this.ROUNDED;b&&b.includes(\"String\");return this.ROUNDED;case ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT:case ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT:return this.NOTCH;default:throw Error(\"Unknown type\");}}makeNotch(){function a(l){return curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(l*e/2,0),point$$module$build$src$core$utils$svg_paths(l*e*3/4,g/2),point$$module$build$src$core$utils$svg_paths(l*e,g)])+line$$module$build$src$core$utils$svg_paths([point$$module$build$src$core$utils$svg_paths(l*e,f)])+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/4,g/2),point$$module$build$src$core$utils$svg_paths(l*e/2,g),point$$module$build$src$core$utils$svg_paths(l*e,g)])+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",\nl*d)+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/2,0),point$$module$build$src$core$utils$svg_paths(l*e*3/4,-(g/2)),point$$module$build$src$core$utils$svg_paths(l*e,-g)])+line$$module$build$src$core$utils$svg_paths([point$$module$build$src$core$utils$svg_paths(l*e,-f)])+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(l*e/4,-(g/2)),point$$module$build$src$core$utils$svg_paths(l*e/2,-g),point$$module$build$src$core$utils$svg_paths(l*\ne,-g)])}const b=this.NOTCH_WIDTH,c=this.NOTCH_HEIGHT,d=b/3,e=d/3,f=c/2,g=f/2,h=a(1),k=a(-1);return{type:this.SHAPES.NOTCH,width:b,height:c,pathLeft:h,pathRight:k}}makeInsideCorners(){const a=this.CORNER_RADIUS,b=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(-a,a)),c=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a,point$$module$build$src$core$utils$svg_paths(-a,a)),d=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(a,\na)),e=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a,point$$module$build$src$core$utils$svg_paths(a,a));return{width:a,height:a,pathTop:b,pathBottom:d,rightWidth:a,rightHeight:a,pathTopRight:c,pathBottomRight:e}}generateSecondaryColour_(a){return blend$$module$build$src$core$utils$colour(\"#000\",a,.15)||a}generateTertiaryColour_(a){return blend$$module$build$src$core$utils$colour(\"#000\",a,.25)||a}createDom(a,b,c,d){super.createDom(a,b,c,d);a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.DEFS,\n{},a);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FILTER,{id:\"blocklySelectedGlowFilter\"+this.randomIdentifier,height:\"160%\",width:\"180%\",y:\"-30%\",x:\"-40%\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR,{\"in\":\"SourceGraphic\",stdDeviation:this.SELECTED_GLOW_SIZE},b);c=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER,{result:\"outBlur\"},b);\ncreateSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFUNCA,{type:\"table\",tableValues:\"0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\"},c);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFLOOD,{\"flood-color\":this.SELECTED_GLOW_COLOUR,\"flood-opacity\":1,result:\"outColor\"},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"outColor\",in2:\"outBlur\",operator:\"in\",result:\"outGlow\"},b);\nthis.selectedGlowFilterId=b.id;this.selectedGlowFilter=b;a=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FILTER,{id:\"blocklyReplacementGlowFilter\"+this.randomIdentifier,height:\"160%\",width:\"180%\",y:\"-30%\",x:\"-40%\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEGAUSSIANBLUR,{\"in\":\"SourceGraphic\",stdDeviation:this.REPLACEMENT_GLOW_SIZE},a);b=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPONENTTRANSFER,\n{result:\"outBlur\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFUNCA,{type:\"table\",tableValues:\"0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\"},b);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FEFLOOD,{\"flood-color\":this.REPLACEMENT_GLOW_COLOUR,\"flood-opacity\":1,result:\"outColor\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"outColor\",in2:\"outBlur\",operator:\"in\",\nresult:\"outGlow\"},a);createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.FECOMPOSITE,{\"in\":\"SourceGraphic\",in2:\"outGlow\",operator:\"over\"},a);this.replacementGlowFilterId=a.id;this.replacementGlowFilter=a;d&&(d.style.setProperty(\"--blocklySelectedGlowFilter\",`url(#${this.selectedGlowFilterId})`),d.style.setProperty(\"--blocklyReplacementGlowFilter\",`url(#${this.replacementGlowFilterId})`))}getCSS_(a){return[`${a} .blocklyText,`,`${a} .blocklyFlyoutLabelText {`,`font: ${this.FIELD_TEXT_FONTWEIGHT} ${this.FIELD_TEXT_FONTSIZE}`+\n`pt ${this.FIELD_TEXT_FONTFAMILY};`,\"}\",`${a} .blocklyTextInputBubble textarea {`,\"font-weight: normal;\",\"}\",`${a} .blocklyText {`,\"fill: #fff;\",\"}\",`${a} .blocklyNonEditableField>rect:not(.blocklyDropdownRect),`,`${a} .blocklyEditableField>rect:not(.blocklyDropdownRect) {`,`fill: ${this.FIELD_BORDER_RECT_COLOUR};`,\"}\",`${a} .blocklyNonEditableField>text,`,`${a} .blocklyEditableField>text,`,`${a} .blocklyNonEditableField>g>text,`,`${a} .blocklyEditableField>g>text {`,\"fill: #575E75;\",\"}\",`${a} .blocklyFlyoutLabelText {`,\n\"fill: #575E75;\",\"}\",`${a} .blocklyText.blocklyBubbleText {`,\"fill: #575E75;\",\"}\",`${a} .blocklyDraggable:not(.blocklyDisabled)`,\" .blocklyEditableField:not(.blocklyEditing):hover>rect,\",`${a} .blocklyDraggable:not(.blocklyDisabled)`,\" .blocklyEditableField:not(.blocklyEditing):hover>.blocklyPath {\",\"stroke: #fff;\",\"stroke-width: 2;\",\"}\",`${a} .blocklyHtmlInput {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,`font-weight: ${this.FIELD_TEXT_FONTWEIGHT};`,\"color: #575E75;\",\"}\",`${a} .blocklyDropdownText {`,\n\"fill: #fff !important;\",\"}\",`${a}.blocklyWidgetDiv .blocklyMenuItem,`,`${a}.blocklyDropDownDiv .blocklyMenuItem {`,`font-family: ${this.FIELD_TEXT_FONTFAMILY};`,\"}\",`${a}.blocklyDropDownDiv .blocklyMenuItemContent {`,\"color: #fff;\",\"}\",`${a} .blocklyHighlightedConnectionPath {`,`stroke: ${this.SELECTED_GLOW_COLOUR};`,\"}\",`${a} .blocklyDisabledPattern > .blocklyOutlinePath {`,\"fill: var(--blocklyDisabledPattern)\",\"}\",`${a} .blocklyInsertionMarker>.blocklyPath {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\n\"stroke: none;\",\"}\",`${a} .blocklySelected>.blocklyPath.blocklyPathSelected {`,\"fill: none;\",\"filter: var(--blocklySelectedGlowFilter);\",\"}\",`${a} .blocklyReplaceable>.blocklyPath {`,\"filter: var(--blocklyReplacementGlowFilter);\",\"}\"]}},module$build$src$core$renderers$zelos$constants={};module$build$src$core$renderers$zelos$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$zelos$constants;var Drawer$$module$build$src$core$renderers$zelos$drawer=class extends Drawer$$module$build$src$core$renderers$common$drawer{constructor(a,b){super(a,b)}draw(){const a=this.block_.pathObject;a.beginDrawing();this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();a.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);this.info_.RTL&&a.flipRTL();this.recordSizeOnBlock_();this.info_.outputConnection&&(a.outputShapeType=this.info_.outputConnection.shape.type);a.endDrawing()}drawOutline_(){this.info_.outputConnection&&\nthis.info_.outputConnection.isDynamicShape&&!this.info_.hasStatementInput&&!this.info_.bottomRow.hasNextConnection?(this.drawFlatTop_(),this.drawRightDynamicConnection_(),this.drawFlatBottom_(),this.drawLeftDynamicConnection_()):super.drawOutline_()}drawLeft_(){this.info_.outputConnection&&this.info_.outputConnection.isDynamicShape?this.drawLeftDynamicConnection_():super.drawLeft_()}drawRightSideRow_(a){if(!(a.height<=0)){if(Types$$module$build$src$core$renderers$measurables$types.isSpacer(a)){const d=\na.precedesStatement;var b=a.followsStatement;if(d||b){const e=this.constants_.INSIDE_CORNERS;var c=e.rightHeight;c=a.height-(d?c:0);b=b?e.pathBottomRight:\"\";a=c>0?lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+c):\"\";this.outlinePath_+=b+a+(d?e.pathTopRight:\"\");return}}this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+a.height)}}drawRightDynamicConnection_(){if(!this.info_.outputConnection)throw Error(\"Cannot draw the output connection of a block that doesn't have one\");\nthis.outlinePath_+=this.info_.outputConnection.shape.pathRightDown(this.info_.outputConnection.height)}drawLeftDynamicConnection_(){if(!this.info_.outputConnection)throw Error(\"Cannot draw the output connection of a block that doesn't have one\");this.positionOutputConnection_();this.outlinePath_+=this.info_.outputConnection.shape.pathUp(this.info_.outputConnection.height);this.outlinePath_+=\"z\"}drawFlatTop_(){const a=this.info_.topRow;this.positionPreviousConnection_();this.outlinePath_+=moveBy$$module$build$src$core$utils$svg_paths(a.xPos,\nthis.info_.startY);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",a.width)}drawFlatBottom_(){const a=this.info_.bottomRow;this.positionNextConnection_();this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.baseline);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-a.width)}drawInlineInput_(a){this.positionInlineInputConnection_(a);const b=a.input.name;a.connectedBlock||this.info_.isInsertionMarker||(a=moveTo$$module$build$src$core$utils$svg_paths(a.xPos+\na.connectionWidth,a.centerline-a.height/2)+this.getInlineInputPath(a),this.block_.pathObject.setOutlinePath(b,a))}getInlineInputPath(a){const b=a.width-a.connectionWidth*2,c=a.height;return lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",b)+a.shape.pathRightDown(c)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-b)+a.shape.pathUp(c)+\"z\"}drawStatementInput_(a){var b=a.getLastInput();const c=b.xPos+b.notchOffset+b.shape.width,d=this.constants_.INSIDE_CORNERS,e=b.shape.pathRight+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",\n-(b.notchOffset-d.width))+d.pathTop,f=a.height-2*d.height;b=d.pathBottom+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",b.notchOffset-d.width)+(b.connectedBottomNextConnection?\"\":b.shape.pathLeft);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",c)+e+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",f)+b+lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",a.xPos+a.width);this.positionStatementInputConnection_(a)}drawConnectionHighlightPath(a){const b=a.connectionModel;\nif(b.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE&&!a.isDynamicShape)return super.drawConnectionHighlightPath(a);a=b.type===ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE?moveTo$$module$build$src$core$utils$svg_paths(a.connectionWidth,-a.height/2)+this.getInlineInputPath(a):moveTo$$module$build$src$core$utils$svg_paths(a.width,\n-a.height/2)+a.shape.pathDown(a.height);const c=b.getSourceBlock();let d,e;return(e=(d=c.pathObject).addConnectionHighlight)==null?void 0:e.call(d,b,a,b.getOffsetInBlock(),c.RTL)}},module$build$src$core$renderers$zelos$drawer={};module$build$src$core$renderers$zelos$drawer.Drawer=Drawer$$module$build$src$core$renderers$zelos$drawer;var FieldImage$$module$build$src$core$field_image=class extends Field$$module$build$src$core$field{constructor(a,b,c,d,e,f,g){super(Field$$module$build$src$core$field.SKIP_SETUP);this.imageElement=this.clickHandler=null;this.flipRtl=this.isDirty_=this.EDITABLE=!1;this.altText=\"\";c=Number(replaceMessageReferences$$module$build$src$core$utils$parsing(c));b=Number(replaceMessageReferences$$module$build$src$core$utils$parsing(b));if(isNaN(c)||isNaN(b))throw Error(\"Height and width values of an image field must cast to numbers.\");\nif(c<=0||b<=0)throw Error(\"Height and width values of an image field must be greater than 0.\");this.size_=new Size$$module$build$src$core$utils$size(b,c+FieldImage$$module$build$src$core$field_image.Y_PADDING);this.imageHeight=c;typeof e===\"function\"&&(this.clickHandler=e);a!==Field$$module$build$src$core$field.SKIP_SETUP&&(g?this.configure_(g):(this.flipRtl=!!f,this.altText=replaceMessageReferences$$module$build$src$core$utils$parsing(d)||\"\"),this.setValue(replaceMessageReferences$$module$build$src$core$utils$parsing(a)))}configure_(a){super.configure_(a);\na.flipRtl&&(this.flipRtl=a.flipRtl);a.alt&&(this.altText=replaceMessageReferences$$module$build$src$core$utils$parsing(a.alt))}initView(){this.imageElement=createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.IMAGE,{height:this.imageHeight+\"px\",width:this.size_.width+\"px\",alt:this.altText},this.fieldGroup_);this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.value_);this.fieldGroup_&&addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\n\"blocklyImageField\");this.clickHandler&&(this.imageElement.style.cursor=\"pointer\")}updateSize_(){}doClassValidation_(a){return typeof a!==\"string\"?null:a}doValueUpdate_(a){this.value_=a;this.imageElement&&this.imageElement.setAttributeNS(XLINK_NS$$module$build$src$core$utils$dom,\"xlink:href\",this.value_)}getFlipRtl(){return this.flipRtl}setAlt(a){a!==this.altText&&(this.altText=a||\"\",this.imageElement&&this.imageElement.setAttribute(\"alt\",this.altText))}isClickable(){return super.isClickable()&&!!this.clickHandler}showEditor_(){this.clickHandler&&\nthis.clickHandler(this)}setOnClickHandler(a){this.clickHandler=a}getText_(){return this.altText}static fromJson(a){if(!a.src||!a.width||!a.height)throw Error(\"src, width, and height values for an image field arerequired. The width and height must be non-zero.\");return new this(a.src,a.width,a.height,void 0,void 0,void 0,a)}};FieldImage$$module$build$src$core$field_image.Y_PADDING=1;register$$module$build$src$core$field_registry(\"field_image\",FieldImage$$module$build$src$core$field_image);\nFieldImage$$module$build$src$core$field_image.prototype.DEFAULT_VALUE=\"\";var module$build$src$core$field_image={};module$build$src$core$field_image.FieldImage=FieldImage$$module$build$src$core$field_image;var MINIMUM_WIDTH$$module$build$src$core$field_input=14,FieldInput$$module$build$src$core$field_input=class extends Field$$module$build$src$core$field{set size_(a){super.size_=a}get size_(){const a=super.size_;a.width{a!==null&&this.setValue(this.getValueFromEditorText_(a));this.onFinishEditing_(this.value_)})}showInlineEditor(a,b){const c=this.getSourceBlock();if(!c)throw new UnattachedFieldError$$module$build$src$core$field;show$$module$build$src$core$widgetdiv(this,c.RTL,this.widgetDispose_.bind(this),this.workspace_,b);this.htmlInput_=this.widgetCreate_();this.isBeingEdited_=!0;this.valueWhenEditorWasOpened_=this.value_;a||(this.htmlInput_.focus({preventScroll:!0}),this.htmlInput_.select())}widgetCreate_(){var a=\nthis.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;$.setGroup$$module$build$src$core$events$utils(!0);const b=getDiv$$module$build$src$core$widgetdiv();var c=this.getClickTarget_();if(!c)throw Error(\"A click target has not been set.\");addClass$$module$build$src$core$utils$dom(c,\"blocklyEditing\");c=document.createElement(\"input\");c.className=\"blocklyHtmlInput\";c.setAttribute(\"spellcheck\",this.spellcheck_);const d=this.workspace_.getAbsoluteScale();var e=this.getConstants().FIELD_TEXT_FONTSIZE*\nd+\"pt\";b.style.fontSize=e;c.style.fontSize=e;e=FieldInput$$module$build$src$core$field_input.BORDERRADIUS*d+\"px\";this.isFullBlockField()&&(e=this.getScaledBBox(),e=(e.bottom-e.top)/2+\"px\",a=a.getParent()?a.getParent().getColourTertiary():this.sourceBlock_.getColourTertiary(),c.style.border=1*d+\"px solid \"+a,b.style.borderRadius=e,b.style.transition=\"box-shadow 0.25s ease 0s\",this.getConstants().FIELD_TEXTINPUT_BOX_SHADOW&&(b.style.boxShadow=\"rgba(255, 255, 255, 0.3) 0 0 0 \"+4*d+\"px\"));c.style.borderRadius=\ne;b.appendChild(c);c.value=c.defaultValue=this.getEditorText_(this.value_);c.setAttribute(\"data-untyped-default-value\",String(this.value_));this.resizeEditor_();this.bindInputEvents_(c);return c}widgetDispose_(){this.isBeingEdited_=!1;this.isTextValid_=!0;this.forceRerender();this.onFinishEditing_(this.value_);this.sourceBlock_&&isEnabled$$module$build$src$core$events$utils()&&this.valueWhenEditorWasOpened_!==null&&this.valueWhenEditorWasOpened_!==this.value_&&(fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_CHANGE))(this.sourceBlock_,\n\"field\",this.name||null,this.valueWhenEditorWasOpened_,this.value_)),this.valueWhenEditorWasOpened_=null);$.setGroup$$module$build$src$core$events$utils(!1);this.unbindInputEvents_();var a=getDiv$$module$build$src$core$widgetdiv().style;a.width=\"auto\";a.height=\"auto\";a.fontSize=\"\";a.transition=\"\";a.boxShadow=\"\";this.htmlInput_=null;a=this.getClickTarget_();if(!a)throw Error(\"A click target has not been set.\");removeClass$$module$build$src$core$utils$dom(a,\"blocklyEditing\")}onFinishEditing_(a){}bindInputEvents_(a){this.onKeyDownWrapper=\nconditionalBind$$module$build$src$core$browser_events(a,\"keydown\",this,this.onHtmlInputKeyDown_);this.onInputWrapper=conditionalBind$$module$build$src$core$browser_events(a,\"input\",this,this.onHtmlInputChange)}unbindInputEvents_(){this.onKeyDownWrapper&&(unbind$$module$build$src$core$browser_events(this.onKeyDownWrapper),this.onKeyDownWrapper=null);this.onInputWrapper&&(unbind$$module$build$src$core$browser_events(this.onInputWrapper),this.onInputWrapper=null)}onHtmlInputKeyDown_(a){if(a.key===\"Enter\")hideIfOwner$$module$build$src$core$widgetdiv(this),\nhideWithoutAnimation$$module$build$src$core$dropdowndiv();else if(a.key===\"Escape\")this.setValue(this.htmlInput_.getAttribute(\"data-untyped-default-value\"),!1),hideIfOwner$$module$build$src$core$widgetdiv(this),hideWithoutAnimation$$module$build$src$core$dropdowndiv();else if(a.key===\"Tab\"){a.preventDefault();var b,c=(b=this.workspace_)==null?void 0:b.getCursor();b=d=>(d instanceof FieldInput$$module$build$src$core$field_input||d instanceof BlockSvg$$module$build$src$core$block_svg&&d.isSimpleReporter())&&\nd!==this.getSourceBlock();a=a.shiftKey?c==null?void 0:c.getPreviousNode(this,b,!1):c==null?void 0:c.getNextNode(this,b,!1);a=a instanceof BlockSvg$$module$build$src$core$block_svg&&a.isSimpleReporter()?a.getFields().next().value:a;a instanceof FieldInput$$module$build$src$core$field_input&&(hideIfOwner$$module$build$src$core$widgetdiv(this),hideWithoutAnimation$$module$build$src$core$dropdowndiv(),c=a.getSourceBlock(),a.isFullBlockField()&&c&&c instanceof BlockSvg$$module$build$src$core$block_svg?\n$.getFocusManager$$module$build$src$core$focus_manager().focusNode(c):$.getFocusManager$$module$build$src$core$focus_manager().focusNode(a),a.showEditor())}}onHtmlInputChange(a){a=this.value_;this.setValue(this.getValueFromEditorText_(this.htmlInput_.value),!1);this.sourceBlock_&&isEnabled$$module$build$src$core$events$utils()&&this.value_!==a&&fire$$module$build$src$core$events$utils(new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.BLOCK_FIELD_INTERMEDIATE_CHANGE))(this.sourceBlock_,\nthis.name||null,a,this.value_))}setEditorValue_(a,b=!0){this.isDirty_=!0;this.isBeingEdited_&&(this.htmlInput_.value=this.getEditorText_(a));this.setValue(a,b)}resizeEditor_(){finishQueuedRenders$$module$build$src$core$render_management().then(()=>{const a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;const b=getDiv$$module$build$src$core$widgetdiv(),c=this.getScaledBBox();b.style.width=c.right-c.left+\"px\";b.style.height=c.bottom-c.top+\"px\";const d=c.top;\nb.style.left=`${a.RTL?c.right-b.offsetWidth:c.left}px`;b.style.top=`${d}px`})}repositionForWindowResize(){let a;const b=(a=this.getSourceBlock())==null?void 0:a.getRootBlock();if(!(b instanceof BlockSvg$$module$build$src$core$block_svg))return!1;bumpObjectIntoBounds$$module$build$src$core$bump_objects(this.workspace_,this.workspace_.getMetricsManager().getViewMetrics(!0),b)||this.resizeEditor_();return!0}positionTextElement_(a,b){const c=a*2+b;super.positionTextElement_(a+(c0;this.rightSide=this.outputConnection?new RightConnectionShape$$module$build$src$core$renderers$zelos$measurables$row_elements(this.constants_):null;this.rightAlignedDummyInputs=new WeakMap}getRenderer(){return this.renderer_}measure(){this.createRows_();this.addElemSpacing_();this.addRowSpacing_();this.adjustXPosition_();this.computeBounds_();this.alignRowElements_();this.finalize_()}shouldStartNewRow_(a,b){return b?b instanceof EndRowInput$$module$build$src$core$inputs$end_row_input||\na instanceof StatementInput$$module$build$src$core$inputs$statement_input||b instanceof StatementInput$$module$build$src$core$inputs$statement_input?!0:a instanceof $.ValueInput$$module$build$src$core$inputs$value_input||a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input?!this.isInline||this.isMultiRow:!1:!1}getDesiredRowWidth_(a){return a.hasStatement?this.width-this.startX-(this.constants_.INSIDE_CORNERS.rightWidth||\n0):super.getDesiredRowWidth_(a)}getInRowSpacing_(a,b){return a&&b||!this.outputConnection||!this.outputConnection.isDynamicShape||this.hasStatementInput||this.bottomRow.hasNextConnection?!a&&b&&Types$$module$build$src$core$renderers$measurables$types.isStatementInput(b)?this.constants_.STATEMENT_INPUT_PADDING_LEFT:a&&Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(a)&&b&&(Types$$module$build$src$core$renderers$measurables$types.isPreviousConnection(b)||Types$$module$build$src$core$renderers$measurables$types.isNextConnection(b))?\nb.notchOffset-this.constants_.CORNER_RADIUS:a&&Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(a)&&b&&Types$$module$build$src$core$renderers$measurables$types.isHat(b)||a&&Types$$module$build$src$core$renderers$measurables$types.isField(a)&&a.width===0?this.constants_.NO_PADDING:this.constants_.MEDIUM_PADDING:this.constants_.NO_PADDING}getSpacerRowHeight_(a,b){if(Types$$module$build$src$core$renderers$measurables$types.isTopRow(a)&&Types$$module$build$src$core$renderers$measurables$types.isBottomRow(b))return this.constants_.EMPTY_BLOCK_SPACER_HEIGHT;\nconst c=Types$$module$build$src$core$renderers$measurables$types.isInputRow(a)&&a.hasStatement,d=Types$$module$build$src$core$renderers$measurables$types.isInputRow(b)&&b.hasStatement;return d||c?(a=Math.max(this.constants_.NOTCH_HEIGHT,this.constants_.INSIDE_CORNERS.rightHeight||0),d&&c?Math.max(a,this.constants_.DUMMY_INPUT_MIN_HEIGHT):a):Types$$module$build$src$core$renderers$measurables$types.isTopRow(a)?a.hasPreviousConnection||this.outputConnection&&!this.hasStatementInput?this.constants_.NO_PADDING:\nMath.abs(this.constants_.NOTCH_HEIGHT-this.constants_.CORNER_RADIUS):Types$$module$build$src$core$renderers$measurables$types.isBottomRow(b)?this.outputConnection?!b.hasNextConnection&&this.hasStatementInput?Math.abs(this.constants_.NOTCH_HEIGHT-this.constants_.CORNER_RADIUS):this.constants_.NO_PADDING:Math.max(this.topRow.minHeight,Math.max(this.constants_.NOTCH_HEIGHT,this.constants_.CORNER_RADIUS))-this.constants_.CORNER_RADIUS:this.constants_.MEDIUM_PADDING}getSpacerRowWidth_(a,b){const c=this.width-\nthis.startX;return Types$$module$build$src$core$renderers$measurables$types.isInputRow(a)&&a.hasStatement||Types$$module$build$src$core$renderers$measurables$types.isInputRow(b)&&b.hasStatement?Math.max(c,this.constants_.STATEMENT_INPUT_SPACER_MIN_WIDTH):c}getElemCenterline_(a,b){if(a.hasStatement&&!Types$$module$build$src$core$renderers$measurables$types.isSpacer(b)&&!Types$$module$build$src$core$renderers$measurables$types.isStatementInput(b))return a.yPos+this.constants_.EMPTY_STATEMENT_INPUT_HEIGHT/\n2;if(Types$$module$build$src$core$renderers$measurables$types.isInlineInput(b)){const c=b.connectedBlock;if(c&&c.outputConnection&&c.nextConnection)return a.yPos+c.height/2}return super.getElemCenterline_(a,b)}addInput_(a,b){if((a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input)&&b.hasDummyInput&&b.align===$.Align$$module$build$src$core$inputs$align.LEFT&&a.align===$.Align$$module$build$src$core$inputs$align.RIGHT)this.rightAlignedDummyInputs.set(b,\na);else if(a instanceof StatementInput$$module$build$src$core$inputs$statement_input){b.elements.push(new StatementInput$$module$build$src$core$renderers$zelos$measurables$inputs(this.constants_,a));b.hasStatement=!0;b.align===null&&(b.align=a.align);return}super.addInput_(a,b)}addAlignmentPadding_(a,b){if(this.rightAlignedDummyInputs.get(a)){let c;for(let d=0;d=this.rows.length-1?!!this.bottomRow.hasNextConnection:!!d.precedesStatement;if(Types$$module$build$src$core$renderers$measurables$types.isInputRow(f)&&\nf.hasStatement){f.measure();let g,h;b=f.width-((h=(g=f.getLastInput())==null?void 0:g.width)!=null?h:0)+a}else if(c&&(e===2||d)&&Types$$module$build$src$core$renderers$measurables$types.isInputRow(f)&&!f.hasStatement){d=f.xPos;c=null;for(let g=0;g1)switch(c){case d.SHAPES.ROUND:return c=this.constants_.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH,c=this.height/2>c?c:this.height/2,b-c*(1-Math.sin(Math.acos((c-this.constants_.SMALL_PADDING)/c)));default:return 0}if(Types$$module$build$src$core$renderers$measurables$types.isInlineInput(a)){const e=a.connectedBlock;a=\ne?e.pathObject.outputShapeType:a.shape.type;return a==null||e&&e.outputConnection&&(e.statementInputCount||e.nextConnection)||c===d.SHAPES.HEXAGONAL&&c!==a?0:b-this.constants_.SHAPE_IN_SHAPE_PADDING[c][a]}return Types$$module$build$src$core$renderers$measurables$types.isField(a)?c===d.SHAPES.ROUND&&a.field instanceof $.FieldTextInput$$module$build$src$core$field_textinput?b-2.75*d.GRID_UNIT:b-this.constants_.SHAPE_IN_SHAPE_PADDING[c][0]:Types$$module$build$src$core$renderers$measurables$types.isIcon(a)?\nthis.constants_.SMALL_PADDING:0}finalizeVerticalAlignment_(){if(!this.outputConnection)for(let d=2;d=this.rows.length-1?!!this.bottomRow.hasNextConnection:!!g.precedesStatement;if(a?this.topRow.hasPreviousConnection:e.followsStatement){var c=f.elements[1];c=f.elements.length===3&&c instanceof Field$$module$build$src$core$renderers$measurables$field&&(c.field instanceof FieldLabel$$module$build$src$core$field_label||\nc.field instanceof FieldImage$$module$build$src$core$field_image);if(!a&&c)e.height-=this.constants_.SMALL_PADDING,g.height-=this.constants_.SMALL_PADDING,f.height-=this.constants_.MEDIUM_PADDING;else if(!a&&!b)e.height+=this.constants_.SMALL_PADDING;else if(b){a=!1;for(b=0;b=40){a=!0;break}a&&\n(e.height-=this.constants_.SMALL_PADDING,g.height-=this.constants_.SMALL_PADDING)}}}}finalize_(){this.finalizeOutputConnection_();this.finalizeHorizontalAlignment_();this.finalizeVerticalAlignment_();super.finalize_();this.rightSide&&(this.widthWithChildren+=this.rightSide.width)}},module$build$src$core$renderers$zelos$info={};module$build$src$core$renderers$zelos$info.RenderInfo=RenderInfo$$module$build$src$core$renderers$zelos$info;var PathObject$$module$build$src$core$renderers$zelos$path_object=class extends PathObject$$module$build$src$core$renderers$common$path_object{constructor(a,b,c){super(a,b,c);this.svgPathSelected=null;this.outlines=new Map;this.remainingOutlines=new Set;this.outputShapeType=null;this.constants=c}setPath(a){super.setPath(a);this.svgPathSelected&&this.svgPathSelected.setAttribute(\"d\",a)}applyColour(a){super.applyColour(a);const b=a.getParent();a.isShadow()&&b&&this.svgPath.setAttribute(\"stroke\",b.getColourTertiary());\nfor(const c of this.outlines.values())c.setAttribute(\"fill\",this.style.colourTertiary)}flipRTL(){super.flipRTL();for(const a of this.outlines.values())a.setAttribute(\"transform\",\"scale(-1 1)\")}updateSelected(a){this.setClass_(\"blocklySelected\",a);a?this.svgPathSelected||(this.svgPathSelected=this.svgPath.cloneNode(!0),this.svgPathSelected.classList.add(\"blocklyPathSelected\"),removeClass$$module$build$src$core$utils$dom(this.svgPathSelected,FocusManager$$module$build$src$core$focus_manager.ACTIVE_FOCUS_NODE_CSS_CLASS_NAME),\nremoveClass$$module$build$src$core$utils$dom(this.svgPathSelected,FocusManager$$module$build$src$core$focus_manager.PASSIVE_FOCUS_NODE_CSS_CLASS_NAME),this.svgPathSelected.removeAttribute(\"tabindex\"),this.svgPathSelected.removeAttribute(\"id\"),this.svgRoot.appendChild(this.svgPathSelected)):this.svgPathSelected&&(this.svgRoot.removeChild(this.svgPathSelected),this.svgPathSelected=null)}updateReplacementFade(a){this.setClass_(\"blocklyReplaceable\",a)}updateShapeForInputHighlight(a,b){a=a.getParentInput().name;\n(a=this.getOutlinePath(a))&&(b?a.setAttribute(\"filter\",\"url(#\"+this.constants.replacementGlowFilterId+\")\"):a.removeAttribute(\"filter\"))}beginDrawing(){this.remainingOutlines.clear();for(const a of this.outlines.keys())this.remainingOutlines.add(a)}endDrawing(){if(this.remainingOutlines.size)for(const a of this.remainingOutlines)this.removeOutlinePath(a);this.remainingOutlines.clear()}setOutlinePath(a,b){a=this.getOutlinePath(a);a.setAttribute(\"d\",b);a.setAttribute(\"fill\",this.style.colourTertiary)}getOutlinePath(a){this.outlines.has(a)||\nthis.outlines.set(a,createSvgElement$$module$build$src$core$utils$dom(Svg$$module$build$src$core$utils$svg.PATH,{\"class\":\"blocklyOutlinePath\",d:\"\"},this.svgRoot));this.remainingOutlines.delete(a);return this.outlines.get(a)}removeOutlinePath(a){let b,c;(b=this.outlines.get(a))==null||(c=b.parentNode)==null||c.removeChild(this.outlines.get(a));this.outlines.delete(a)}},module$build$src$core$renderers$zelos$path_object={};module$build$src$core$renderers$zelos$path_object.PathObject=PathObject$$module$build$src$core$renderers$zelos$path_object;var Renderer$$module$build$src$core$renderers$zelos$renderer=class extends Renderer$$module$build$src$core$renderers$common$renderer{constructor(a){super(a)}makeConstants_(){return new ConstantProvider$$module$build$src$core$renderers$zelos$constants}makeRenderInfo_(a){return new RenderInfo$$module$build$src$core$renderers$zelos$info(this,a)}makeDrawer_(a,b){return new Drawer$$module$build$src$core$renderers$zelos$drawer(a,b)}makePathObject(a,b){return new PathObject$$module$build$src$core$renderers$zelos$path_object(a,\nb,this.getConstants())}getConstants(){return this.constants_}};register$$module$build$src$core$renderers$common$block_rendering(\"zelos\",Renderer$$module$build$src$core$renderers$zelos$renderer);var module$build$src$core$renderers$zelos$renderer={};module$build$src$core$renderers$zelos$renderer.Renderer=Renderer$$module$build$src$core$renderers$zelos$renderer;var InsertionMarkerPreviewer$$module$build$src$core$insertion_marker_previewer=class{constructor(a){this.staticConn=this.draggedConn=this.markerConn=this.fadedBlock=null;this.workspace=a.workspace}previewReplacement(a,b,c){$.disable$$module$build$src$core$events$utils();try{this.hidePreview(),this.fadedBlock=c,c.fadeForReplacement(!0),this.workspace.getRenderer().shouldHighlightConnection(b)&&(b.highlight(),this.staticConn=b)}finally{$.enable$$module$build$src$core$events$utils()}}previewConnection(a,\nb){if(a!==this.draggedConn||b!==this.staticConn){$.disable$$module$build$src$core$events$utils();try{this.hidePreview(),this.shouldUseMarkerPreview(a,b)&&(this.markerConn=this.previewMarker(a,b)),this.workspace.getRenderer().shouldHighlightConnection(b)&&b.highlight(),this.draggedConn=a,this.staticConn=b}finally{$.enable$$module$build$src$core$events$utils()}}}shouldUseMarkerPreview(a,b){return b.type===ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT||b.type===ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT||\n!(this.workspace.getRenderer()instanceof Renderer$$module$build$src$core$renderers$zelos$renderer)}previewMarker(a,b){const c=a.getSourceBlock(),d=this.createInsertionMarker(c),e=this.getMatchingConnection(c,d,a);if(!e)return null;d.queueRender();triggerQueuedRenders$$module$build$src$core$render_management();e.connect(b);const f={x:b.x-e.x,y:b.y-e.y},g=e.getOffsetInBlock().clone();finishQueuedRenders$$module$build$src$core$render_management().then(()=>{if(!d.isDeadOrDying()){$.disable$$module$build$src$core$events$utils();\ntry{d==null||d.positionNearConnection(e,f,g),d==null||d.getSvgRoot().setAttribute(\"visibility\",\"visible\")}finally{$.enable$$module$build$src$core$events$utils()}}});return e}serializeBlockToInsertionMarker(a){const b=save$$module$build$src$core$serialization$blocks(a,{addCoordinates:!1,addInputBlocks:!1,addNextBlocks:!1,doFullSerialization:!1});if(!b)throw Error(`Failed to serialize source block. ${a.toDevString()}`);return b}createInsertionMarker(a){a=this.serializeBlockToInsertionMarker(a);a=append$$module$build$src$core$serialization$blocks(a,\nthis.workspace);for(const b of a.getDescendants(!1))b.setInsertionMarker(!0);a.initSvg();a.getSvgRoot().setAttribute(\"visibility\",\"hidden\");return a}getMatchingConnection(a,b,c){a=a.getConnections_(!0);b=b.getConnections_(!0);if(a.length!==b.length)return null;for(let d=0;d-b||a<-180+b||a>180-b?!0:!1}getClientRect(){if(!this.svgGroup_||this.autoClose||!this.isVisible())return null;const a=this.svgGroup_.getBoundingClientRect(),b=a.left;return this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.LEFT?new Rect$$module$build$src$core$utils$rect(-1E9,1E9,-1E9,b+a.width):new Rect$$module$build$src$core$utils$rect(-1E9,1E9,b,1E9)}reflowInternal_(){this.workspace_.scale=this.getFlyoutScale();\nlet a=this.getContents().reduce((b,c)=>Math.max(b,c.getElement().getBoundingRectangle().getWidth()),0);a+=this.MARGIN*1.5+this.tabWidth_;a*=this.workspace_.scale;a+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;if(this.getWidth()!==a){if(this.RTL)for(const b of this.getContents()){const c=b.getElement().getBoundingRectangle().left,d=a/this.workspace_.scale-b.getElement().getBoundingRectangle().getWidth()-this.MARGIN-this.tabWidth_;b.getElement().moveBy(d-c,0)}this.targetWorkspace.scrollbar||\nthis.autoClose||this.targetWorkspace.getFlyout()!==this||this.toolboxPosition_!==Position$$module$build$src$core$utils$toolbox.LEFT||this.targetWorkspace.translate(this.targetWorkspace.scrollX+a,this.targetWorkspace.scrollY);this.width_=a;this.position();this.targetWorkspace.resizeContents();this.targetWorkspace.recordDragTargets()}}};VerticalFlyout$$module$build$src$core$flyout_vertical.registryName=\"verticalFlyout\";\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_VERTICAL_TOOLBOX,DEFAULT$$module$build$src$core$registry,VerticalFlyout$$module$build$src$core$flyout_vertical);var module$build$src$core$flyout_vertical={};module$build$src$core$flyout_vertical.VerticalFlyout=VerticalFlyout$$module$build$src$core$flyout_vertical;var HorizontalFlyout$$module$build$src$core$flyout_horizontal=class extends Flyout$$module$build$src$core$flyout_base{constructor(a){super(a);this.horizontalLayout=!0}setMetrics_(a){if(this.isVisible()){var b=this.workspace_.getMetricsManager(),c=b.getScrollMetrics(),d=b.getViewMetrics();b=b.getAbsoluteMetrics();typeof a.x===\"number\"&&(this.workspace_.scrollX=-(c.left+(c.width-d.width)*a.x));this.workspace_.translate(this.workspace_.scrollX+b.left,this.workspace_.scrollY+b.top)}}getX(){return 0}getY(){if(!this.isVisible())return 0;\nvar a=this.targetWorkspace.getMetricsManager();const b=a.getAbsoluteMetrics(),c=a.getViewMetrics();a=a.getToolboxMetrics();const d=this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.TOP;return this.targetWorkspace.toolboxPosition===this.toolboxPosition_?this.targetWorkspace.getToolbox()?d?a.height:c.height-this.getHeight():d?0:c.height:d?0:c.height+b.top-this.getHeight()}position(){if(this.isVisible()&&this.targetWorkspace.isVisible()){var a=this.targetWorkspace.getMetricsManager().getViewMetrics();\nthis.width_=a.width;a=a.width-2*this.CORNER_RADIUS;var b=this.getHeight()-this.CORNER_RADIUS;this.setBackgroundPath(a,b);a=this.getX();b=this.getY();this.positionAt_(this.getWidth(),this.getHeight(),a,b)}}setBackgroundPath(a,b){const c=this.toolboxPosition_===Position$$module$build$src$core$utils$toolbox.TOP,d=[\"M 0,\"+(c?0:this.CORNER_RADIUS)];c?(d.push(\"h\",a+2*this.CORNER_RADIUS),d.push(\"v\",b),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,-this.CORNER_RADIUS,this.CORNER_RADIUS),d.push(\"h\",\n-a),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,-this.CORNER_RADIUS,-this.CORNER_RADIUS)):(d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,this.CORNER_RADIUS,-this.CORNER_RADIUS),d.push(\"h\",a),d.push(\"a\",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,1,this.CORNER_RADIUS,this.CORNER_RADIUS),d.push(\"v\",b),d.push(\"h\",-a-2*this.CORNER_RADIUS));d.push(\"z\");this.svgBackground_.setAttribute(\"d\",d.join(\" \"))}scrollToStart(){let a;(a=this.workspace_.scrollbar)==null||a.setX(this.RTL?Infinity:\n0)}wheel_(a){var b=getScrollDeltaPixels$$module$build$src$core$browser_events(a);if(b=b.x||b.y){const c=this.workspace_.getMetricsManager(),d=c.getScrollMetrics();b=c.getViewMetrics().left-d.left+b;let e;(e=this.workspace_.scrollbar)==null||e.setX(b);hideIfOwnerIsInWorkspace$$module$build$src$core$widgetdiv(this.workspace_);hideWithoutAnimation$$module$build$src$core$dropdowndiv()}a.preventDefault();a.stopPropagation()}layout_(a){this.workspace_.scale=this.targetWorkspace.scale;const b=this.MARGIN;\nlet c=b+this.tabWidth_;this.RTL&&(a=a.reverse());for(const d of a)a=d.getElement().getBoundingRectangle(),a=this.RTL?c+a.getWidth():c,d.getElement().moveBy(a,b),c+=d.getElement().getBoundingRectangle().getWidth()}isDragTowardWorkspace(a){a=Math.atan2(a.y,a.x)/Math.PI*180;const b=this.dragAngleRange_;return a<90+b&&a>90-b||a>-90-b&&a<-90+b?!0:!1}getClientRect(){if(!this.svgGroup_||this.autoClose||!this.isVisible())return null;const a=this.svgGroup_.getBoundingClientRect(),b=a.top;return this.toolboxPosition_===\nPosition$$module$build$src$core$utils$toolbox.TOP?new Rect$$module$build$src$core$utils$rect(-1E9,b+a.height,-1E9,1E9):new Rect$$module$build$src$core$utils$rect(b,1E9,-1E9,1E9)}reflowInternal_(){this.workspace_.scale=this.getFlyoutScale();let a=this.getContents().reduce((b,c)=>Math.max(b,c.getElement().getBoundingRectangle().getHeight()),0);a+=this.MARGIN*1.5;a*=this.workspace_.scale;a+=Scrollbar$$module$build$src$core$scrollbar.scrollbarThickness;this.getHeight()!==a&&(this.targetWorkspace.scrollbar||\nthis.autoClose||this.targetWorkspace.getFlyout()!==this||this.toolboxPosition_!==Position$$module$build$src$core$utils$toolbox.TOP||this.targetWorkspace.translate(this.targetWorkspace.scrollX,this.targetWorkspace.scrollY+a),this.height_=a,this.position(),this.targetWorkspace.resizeContents(),this.targetWorkspace.recordDragTargets())}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUTS_HORIZONTAL_TOOLBOX,DEFAULT$$module$build$src$core$registry,HorizontalFlyout$$module$build$src$core$flyout_horizontal);\nvar module$build$src$core$flyout_horizontal={};module$build$src$core$flyout_horizontal.HorizontalFlyout=HorizontalFlyout$$module$build$src$core$flyout_horizontal;var FieldVariable$$module$build$src$core$field_variable=class extends FieldDropdown$$module$build$src$core$field_dropdown{constructor(a,b,c,d,e){super(Field$$module$build$src$core$field.SKIP_SETUP);this.defaultType=\"\";this.variableTypes=[];this.variable=null;this.SERIALIZABLE=!0;this.menuGenerator_=FieldVariable$$module$build$src$core$field_variable.dropdownCreate;this.defaultVariableName=typeof a===\"string\"?a:\"\";this.size_=new Size$$module$build$src$core$utils$size(0,0);a!==Field$$module$build$src$core$field.SKIP_SETUP&&\n(e?this.configure_(e):this.setTypes(c,d),b&&this.setValidator(b))}configure_(a){super.configure_(a);this.setTypes(a.variableTypes,a.defaultType)}initModel(){var a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;this.variable||(a=$.getOrCreateVariablePackage$$module$build$src$core$variables(a.workspace,null,this.defaultVariableName,this.defaultType),this.doValueUpdate_(a.getId()))}initView(){super.initView();addClass$$module$build$src$core$utils$dom(this.fieldGroup_,\n\"blocklyVariableField\")}shouldAddBorderRect_(){const a=this.getSourceBlock();if(!a)throw new UnattachedFieldError$$module$build$src$core$field;return super.shouldAddBorderRect_()&&(!this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW||a.type!==\"variables_get\")}fromXml(a){var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;const c=a.getAttribute(\"id\"),d=a.textContent,e=a.getAttribute(\"variabletype\")||a.getAttribute(\"variableType\")||\"\";b=$.getOrCreateVariablePackage$$module$build$src$core$variables(b.workspace,\nc,d,e);if(e!==null&&e!==b.getType())throw Error(\"Serialized variable type with id '\"+b.getId()+\"' had type \"+b.getType()+\", and does not match variable field that references it: \"+domToText$$module$build$src$core$xml(a)+\".\");this.setValue(b.getId())}toXml(a){this.initModel();a.id=this.variable.getId();a.textContent=this.variable.getName();this.variable.getType()&&a.setAttribute(\"variabletype\",this.variable.getType());return a}saveState(a){var b=this.saveLegacyState(FieldVariable$$module$build$src$core$field_variable);\nif(b!==null)return b;this.initModel();b={id:this.variable.getId()};a&&(b.name=this.variable.getName(),b.type=this.variable.getType());return b}loadState(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.loadLegacyState(FieldVariable$$module$build$src$core$field_variable,a)||(a=$.getOrCreateVariablePackage$$module$build$src$core$variables(b.workspace,a.id||null,a.name,a.type||\"\"),this.setValue(a.getId()))}setSourceBlock(a){if(a.isShadow())throw Error(\"Variable fields are not allowed to exist on shadow blocks.\");\nsuper.setSourceBlock(a)}getValue(){return this.variable?this.variable.getId():null}getText(){return this.variable?this.variable.getName():\"\"}getVariable(){return this.variable}getDefaultType(){return this.defaultType}getValidator(){return this.variable?this.validator_:null}doClassValidation_(a){if(a===null)return null;var b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;b=$.getVariable$$module$build$src$core$variables(b.workspace,a);if(!b)return console.warn(\"Variable id doesn't point to a real variable! ID was \"+\na),null;b=b.getType();return this.typeIsAllowed(b)?a:(console.warn(\"Variable type doesn't match this field! Type was \"+b),null)}doValueUpdate_(a){const b=this.getSourceBlock();if(!b)throw new UnattachedFieldError$$module$build$src$core$field;this.variable=$.getVariable$$module$build$src$core$variables(b.workspace,a);super.doValueUpdate_(a)}typeIsAllowed(a){const b=this.getVariableTypes();if(!b)return!0;for(let c=0;c-Infinity&&(a.min=`${this.min_}`,setState$$module$build$src$core$utils$aria(a,State$$module$build$src$core$utils$aria.VALUEMIN,this.min_));this.max_c.isInFlyout=!0);this.addBlockListeners(a);return new FlyoutItem$$module$build$src$core$flyout_item(a,BLOCK_TYPE$$module$build$src$core$block_flyout_inflater)}createBlock(a,b){a.blockxml?(a=typeof a.blockxml===\"string\"?$.textToDom$$module$build$src$core$utils$xml(a.blockxml):a.blockxml,b=domToBlockInternal$$module$build$src$core$xml(a,b)):(a.enabled===void 0&&(a.enabled=a.disabled!==\"true\"&&a.disabled!==!0),a.disabledReasons===\nvoid 0&&a.enabled===!1&&(a.disabledReasons=[MANUALLY_DISABLED$$module$build$src$core$constants]),\"x\"in a&&delete a.x,\"y\"in a&&delete a.y,b=appendInternal$$module$build$src$core$serialization$blocks(a,b));return b}gapForItem(a,b){let c;a.gap?c=parseInt(String(a.gap)):a.blockxml&&(a=typeof a.blockxml===\"string\"?$.textToDom$$module$build$src$core$utils$xml(a.blockxml):a.blockxml,c=parseInt(a.getAttribute(\"gap\")));return!c||isNaN(c)?b:c}disposeItem(a){a=a.getElement();a instanceof BlockSvg$$module$build$src$core$block_svg&&\n(this.removeListeners(a.id),a.dispose(!1,!1))}removeListeners(a){let b;((b=this.listeners.get(a))!=null?b:[]).forEach(c=>unbind$$module$build$src$core$browser_events(c));this.listeners.delete(a)}setFlyout(a){if(this.flyout!==a){if(this.flyout){let c;(c=this.flyout.targetWorkspace)==null||c.removeChangeListener(this.capacityWrapper)}this.flyout=a;var b;(b=this.flyout.targetWorkspace)==null||b.addChangeListener(this.capacityWrapper)}}updateStateBasedOnCapacity(a){let b,c;const d=(b=this.flyout)==null?\nvoid 0:(c=b.targetWorkspace)==null?void 0:c.isCapacityAvailable(getBlockTypeCounts$$module$build$src$core$common(a));for(;a;)a.setDisabledReason(!d,WORKSPACE_AT_BLOCK_CAPACITY_DISABLED_REASON$$module$build$src$core$block_flyout_inflater),a=a.getNextBlock()}addBlockListeners(a){const b=[];b.push(conditionalBind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointerdown\",a,c=>{let d,e;const f=(d=this.flyout)==null?void 0:(e=d.targetWorkspace)==null?void 0:e.getGesture(c);f&&this.flyout&&(f.setStartBlock(a),\nf.handleFlyoutStart(c,this.flyout))}));b.push(bind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointermove\",null,()=>{let c,d;((c=this.flyout)==null?0:(d=c.targetWorkspace)==null?0:d.isDragging())||a.addSelect()}));b.push(bind$$module$build$src$core$browser_events(a.getSvgRoot(),\"pointerleave\",null,()=>{let c,d;((c=this.flyout)==null?0:(d=c.targetWorkspace)==null?0:d.isDragging())||a.removeSelect()}));this.listeners.set(a.id,b)}filterFlyoutBasedOnCapacity(a){!this.flyout||a&&a.type!==EventType$$module$build$src$core$events$type.BLOCK_CREATE&&\na.type!==EventType$$module$build$src$core$events$type.BLOCK_DELETE||this.flyout.getWorkspace().getTopBlocks(!1).forEach(b=>{this.permanentlyDisabledBlocks.has(b)||this.updateStateBasedOnCapacity(b)})}getType(){return BLOCK_TYPE$$module$build$src$core$block_flyout_inflater}};register$$module$build$src$core$registry(Type$$module$build$src$core$registry.FLYOUT_INFLATER,BLOCK_TYPE$$module$build$src$core$block_flyout_inflater,BlockFlyoutInflater$$module$build$src$core$block_flyout_inflater);\nvar module$build$src$core$block_flyout_inflater={};module$build$src$core$block_flyout_inflater.BlockFlyoutInflater=BlockFlyoutInflater$$module$build$src$core$block_flyout_inflater;var module$build$src$core$interfaces$i_paster={};module$build$src$core$interfaces$i_paster.isPaster=isPaster$$module$build$src$core$interfaces$i_paster;var module$build$src$core$interfaces$i_rendered_element={};module$build$src$core$interfaces$i_rendered_element.isRenderedElement=isRenderedElement$$module$build$src$core$interfaces$i_rendered_element;var ConstantProvider$$module$build$src$core$renderers$geras$constants=class extends ConstantProvider$$module$build$src$core$renderers$common$constants{constructor(){super();this.FIELD_TEXT_BASELINE_CENTER=!1;this.DARK_PATH_OFFSET=1;this.MAX_BOTTOM_WIDTH=30;this.STATEMENT_BOTTOM_SPACER=-this.NOTCH_HEIGHT/2}getCSS_(a){return super.getCSS_(a).concat([`${a} .blocklyInsertionMarker>.blocklyPathLight,`,`${a} .blocklyInsertionMarker>.blocklyPathDark {`,`fill-opacity: ${this.INSERTION_MARKER_OPACITY};`,\"stroke: none;\",\n\"}\"])}},module$build$src$core$renderers$geras$constants={};module$build$src$core$renderers$geras$constants.ConstantProvider=ConstantProvider$$module$build$src$core$renderers$geras$constants;var Highlighter$$module$build$src$core$renderers$geras$highlighter=class{constructor(a){this.inlineSteps_=this.steps_=\"\";this.info_=a;this.RTL_=this.info_.RTL;a=a.getRenderer();this.constants_=a.getConstants();this.highlightConstants_=a.getHighlightConstants();this.highlightOffset=this.highlightConstants_.OFFSET;this.outsideCornerPaths_=this.highlightConstants_.OUTSIDE_CORNER;this.insideCornerPaths_=this.highlightConstants_.INSIDE_CORNER;this.puzzleTabPaths_=this.highlightConstants_.PUZZLE_TAB;this.notchPaths_=\nthis.highlightConstants_.NOTCH;this.startPaths_=this.highlightConstants_.START_HAT;this.jaggedTeethPaths_=this.highlightConstants_.JAGGED_TEETH}getPath(){return this.steps_+\"\\n\"+this.inlineSteps_}drawTopCorner(a){this.steps_+=moveBy$$module$build$src$core$utils$svg_paths(a.xPos,this.info_.startY);for(let b=0,c;c=a.elements[b];b++)Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(c)?this.steps_+=this.highlightConstants_.START_POINT:Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(c)?\nthis.steps_+=this.outsideCornerPaths_.topLeft(this.RTL_):Types$$module$build$src$core$renderers$measurables$types.isPreviousConnection(c)?this.steps_+=this.notchPaths_.pathLeft:Types$$module$build$src$core$renderers$measurables$types.isHat(c)?this.steps_+=this.startPaths_.path(this.RTL_):Types$$module$build$src$core$renderers$measurables$types.isSpacer(c)&&c.width!==0&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",c.xPos+c.width-this.highlightOffset));this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",\na.xPos+a.width-this.highlightOffset)}drawJaggedEdge_(a){this.info_.RTL&&(this.steps_+=this.jaggedTeethPaths_.pathLeft+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a.height-this.jaggedTeethPaths_.height-this.highlightOffset))}drawValueInput(a){const b=a.getLastInput();if(this.RTL_){const c=a.height-b.connectionHeight;this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos+b.width-this.highlightOffset,a.yPos)+this.puzzleTabPaths_.pathDown(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",\nc)}else this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos+b.width,a.yPos)+this.puzzleTabPaths_.pathDown(this.RTL_)}drawStatementInput(a){const b=a.getLastInput();if(b)if(this.RTL_){const c=a.height-2*this.insideCornerPaths_.height;this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos,a.yPos)+this.insideCornerPaths_.pathTop(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",c)+this.insideCornerPaths_.pathBottom(this.RTL_)+lineTo$$module$build$src$core$utils$svg_paths(a.width-\nb.xPos-this.insideCornerPaths_.width,0)}else this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(b.xPos,a.yPos+a.height)+this.insideCornerPaths_.pathBottom(this.RTL_)+lineTo$$module$build$src$core$utils$svg_paths(a.width-b.xPos-this.insideCornerPaths_.width,0)}drawRightSideRow(a){const b=a.xPos+a.width-this.highlightOffset;a instanceof SpacerRow$$module$build$src$core$renderers$measurables$spacer_row&&a.followsStatement&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",b));\nthis.RTL_&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",b),a.height>this.highlightOffset&&(this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.yPos+a.height-this.highlightOffset)))}drawBottomRow(a){if(this.RTL_)this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.baseline-this.highlightOffset);else{const b=this.info_.bottomRow.elements[0];Types$$module$build$src$core$renderers$measurables$types.isLeftSquareCorner(b)?this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(a.xPos+\nthis.highlightOffset,a.baseline-this.highlightOffset):Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(b)&&(this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(a.xPos,a.baseline),this.steps_+=this.outsideCornerPaths_.bottomLeft())}}drawLeft(){var a=this.info_.outputConnection;a&&(a=a.connectionOffsetY+a.height,this.RTL_?this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(this.info_.startX,a):(this.steps_+=moveTo$$module$build$src$core$utils$svg_paths(this.info_.startX+\nthis.highlightOffset,this.info_.bottomRow.baseline-this.highlightOffset),this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a)),this.steps_+=this.puzzleTabPaths_.pathUp(this.RTL_));this.RTL_||(a=this.info_.topRow,Types$$module$build$src$core$renderers$measurables$types.isLeftRoundedCorner(a.elements[0])?this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",this.outsideCornerPaths_.height):this.steps_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",a.capline+this.highlightOffset))}drawInlineInput(a){const b=\nthis.highlightOffset,c=a.xPos+a.connectionWidth;var d=a.centerline-a.height/2;const e=a.width-a.connectionWidth,f=d+b;this.RTL_?(d=a.connectionOffsetY-b,a=a.height-(a.connectionOffsetY+a.connectionHeight)+b,this.inlineSteps_+=moveTo$$module$build$src$core$utils$svg_paths(c-b,f)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",d)+this.puzzleTabPaths_.pathDown(this.RTL_)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",e)):this.inlineSteps_+=\nmoveTo$$module$build$src$core$utils$svg_paths(a.xPos+a.width+b,f)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",a.height)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",-e)+moveTo$$module$build$src$core$utils$svg_paths(c,d+a.connectionOffsetY)+this.puzzleTabPaths_.pathDown(this.RTL_)}},module$build$src$core$renderers$geras$highlighter={};module$build$src$core$renderers$geras$highlighter.Highlighter=Highlighter$$module$build$src$core$renderers$geras$highlighter;var Drawer$$module$build$src$core$renderers$geras$drawer=class extends Drawer$$module$build$src$core$renderers$common$drawer{constructor(a,b){super(a,b);this.highlighter_=new Highlighter$$module$build$src$core$renderers$geras$highlighter(b)}draw(){this.drawOutline_();this.drawInternals_();this.updateConnectionHighlights();const a=this.block_.pathObject;a.setPath(this.outlinePath_+\"\\n\"+this.inlinePath_);a.setHighlightPath(this.highlighter_.getPath());this.info_.RTL&&a.flipRTL();this.recordSizeOnBlock_()}drawTop_(){this.highlighter_.drawTopCorner(this.info_.topRow);\nthis.highlighter_.drawRightSideRow(this.info_.topRow);super.drawTop_()}drawJaggedEdge_(a){this.highlighter_.drawJaggedEdge_(a);super.drawJaggedEdge_(a)}drawValueInput_(a){this.highlighter_.drawValueInput(a);super.drawValueInput_(a)}drawStatementInput_(a){this.highlighter_.drawStatementInput(a);super.drawStatementInput_(a)}drawRightSideRow_(a){this.highlighter_.drawRightSideRow(a);this.outlinePath_+=lineOnAxis$$module$build$src$core$utils$svg_paths(\"H\",a.xPos+a.width)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"V\",\na.yPos+a.height)}drawBottom_(){this.highlighter_.drawBottomRow(this.info_.bottomRow);super.drawBottom_()}drawLeft_(){this.highlighter_.drawLeft();super.drawLeft_()}drawInlineInput_(a){this.highlighter_.drawInlineInput(a);super.drawInlineInput_(a)}positionInlineInputConnection_(a){const b=a.centerline-a.height/2;if(a.connectionModel){let c=a.xPos+a.connectionWidth+this.constants_.DARK_PATH_OFFSET;this.info_.RTL&&(c*=-1);a.connectionModel.setOffsetInBlock(c,b+a.connectionOffsetY+this.constants_.DARK_PATH_OFFSET)}}positionStatementInputConnection_(a){const b=\na.getLastInput();if(b==null?0:b.connectionModel){let c=a.xPos+a.statementEdge+b.notchOffset;c=this.info_.RTL?c*-1:c+this.constants_.DARK_PATH_OFFSET;b.connectionModel.setOffsetInBlock(c,a.yPos+this.constants_.DARK_PATH_OFFSET)}}positionExternalValueConnection_(a){const b=a.getLastInput();if(b&&b.connectionModel){let c=a.xPos+a.width+this.constants_.DARK_PATH_OFFSET;this.info_.RTL&&(c*=-1);b.connectionModel.setOffsetInBlock(c,a.yPos)}}positionNextConnection_(){const a=this.info_.bottomRow;if(a.connection){const b=\na.connection,c=b.xPos;b.connectionModel.setOffsetInBlock((this.info_.RTL?-c:c)+this.constants_.DARK_PATH_OFFSET/2,a.baseline+this.constants_.DARK_PATH_OFFSET)}}},module$build$src$core$renderers$geras$drawer={};module$build$src$core$renderers$geras$drawer.Drawer=Drawer$$module$build$src$core$renderers$geras$drawer;var HighlightConstantProvider$$module$build$src$core$renderers$geras$highlight_constants=class{constructor(a){this.OFFSET=.5;this.constantProvider=a;this.START_POINT=moveBy$$module$build$src$core$utils$svg_paths(this.OFFSET,this.OFFSET)}init(){this.INSIDE_CORNER=this.makeInsideCorner();this.OUTSIDE_CORNER=this.makeOutsideCorner();this.PUZZLE_TAB=this.makePuzzleTab();this.NOTCH=this.makeNotch();this.JAGGED_TEETH=this.makeJaggedTeeth();this.START_HAT=this.makeStartHat()}makeInsideCorner(){const a=this.constantProvider.CORNER_RADIUS,\nb=this.OFFSET,c=(1-Math.SQRT1_2)*(a+b)-b,d=moveBy$$module$build$src$core$utils$svg_paths(c,c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a,point$$module$build$src$core$utils$svg_paths(-c-b,a-c)),e=arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a+b,point$$module$build$src$core$utils$svg_paths(a+b,a+b)),f=moveBy$$module$build$src$core$utils$svg_paths(c,-c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,0\",a+b,point$$module$build$src$core$utils$svg_paths(a-c,c+b));return{width:a+\nb,height:a,pathTop(g){return g?d:\"\"},pathBottom(g){return g?e:f}}}makeOutsideCorner(){const a=this.constantProvider.CORNER_RADIUS,b=this.OFFSET,c=(1-Math.SQRT1_2)*(a-b)+b,d=moveBy$$module$build$src$core$utils$svg_paths(c,c)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(a-c,-c+b)),e=moveBy$$module$build$src$core$utils$svg_paths(b,a)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(a,-a+\nb)),f=-c,g=moveBy$$module$build$src$core$utils$svg_paths(c,f)+arc$$module$build$src$core$utils$svg_paths(\"a\",\"0 0,1\",a-b,point$$module$build$src$core$utils$svg_paths(-c+b,-f-a));return{height:a,topLeft(h){return h?d:e},bottomLeft(){return g}}}makePuzzleTab(){const a=this.constantProvider.TAB_WIDTH,b=this.constantProvider.TAB_HEIGHT,c=moveBy$$module$build$src$core$utils$svg_paths(-2,-b+2.5+.9)+lineTo$$module$build$src$core$utils$svg_paths(a*-.45,-2.1),d=lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",\n2.5)+moveBy$$module$build$src$core$utils$svg_paths(-a*.97,2.5)+curve$$module$build$src$core$utils$svg_paths(\"q\",[point$$module$build$src$core$utils$svg_paths(-a*.05,10),point$$module$build$src$core$utils$svg_paths(a*.3,9.5)])+moveBy$$module$build$src$core$utils$svg_paths(a*.67,-1.9)+lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",2.5),e=lineOnAxis$$module$build$src$core$utils$svg_paths(\"v\",-1.5)+moveBy$$module$build$src$core$utils$svg_paths(a*-.92,-.5)+curve$$module$build$src$core$utils$svg_paths(\"q\",\n[point$$module$build$src$core$utils$svg_paths(a*-.19,-5.5),point$$module$build$src$core$utils$svg_paths(0,-11)])+moveBy$$module$build$src$core$utils$svg_paths(a*.92,1),f=moveBy$$module$build$src$core$utils$svg_paths(-5,b-.7)+lineTo$$module$build$src$core$utils$svg_paths(a*.46,-2.1);return{width:a,height:b,pathUp(g){return g?c:e},pathDown(g){return g?d:f}}}makeNotch(){return{pathLeft:lineOnAxis$$module$build$src$core$utils$svg_paths(\"h\",this.OFFSET)+this.constantProvider.NOTCH.pathLeft}}makeJaggedTeeth(){return{pathLeft:lineTo$$module$build$src$core$utils$svg_paths(5.1,\n2.6)+moveBy$$module$build$src$core$utils$svg_paths(-10.2,6.8)+lineTo$$module$build$src$core$utils$svg_paths(5.1,2.6),height:12,width:10.2}}makeStartHat(){const a=this.constantProvider.START_HAT.height,b=moveBy$$module$build$src$core$utils$svg_paths(25,-8.7)+curve$$module$build$src$core$utils$svg_paths(\"c\",[point$$module$build$src$core$utils$svg_paths(29.7,-6.2),point$$module$build$src$core$utils$svg_paths(57.2,-.5),point$$module$build$src$core$utils$svg_paths(75,8.7)]),c=curve$$module$build$src$core$utils$svg_paths(\"c\",\n[point$$module$build$src$core$utils$svg_paths(17.8,-9.2),point$$module$build$src$core$utils$svg_paths(45.3,-14.9),point$$module$build$src$core$utils$svg_paths(75,-8.7)])+moveTo$$module$build$src$core$utils$svg_paths(100.5,a+.5);return{path(d){return d?b:c}}}},module$build$src$core$renderers$geras$highlight_constants={};module$build$src$core$renderers$geras$highlight_constants.HighlightConstantProvider=HighlightConstantProvider$$module$build$src$core$renderers$geras$highlight_constants;var InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input=class extends InlineInput$$module$build$src$core$renderers$measurables$inline_input{constructor(a,b){super(a,b);this.constants_=a;this.connectedBlock&&(this.width+=this.constants_.DARK_PATH_OFFSET,this.height+=this.constants_.DARK_PATH_OFFSET)}},module$build$src$core$renderers$geras$measurables$inline_input={};module$build$src$core$renderers$geras$measurables$inline_input.InlineInput=InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input;var StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input=class extends StatementInput$$module$build$src$core$renderers$measurables$statement_input{constructor(a,b){super(a,b);this.constants_=a;this.connectedBlock&&(this.height+=this.constants_.DARK_PATH_OFFSET)}},module$build$src$core$renderers$geras$measurables$statement_input={};module$build$src$core$renderers$geras$measurables$statement_input.StatementInput=StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input;var RenderInfo$$module$build$src$core$renderers$geras$info=class extends RenderInfo$$module$build$src$core$renderers$common$info{constructor(a,b){super(a,b);this.renderer_=a}getRenderer(){return this.renderer_}populateBottomRow_(){super.populateBottomRow_();this.block_.inputList.length&&this.block_.inputList[this.block_.inputList.length-1]instanceof StatementInput$$module$build$src$core$inputs$statement_input||(this.bottomRow.minHeight=this.constants_.MEDIUM_PADDING-this.constants_.DARK_PATH_OFFSET)}addInput_(a,\nb){if(this.isInline&&a instanceof $.ValueInput$$module$build$src$core$inputs$value_input)b.elements.push(new InlineInput$$module$build$src$core$renderers$geras$measurables$inline_input(this.constants_,a)),b.hasInlineInput=!0;else if(a instanceof StatementInput$$module$build$src$core$inputs$statement_input)b.elements.push(new StatementInput$$module$build$src$core$renderers$geras$measurables$statement_input(this.constants_,a)),b.hasStatement=!0;else if(a instanceof $.ValueInput$$module$build$src$core$inputs$value_input)b.elements.push(new ExternalValueInput$$module$build$src$core$renderers$measurables$external_value_input(this.constants_,\na)),b.hasExternalInput=!0;else if(a instanceof DummyInput$$module$build$src$core$inputs$dummy_input||a instanceof EndRowInput$$module$build$src$core$inputs$end_row_input)b.minHeight=Math.max(b.minHeight,this.constants_.DUMMY_INPUT_MIN_HEIGHT),b.hasDummyInput=!0;this.isInline||b.align!==null||(b.align=a.align)}addElemSpacing_(){let a=!1;for(let c=0,d;d=this.rows[c];c++)d.hasExternalInput&&(a=!0);for(let c=0,d;d=this.rows[c];c++){var b=d.elements;d.elements=[];d.startsWithElemSpacer()&&d.elements.push(new InRowSpacer$$module$build$src$core$renderers$measurables$in_row_spacer(this.constants_,\nthis.getInRowSpacing_(null,b[0])));if(b.length){for(let e=0;e0&&this.addAlignmentPadding_(e,a),a=e.width)}else super.alignRowElements_()}getDesiredRowWidth_(a){return this.isInline&&a.hasStatement?this.statementEdge+\nthis.constants_.MAX_BOTTOM_WIDTH+this.startX:super.getDesiredRowWidth_(a)}finalize_(){let a=0,b=0;for(let d=0,e;e=this.rows[d];d++){e.yPos=b;e.xPos=this.startX;b+=e.height;a=Math.max(a,e.widthWithConnectedBlocks);var c=b-this.topRow.ascenderHeight;e===this.bottomRow&&c>>/sprites.png);\\n height: 16px;\\n vertical-align: middle;\\n visibility: hidden;\\n width: 16px;\\n}\\n\\n.blocklyToolboxCategoryIconClosed {\\n background-position: -32px -1px;\\n}\\n\\n.blocklyToolbox[dir=\"RTL\"] .blocklyToolboxCategoryIconClosed {\\n background-position: 0 -1px;\\n}\\n\\n.blocklyToolboxSelected>.blocklyToolboxCategoryIconClosed {\\n background-position: -32px -17px;\\n}\\n\\n.blocklyToolbox[dir=\"RTL\"] .blocklyToolboxSelected>.blocklyToolboxCategoryIconClosed {\\n background-position: 0 -17px;\\n}\\n\\n.blocklyToolboxCategoryIconOpen {\\n background-position: -16px -1px;\\n}\\n\\n.blocklyToolboxSelected>.blocklyToolboxCategoryIconOpen {\\n background-position: -16px -17px;\\n}\\n\\n.blocklyToolboxCategoryLabel {\\n cursor: default;\\n font: 16px sans-serif;\\n padding: 0 3px;\\n vertical-align: middle;\\n}\\n\\n.blocklyToolboxDelete .blocklyToolboxCategoryLabel {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyToolboxSelected .blocklyToolboxCategoryLabel {\\n color: #fff;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX_ITEM,ToolboxCategory$$module$build$src$core$toolbox$category.registrationName,ToolboxCategory$$module$build$src$core$toolbox$category);var module$build$src$core$toolbox$category={};module$build$src$core$toolbox$category.ToolboxCategory=ToolboxCategory$$module$build$src$core$toolbox$category;var ToolboxSeparator$$module$build$src$core$toolbox$separator=class extends ToolboxItem$$module$build$src$core$toolbox$toolbox_item{constructor(a,b){super(a,b);this.cssConfig_={container:\"blocklyTreeSeparator\"};this.htmlDiv=null;Object.assign(this.cssConfig_,a.cssconfig||a.cssConfig)}init(){this.createDom_()}createDom_(){const a=document.createElement(\"div\");a.tabIndex=-1;a.id=this.getId();const b=this.cssConfig_.container;b&&addClass$$module$build$src$core$utils$dom(a,b);return this.htmlDiv=a}getDiv(){return this.htmlDiv}dispose(){removeNode$$module$build$src$core$utils$dom(this.htmlDiv)}};\nToolboxSeparator$$module$build$src$core$toolbox$separator.registrationName=\"sep\";register$$module$build$src$core$css('\\n.blocklyTreeSeparator {\\n border-bottom: solid #e5e5e5 1px;\\n height: 0;\\n margin: 5px 0;\\n}\\n\\n.blocklyToolbox[layout=\"h\"] .blocklyTreeSeparator {\\n border-right: solid #e5e5e5 1px;\\n border-bottom: none;\\n height: auto;\\n margin: 0 5px 0 5px;\\n padding: 5px 0;\\n width: 0;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX_ITEM,ToolboxSeparator$$module$build$src$core$toolbox$separator.registrationName,ToolboxSeparator$$module$build$src$core$toolbox$separator);var module$build$src$core$toolbox$separator={};module$build$src$core$toolbox$separator.ToolboxSeparator=ToolboxSeparator$$module$build$src$core$toolbox$separator;var CollapsibleToolboxCategory$$module$build$src$core$toolbox$collapsible_category=class extends ToolboxCategory$$module$build$src$core$toolbox$category{constructor(a,b,c){super(a,b,c);this.subcategoriesDiv_=null;this.expanded_=!1;this.toolboxItems_=[]}makeDefaultCssConfig_(){const a=super.makeDefaultCssConfig_();a.contents=\"blocklyToolboxCategoryGroup\";return a}parseContents_(a){if(\"custom\"in a)this.flyoutItems_=a.custom;else{const b=a.contents;if(b){this.flyoutItems_=[];a=!0;for(let c=0;cb.dispose());this.contents.clear();this.renderContents_(a.contents);this.position();this.handleToolboxItemResize()}renderContents_(a){const b=document.createDocumentFragment();\nfor(let c=0;c\n{a.refreshTheme&&a.refreshTheme()})}refreshSelection(){this.selectedItem_&&this.selectedItem_.isSelectable()&&this.selectedItem_.getContents().length&&this.flyout.show(this.selectedItem_.getContents())}setVisible(a){this.isVisible_!==a&&(this.HtmlDiv.style.display=a?\"block\":\"none\",this.isVisible_=a,this.workspace_.recordDragTargets())}autoHide(a){!a&&this.flyout&&this.flyout.autoClose&&this.clearSelection()}setSelectedItem(a){const b=this.selectedItem_;!a&&!b||a&&!isSelectableToolboxItem$$module$build$src$core$interfaces$i_selectable_toolbox_item(a)||\n(this.shouldDeselectItem_(b,a)&&b!==null&&this.deselectItem_(b),this.shouldSelectItem_(b,a)&&a!==null&&this.selectItem_(b,a),this.updateFlyout_(b,a),this.fireSelectEvent(b,a))}shouldDeselectItem_(a,b){return a!==null&&(!a.isCollapsible()||a!==b)}shouldSelectItem_(a,b){return b!==null&&b!==a}deselectItem_(a){this.selectedItem_=null;this.previouslySelectedItem_=a;a.setSelected(!1);setState$$module$build$src$core$utils$aria(this.contentsDiv_,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,\"\")}selectItem_(a,\nb){this.selectedItem_=b;this.previouslySelectedItem_=a;b.setSelected(!0);setState$$module$build$src$core$utils$aria(this.contentsDiv_,State$$module$build$src$core$utils$aria.ACTIVEDESCENDANT,b.getId())}selectItemByPosition(a){(a=this.getToolboxItems()[a])&&this.setSelectedItem(a)}updateFlyout_(a,b){b&&(a!==b||b.isCollapsible())&&b.getContents().length?(this.flyout.show(b.getContents()),this.flyout.scrollToStart()):this.flyout.hide()}fireSelectEvent(a,b){const c=a&&a.getName();let d=b&&b.getName();\na===b&&(d=null);a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.TOOLBOX_ITEM_SELECT))(c,d,this.workspace_.id);fire$$module$build$src$core$events$utils(a)}selectParent(){return this.selectedItem_?this.selectedItem_.isCollapsible()&&this.selectedItem_.isExpanded()?(this.selectedItem_.toggleExpanded(),!0):this.selectedItem_.getParent()&&this.selectedItem_.getParent().isSelectable()?(this.setSelectedItem(this.selectedItem_.getParent()),!0):!1:!1}selectChild(){if(!this.selectedItem_||\n!this.selectedItem_.isCollapsible())return!1;const a=this.selectedItem_;a.isExpanded()?this.selectNext():a.toggleExpanded();return!0}selectNext(){if(!this.selectedItem_)return!1;const a=[...this.contents.values()];let b=a.indexOf(this.selectedItem_)+1;if(b>-1&&b-1&&ba.dispose());for(let a=0;ac.isSelectable()))!=null?b:null}return null}getNestedTrees(){return[]}lookUpFocusableNode(a){return this.getToolboxItemById(a)}onTreeFocus(a,\nb){a!==this?this.getSelectedItem()!==a&&this.setSelectedItem(a):this.clearSelection()}onTreeBlur(a){let b;a&&a===((b=this.flyout)==null?void 0:b.getWorkspace())||this.autoHide(!1)}};register$$module$build$src$core$css('\\n.blocklyToolboxDelete {\\n cursor: url(\"<<>>/handdelete.cur\"), auto;\\n}\\n\\n.blocklyToolboxGrab {\\n cursor: url(\"<<>>/handclosed.cur\"), auto;\\n cursor: grabbing;\\n cursor: -webkit-grabbing;\\n}\\n\\n/* Category tree in Toolbox. */\\n.blocklyToolbox {\\n box-sizing: border-box;\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n background-color: #ddd;\\n overflow-x: visible;\\n overflow-y: auto;\\n padding: 4px 0 4px 0;\\n position: absolute;\\n z-index: 70; /* so blocks go under toolbox when dragging */\\n -webkit-tap-highlight-color: transparent; /* issue #1345 */\\n}\\n\\n.blocklyToolboxCategoryGroup {\\n display: flex;\\n flex-wrap: wrap;\\n flex-direction: column;\\n}\\n\\n.blocklyToolboxCategoryGroup:focus {\\n outline: none;\\n}\\n');\nregister$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX,DEFAULT$$module$build$src$core$registry,Toolbox$$module$build$src$core$toolbox$toolbox);var module$build$src$core$toolbox$toolbox={};module$build$src$core$toolbox$toolbox.Toolbox=Toolbox$$module$build$src$core$toolbox$toolbox;var module$build$src$core$interfaces$i_navigation_policy={};var VERSION$$module$build$src$core$blockly=\"12.3.1\",INPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE,OUTPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE,NEXT_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT,PREVIOUS_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT,\nTOOLBOX_AT_TOP$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.TOP,TOOLBOX_AT_BOTTOM$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.BOTTOM,TOOLBOX_AT_LEFT$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.LEFT,TOOLBOX_AT_RIGHT$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.RIGHT,svgResize$$module$build$src$core$blockly=svgResize$$module$build$src$core$common,getMainWorkspace$$module$build$src$core$blockly=\ngetMainWorkspace$$module$build$src$core$common,getSelected$$module$build$src$core$blockly=getSelected$$module$build$src$core$common,defineBlocksWithJsonArray$$module$build$src$core$blockly=defineBlocksWithJsonArray$$module$build$src$core$common,setParentContainer$$module$build$src$core$blockly=setParentContainer$$module$build$src$core$common,COLLAPSE_CHARS$$module$build$src$core$blockly=COLLAPSE_CHARS$$module$build$src$core$internal_constants,OPPOSITE_TYPE$$module$build$src$core$blockly=OPPOSITE_TYPE$$module$build$src$core$internal_constants,\nRENAME_VARIABLE_ID$$module$build$src$core$blockly=RENAME_VARIABLE_ID$$module$build$src$core$internal_constants,DELETE_VARIABLE_ID$$module$build$src$core$blockly=DELETE_VARIABLE_ID$$module$build$src$core$internal_constants,COLLAPSED_INPUT_NAME$$module$build$src$core$blockly=COLLAPSED_INPUT_NAME$$module$build$src$core$constants,COLLAPSED_FIELD_NAME$$module$build$src$core$blockly=COLLAPSED_FIELD_NAME$$module$build$src$core$constants,VARIABLE_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$variables,\nVARIABLE_DYNAMIC_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$variables_dynamic,PROCEDURE_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$procedures;Workspace$$module$build$src$core$workspace.prototype.newBlock=function(a,b){return new Block$$module$build$src$core$block(this,a,b)};WorkspaceSvg$$module$build$src$core$workspace_svg.prototype.newBlock=function(a,b){return new BlockSvg$$module$build$src$core$block_svg(this,a,b)};\nWorkspace$$module$build$src$core$workspace.prototype.newComment=function(a){return new WorkspaceComment$$module$build$src$core$comments$workspace_comment(this,a)};WorkspaceSvg$$module$build$src$core$workspace_svg.prototype.newComment=function(a){return new RenderedWorkspaceComment$$module$build$src$core$comments$rendered_workspace_comment(this,a)};WorkspaceSvg$$module$build$src$core$workspace_svg.newTrashcan=function(a){return new Trashcan$$module$build$src$core$trashcan(a)};\nMiniWorkspaceBubble$$module$build$src$core$bubbles$mini_workspace_bubble.prototype.newWorkspaceSvg=function(a){return new WorkspaceSvg$$module$build$src$core$workspace_svg(a)};$.Names$$module$build$src$core$names.prototype.populateProcedures=function(a){a=allProcedures$$module$build$src$core$procedures(a);a=a[0].concat(a[1]);for(let b=0;b0,text:c.replace(\"%1\",d.getText()),callback:$.callbackFactory$$module$build$src$core$contextmenu(this,b)})}else if(this.type===\"variables_get_dynamic\"||this.type===\"variables_get_reporter_dynamic\")c={text:$.Msg$$module$build$src$core$msg.RENAME_VARIABLE,\nenabled:!0,callback:renameOptionCallbackFactory$$module$build$src$blocks$variables_dynamic(this)},d=this.getField(\"VAR\").getText(),d={text:$.Msg$$module$build$src$core$msg.DELETE_VARIABLE.replace(\"%1\",d),enabled:!0,callback:deleteOptionCallbackFactory$$module$build$src$blocks$variables_dynamic(this)},a.unshift(c),a.unshift(d)},onchange:function(a){a=this.getFieldValue(\"VAR\");a=$.getVariable$$module$build$src$core$variables(this.workspace,a);this.type===\"variables_get_dynamic\"?this.outputConnection.setCheck(a.getType()):\nthis.getInput(\"VALUE\").connection.setCheck(a.getType())}},renameOptionCallbackFactory$$module$build$src$blocks$variables_dynamic=function(a){return function(){const b=a.workspace,c=a.getField(\"VAR\").getVariable();$.renameVariable$$module$build$src$core$variables(b,c)}},deleteOptionCallbackFactory$$module$build$src$blocks$variables_dynamic=function(a){return function(){const b=a.getField(\"VAR\").getVariable();b&&$.deleteVariable$$module$build$src$core$variables(b.getWorkspace(),b,a)}};\n$.registerMixin$$module$build$src$core$extensions(\"contextMenu_variableDynamicSetterGetter\",CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables_dynamic);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$variables_dynamic);var module$build$src$blocks$variables_dynamic={blocks:blocks$$module$build$src$blocks$variables_dynamic};var blocks$$module$build$src$blocks$variables=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"variables_get\",message0:\"%1\",args0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_VARIABLES_DEFAULT_NAME}\"}],output:null,style:\"variable_blocks\",helpUrl:\"%{BKY_VARIABLES_GET_HELPURL}\",tooltip:\"%{BKY_VARIABLES_GET_TOOLTIP}\",extensions:[\"contextMenu_variableSetterGetter\"]},{type:\"variables_set\",message0:\"%{BKY_VARIABLES_SET}\",args0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_VARIABLES_DEFAULT_NAME}\"},\n{type:\"input_value\",name:\"VALUE\"}],previousStatement:null,nextStatement:null,style:\"variable_blocks\",tooltip:\"%{BKY_VARIABLES_SET_TOOLTIP}\",helpUrl:\"%{BKY_VARIABLES_SET_HELPURL}\",extensions:[\"contextMenu_variableSetterGetter\"]}]),CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables={customContextMenu:function(a){if(!this.isInFlyout){if(this.type===\"variables_get\"){var b=\"variables_set\";var c=$.Msg$$module$build$src$core$msg.VARIABLES_GET_CREATE_SET}else b=\"variables_get\",\nc=$.Msg$$module$build$src$core$msg.VARIABLES_SET_CREATE_GET;var d=this.getField(\"VAR\");b={type:b,fields:{VAR:d.saveState(!0)}};a.push({enabled:this.workspace.remainingCapacity()>0,text:c.replace(\"%1\",d.getText()),callback:$.callbackFactory$$module$build$src$core$contextmenu(this,b)})}else if(this.type===\"variables_get\"||this.type===\"variables_get_reporter\")c={text:$.Msg$$module$build$src$core$msg.RENAME_VARIABLE,enabled:!0,callback:renameOptionCallbackFactory$$module$build$src$blocks$variables(this)},\nd=this.getField(\"VAR\").getText(),d={text:$.Msg$$module$build$src$core$msg.DELETE_VARIABLE.replace(\"%1\",d),enabled:!0,callback:deleteOptionCallbackFactory$$module$build$src$blocks$variables(this)},a.unshift(c),a.unshift(d)}},renameOptionCallbackFactory$$module$build$src$blocks$variables=function(a){return function(){const b=a.workspace,c=a.getField(\"VAR\").getVariable();$.renameVariable$$module$build$src$core$variables(b,c)}},deleteOptionCallbackFactory$$module$build$src$blocks$variables=function(a){return function(){const b=\na.getField(\"VAR\").getVariable();b&&$.deleteVariable$$module$build$src$core$variables(b.getWorkspace(),b,a)}};$.registerMixin$$module$build$src$core$extensions(\"contextMenu_variableSetterGetter\",CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN$$module$build$src$blocks$variables);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$variables);var module$build$src$blocks$variables={blocks:blocks$$module$build$src$blocks$variables};var blocks$$module$build$src$blocks$text=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"text\",message0:\"%1\",args0:[{type:\"field_input\",name:\"TEXT\",text:\"\"}],output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_TEXT_HELPURL}\",tooltip:\"%{BKY_TEXT_TEXT_TOOLTIP}\",extensions:[\"text_quotes\",\"parent_tooltip_when_inline\"]},{type:\"text_join\",message0:\"\",output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_JOIN_HELPURL}\",tooltip:\"%{BKY_TEXT_JOIN_TOOLTIP}\",mutator:\"text_join_mutator\"},\n{type:\"text_create_join_container\",message0:\"%{BKY_TEXT_CREATE_JOIN_TITLE_JOIN} %1 %2\",args0:[{type:\"input_dummy\"},{type:\"input_statement\",name:\"STACK\"}],style:\"text_blocks\",tooltip:\"%{BKY_TEXT_CREATE_JOIN_TOOLTIP}\",enableContextMenu:!1},{type:\"text_create_join_item\",message0:\"%{BKY_TEXT_CREATE_JOIN_ITEM_TITLE_ITEM}\",previousStatement:null,nextStatement:null,style:\"text_blocks\",tooltip:\"%{BKY_TEXT_CREATE_JOIN_ITEM_TOOLTIP}\",enableContextMenu:!1},{type:\"text_append\",message0:\"%{BKY_TEXT_APPEND_TITLE}\",\nargs0:[{type:\"field_variable\",name:\"VAR\",variable:\"%{BKY_TEXT_APPEND_VARIABLE}\"},{type:\"input_value\",name:\"TEXT\"}],previousStatement:null,nextStatement:null,style:\"text_blocks\",extensions:[\"text_append_tooltip\"]},{type:\"text_length\",message0:\"%{BKY_TEXT_LENGTH_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Number\",style:\"text_blocks\",tooltip:\"%{BKY_TEXT_LENGTH_TOOLTIP}\",helpUrl:\"%{BKY_TEXT_LENGTH_HELPURL}\"},{type:\"text_isEmpty\",message0:\"%{BKY_TEXT_ISEMPTY_TITLE}\",\nargs0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Boolean\",style:\"text_blocks\",tooltip:\"%{BKY_TEXT_ISEMPTY_TOOLTIP}\",helpUrl:\"%{BKY_TEXT_ISEMPTY_HELPURL}\"},{type:\"text_indexOf\",message0:\"%{BKY_TEXT_INDEXOF_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:\"String\"},{type:\"field_dropdown\",name:\"END\",options:[[\"%{BKY_TEXT_INDEXOF_OPERATOR_FIRST}\",\"FIRST\"],[\"%{BKY_TEXT_INDEXOF_OPERATOR_LAST}\",\"LAST\"]]},{type:\"input_value\",name:\"FIND\",check:\"String\"}],output:\"Number\",style:\"text_blocks\",\nhelpUrl:\"%{BKY_TEXT_INDEXOF_HELPURL}\",inputsInline:!0,extensions:[\"text_indexOf_tooltip\"]},{type:\"text_charAt\",message0:\"%{BKY_TEXT_CHARAT_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:\"String\"},{type:\"field_dropdown\",name:\"WHERE\",options:[[\"%{BKY_TEXT_CHARAT_FROM_START}\",\"FROM_START\"],[\"%{BKY_TEXT_CHARAT_FROM_END}\",\"FROM_END\"],[\"%{BKY_TEXT_CHARAT_FIRST}\",\"FIRST\"],[\"%{BKY_TEXT_CHARAT_LAST}\",\"LAST\"],[\"%{BKY_TEXT_CHARAT_RANDOM}\",\"RANDOM\"]]}],output:\"String\",style:\"text_blocks\",helpUrl:\"%{BKY_TEXT_CHARAT_HELPURL}\",\ninputsInline:!0,mutator:\"text_charAt_mutator\"}]),GET_SUBSTRING_BLOCK$$module$build$src$blocks$text={init:function(){this.WHERE_OPTIONS_1=[[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_START_FIRST,\"FIRST\"]];this.WHERE_OPTIONS_2=[[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_FROM_END,\n\"FROM_END\"],[$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_END_LAST,\"LAST\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"STRING\").setCheck(\"String\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_INPUT_IN_TEXT);const a=b=>{const c=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this[\"WHERE_OPTIONS_\"+b]});c.setValidator(function(d){const e=this.getValue();d=d===\n\"FROM_START\"||d===\"FROM_END\";d!==(e===\"FROM_START\"||e===\"FROM_END\")&&this.getSourceBlock().updateAt_(b,d)});return c};this.appendDummyInput(\"WHERE1_INPUT\").appendField(a(1),\"WHERE1\");this.appendDummyInput(\"AT1\");this.appendDummyInput(\"WHERE2_INPUT\").appendField(a(2),\"WHERE2\");this.appendDummyInput(\"AT2\");$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL);this.setInputsInline(!0);this.setOutput(!0,\n\"String\");this.updateAt_(1,!0);this.updateAt_(2,!0);this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");var b=this.getInput(\"AT1\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at1\",`${b}`);b=this.getInput(\"AT2\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at2\",`${b}`);return a},domToMutation:function(a){const b=\na.getAttribute(\"at1\")===\"true\";a=a.getAttribute(\"at2\")===\"true\";this.updateAt_(1,b);this.updateAt_(2,a)},updateAt_:function(a,b){this.removeInput(\"AT\"+a);this.removeInput(\"ORDINAL\"+a,!0);b?(this.appendValueInput(\"AT\"+a).setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\"+a).appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\"+a);a===2&&$.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL&&(this.removeInput(\"TAIL\",\n!0),this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_GET_SUBSTRING_TAIL));a===1&&(this.moveInputBefore(\"AT1\",\"WHERE2_INPUT\"),this.getInput(\"ORDINAL1\")&&this.moveInputBefore(\"ORDINAL1\",\"WHERE2_INPUT\"))}};blocks$$module$build$src$blocks$text.text_getSubstring=GET_SUBSTRING_BLOCK$$module$build$src$blocks$text;\nblocks$$module$build$src$blocks$text.text_changeCase={init:function(){const a=[[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_UPPERCASE,\"UPPERCASE\"],[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_LOWERCASE,\"LOWERCASE\"],[$.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_OPERATOR_TITLECASE,\"TITLECASE\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"TEXT\").setCheck(\"String\").appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",\noptions:a}),\"CASE\");this.setOutput(!0,\"String\");this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_CHANGECASE_TOOLTIP)}};\nblocks$$module$build$src$blocks$text.text_trim={init:function(){const a=[[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_BOTH,\"BOTH\"],[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_LEFT,\"LEFT\"],[$.Msg$$module$build$src$core$msg.TEXT_TRIM_OPERATOR_RIGHT,\"RIGHT\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_TRIM_HELPURL);this.setStyle(\"text_blocks\");this.appendValueInput(\"TEXT\").setCheck(\"String\").appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a}),\n\"MODE\");this.setOutput(!0,\"String\");this.setTooltip($.Msg$$module$build$src$core$msg.TEXT_TRIM_TOOLTIP)}};blocks$$module$build$src$blocks$text.text_print={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_PRINT_TITLE,args0:[{type:\"input_value\",name:\"TEXT\"}],previousStatement:null,nextStatement:null,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_PRINT_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_PRINT_HELPURL})}};\nvar PROMPT_COMMON$$module$build$src$blocks$text={updateType_:function(a){this.outputConnection.setCheck(a===\"NUMBER\"?\"Number\":\"String\")},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"type\",this.getFieldValue(\"TYPE\"));return a},domToMutation:function(a){this.updateType_(a.getAttribute(\"type\"))}};\nblocks$$module$build$src$blocks$text.text_prompt_ext=Object.assign({},PROMPT_COMMON$$module$build$src$blocks$text,{init:function(){var a=[[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_TEXT,\"TEXT\"],[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_NUMBER,\"NUMBER\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_PROMPT_HELPURL);this.setStyle(\"text_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});a.setValidator(b=>{this.updateType_(b)});this.appendValueInput(\"TEXT\").appendField(a,\n\"TYPE\");this.setOutput(!0,\"String\");this.setTooltip(()=>this.getFieldValue(\"TYPE\")===\"TEXT\"?$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_TEXT:$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_NUMBER)}});\nblocks$$module$build$src$blocks$text.text_prompt=Object.assign({},PROMPT_COMMON$$module$build$src$blocks$text,{init:function(){this.mixin(QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);var a=[[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_TEXT,\"TEXT\"],[$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TYPE_NUMBER,\"NUMBER\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.TEXT_PROMPT_HELPURL);this.setStyle(\"text_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});\na.setValidator(b=>{this.updateType_(b)});this.appendDummyInput().appendField(a,\"TYPE\").appendField(this.newQuote_(!0)).appendField($.fromJson$$module$build$src$core$field_registry({type:\"field_input\",text:\"\"}),\"TEXT\").appendField(this.newQuote_(!1));this.setOutput(!0,\"String\");this.setTooltip(()=>this.getFieldValue(\"TYPE\")===\"TEXT\"?$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_TEXT:$.Msg$$module$build$src$core$msg.TEXT_PROMPT_TOOLTIP_NUMBER)}});\nblocks$$module$build$src$blocks$text.text_count={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_COUNT_MESSAGE0,args0:[{type:\"input_value\",name:\"SUB\",check:\"String\"},{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"Number\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_COUNT_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_COUNT_HELPURL})}};\nblocks$$module$build$src$blocks$text.text_replace={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_MESSAGE0,args0:[{type:\"input_value\",name:\"FROM\",check:\"String\"},{type:\"input_value\",name:\"TO\",check:\"String\"},{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"String\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_REPLACE_HELPURL})}};\nblocks$$module$build$src$blocks$text.text_reverse={init:function(){this.jsonInit({message0:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_MESSAGE0,args0:[{type:\"input_value\",name:\"TEXT\",check:\"String\"}],output:\"String\",inputsInline:!0,style:\"text_blocks\",tooltip:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_TOOLTIP,helpUrl:$.Msg$$module$build$src$core$msg.TEXT_REVERSE_HELPURL})}};\nvar QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text={QUOTE_IMAGE_LEFT_DATAURI:\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC\",QUOTE_IMAGE_RIGHT_DATAURI:\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==\",\nQUOTE_IMAGE_WIDTH:12,QUOTE_IMAGE_HEIGHT:12,quoteField_:function(a){for(let b=0,c;c=this.inputList[b];b++)for(let d=0,e;e=c.fieldRow[d];d++)if(a===e.name){c.insertFieldAt(d,this.newQuote_(!0));c.insertFieldAt(d+2,this.newQuote_(!1));return}console.warn('field named \"'+a+'\" not found in '+this.toDevString())},newQuote_:function(a){a=this.RTL?!a:a;return $.fromJson$$module$build$src$core$field_registry({type:\"field_image\",src:a?this.QUOTE_IMAGE_LEFT_DATAURI:this.QUOTE_IMAGE_RIGHT_DATAURI,width:this.QUOTE_IMAGE_WIDTH,\nheight:this.QUOTE_IMAGE_HEIGHT,alt:a?\"\\u201c\":\"\\u201d\"})}},QUOTES_EXTENSION$$module$build$src$blocks$text=function(){this.mixin(QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);this.quoteField_(\"TEXT\")},JOIN_MUTATOR_MIXIN$$module$build$src$blocks$text={itemCount_:0,mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"items\",`${this.itemCount_}`);return a},domToMutation:function(a){this.itemCount_=parseInt(a.getAttribute(\"items\"),10);this.updateShape_()},\nsaveExtraState:function(){return{itemCount:this.itemCount_}},loadExtraState:function(a){this.itemCount_=a.itemCount;this.updateShape_()},decompose:function(a){const b=a.newBlock(\"text_create_join_container\");b.initSvg();let c=b.getInput(\"STACK\").connection;for(let d=0;d$.Msg$$module$build$src$core$msg.TEXT_INDEXOF_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\"0\":\"-1\"))},CHARAT_MUTATOR_MIXIN$$module$build$src$blocks$text={isAt_:!1,mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"at\",`${this.isAt_}`);return a},domToMutation:function(a){a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},updateAt_:function(a){this.removeInput(\"AT\",\n!0);this.removeInput(\"ORDINAL\",!0);a&&(this.appendValueInput(\"AT\").setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX));$.Msg$$module$build$src$core$msg.TEXT_CHARAT_TAIL&&(this.removeInput(\"TAIL\",!0),this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.TEXT_CHARAT_TAIL));this.isAt_=a}},CHARAT_EXTENSION$$module$build$src$blocks$text=function(){this.getField(\"WHERE\").setValidator(function(a){a=\na===\"FROM_START\"||a===\"FROM_END\";const b=this.getSourceBlock();a!==b.isAt_&&b.updateAt_(a)});this.updateAt_(!0);this.setTooltip(()=>{var a=this.getFieldValue(\"WHERE\");let b=$.Msg$$module$build$src$core$msg.TEXT_CHARAT_TOOLTIP;(a===\"FROM_START\"||a===\"FROM_END\")&&(a=a===\"FROM_START\"?$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP:$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_END_TOOLTIP)&&(b+=\" \"+a.replace(\"%1\",this.workspace.options.oneBasedIndex?\"#1\":\"#0\"));return b})};\n$.register$$module$build$src$core$extensions(\"text_indexOf_tooltip\",INDEXOF_TOOLTIP_EXTENSION$$module$build$src$blocks$text);$.register$$module$build$src$core$extensions(\"text_quotes\",QUOTES_EXTENSION$$module$build$src$blocks$text);$.registerMixin$$module$build$src$core$extensions(\"quote_image_mixin\",QUOTE_IMAGE_MIXIN$$module$build$src$blocks$text);$.registerMutator$$module$build$src$core$extensions(\"text_join_mutator\",JOIN_MUTATOR_MIXIN$$module$build$src$blocks$text,JOIN_EXTENSION$$module$build$src$blocks$text);\n$.registerMutator$$module$build$src$core$extensions(\"text_charAt_mutator\",CHARAT_MUTATOR_MIXIN$$module$build$src$blocks$text,CHARAT_EXTENSION$$module$build$src$blocks$text);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$text);var module$build$src$blocks$text={blocks:blocks$$module$build$src$blocks$text};var blocks$$module$build$src$blocks$procedures={},PROCEDURE_DEF_COMMON$$module$build$src$blocks$procedures={setStatements_:function(a){this.hasStatements_!==a&&(a?(this.appendStatementInput(\"STACK\").appendField($.Msg$$module$build$src$core$msg.PROCEDURES_DEFNORETURN_DO),this.getInput(\"RETURN\")&&this.moveInputBefore(\"STACK\",\"RETURN\")):this.removeInput(\"STACK\",!0),this.hasStatements_=a)},updateParams_:function(){let a=\"\";this.arguments_.length&&(a=$.Msg$$module$build$src$core$msg.PROCEDURES_BEFORE_PARAMS+\n\" \"+this.arguments_.join(\", \"));$.disable$$module$build$src$core$events$utils();try{this.setFieldValue(a,\"PARAMS\")}finally{$.enable$$module$build$src$core$events$utils()}},mutationToDom:function(a){const b=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a&&b.setAttribute(\"name\",this.getFieldValue(\"NAME\"));for(let c=0;c\",\"GT\"],[\"\\u200f\\u2265\",\"GTE\"]]},{type:\"input_value\",name:\"B\"}],\ninputsInline:!0,output:\"Boolean\",style:\"logic_blocks\",helpUrl:\"%{BKY_LOGIC_COMPARE_HELPURL}\",extensions:[\"logic_compare\",\"logic_op_tooltip\"]},{type:\"logic_operation\",message0:\"%1 %2 %3\",args0:[{type:\"input_value\",name:\"A\",check:\"Boolean\"},{type:\"field_dropdown\",name:\"OP\",options:[[\"%{BKY_LOGIC_OPERATION_AND}\",\"AND\"],[\"%{BKY_LOGIC_OPERATION_OR}\",\"OR\"]]},{type:\"input_value\",name:\"B\",check:\"Boolean\"}],inputsInline:!0,output:\"Boolean\",style:\"logic_blocks\",helpUrl:\"%{BKY_LOGIC_OPERATION_HELPURL}\",extensions:[\"logic_op_tooltip\"]},\n{type:\"logic_negate\",message0:\"%{BKY_LOGIC_NEGATE_TITLE}\",args0:[{type:\"input_value\",name:\"BOOL\",check:\"Boolean\"}],output:\"Boolean\",style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_NEGATE_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_NEGATE_HELPURL}\"},{type:\"logic_null\",message0:\"%{BKY_LOGIC_NULL}\",output:null,style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_NULL_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_NULL_HELPURL}\"},{type:\"logic_ternary\",message0:\"%{BKY_LOGIC_TERNARY_CONDITION} %1\",args0:[{type:\"input_value\",name:\"IF\",check:\"Boolean\"}],\nmessage1:\"%{BKY_LOGIC_TERNARY_IF_TRUE} %1\",args1:[{type:\"input_value\",name:\"THEN\"}],message2:\"%{BKY_LOGIC_TERNARY_IF_FALSE} %1\",args2:[{type:\"input_value\",name:\"ELSE\"}],output:null,style:\"logic_blocks\",tooltip:\"%{BKY_LOGIC_TERNARY_TOOLTIP}\",helpUrl:\"%{BKY_LOGIC_TERNARY_HELPURL}\",extensions:[\"logic_ternary\"]},{type:\"controls_if_if\",message0:\"%{BKY_CONTROLS_IF_IF_TITLE_IF}\",nextStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_IF_TOOLTIP}\"},{type:\"controls_if_elseif\",\nmessage0:\"%{BKY_CONTROLS_IF_ELSEIF_TITLE_ELSEIF}\",previousStatement:null,nextStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_ELSEIF_TOOLTIP}\"},{type:\"controls_if_else\",message0:\"%{BKY_CONTROLS_IF_ELSE_TITLE_ELSE}\",previousStatement:null,enableContextMenu:!1,style:\"logic_blocks\",tooltip:\"%{BKY_CONTROLS_IF_ELSE_TOOLTIP}\"}]),TOOLTIPS_BY_OP$$module$build$src$blocks$logic={EQ:\"%{BKY_LOGIC_COMPARE_TOOLTIP_EQ}\",NEQ:\"%{BKY_LOGIC_COMPARE_TOOLTIP_NEQ}\",LT:\"%{BKY_LOGIC_COMPARE_TOOLTIP_LT}\",\nLTE:\"%{BKY_LOGIC_COMPARE_TOOLTIP_LTE}\",GT:\"%{BKY_LOGIC_COMPARE_TOOLTIP_GT}\",GTE:\"%{BKY_LOGIC_COMPARE_TOOLTIP_GTE}\",AND:\"%{BKY_LOGIC_OPERATION_TOOLTIP_AND}\",OR:\"%{BKY_LOGIC_OPERATION_TOOLTIP_OR}\"};$.register$$module$build$src$core$extensions(\"logic_op_tooltip\",$.buildTooltipForDropdown$$module$build$src$core$extensions(\"OP\",TOOLTIPS_BY_OP$$module$build$src$blocks$logic));\nvar CONTROLS_IF_MUTATOR_MIXIN$$module$build$src$blocks$logic={elseifCount_:0,elseCount_:0,mutationToDom:function(){if(!this.elseifCount_&&!this.elseCount_)return null;const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");this.elseifCount_&&a.setAttribute(\"elseif\",String(this.elseifCount_));this.elseCount_&&a.setAttribute(\"else\",\"1\");return a},domToMutation:function(a){this.elseifCount_=parseInt(a.getAttribute(\"elseif\"),10)||0;this.elseCount_=parseInt(a.getAttribute(\"else\"),10)||0;this.rebuildShape_()},\nsaveExtraState:function(){if(!this.elseifCount_&&!this.elseCount_)return null;const a=Object.create(null);this.elseifCount_&&(a.elseIfCount=this.elseifCount_);this.elseCount_&&(a.hasElse=!0);return a},loadExtraState:function(a){this.elseifCount_=a.elseIfCount||0;this.elseCount_=a.hasElse?1:0;this.updateShape_()},decompose:function(a){const b=a.newBlock(\"controls_if_if\");b.initSvg();let c=b.nextConnection;for(let d=1;d<=this.elseifCount_;d++){const e=a.newBlock(\"controls_if_elseif\");e.initSvg();c.connect(e.previousConnection);\nc=e.nextConnection}this.elseCount_&&(a=a.newBlock(\"controls_if_else\"),a.initSvg(),c.connect(a.previousConnection));return b},compose:function(a){a=a.nextConnection.targetBlock();this.elseCount_=this.elseifCount_=0;const b=[null],c=[null];let d=null;for(;a;){if(!a.isInsertionMarker())switch(a.type){case \"controls_if_elseif\":this.elseifCount_++;b.push(a.valueConnection_);c.push(a.statementConnection_);break;case \"controls_if_else\":this.elseCount_++;d=a.statementConnection_;break;default:throw TypeError(\"Unknown block type: \"+\na.type);}a=a.getNextBlock()}this.updateShape_();this.reconnectChildBlocks_(b,c,d)},saveConnections:function(a){a=a.nextConnection.targetBlock();let b=1;for(;a;){if(!a.isInsertionMarker())switch(a.type){case \"controls_if_elseif\":var c=this.getInput(\"IF\"+b);const d=this.getInput(\"DO\"+b);a.valueConnection_=c&&c.connection.targetConnection;a.statementConnection_=d&&d.connection.targetConnection;b++;break;case \"controls_if_else\":c=this.getInput(\"ELSE\");a.statementConnection_=c&&c.connection.targetConnection;\nbreak;default:throw TypeError(\"Unknown block type: \"+a.type);}a=a.getNextBlock()}},rebuildShape_:function(){const a=[null],b=[null];let c=null;this.getInput(\"ELSE\")&&(c=this.getInput(\"ELSE\").connection.targetConnection);for(let d=1;this.getInput(\"IF\"+d);d++){const e=this.getInput(\"IF\"+d),f=this.getInput(\"DO\"+d);a.push(e.connection.targetConnection);b.push(f.connection.targetConnection)}this.updateShape_();this.reconnectChildBlocks_(a,b,c)},updateShape_:function(){this.getInput(\"ELSE\")&&this.removeInput(\"ELSE\");\nfor(var a=1;this.getInput(\"IF\"+a);a++)this.removeInput(\"IF\"+a),this.removeInput(\"DO\"+a);for(a=1;a<=this.elseifCount_;a++)this.appendValueInput(\"IF\"+a).setCheck(\"Boolean\").appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_ELSEIF),this.appendStatementInput(\"DO\"+a).appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_THEN);this.elseCount_&&this.appendStatementInput(\"ELSE\").appendField($.Msg$$module$build$src$core$msg.CONTROLS_IF_MSG_ELSE)},reconnectChildBlocks_:function(a,b,c){for(let d=\n1;d<=this.elseifCount_;d++){let e;(e=a[d])==null||e.reconnect(this,\"IF\"+d);let f;(f=b[d])==null||f.reconnect(this,\"DO\"+d)}c==null||c.reconnect(this,\"ELSE\")}};$.registerMutator$$module$build$src$core$extensions(\"controls_if_mutator\",CONTROLS_IF_MUTATOR_MIXIN$$module$build$src$blocks$logic,null,[\"controls_if_elseif\",\"controls_if_else\"]);\nvar CONTROLS_IF_TOOLTIP_EXTENSION$$module$build$src$blocks$logic=function(){this.setTooltip(function(){if(this.elseifCount_||this.elseCount_){if(!this.elseifCount_&&this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_2;if(this.elseifCount_&&!this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_3;if(this.elseifCount_&&this.elseCount_)return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_4}else return $.Msg$$module$build$src$core$msg.CONTROLS_IF_TOOLTIP_1;\nreturn\"\"}.bind(this))};$.register$$module$build$src$core$extensions(\"controls_if_tooltip\",CONTROLS_IF_TOOLTIP_EXTENSION$$module$build$src$blocks$logic);\nvar LOGIC_COMPARE_ONCHANGE_MIXIN$$module$build$src$blocks$logic={onchange:function(a){this.prevBlocks_||(this.prevBlocks_=[null,null]);var b=this.getInputTargetBlock(\"A\");const c=this.getInputTargetBlock(\"B\");b&&c&&!this.workspace.connectionChecker.doTypeChecks(b.outputConnection,c.outputConnection)&&($.setGroup$$module$build$src$core$events$utils(a.group),a=this.prevBlocks_[0],a!==b&&(b.unplug(),!a||a.isDisposed()||a.isShadow()||this.getInput(\"A\").connection.connect(a.outputConnection)),b=this.prevBlocks_[1],\nb!==c&&(c.unplug(),!b||b.isDisposed()||b.isShadow()||this.getInput(\"B\").connection.connect(b.outputConnection)),this.bumpNeighbours(),$.setGroup$$module$build$src$core$events$utils(!1));this.prevBlocks_[0]=this.getInputTargetBlock(\"A\");this.prevBlocks_[1]=this.getInputTargetBlock(\"B\")}},LOGIC_COMPARE_EXTENSION$$module$build$src$blocks$logic=function(){this.mixin(LOGIC_COMPARE_ONCHANGE_MIXIN$$module$build$src$blocks$logic)};$.register$$module$build$src$core$extensions(\"logic_compare\",LOGIC_COMPARE_EXTENSION$$module$build$src$blocks$logic);\nvar LOGIC_TERNARY_ONCHANGE_MIXIN$$module$build$src$blocks$logic={prevParentConnection_:null,onchange:function(a){const b=this.getInputTargetBlock(\"THEN\"),c=this.getInputTargetBlock(\"ELSE\"),d=this.outputConnection.targetConnection;if((b||c)&&d)for(let e=0;e<2;e++){const f=e===1?b:c;f&&!f.workspace.connectionChecker.doTypeChecks(f.outputConnection,d)&&($.setGroup$$module$build$src$core$events$utils(a.group),d===this.prevParentConnection_?(this.unplug(),d.getSourceBlock().bumpNeighbours()):(f.unplug(),\nf.bumpNeighbours()),$.setGroup$$module$build$src$core$events$utils(!1))}this.prevParentConnection_=d}};$.registerMixin$$module$build$src$core$extensions(\"logic_ternary\",LOGIC_TERNARY_ONCHANGE_MIXIN$$module$build$src$blocks$logic);$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$logic);var module$build$src$blocks$logic={blocks:blocks$$module$build$src$blocks$logic};var blocks$$module$build$src$blocks$lists=$.createBlockDefinitionsFromJsonArray$$module$build$src$core$common([{type:\"lists_create_empty\",message0:\"%{BKY_LISTS_CREATE_EMPTY_TITLE}\",output:\"Array\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_CREATE_EMPTY_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_CREATE_EMPTY_HELPURL}\"},{type:\"lists_repeat\",message0:\"%{BKY_LISTS_REPEAT_TITLE}\",args0:[{type:\"input_value\",name:\"ITEM\"},{type:\"input_value\",name:\"NUM\",check:\"Number\"}],output:\"Array\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_REPEAT_TOOLTIP}\",\nhelpUrl:\"%{BKY_LISTS_REPEAT_HELPURL}\"},{type:\"lists_reverse\",message0:\"%{BKY_LISTS_REVERSE_MESSAGE0}\",args0:[{type:\"input_value\",name:\"LIST\",check:\"Array\"}],output:\"Array\",inputsInline:!0,style:\"list_blocks\",tooltip:\"%{BKY_LISTS_REVERSE_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_REVERSE_HELPURL}\"},{type:\"lists_isEmpty\",message0:\"%{BKY_LISTS_ISEMPTY_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Boolean\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_ISEMPTY_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_ISEMPTY_HELPURL}\"},\n{type:\"lists_length\",message0:\"%{BKY_LISTS_LENGTH_TITLE}\",args0:[{type:\"input_value\",name:\"VALUE\",check:[\"String\",\"Array\"]}],output:\"Number\",style:\"list_blocks\",tooltip:\"%{BKY_LISTS_LENGTH_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_LENGTH_HELPURL}\"}]),LISTS_CREATE_WITH$$module$build$src$blocks$lists={init:function(){this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_CREATE_WITH_HELPURL);this.setStyle(\"list_blocks\");this.itemCount_=3;this.updateShape_();this.setOutput(!0,\"Array\");this.setMutator(new $.MutatorIcon$$module$build$src$core$icons$mutator_icon([\"lists_create_with_item\"],\nthis));this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_CREATE_WITH_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"items\",String(this.itemCount_));return a},domToMutation:function(a){a=a.getAttribute(\"items\");if(!a)throw new TypeError(\"element did not have items\");this.itemCount_=parseInt(a,10);this.updateShape_()},saveExtraState:function(){return{itemCount:this.itemCount_}},loadExtraState:function(a){this.itemCount_=a.itemCount;\nthis.updateShape_()},decompose:function(a){const b=a.newBlock(\"lists_create_with_container\");b.initSvg();let c=b.getInput(\"STACK\").connection;for(let d=0;d$.Msg$$module$build$src$core$msg.LISTS_INDEX_OF_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\"0\":\"-1\"))}};blocks$$module$build$src$blocks$lists.lists_indexOf=LISTS_INDEXOF$$module$build$src$blocks$lists;\nvar LISTS_GETINDEX$$module$build$src$blocks$lists={init:function(){var a=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_GET,\"GET\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_GET_REMOVE,\"GET_REMOVE\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_REMOVE,\"REMOVE\"]];this.WHERE_OPTIONS=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FIRST,\"FIRST\"],\n[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_LAST,\"LAST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_RANDOM,\"RANDOM\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_HELPURL);this.setStyle(\"list_blocks\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});a.setValidator(function(b){b=b===\"REMOVE\";this.getSourceBlock().updateStatement_(b)});this.appendValueInput(\"VALUE\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_INPUT_IN_LIST);\nthis.appendDummyInput().appendField(a,\"MODE\").appendField(\"\",\"SPACE\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this.WHERE_OPTIONS});a.setValidator(function(b){const c=this.getValue();b=b===\"FROM_START\"||b===\"FROM_END\";b!==(c===\"FROM_START\"||c===\"FROM_END\")&&this.getSourceBlock().updateAt_(b)});this.appendDummyInput().appendField(a,\"WHERE\");this.appendDummyInput(\"AT\");$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL);\nthis.setInputsInline(!0);this.setOutput(!0);this.updateAt_(!0);this.setTooltip(()=>{const b=this.getFieldValue(\"MODE\"),c=this.getFieldValue(\"WHERE\");let d=\"\";switch(b+\" \"+c){case \"GET FROM_START\":case \"GET FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM;break;case \"GET FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_FIRST;break;case \"GET LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_LAST;break;case \"GET RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM;\nbreak;case \"GET_REMOVE FROM_START\":case \"GET_REMOVE FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM;break;case \"GET_REMOVE FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST;break;case \"GET_REMOVE LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST;break;case \"GET_REMOVE RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM;break;case \"REMOVE FROM_START\":case \"REMOVE FROM_END\":d=\n$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM;break;case \"REMOVE FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST;break;case \"REMOVE LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST;break;case \"REMOVE RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM}if(c===\"FROM_START\"||c===\"FROM_END\")d+=\" \"+(c===\"FROM_START\"?$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP:$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_END_TOOLTIP).replace(\"%1\",\nthis.workspace.options.oneBasedIndex?\"#1\":\"#0\");return d})},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"statement\",String(!this.outputConnection));const b=this.getInput(\"AT\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at\",String(b));return a},domToMutation:function(a){const b=a.getAttribute(\"statement\")===\"true\";this.updateStatement_(b);a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},saveExtraState:function(){return this.outputConnection?\nnull:{isStatement:!0}},loadExtraState:function(a){a.isStatement?this.updateStatement_(!0):typeof a===\"string\"&&this.domToMutation($.textToDom$$module$build$src$core$utils$xml(a))},updateStatement_:function(a){a!==!this.outputConnection&&(this.unplug(!0,!0),a?(this.setOutput(!1),this.setPreviousStatement(!0),this.setNextStatement(!0)):(this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0)))},updateAt_:function(a){this.removeInput(\"AT\");this.removeInput(\"ORDINAL\",!0);a?(this.appendValueInput(\"AT\").setCheck(\"Number\"),\n$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\");$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_TAIL&&this.moveInputBefore(\"TAIL\",null)}};blocks$$module$build$src$blocks$lists.lists_getIndex=LISTS_GETINDEX$$module$build$src$blocks$lists;\nvar LISTS_SETINDEX$$module$build$src$blocks$lists={init:function(){var a=[[$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_SET,\"SET\"],[$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INSERT,\"INSERT\"]];this.WHERE_OPTIONS=[[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_FIRST,\"FIRST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_LAST,\"LAST\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_INDEX_RANDOM,\n\"RANDOM\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"LIST\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INPUT_IN_LIST);a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:a});this.appendDummyInput().appendField(a,\"MODE\").appendField(\"\",\"SPACE\");a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this.WHERE_OPTIONS});a.setValidator(function(b){const c=\nthis.getValue();b=b===\"FROM_START\"||b===\"FROM_END\";b!==(c===\"FROM_START\"||c===\"FROM_END\")&&this.getSourceBlock().updateAt_(b)});this.appendDummyInput().appendField(a,\"WHERE\");this.appendDummyInput(\"AT\");this.appendValueInput(\"TO\").appendField($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_INPUT_TO);this.setInputsInline(!0);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP);this.updateAt_(!0);this.setTooltip(()=>{const b=\nthis.getFieldValue(\"MODE\"),c=this.getFieldValue(\"WHERE\");let d=\"\";switch(b+\" \"+c){case \"SET FROM_START\":case \"SET FROM_END\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_FROM;break;case \"SET FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_FIRST;break;case \"SET LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_LAST;break;case \"SET RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_SET_RANDOM;break;case \"INSERT FROM_START\":case \"INSERT FROM_END\":d=\n$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FROM;break;case \"INSERT FIRST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST;break;case \"INSERT LAST\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_LAST;break;case \"INSERT RANDOM\":d=$.Msg$$module$build$src$core$msg.LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM}if(c===\"FROM_START\"||c===\"FROM_END\")d+=\" \"+$.Msg$$module$build$src$core$msg.LISTS_INDEX_FROM_START_TOOLTIP.replace(\"%1\",this.workspace.options.oneBasedIndex?\n\"#1\":\"#0\");return d})},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\"),b=this.getInput(\"AT\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at\",String(b));return a},domToMutation:function(a){a=a.getAttribute(\"at\")!==\"false\";this.updateAt_(a)},saveExtraState:function(){return null},loadExtraState:function(){},updateAt_:function(a){this.removeInput(\"AT\");this.removeInput(\"ORDINAL\",!0);a?(this.appendValueInput(\"AT\").setCheck(\"Number\"),\n$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\").appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\");this.moveInputBefore(\"AT\",\"TO\");this.getInput(\"ORDINAL\")&&this.moveInputBefore(\"ORDINAL\",\"TO\")}};blocks$$module$build$src$blocks$lists.lists_setIndex=LISTS_SETINDEX$$module$build$src$blocks$lists;\nvar LISTS_GETSUBLIST$$module$build$src$blocks$lists={init:function(){this.WHERE_OPTIONS_1=[[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FROM_END,\"FROM_END\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_START_FIRST,\"FIRST\"]];this.WHERE_OPTIONS_2=[[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_FROM_START,\"FROM_START\"],[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_FROM_END,\"FROM_END\"],\n[$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_END_LAST,\"LAST\"]];this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"LIST\").setCheck(\"Array\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_INPUT_IN_LIST);const a=b=>{const c=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:this[\"WHERE_OPTIONS_\"+b]});c.setValidator(function(d){const e=this.getValue();d=d===\"FROM_START\"||d===\n\"FROM_END\";d!==(e===\"FROM_START\"||e===\"FROM_END\")&&this.getSourceBlock().updateAt_(b,d)});return c};this.appendDummyInput(\"WHERE1_INPUT\").appendField(a(1),\"WHERE1\");this.appendDummyInput(\"AT1\");this.appendDummyInput(\"WHERE2_INPUT\").appendField(a(2),\"WHERE2\");this.appendDummyInput(\"AT2\");$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL&&this.appendDummyInput(\"TAIL\").appendField($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL);this.setInputsInline(!0);this.setOutput(!0,\"Array\");this.updateAt_(1,\n!0);this.updateAt_(2,!0);this.setTooltip($.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TOOLTIP)},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");var b=this.getInput(\"AT1\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at1\",String(b));b=this.getInput(\"AT2\")instanceof $.ValueInput$$module$build$src$core$inputs$value_input;a.setAttribute(\"at2\",String(b));return a},domToMutation:function(a){const b=a.getAttribute(\"at1\")===\n\"true\";a=a.getAttribute(\"at2\")===\"true\";this.updateAt_(1,b);this.updateAt_(2,a)},saveExtraState:function(){return null},loadExtraState:function(){},updateAt_:function(a,b){this.removeInput(\"AT\"+a);this.removeInput(\"ORDINAL\"+a,!0);b?(this.appendValueInput(\"AT\"+a).setCheck(\"Number\"),$.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput(\"ORDINAL\"+a).appendField($.Msg$$module$build$src$core$msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput(\"AT\"+a);a===1&&(this.moveInputBefore(\"AT1\",\n\"WHERE2_INPUT\"),this.getInput(\"ORDINAL1\")&&this.moveInputBefore(\"ORDINAL1\",\"WHERE2_INPUT\"));$.Msg$$module$build$src$core$msg.LISTS_GET_SUBLIST_TAIL&&this.moveInputBefore(\"TAIL\",null)}};blocks$$module$build$src$blocks$lists.lists_getSublist=LISTS_GETSUBLIST$$module$build$src$blocks$lists;\nblocks$$module$build$src$blocks$lists.lists_sort={init:function(){this.jsonInit({message0:\"%{BKY_LISTS_SORT_TITLE}\",args0:[{type:\"field_dropdown\",name:\"TYPE\",options:[[\"%{BKY_LISTS_SORT_TYPE_NUMERIC}\",\"NUMERIC\"],[\"%{BKY_LISTS_SORT_TYPE_TEXT}\",\"TEXT\"],[\"%{BKY_LISTS_SORT_TYPE_IGNORECASE}\",\"IGNORE_CASE\"]]},{type:\"field_dropdown\",name:\"DIRECTION\",options:[[\"%{BKY_LISTS_SORT_ORDER_ASCENDING}\",\"1\"],[\"%{BKY_LISTS_SORT_ORDER_DESCENDING}\",\"-1\"]]},{type:\"input_value\",name:\"LIST\",check:\"Array\"}],output:\"Array\",\nstyle:\"list_blocks\",tooltip:\"%{BKY_LISTS_SORT_TOOLTIP}\",helpUrl:\"%{BKY_LISTS_SORT_HELPURL}\"})}};\nblocks$$module$build$src$blocks$lists.lists_split={init:function(){const a=$.fromJson$$module$build$src$core$field_registry({type:\"field_dropdown\",options:[[$.Msg$$module$build$src$core$msg.LISTS_SPLIT_LIST_FROM_TEXT,\"SPLIT\"],[$.Msg$$module$build$src$core$msg.LISTS_SPLIT_TEXT_FROM_LIST,\"JOIN\"]]});if(!a)throw Error(\"field_dropdown not found\");a.setValidator(b=>{this.updateType_(b)});this.setHelpUrl($.Msg$$module$build$src$core$msg.LISTS_SPLIT_HELPURL);this.setStyle(\"list_blocks\");this.appendValueInput(\"INPUT\").setCheck(\"String\").appendField(a,\n\"MODE\");this.appendValueInput(\"DELIM\").setCheck(\"String\").appendField($.Msg$$module$build$src$core$msg.LISTS_SPLIT_WITH_DELIMITER);this.setInputsInline(!0);this.setOutput(!0,\"Array\");this.setTooltip(()=>{const b=this.getFieldValue(\"MODE\");if(b===\"SPLIT\")return $.Msg$$module$build$src$core$msg.LISTS_SPLIT_TOOLTIP_SPLIT;if(b===\"JOIN\")return $.Msg$$module$build$src$core$msg.LISTS_SPLIT_TOOLTIP_JOIN;throw Error(\"Unknown mode: \"+b);})},updateType_:function(a){if(this.getFieldValue(\"MODE\")!==a){const b=\nthis.getInput(\"INPUT\").connection;b.setShadowDom(null);const c=b.targetBlock();c&&(b.disconnect(),c.isShadow()?c.dispose(!1):this.bumpNeighbours())}a===\"SPLIT\"?(this.outputConnection.setCheck(\"Array\"),this.getInput(\"INPUT\").setCheck(\"String\")):(this.outputConnection.setCheck(\"String\"),this.getInput(\"INPUT\").setCheck(\"Array\"))},mutationToDom:function(){const a=$.createElement$$module$build$src$core$utils$xml(\"mutation\");a.setAttribute(\"mode\",this.getFieldValue(\"MODE\"));return a},domToMutation:function(a){this.updateType_(a.getAttribute(\"mode\"))},\nsaveExtraState:function(){return{mode:this.getFieldValue(\"MODE\")}},loadExtraState:function(a){this.updateType_(a.mode)}};$.defineBlocks$$module$build$src$core$common(blocks$$module$build$src$blocks$lists);var module$build$src$blocks$lists={blocks:blocks$$module$build$src$blocks$lists};var blocks$$module$build$src$blocks$blocks=Object.assign({},blocks$$module$build$src$blocks$lists,blocks$$module$build$src$blocks$logic,blocks$$module$build$src$blocks$loops,blocks$$module$build$src$blocks$math,blocks$$module$build$src$blocks$procedures,blocks$$module$build$src$blocks$text,blocks$$module$build$src$blocks$variables,blocks$$module$build$src$blocks$variables_dynamic),module$build$src$blocks$blocks={blocks:blocks$$module$build$src$blocks$blocks,lists:module$build$src$blocks$lists,logic:module$build$src$blocks$logic,\nloops:module$build$src$blocks$loops,math:module$build$src$blocks$math,procedures:module$build$src$blocks$procedures,texts:module$build$src$blocks$text,variables:module$build$src$blocks$variables,variablesDynamic:module$build$src$blocks$variables_dynamic};\nmodule$build$src$blocks$blocks.__namespace__=$;\nreturn module$build$src$blocks$blocks;\n}));\n\n\n//# sourceMappingURL=blocks_compressed.js.map\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/blocks_compressed.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/index.js": +/*!***************************************!*\ + !*** ./node_modules/blockly/index.js ***! + \***************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! blockly/core */ \"./node_modules/blockly/blockly_compressed.js\"), __webpack_require__(/*! blockly/msg/en */ \"./node_modules/blockly/msg/en.js\"), __webpack_require__(/*! blockly/blocks */ \"./node_modules/blockly/blocks_compressed.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function(Blockly, en, blocks) {\n/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Main entrypoint for blockly package. Via its UMD wrapper,\n * this module loads blockly/core, blockly/blocks and blockly/msg/en\n * and then calls setLocale(en).\n *\n * This entrypoint previously also loaded one or more generators\n * (JavaScript in browser, all five in node.js environments) but it no\n * longer makes sense to do so because of changes to generators\n * exports (they no longer have the side effect of defining\n * Blockly.JavaScript, etc., when loaded as modules).\n */\n\n/* eslint-disable */\n'use strict';\n\n// Include the EN Locale by default.\nBlockly.setLocale(en);\n\nreturn Blockly;\n}));\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/index.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/index.mjs": +/*!****************************************!*\ + !*** ./node_modules/blockly/index.mjs ***! + \****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Block: () => (/* binding */ Block),\n/* harmony export */ BlockFlyoutInflater: () => (/* binding */ BlockFlyoutInflater),\n/* harmony export */ BlockNavigationPolicy: () => (/* binding */ BlockNavigationPolicy),\n/* harmony export */ BlockSvg: () => (/* binding */ BlockSvg),\n/* harmony export */ Blocks: () => (/* binding */ Blocks),\n/* harmony export */ ButtonFlyoutInflater: () => (/* binding */ ButtonFlyoutInflater),\n/* harmony export */ COLLAPSED_FIELD_NAME: () => (/* binding */ COLLAPSED_FIELD_NAME),\n/* harmony export */ COLLAPSED_INPUT_NAME: () => (/* binding */ COLLAPSED_INPUT_NAME),\n/* harmony export */ COLLAPSE_CHARS: () => (/* binding */ COLLAPSE_CHARS),\n/* harmony export */ CodeGenerator: () => (/* binding */ CodeGenerator),\n/* harmony export */ CollapsibleToolboxCategory: () => (/* binding */ CollapsibleToolboxCategory),\n/* harmony export */ ComponentManager: () => (/* binding */ ComponentManager),\n/* harmony export */ Connection: () => (/* binding */ Connection),\n/* harmony export */ ConnectionChecker: () => (/* binding */ ConnectionChecker),\n/* harmony export */ ConnectionDB: () => (/* binding */ ConnectionDB),\n/* harmony export */ ConnectionNavigationPolicy: () => (/* binding */ ConnectionNavigationPolicy),\n/* harmony export */ ConnectionType: () => (/* binding */ ConnectionType),\n/* harmony export */ ContextMenu: () => (/* binding */ ContextMenu),\n/* harmony export */ ContextMenuItems: () => (/* binding */ ContextMenuItems),\n/* harmony export */ ContextMenuRegistry: () => (/* binding */ ContextMenuRegistry),\n/* harmony export */ Css: () => (/* binding */ Css),\n/* harmony export */ DELETE_VARIABLE_ID: () => (/* binding */ DELETE_VARIABLE_ID),\n/* harmony export */ DeleteArea: () => (/* binding */ DeleteArea),\n/* harmony export */ DragTarget: () => (/* binding */ DragTarget),\n/* harmony export */ DropDownDiv: () => (/* binding */ DropDownDiv),\n/* harmony export */ Events: () => (/* binding */ Events),\n/* harmony export */ Extensions: () => (/* binding */ Extensions),\n/* harmony export */ Field: () => (/* binding */ Field),\n/* harmony export */ FieldCheckbox: () => (/* binding */ FieldCheckbox),\n/* harmony export */ FieldDropdown: () => (/* binding */ FieldDropdown),\n/* harmony export */ FieldImage: () => (/* binding */ FieldImage),\n/* harmony export */ FieldLabel: () => (/* binding */ FieldLabel),\n/* harmony export */ FieldLabelSerializable: () => (/* binding */ FieldLabelSerializable),\n/* harmony export */ FieldNavigationPolicy: () => (/* binding */ FieldNavigationPolicy),\n/* harmony export */ FieldNumber: () => (/* binding */ FieldNumber),\n/* harmony export */ FieldTextInput: () => (/* binding */ FieldTextInput),\n/* harmony export */ FieldVariable: () => (/* binding */ FieldVariable),\n/* harmony export */ Flyout: () => (/* binding */ Flyout),\n/* harmony export */ FlyoutButton: () => (/* binding */ FlyoutButton),\n/* harmony export */ FlyoutButtonNavigationPolicy: () => (/* binding */ FlyoutButtonNavigationPolicy),\n/* harmony export */ FlyoutItem: () => (/* binding */ FlyoutItem),\n/* harmony export */ FlyoutMetricsManager: () => (/* binding */ FlyoutMetricsManager),\n/* harmony export */ FlyoutNavigationPolicy: () => (/* binding */ FlyoutNavigationPolicy),\n/* harmony export */ FlyoutNavigator: () => (/* binding */ FlyoutNavigator),\n/* harmony export */ FlyoutSeparator: () => (/* binding */ FlyoutSeparator),\n/* harmony export */ FlyoutSeparatorNavigationPolicy: () => (/* binding */ FlyoutSeparatorNavigationPolicy),\n/* harmony export */ FocusManager: () => (/* binding */ FocusManager),\n/* harmony export */ FocusableTreeTraverser: () => (/* binding */ FocusableTreeTraverser),\n/* harmony export */ Generator: () => (/* binding */ Generator),\n/* harmony export */ Gesture: () => (/* binding */ Gesture),\n/* harmony export */ Grid: () => (/* binding */ Grid),\n/* harmony export */ HorizontalFlyout: () => (/* binding */ HorizontalFlyout),\n/* harmony export */ INPUT_VALUE: () => (/* binding */ INPUT_VALUE),\n/* harmony export */ Input: () => (/* binding */ Input),\n/* harmony export */ InsertionMarkerPreviewer: () => (/* binding */ InsertionMarkerPreviewer),\n/* harmony export */ KeyboardNavigationController: () => (/* binding */ KeyboardNavigationController),\n/* harmony export */ LabelFlyoutInflater: () => (/* binding */ LabelFlyoutInflater),\n/* harmony export */ LineCursor: () => (/* binding */ LineCursor),\n/* harmony export */ Marker: () => (/* binding */ Marker),\n/* harmony export */ MarkerManager: () => (/* binding */ MarkerManager),\n/* harmony export */ Menu: () => (/* binding */ Menu),\n/* harmony export */ MenuItem: () => (/* binding */ MenuItem),\n/* harmony export */ MetricsManager: () => (/* binding */ MetricsManager),\n/* harmony export */ Msg: () => (/* binding */ Msg),\n/* harmony export */ NEXT_STATEMENT: () => (/* binding */ NEXT_STATEMENT),\n/* harmony export */ Names: () => (/* binding */ Names),\n/* harmony export */ Navigator: () => (/* binding */ Navigator),\n/* harmony export */ OPPOSITE_TYPE: () => (/* binding */ OPPOSITE_TYPE),\n/* harmony export */ OUTPUT_VALUE: () => (/* binding */ OUTPUT_VALUE),\n/* harmony export */ Options: () => (/* binding */ Options),\n/* harmony export */ PREVIOUS_STATEMENT: () => (/* binding */ PREVIOUS_STATEMENT),\n/* harmony export */ PROCEDURE_CATEGORY_NAME: () => (/* binding */ PROCEDURE_CATEGORY_NAME),\n/* harmony export */ Procedures: () => (/* binding */ Procedures),\n/* harmony export */ RENAME_VARIABLE_ID: () => (/* binding */ RENAME_VARIABLE_ID),\n/* harmony export */ RenderedConnection: () => (/* binding */ RenderedConnection),\n/* harmony export */ Scrollbar: () => (/* binding */ Scrollbar),\n/* harmony export */ ScrollbarPair: () => (/* binding */ ScrollbarPair),\n/* harmony export */ SeparatorFlyoutInflater: () => (/* binding */ SeparatorFlyoutInflater),\n/* harmony export */ ShortcutItems: () => (/* binding */ ShortcutItems),\n/* harmony export */ ShortcutRegistry: () => (/* binding */ ShortcutRegistry),\n/* harmony export */ TOOLBOX_AT_BOTTOM: () => (/* binding */ TOOLBOX_AT_BOTTOM),\n/* harmony export */ TOOLBOX_AT_LEFT: () => (/* binding */ TOOLBOX_AT_LEFT),\n/* harmony export */ TOOLBOX_AT_RIGHT: () => (/* binding */ TOOLBOX_AT_RIGHT),\n/* harmony export */ TOOLBOX_AT_TOP: () => (/* binding */ TOOLBOX_AT_TOP),\n/* harmony export */ Theme: () => (/* binding */ Theme),\n/* harmony export */ ThemeManager: () => (/* binding */ ThemeManager),\n/* harmony export */ Themes: () => (/* binding */ Themes),\n/* harmony export */ Toast: () => (/* binding */ Toast),\n/* harmony export */ Toolbox: () => (/* binding */ Toolbox),\n/* harmony export */ ToolboxCategory: () => (/* binding */ ToolboxCategory),\n/* harmony export */ ToolboxItem: () => (/* binding */ ToolboxItem),\n/* harmony export */ ToolboxSeparator: () => (/* binding */ ToolboxSeparator),\n/* harmony export */ Tooltip: () => (/* binding */ Tooltip),\n/* harmony export */ Touch: () => (/* binding */ Touch),\n/* harmony export */ Trashcan: () => (/* binding */ Trashcan),\n/* harmony export */ UnattachedFieldError: () => (/* binding */ UnattachedFieldError),\n/* harmony export */ VARIABLE_CATEGORY_NAME: () => (/* binding */ VARIABLE_CATEGORY_NAME),\n/* harmony export */ VARIABLE_DYNAMIC_CATEGORY_NAME: () => (/* binding */ VARIABLE_DYNAMIC_CATEGORY_NAME),\n/* harmony export */ VERSION: () => (/* binding */ VERSION),\n/* harmony export */ VariableMap: () => (/* binding */ VariableMap),\n/* harmony export */ VariableModel: () => (/* binding */ VariableModel),\n/* harmony export */ Variables: () => (/* binding */ Variables),\n/* harmony export */ VariablesDynamic: () => (/* binding */ VariablesDynamic),\n/* harmony export */ VerticalFlyout: () => (/* binding */ VerticalFlyout),\n/* harmony export */ WidgetDiv: () => (/* binding */ WidgetDiv),\n/* harmony export */ Workspace: () => (/* binding */ Workspace),\n/* harmony export */ WorkspaceAudio: () => (/* binding */ WorkspaceAudio),\n/* harmony export */ WorkspaceDragger: () => (/* binding */ WorkspaceDragger),\n/* harmony export */ WorkspaceNavigationPolicy: () => (/* binding */ WorkspaceNavigationPolicy),\n/* harmony export */ WorkspaceSvg: () => (/* binding */ WorkspaceSvg),\n/* harmony export */ Xml: () => (/* binding */ Xml),\n/* harmony export */ ZoomControls: () => (/* binding */ ZoomControls),\n/* harmony export */ blockAnimations: () => (/* binding */ blockAnimations),\n/* harmony export */ blockRendering: () => (/* binding */ blockRendering),\n/* harmony export */ browserEvents: () => (/* binding */ browserEvents),\n/* harmony export */ bubbles: () => (/* binding */ bubbles),\n/* harmony export */ bumpObjects: () => (/* binding */ bumpObjects),\n/* harmony export */ clipboard: () => (/* binding */ clipboard),\n/* harmony export */ comments: () => (/* binding */ comments),\n/* harmony export */ common: () => (/* binding */ common),\n/* harmony export */ config: () => (/* binding */ config),\n/* harmony export */ constants: () => (/* binding */ constants),\n/* harmony export */ defineBlocksWithJsonArray: () => (/* binding */ defineBlocksWithJsonArray),\n/* harmony export */ dialog: () => (/* binding */ dialog),\n/* harmony export */ dragging: () => (/* binding */ dragging),\n/* harmony export */ fieldRegistry: () => (/* binding */ fieldRegistry),\n/* harmony export */ geras: () => (/* binding */ geras),\n/* harmony export */ getFocusManager: () => (/* binding */ getFocusManager),\n/* harmony export */ getMainWorkspace: () => (/* binding */ getMainWorkspace),\n/* harmony export */ getSelected: () => (/* binding */ getSelected),\n/* harmony export */ hasBubble: () => (/* binding */ hasBubble),\n/* harmony export */ hideChaff: () => (/* binding */ hideChaff),\n/* harmony export */ icons: () => (/* binding */ icons),\n/* harmony export */ inject: () => (/* binding */ inject),\n/* harmony export */ inputs: () => (/* binding */ inputs),\n/* harmony export */ isCopyable: () => (/* binding */ isCopyable),\n/* harmony export */ isDeletable: () => (/* binding */ isDeletable),\n/* harmony export */ isDraggable: () => (/* binding */ isDraggable),\n/* harmony export */ isIcon: () => (/* binding */ isIcon),\n/* harmony export */ isObservable: () => (/* binding */ isObservable),\n/* harmony export */ isPaster: () => (/* binding */ isPaster),\n/* harmony export */ isRenderedElement: () => (/* binding */ isRenderedElement),\n/* harmony export */ isSelectable: () => (/* binding */ isSelectable),\n/* harmony export */ isSerializable: () => (/* binding */ isSerializable),\n/* harmony export */ isVariableBackedParameterModel: () => (/* binding */ isVariableBackedParameterModel),\n/* harmony export */ keyboardNavigationController: () => (/* binding */ keyboardNavigationController),\n/* harmony export */ layers: () => (/* binding */ layers),\n/* harmony export */ navigateBlock: () => (/* binding */ navigateBlock),\n/* harmony export */ navigateStacks: () => (/* binding */ navigateStacks),\n/* harmony export */ procedures: () => (/* binding */ procedures),\n/* harmony export */ registry: () => (/* binding */ registry),\n/* harmony export */ renderManagement: () => (/* binding */ renderManagement),\n/* harmony export */ serialization: () => (/* binding */ serialization),\n/* harmony export */ setLocale: () => (/* binding */ setLocale),\n/* harmony export */ setParentContainer: () => (/* binding */ setParentContainer),\n/* harmony export */ svgResize: () => (/* binding */ svgResize),\n/* harmony export */ thrasos: () => (/* binding */ thrasos),\n/* harmony export */ uiPosition: () => (/* binding */ uiPosition),\n/* harmony export */ utils: () => (/* binding */ utils),\n/* harmony export */ zelos: () => (/* binding */ zelos)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ \"./node_modules/blockly/index.js\");\n\nconst {\n Block,\n BlockFlyoutInflater,\n BlockNavigationPolicy,\n BlockSvg,\n Blocks,\n ButtonFlyoutInflater,\n COLLAPSED_FIELD_NAME,\n COLLAPSED_INPUT_NAME,\n COLLAPSE_CHARS,\n CodeGenerator,\n CollapsibleToolboxCategory,\n ComponentManager,\n Connection,\n ConnectionChecker,\n ConnectionDB,\n ConnectionNavigationPolicy,\n ConnectionType,\n ContextMenu,\n ContextMenuItems,\n ContextMenuRegistry,\n Css,\n DELETE_VARIABLE_ID,\n DeleteArea,\n DragTarget,\n DropDownDiv,\n Events,\n Extensions,\n Field,\n FieldCheckbox,\n FieldDropdown,\n FieldImage,\n FieldLabel,\n FieldLabelSerializable,\n FieldNavigationPolicy,\n FieldNumber,\n FieldTextInput,\n FieldVariable,\n Flyout,\n FlyoutButton,\n FlyoutButtonNavigationPolicy,\n FlyoutItem,\n FlyoutMetricsManager,\n FlyoutNavigationPolicy,\n FlyoutNavigator,\n FlyoutSeparator,\n FlyoutSeparatorNavigationPolicy,\n FocusManager,\n FocusableTreeTraverser,\n Generator,\n Gesture,\n Grid,\n HorizontalFlyout,\n INPUT_VALUE,\n Input,\n InsertionMarkerPreviewer,\n KeyboardNavigationController,\n LabelFlyoutInflater,\n LineCursor,\n Marker,\n MarkerManager,\n Menu,\n MenuItem,\n MetricsManager,\n Msg,\n NEXT_STATEMENT,\n Names,\n Navigator,\n OPPOSITE_TYPE,\n OUTPUT_VALUE,\n Options,\n PREVIOUS_STATEMENT,\n PROCEDURE_CATEGORY_NAME,\n Procedures,\n RENAME_VARIABLE_ID,\n RenderedConnection,\n Scrollbar,\n ScrollbarPair,\n SeparatorFlyoutInflater,\n ShortcutItems,\n ShortcutRegistry,\n TOOLBOX_AT_BOTTOM,\n TOOLBOX_AT_LEFT,\n TOOLBOX_AT_RIGHT,\n TOOLBOX_AT_TOP,\n Theme,\n ThemeManager,\n Themes,\n Toast,\n Toolbox,\n ToolboxCategory,\n ToolboxItem,\n ToolboxSeparator,\n Tooltip,\n Touch,\n Trashcan,\n UnattachedFieldError,\n VARIABLE_CATEGORY_NAME,\n VARIABLE_DYNAMIC_CATEGORY_NAME,\n VERSION,\n VariableMap,\n VariableModel,\n Variables,\n VariablesDynamic,\n VerticalFlyout,\n WidgetDiv,\n Workspace,\n WorkspaceAudio,\n WorkspaceDragger,\n WorkspaceNavigationPolicy,\n WorkspaceSvg,\n Xml,\n ZoomControls,\n blockAnimations,\n blockRendering,\n browserEvents,\n bubbles,\n bumpObjects,\n clipboard,\n comments,\n common,\n config,\n constants,\n defineBlocksWithJsonArray,\n dialog,\n dragging,\n fieldRegistry,\n geras,\n getFocusManager,\n getMainWorkspace,\n getSelected,\n hasBubble,\n hideChaff,\n icons,\n inject,\n inputs,\n isCopyable,\n isDeletable,\n isDraggable,\n isIcon,\n isObservable,\n isPaster,\n isRenderedElement,\n isSelectable,\n isSerializable,\n isVariableBackedParameterModel,\n keyboardNavigationController,\n layers,\n navigateBlock,\n navigateStacks,\n procedures,\n registry,\n renderManagement,\n serialization,\n setLocale,\n setParentContainer,\n svgResize,\n thrasos,\n uiPosition,\n utils,\n zelos,\n} = _index_js__WEBPACK_IMPORTED_MODULE_0__;\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/index.mjs?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/msg/en.js": +/*!****************************************!*\ + !*** ./node_modules/blockly/msg/en.js ***! + \****************************************/ +/***/ (function(module, exports) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{ var key, messages; }\n}(this, function() {\n// This file was automatically generated. Do not modify.\n\n'use strict';\n\nvar Blockly = Blockly || { Msg: Object.create(null) };\n\nBlockly.Msg[\"ADD_COMMENT\"] = \"Add Comment\";\nBlockly.Msg[\"ALT_KEY\"] = \"Alt\";\nBlockly.Msg[\"CANNOT_DELETE_VARIABLE_PROCEDURE\"] = \"Can't delete the variable '%1' because it's part of the definition of the function '%2'\";\nBlockly.Msg[\"CHANGE_VALUE_TITLE\"] = \"Change value:\";\nBlockly.Msg[\"CHROME_OS\"] = \"ChromeOS\";\nBlockly.Msg[\"CLEAN_UP\"] = \"Clean up Blocks\";\nBlockly.Msg[\"CLOSE\"] = \"Close\";\nBlockly.Msg[\"COLLAPSED_WARNINGS_WARNING\"] = \"Collapsed blocks contain warnings.\";\nBlockly.Msg[\"COLLAPSE_ALL\"] = \"Collapse Blocks\";\nBlockly.Msg[\"COLLAPSE_BLOCK\"] = \"Collapse Block\";\nBlockly.Msg[\"COLOUR_BLEND_COLOUR1\"] = \"colour 1\";\nBlockly.Msg[\"COLOUR_BLEND_COLOUR2\"] = \"colour 2\";\nBlockly.Msg[\"COLOUR_BLEND_HELPURL\"] = \"https://meyerweb.com/eric/tools/color-blend/#:::rgbp\";\nBlockly.Msg[\"COLOUR_BLEND_RATIO\"] = \"ratio\";\nBlockly.Msg[\"COLOUR_BLEND_TITLE\"] = \"blend\";\nBlockly.Msg[\"COLOUR_BLEND_TOOLTIP\"] = \"Blends two colours together with a given ratio (0.0 - 1.0).\";\nBlockly.Msg[\"COLOUR_PICKER_HELPURL\"] = \"https://en.wikipedia.org/wiki/Color\";\nBlockly.Msg[\"COLOUR_PICKER_TOOLTIP\"] = \"Choose a colour from the palette.\";\nBlockly.Msg[\"COLOUR_RANDOM_HELPURL\"] = \"http://randomcolour.com\";\nBlockly.Msg[\"COLOUR_RANDOM_TITLE\"] = \"random colour\";\nBlockly.Msg[\"COLOUR_RANDOM_TOOLTIP\"] = \"Choose a colour at random.\";\nBlockly.Msg[\"COLOUR_RGB_BLUE\"] = \"blue\";\nBlockly.Msg[\"COLOUR_RGB_GREEN\"] = \"green\";\nBlockly.Msg[\"COLOUR_RGB_HELPURL\"] = \"https://www.december.com/html/spec/colorpercompact.html\";\nBlockly.Msg[\"COLOUR_RGB_RED\"] = \"red\";\nBlockly.Msg[\"COLOUR_RGB_TITLE\"] = \"colour with\";\nBlockly.Msg[\"COLOUR_RGB_TOOLTIP\"] = \"Create a colour with the specified amount of red, green, and blue. All values must be between 0 and 100.\";\nBlockly.Msg[\"COMMAND_KEY\"] = \"⌘ Command\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#loop-termination-blocks\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK\"] = \"break out of loop\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE\"] = \"continue with next iteration of loop\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK\"] = \"Break out of the containing loop.\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE\"] = \"Skip the rest of this loop, and continue with the next iteration.\";\nBlockly.Msg[\"CONTROLS_FLOW_STATEMENTS_WARNING\"] = \"Warning: This block may only be used within a loop.\";\nBlockly.Msg[\"CONTROLS_FOREACH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#for-each\";\nBlockly.Msg[\"CONTROLS_FOREACH_TITLE\"] = \"for each item %1 in list %2\";\nBlockly.Msg[\"CONTROLS_FOREACH_TOOLTIP\"] = \"For each item in a list, set the variable '%1' to the item, and then do some statements.\";\nBlockly.Msg[\"CONTROLS_FOR_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#count-with\";\nBlockly.Msg[\"CONTROLS_FOR_TITLE\"] = \"count with %1 from %2 to %3 by %4\";\nBlockly.Msg[\"CONTROLS_FOR_TOOLTIP\"] = \"Have the variable '%1' take on the values from the start number to the end number, counting by the specified interval, and do the specified blocks.\";\nBlockly.Msg[\"CONTROLS_IF_ELSEIF_TOOLTIP\"] = \"Add a condition to the if block.\";\nBlockly.Msg[\"CONTROLS_IF_ELSE_TOOLTIP\"] = \"Add a final, catch-all condition to the if block.\";\nBlockly.Msg[\"CONTROLS_IF_HELPURL\"] = \"https://github.com/google/blockly/wiki/IfElse\";\nBlockly.Msg[\"CONTROLS_IF_IF_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this if block.\";\nBlockly.Msg[\"CONTROLS_IF_MSG_ELSE\"] = \"else\";\nBlockly.Msg[\"CONTROLS_IF_MSG_ELSEIF\"] = \"else if\";\nBlockly.Msg[\"CONTROLS_IF_MSG_IF\"] = \"if\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_1\"] = \"If a value is true, then do some statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_2\"] = \"If a value is true, then do the first block of statements. Otherwise, do the second block of statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_3\"] = \"If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements.\";\nBlockly.Msg[\"CONTROLS_IF_TOOLTIP_4\"] = \"If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements. If none of the values are true, do the last block of statements.\";\nBlockly.Msg[\"CONTROLS_REPEAT_HELPURL\"] = \"https://en.wikipedia.org/wiki/For_loop\";\nBlockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"] = \"do\";\nBlockly.Msg[\"CONTROLS_REPEAT_TITLE\"] = \"repeat %1 times\";\nBlockly.Msg[\"CONTROLS_REPEAT_TOOLTIP\"] = \"Do some statements several times.\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_HELPURL\"] = \"https://github.com/google/blockly/wiki/Loops#repeat\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_OPERATOR_UNTIL\"] = \"repeat until\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_OPERATOR_WHILE\"] = \"repeat while\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL\"] = \"While a value is false, then do some statements.\";\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_TOOLTIP_WHILE\"] = \"While a value is true, then do some statements.\";\nBlockly.Msg[\"CONTROL_KEY\"] = \"Ctrl\";\nBlockly.Msg[\"COPY_SHORTCUT\"] = \"Copy\";\nBlockly.Msg[\"CUT_SHORTCUT\"] = \"Cut\";\nBlockly.Msg[\"DELETE_ALL_BLOCKS\"] = \"Delete all %1 blocks?\";\nBlockly.Msg[\"DELETE_BLOCK\"] = \"Delete Block\";\nBlockly.Msg[\"DELETE_VARIABLE\"] = \"Delete the '%1' variable\";\nBlockly.Msg[\"DELETE_VARIABLE_CONFIRMATION\"] = \"Delete %1 uses of the '%2' variable?\";\nBlockly.Msg[\"DELETE_X_BLOCKS\"] = \"Delete %1 Blocks\";\nBlockly.Msg[\"DIALOG_CANCEL\"] = \"Cancel\";\nBlockly.Msg[\"DIALOG_OK\"] = \"OK\";\nBlockly.Msg[\"DISABLE_BLOCK\"] = \"Disable Block\";\nBlockly.Msg[\"DUPLICATE_BLOCK\"] = \"Duplicate\";\nBlockly.Msg[\"DUPLICATE_COMMENT\"] = \"Duplicate Comment\";\nBlockly.Msg[\"EDIT_BLOCK_CONTENTS\"] = \"Edit Block contents\";\nBlockly.Msg[\"ENABLE_BLOCK\"] = \"Enable Block\";\nBlockly.Msg[\"EXPAND_ALL\"] = \"Expand Blocks\";\nBlockly.Msg[\"EXPAND_BLOCK\"] = \"Expand Block\";\nBlockly.Msg[\"EXTERNAL_INPUTS\"] = \"External Inputs\";\nBlockly.Msg[\"HELP\"] = \"Help\";\nBlockly.Msg[\"HELP_PROMPT\"] = \"Press %1 for help on keyboard controls\";\nBlockly.Msg[\"INLINE_INPUTS\"] = \"Inline Inputs\";\nBlockly.Msg[\"KEYBOARD_NAV_CONSTRAINED_MOVE_HINT\"] = \"Use the arrow keys to move, then %1 to accept the position\";\nBlockly.Msg[\"KEYBOARD_NAV_COPIED_HINT\"] = \"Copied. Press %1 to paste.\";\nBlockly.Msg[\"KEYBOARD_NAV_CUT_HINT\"] = \"Cut. Press %1 to paste.\";\nBlockly.Msg[\"KEYBOARD_NAV_UNCONSTRAINED_MOVE_HINT\"] = \"Hold %1 and use arrow keys to move freely, then %2 to accept the position\";\nBlockly.Msg[\"LINUX\"] = \"Linux\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-empty-list\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_TITLE\"] = \"create empty list\";\nBlockly.Msg[\"LISTS_CREATE_EMPTY_TOOLTIP\"] = \"Returns a list, of length 0, containing no data records\";\nBlockly.Msg[\"LISTS_CREATE_WITH_CONTAINER_TITLE_ADD\"] = \"list\";\nBlockly.Msg[\"LISTS_CREATE_WITH_CONTAINER_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this list block.\";\nBlockly.Msg[\"LISTS_CREATE_WITH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-list-with\";\nBlockly.Msg[\"LISTS_CREATE_WITH_INPUT_WITH\"] = \"create list with\";\nBlockly.Msg[\"LISTS_CREATE_WITH_ITEM_TOOLTIP\"] = \"Add an item to the list.\";\nBlockly.Msg[\"LISTS_CREATE_WITH_TOOLTIP\"] = \"Create a list with any number of items.\";\nBlockly.Msg[\"LISTS_GET_INDEX_FIRST\"] = \"first\";\nBlockly.Msg[\"LISTS_GET_INDEX_FROM_END\"] = \"# from end\";\nBlockly.Msg[\"LISTS_GET_INDEX_FROM_START\"] = \"#\";\nBlockly.Msg[\"LISTS_GET_INDEX_GET\"] = \"get\";\nBlockly.Msg[\"LISTS_GET_INDEX_GET_REMOVE\"] = \"get and remove\";\nBlockly.Msg[\"LISTS_GET_INDEX_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list\";\nBlockly.Msg[\"LISTS_GET_INDEX_LAST\"] = \"last\";\nBlockly.Msg[\"LISTS_GET_INDEX_RANDOM\"] = \"random\";\nBlockly.Msg[\"LISTS_GET_INDEX_REMOVE\"] = \"remove\";\nBlockly.Msg[\"LISTS_GET_INDEX_TAIL\"] = \"\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_FIRST\"] = \"Returns the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_FROM\"] = \"Returns the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_LAST\"] = \"Returns the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_RANDOM\"] = \"Returns a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST\"] = \"Removes and returns the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM\"] = \"Removes and returns the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST\"] = \"Removes and returns the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM\"] = \"Removes and returns a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST\"] = \"Removes the first item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM\"] = \"Removes the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST\"] = \"Removes the last item in a list.\";\nBlockly.Msg[\"LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM\"] = \"Removes a random item in a list.\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_FROM_END\"] = \"to # from end\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_FROM_START\"] = \"to #\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_END_LAST\"] = \"to last\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#getting-a-sublist\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FIRST\"] = \"get sub-list from first\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FROM_END\"] = \"get sub-list from # from end\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_START_FROM_START\"] = \"get sub-list from #\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_TAIL\"] = \"\";\nBlockly.Msg[\"LISTS_GET_SUBLIST_TOOLTIP\"] = \"Creates a copy of the specified portion of a list.\";\nBlockly.Msg[\"LISTS_INDEX_FROM_END_TOOLTIP\"] = \"%1 is the last item.\";\nBlockly.Msg[\"LISTS_INDEX_FROM_START_TOOLTIP\"] = \"%1 is the first item.\";\nBlockly.Msg[\"LISTS_INDEX_OF_FIRST\"] = \"find first occurrence of item\";\nBlockly.Msg[\"LISTS_INDEX_OF_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#finding-items-in-a-list\";\nBlockly.Msg[\"LISTS_INDEX_OF_LAST\"] = \"find last occurrence of item\";\nBlockly.Msg[\"LISTS_INDEX_OF_TOOLTIP\"] = \"Returns the index of the first/last occurrence of the item in the list. Returns %1 if item is not found.\";\nBlockly.Msg[\"LISTS_INLIST\"] = \"in list\";\nBlockly.Msg[\"LISTS_ISEMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#is-empty\";\nBlockly.Msg[\"LISTS_ISEMPTY_TITLE\"] = \"%1 is empty\";\nBlockly.Msg[\"LISTS_ISEMPTY_TOOLTIP\"] = \"Returns true if the list is empty.\";\nBlockly.Msg[\"LISTS_LENGTH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#length-of\";\nBlockly.Msg[\"LISTS_LENGTH_TITLE\"] = \"length of %1\";\nBlockly.Msg[\"LISTS_LENGTH_TOOLTIP\"] = \"Returns the length of a list.\";\nBlockly.Msg[\"LISTS_REPEAT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#create-list-with\";\nBlockly.Msg[\"LISTS_REPEAT_TITLE\"] = \"create list with item %1 repeated %2 times\";\nBlockly.Msg[\"LISTS_REPEAT_TOOLTIP\"] = \"Creates a list consisting of the given value repeated the specified number of times.\";\nBlockly.Msg[\"LISTS_REVERSE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#reversing-a-list\";\nBlockly.Msg[\"LISTS_REVERSE_MESSAGE0\"] = \"reverse %1\";\nBlockly.Msg[\"LISTS_REVERSE_TOOLTIP\"] = \"Reverse a copy of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#in-list--set\";\nBlockly.Msg[\"LISTS_SET_INDEX_INPUT_TO\"] = \"as\";\nBlockly.Msg[\"LISTS_SET_INDEX_INSERT\"] = \"insert at\";\nBlockly.Msg[\"LISTS_SET_INDEX_SET\"] = \"set\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST\"] = \"Inserts the item at the start of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_FROM\"] = \"Inserts the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_LAST\"] = \"Append the item to the end of a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM\"] = \"Inserts the item randomly in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_FIRST\"] = \"Sets the first item in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_FROM\"] = \"Sets the item at the specified position in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_LAST\"] = \"Sets the last item in a list.\";\nBlockly.Msg[\"LISTS_SET_INDEX_TOOLTIP_SET_RANDOM\"] = \"Sets a random item in a list.\";\nBlockly.Msg[\"LISTS_SORT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#sorting-a-list\";\nBlockly.Msg[\"LISTS_SORT_ORDER_ASCENDING\"] = \"ascending\";\nBlockly.Msg[\"LISTS_SORT_ORDER_DESCENDING\"] = \"descending\";\nBlockly.Msg[\"LISTS_SORT_TITLE\"] = \"sort %1 %2 %3\";\nBlockly.Msg[\"LISTS_SORT_TOOLTIP\"] = \"Sort a copy of a list.\";\nBlockly.Msg[\"LISTS_SORT_TYPE_IGNORECASE\"] = \"alphabetic, ignore case\";\nBlockly.Msg[\"LISTS_SORT_TYPE_NUMERIC\"] = \"numeric\";\nBlockly.Msg[\"LISTS_SORT_TYPE_TEXT\"] = \"alphabetic\";\nBlockly.Msg[\"LISTS_SPLIT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists\";\nBlockly.Msg[\"LISTS_SPLIT_LIST_FROM_TEXT\"] = \"make list from text\";\nBlockly.Msg[\"LISTS_SPLIT_TEXT_FROM_LIST\"] = \"make text from list\";\nBlockly.Msg[\"LISTS_SPLIT_TOOLTIP_JOIN\"] = \"Join a list of texts into one text, separated by a delimiter.\";\nBlockly.Msg[\"LISTS_SPLIT_TOOLTIP_SPLIT\"] = \"Split text into a list of texts, breaking at each delimiter.\";\nBlockly.Msg[\"LISTS_SPLIT_WITH_DELIMITER\"] = \"with delimiter\";\nBlockly.Msg[\"LOGIC_BOOLEAN_FALSE\"] = \"false\";\nBlockly.Msg[\"LOGIC_BOOLEAN_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#values\";\nBlockly.Msg[\"LOGIC_BOOLEAN_TOOLTIP\"] = \"Returns either true or false.\";\nBlockly.Msg[\"LOGIC_BOOLEAN_TRUE\"] = \"true\";\nBlockly.Msg[\"LOGIC_COMPARE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Inequality_(mathematics)\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_EQ\"] = \"Return true if both inputs equal each other.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_GT\"] = \"Return true if the first input is greater than the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_GTE\"] = \"Return true if the first input is greater than or equal to the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_LT\"] = \"Return true if the first input is smaller than the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_LTE\"] = \"Return true if the first input is smaller than or equal to the second input.\";\nBlockly.Msg[\"LOGIC_COMPARE_TOOLTIP_NEQ\"] = \"Return true if both inputs are not equal to each other.\";\nBlockly.Msg[\"LOGIC_NEGATE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#not\";\nBlockly.Msg[\"LOGIC_NEGATE_TITLE\"] = \"not %1\";\nBlockly.Msg[\"LOGIC_NEGATE_TOOLTIP\"] = \"Returns true if the input is false. Returns false if the input is true.\";\nBlockly.Msg[\"LOGIC_NULL\"] = \"null\";\nBlockly.Msg[\"LOGIC_NULL_HELPURL\"] = \"https://en.wikipedia.org/wiki/Nullable_type\";\nBlockly.Msg[\"LOGIC_NULL_TOOLTIP\"] = \"Returns null.\";\nBlockly.Msg[\"LOGIC_OPERATION_AND\"] = \"and\";\nBlockly.Msg[\"LOGIC_OPERATION_HELPURL\"] = \"https://github.com/google/blockly/wiki/Logic#logical-operations\";\nBlockly.Msg[\"LOGIC_OPERATION_OR\"] = \"or\";\nBlockly.Msg[\"LOGIC_OPERATION_TOOLTIP_AND\"] = \"Return true if both inputs are true.\";\nBlockly.Msg[\"LOGIC_OPERATION_TOOLTIP_OR\"] = \"Return true if at least one of the inputs is true.\";\nBlockly.Msg[\"LOGIC_TERNARY_CONDITION\"] = \"test\";\nBlockly.Msg[\"LOGIC_TERNARY_HELPURL\"] = \"https://en.wikipedia.org/wiki/%3F:\";\nBlockly.Msg[\"LOGIC_TERNARY_IF_FALSE\"] = \"if false\";\nBlockly.Msg[\"LOGIC_TERNARY_IF_TRUE\"] = \"if true\";\nBlockly.Msg[\"LOGIC_TERNARY_TOOLTIP\"] = \"Check the condition in 'test'. If the condition is true, returns the 'if true' value; otherwise returns the 'if false' value.\";\nBlockly.Msg[\"MAC_OS\"] = \"macOS\";\nBlockly.Msg[\"MATH_ADDITION_SYMBOL\"] = \"+\";\nBlockly.Msg[\"MATH_ARITHMETIC_HELPURL\"] = \"https://en.wikipedia.org/wiki/Arithmetic\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_ADD\"] = \"Return the sum of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_DIVIDE\"] = \"Return the quotient of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_MINUS\"] = \"Return the difference of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_MULTIPLY\"] = \"Return the product of the two numbers.\";\nBlockly.Msg[\"MATH_ARITHMETIC_TOOLTIP_POWER\"] = \"Return the first number raised to the power of the second number.\";\nBlockly.Msg[\"MATH_ATAN2_HELPURL\"] = \"https://en.wikipedia.org/wiki/Atan2\";\nBlockly.Msg[\"MATH_ATAN2_TITLE\"] = \"atan2 of X:%1 Y:%2\";\nBlockly.Msg[\"MATH_ATAN2_TOOLTIP\"] = \"Return the arctangent of point (X, Y) in degrees from -180 to 180.\";\nBlockly.Msg[\"MATH_CHANGE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter\";\nBlockly.Msg[\"MATH_CHANGE_TITLE\"] = \"change %1 by %2\";\nBlockly.Msg[\"MATH_CHANGE_TOOLTIP\"] = \"Add a number to variable '%1'.\";\nBlockly.Msg[\"MATH_CONSTANT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Mathematical_constant\";\nBlockly.Msg[\"MATH_CONSTANT_TOOLTIP\"] = \"Return one of the common constants: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (infinity).\";\nBlockly.Msg[\"MATH_CONSTRAIN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Clamping_(graphics)\";\nBlockly.Msg[\"MATH_CONSTRAIN_TITLE\"] = \"constrain %1 low %2 high %3\";\nBlockly.Msg[\"MATH_CONSTRAIN_TOOLTIP\"] = \"Constrain a number to be between the specified limits (inclusive).\";\nBlockly.Msg[\"MATH_DIVISION_SYMBOL\"] = \"÷\";\nBlockly.Msg[\"MATH_IS_DIVISIBLE_BY\"] = \"is divisible by\";\nBlockly.Msg[\"MATH_IS_EVEN\"] = \"is even\";\nBlockly.Msg[\"MATH_IS_NEGATIVE\"] = \"is negative\";\nBlockly.Msg[\"MATH_IS_ODD\"] = \"is odd\";\nBlockly.Msg[\"MATH_IS_POSITIVE\"] = \"is positive\";\nBlockly.Msg[\"MATH_IS_PRIME\"] = \"is prime\";\nBlockly.Msg[\"MATH_IS_TOOLTIP\"] = \"Check if a number is an even, odd, prime, whole, positive, negative, or if it is divisible by certain number. Returns true or false.\";\nBlockly.Msg[\"MATH_IS_WHOLE\"] = \"is whole\";\nBlockly.Msg[\"MATH_MODULO_HELPURL\"] = \"https://en.wikipedia.org/wiki/Modulo_operation\";\nBlockly.Msg[\"MATH_MODULO_TITLE\"] = \"remainder of %1 ÷ %2\";\nBlockly.Msg[\"MATH_MODULO_TOOLTIP\"] = \"Return the remainder from dividing the two numbers.\";\nBlockly.Msg[\"MATH_MULTIPLICATION_SYMBOL\"] = \"×\";\nBlockly.Msg[\"MATH_NUMBER_HELPURL\"] = \"https://en.wikipedia.org/wiki/Number\";\nBlockly.Msg[\"MATH_NUMBER_TOOLTIP\"] = \"A number.\";\nBlockly.Msg[\"MATH_ONLIST_HELPURL\"] = \"\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_AVERAGE\"] = \"average of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MAX\"] = \"max of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MEDIAN\"] = \"median of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MIN\"] = \"min of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_MODE\"] = \"modes of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_RANDOM\"] = \"random item of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_STD_DEV\"] = \"standard deviation of list\";\nBlockly.Msg[\"MATH_ONLIST_OPERATOR_SUM\"] = \"sum of list\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_AVERAGE\"] = \"Return the average (arithmetic mean) of the numeric values in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MAX\"] = \"Return the largest number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MEDIAN\"] = \"Return the median number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MIN\"] = \"Return the smallest number in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_MODE\"] = \"Return a list of the most common item(s) in the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_RANDOM\"] = \"Return a random element from the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_STD_DEV\"] = \"Return the standard deviation of the list.\";\nBlockly.Msg[\"MATH_ONLIST_TOOLTIP_SUM\"] = \"Return the sum of all the numbers in the list.\";\nBlockly.Msg[\"MATH_POWER_SYMBOL\"] = \"^\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Random_number_generation\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_TITLE_RANDOM\"] = \"random fraction\";\nBlockly.Msg[\"MATH_RANDOM_FLOAT_TOOLTIP\"] = \"Return a random fraction between 0.0 (inclusive) and 1.0 (exclusive).\";\nBlockly.Msg[\"MATH_RANDOM_INT_HELPURL\"] = \"https://en.wikipedia.org/wiki/Random_number_generation\";\nBlockly.Msg[\"MATH_RANDOM_INT_TITLE\"] = \"random integer from %1 to %2\";\nBlockly.Msg[\"MATH_RANDOM_INT_TOOLTIP\"] = \"Return a random integer between the two specified limits, inclusive.\";\nBlockly.Msg[\"MATH_ROUND_HELPURL\"] = \"https://en.wikipedia.org/wiki/Rounding\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUND\"] = \"round\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUNDDOWN\"] = \"round down\";\nBlockly.Msg[\"MATH_ROUND_OPERATOR_ROUNDUP\"] = \"round up\";\nBlockly.Msg[\"MATH_ROUND_TOOLTIP\"] = \"Round a number up or down.\";\nBlockly.Msg[\"MATH_SINGLE_HELPURL\"] = \"https://en.wikipedia.org/wiki/Square_root\";\nBlockly.Msg[\"MATH_SINGLE_OP_ABSOLUTE\"] = \"absolute\";\nBlockly.Msg[\"MATH_SINGLE_OP_ROOT\"] = \"square root\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_ABS\"] = \"Return the absolute value of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_EXP\"] = \"Return e to the power of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_LN\"] = \"Return the natural logarithm of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_LOG10\"] = \"Return the base 10 logarithm of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_NEG\"] = \"Return the negation of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_POW10\"] = \"Return 10 to the power of a number.\";\nBlockly.Msg[\"MATH_SINGLE_TOOLTIP_ROOT\"] = \"Return the square root of a number.\";\nBlockly.Msg[\"MATH_SUBTRACTION_SYMBOL\"] = \"-\";\nBlockly.Msg[\"MATH_TRIG_ACOS\"] = \"acos\";\nBlockly.Msg[\"MATH_TRIG_ASIN\"] = \"asin\";\nBlockly.Msg[\"MATH_TRIG_ATAN\"] = \"atan\";\nBlockly.Msg[\"MATH_TRIG_COS\"] = \"cos\";\nBlockly.Msg[\"MATH_TRIG_HELPURL\"] = \"https://en.wikipedia.org/wiki/Trigonometric_functions\";\nBlockly.Msg[\"MATH_TRIG_SIN\"] = \"sin\";\nBlockly.Msg[\"MATH_TRIG_TAN\"] = \"tan\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ACOS\"] = \"Return the arccosine of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ASIN\"] = \"Return the arcsine of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_ATAN\"] = \"Return the arctangent of a number.\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_COS\"] = \"Return the cosine of a degree (not radian).\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_SIN\"] = \"Return the sine of a degree (not radian).\";\nBlockly.Msg[\"MATH_TRIG_TOOLTIP_TAN\"] = \"Return the tangent of a degree (not radian).\";\nBlockly.Msg[\"MOVE_BLOCK\"] = \"Move Block\";\nBlockly.Msg[\"NEW_COLOUR_VARIABLE\"] = \"Create colour variable...\";\nBlockly.Msg[\"NEW_NUMBER_VARIABLE\"] = \"Create number variable...\";\nBlockly.Msg[\"NEW_STRING_VARIABLE\"] = \"Create string variable...\";\nBlockly.Msg[\"NEW_VARIABLE\"] = \"Create variable...\";\nBlockly.Msg[\"NEW_VARIABLE_TITLE\"] = \"New variable name:\";\nBlockly.Msg[\"NEW_VARIABLE_TYPE_TITLE\"] = \"New variable type:\";\nBlockly.Msg[\"OPTION_KEY\"] = \"⌥ Option\";\nBlockly.Msg[\"ORDINAL_NUMBER_SUFFIX\"] = \"\";\nBlockly.Msg[\"PASTE_SHORTCUT\"] = \"Paste\";\nBlockly.Msg[\"PROCEDURES_ALLOW_STATEMENTS\"] = \"allow statements\";\nBlockly.Msg[\"PROCEDURES_BEFORE_PARAMS\"] = \"with:\";\nBlockly.Msg[\"PROCEDURES_CALLNORETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_CALLNORETURN_TOOLTIP\"] = \"Run the user-defined function '%1'.\";\nBlockly.Msg[\"PROCEDURES_CALLRETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_CALLRETURN_TOOLTIP\"] = \"Run the user-defined function '%1' and use its output.\";\nBlockly.Msg[\"PROCEDURES_CALL_BEFORE_PARAMS\"] = \"with:\";\nBlockly.Msg[\"PROCEDURES_CALL_DISABLED_DEF_WARNING\"] = \"Can't run the user-defined function '%1' because the definition block is disabled.\";\nBlockly.Msg[\"PROCEDURES_CREATE_DO\"] = \"Create '%1'\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_COMMENT\"] = \"Describe this function...\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_DO\"] = \"\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_PROCEDURE\"] = \"do something\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_TITLE\"] = \"to\";\nBlockly.Msg[\"PROCEDURES_DEFNORETURN_TOOLTIP\"] = \"Creates a function with no output.\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_HELPURL\"] = \"https://en.wikipedia.org/wiki/Subroutine\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_RETURN\"] = \"return\";\nBlockly.Msg[\"PROCEDURES_DEFRETURN_TOOLTIP\"] = \"Creates a function with an output.\";\nBlockly.Msg[\"PROCEDURES_DEF_DUPLICATE_WARNING\"] = \"Warning: This function has duplicate parameters.\";\nBlockly.Msg[\"PROCEDURES_HIGHLIGHT_DEF\"] = \"Highlight function definition\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_HELPURL\"] = \"https://c2.com/cgi/wiki?GuardClause\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_TOOLTIP\"] = \"If a value is true, then return a second value.\";\nBlockly.Msg[\"PROCEDURES_IFRETURN_WARNING\"] = \"Warning: This block may be used only within a function definition.\";\nBlockly.Msg[\"PROCEDURES_MUTATORARG_TITLE\"] = \"input name:\";\nBlockly.Msg[\"PROCEDURES_MUTATORARG_TOOLTIP\"] = \"Add an input to the function.\";\nBlockly.Msg[\"PROCEDURES_MUTATORCONTAINER_TITLE\"] = \"inputs\";\nBlockly.Msg[\"PROCEDURES_MUTATORCONTAINER_TOOLTIP\"] = \"Add, remove, or reorder inputs to this function.\";\nBlockly.Msg[\"REDO\"] = \"Redo\";\nBlockly.Msg[\"REMOVE_COMMENT\"] = \"Remove Comment\";\nBlockly.Msg[\"RENAME_VARIABLE\"] = \"Rename variable...\";\nBlockly.Msg[\"RENAME_VARIABLE_TITLE\"] = \"Rename all '%1' variables to:\";\nBlockly.Msg[\"SHORTCUTS_CODE_NAVIGATION\"] = \"Code navigation\";\nBlockly.Msg[\"SHORTCUTS_EDITING\"] = \"Editing\";\nBlockly.Msg[\"SHORTCUTS_GENERAL\"] = \"General\";\nBlockly.Msg[\"TEXT_APPEND_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-modification\";\nBlockly.Msg[\"TEXT_APPEND_TITLE\"] = \"to %1 append text %2\";\nBlockly.Msg[\"TEXT_APPEND_TOOLTIP\"] = \"Append some text to variable '%1'.\";\nBlockly.Msg[\"TEXT_CHANGECASE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#adjusting-text-case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_LOWERCASE\"] = \"to lower case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_TITLECASE\"] = \"to Title Case\";\nBlockly.Msg[\"TEXT_CHANGECASE_OPERATOR_UPPERCASE\"] = \"to UPPER CASE\";\nBlockly.Msg[\"TEXT_CHANGECASE_TOOLTIP\"] = \"Return a copy of the text in a different case.\";\nBlockly.Msg[\"TEXT_CHARAT_FIRST\"] = \"get first letter\";\nBlockly.Msg[\"TEXT_CHARAT_FROM_END\"] = \"get letter # from end\";\nBlockly.Msg[\"TEXT_CHARAT_FROM_START\"] = \"get letter #\";\nBlockly.Msg[\"TEXT_CHARAT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#extracting-text\";\nBlockly.Msg[\"TEXT_CHARAT_LAST\"] = \"get last letter\";\nBlockly.Msg[\"TEXT_CHARAT_RANDOM\"] = \"get random letter\";\nBlockly.Msg[\"TEXT_CHARAT_TAIL\"] = \"\";\nBlockly.Msg[\"TEXT_CHARAT_TITLE\"] = \"in text %1 %2\";\nBlockly.Msg[\"TEXT_CHARAT_TOOLTIP\"] = \"Returns the letter at the specified position.\";\nBlockly.Msg[\"TEXT_COUNT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#counting-substrings\";\nBlockly.Msg[\"TEXT_COUNT_MESSAGE0\"] = \"count %1 in %2\";\nBlockly.Msg[\"TEXT_COUNT_TOOLTIP\"] = \"Count how many times some text occurs within some other text.\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_ITEM_TOOLTIP\"] = \"Add an item to the text.\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_TITLE_JOIN\"] = \"join\";\nBlockly.Msg[\"TEXT_CREATE_JOIN_TOOLTIP\"] = \"Add, remove, or reorder sections to reconfigure this text block.\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_FROM_END\"] = \"to letter # from end\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_FROM_START\"] = \"to letter #\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_END_LAST\"] = \"to last letter\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_INPUT_IN_TEXT\"] = \"in text\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FIRST\"] = \"get substring from first letter\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FROM_END\"] = \"get substring from letter # from end\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_START_FROM_START\"] = \"get substring from letter #\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_TAIL\"] = \"\";\nBlockly.Msg[\"TEXT_GET_SUBSTRING_TOOLTIP\"] = \"Returns a specified portion of the text.\";\nBlockly.Msg[\"TEXT_INDEXOF_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#finding-text\";\nBlockly.Msg[\"TEXT_INDEXOF_OPERATOR_FIRST\"] = \"find first occurrence of text\";\nBlockly.Msg[\"TEXT_INDEXOF_OPERATOR_LAST\"] = \"find last occurrence of text\";\nBlockly.Msg[\"TEXT_INDEXOF_TITLE\"] = \"in text %1 %2 %3\";\nBlockly.Msg[\"TEXT_INDEXOF_TOOLTIP\"] = \"Returns the index of the first/last occurrence of the first text in the second text. Returns %1 if text is not found.\";\nBlockly.Msg[\"TEXT_ISEMPTY_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#checking-for-empty-text\";\nBlockly.Msg[\"TEXT_ISEMPTY_TITLE\"] = \"%1 is empty\";\nBlockly.Msg[\"TEXT_ISEMPTY_TOOLTIP\"] = \"Returns true if the provided text is empty.\";\nBlockly.Msg[\"TEXT_JOIN_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-creation\";\nBlockly.Msg[\"TEXT_JOIN_TITLE_CREATEWITH\"] = \"create text with\";\nBlockly.Msg[\"TEXT_JOIN_TOOLTIP\"] = \"Create a piece of text by joining together any number of items.\";\nBlockly.Msg[\"TEXT_LENGTH_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#text-modification\";\nBlockly.Msg[\"TEXT_LENGTH_TITLE\"] = \"length of %1\";\nBlockly.Msg[\"TEXT_LENGTH_TOOLTIP\"] = \"Returns the number of letters (including spaces) in the provided text.\";\nBlockly.Msg[\"TEXT_PRINT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#printing-text\";\nBlockly.Msg[\"TEXT_PRINT_TITLE\"] = \"print %1\";\nBlockly.Msg[\"TEXT_PRINT_TOOLTIP\"] = \"Print the specified text, number or other value.\";\nBlockly.Msg[\"TEXT_PROMPT_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#getting-input-from-the-user\";\nBlockly.Msg[\"TEXT_PROMPT_TOOLTIP_NUMBER\"] = \"Prompt for user for a number.\";\nBlockly.Msg[\"TEXT_PROMPT_TOOLTIP_TEXT\"] = \"Prompt for user for some text.\";\nBlockly.Msg[\"TEXT_PROMPT_TYPE_NUMBER\"] = \"prompt for number with message\";\nBlockly.Msg[\"TEXT_PROMPT_TYPE_TEXT\"] = \"prompt for text with message\";\nBlockly.Msg[\"TEXT_REPLACE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#replacing-substrings\";\nBlockly.Msg[\"TEXT_REPLACE_MESSAGE0\"] = \"replace %1 with %2 in %3\";\nBlockly.Msg[\"TEXT_REPLACE_TOOLTIP\"] = \"Replace all occurances of some text within some other text.\";\nBlockly.Msg[\"TEXT_REVERSE_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#reversing-text\";\nBlockly.Msg[\"TEXT_REVERSE_MESSAGE0\"] = \"reverse %1\";\nBlockly.Msg[\"TEXT_REVERSE_TOOLTIP\"] = \"Reverses the order of the characters in the text.\";\nBlockly.Msg[\"TEXT_TEXT_HELPURL\"] = \"https://en.wikipedia.org/wiki/String_(computer_science)\";\nBlockly.Msg[\"TEXT_TEXT_TOOLTIP\"] = \"A letter, word, or line of text.\";\nBlockly.Msg[\"TEXT_TRIM_HELPURL\"] = \"https://github.com/google/blockly/wiki/Text#trimming-removing-spaces\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_BOTH\"] = \"trim spaces from both sides of\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_LEFT\"] = \"trim spaces from left side of\";\nBlockly.Msg[\"TEXT_TRIM_OPERATOR_RIGHT\"] = \"trim spaces from right side of\";\nBlockly.Msg[\"TEXT_TRIM_TOOLTIP\"] = \"Return a copy of the text with spaces removed from one or both ends.\";\nBlockly.Msg[\"TODAY\"] = \"Today\";\nBlockly.Msg[\"UNDO\"] = \"Undo\";\nBlockly.Msg[\"UNKNOWN\"] = \"Unknown\";\nBlockly.Msg[\"UNNAMED_KEY\"] = \"unnamed\";\nBlockly.Msg[\"VARIABLES_DEFAULT_NAME\"] = \"item\";\nBlockly.Msg[\"VARIABLES_GET_CREATE_SET\"] = \"Create 'set %1'\";\nBlockly.Msg[\"VARIABLES_GET_HELPURL\"] = \"https://github.com/google/blockly/wiki/Variables#get\";\nBlockly.Msg[\"VARIABLES_GET_TOOLTIP\"] = \"Returns the value of this variable.\";\nBlockly.Msg[\"VARIABLES_SET\"] = \"set %1 to %2\";\nBlockly.Msg[\"VARIABLES_SET_CREATE_GET\"] = \"Create 'get %1'\";\nBlockly.Msg[\"VARIABLES_SET_HELPURL\"] = \"https://github.com/google/blockly/wiki/Variables#set\";\nBlockly.Msg[\"VARIABLES_SET_TOOLTIP\"] = \"Sets this variable to be equal to the input.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS\"] = \"A variable named '%1' already exists.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE\"] = \"A variable named '%1' already exists for another type: '%2'.\";\nBlockly.Msg[\"VARIABLE_ALREADY_EXISTS_FOR_A_PARAMETER\"] = \"A variable named '%1' already exists as a parameter in the procedure '%2'.\";\nBlockly.Msg[\"WINDOWS\"] = \"Windows\";\nBlockly.Msg[\"WORKSPACE_ARIA_LABEL\"] = \"Blockly Workspace\";\nBlockly.Msg[\"WORKSPACE_COMMENT_DEFAULT_TEXT\"] = \"Say something...\";\nBlockly.Msg[\"CONTROLS_FOREACH_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_FOR_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_IF_ELSEIF_TITLE_ELSEIF\"] = Blockly.Msg[\"CONTROLS_IF_MSG_ELSEIF\"];\nBlockly.Msg[\"CONTROLS_IF_ELSE_TITLE_ELSE\"] = Blockly.Msg[\"CONTROLS_IF_MSG_ELSE\"];\nBlockly.Msg[\"CONTROLS_IF_IF_TITLE_IF\"] = Blockly.Msg[\"CONTROLS_IF_MSG_IF\"];\nBlockly.Msg[\"CONTROLS_IF_MSG_THEN\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"CONTROLS_WHILEUNTIL_INPUT_DO\"] = Blockly.Msg[\"CONTROLS_REPEAT_INPUT_DO\"];\nBlockly.Msg[\"LISTS_CREATE_WITH_ITEM_TITLE\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"LISTS_GET_INDEX_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_GET_SUBLIST_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_INDEX_OF_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"LISTS_SET_INDEX_INPUT_IN_LIST\"] = Blockly.Msg[\"LISTS_INLIST\"];\nBlockly.Msg[\"MATH_CHANGE_TITLE_ITEM\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_COMMENT\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_COMMENT\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_DO\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_DO\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_PROCEDURE\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_PROCEDURE\"];\nBlockly.Msg[\"PROCEDURES_DEFRETURN_TITLE\"] = Blockly.Msg[\"PROCEDURES_DEFNORETURN_TITLE\"];\nBlockly.Msg[\"TEXT_APPEND_VARIABLE\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\nBlockly.Msg[\"TEXT_CREATE_JOIN_ITEM_TITLE_ITEM\"] = Blockly.Msg[\"VARIABLES_DEFAULT_NAME\"];\n\nBlockly.Msg[\"COLOUR_HUE\"] = \"20\";\nBlockly.Msg[\"LISTS_HUE\"] = \"260\";\nBlockly.Msg[\"LOGIC_HUE\"] = \"210\";\nBlockly.Msg[\"LOOPS_HUE\"] = \"120\";\nBlockly.Msg[\"MATH_HUE\"] = \"230\";\nBlockly.Msg[\"PROCEDURES_HUE\"] = \"290\";\nBlockly.Msg[\"TEXTS_HUE\"] = \"160\";\nBlockly.Msg[\"VARIABLES_DYNAMIC_HUE\"] = \"310\";\nBlockly.Msg[\"VARIABLES_HUE\"] = \"330\";\nreturn Blockly.Msg;\n}));\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/msg/en.js?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/python.mjs": +/*!*****************************************!*\ + !*** ./node_modules/blockly/python.mjs ***! + \*****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Order: () => (/* binding */ Order),\n/* harmony export */ PythonGenerator: () => (/* binding */ PythonGenerator),\n/* harmony export */ pythonGenerator: () => (/* binding */ pythonGenerator)\n/* harmony export */ });\n/* harmony import */ var _python_compressed_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./python_compressed.js */ \"./node_modules/blockly/python_compressed.js\");\n\nconst {\n Order,\n PythonGenerator,\n pythonGenerator,\n} = _python_compressed_js__WEBPACK_IMPORTED_MODULE_0__;\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/python.mjs?\n}"); + +/***/ }), + +/***/ "./node_modules/blockly/python_compressed.js": +/*!***************************************************!*\ + !*** ./node_modules/blockly/python_compressed.js ***! + \***************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +eval("{var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Do not edit this file; automatically generated.\n\n/* eslint-disable */\n;(function(root, factory) {\n if (true) { // AMD\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! ./blockly_compressed.js */ \"./node_modules/blockly/blockly_compressed.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else // removed by dead control flow\n{}\n}(this, function(__parent__) {\nvar $=__parent__.__namespace__;\nvar lists_create_empty$$module$build$src$generators$python$lists=function(a,b){return[\"[]\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},lists_create_with$$module$build$src$generators$python$lists=function(a,b){const c=Array(a.itemCount_);for(let d=0;d\",GTE:\">=\"}[a.getFieldValue(\"OP\")],d=Order$$module$build$src$generators$python$python_generator.RELATIONAL,e=b.valueToCode(a,\"A\",d)||\"0\";a=b.valueToCode(a,\"B\",d)||\"0\";return[e+\" \"+c+\" \"+a,d]},logic_operation$$module$build$src$generators$python$logic=function(a,\nb){const c=a.getFieldValue(\"OP\")===\"AND\"?\"and\":\"or\",d=c===\"and\"?Order$$module$build$src$generators$python$python_generator.LOGICAL_AND:Order$$module$build$src$generators$python$python_generator.LOGICAL_OR;let e=b.valueToCode(a,\"A\",d);a=b.valueToCode(a,\"B\",d);e||a?(b=c===\"and\"?\"True\":\"False\",e||(e=b),a||(a=b)):a=e=\"False\";return[e+\" \"+c+\" \"+a,d]},logic_negate$$module$build$src$generators$python$logic=function(a,b){return[\"not \"+(b.valueToCode(a,\"BOOL\",Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT)||\n\"True\"),Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT]},logic_boolean$$module$build$src$generators$python$logic=function(a,b){return[a.getFieldValue(\"BOOL\")===\"TRUE\"?\"True\":\"False\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},logic_null$$module$build$src$generators$python$logic=function(a,b){return[\"None\",Order$$module$build$src$generators$python$python_generator.ATOMIC]},logic_ternary$$module$build$src$generators$python$logic=function(a,b){const c=\nb.valueToCode(a,\"IF\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"False\",d=b.valueToCode(a,\"THEN\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"None\";a=b.valueToCode(a,\"ELSE\",Order$$module$build$src$generators$python$python_generator.CONDITIONAL)||\"None\";return[d+\" if \"+c+\" else \"+a,Order$$module$build$src$generators$python$python_generator.CONDITIONAL]},controls_repeat_ext$$module$build$src$generators$python$loops=function(a,b){let c;c=a.getField(\"TIMES\")?\nString(parseInt(a.getFieldValue(\"TIMES\"),10)):b.valueToCode(a,\"TIMES\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";c=$.isNumber$$module$build$src$core$utils$string(c)?parseInt(c,10):\"int(\"+c+\")\";let d=b.statementToCode(a,\"DO\");d=b.addLoopTrap(d,a)||b.PASS;return\"for \"+b.nameDB_.getDistinctName(\"count\",$.NameType$$module$build$src$core$names.VARIABLE)+\" in range(\"+c+\"):\\n\"+d},controls_whileUntil$$module$build$src$generators$python$loops=function(a,b){const c=a.getFieldValue(\"MODE\")===\n\"UNTIL\";let d=b.valueToCode(a,\"BOOL\",c?Order$$module$build$src$generators$python$python_generator.LOGICAL_NOT:Order$$module$build$src$generators$python$python_generator.NONE)||\"False\",e=b.statementToCode(a,\"DO\");e=b.addLoopTrap(e,a)||b.PASS;c&&(d=\"not \"+d);return\"while \"+d+\":\\n\"+e},controls_for$$module$build$src$generators$python$loops=function(a,b){const c=b.getVariableName(a.getFieldValue(\"VAR\"));var d=b.valueToCode(a,\"FROM\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",\ne=b.valueToCode(a,\"TO\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",f=b.valueToCode(a,\"BY\",Order$$module$build$src$generators$python$python_generator.NONE)||\"1\";let g=b.statementToCode(a,\"DO\");g=b.addLoopTrap(g,a)||b.PASS;let h=\"\";a=function(){return b.provideFunction_(\"upRange\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):\n while start <= stop:\n yield start\n start += abs(step)\n`)};const k=function(){return b.provideFunction_(\"downRange\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):\n while start >= stop:\n yield start\n start -= abs(step)\n`)};if($.isNumber$$module$build$src$core$utils$string(d)&&$.isNumber$$module$build$src$core$utils$string(e)&&$.isNumber$$module$build$src$core$utils$string(f))d=Number(d),e=Number(e),f=Math.abs(Number(f)),d%1===0&&e%1===0&&f%1===0?(d<=e?(e++,a=d===0&&f===1?e:d+\", \"+e,f!==1&&(a+=\", \"+f)):(e--,a=d+\", \"+e+\", -\"+f),a=\"range(\"+a+\")\"):(a=d 0\",Order$$module$build$src$generators$python$python_generator.RELATIONAL,Order$$module$build$src$generators$python$python_generator.RELATIONAL],NEGATIVE:[\" < 0\",\nOrder$$module$build$src$generators$python$python_generator.RELATIONAL,Order$$module$build$src$generators$python$python_generator.RELATIONAL],DIVISIBLE_BY:[null,Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE,Order$$module$build$src$generators$python$python_generator.RELATIONAL],PRIME:[null,Order$$module$build$src$generators$python$python_generator.NONE,Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]};const d=a.getFieldValue(\"PROPERTY\"),[e,f,g]=c[d];\nc=b.valueToCode(a,\"NUMBER_TO_CHECK\",f)||\"0\";if(d===\"PRIME\")b.definitions_.import_math=\"import math\",b.definitions_.from_numbers_import_Number=\"from numbers import Number\",a=b.provideFunction_(\"math_isPrime\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(n):\n # https://en.wikipedia.org/wiki/Primality_test#Naive_methods\n # If n is not a number but a string, try parsing it.\n if not isinstance(n, Number):\n try:\n n = float(n)\n except:\n return False\n if n == 2 or n == 3:\n return True\n # False if n is negative, is 1, or not whole, or if n is divisible by 2 or 3.\n if n <= 1 or n % 1 != 0 or n % 2 == 0 or n % 3 == 0:\n return False\n # Check all the numbers of form 6k +/- 1, up to sqrt(n).\n for x in range(6, int(math.sqrt(n)) + 2, 6):\n if n % (x - 1) == 0 or n % (x + 1) == 0:\n return False\n return True\n`)+\"(\"+c+\")\";else if(d===\"DIVISIBLE_BY\"){a=b.valueToCode(a,\"DIVISOR\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\"0\";if(a===\"0\")return[\"False\",Order$$module$build$src$generators$python$python_generator.ATOMIC];a=c+\" % \"+a+\" == 0\"}else a=c+e;return[a,g]},math_change$$module$build$src$generators$python$math=function(a,b){b.definitions_.from_numbers_import_Number=\"from numbers import Number\";const c=b.valueToCode(a,\"DELTA\",Order$$module$build$src$generators$python$python_generator.ADDITIVE)||\n\"0\";a=b.getVariableName(a.getFieldValue(\"VAR\"));return a+\" = (\"+a+\" if isinstance(\"+a+\", Number) else 0) + \"+c+\"\\n\"},math_on_list$$module$build$src$generators$python$math=function(a,b){const c=a.getFieldValue(\"OP\");a=b.valueToCode(a,\"LIST\",Order$$module$build$src$generators$python$python_generator.NONE)||\"[]\";switch(c){case \"SUM\":b=\"sum(\"+a+\")\";break;case \"MIN\":b=\"min(\"+a+\")\";break;case \"MAX\":b=\"max(\"+a+\")\";break;case \"AVERAGE\":b.definitions_.from_numbers_import_Number=\"from numbers import Number\";\nb=b.provideFunction_(\"math_mean\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(myList):\n localList = [e for e in myList if isinstance(e, Number)]\n if not localList: return\n return float(sum(localList)) / len(localList)\n`)+\"(\"+a+\")\";break;case \"MEDIAN\":b.definitions_.from_numbers_import_Number=\"from numbers import Number\";b=b.provideFunction_(\"math_median\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(myList):\n localList = sorted([e for e in myList if isinstance(e, Number)])\n if not localList: return\n if len(localList) % 2 == 0:\n return (localList[len(localList) // 2 - 1] + localList[len(localList) // 2]) / 2.0\n else:\n return localList[(len(localList) - 1) // 2]\n`)+\"(\"+a+\")\";break;case \"MODE\":b=b.provideFunction_(\"math_modes\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(some_list):\n modes = []\n # Using a lists of [item, count] to keep count rather than dict\n # to avoid \"unhashable\" errors when the counted item is itself a list or dict.\n counts = []\n maxCount = 1\n for item in some_list:\n found = False\n for count in counts:\n if count[0] == item:\n count[1] += 1\n maxCount = max(maxCount, count[1])\n found = True\n if not found:\n counts.append([item, 1])\n for counted_item, item_count in counts:\n if item_count == maxCount:\n modes.append(counted_item)\n return modes\n`)+\"(\"+a+\")\";break;case \"STD_DEV\":b.definitions_.import_math=\"import math\";b=b.provideFunction_(\"math_standard_deviation\",`\ndef ${b.FUNCTION_NAME_PLACEHOLDER_}(numbers):\n n = len(numbers)\n if n == 0: return\n mean = float(sum(numbers)) / n\n variance = sum((x - mean) ** 2 for x in numbers) / n\n return math.sqrt(variance)\n`)+\"(\"+a+\")\";break;case \"RANDOM\":b.definitions_.import_random=\"import random\";b=\"random.choice(\"+a+\")\";break;default:throw Error(\"Unknown operator: \"+c);}return[b,Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_modulo$$module$build$src$generators$python$math=function(a,b){const c=b.valueToCode(a,\"DIVIDEND\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\"0\";a=b.valueToCode(a,\"DIVISOR\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE)||\n\"0\";return[c+\" % \"+a,Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE]},math_constrain$$module$build$src$generators$python$math=function(a,b){const c=b.valueToCode(a,\"VALUE\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\",d=b.valueToCode(a,\"LOW\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";a=b.valueToCode(a,\"HIGH\",Order$$module$build$src$generators$python$python_generator.NONE)||\"float('inf')\";return[\"min(max(\"+c+\", \"+d+\"), \"+\na+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_random_int$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_random=\"import random\";const c=b.valueToCode(a,\"FROM\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";a=b.valueToCode(a,\"TO\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";return[\"random.randint(\"+c+\", \"+a+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},\nmath_random_float$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_random=\"import random\";return[\"random.random()\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},math_atan2$$module$build$src$generators$python$math=function(a,b){b.definitions_.import_math=\"import math\";const c=b.valueToCode(a,\"X\",Order$$module$build$src$generators$python$python_generator.NONE)||\"0\";return[\"math.atan2(\"+(b.valueToCode(a,\"Y\",Order$$module$build$src$generators$python$python_generator.NONE)||\n\"0\")+\", \"+c+\") / math.pi * 180\",Order$$module$build$src$generators$python$python_generator.MULTIPLICATIVE]},procedures_defreturn$$module$build$src$generators$python$procedures=function(a,b){var c=[],d=a.workspace,e=$.allUsedVarModels$$module$build$src$core$variables(d)||[];for(var f of e)e=f.getName(),a.getVars().includes(e)||c.push(b.getVariableName(e));d=$.allDeveloperVariables$$module$build$src$core$variables(d);for(f=0;f0?\"int(\"+a+\" + \"+c+\")\":c<0?\"int(\"+a+\" - \"+-c+\")\":\"int(\"+a+\")\",d&&(a=\"-\"+a));return a}},module$build$src$generators$python$python_generator={};module$build$src$generators$python$python_generator.Order=Order$$module$build$src$generators$python$python_generator;module$build$src$generators$python$python_generator.PythonGenerator=PythonGenerator$$module$build$src$generators$python$python_generator;var module$build$src$generators$python$lists={};module$build$src$generators$python$lists.lists_create_empty=lists_create_empty$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_create_with=lists_create_with$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_getIndex=lists_getIndex$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_getSublist=lists_getSublist$$module$build$src$generators$python$lists;\nmodule$build$src$generators$python$lists.lists_indexOf=lists_indexOf$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_isEmpty=lists_isEmpty$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_length=lists_length$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_repeat=lists_repeat$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_reverse=lists_reverse$$module$build$src$generators$python$lists;\nmodule$build$src$generators$python$lists.lists_setIndex=lists_setIndex$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_sort=lists_sort$$module$build$src$generators$python$lists;module$build$src$generators$python$lists.lists_split=lists_split$$module$build$src$generators$python$lists;var controls_ifelse$$module$build$src$generators$python$logic=controls_if$$module$build$src$generators$python$logic,module$build$src$generators$python$logic={};module$build$src$generators$python$logic.controls_if=controls_if$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.controls_ifelse=controls_if$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_boolean=logic_boolean$$module$build$src$generators$python$logic;\nmodule$build$src$generators$python$logic.logic_compare=logic_compare$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_negate=logic_negate$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_null=logic_null$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_operation=logic_operation$$module$build$src$generators$python$logic;module$build$src$generators$python$logic.logic_ternary=logic_ternary$$module$build$src$generators$python$logic;var controls_repeat$$module$build$src$generators$python$loops=controls_repeat_ext$$module$build$src$generators$python$loops,module$build$src$generators$python$loops={};module$build$src$generators$python$loops.controls_flow_statements=controls_flow_statements$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_for=controls_for$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_forEach=controls_forEach$$module$build$src$generators$python$loops;\nmodule$build$src$generators$python$loops.controls_repeat=controls_repeat_ext$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_repeat_ext=controls_repeat_ext$$module$build$src$generators$python$loops;module$build$src$generators$python$loops.controls_whileUntil=controls_whileUntil$$module$build$src$generators$python$loops;var math_round$$module$build$src$generators$python$math=math_single$$module$build$src$generators$python$math,math_trig$$module$build$src$generators$python$math=math_single$$module$build$src$generators$python$math,module$build$src$generators$python$math={};module$build$src$generators$python$math.math_arithmetic=math_arithmetic$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_atan2=math_atan2$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_change=math_change$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_constant=math_constant$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_constrain=math_constrain$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_modulo=math_modulo$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_number=math_number$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_number_property=math_number_property$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_on_list=math_on_list$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_random_float=math_random_float$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_random_int=math_random_int$$module$build$src$generators$python$math;\nmodule$build$src$generators$python$math.math_round=math_single$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_single=math_single$$module$build$src$generators$python$math;module$build$src$generators$python$math.math_trig=math_single$$module$build$src$generators$python$math;var procedures_defnoreturn$$module$build$src$generators$python$procedures=procedures_defreturn$$module$build$src$generators$python$procedures,module$build$src$generators$python$procedures={};module$build$src$generators$python$procedures.procedures_callnoreturn=procedures_callnoreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_callreturn=procedures_callreturn$$module$build$src$generators$python$procedures;\nmodule$build$src$generators$python$procedures.procedures_defnoreturn=procedures_defreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_defreturn=procedures_defreturn$$module$build$src$generators$python$procedures;module$build$src$generators$python$procedures.procedures_ifreturn=procedures_ifreturn$$module$build$src$generators$python$procedures;var strRegExp$$module$build$src$generators$python$text=/^\\s*'([^']|\\\\')*'\\s*$/,forceString$$module$build$src$generators$python$text=function(a){return strRegExp$$module$build$src$generators$python$text.test(a)?[a,Order$$module$build$src$generators$python$python_generator.ATOMIC]:[\"str(\"+a+\")\",Order$$module$build$src$generators$python$python_generator.FUNCTION_CALL]},text_prompt$$module$build$src$generators$python$text=text_prompt_ext$$module$build$src$generators$python$text,module$build$src$generators$python$text=\n{};module$build$src$generators$python$text.text=text$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_append=text_append$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_changeCase=text_changeCase$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_charAt=text_charAt$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_count=text_count$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_getSubstring=text_getSubstring$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_indexOf=text_indexOf$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_isEmpty=text_isEmpty$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_join=text_join$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_length=text_length$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_print=text_print$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_prompt=text_prompt_ext$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_prompt_ext=text_prompt_ext$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_replace=text_replace$$module$build$src$generators$python$text;module$build$src$generators$python$text.text_reverse=text_reverse$$module$build$src$generators$python$text;\nmodule$build$src$generators$python$text.text_trim=text_trim$$module$build$src$generators$python$text;var module$build$src$generators$python$variables={};module$build$src$generators$python$variables.variables_get=variables_get$$module$build$src$generators$python$variables;module$build$src$generators$python$variables.variables_set=variables_set$$module$build$src$generators$python$variables;var module$build$src$generators$python$variables_dynamic={};module$build$src$generators$python$variables_dynamic.variables_get_dynamic=variables_get$$module$build$src$generators$python$variables;module$build$src$generators$python$variables_dynamic.variables_set_dynamic=variables_set$$module$build$src$generators$python$variables;var pythonGenerator$$module$build$src$generators$python=new PythonGenerator$$module$build$src$generators$python$python_generator;pythonGenerator$$module$build$src$generators$python.addReservedWords(\"math,random,Number\");\nvar generators$$module$build$src$generators$python=Object.assign({},module$build$src$generators$python$lists,module$build$src$generators$python$logic,module$build$src$generators$python$loops,module$build$src$generators$python$math,module$build$src$generators$python$procedures,module$build$src$generators$python$text,module$build$src$generators$python$variables,module$build$src$generators$python$variables_dynamic);\nfor(const a in generators$$module$build$src$generators$python)pythonGenerator$$module$build$src$generators$python.forBlock[a]=generators$$module$build$src$generators$python[a];var module$build$src$generators$python={};module$build$src$generators$python.Order=Order$$module$build$src$generators$python$python_generator;module$build$src$generators$python.PythonGenerator=PythonGenerator$$module$build$src$generators$python$python_generator;module$build$src$generators$python.pythonGenerator=pythonGenerator$$module$build$src$generators$python;\nmodule$build$src$generators$python.__namespace__=$;\nreturn module$build$src$generators$python;\n}));\n\n\n//# sourceMappingURL=python_compressed.js.map\n\n\n//# sourceURL=webpack://blockly_app/./node_modules/blockly/python_compressed.js?\n}"); + +/***/ }), + +/***/ "./src/steps/step5.js": +/*!****************************!*\ + !*** ./src/steps/step5.js ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var blockly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly */ \"./node_modules/blockly/index.mjs\");\n/* harmony import */ var blockly_python__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! blockly/python */ \"./node_modules/blockly/python.mjs\");\n/**\n * Blockly OT-2 Integration Application\n * \n * This application demonstrates real Blockly installation with custom blocks\n * for OT-2 liquid handler functions from OT2mqtt.py\n */\n\n\n\n\n// Define custom block: OT-2 Home\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_home'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('🏠 OT-2: Home Robot');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Home the OT-2 robot to its initial position');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_home'] = function(block, generator) {\n const code = 'protocol.home()\\n';\n return code;\n};\n\n// Define custom block: OT-2 Mix Color\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_mix_color'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('🎨 OT-2: Mix Color');\n this.appendValueInput('R')\n .setCheck('Number')\n .appendField('Red (µL)');\n this.appendValueInput('Y')\n .setCheck('Number')\n .appendField('Yellow (µL)');\n this.appendValueInput('B')\n .setCheck('Number')\n .appendField('Blue (µL)');\n this.appendValueInput('WELL')\n .setCheck('String')\n .appendField('Well');\n this.appendValueInput('SESSION_ID')\n .setCheck('String')\n .appendField('Session ID');\n this.appendValueInput('EXPERIMENT_ID')\n .setCheck('String')\n .appendField('Experiment ID');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Mix RGB colors in a well using the OT-2 pipette');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_mix_color'] = function(block, generator) {\n const value_r = generator.valueToCode(block, 'R', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_y = generator.valueToCode(block, 'Y', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_b = generator.valueToCode(block, 'B', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '0';\n const value_well = generator.valueToCode(block, 'WELL', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"A1\"';\n const value_session_id = generator.valueToCode(block, 'SESSION_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"session_001\"';\n const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"exp_001\"';\n \n const code = `payload = {\n \"command\": {\n \"R\": ${value_r},\n \"Y\": ${value_y},\n \"B\": ${value_b},\n \"well\": ${value_well}\n },\n \"session_id\": ${value_session_id},\n \"experiment_id\": ${value_experiment_id}\n}\nmix_color(payload)\n`;\n return code;\n};\n\n// Define custom block: OT-2 Move Sensor Back\nblockly__WEBPACK_IMPORTED_MODULE_0__.Blocks['ot2_move_sensor_back'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('↩️ OT-2: Move Sensor Back');\n this.appendValueInput('SENSOR_STATUS')\n .setCheck('String')\n .appendField('Sensor Status');\n this.appendValueInput('SESSION_ID')\n .setCheck('String')\n .appendField('Session ID');\n this.appendValueInput('EXPERIMENT_ID')\n .setCheck('String')\n .appendField('Experiment ID');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(230);\n this.setTooltip('Move the sensor back to charging position');\n this.setHelpUrl('');\n }\n};\n\nblockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.forBlock['ot2_move_sensor_back'] = function(block, generator) {\n const value_sensor_status = generator.valueToCode(block, 'SENSOR_STATUS', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"complete\"';\n const value_session_id = generator.valueToCode(block, 'SESSION_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"session_001\"';\n const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.ORDER_ATOMIC) || '\"exp_001\"';\n \n const code = `payload = {\n \"command\": {\n \"sensor_status\": ${value_sensor_status}\n },\n \"session_id\": ${value_session_id},\n \"experiment_id\": ${value_experiment_id}\n}\nmove_sensor_back(payload)\n`;\n return code;\n};\n\n// Create toolbox\nconst toolbox = {\n \"kind\": \"categoryToolbox\",\n \"contents\": [\n {\n \"kind\": \"category\",\n \"name\": \"OT-2 Commands\",\n \"colour\": \"#5C81A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"ot2_home\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"ot2_mix_color\",\n \"inputs\": {\n \"R\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 100\n }\n }\n },\n \"Y\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 50\n }\n }\n },\n \"B\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 75\n }\n }\n },\n \"WELL\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"A1\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n },\n {\n \"kind\": \"block\",\n \"type\": \"ot2_move_sensor_back\",\n \"inputs\": {\n \"SENSOR_STATUS\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"complete\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Logic\",\n \"colour\": \"#5C68A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"controls_if\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"logic_compare\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Loops\",\n \"colour\": \"#5CA65C\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"controls_repeat_ext\",\n \"inputs\": {\n \"TIMES\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 3\n }\n }\n }\n }\n },\n {\n \"kind\": \"block\",\n \"type\": \"controls_whileUntil\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Math\",\n \"colour\": \"#5C68A6\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"math_number\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"math_arithmetic\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Text\",\n \"colour\": \"#5CA68A\",\n \"contents\": [\n {\n \"kind\": \"block\",\n \"type\": \"text\"\n },\n {\n \"kind\": \"block\",\n \"type\": \"text_print\"\n }\n ]\n },\n {\n \"kind\": \"category\",\n \"name\": \"Variables\",\n \"colour\": \"#A65C81\",\n \"custom\": \"VARIABLE\"\n }\n ]\n};\n\n// Initialize Blockly workspace\nconst workspace = blockly__WEBPACK_IMPORTED_MODULE_0__.inject('blocklyDiv', {\n toolbox: toolbox,\n grid: {\n spacing: 20,\n length: 3,\n colour: '#ccc',\n snap: true\n },\n zoom: {\n controls: true,\n wheel: true,\n startScale: 1.0,\n maxScale: 3,\n minScale: 0.3,\n scaleSpeed: 1.2\n },\n trashcan: true\n});\n\n// Load initial workspace\n\n// Load initial workspace - Step 5: Complete workflow\nconst startBlocks = {\n \"blocks\": {\n \"languageVersion\": 0,\n \"blocks\": [\n {\n \"type\": \"ot2_home\",\n \"id\": \"start_home\",\n \"x\": 50,\n \"y\": 50\n },\n {\n \"type\": \"controls_repeat_ext\",\n \"id\": \"repeat_loop\",\n \"x\": 50,\n \"y\": 120,\n \"inputs\": {\n \"TIMES\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"id\": \"repeat_times\",\n \"fields\": {\n \"NUM\": 3\n }\n }\n },\n \"DO\": {\n \"block\": {\n \"type\": \"ot2_mix_color\",\n \"id\": \"mix_block\",\n \"inputs\": {\n \"R\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 100\n }\n }\n },\n \"Y\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 50\n }\n }\n },\n \"B\": {\n \"shadow\": {\n \"type\": \"math_number\",\n \"fields\": {\n \"NUM\": 75\n }\n }\n },\n \"WELL\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"A1\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n },\n \"next\": {\n \"block\": {\n \"type\": \"ot2_move_sensor_back\",\n \"id\": \"sensor_block\",\n \"inputs\": {\n \"SENSOR_STATUS\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"complete\"\n }\n }\n },\n \"SESSION_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"session_001\"\n }\n }\n },\n \"EXPERIMENT_ID\": {\n \"shadow\": {\n \"type\": \"text\",\n \"fields\": {\n \"TEXT\": \"exp_001\"\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n ]\n }\n};\n\nblockly__WEBPACK_IMPORTED_MODULE_0__.serialization.workspaces.load(startBlocks, workspace);\n\n// Generate code function\nfunction generateCode() {\n const code = blockly_python__WEBPACK_IMPORTED_MODULE_1__.pythonGenerator.workspaceToCode(workspace);\n const fullCode = `# Generated from Blockly visual programming\n# This code uses functions from OT2mqtt.py\n\nfrom OT2mqtt import mix_color, move_sensor_back, protocol\n\n# Main workflow\n${code}`;\n \n document.getElementById('codeOutput').textContent = fullCode;\n}\n\n// Update code on workspace change\nworkspace.addChangeListener(generateCode);\n\n// Generate initial code\ngenerateCode();\n\n// Expose generate function to button\nwindow.generateCode = generateCode;\n\n\n//# sourceURL=webpack://blockly_app/./src/steps/step5.js?\n}"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./src/steps/step5.js"); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/scripts/blockly_app/screenshots/step1_empty.png b/scripts/blockly_app/screenshots/step1_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..012e76c11a1fcabb650c06c0203c1d56a8c3e16b GIT binary patch literal 58403 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
fFxKb3C^1u%7wlK39wDg3V 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 literal 0 HcmV?d00001 diff --git a/scripts/blockly_app/screenshots/step2_home.png b/scripts/blockly_app/screenshots/step2_home.png new file mode 100644 index 0000000000000000000000000000000000000000..b71cd21e67ff65142cd20dac161440a493eca989 GIT binary patch literal 63849 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 literal 0 HcmV?d00001 diff --git a/scripts/blockly_app/screenshots/step3_loop.png b/scripts/blockly_app/screenshots/step3_loop.png new file mode 100644 index 0000000000000000000000000000000000000000..975eb652d72b75a22711abc07ac76557856dc852 GIT binary patch literal 70641 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

IhDi*ol>} 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噋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 Lxwpk4I$!?}`W9SP literal 0 HcmV?d00001 diff --git a/scripts/blockly_app/screenshots/step5_sensor.png b/scripts/blockly_app/screenshots/step5_sensor.png new file mode 100644 index 0000000000000000000000000000000000000000..288d49b85f17398f91f96dd144df337a8c0742d7 GIT binary patch literal 102396 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噋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 Lxwpk4I$!?}`W9SP literal 0 HcmV?d00001 diff --git a/scripts/blockly_app/src/steps/step1.js b/scripts/blockly_app/src/steps/step1.js new file mode 100644 index 00000000..427afaf0 --- /dev/null +++ b/scripts/blockly_app/src/steps/step1.js @@ -0,0 +1,353 @@ +/** + * Blockly OT-2 Integration Application + * + * This application demonstrates real Blockly installation with custom blocks + * for OT-2 liquid handler functions from OT2mqtt.py + */ + +import * as Blockly from 'blockly'; +import {pythonGenerator} from 'blockly/python'; + +// Define custom block: OT-2 Home +Blockly.Blocks['ot2_home'] = { + init: function() { + this.appendDummyInput() + .appendField('🏠 OT-2: Home Robot'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Home the OT-2 robot to its initial position'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_home'] = function(block, generator) { + const code = 'protocol.home()\n'; + return code; +}; + +// Define custom block: OT-2 Mix Color +Blockly.Blocks['ot2_mix_color'] = { + init: function() { + this.appendDummyInput() + .appendField('🎨 OT-2: Mix Color'); + this.appendValueInput('R') + .setCheck('Number') + .appendField('Red (µL)'); + this.appendValueInput('Y') + .setCheck('Number') + .appendField('Yellow (µL)'); + this.appendValueInput('B') + .setCheck('Number') + .appendField('Blue (µL)'); + this.appendValueInput('WELL') + .setCheck('String') + .appendField('Well'); + this.appendValueInput('SESSION_ID') + .setCheck('String') + .appendField('Session ID'); + this.appendValueInput('EXPERIMENT_ID') + .setCheck('String') + .appendField('Experiment ID'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Mix RGB colors in a well using the OT-2 pipette'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_mix_color'] = function(block, generator) { + const value_r = generator.valueToCode(block, 'R', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_y = generator.valueToCode(block, 'Y', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_b = generator.valueToCode(block, 'B', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_well = generator.valueToCode(block, 'WELL', pythonGenerator.ORDER_ATOMIC) || '"A1"'; + const value_session_id = generator.valueToCode(block, 'SESSION_ID', pythonGenerator.ORDER_ATOMIC) || '"session_001"'; + const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', pythonGenerator.ORDER_ATOMIC) || '"exp_001"'; + + const code = `payload = { + "command": { + "R": ${value_r}, + "Y": ${value_y}, + "B": ${value_b}, + "well": ${value_well} + }, + "session_id": ${value_session_id}, + "experiment_id": ${value_experiment_id} +} +mix_color(payload) +`; + return code; +}; + +// Define custom block: OT-2 Move Sensor Back +Blockly.Blocks['ot2_move_sensor_back'] = { + init: function() { + this.appendDummyInput() + .appendField('↩️ OT-2: Move Sensor Back'); + this.appendValueInput('SENSOR_STATUS') + .setCheck('String') + .appendField('Sensor Status'); + this.appendValueInput('SESSION_ID') + .setCheck('String') + .appendField('Session ID'); + this.appendValueInput('EXPERIMENT_ID') + .setCheck('String') + .appendField('Experiment ID'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Move the sensor back to charging position'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_move_sensor_back'] = function(block, generator) { + const value_sensor_status = generator.valueToCode(block, 'SENSOR_STATUS', pythonGenerator.ORDER_ATOMIC) || '"complete"'; + const value_session_id = generator.valueToCode(block, 'SESSION_ID', pythonGenerator.ORDER_ATOMIC) || '"session_001"'; + const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', pythonGenerator.ORDER_ATOMIC) || '"exp_001"'; + + const code = `payload = { + "command": { + "sensor_status": ${value_sensor_status} + }, + "session_id": ${value_session_id}, + "experiment_id": ${value_experiment_id} +} +move_sensor_back(payload) +`; + return code; +}; + +// Create toolbox +const toolbox = { + "kind": "categoryToolbox", + "contents": [ + { + "kind": "category", + "name": "OT-2 Commands", + "colour": "#5C81A6", + "contents": [ + { + "kind": "block", + "type": "ot2_home" + }, + { + "kind": "block", + "type": "ot2_mix_color", + "inputs": { + "R": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 100 + } + } + }, + "Y": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 50 + } + } + }, + "B": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 75 + } + } + }, + "WELL": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "A1" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + }, + { + "kind": "block", + "type": "ot2_move_sensor_back", + "inputs": { + "SENSOR_STATUS": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "complete" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + } + ] + }, + { + "kind": "category", + "name": "Logic", + "colour": "#5C68A6", + "contents": [ + { + "kind": "block", + "type": "controls_if" + }, + { + "kind": "block", + "type": "logic_compare" + } + ] + }, + { + "kind": "category", + "name": "Loops", + "colour": "#5CA65C", + "contents": [ + { + "kind": "block", + "type": "controls_repeat_ext", + "inputs": { + "TIMES": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 3 + } + } + } + } + }, + { + "kind": "block", + "type": "controls_whileUntil" + } + ] + }, + { + "kind": "category", + "name": "Math", + "colour": "#5C68A6", + "contents": [ + { + "kind": "block", + "type": "math_number" + }, + { + "kind": "block", + "type": "math_arithmetic" + } + ] + }, + { + "kind": "category", + "name": "Text", + "colour": "#5CA68A", + "contents": [ + { + "kind": "block", + "type": "text" + }, + { + "kind": "block", + "type": "text_print" + } + ] + }, + { + "kind": "category", + "name": "Variables", + "colour": "#A65C81", + "custom": "VARIABLE" + } + ] +}; + +// Initialize Blockly workspace +const workspace = Blockly.inject('blocklyDiv', { + toolbox: toolbox, + grid: { + spacing: 20, + length: 3, + colour: '#ccc', + snap: true + }, + zoom: { + controls: true, + wheel: true, + startScale: 1.0, + maxScale: 3, + minScale: 0.3, + scaleSpeed: 1.2 + }, + trashcan: true +}); + +// Load initial workspace + +// Load initial workspace - Step 1: Empty workspace +const startBlocks = { + "blocks": { + "languageVersion": 0, + "blocks": [] + } +}; + +Blockly.serialization.workspaces.load(startBlocks, workspace); + +// Generate code function +function generateCode() { + const code = pythonGenerator.workspaceToCode(workspace); + const fullCode = `# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + +from OT2mqtt import mix_color, move_sensor_back, protocol + +# Main workflow +${code}`; + + document.getElementById('codeOutput').textContent = fullCode; +} + +// Update code on workspace change +workspace.addChangeListener(generateCode); + +// Generate initial code +generateCode(); + +// Expose generate function to button +window.generateCode = generateCode; diff --git a/scripts/blockly_app/src/steps/step2.js b/scripts/blockly_app/src/steps/step2.js new file mode 100644 index 00000000..686b1906 --- /dev/null +++ b/scripts/blockly_app/src/steps/step2.js @@ -0,0 +1,360 @@ +/** + * Blockly OT-2 Integration Application + * + * This application demonstrates real Blockly installation with custom blocks + * for OT-2 liquid handler functions from OT2mqtt.py + */ + +import * as Blockly from 'blockly'; +import {pythonGenerator} from 'blockly/python'; + +// Define custom block: OT-2 Home +Blockly.Blocks['ot2_home'] = { + init: function() { + this.appendDummyInput() + .appendField('🏠 OT-2: Home Robot'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Home the OT-2 robot to its initial position'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_home'] = function(block, generator) { + const code = 'protocol.home()\n'; + return code; +}; + +// Define custom block: OT-2 Mix Color +Blockly.Blocks['ot2_mix_color'] = { + init: function() { + this.appendDummyInput() + .appendField('🎨 OT-2: Mix Color'); + this.appendValueInput('R') + .setCheck('Number') + .appendField('Red (µL)'); + this.appendValueInput('Y') + .setCheck('Number') + .appendField('Yellow (µL)'); + this.appendValueInput('B') + .setCheck('Number') + .appendField('Blue (µL)'); + this.appendValueInput('WELL') + .setCheck('String') + .appendField('Well'); + this.appendValueInput('SESSION_ID') + .setCheck('String') + .appendField('Session ID'); + this.appendValueInput('EXPERIMENT_ID') + .setCheck('String') + .appendField('Experiment ID'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Mix RGB colors in a well using the OT-2 pipette'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_mix_color'] = function(block, generator) { + const value_r = generator.valueToCode(block, 'R', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_y = generator.valueToCode(block, 'Y', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_b = generator.valueToCode(block, 'B', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_well = generator.valueToCode(block, 'WELL', pythonGenerator.ORDER_ATOMIC) || '"A1"'; + const value_session_id = generator.valueToCode(block, 'SESSION_ID', pythonGenerator.ORDER_ATOMIC) || '"session_001"'; + const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', pythonGenerator.ORDER_ATOMIC) || '"exp_001"'; + + const code = `payload = { + "command": { + "R": ${value_r}, + "Y": ${value_y}, + "B": ${value_b}, + "well": ${value_well} + }, + "session_id": ${value_session_id}, + "experiment_id": ${value_experiment_id} +} +mix_color(payload) +`; + return code; +}; + +// Define custom block: OT-2 Move Sensor Back +Blockly.Blocks['ot2_move_sensor_back'] = { + init: function() { + this.appendDummyInput() + .appendField('↩️ OT-2: Move Sensor Back'); + this.appendValueInput('SENSOR_STATUS') + .setCheck('String') + .appendField('Sensor Status'); + this.appendValueInput('SESSION_ID') + .setCheck('String') + .appendField('Session ID'); + this.appendValueInput('EXPERIMENT_ID') + .setCheck('String') + .appendField('Experiment ID'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Move the sensor back to charging position'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_move_sensor_back'] = function(block, generator) { + const value_sensor_status = generator.valueToCode(block, 'SENSOR_STATUS', pythonGenerator.ORDER_ATOMIC) || '"complete"'; + const value_session_id = generator.valueToCode(block, 'SESSION_ID', pythonGenerator.ORDER_ATOMIC) || '"session_001"'; + const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', pythonGenerator.ORDER_ATOMIC) || '"exp_001"'; + + const code = `payload = { + "command": { + "sensor_status": ${value_sensor_status} + }, + "session_id": ${value_session_id}, + "experiment_id": ${value_experiment_id} +} +move_sensor_back(payload) +`; + return code; +}; + +// Create toolbox +const toolbox = { + "kind": "categoryToolbox", + "contents": [ + { + "kind": "category", + "name": "OT-2 Commands", + "colour": "#5C81A6", + "contents": [ + { + "kind": "block", + "type": "ot2_home" + }, + { + "kind": "block", + "type": "ot2_mix_color", + "inputs": { + "R": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 100 + } + } + }, + "Y": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 50 + } + } + }, + "B": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 75 + } + } + }, + "WELL": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "A1" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + }, + { + "kind": "block", + "type": "ot2_move_sensor_back", + "inputs": { + "SENSOR_STATUS": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "complete" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + } + ] + }, + { + "kind": "category", + "name": "Logic", + "colour": "#5C68A6", + "contents": [ + { + "kind": "block", + "type": "controls_if" + }, + { + "kind": "block", + "type": "logic_compare" + } + ] + }, + { + "kind": "category", + "name": "Loops", + "colour": "#5CA65C", + "contents": [ + { + "kind": "block", + "type": "controls_repeat_ext", + "inputs": { + "TIMES": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 3 + } + } + } + } + }, + { + "kind": "block", + "type": "controls_whileUntil" + } + ] + }, + { + "kind": "category", + "name": "Math", + "colour": "#5C68A6", + "contents": [ + { + "kind": "block", + "type": "math_number" + }, + { + "kind": "block", + "type": "math_arithmetic" + } + ] + }, + { + "kind": "category", + "name": "Text", + "colour": "#5CA68A", + "contents": [ + { + "kind": "block", + "type": "text" + }, + { + "kind": "block", + "type": "text_print" + } + ] + }, + { + "kind": "category", + "name": "Variables", + "colour": "#A65C81", + "custom": "VARIABLE" + } + ] +}; + +// Initialize Blockly workspace +const workspace = Blockly.inject('blocklyDiv', { + toolbox: toolbox, + grid: { + spacing: 20, + length: 3, + colour: '#ccc', + snap: true + }, + zoom: { + controls: true, + wheel: true, + startScale: 1.0, + maxScale: 3, + minScale: 0.3, + scaleSpeed: 1.2 + }, + trashcan: true +}); + +// Load initial workspace + +// Load initial workspace - Step 2: Home block only +const startBlocks = { + "blocks": { + "languageVersion": 0, + "blocks": [ + { + "type": "ot2_home", + "id": "start_home", + "x": 50, + "y": 50 + } + ] + } +}; + +Blockly.serialization.workspaces.load(startBlocks, workspace); + +// Generate code function +function generateCode() { + const code = pythonGenerator.workspaceToCode(workspace); + const fullCode = `# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + +from OT2mqtt import mix_color, move_sensor_back, protocol + +# Main workflow +${code}`; + + document.getElementById('codeOutput').textContent = fullCode; +} + +// Update code on workspace change +workspace.addChangeListener(generateCode); + +// Generate initial code +generateCode(); + +// Expose generate function to button +window.generateCode = generateCode; diff --git a/scripts/blockly_app/src/steps/step3.js b/scripts/blockly_app/src/steps/step3.js new file mode 100644 index 00000000..9def35c2 --- /dev/null +++ b/scripts/blockly_app/src/steps/step3.js @@ -0,0 +1,377 @@ +/** + * Blockly OT-2 Integration Application + * + * This application demonstrates real Blockly installation with custom blocks + * for OT-2 liquid handler functions from OT2mqtt.py + */ + +import * as Blockly from 'blockly'; +import {pythonGenerator} from 'blockly/python'; + +// Define custom block: OT-2 Home +Blockly.Blocks['ot2_home'] = { + init: function() { + this.appendDummyInput() + .appendField('🏠 OT-2: Home Robot'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Home the OT-2 robot to its initial position'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_home'] = function(block, generator) { + const code = 'protocol.home()\n'; + return code; +}; + +// Define custom block: OT-2 Mix Color +Blockly.Blocks['ot2_mix_color'] = { + init: function() { + this.appendDummyInput() + .appendField('🎨 OT-2: Mix Color'); + this.appendValueInput('R') + .setCheck('Number') + .appendField('Red (µL)'); + this.appendValueInput('Y') + .setCheck('Number') + .appendField('Yellow (µL)'); + this.appendValueInput('B') + .setCheck('Number') + .appendField('Blue (µL)'); + this.appendValueInput('WELL') + .setCheck('String') + .appendField('Well'); + this.appendValueInput('SESSION_ID') + .setCheck('String') + .appendField('Session ID'); + this.appendValueInput('EXPERIMENT_ID') + .setCheck('String') + .appendField('Experiment ID'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Mix RGB colors in a well using the OT-2 pipette'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_mix_color'] = function(block, generator) { + const value_r = generator.valueToCode(block, 'R', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_y = generator.valueToCode(block, 'Y', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_b = generator.valueToCode(block, 'B', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_well = generator.valueToCode(block, 'WELL', pythonGenerator.ORDER_ATOMIC) || '"A1"'; + const value_session_id = generator.valueToCode(block, 'SESSION_ID', pythonGenerator.ORDER_ATOMIC) || '"session_001"'; + const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', pythonGenerator.ORDER_ATOMIC) || '"exp_001"'; + + const code = `payload = { + "command": { + "R": ${value_r}, + "Y": ${value_y}, + "B": ${value_b}, + "well": ${value_well} + }, + "session_id": ${value_session_id}, + "experiment_id": ${value_experiment_id} +} +mix_color(payload) +`; + return code; +}; + +// Define custom block: OT-2 Move Sensor Back +Blockly.Blocks['ot2_move_sensor_back'] = { + init: function() { + this.appendDummyInput() + .appendField('↩️ OT-2: Move Sensor Back'); + this.appendValueInput('SENSOR_STATUS') + .setCheck('String') + .appendField('Sensor Status'); + this.appendValueInput('SESSION_ID') + .setCheck('String') + .appendField('Session ID'); + this.appendValueInput('EXPERIMENT_ID') + .setCheck('String') + .appendField('Experiment ID'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Move the sensor back to charging position'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_move_sensor_back'] = function(block, generator) { + const value_sensor_status = generator.valueToCode(block, 'SENSOR_STATUS', pythonGenerator.ORDER_ATOMIC) || '"complete"'; + const value_session_id = generator.valueToCode(block, 'SESSION_ID', pythonGenerator.ORDER_ATOMIC) || '"session_001"'; + const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', pythonGenerator.ORDER_ATOMIC) || '"exp_001"'; + + const code = `payload = { + "command": { + "sensor_status": ${value_sensor_status} + }, + "session_id": ${value_session_id}, + "experiment_id": ${value_experiment_id} +} +move_sensor_back(payload) +`; + return code; +}; + +// Create toolbox +const toolbox = { + "kind": "categoryToolbox", + "contents": [ + { + "kind": "category", + "name": "OT-2 Commands", + "colour": "#5C81A6", + "contents": [ + { + "kind": "block", + "type": "ot2_home" + }, + { + "kind": "block", + "type": "ot2_mix_color", + "inputs": { + "R": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 100 + } + } + }, + "Y": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 50 + } + } + }, + "B": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 75 + } + } + }, + "WELL": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "A1" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + }, + { + "kind": "block", + "type": "ot2_move_sensor_back", + "inputs": { + "SENSOR_STATUS": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "complete" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + } + ] + }, + { + "kind": "category", + "name": "Logic", + "colour": "#5C68A6", + "contents": [ + { + "kind": "block", + "type": "controls_if" + }, + { + "kind": "block", + "type": "logic_compare" + } + ] + }, + { + "kind": "category", + "name": "Loops", + "colour": "#5CA65C", + "contents": [ + { + "kind": "block", + "type": "controls_repeat_ext", + "inputs": { + "TIMES": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 3 + } + } + } + } + }, + { + "kind": "block", + "type": "controls_whileUntil" + } + ] + }, + { + "kind": "category", + "name": "Math", + "colour": "#5C68A6", + "contents": [ + { + "kind": "block", + "type": "math_number" + }, + { + "kind": "block", + "type": "math_arithmetic" + } + ] + }, + { + "kind": "category", + "name": "Text", + "colour": "#5CA68A", + "contents": [ + { + "kind": "block", + "type": "text" + }, + { + "kind": "block", + "type": "text_print" + } + ] + }, + { + "kind": "category", + "name": "Variables", + "colour": "#A65C81", + "custom": "VARIABLE" + } + ] +}; + +// Initialize Blockly workspace +const workspace = Blockly.inject('blocklyDiv', { + toolbox: toolbox, + grid: { + spacing: 20, + length: 3, + colour: '#ccc', + snap: true + }, + zoom: { + controls: true, + wheel: true, + startScale: 1.0, + maxScale: 3, + minScale: 0.3, + scaleSpeed: 1.2 + }, + trashcan: true +}); + +// Load initial workspace + +// Load initial workspace - Step 3: Home block + Repeat loop +const startBlocks = { + "blocks": { + "languageVersion": 0, + "blocks": [ + { + "type": "ot2_home", + "id": "start_home", + "x": 50, + "y": 50 + }, + { + "type": "controls_repeat_ext", + "id": "repeat_loop", + "x": 50, + "y": 120, + "inputs": { + "TIMES": { + "shadow": { + "type": "math_number", + "id": "repeat_times", + "fields": { + "NUM": 3 + } + } + } + } + } + ] + } +}; + +Blockly.serialization.workspaces.load(startBlocks, workspace); + +// Generate code function +function generateCode() { + const code = pythonGenerator.workspaceToCode(workspace); + const fullCode = `# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + +from OT2mqtt import mix_color, move_sensor_back, protocol + +# Main workflow +${code}`; + + document.getElementById('codeOutput').textContent = fullCode; +} + +// Update code on workspace change +workspace.addChangeListener(generateCode); + +// Generate initial code +generateCode(); + +// Expose generate function to button +window.generateCode = generateCode; diff --git a/scripts/blockly_app/src/steps/step4.js b/scripts/blockly_app/src/steps/step4.js new file mode 100644 index 00000000..87219155 --- /dev/null +++ b/scripts/blockly_app/src/steps/step4.js @@ -0,0 +1,433 @@ +/** + * Blockly OT-2 Integration Application + * + * This application demonstrates real Blockly installation with custom blocks + * for OT-2 liquid handler functions from OT2mqtt.py + */ + +import * as Blockly from 'blockly'; +import {pythonGenerator} from 'blockly/python'; + +// Define custom block: OT-2 Home +Blockly.Blocks['ot2_home'] = { + init: function() { + this.appendDummyInput() + .appendField('🏠 OT-2: Home Robot'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Home the OT-2 robot to its initial position'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_home'] = function(block, generator) { + const code = 'protocol.home()\n'; + return code; +}; + +// Define custom block: OT-2 Mix Color +Blockly.Blocks['ot2_mix_color'] = { + init: function() { + this.appendDummyInput() + .appendField('🎨 OT-2: Mix Color'); + this.appendValueInput('R') + .setCheck('Number') + .appendField('Red (µL)'); + this.appendValueInput('Y') + .setCheck('Number') + .appendField('Yellow (µL)'); + this.appendValueInput('B') + .setCheck('Number') + .appendField('Blue (µL)'); + this.appendValueInput('WELL') + .setCheck('String') + .appendField('Well'); + this.appendValueInput('SESSION_ID') + .setCheck('String') + .appendField('Session ID'); + this.appendValueInput('EXPERIMENT_ID') + .setCheck('String') + .appendField('Experiment ID'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Mix RGB colors in a well using the OT-2 pipette'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_mix_color'] = function(block, generator) { + const value_r = generator.valueToCode(block, 'R', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_y = generator.valueToCode(block, 'Y', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_b = generator.valueToCode(block, 'B', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_well = generator.valueToCode(block, 'WELL', pythonGenerator.ORDER_ATOMIC) || '"A1"'; + const value_session_id = generator.valueToCode(block, 'SESSION_ID', pythonGenerator.ORDER_ATOMIC) || '"session_001"'; + const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', pythonGenerator.ORDER_ATOMIC) || '"exp_001"'; + + const code = `payload = { + "command": { + "R": ${value_r}, + "Y": ${value_y}, + "B": ${value_b}, + "well": ${value_well} + }, + "session_id": ${value_session_id}, + "experiment_id": ${value_experiment_id} +} +mix_color(payload) +`; + return code; +}; + +// Define custom block: OT-2 Move Sensor Back +Blockly.Blocks['ot2_move_sensor_back'] = { + init: function() { + this.appendDummyInput() + .appendField('↩️ OT-2: Move Sensor Back'); + this.appendValueInput('SENSOR_STATUS') + .setCheck('String') + .appendField('Sensor Status'); + this.appendValueInput('SESSION_ID') + .setCheck('String') + .appendField('Session ID'); + this.appendValueInput('EXPERIMENT_ID') + .setCheck('String') + .appendField('Experiment ID'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Move the sensor back to charging position'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_move_sensor_back'] = function(block, generator) { + const value_sensor_status = generator.valueToCode(block, 'SENSOR_STATUS', pythonGenerator.ORDER_ATOMIC) || '"complete"'; + const value_session_id = generator.valueToCode(block, 'SESSION_ID', pythonGenerator.ORDER_ATOMIC) || '"session_001"'; + const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', pythonGenerator.ORDER_ATOMIC) || '"exp_001"'; + + const code = `payload = { + "command": { + "sensor_status": ${value_sensor_status} + }, + "session_id": ${value_session_id}, + "experiment_id": ${value_experiment_id} +} +move_sensor_back(payload) +`; + return code; +}; + +// Create toolbox +const toolbox = { + "kind": "categoryToolbox", + "contents": [ + { + "kind": "category", + "name": "OT-2 Commands", + "colour": "#5C81A6", + "contents": [ + { + "kind": "block", + "type": "ot2_home" + }, + { + "kind": "block", + "type": "ot2_mix_color", + "inputs": { + "R": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 100 + } + } + }, + "Y": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 50 + } + } + }, + "B": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 75 + } + } + }, + "WELL": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "A1" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + }, + { + "kind": "block", + "type": "ot2_move_sensor_back", + "inputs": { + "SENSOR_STATUS": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "complete" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + } + ] + }, + { + "kind": "category", + "name": "Logic", + "colour": "#5C68A6", + "contents": [ + { + "kind": "block", + "type": "controls_if" + }, + { + "kind": "block", + "type": "logic_compare" + } + ] + }, + { + "kind": "category", + "name": "Loops", + "colour": "#5CA65C", + "contents": [ + { + "kind": "block", + "type": "controls_repeat_ext", + "inputs": { + "TIMES": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 3 + } + } + } + } + }, + { + "kind": "block", + "type": "controls_whileUntil" + } + ] + }, + { + "kind": "category", + "name": "Math", + "colour": "#5C68A6", + "contents": [ + { + "kind": "block", + "type": "math_number" + }, + { + "kind": "block", + "type": "math_arithmetic" + } + ] + }, + { + "kind": "category", + "name": "Text", + "colour": "#5CA68A", + "contents": [ + { + "kind": "block", + "type": "text" + }, + { + "kind": "block", + "type": "text_print" + } + ] + }, + { + "kind": "category", + "name": "Variables", + "colour": "#A65C81", + "custom": "VARIABLE" + } + ] +}; + +// Initialize Blockly workspace +const workspace = Blockly.inject('blocklyDiv', { + toolbox: toolbox, + grid: { + spacing: 20, + length: 3, + colour: '#ccc', + snap: true + }, + zoom: { + controls: true, + wheel: true, + startScale: 1.0, + maxScale: 3, + minScale: 0.3, + scaleSpeed: 1.2 + }, + trashcan: true +}); + +// Load initial workspace + +// Load initial workspace - Step 4: Home + Repeat + Mix Color +const startBlocks = { + "blocks": { + "languageVersion": 0, + "blocks": [ + { + "type": "ot2_home", + "id": "start_home", + "x": 50, + "y": 50 + }, + { + "type": "controls_repeat_ext", + "id": "repeat_loop", + "x": 50, + "y": 120, + "inputs": { + "TIMES": { + "shadow": { + "type": "math_number", + "id": "repeat_times", + "fields": { + "NUM": 3 + } + } + }, + "DO": { + "block": { + "type": "ot2_mix_color", + "id": "mix_block", + "inputs": { + "R": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 100 + } + } + }, + "Y": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 50 + } + } + }, + "B": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 75 + } + } + }, + "WELL": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "A1" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + } + } + } + } + ] + } +}; + +Blockly.serialization.workspaces.load(startBlocks, workspace); + +// Generate code function +function generateCode() { + const code = pythonGenerator.workspaceToCode(workspace); + const fullCode = `# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + +from OT2mqtt import mix_color, move_sensor_back, protocol + +# Main workflow +${code}`; + + document.getElementById('codeOutput').textContent = fullCode; +} + +// Update code on workspace change +workspace.addChangeListener(generateCode); + +// Generate initial code +generateCode(); + +// Expose generate function to button +window.generateCode = generateCode; diff --git a/scripts/blockly_app/src/steps/step5.js b/scripts/blockly_app/src/steps/step5.js new file mode 100644 index 00000000..76f547c9 --- /dev/null +++ b/scripts/blockly_app/src/steps/step5.js @@ -0,0 +1,465 @@ +/** + * Blockly OT-2 Integration Application + * + * This application demonstrates real Blockly installation with custom blocks + * for OT-2 liquid handler functions from OT2mqtt.py + */ + +import * as Blockly from 'blockly'; +import {pythonGenerator} from 'blockly/python'; + +// Define custom block: OT-2 Home +Blockly.Blocks['ot2_home'] = { + init: function() { + this.appendDummyInput() + .appendField('🏠 OT-2: Home Robot'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Home the OT-2 robot to its initial position'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_home'] = function(block, generator) { + const code = 'protocol.home()\n'; + return code; +}; + +// Define custom block: OT-2 Mix Color +Blockly.Blocks['ot2_mix_color'] = { + init: function() { + this.appendDummyInput() + .appendField('🎨 OT-2: Mix Color'); + this.appendValueInput('R') + .setCheck('Number') + .appendField('Red (µL)'); + this.appendValueInput('Y') + .setCheck('Number') + .appendField('Yellow (µL)'); + this.appendValueInput('B') + .setCheck('Number') + .appendField('Blue (µL)'); + this.appendValueInput('WELL') + .setCheck('String') + .appendField('Well'); + this.appendValueInput('SESSION_ID') + .setCheck('String') + .appendField('Session ID'); + this.appendValueInput('EXPERIMENT_ID') + .setCheck('String') + .appendField('Experiment ID'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Mix RGB colors in a well using the OT-2 pipette'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_mix_color'] = function(block, generator) { + const value_r = generator.valueToCode(block, 'R', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_y = generator.valueToCode(block, 'Y', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_b = generator.valueToCode(block, 'B', pythonGenerator.ORDER_ATOMIC) || '0'; + const value_well = generator.valueToCode(block, 'WELL', pythonGenerator.ORDER_ATOMIC) || '"A1"'; + const value_session_id = generator.valueToCode(block, 'SESSION_ID', pythonGenerator.ORDER_ATOMIC) || '"session_001"'; + const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', pythonGenerator.ORDER_ATOMIC) || '"exp_001"'; + + const code = `payload = { + "command": { + "R": ${value_r}, + "Y": ${value_y}, + "B": ${value_b}, + "well": ${value_well} + }, + "session_id": ${value_session_id}, + "experiment_id": ${value_experiment_id} +} +mix_color(payload) +`; + return code; +}; + +// Define custom block: OT-2 Move Sensor Back +Blockly.Blocks['ot2_move_sensor_back'] = { + init: function() { + this.appendDummyInput() + .appendField('↩️ OT-2: Move Sensor Back'); + this.appendValueInput('SENSOR_STATUS') + .setCheck('String') + .appendField('Sensor Status'); + this.appendValueInput('SESSION_ID') + .setCheck('String') + .appendField('Session ID'); + this.appendValueInput('EXPERIMENT_ID') + .setCheck('String') + .appendField('Experiment ID'); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip('Move the sensor back to charging position'); + this.setHelpUrl(''); + } +}; + +pythonGenerator.forBlock['ot2_move_sensor_back'] = function(block, generator) { + const value_sensor_status = generator.valueToCode(block, 'SENSOR_STATUS', pythonGenerator.ORDER_ATOMIC) || '"complete"'; + const value_session_id = generator.valueToCode(block, 'SESSION_ID', pythonGenerator.ORDER_ATOMIC) || '"session_001"'; + const value_experiment_id = generator.valueToCode(block, 'EXPERIMENT_ID', pythonGenerator.ORDER_ATOMIC) || '"exp_001"'; + + const code = `payload = { + "command": { + "sensor_status": ${value_sensor_status} + }, + "session_id": ${value_session_id}, + "experiment_id": ${value_experiment_id} +} +move_sensor_back(payload) +`; + return code; +}; + +// Create toolbox +const toolbox = { + "kind": "categoryToolbox", + "contents": [ + { + "kind": "category", + "name": "OT-2 Commands", + "colour": "#5C81A6", + "contents": [ + { + "kind": "block", + "type": "ot2_home" + }, + { + "kind": "block", + "type": "ot2_mix_color", + "inputs": { + "R": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 100 + } + } + }, + "Y": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 50 + } + } + }, + "B": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 75 + } + } + }, + "WELL": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "A1" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + }, + { + "kind": "block", + "type": "ot2_move_sensor_back", + "inputs": { + "SENSOR_STATUS": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "complete" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + } + ] + }, + { + "kind": "category", + "name": "Logic", + "colour": "#5C68A6", + "contents": [ + { + "kind": "block", + "type": "controls_if" + }, + { + "kind": "block", + "type": "logic_compare" + } + ] + }, + { + "kind": "category", + "name": "Loops", + "colour": "#5CA65C", + "contents": [ + { + "kind": "block", + "type": "controls_repeat_ext", + "inputs": { + "TIMES": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 3 + } + } + } + } + }, + { + "kind": "block", + "type": "controls_whileUntil" + } + ] + }, + { + "kind": "category", + "name": "Math", + "colour": "#5C68A6", + "contents": [ + { + "kind": "block", + "type": "math_number" + }, + { + "kind": "block", + "type": "math_arithmetic" + } + ] + }, + { + "kind": "category", + "name": "Text", + "colour": "#5CA68A", + "contents": [ + { + "kind": "block", + "type": "text" + }, + { + "kind": "block", + "type": "text_print" + } + ] + }, + { + "kind": "category", + "name": "Variables", + "colour": "#A65C81", + "custom": "VARIABLE" + } + ] +}; + +// Initialize Blockly workspace +const workspace = Blockly.inject('blocklyDiv', { + toolbox: toolbox, + grid: { + spacing: 20, + length: 3, + colour: '#ccc', + snap: true + }, + zoom: { + controls: true, + wheel: true, + startScale: 1.0, + maxScale: 3, + minScale: 0.3, + scaleSpeed: 1.2 + }, + trashcan: true +}); + +// Load initial workspace + +// Load initial workspace - Step 5: Complete workflow +const startBlocks = { + "blocks": { + "languageVersion": 0, + "blocks": [ + { + "type": "ot2_home", + "id": "start_home", + "x": 50, + "y": 50 + }, + { + "type": "controls_repeat_ext", + "id": "repeat_loop", + "x": 50, + "y": 120, + "inputs": { + "TIMES": { + "shadow": { + "type": "math_number", + "id": "repeat_times", + "fields": { + "NUM": 3 + } + } + }, + "DO": { + "block": { + "type": "ot2_mix_color", + "id": "mix_block", + "inputs": { + "R": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 100 + } + } + }, + "Y": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 50 + } + } + }, + "B": { + "shadow": { + "type": "math_number", + "fields": { + "NUM": 75 + } + } + }, + "WELL": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "A1" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + }, + "next": { + "block": { + "type": "ot2_move_sensor_back", + "id": "sensor_block", + "inputs": { + "SENSOR_STATUS": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "complete" + } + } + }, + "SESSION_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "session_001" + } + } + }, + "EXPERIMENT_ID": { + "shadow": { + "type": "text", + "fields": { + "TEXT": "exp_001" + } + } + } + } + } + } + } + } + } + } + ] + } +}; + +Blockly.serialization.workspaces.load(startBlocks, workspace); + +// Generate code function +function generateCode() { + const code = pythonGenerator.workspaceToCode(workspace); + const fullCode = `# Generated from Blockly visual programming +# This code uses functions from OT2mqtt.py + +from OT2mqtt import mix_color, move_sensor_back, protocol + +# Main workflow +${code}`; + + document.getElementById('codeOutput').textContent = fullCode; +} + +// Update code on workspace change +workspace.addChangeListener(generateCode); + +// Generate initial code +generateCode(); + +// Expose generate function to button +window.generateCode = generateCode; diff --git a/scripts/blockly_app/webpack.config.js b/scripts/blockly_app/webpack.config.js index 9701f9c3..b05424a1 100644 --- a/scripts/blockly_app/webpack.config.js +++ b/scripts/blockly_app/webpack.config.js @@ -2,9 +2,16 @@ const path = require('path'); module.exports = { mode: 'development', - entry: './src/index.js', + entry: { + bundle: './src/index.js', + step1: './src/steps/step1.js', + step2: './src/steps/step2.js', + step3: './src/steps/step3.js', + step4: './src/steps/step4.js', + step5: './src/steps/step5.js', + }, output: { - filename: 'bundle.js', + filename: '[name].js', path: path.resolve(__dirname, 'dist'), }, devServer: {