From 321ed7438dbbb971870a32b9db03ed352202cd50 Mon Sep 17 00:00:00 2001
From: Irene-Maxine <114802521+Irene-Maxine@users.noreply.github.com>
Date: Sat, 22 Feb 2025 12:49:30 +0800
Subject: [PATCH] =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=85=83=E7=BB=84=E8=BD=AC?=
=?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../micropython_esp32c2/build/lib/map.json | 82 -
boards/default/micropython_esp32c2/index.xml | 6906 ++-
.../micropython_esp32c2/main.bundle.js | 47347 +++++++++++++++-
.../micropython_esp32c2/main.bundle.js.map | 1 +
.../{main.c30a59f3.css => main.2265d699.css} | 5 +
.../styles/main.2265d699.css.map | 1 +
.../micropython/generators/sensor_onboard.js | 2 +-
.../micropython_educore/template.xml | 8 +-
.../micropython_esp32/template.xml | 8 +-
.../micropython_esp32c2/template.xml | 10 +-
.../micropython_esp32c3/template.xml | 8 +-
.../micropython_esp32s2/template.xml | 8 +-
.../micropython_esp32s3/template.xml | 8 +-
boards/default_src/python/blocks/tuple.js | 11 +
boards/default_src/python/generators/tuple.js | 6 +
15 files changed, 54300 insertions(+), 111 deletions(-)
delete mode 100644 boards/default/micropython_esp32c2/build/lib/map.json
create mode 100644 boards/default/micropython_esp32c2/main.bundle.js.map
rename boards/default/micropython_esp32c2/styles/{main.c30a59f3.css => main.2265d699.css} (99%)
create mode 100644 boards/default/micropython_esp32c2/styles/main.2265d699.css.map
diff --git a/boards/default/micropython_esp32c2/build/lib/map.json b/boards/default/micropython_esp32c2/build/lib/map.json
deleted file mode 100644
index 2bbbd5c3..00000000
--- a/boards/default/micropython_esp32c2/build/lib/map.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
- "ble_central": {
- "__require__": [
- "time",
- "gc",
- "bluetooth",
- "micropython",
- "ubinascii",
- "ble_advertising"
- ],
- "__file__": true,
- "__size__": 7378,
- "__name__": "ble_central.py"
- },
- "mini_bot": {
- "__require__": [
- "time",
- "math",
- "esp",
- "micropython",
- "framebuf"
- ],
- "__file__": true,
- "__size__": 12529,
- "__name__": "mini_bot.py"
- },
- "mini_g2": {
- "__require__": [
- "gc",
- "machine",
- "rc522"
- ],
- "__file__": true,
- "__size__": 544,
- "__name__": "mini_g2.py"
- },
- "mini_go": {
- "__require__": [
- "time",
- "gc",
- "math",
- "tm1931",
- "machine"
- ],
- "__file__": true,
- "__size__": 8481,
- "__name__": "mini_go.py"
- },
- "mixgo_mini": {
- "__require__": [
- "time",
- "gc",
- "esp32",
- "machine",
- "ws2812x",
- "musicx",
- "sc7a20",
- "ap3216c",
- "mini_bot"
- ],
- "__file__": true,
- "__size__": 4611,
- "__name__": "mixgo_mini.py"
- },
- "musicx": {
- "__require__": [
- "time"
- ],
- "__file__": true,
- "__size__": 3545,
- "__name__": "musicx.py"
- },
- "ws2812x": {
- "__require__": [
- "time",
- "machine"
- ],
- "__file__": true,
- "__size__": 1881,
- "__name__": "ws2812x.py"
- }
-}
\ No newline at end of file
diff --git a/boards/default/micropython_esp32c2/index.xml b/boards/default/micropython_esp32c2/index.xml
index 197b5601..f62ed992 100644
--- a/boards/default/micropython_esp32c2/index.xml
+++ b/boards/default/micropython_esp32c2/index.xml
@@ -1 +1,6905 @@
-02000attachInterrupt_funcattachInterrupt_func10,1,2,3051iDIVIDE10Exception as eetestThreadtestThreadWHILETRUEHello Mixly from Thread!ms10timtim1000tim_callbacktim_callback5000200090x151100a10.998124.829971100101010001100501100110000x2x0,1,2,30,1,2,30,1,2,3xMixlyHelloMixly65axMixlyMixly0Mixly02MixlyMixlyHello,mixlyl--mylistHello,mixlymixlymixpyI love mixly!I love mixlyRandom No. is {}int1100input('1+2*3')mylist1,2,3,4,5mylist0mylist02mylistmylistmylist0mylist00mylist00mylist0mylist0mylist0mylistmylistmylistxmytup1,2,3,4,5mytup0mytup02mytupmytupmytupmytup0mytupmytup1mytup2xmydictmydictkeymydictkey0mydictkey0mydictkeymydictkeymydictkey0mydictmydictmydictmydictxmydict{"name":"Mixly","color":"green"}s11,2,3,4,5s1s1s1s2s1s2s10s1Mixlys1s2xMixlyMixlyMixly,HelloMixlyprompt02MixlyMixly0XFF00FFcodebMixlyMixly1attachInterrupt_func1attachInterrupt_funcattachInterrupt_funcrfid00Mixly0Mixly2022711420452023,1,1,12,0,01802910044044010000412000000000001000100010020000Hello, Mixly!10Mixly0MixlyMixly500MixlyMixly50010.501001001000interrupt_funcinterrupt_functurnsdistance00Mixly0Mixlywifinamewifipassword8080AUTH TOKEN0_value02000notify0Your Target Emailsubjectbodycolor#FF0000wifinamewifipasswordmixio.mixly.cnmixio.mixly.cnA1B2C3mixio.mixly.cnusernamepasswordMyProjecttopicmsgtopicmethodmethodEQmsg1content"long""lat""message"012content"key1""key2""key3"012http://mixio.mixly.org/time.phpmixio.mixly.cnwifinamewifipasswordcsub_cb31444082183.230.40.3914109261n63JySRowo13ZLDBKw6y896E0=MixlyRobotsub_cbEQmsg1ciot_dict"sound"ciot_dictccwifinamewifipasswordclientEnter Your API_KEYEnter Your SECRET_KEYclient1clientS72099北京今天天气如何?wifinamewifipasswordSVa3S0UKHIy9dDArs北京SVa3S0UKHIy9dDArs北京10000ble_cble_pMixlyble_cble_cMixlyble_cble_xble_xble_xMixlyble_xble_xble_methodble_methodEQdataMixlyhandlehandle_methodhandle_methodkey1key2key3keyxble_keyboard_mouse10Hello, Mixly!1002000001000009000,4500,563,5630x1234callbackcmdaddrrawpulsesi2c2221100000i2c00i2c00i2ci2ci2cspi2000004512spi200000buf50spi10spi100xffspibufspibuf0xffspi12345spi12345buf1Mixlyow12owowow12345ow12345owmy_now0my_nowmy_nowmy_nowFFFFFFFFFFFFmixlymy_nowmy_nowcbcbEQmsg1spi10000004512spi8my_lora433.925716my_loramy_loramy_loraMixlyi2c_extend45100000xsensori2c_extendxsensorxsensorxsensorxsensorxsensorxsensorxsensorxsensorxsensorxsensorxsensorxsensorxsensorxsensorxsensorxsensorxsensorxsensorxsensorxsensor5000500xsensorxsensorxsensorxsensorxsensorxsensorspi10000004512spi8ysensorysensor0ysensor0ysensor0Mixlyysensor0Mixlyysensorysensorysensor39,119.96,31.67ysensorysensorstation45ps2_handle24512ps2_handle50ps2_handleps2_handlews_wr0121ws_wrws_wrws_wr360002zsensorzsensorzsensorzsensorweight12500weight100midi0midi440midi4401000midimidimidi4120midimidirgb04rgb0000rgb000rgb100100i2c_extend45400000Motori2c_extendMotor100Motor1024102402actuatoractuatoractuatoractuatoractuator你好米思齐actuatoractuatoractuator20actuatoractuatormixly*.mp3i2c_extend45400000matrixi2c_extendmatrixmatrixmatrixMixly0matrixMixlymatrixMixly500matrixMixlymatrixMixly500matrixmatrix>matrixmatrix1matrixmatrixmatrix0.5matrixmatrixi2c_extend45100000dispi2c_extenddisp2333dispdisp1i2c_extend45100000lcdi2c_extend0x27lcdMixly00lcdMixly005lcdlcdi2c_extend45100000oledi2c_extend0x3coledoled001oledMixlyoledMixly0010oledMixlyoledMixly0550oledMixlyoledMixly5500oled0020oled005050oled20202015oled1oled00oled00oledspi1000000450spi78tft_st7789135240tft_st7789001#ffffff255,255,0tft_st7789Mixly0050#ffffff255,255,0tft_st7789Mixly0550#ffffff255,255,0tft_st7789Mixly5500#ffffff255,255,0tft_st7789004040#ffffff255,255,0tft_st778912ai_sensorai_sensor98ai_sensor255,255,00,0,255ai_sensor'ni-hao','hong-se','lv-se','lan-se','bai-se','hei-se'0.1ai_sensor1.wav5ai_sensor1.wav100ai_sensorinfoai_sensorqrcodeinfoai_sensorbarcodeinfoai_sensortaginfoai_sensor25002525lineinfoai_sensor35002100circleinfoai_sensor10000rectinfoai_sensorinfoinfoai_sensorcolor_lab101colorsai_sensor'猫','狗','笔记本','笔'mixgo5自模型训练infoai_sensor'猫','狗','笔记本','笔'mixgo自模型识别objectsinfoai_sensor0.1606, 0.3562, 0.4712, 0.9568, 0.9877, 1.9108, 1.8761, 3.5310, 3.4423, 5.6823/sd/masks.kmodel外部模型加载objects12ai_sensorai_sensor98ai_sensor255,255,00,0,255ai_sensor1.wav5ai_sensor1.wav100infoai_sensorlicensePlateinfoai_sensorfaceinfoai_sensor20objectsai_sensorinfoai_sensorqrcodeinfoai_sensorbarcodeinfoai_sensortaginfoai_sensor25002525lineinfoai_sensor35002100circleinfoai_sensor10000rectinfoai_sensorinfoinfoai_sensorcolor_lab101colorsfilename.txtfMixlyfff0fffpathpathfilename.txtsrcname.txtdstname.txtpathff0wifinamewifipasswordwlanwlanwlanwlanwlan127.16.0.801234567wlanwlanwlanwlanwlan127.16.0.81connect_wifiwlanAPwlanTruewlanwlanSmallCabbage1WHILETRUEEQ0wlan0.0.0.0ms1000TRUEss0.0.0.080s192.168.0.180s5ss1024sbMixlyresponses1024sbMixlyresponse127.0.0.180sntp.aliyun.comresponsehttp://mixio.mixly.cnresponsehttp://mixio.mixly.cnresponse
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 2000
+
+
+
+
+
+
+
+
+
+
+ attachInterrupt_func
+
+
+
+
+
+
+
+ attachInterrupt_func
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+ 0,1,2,3
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+ 1
+
+
+
+
+
+
+ i
+
+
+
+
+
+
+
+
+
+
+
+
+ DIVIDE
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ Exception as e
+
+
+
+
+
+
+ e
+
+
+
+
+
+
+
+
+ testThread
+
+
+
+
+
+
+
+
+
+ testThread
+
+
+ WHILE
+
+
+ TRUE
+
+
+
+
+
+
+ Hello Mixly from Thread!
+
+
+
+
+ ms
+
+
+ 10
+
+
+
+
+
+
+
+
+
+
+
+
+ tim
+
+
+
+
+
+
+ tim
+
+
+
+
+ 1000
+
+
+
+
+ tim_callback
+
+
+
+
+
+
+
+ tim_callback
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 500
+
+
+
+
+ 0
+
+
+
+
+
+
+ 2000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 90
+
+
+
+
+
+
+ x
+
+
+
+
+
+
+ 15
+
+
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+ a
+
+
+
+
+ 1
+
+
+
+
+
+
+ 0.998
+
+
+
+
+
+
+ 1
+
+
+
+
+ 2
+
+
+
+
+
+
+ 4.8
+
+
+
+
+ 2
+
+
+
+
+
+
+
+ 997
+
+
+
+
+
+
+ 1
+
+
+
+
+ 100
+
+
+
+
+
+
+ 1010
+
+
+
+
+
+ 1000
+
+
+
+
+ 1
+
+
+
+
+ 100
+
+
+
+
+
+
+ 50
+
+
+
+
+ 1
+
+
+
+
+ 100
+
+
+
+
+ 1
+
+
+
+
+ 1000
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ x
+
+
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+ x
+
+
+
+
+ 0,1,2,3
+
+
+
+
+
+
+ 0,1,2,3
+
+
+
+
+ 0,1,2,3
+
+
+
+
+
+
+ x
+
+
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ Hello
+
+
+
+
+ Mixly
+
+
+
+
+
+
+
+ 65
+
+
+
+
+
+
+ a
+
+
+
+
+
+
+ x
+
+
+
+
+
+
+ Mixly
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Mixly
+
+
+
+
+ 0
+
+
+
+
+
+
+ Mixly
+
+
+
+
+ 0
+
+
+
+
+ 2
+
+
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ Hello,mixly
+
+
+
+
+ l
+
+
+
+
+
+
+ --
+
+
+
+
+ mylist
+
+
+
+
+
+
+ Hello,mixly
+
+
+
+
+ mixly
+
+
+
+
+ mixpy
+
+
+
+
+
+
+ I love mixly!
+
+
+
+
+
+
+
+
+
+
+
+ I love mixly
+
+
+
+
+
+
+
+ Random No. is {}
+
+
+
+
+ int
+
+
+ 1
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+ input('1+2*3')
+
+
+
+
+
+
+
+ mylist
+
+
+ 1,2,3,4,5
+
+
+
+
+
+
+
+ mylist
+
+
+
+
+ 0
+
+
+
+
+
+
+ mylist
+
+
+
+
+ 0
+
+
+
+
+ 2
+
+
+
+
+
+
+ mylist
+
+
+
+
+
+
+
+ mylist
+
+
+
+
+
+
+ mylist
+
+
+
+
+ 0
+
+
+
+
+
+
+ mylist
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+ mylist
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+ mylist
+
+
+
+
+ 0
+
+
+
+
+
+
+ mylist
+
+
+
+
+ 0
+
+
+
+
+
+
+ mylist
+
+
+
+
+ 0
+
+
+
+
+
+
+ mylist
+
+
+
+
+
+
+ mylist
+
+
+
+
+
+
+ mylist
+
+
+
+
+
+
+
+ x
+
+
+
+
+
+
+
+ mytup
+
+
+ 1,2,3,4,5
+
+
+
+
+
+
+
+ mytup
+
+
+
+
+ 0
+
+
+
+
+
+
+ mytup
+
+
+
+
+ 0
+
+
+
+
+ 2
+
+
+
+
+
+
+ mytup
+
+
+
+
+
+
+ mytup
+
+
+
+
+
+
+ mytup
+
+
+
+
+
+
+ mytup
+
+
+
+
+ 0
+
+
+
+
+
+
+ mytup
+
+
+
+
+
+
+ mytup1
+
+
+
+
+ mytup2
+
+
+
+
+
+
+
+ x
+
+
+
+
+
+
+
+
+
+ mydict
+
+
+
+
+
+
+ mydict
+
+
+
+
+ key
+
+
+
+
+
+
+ mydict
+
+
+
+
+ key
+
+
+
+
+ 0
+
+
+
+
+
+
+ mydict
+
+
+
+
+ key
+
+
+
+
+ 0
+
+
+
+
+
+
+ mydict
+
+
+
+
+ key
+
+
+
+
+
+
+ mydict
+
+
+
+
+ key
+
+
+
+
+
+
+ mydict
+
+
+
+
+ key
+
+
+
+
+ 0
+
+
+
+
+
+
+ mydict
+
+
+
+
+
+
+
+ mydict
+
+
+
+
+
+
+ mydict
+
+
+
+
+
+
+ mydict
+
+
+
+
+
+
+ x
+
+
+
+
+
+
+ mydict
+
+
+
+
+
+
+ {"name":"Mixly","color":"green"}
+
+
+
+
+
+
+
+ s1
+
+
+ 1,2,3,4,5
+
+
+
+
+
+
+ s1
+
+
+
+
+
+
+ s1
+
+
+
+
+
+
+ s1
+
+
+
+
+ s2
+
+
+
+
+
+
+ s1
+
+
+
+
+ s2
+
+
+
+
+
+
+ s1
+
+
+
+
+ 0
+
+
+
+
+
+
+ s1
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ s1
+
+
+
+
+ s2
+
+
+
+
+
+
+ x
+
+
+
+
+
+
+
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ Mixly
+
+
+
+
+ ,
+
+
+
+
+
+
+
+ Hello
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ prompt
+
+
+
+
+
+
+ 0
+
+
+
+
+ 2
+
+
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ 0XFF00FF
+
+
+
+
+
+
+ code
+
+
+
+
+
+
+
+
+ b
+
+
+ Mixly
+
+
+
+
+ Mixly
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+ attachInterrupt_func
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ attachInterrupt_func
+
+
+
+
+
+
+
+ attachInterrupt_func
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ rfid
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+ 0
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ 0
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ 2022
+
+
+
+
+ 7
+
+
+
+
+ 1
+
+
+
+
+ 14
+
+
+
+
+ 20
+
+
+
+
+ 45
+
+
+
+
+
+
+ (2023,1,1,12,0,0)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 18029
+
+
+
+
+
+
+ 2023,1,1,12,0,0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+
+
+
+
+ 440
+
+
+
+
+
+
+ 440
+
+
+
+
+ 1000
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+ 4
+
+
+
+
+ 120
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+
+
+ 1000
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+ 20000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hello, Mixly!
+
+
+
+
+ 10
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Mixly
+
+
+
+
+ 0
+
+
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ Mixly
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ Mixly
+
+
+
+
+ 500
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0.5
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ interrupt_func
+
+
+
+
+
+
+
+
+ interrupt_func
+
+
+
+
+
+ turns
+
+
+
+
+ distance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ 0
+
+
+
+
+ Mixly
+
+
+
+
+
+
+
+
+
+
+ wifiname
+
+
+
+
+ wifipassword
+
+
+
+
+
+
+
+
+
+
+
+ 8080
+
+
+
+
+ AUTH TOKEN
+
+
+
+
+
+
+ 0
+
+
+
+
+ _value
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 2
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+ notify
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+ Your Target Email
+
+
+
+
+ subject
+
+
+
+
+ body
+
+
+
+
+
+
+ color
+
+
+
+
+ #FF0000
+
+
+
+
+
+
+
+
+ wifiname
+
+
+
+
+ wifipassword
+
+
+
+
+
+
+ mixio.mixly.cn
+
+
+
+
+
+
+
+
+
+
+
+ mixio.mixly.cn
+
+
+
+
+ A1B2C3
+
+
+
+
+
+
+ mixio.mixly.cn
+
+
+
+
+ username
+
+
+
+
+ password
+
+
+
+
+ MyProject
+
+
+
+
+
+
+ topic
+
+
+
+
+ msg
+
+
+
+
+
+
+ topic
+
+
+
+
+ method
+
+
+
+
+
+
+
+
+
+ method
+
+
+
+
+ EQ
+
+
+ msg
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+ content
+
+ "long"
+ "lat"
+ "message"
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 2
+
+
+
+
+
+
+
+
+ content
+
+ "key1"
+ "key2"
+ "key3"
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+ http://mixio.mixly.org/time.php
+
+
+
+
+
+
+
+ mixio.mixly.cn
+
+
+
+
+
+
+
+
+
+ wifiname
+
+
+
+
+ wifipassword
+
+
+
+
+
+
+ c
+
+
+
+
+ sub_cb
+
+
+
+
+ 31444082
+
+
+
+
+ 183.230.40.39
+
+
+
+
+ 141092
+
+
+
+
+ 61n63JySRowo13ZLDBKw6y896E0=
+
+
+
+
+ MixlyRobot
+
+
+
+
+
+
+
+
+ sub_cb
+
+
+
+
+ EQ
+
+
+ msg
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+ c
+
+
+
+
+
+ iot_dict
+ "sound"
+
+
+
+
+
+
+
+ c
+
+
+
+
+ iot_dict
+
+
+
+
+
+
+
+ c
+
+
+
+
+
+
+ c
+
+
+
+
+
+
+
+
+ wifiname
+
+
+
+
+ wifipassword
+
+
+
+
+
+
+ client
+
+
+
+
+ Enter Your API_KEY
+
+
+
+
+ Enter Your SECRET_KEY
+
+
+
+
+
+
+ client
+
+
+
+
+ 1
+
+
+
+
+
+
+ client
+
+
+
+
+ S72099
+
+
+
+
+ 北京今天天气如何?
+
+
+
+
+
+
+
+
+ wifiname
+
+
+
+
+ wifipassword
+
+
+
+
+
+
+
+ SVa3S0UKHIy9dDArs
+
+
+
+
+ 北京
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SVa3S0UKHIy9dDArs
+
+
+
+
+ 北京
+
+
+
+
+ 1
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+ ble_c
+
+
+
+
+
+
+ ble_p
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ ble_c
+
+
+
+
+
+
+ ble_c
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ ble_c
+
+
+
+
+
+
+ ble_x
+
+
+
+
+
+
+ ble_x
+
+
+
+
+
+
+ ble_x
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ ble_x
+
+
+
+
+
+
+ ble_x
+
+
+
+
+ ble_method
+
+
+
+
+
+
+
+ ble_method
+
+
+
+
+ EQ
+
+
+ data
+
+
+
+
+ Mixly
+
+
+
+
+
+
+
+
+
+
+
+
+ handle
+
+
+
+
+ handle_method
+
+
+
+
+
+
+
+
+
+
+ handle_method
+
+
+
+
+
+ key1
+
+
+
+
+ key2
+
+
+
+
+ key3
+
+
+
+
+ keyx
+
+
+
+
+
+
+
+
+
+
+
+ ble_keyboard_mouse
+
+
+
+
+
+
+
+
+ 10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hello, Mixly!
+
+
+
+
+ 10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 20000
+
+
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+ 9000,4500,563,563
+
+
+
+
+
+
+ 0x1234
+
+
+
+
+
+
+
+
+
+
+
+ callback
+
+
+
+
+
+ cmd
+
+
+
+
+ addr
+
+
+
+
+ raw
+
+
+
+
+ pulses
+
+
+
+
+
+
+
+
+
+
+
+ i2c
+
+
+
+
+ 22
+
+
+
+
+ 21
+
+
+
+
+ 100000
+
+
+
+
+
+
+ i2c
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+ i2c
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+ i2c
+
+
+
+
+
+
+ i2c
+
+
+
+
+
+
+ i2c
+
+
+
+
+
+
+
+
+ spi
+
+
+
+
+ 200000
+
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ 12
+
+
+
+
+
+
+ spi
+
+
+
+
+ 200000
+
+
+
+
+
+
+ buf
+
+
+
+
+ 50
+
+
+
+
+
+
+ spi
+
+
+
+
+ 10
+
+
+
+
+
+
+ spi
+
+
+
+
+ 10
+
+
+
+
+ 0xff
+
+
+
+
+
+
+ spi
+
+
+
+
+ buf
+
+
+
+
+
+
+ spi
+
+
+
+
+ buf
+
+
+
+
+ 0xff
+
+
+
+
+
+
+ spi
+
+
+
+
+ 12345
+
+
+
+
+
+
+ spi
+
+
+
+
+ 12345
+
+
+
+
+ buf
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+ Mixly
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ow
+
+
+
+
+ 12
+
+
+
+
+
+
+ ow
+
+
+
+
+
+
+ ow
+
+
+
+
+
+
+ ow
+
+
+
+
+ 12345
+
+
+
+
+
+
+ ow
+
+
+
+
+ 12345
+
+
+
+
+
+
+ ow
+
+
+
+
+
+
+
+
+ my_now
+
+
+
+
+ 0
+
+
+
+
+
+
+ my_now
+
+
+
+
+
+
+ my_now
+
+
+
+
+
+
+ my_now
+
+
+
+
+ FFFFFFFFFFFF
+
+
+
+
+ mixly
+
+
+
+
+
+
+ my_now
+
+
+
+
+
+
+ my_now
+
+
+
+
+ cb
+
+
+
+
+
+
+
+
+ cb
+
+
+
+
+ EQ
+
+
+ msg
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+ spi
+
+
+
+
+ 1000000
+
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ 12
+
+
+
+
+
+
+ spi
+
+
+
+
+ 8
+
+
+
+
+ my_lora
+
+
+
+
+ 433.92
+
+
+
+
+ 5
+
+
+
+
+ 7
+
+
+
+
+ 16
+
+
+
+
+
+
+ my_lora
+
+
+
+
+
+
+ my_lora
+
+
+
+
+
+
+ my_lora
+
+
+
+
+ Mixly
+
+
+
+
+
+
+
+
+
+
+ i2c_extend
+
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ 100000
+
+
+
+
+
+
+ xsensor
+
+
+
+
+ i2c_extend
+
+
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+ 5000
+
+
+
+
+ 500
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+
+
+
+
+ xsensor
+
+
+
+
+
+ spi
+
+
+
+
+ 1000000
+
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ 12
+
+
+
+
+
+
+ spi
+
+
+
+
+ 8
+
+
+
+
+ ysensor
+
+
+
+
+
+
+
+
+
+ ysensor
+
+
+
+
+ 0
+
+
+
+
+
+
+ ysensor
+
+
+
+
+ 0
+
+
+
+
+
+
+ ysensor
+
+
+
+
+ 0
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ ysensor
+
+
+
+
+ 0
+
+
+
+
+ Mixly
+
+
+
+
+
+
+
+ ysensor
+
+
+
+
+
+
+
+ ysensor
+
+
+
+
+
+
+ ysensor
+
+
+
+
+
+ 39,119.96,31.67
+
+
+
+
+
+
+ ysensor
+
+
+
+
+
+
+ ysensor
+
+
+
+
+ station
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+
+
+
+ ps2_handle
+
+
+
+
+ 2
+
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ 12
+
+
+
+
+
+
+ ps2_handle
+
+
+
+
+ 50
+
+
+
+
+
+
+ ps2_handle
+
+
+
+
+
+
+ ps2_handle
+
+
+
+
+
+
+ ws_wr
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 21
+
+
+
+
+
+
+ ws_wr
+
+
+
+
+
+
+ ws_wr
+
+
+
+
+
+
+ ws_wr
+
+
+
+
+ 3600
+
+
+
+
+
+
+ 0
+
+
+
+
+ 2
+
+
+
+
+
+
+ zsensor
+
+
+
+
+
+
+
+
+ zsensor
+
+
+
+
+
+
+ zsensor
+
+
+
+
+
+
+ zsensor
+
+
+
+
+
+
+ weight
+
+
+
+
+ 1
+
+
+
+
+ 2
+
+
+
+
+ 500
+
+
+
+
+
+
+ weight
+
+
+
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+ midi
+
+
+
+
+ 0
+
+
+
+
+
+
+ midi
+
+
+
+
+ 440
+
+
+
+
+
+
+ midi
+
+
+
+
+ 440
+
+
+
+
+ 1000
+
+
+
+
+
+
+ midi
+
+
+
+
+
+
+
+
+
+ midi
+
+
+
+
+
+
+ midi
+
+
+
+
+ 4
+
+
+
+
+ 120
+
+
+
+
+
+
+ midi
+
+
+
+
+
+
+ midi
+
+
+
+
+
+
+ rgb
+
+
+
+
+ 0
+
+
+
+
+ 4
+
+
+
+
+
+
+ rgb
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+ rgb
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+ rgb
+
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+
+
+
+ i2c_extend
+
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ 400000
+
+
+
+
+
+
+ Motor
+
+
+
+
+ i2c_extend
+
+
+
+
+
+
+
+
+ Motor
+
+
+
+
+ 100
+
+
+
+
+
+
+
+ Motor
+
+
+
+
+ 1024
+
+
+
+
+ 1024
+
+
+
+
+
+
+ 0
+
+
+
+
+ 2
+
+
+
+
+
+
+ actuator
+
+
+
+
+
+
+
+
+ actuator
+
+
+
+
+
+
+
+
+
+ actuator
+
+
+
+
+
+
+ actuator
+
+
+
+
+
+
+
+
+
+ actuator
+
+
+
+
+ 你好米思齐
+
+
+
+
+
+
+
+
+
+ actuator
+
+
+
+
+
+
+ actuator
+
+
+
+
+
+
+ actuator
+
+
+
+
+ 20
+
+
+
+
+
+
+ actuator
+
+
+
+
+
+
+ actuator
+
+
+
+
+ mixly*.mp3
+
+
+
+
+
+
+
+
+
+
+ i2c_extend
+
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ 400000
+
+
+
+
+
+
+ matrix
+
+
+
+
+ i2c_extend
+
+
+
+
+
+
+
+
+ matrix
+
+
+
+
+
+
+ matrix
+
+
+
+
+
+
+
+
+ matrix
+
+
+
+
+ Mixly
+
+
+
+
+ 0
+
+
+
+
+
+
+ matrix
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ matrix
+
+
+
+
+ Mixly
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+
+
+ matrix
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ matrix
+
+
+
+
+ Mixly
+
+
+
+
+ 500
+
+
+
+
+
+
+
+
+
+ matrix
+
+
+
+
+
+
+
+ matrix
+
+
+
+
+ >
+
+
+
+
+
+
+ matrix
+
+
+
+
+
+
+
+
+
+ matrix
+
+
+
+
+ 1
+
+
+
+
+
+
+ matrix
+
+
+
+
+
+
+
+
+
+
+
+
+ matrix
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ matrix
+
+
+
+
+ 0.5
+
+
+
+
+
+
+ matrix
+
+
+
+
+
+
+ matrix
+
+
+
+
+
+
+
+
+
+
+ i2c_extend
+
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ 100000
+
+
+
+
+
+
+ disp
+
+
+
+
+ i2c_extend
+
+
+
+
+
+
+
+
+
+ disp
+
+
+
+
+ 2333
+
+
+
+
+
+
+ disp
+
+
+
+
+
+
+
+
+
+
+
+
+
+ disp
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ i2c_extend
+
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ 100000
+
+
+
+
+
+
+ lcd
+
+
+
+
+ i2c_extend
+
+
+
+
+ 0x27
+
+
+
+
+
+
+
+
+
+ lcd
+
+
+
+
+ Mixly
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+ lcd
+
+
+
+
+ Mixly
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+
+
+ lcd
+
+
+
+
+
+
+ lcd
+
+
+
+
+
+
+
+
+ i2c_extend
+
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ 100000
+
+
+
+
+
+
+ oled
+
+
+
+
+ i2c_extend
+
+
+
+
+ 0x3c
+
+
+
+
+
+
+
+
+
+ oled
+
+
+
+
+
+
+
+
+
+
+ oled
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+
+
+ oled
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ oled
+
+
+
+
+ Mixly
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+
+
+ oled
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ oled
+
+
+
+
+ Mixly
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+ 5
+
+
+
+
+ 0
+
+
+
+
+
+
+ oled
+
+
+
+
+ Mixly
+
+
+
+
+
+
+ oled
+
+
+
+
+ Mixly
+
+
+
+
+ 5
+
+
+
+
+ 500
+
+
+
+
+
+
+ oled
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 20
+
+
+
+
+
+
+ oled
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ 50
+
+
+
+
+
+
+ oled
+
+
+
+
+ 20
+
+
+
+
+ 20
+
+
+
+
+ 20
+
+
+
+
+ 15
+
+
+
+
+
+
+ oled
+
+
+
+
+ 1
+
+
+
+
+
+
+ oled
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+ oled
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+ oled
+
+
+
+
+
+
+
+
+ spi
+
+
+
+
+ 1000000
+
+
+
+
+ 4
+
+
+
+
+ 5
+
+
+
+
+ 0
+
+
+
+
+
+
+ spi
+
+
+
+
+ 7
+
+
+
+
+ 8
+
+
+
+
+ tft_st7789
+
+
+
+
+ 135
+
+
+
+
+ 240
+
+
+
+
+
+
+
+
+
+ tft_st7789
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ #ffffff
+
+
+ 255,255,0
+
+
+
+
+
+
+ tft_st7789
+
+
+
+
+ Mixly
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+ 0
+
+
+
+
+ #ffffff
+
+
+ 255,255,0
+
+
+
+
+
+
+ tft_st7789
+
+
+
+
+ Mixly
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+ 5
+
+
+
+
+ 0
+
+
+
+
+ #ffffff
+
+
+ 255,255,0
+
+
+
+
+
+
+ tft_st7789
+
+
+
+
+ Mixly
+
+
+
+
+ 5
+
+
+
+
+ 500
+
+
+
+
+ #ffffff
+
+
+ 255,255,0
+
+
+
+
+
+
+ tft_st7789
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 40
+
+
+
+
+ 40
+
+
+
+
+ #ffffff
+
+
+ 255,255,0
+
+
+
+
+
+
+ tft_st7789
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ 2
+
+
+
+
+
+
+ ai_sensor
+
+
+
+
+
+
+
+
+ ai_sensor
+
+
+
+
+ 9
+
+
+
+
+ 8
+
+
+
+
+
+
+ ai_sensor
+
+
+
+
+ 255,255,0
+
+
+
+
+ 0,0,255
+
+
+
+
+
+
+ ai_sensor
+
+
+
+
+ 'ni-hao','hong-se','lv-se','lan-se','bai-se','hei-se'
+
+
+
+
+ 0.1
+
+
+
+
+
+
+ ai_sensor
+
+
+
+
+ 1.wav
+
+
+
+
+ 5
+
+
+
+
+
+
+ ai_sensor
+
+
+
+
+ 1.wav
+
+
+
+
+ 100
+
+
+
+
+
+
+ ai_sensor
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+
+
+
+
+
+ qrcode
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+
+
+
+
+
+ barcode
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+
+
+
+
+
+ tag
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+ 2500
+
+
+
+
+ 25
+
+
+
+
+ 25
+
+
+
+
+
+
+
+
+
+ line
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+ 3500
+
+
+
+
+ 2
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+
+ circle
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+ 10000
+
+
+
+
+
+
+
+
+
+ rect
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+
+
+
+
+
+ info
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+ color_lab
+
+
+
+
+ 10
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+ colors
+
+
+
+
+
+
+ ai_sensor
+
+
+
+
+ '猫','狗','笔记本','笔'
+
+
+
+
+ mixgo
+
+
+
+
+ 5
+
+
+
+
+ 自模型训练
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+ '猫','狗','笔记本','笔'
+
+
+
+
+ mixgo
+
+
+
+
+ 自模型识别
+
+
+
+
+
+
+
+ objects
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+ 0.1606, 0.3562, 0.4712, 0.9568, 0.9877, 1.9108, 1.8761, 3.5310,
+ 3.4423, 5.6823
+
+
+
+
+ /sd/masks.kmodel
+
+
+
+
+ 外部模型加载
+
+
+
+
+
+
+
+ objects
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ 2
+
+
+
+
+
+
+ ai_sensor
+
+
+
+
+
+
+
+
+ ai_sensor
+
+
+
+
+ 9
+
+
+
+
+ 8
+
+
+
+
+
+
+ ai_sensor
+
+
+
+
+ 255,255,0
+
+
+
+
+ 0,0,255
+
+
+
+
+
+
+ ai_sensor
+
+
+
+
+ 1.wav
+
+
+
+
+ 5
+
+
+
+
+
+
+ ai_sensor
+
+
+
+
+ 1.wav
+
+
+
+
+ 100
+
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+
+
+
+
+ licensePlate
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+
+
+
+
+ face
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+
+
+
+
+ 20objects
+
+
+
+
+
+
+ ai_sensor
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+
+
+
+
+
+ qrcode
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+
+
+
+
+
+ barcode
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+
+
+
+
+
+ tag
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+ 2500
+
+
+
+
+ 25
+
+
+
+
+ 25
+
+
+
+
+
+
+
+
+
+ line
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+ 3500
+
+
+
+
+ 2
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+
+ circle
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+ 10000
+
+
+
+
+
+
+
+
+
+ rect
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+
+
+
+
+
+ info
+
+
+
+
+ info
+
+
+
+
+ ai_sensor
+
+
+
+
+ color_lab
+
+
+
+
+ 10
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+ colors
+
+
+
+
+
+
+
+
+
+
+
+ filename.txt
+
+
+
+
+ f
+
+
+
+
+
+
+ Mixly
+
+
+
+
+ f
+
+
+
+
+
+
+ f
+
+
+
+
+
+
+ f
+
+
+
+
+ 0
+
+
+
+
+
+
+ f
+
+
+
+
+
+
+ f
+
+
+
+
+
+
+ f
+
+
+
+
+
+
+
+
+ path
+
+
+
+
+
+
+ path
+
+
+
+
+
+
+ filename.txt
+
+
+
+
+
+
+ srcname.txt
+
+
+
+
+ dstname.txt
+
+
+
+
+
+
+
+ path
+
+
+
+
+
+
+ f
+
+
+
+
+
+
+ f
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ wifiname
+
+
+
+
+ wifipassword
+
+
+
+
+
+
+ wlan
+
+
+
+
+
+
+ wlan
+
+
+
+
+
+
+ wlan
+
+
+
+
+
+
+ wlan
+
+
+
+
+
+
+ wlan
+
+
+
+
+ 127.16.0.8
+
+
+
+
+ 01234567
+
+
+
+
+
+
+ wlan
+
+
+
+
+
+
+ wlan
+
+
+
+
+
+
+ wlan
+
+
+
+
+
+
+ wlan
+
+
+
+
+
+
+ wlan
+
+
+
+
+ 127.16.0.8
+
+
+
+
+ 1
+
+
+
+
+ connect_wifi
+
+
+
+
+ wlan
+
+
+
+
+ AP
+
+
+ wlan
+
+
+
+
+ True
+
+
+ wlan
+
+
+
+
+
+
+ wlan
+
+
+
+
+ SmallCabbage
+
+
+
+
+ 1
+
+
+
+
+ WHILE
+
+
+ TRUE
+
+
+ EQ
+
+
+ 0
+
+
+ wlan
+
+
+
+
+
+
+ 0.0.0.0
+
+
+
+
+
+
+ ms
+
+
+ 1000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TRUE
+
+
+
+
+
+
+ s
+
+
+
+
+
+
+ s
+
+
+
+
+
+
+
+ 0.0.0.0
+
+
+
+
+ 80
+
+
+
+
+
+
+
+
+ s
+
+
+
+
+
+
+
+ 192.168.0.1
+
+
+
+
+ 80
+
+
+
+
+
+
+
+
+ s
+
+
+
+
+ 5
+
+
+
+
+
+
+ s
+
+
+
+
+
+
+ s
+
+
+
+
+ 1024
+
+
+
+
+
+
+ s
+
+
+
+
+ b
+
+
+ Mixly
+
+
+
+
+ response
+
+
+
+
+
+
+ s
+
+
+
+
+ 1024
+
+
+
+
+
+
+ s
+
+
+
+
+ b
+
+
+ Mixly
+
+
+
+
+ response
+
+
+
+
+
+
+
+ 127.0.0.1
+
+
+
+
+ 80
+
+
+
+
+
+
+
+
+ s
+
+
+
+
+
+
+
+ ntp.aliyun.com
+
+
+
+
+
+
+ response
+
+
+
+
+ http://mixio.mixly.cn
+
+
+
+
+
+
+ response
+
+
+
+
+ http://mixio.mixly.cn
+
+
+
+
+
+
+
+
+
+
+
+
+
+ response
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/boards/default/micropython_esp32c2/main.bundle.js b/boards/default/micropython_esp32c2/main.bundle.js
index 9911bd44..216c2632 100644
--- a/boards/default/micropython_esp32c2/main.bundle.js
+++ b/boards/default/micropython_esp32c2/main.bundle.js
@@ -1,4 +1,35436 @@
-(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{controls_type:()=>Ft,controls_typeLists:()=>Pt,lists_zip:()=>Yt,lists_zip_container:()=>vt,lists_zip_item:()=>Xt,unpack_iterable_object:()=>yt,variables_change:()=>Dt,variables_get:()=>At,variables_global:()=>ft,variables_set:()=>Nt});var i={};t.r(i),t.d(i,{base_setup:()=>Vt,controls_delay:()=>Bt,controls_end_program:()=>Gt,controls_except:()=>$t,controls_finally:()=>te,controls_flow_statements:()=>Kt,controls_for:()=>Jt,controls_forEach:()=>kt,controls_for_range:()=>qt,controls_if:()=>Ut,controls_if_else:()=>jt,controls_if_elseif:()=>zt,controls_if_if:()=>Qt,controls_lambda:()=>ie,controls_main:()=>bt,controls_pass:()=>ne,controls_range:()=>wt,controls_repeat_ext:()=>ee,controls_thread:()=>se,controls_try:()=>Zt,controls_try_finally:()=>Wt,controls_whileUntil:()=>Ht,datetime_fromtimestamp:()=>re,do_while:()=>_e,garbage_collection:()=>oe,gene_unique_identifier:()=>le,get_mem_alloc:()=>pe,get_mem_free:()=>ae,get_unique_identifier:()=>ue});var n={};t.r(n),t.d(n,{base_map:()=>Ye,generate_cartesian_product:()=>Xe,math_arithmetic:()=>he,math_bit:()=>Ee,math_constant:()=>Te,math_constant_mp:()=>Me,math_constrain:()=>Le,math_dec:()=>Re,math_indexer_number:()=>Ne,math_map:()=>Ae,math_max_min:()=>ge,math_number:()=>Ie,math_number_base_conversion:()=>Ce,math_random:()=>Se,math_random_seed:()=>De,math_round:()=>fe,math_selfcalcu:()=>me,math_to_int:()=>ce,math_trig:()=>Oe,text_to_number:()=>Fe,text_to_number_skulpt:()=>Pe,turn_to_int:()=>ve});var s={};t.r(s),t.d(s,{ascii_to_char:()=>Ge,char_to_ascii:()=>Ue,number_to_text:()=>we,os_system:()=>Ii,text:()=>xe,text_capital:()=>je,text_center:()=>Ze,text_char:()=>Ve,text_char_at:()=>We,text_char_at2:()=>He,text_char_at3:()=>ui,text_compareTo:()=>ai,text_compare_to:()=>ze,text_create_with_container:()=>_i,text_create_with_item:()=>oi,text_encode:()=>li,text_equals_starts_ends:()=>Qe,text_eval:()=>di,text_find:()=>$e,text_format:()=>si,text_format_noreturn:()=>ri,text_join:()=>Be,text_join_seq:()=>ti,text_length:()=>ke,text_random_char:()=>Ke,text_replace:()=>ei,text_split:()=>ii,text_strip:()=>ni,text_substring:()=>qe,text_substring2:()=>Je,text_substring3:()=>pi,text_textarea:()=>be});var _={};t.r(_),t.d(_,{ENUMERATE:()=>Qi,content_in_lists:()=>ji,enumerate:()=>zi,list_many_input:()=>xi,list_tolist:()=>Gi,list_tolist2:()=>qi,list_trig:()=>vi,lists_2d_get_col_row_data:()=>Ei,lists_2d_get_data_with_col_row:()=>mi,lists_append_extend:()=>Si,lists_change_to:()=>yi,lists_change_to_general:()=>Vi,lists_clear:()=>fi,lists_create_with:()=>Oi,lists_create_with2:()=>Ui,lists_create_with_container:()=>ci,lists_create_with_item:()=>gi,lists_create_with_noreturn:()=>bi,lists_create_with_text:()=>Ri,lists_create_with_text2:()=>wi,lists_del_general:()=>Bi,lists_find:()=>Yi,lists_getIndex3:()=>ki,lists_getSublist3:()=>Hi,lists_get_index:()=>Mi,lists_get_random_item:()=>Li,lists_get_random_sublist:()=>Ai,lists_get_sublist:()=>hi,lists_insert_value:()=>Ni,lists_insert_value2:()=>Ki,lists_pop:()=>Pi,lists_remove_at:()=>Fi,lists_remove_at2:()=>Ji,lists_reverse:()=>Di,lists_setIndex3:()=>Wi,lists_set_index:()=>Ci,lists_sort:()=>Xi});var o={};t.r(o),t.d(o,{dicts_add_change_del:()=>Tn,dicts_add_or_change:()=>on,dicts_clear:()=>un,dicts_create_with:()=>$i,dicts_create_with_container:()=>tn,dicts_create_with_item:()=>en,dicts_create_with_noreturn:()=>mn,dicts_deldict:()=>In,dicts_delete:()=>pn,dicts_get:()=>sn,dicts_get_default:()=>_n,dicts_items:()=>rn,dicts_keys:()=>nn,dicts_length:()=>dn,dicts_pop:()=>Mn,dicts_setdefault:()=>hn,dicts_to_json:()=>On,dicts_to_json2:()=>gn,dicts_to_to:()=>cn,dicts_todict:()=>En,dicts_update:()=>an,dicts_values:()=>ln,json_to_dicts:()=>Rn});var p={};t.r(p),t.d(p,{logic_boolean:()=>Dn,logic_compare:()=>Sn,logic_compare_continous:()=>Ln,logic_is:()=>Yn,logic_is_in:()=>Pn,logic_negate:()=>Nn,logic_null:()=>fn,logic_operation:()=>An,logic_tobool:()=>vn,logic_true_or_false:()=>Fn});var a={};t.r(a),t.d(a,{sdcard_mount:()=>is,sdcard_use_spi_init:()=>es,storage_can_write_ornot:()=>wn,storage_change_dir:()=>$n,storage_close_file:()=>Hn,storage_delete_file:()=>Kn,storage_file_seek:()=>Qn,storage_file_tell:()=>qn,storage_file_write:()=>Vn,storage_fileopen:()=>yn,storage_fileopen_new:()=>xn,storage_fileopen_new_encoding:()=>bn,storage_get_a_line:()=>Un,storage_get_contents:()=>Gn,storage_get_contents_without_para:()=>Bn,storage_get_current_dir:()=>zn,storage_get_file_size:()=>Jn,storage_get_filename:()=>kn,storage_is_file:()=>ts,storage_list_all_files:()=>Wn,storage_make_dir:()=>jn,storage_open_file_with_os:()=>Xn,storage_rename:()=>Zn});var u={};t.r(u),t.d(u,{procedures_callnoreturn:()=>us,procedures_callreturn:()=>rs,procedures_defnoreturn:()=>_s,procedures_defreturn:()=>os,procedures_ifreturn:()=>ls,procedures_mutatorarg:()=>as,procedures_mutatorcontainer:()=>ps,procedures_return:()=>ds});var r={};t.r(r),t.d(r,{tuple_change_to:()=>Ss,tuple_create_with:()=>Ts,tuple_create_with_container:()=>Ms,tuple_create_with_item:()=>hs,tuple_create_with_noreturn:()=>Ds,tuple_create_with_text2:()=>ms,tuple_create_with_text_return:()=>Es,tuple_del:()=>cs,tuple_find:()=>Ls,tuple_getIndex:()=>Os,tuple_getSublist:()=>Ns,tuple_get_random_item:()=>Fs,tuple_get_sublist:()=>fs,tuple_join:()=>gs,tuple_length:()=>Rs,tuple_max:()=>Cs,tuple_totuple:()=>Ps,tuple_trig:()=>As});var l={};t.r(l),t.d(l,{set_add_discard:()=>Us,set_clear:()=>Vs,set_create_with:()=>vs,set_create_with_container:()=>Xs,set_create_with_item:()=>ys,set_create_with_text_return:()=>Hs,set_length:()=>xs,set_operate:()=>Bs,set_operate_update:()=>Gs,set_pop:()=>bs,set_sub:()=>ws,set_toset:()=>Ws,set_update:()=>ks});var d={};t.r(d),t.d(d,{html_content:()=>zs,html_content_more:()=>js,html_document:()=>Js,html_form:()=>$s,html_head_body:()=>Qs,html_style:()=>Zs,html_style_color:()=>e_,html_style_content:()=>t_,html_text:()=>i_,html_title:()=>qs});var I={};t.r(I),t.d(I,{attribute_access:()=>h_,function_call:()=>I_,function_call_container:()=>T_,function_call_item:()=>M_,raw_block:()=>__,raw_empty:()=>p_,raw_expression:()=>o_,raw_table:()=>s_,text_comment:()=>a_,text_print_multiple:()=>r_,text_print_multiple_container:()=>l_,text_print_multiple_item:()=>d_,type_check:()=>u_});var T={};t.r(T),t.d(T,{controls_type:()=>c_,controls_typeLists:()=>g_,lists_zip:()=>C_,unpack_iterable_object:()=>S_,variables_change:()=>O_,variables_get:()=>m_,variables_global:()=>R_,variables_set:()=>E_});var M={};t.r(M),t.d(M,{Panic_with_status_code:()=>X_,base_setup:()=>A_,controls_delay:()=>v_,controls_flow_statements:()=>Y_,controls_for:()=>f_,controls_forEach:()=>B_,controls_for_range:()=>F_,controls_if:()=>N_,controls_interrupts:()=>b_,controls_lambda:()=>U_,controls_main:()=>L_,controls_millis:()=>y_,controls_nointerrupts:()=>V_,controls_pass:()=>k_,controls_range:()=>G_,controls_repeat:()=>j_,controls_repeat_ext:()=>K_,controls_thread:()=>H_,controls_try_finally:()=>D_,controls_whileUntil:()=>P_,datetime_fromtimestamp:()=>Z_,do_while:()=>W_,garbage_collection:()=>J_,gene_unique_identifier:()=>$_,get_mem_alloc:()=>q_,get_mem_free:()=>Q_,get_unique_identifier:()=>z_,reset:()=>x_,time_sleep:()=>w_});var h={};t.r(h),t.d(h,{base_map:()=>co,generate_cartesian_product:()=>Co,math_arithmetic:()=>so,math_bit:()=>no,math_constant:()=>eo,math_constant_mp:()=>io,math_constrain:()=>To,math_dec:()=>ao,math_indexer_number:()=>mo,math_map:()=>Io,math_max_min:()=>ro,math_number:()=>to,math_number_base_conversion:()=>Mo,math_random:()=>lo,math_random_seed:()=>ho,math_round:()=>Eo,math_selfcalcu:()=>_o,math_single:()=>oo,math_to_int:()=>uo,math_trig:()=>po,text_to_number:()=>Oo,text_to_number_skulpt:()=>Ro,turn_to_int:()=>go});var m={};t.r(m),t.d(m,{ascii_to_char:()=>Do,char_to_ascii:()=>fo,number_to_text:()=>Fo,os_system:()=>$o,text:()=>So,text_capital:()=>Bo,text_center:()=>Go,text_char:()=>Ao,text_char_at:()=>vo,text_char_at2:()=>Yo,text_char_at3:()=>zo,text_compareTo:()=>Qo,text_compare_to:()=>xo,text_encode:()=>jo,text_equals_starts_ends:()=>yo,text_eval:()=>Zo,text_find:()=>Uo,text_format:()=>Ko,text_format_noreturn:()=>Jo,text_join:()=>No,text_join_seq:()=>wo,text_length:()=>Po,text_random_char:()=>Xo,text_replace:()=>ko,text_split:()=>Ho,text_strip:()=>Wo,text_substring:()=>Vo,text_substring2:()=>bo,text_substring3:()=>qo,text_textarea:()=>Lo});var E={};t.r(E),t.d(E,{content_in_lists:()=>vp,enumerate:()=>Yp,list_many_input:()=>Op,list_tolist:()=>Fp,list_tolist2:()=>Pp,list_trig:()=>hp,lists_2d_get_col_row_data:()=>ip,lists_2d_get_data_with_col_row:()=>ep,lists_append_extend:()=>pp,lists_change_to:()=>Ep,lists_change_to_general:()=>cp,lists_clear:()=>dp,lists_create_with:()=>np,lists_create_with2:()=>Cp,lists_create_with_noreturn:()=>Rp,lists_create_with_text:()=>sp,lists_create_with_text2:()=>Sp,lists_del_general:()=>gp,lists_find:()=>Ip,lists_getIndex3:()=>Lp,lists_getSublist3:()=>Ap,lists_get_index:()=>_p,lists_get_random_item:()=>ap,lists_get_random_sublist:()=>up,lists_get_sublist:()=>tp,lists_insert_value:()=>rp,lists_insert_value2:()=>Dp,lists_pop:()=>Mp,lists_remove_at:()=>Tp,lists_remove_at2:()=>fp,lists_reverse:()=>lp,lists_setIndex3:()=>Np,lists_set_index:()=>op,lists_sort:()=>mp});var O={};t.r(O),t.d(O,{dicts_add_change_del:()=>Kp,dicts_add_or_change:()=>Vp,dicts_clear:()=>Up,dicts_create_with:()=>Xp,dicts_create_with_noreturn:()=>Qp,dicts_deldict:()=>Wp,dicts_delete:()=>Bp,dicts_get:()=>xp,dicts_get_default:()=>bp,dicts_items:()=>wp,dicts_keys:()=>yp,dicts_length:()=>Hp,dicts_pop:()=>Jp,dicts_setdefault:()=>qp,dicts_to_json:()=>jp,dicts_to_json2:()=>ta,dicts_to_to:()=>$p,dicts_todict:()=>zp,dicts_update:()=>Gp,dicts_values:()=>kp,json_to_dicts:()=>Zp});var R={};t.r(R),t.d(R,{logic_boolean:()=>_a,logic_compare:()=>ea,logic_compare_continous:()=>ia,logic_is:()=>ua,logic_is_in:()=>aa,logic_negate:()=>sa,logic_null:()=>oa,logic_operation:()=>na,logic_tobool:()=>ra,logic_true_or_false:()=>pa});var c={};t.r(c),t.d(c,{sdcard_mount:()=>va,sdcard_use_spi_init:()=>Ya,storage_can_write_ornot:()=>Oa,storage_change_dir:()=>Na,storage_close_file:()=>ca,storage_delete_file:()=>Ca,storage_file_seek:()=>Aa,storage_file_tell:()=>La,storage_file_write:()=>Ma,storage_fileopen:()=>da,storage_fileopen_new:()=>Ia,storage_fileopen_new_encoding:()=>Ta,storage_get_a_line:()=>Ea,storage_get_contents:()=>ma,storage_get_contents_without_para:()=>ha,storage_get_current_dir:()=>Da,storage_get_file_size:()=>Sa,storage_get_filename:()=>Ra,storage_is_file:()=>Pa,storage_list_all_files:()=>ga,storage_make_dir:()=>fa,storage_open_file_with_os:()=>la,storage_rename:()=>Fa});var g={};t.r(g),t.d(g,{procedures_callnoreturn:()=>ba,procedures_callreturn:()=>xa,procedures_defnoreturn:()=>ya,procedures_defreturn:()=>Xa,procedures_ifreturn:()=>Va,procedures_return:()=>Ba});var C={};t.r(C),t.d(C,{tuple_change_to:()=>qa,tuple_create_with:()=>Ga,tuple_create_with_noreturn:()=>Za,tuple_create_with_text2:()=>Ua,tuple_create_with_text_return:()=>wa,tuple_del:()=>Wa,tuple_find:()=>Qa,tuple_getIndex:()=>ka,tuple_getSublist:()=>ja,tuple_get_random_item:()=>tu,tuple_get_sublist:()=>$a,tuple_join:()=>Ka,tuple_length:()=>Ha,tuple_max:()=>Ja,tuple_totuple:()=>eu,tuple_trig:()=>za});var S={};t.r(S),t.d(S,{set_add_discard:()=>au,set_clear:()=>_u,set_create_with:()=>iu,set_create_with_text_return:()=>lu,set_length:()=>nu,set_operate:()=>ou,set_operate_update:()=>pu,set_pop:()=>su,set_sub:()=>uu,set_toset:()=>du,set_update:()=>ru});var L={};t.r(L),t.d(L,{html_content:()=>hu,html_content_more:()=>mu,html_document:()=>Iu,html_form:()=>Ou,html_head_body:()=>Mu,html_style:()=>Eu,html_style_content:()=>Ru,html_text:()=>cu,html_title:()=>Tu});var A={};t.r(A),t.d(A,{attribute_access:()=>Du,function_call:()=>Nu,raw_block:()=>gu,raw_empty:()=>Su,raw_expression:()=>Cu,raw_table:()=>Lu,type_check:()=>Au});var N={};t.r(N),t.d(N,{PIN_init:()=>fr,actuator_extern_get_led_bright:()=>Gu,actuator_extern_get_led_state:()=>Uu,actuator_extern_led_bright:()=>Bu,actuator_extern_led_brightness:()=>wu,actuator_ms32006_dcmotor:()=>ju,actuator_ms32006_init:()=>zu,actuator_ms32006_stepper:()=>Zu,actuator_neopixel_init:()=>$u,actuator_neopixel_rgb:()=>tr,actuator_neopixel_rgb_all:()=>er,actuator_neopixel_write:()=>ir,actuator_use_uart_init:()=>nr,esp32_music_get_tempo_extern:()=>xu,esp32_music_pitch:()=>Yu,esp32_music_pitch_init:()=>Pu,esp32_music_pitch_with_time:()=>vu,esp32_music_play_list:()=>Xu,esp32_music_reset_extern:()=>bu,esp32_music_set_tempo_extern:()=>yu,esp32_music_stop:()=>Vu,mixbot_actuator_extern_get_addr:()=>Nr,mixbot_actuator_extern_set_addr:()=>Dr,mixbot_addr_extern:()=>Tr,parrot_PIN_init:()=>vr,parrot_move_speed:()=>Xr,pin_led_bright:()=>Fr,player_insert_music:()=>ur,player_play_music:()=>ar,player_set_mode:()=>pr,player_set_play:()=>_r,player_set_volume:()=>or,player_whether_stop:()=>sr,robot_led_extern:()=>Er,robot_led_extern_get_value:()=>Or,robot_motor_extern:()=>Mr,robot_motor_extern_get_speed:()=>hr,robot_servo_extern_absolute_run:()=>Cr,robot_servo_extern_get_status:()=>Rr,robot_servo_extern_relative_continue:()=>Ar,robot_servo_extern_relative_origin:()=>Sr,robot_servo_extern_relative_run:()=>Lr,robot_servo_extern_stop:()=>gr,robot_servo_extern_stop_mode:()=>cr,robot_traffic_light_extern:()=>mr,servo_PIN_init:()=>Pr,servo_get_angle:()=>qu,servo_get_speed:()=>Qu,servo_init:()=>ku,servo_move:()=>Hu,servo_move_angle:()=>Yr,servo_set_angle:()=>Ku,servo_set_speed:()=>Ju,servo_speed_360:()=>Wu,syn6288_builtin_voice:()=>dr,syn6288_get_voice:()=>lr,syn6288_set_voice:()=>rr,syn6288_tts_play:()=>Ir});var D={};t.r(D),t.d(D,{actuator_dc_motor:()=>dl,actuator_dc_motor_stop:()=>Il,actuator_get_led_bright:()=>Br,actuator_get_led_state:()=>Gr,actuator_led_bright:()=>Vr,actuator_led_brightness:()=>Ur,actuator_mixbot_buzzer_on_off:()=>El,actuator_mixgo_nova_mic_get:()=>Cl,actuator_mixgo_nova_mic_set:()=>gl,actuator_mixgo_nova_onboard_music_pitch:()=>fl,actuator_mixgo_nova_onboard_music_stop:()=>Fl,actuator_mixgo_nova_play_audio:()=>Nl,actuator_mixgo_nova_play_online_audio:()=>Dl,actuator_mixgo_nova_record_audio:()=>Al,actuator_mixgo_nova_voice_get:()=>Ll,actuator_mixgo_nova_voice_set:()=>Sl,actuator_mixgo_zero_led_color:()=>wr,actuator_onboard_neopixel_rgb:()=>qr,actuator_onboard_neopixel_rgb_all:()=>Qr,actuator_onboard_neopixel_rgb_show_all_chase:()=>jr,actuator_onboard_neopixel_rgb_show_all_rainbow:()=>zr,actuator_onboard_neopixel_write:()=>Zr,actuator_rm_onboard_neopixel_rgb:()=>$r,actuator_rm_onboard_neopixel_rgb_all:()=>tl,actuator_rm_onboard_neopixel_rgb_show_all_chase:()=>el,actuator_stepper_keep:()=>rl,actuator_stepper_stop:()=>ll,analog_ble_keyboard_init:()=>kl,analog_ble_keyboard_input:()=>Kl,analog_ble_keyboard_mouse_init:()=>td,analog_ble_keyboard_mouse_input:()=>sd,analog_ble_keyboard_mouse_send_battery:()=>nd,analog_ble_keyboard_mouse_str:()=>_d,analog_ble_keyboard_send_battery:()=>ql,analog_ble_keyboard_str:()=>Jl,analog_ble_mouse_init:()=>Ql,analog_ble_mouse_input:()=>Zl,analog_ble_mouse_keyboard_input:()=>od,analog_ble_mouse_send_battery:()=>$l,analog_keyboard_input:()=>Xl,analog_keyboard_str:()=>wl,analog_mouse_input:()=>Gl,bitbot_motor:()=>cl,bitbot_move:()=>Ol,bitbot_stop:()=>Rl,ble_keyboard_connect:()=>Wl,ble_keyboard_get_mac:()=>Hl,ble_keyboard_mouse_connect:()=>id,ble_keyboard_mouse_get_mac:()=>ed,ble_mouse_connect:()=>jl,ble_mouse_get_mac:()=>zl,cc_number:()=>Jr,educore_ble_keyboard_input:()=>hd,educore_ble_sensor_connected:()=>Md,educore_ble_sensor_init:()=>Td,educore_buzzer:()=>pd,educore_buzzer_play_tone:()=>ad,educore_buzzer_play_tone_time:()=>ud,educore_buzzer_stop:()=>rd,educore_neopixel_clear:()=>Id,educore_neopixel_rgb:()=>dd,educore_rgb_light:()=>ld,esp32_music_get_tempo:()=>nl,esp32_music_reset:()=>sl,esp32_music_set_tempo:()=>il,esp32_onboard_music_pitch:()=>_l,esp32_onboard_music_pitch_with_time:()=>ol,esp32_onboard_music_play_list:()=>al,esp32_onboard_music_stop:()=>pl,general_key:()=>xl,general_key_tuple:()=>bl,generalkey_container:()=>Vl,generalkey_create_with_item:()=>Bl,get_power_output:()=>Yl,ledswitch:()=>br,mixbot_motor:()=>ml,mixbot_motor_status:()=>Tl,mixbot_move:()=>Ml,mixbot_stop:()=>hl,mouse_key:()=>Ul,number:()=>xr,rm_actuator_get_led_bright:()=>Hr,rm_actuator_get_led_state:()=>Wr,rm_actuator_led_bright:()=>kr,rm_actuator_led_brightness:()=>Kr,rm_motor:()=>ul,set_all_power_output:()=>vl,set_power_output:()=>Pl,special_key:()=>yl});var f={};t.r(f),t.d(f,{ai_sensor_20object:()=>zd,ai_sensor_ailocal_class:()=>Bd,ai_sensor_ailocal_class_result:()=>Gd,ai_sensor_ailocal_train:()=>Vd,ai_sensor_asr_recognize:()=>Wd,ai_sensor_audio_play:()=>wd,ai_sensor_audio_record:()=>Ud,ai_sensor_barcode:()=>Sd,ai_sensor_circle:()=>Fd,ai_sensor_classifier_faces:()=>Qd,ai_sensor_color:()=>Xd,ai_sensor_color_chases:()=>bd,ai_sensor_color_chases_result:()=>xd,ai_sensor_config:()=>gd,ai_sensor_face:()=>qd,ai_sensor_find_20objects:()=>jd,ai_sensor_find_barcodes:()=>Ld,ai_sensor_find_circles:()=>Pd,ai_sensor_find_colors:()=>yd,ai_sensor_find_licenseplates:()=>Jd,ai_sensor_find_lines:()=>fd,ai_sensor_find_qrcodes:()=>cd,ai_sensor_find_rects:()=>vd,ai_sensor_find_tags:()=>Nd,ai_sensor_licenseplate:()=>Kd,ai_sensor_line:()=>Dd,ai_sensor_qrcode:()=>Od,ai_sensor_qrcode_lite:()=>Rd,ai_sensor_rect:()=>Yd,ai_sensor_rgb:()=>Cd,ai_sensor_tag:()=>Ad,ai_sensor_use_uart_init:()=>Ed,ai_sensor_yolo_recognize:()=>kd,ai_sensor_yolo_recognize_result:()=>Hd});var F={};t.r(F),t.d(F,{MICROPYTHON_AI_Speech_asr:()=>tI,MICROPYTHON_AI_Speech_unit:()=>$d,MICROPYTHON_AI_client:()=>Zd});var P={};t.r(P),t.d(P,{mpython_blynk_app_data:()=>MI,mpython_blynk_app_notify:()=>aI,mpython_blynk_email:()=>lI,mpython_blynk_get_timers:()=>dI,mpython_blynk_on_connected:()=>_I,mpython_blynk_on_disconnected:()=>sI,mpython_blynk_run:()=>pI,mpython_blynk_sensor_data_to_app:()=>TI,mpython_blynk_set_property:()=>rI,mpython_blynk_setup:()=>hI,mpython_blynk_stop_timers:()=>uI,mpython_blynk_sync_virtual:()=>nI,mpython_blynk_terminal_widget_vpin:()=>iI,mpython_blynktimer:()=>II,mpython_blynktimer_run:()=>oI});var Y={};t.r(Y),t.d(Y,{cc_g1_init:()=>mI,cc_g1_read_bat:()=>EI,cc_g1_read_joystick:()=>OI,cc_g1_read_key:()=>RI,cc_g1_turnoff:()=>cI});var v={};t.r(v),t.d(v,{ce_go_dc_motor:()=>FI,ce_go_get_led_bright:()=>LI,ce_go_get_led_state:()=>AI,ce_go_hall_attachInterrupt:()=>PI,ce_go_hall_data:()=>vI,ce_go_hall_initialize:()=>YI,ce_go_led_bright:()=>SI,ce_go_led_brightness:()=>NI,ce_go_light_number:()=>CI,ce_go_pin_light:()=>VI,ce_go_pin_near:()=>yI,ce_go_pin_near_line:()=>XI,ce_go_pin_near_state_change:()=>xI,ce_go_stepper_keep:()=>DI,ce_go_stepper_stop:()=>fI,educore_car:()=>BI,educore_car_pin_near:()=>kI,educore_car_pin_near_line:()=>wI,educore_car_stepper_keep:()=>GI,educore_car_stepper_stop:()=>UI,sensor_mixgome_eulerangles:()=>bI});var X={};t.r(X),t.d(X,{communicate_bluetooth_central_init:()=>LT,communicate_bluetooth_connect:()=>fT,communicate_bluetooth_disconnect:()=>FT,communicate_bluetooth_handle:()=>yT,communicate_bluetooth_is_connected:()=>YT,communicate_bluetooth_mac:()=>DT,communicate_bluetooth_peripheral_init:()=>AT,communicate_bluetooth_recv:()=>vT,communicate_bluetooth_recv_only:()=>XT,communicate_bluetooth_scan:()=>NT,communicate_bluetooth_send:()=>PT,communicate_espnow_init:()=>xT,communicate_espnow_init_new:()=>bT,communicate_i2c_available:()=>pT,communicate_i2c_init:()=>JI,communicate_i2c_master_read:()=>oT,communicate_i2c_onboard:()=>WI,communicate_i2c_read:()=>qI,communicate_i2c_scan:()=>zI,communicate_i2c_write:()=>QI,communicate_ir_recv_init:()=>MT,communicate_ir_send_init:()=>RT,communicate_ow_init:()=>uT,communicate_ow_read:()=>lT,communicate_ow_reset:()=>TT,communicate_ow_scan:()=>rT,communicate_ow_select:()=>IT,communicate_ow_write:()=>dT,communicate_spi_buffer:()=>$I,communicate_spi_init:()=>jI,communicate_spi_onboard:()=>KI,communicate_spi_read:()=>tT,communicate_spi_read_output:()=>eT,communicate_spi_readinto:()=>iT,communicate_spi_readinto_output:()=>nT,communicate_spi_set:()=>ZI,communicate_spi_write:()=>sT,communicate_spi_write_readinto:()=>_T,espnow_radio_channel:()=>kT,espnow_radio_channel_new:()=>WT,espnow_radio_on_off:()=>KT,espnow_radio_rec:()=>qT,espnow_radio_recv:()=>zT,espnow_radio_recv_certain_msg:()=>jT,espnow_radio_recv_certain_msg_new:()=>$T,espnow_radio_recv_msg:()=>QT,espnow_radio_recv_new:()=>ZT,espnow_radio_send:()=>JT,espnow_radio_txpower:()=>HT,i2c_available:()=>cM,i2c_init:()=>pM,i2c_master_reader2:()=>RM,i2c_read:()=>aM,i2c_scan:()=>rM,i2c_slave_onreceive:()=>aT,i2c_write:()=>uM,internal_variable:()=>hT,ir_recv_timeout:()=>OT,ir_transmit_busy:()=>ST,ir_transmit_conventional_data:()=>cT,ir_transmit_raw_code:()=>CT,ir_transmit_study_code:()=>gT,ir_whether_recv:()=>ET,lora_init:()=>tM,lora_packet:()=>eM,lora_recv:()=>nM,lora_send:()=>iM,network_espnow_info:()=>BT,network_espnow_mac:()=>VT,network_espnow_recv:()=>GT,network_espnow_recv_handle:()=>wT,network_espnow_send:()=>UT,recv_fun:()=>mT,spi_buffer:()=>IM,spi_init:()=>lM,spi_read:()=>TM,spi_read_output:()=>MM,spi_readinto:()=>hM,spi_readinto_output:()=>mM,spi_set:()=>dM,spi_write:()=>EM,spi_write_readinto:()=>OM,urequests_attribute:()=>_M,urequests_get:()=>sM,urequests_method:()=>oM});var y={};t.r(y),t.d(y,{display_animate:()=>jM,display_blink_rate:()=>JM,display_circle:()=>ZM,display_color_seclet:()=>rh,display_draw_4strings:()=>UM,display_fill:()=>zM,display_get_screen_image:()=>KM,display_help:()=>th,display_image_size:()=>wM,display_lcd_use_i2c_init:()=>hh,display_line:()=>HM,display_line_arbitrarily:()=>WM,display_matrix_extern_bright_point:()=>vM,display_matrix_extern_bright_screen:()=>yM,display_matrix_extern_clear:()=>xM,display_matrix_extern_get_pixel:()=>YM,display_matrix_extern_get_screen_pixel:()=>XM,display_matrix_extern_image_builtins:()=>bM,display_matrix_extern_scroll_string:()=>NM,display_matrix_extern_scroll_string_delay:()=>DM,display_matrix_extern_shift:()=>PM,display_matrix_extern_show_frame_string:()=>fM,display_matrix_extern_show_frame_string_delay:()=>FM,display_matrix_extern_show_image:()=>LM,display_matrix_extern_show_image_or_string_delay:()=>AM,display_matrix_use_i2c_init:()=>SM,display_oled_drawPixel:()=>ih,display_oled_showBitmap:()=>eh,display_oled_use_i2c_init:()=>ch,display_onoff:()=>QM,display_rect:()=>kM,display_rgb_color:()=>qM,display_tm1650_power:()=>sh,display_tm1650_set_brightness:()=>ph,display_tm1650_show_dot:()=>oh,display_tm1650_show_num:()=>_h,display_tm_use_i2c_init:()=>nh,display_triangle:()=>$M,display_use_i2c_init:()=>GM,extern_oled_bright_point:()=>Yh,extern_oled_clear:()=>vh,extern_oled_get_pixel:()=>Ph,extern_oled_hvline:()=>yh,extern_oled_line:()=>xh,extern_oled_scroll_string:()=>Ah,extern_oled_scroll_string_delay:()=>Nh,extern_oled_shape_rect:()=>Xh,extern_oled_shift:()=>Fh,extern_oled_show_frame_string:()=>Dh,extern_oled_show_frame_string_delay:()=>fh,extern_oled_show_image:()=>gh,extern_oled_show_image_or_string_delay:()=>Lh,extern_oled_show_image_xy:()=>Ch,extern_oled_show_string:()=>Sh,lcd_backlight:()=>Oh,lcd_clear:()=>Rh,lcd_print_string:()=>Eh,lcd_show_image_or_string_delay:()=>mh,matrix_extern_image_arithmetic:()=>VM,matrix_extern_image_invert:()=>BM,tft_fill:()=>Th,tft_line_arbitrarily:()=>Mh,tft_scroll_string_delay:()=>dh,tft_show_frame_string_delay:()=>Ih,tft_show_image_or_string_delay:()=>lh,tft_show_image_xy:()=>uh,tft_use_spi_init:()=>ah});var x={};t.r(x),t.d(x,{bitbot_display_image_create:()=>cm,display_bright_point:()=>jh,display_bright_screen:()=>$h,display_clear:()=>tm,display_get_pixel:()=>zh,display_get_screen_pixel:()=>Zh,display_image_builtins:()=>Wh,display_image_builtins_all:()=>Kh,display_image_create:()=>Hh,display_scroll_string:()=>Gh,display_scroll_string_delay:()=>Uh,display_shift:()=>Qh,display_show_frame_string:()=>wh,display_show_frame_string_delay:()=>kh,display_show_image:()=>Vh,display_show_image_or_string_delay:()=>Bh,draw_pointer:()=>Wm,image_arithmetic:()=>Jh,image_invert:()=>qh,mixbot_display_bright_screen:()=>Om,mixbot_display_get_ambientbright:()=>Em,mixbot_display_get_screen_pixel:()=>mm,mixbot_display_image_create:()=>hm,mixbot_display_rotate:()=>Rm,mixgo_display_image_create_new:()=>nm,mixgome_display_font:()=>sm,mixgome_display_image_create:()=>em,mixgomini_display_image_create:()=>im,mpython_display_hvline:()=>Im,mpython_display_line:()=>Tm,mpython_display_shape_rect:()=>dm,mpython_pbm_image:()=>Mm,onboard_oled_bright_point:()=>lm,onboard_oled_scroll_string_delay:()=>um,onboard_oled_show_frame_string_delay:()=>rm,onboard_oled_show_image:()=>_m,onboard_oled_show_image_or_string_delay:()=>am,onboard_oled_show_image_xy:()=>om,onboard_oled_show_string:()=>pm,onboard_tft_bright_point:()=>Xm,onboard_tft_bright_screen:()=>bm,onboard_tft_clear:()=>ym,onboard_tft_clock_clear:()=>km,onboard_tft_clock_draw:()=>wm,onboard_tft_clock_get_rtctime:()=>Gm,onboard_tft_clock_init:()=>Bm,onboard_tft_clock_set_time:()=>Um,onboard_tft_display_hvline:()=>Fm,onboard_tft_display_line:()=>Pm,onboard_tft_display_shape_circle:()=>Hm,onboard_tft_display_shape_rect:()=>fm,onboard_tft_fill:()=>Vm,onboard_tft_get_pixel:()=>vm,onboard_tft_get_screen_pixel:()=>xm,onboard_tft_scroll_string:()=>Lm,onboard_tft_scroll_string_delay:()=>Am,onboard_tft_shift:()=>Ym,onboard_tft_show_frame_string:()=>Nm,onboard_tft_show_frame_string_delay:()=>Dm,onboard_tft_show_image:()=>gm,onboard_tft_show_image_or_string_delay:()=>Sm,onboard_tft_show_image_xy:()=>Cm});var b={};t.r(b),t.d(b,{factory_block:()=>iE,factory_block_return:()=>nE,factory_block_return_with_textarea:()=>_E,factory_block_with_textarea:()=>sE,factory_callMethod_noreturn:()=>tE,factory_callMethod_return:()=>eE,factory_create_with_container:()=>zm,factory_create_with_item:()=>jm,factory_declare:()=>$m,factory_from_import:()=>Jm,factory_function_noreturn:()=>Qm,factory_function_return:()=>Zm,factory_import:()=>qm,folding_block:()=>oE});var V={};t.r(V),t.d(V,{controls_pin_attachInterrupt:()=>DE,inout_analog_atten:()=>hE,inout_analog_read:()=>ME,inout_analog_read_init:()=>gE,inout_analog_write:()=>dE,inout_analog_write_init:()=>cE,inout_analog_write_set:()=>IE,inout_analog_write_set_freq:()=>LE,inout_digital_init:()=>OE,inout_digital_read:()=>rE,inout_digital_write:()=>uE,inout_highlow:()=>aE,inout_pinMode:()=>SE,inout_pin_attachInterrupt:()=>EE,inout_pin_pressed:()=>mE,inout_pin_pressed_init:()=>CE,inout_pwm_analog_write:()=>lE,inout_pwm_analog_write_init:()=>RE,inout_pwm_analog_write_set_freq:()=>TE,pin_pressed:()=>NE,pin_pressed_init:()=>AE});var B={};t.r(B),t.d(B,{IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE:()=>ZE,IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE:()=>jE,IOT_EMQX_PING:()=>QE,IOT_FORMATTING:()=>JE,IOT_FORMAT_STRING:()=>qE,IOT_MIXIO_NTP:()=>zE,IOT_MIXIO_PUBLISH:()=>GE,IOT_MIXIO_SUBSCRIBE:()=>UE,iot_checkonenet:()=>aO,iot_client_onboard:()=>tO,iot_create_with_item:()=>VE,iot_http_client:()=>eO,iot_http_data:()=>iO,iot_mixio_check:()=>HE,iot_mixio_connect:()=>BE,iot_mixio_connect_only:()=>kE,iot_mixio_disconnect:()=>wE,iot_mixio_format_msg:()=>KE,iot_mixio_format_topic:()=>WE,iot_mixly_key:()=>$E,iot_mqtt_client:()=>nO,iot_mqtt_data:()=>sO,iot_onenet_check:()=>vE,iot_onenet_connect:()=>PE,iot_onenet_disconnect:()=>YE,iot_onenet_publish:()=>yE,iot_onenet_publish_dict:()=>XE,iot_onenetconnect:()=>oO,iot_onenetdisconnect:()=>pO,iot_publish:()=>uO,iot_publish_container:()=>xE,iot_publish_item:()=>bE,iot_wifi_connect:()=>FE,iot_wificonnect:()=>_O});var G={};t.r(G),t.d(G,{educore_mqtt_connect:()=>wO,educore_mqtt_connect_success:()=>KO,educore_mqtt_subscribe_message:()=>kO,educore_mqtt_topic_publish:()=>WO,educore_mqtt_topic_subscribe:()=>HO,educore_wifi_connect:()=>UO,network_ap_connect:()=>RO,network_connect:()=>MO,network_get_connect:()=>mO,network_get_wifi:()=>OO,network_init:()=>lO,network_is_active:()=>IO,network_open:()=>dO,network_scan:()=>TO,network_server:()=>cO,network_socket_accept:()=>AO,network_socket_bind:()=>CO,network_socket_close:()=>PO,network_socket_connect:()=>SO,network_socket_init:()=>gO,network_socket_listen:()=>LO,network_socket_receive:()=>NO,network_socket_receive_from:()=>fO,network_socket_send:()=>DO,network_socket_send_to:()=>FO,network_stop:()=>EO,network_wifi_connect:()=>hO,ntptime_address:()=>xO,ntptime_time:()=>yO,requests_attribute:()=>vO,requests_attribute2:()=>GO,requests_get:()=>YO,requests_get2:()=>VO,requests_method:()=>XO,requests_post:()=>BO});var U={};t.r(U),t.d(U,{CI130X_BROADCAST:()=>mR,CI130X_GET_THE_RECOGNIZED_CMD:()=>hR,CI130X_GET_WHETHER_IDENTIFY:()=>MR,CI130X_IDENTIFY_AND_SAVE:()=>TR,CI130X_SET_SYSTEM_CMD:()=>ER,HCSR04:()=>sc,PS2_Button:()=>ac,PS2_Buttons:()=>rc,PS2_Buttons_new:()=>Tc,PS2_State:()=>uc,PS2_init:()=>_c,PS2_init_new:()=>dc,PS2_stk:()=>lc,PS2_stk_new:()=>Mc,PS2_vibration:()=>pc,PS2_vibration_new:()=>Ic,camera_sensor_init:()=>Hc,camera_sensor_result:()=>Wc,educore_body_sensor:()=>Xc,educore_button_sensor_extern:()=>Vc,educore_camera_sensor:()=>kc,educore_infrared_sensor:()=>bc,educore_soilhum_sensor:()=>yc,educore_temp_sensor:()=>wc,educore_temphum_sensor:()=>xc,educore_ultrasonic_sensor:()=>Gc,esp32_s2_weather_init:()=>tc,esp32_s2_weather_rain:()=>ic,esp32_s2_weather_wd:()=>ec,esp32_s2_weather_ws:()=>nc,extern_rfid_read:()=>GR,extern_rfid_readcontent:()=>wR,extern_rfid_readid:()=>UR,extern_rfid_status:()=>WR,extern_rfid_write:()=>kR,extern_rfid_write_return:()=>HR,gnss_get_data:()=>Oc,gnss_have_data:()=>Ec,interaction_whether_to_interaction:()=>dR,interaction_whether_to_interaction_SANT:()=>IR,mixbot_sensor_extern_get_addr:()=>Ac,mixbot_sensor_extern_set_addr:()=>Nc,pm25_get_data:()=>mc,radar_set_DETECTION_THRESHOLD:()=>rR,radar_set_DETECTION_THRESHOLD_SANT:()=>lR,robot_button_extern_get_value:()=>Rc,robot_color_extern_get_value:()=>Lc,robot_infrared_extern_get_value:()=>gc,robot_infrared_extern_grey_get_value:()=>Cc,robot_potentiometer_extern_get_value:()=>Sc,robot_sonar_extern_get_value:()=>Dc,robot_sonar_extern_led:()=>fc,robot_touch_extern_get_value:()=>cc,sensor_APDS9960_extern:()=>RR,sensor_DS18X20:()=>pR,sensor_LTR308_extern:()=>cR,sensor_LTR390UV_extern:()=>SR,sensor_MAX30102_extern:()=>OR,sensor_QMC5883L_extern:()=>FR,sensor_VL530LX_extern:()=>LR,sensor_adxl345_get_acceleration:()=>$O,sensor_aht11_extern:()=>NR,sensor_bmp:()=>_R,sensor_compass_reset:()=>VR,sensor_dht11:()=>eR,sensor_hp203_extern:()=>DR,sensor_light_level:()=>tR,sensor_lm35:()=>aR,sensor_ltr381_extern:()=>gR,sensor_mixgo_extern_button_attachInterrupt:()=>jO,sensor_mixgo_extern_button_get_presses:()=>zO,sensor_mixgo_extern_button_is_pressed:()=>qO,sensor_mixgo_extern_button_was_pressed:()=>QO,sensor_mixgo_extern_light:()=>iR,sensor_mixgo_extern_pin_near:()=>sR,sensor_mixgo_extern_sound:()=>nR,sensor_mixgoce_hot_wheel_degrees:()=>$R,sensor_mixgoce_hot_wheel_is_touched:()=>ZR,sensor_mpu9250_attachGestureInterrupt:()=>ZO,sensor_mpu9250_calibrate_compass:()=>yR,sensor_mpu9250_field_strength:()=>bR,sensor_mpu9250_gesture:()=>PR,sensor_mpu9250_get_acceleration:()=>YR,sensor_mpu9250_get_gyro:()=>XR,sensor_mpu9250_get_magnetic:()=>vR,sensor_mpu9250_temperature:()=>xR,sensor_read_humiture:()=>Bc,sensor_sht:()=>oR,sensor_shtc3_extern:()=>AR,sensor_spl06_001_extern:()=>fR,sensor_ucs12071_extern:()=>CR,sensor_use_i2c_init:()=>uR,sensor_use_spi_init:()=>BR,sensor_use_uart_init:()=>hc,sensor_weather_solo_init:()=>Fc,sensor_weather_solo_rain:()=>vc,sensor_weather_solo_wd:()=>Pc,sensor_weather_solo_ws:()=>Yc,sensor_weigh_init:()=>Kc,ultrasonic_sensor_read_distance:()=>Uc,weather_data:()=>KR,weather_have_data:()=>JR,weather_set_label:()=>QR,weather_set_label_container:()=>zR,weather_set_label_item:()=>jR,weather_uart_mixio:()=>qR,weigh_sensor_get_weight:()=>Jc});var w={};t.r(w),t.d(w,{CI130X_BROADCAST_SANT:()=>UC,CI130X_GET_THE_RECOGNIZED_CMD_SANT:()=>GC,CI130X_GET_WHETHER_IDENTIFY_SANT:()=>BC,CI130X_IDENTIFY_AND_SAVE_SANT:()=>VC,CI130X_SET_SYSTEM_CMD_SANT:()=>wC,HCSR04:()=>rg,RTC_set_date:()=>ug,RTC_set_time:()=>ag,bitbot_als_num:()=>mC,dht11:()=>SC,educore_button_sensor:()=>vC,educore_button_was_pressed:()=>XC,educore_gyroscope_sensor:()=>FC,educore_gyroscope_sensor_read:()=>PC,educore_gyroscope_sensor_shake:()=>YC,educore_light_sensor:()=>fC,educore_rfid_sensor:()=>yC,educore_rfid_sensor_scan:()=>xC,educore_rfid_sensor_scan_data:()=>bC,educore_voice_sensor:()=>NC,number1:()=>dg,number2:()=>Ig,number3:()=>Tg,number4:()=>Mg,number5:()=>hg,number6:()=>mg,number7:()=>Eg,onboard_RTC_get_time:()=>Ag,onboard_RTC_get_time_str:()=>Yg,onboard_RTC_get_timestamp:()=>Ng,onboard_RTC_set_datetime:()=>Fg,onboard_RTC_settime_string:()=>fg,onboard_RTC_timestamp_totuple:()=>Dg,rfid_readcontent:()=>Bg,rfid_readid:()=>Vg,rfid_write:()=>Gg,rfid_write_return:()=>Ug,sensor_LTR308:()=>vg,sensor_aht11:()=>yg,sensor_bitbot_ALS:()=>hC,sensor_button_get_presses:()=>RC,sensor_button_is_pressed:()=>EC,sensor_button_was_pressed:()=>OC,sensor_distance_hrsc04:()=>pg,sensor_eulerangles:()=>kg,sensor_field_strength:()=>LC,sensor_get_acceleration:()=>wg,sensor_get_temperature:()=>xg,sensor_hp203:()=>bg,sensor_light:()=>CC,sensor_mixbot_get_gyro:()=>MC,sensor_mixbot_patrol_calibrate:()=>dC,sensor_mixbot_patrol_value:()=>IC,sensor_mixbot_temperature:()=>TC,sensor_mixgo_LTR308:()=>Sg,sensor_mixgo_button_attachInterrupt:()=>Zc,sensor_mixgo_button_get_presses:()=>jc,sensor_mixgo_button_is_pressed:()=>Qc,sensor_mixgo_button_was_pressed:()=>zc,sensor_mixgo_cc_mmc5603_calibrate_compass:()=>tC,sensor_mixgo_cc_mmc5603_get_angle:()=>$g,sensor_mixgo_cc_mmc5603_get_magnetic:()=>Zg,sensor_mixgo_light:()=>lg,sensor_mixgo_nova_LTR308:()=>Cg,sensor_mixgo_nova_pin_near:()=>gg,sensor_mixgo_pin_near:()=>cg,sensor_mixgo_pin_near_double:()=>Rg,sensor_mixgo_pin_near_single:()=>Og,sensor_mixgo_pin_pressed:()=>ng,sensor_mixgo_sant_color:()=>Lg,sensor_mixgo_touch_slide:()=>og,sensor_mixgocar42_button_attachInterrupt:()=>ig,sensor_mixgocar42_button_get_presses:()=>eg,sensor_mixgocar42_button_is_pressed:()=>$c,sensor_mixgocar42_button_was_pressed:()=>tg,sensor_mixgocar_battery_left:()=>lC,sensor_mixgocar_pin_near:()=>uC,sensor_mixgocar_pin_near_line:()=>aC,sensor_mixgocar_pin_near_state_change:()=>rC,sensor_mixgoce_pin_pressed:()=>sg,sensor_mixgoce_temperature:()=>iC,sensor_mixgome_temperature:()=>eC,sensor_mpython_pin_pressed:()=>_g,sensor_mpython_qmi8658_get_gyro:()=>nC,sensor_mpython_qmi8658_temperature:()=>sC,sensor_onboard_compass_reset:()=>jg,sensor_onboard_mpu9250_calibrate_compass:()=>qg,sensor_onboard_mpu9250_field_strength:()=>zg,sensor_onboard_mpu9250_gesture:()=>Hg,sensor_onboard_mpu9250_get_acceleration:()=>Wg,sensor_onboard_mpu9250_get_gyro:()=>Jg,sensor_onboard_mpu9250_get_magnetic:()=>Kg,sensor_onboard_mpu9250_temperature:()=>Qg,sensor_pin_near:()=>gC,sensor_pin_pressed:()=>cC,sensor_read:()=>DC,sensor_rm_acc:()=>pC,sensor_rm_battery_left:()=>oC,sensor_rm_pin_near_double:()=>_C,sensor_rtc_init:()=>Pg,sensor_sound:()=>Xg,sensor_temperature:()=>AC});var k={};t.r(k),t.d(k,{serial_any:()=>zC,serial_begin:()=>eS,serial_print:()=>WC,serial_print_byte:()=>HC,serial_print_hex:()=>JC,serial_println:()=>KC,serial_read_from_ai:()=>rS,serial_readline:()=>jC,serial_readstr:()=>QC,serial_readstr_until:()=>ZC,serial_receive_data_event:()=>qC,serial_send_to_ai:()=>uS,serial_softserial:()=>tS,serial_softserial_new:()=>$C,system_input:()=>iS,system_print:()=>nS,system_print_container:()=>pS,system_print_end:()=>_S,system_print_inline:()=>sS,system_print_item:()=>aS,system_print_many:()=>oS});var H={};t.r(H),t.d(H,{Panic_with_status_code:()=>TS,Timer_init:()=>NS,base_delay:()=>FS,controls_delay:()=>IS,controls_delay_new:()=>dS,controls_millis:()=>hS,controls_uname:()=>ES,raw_block:()=>mS,reset:()=>MS,system_bitbot_shutdown:()=>AS,system_machine_reset:()=>LS,system_ticks_diff:()=>cS,system_timer:()=>RS,system_timer_init:()=>gS,system_wdt_feed:()=>SS,system_wdt_init:()=>CS,time_ticks_diff:()=>fS,timer:()=>OS,timer2:()=>DS});var W={};t.r(W),t.d(W,{Air_daily_content:()=>HS,Air_now_content:()=>bS,Geo_moon_content:()=>KS,Geo_sun_content:()=>WS,Life_suggestion_content:()=>BS,Location_search_content:()=>US,Tide_daily_content:()=>GS,WEATHER_DAILY:()=>vS,WEATHER_HOUR:()=>XS,WEATHER_NOW:()=>YS,Weather_alarm_content:()=>VS,Weather_daily:()=>wS,Weather_daily_content:()=>kS,Weather_now:()=>yS,Weather_now_content:()=>xS});var K={};t.r(K),t.d(K,{PIN_init:()=>HL,actuator_extern_get_led_bright:()=>dL,actuator_extern_get_led_state:()=>IL,actuator_extern_led_bright:()=>lL,actuator_extern_led_brightness:()=>TL,actuator_ms32006_dcmotor:()=>tL,actuator_ms32006_init:()=>$S,actuator_ms32006_stepper:()=>eL,actuator_neopixel_init:()=>ML,actuator_neopixel_rgb:()=>EL,actuator_neopixel_rgb_all:()=>hL,actuator_neopixel_write:()=>mL,actuator_use_uart_init:()=>OL,esp32_music_get_tempo_extern:()=>pL,esp32_music_pitch:()=>nL,esp32_music_pitch_init:()=>iL,esp32_music_pitch_with_time:()=>sL,esp32_music_play_list:()=>aL,esp32_music_reset_extern:()=>uL,esp32_music_set_tempo_extern:()=>oL,esp32_music_stop:()=>_L,mixbot_actuator_extern_get_addr:()=>wL,mixbot_actuator_extern_set_addr:()=>kL,mixbot_addr_extern:()=>fL,parrot_PIN_init:()=>qL,parrot_move_speed:()=>QL,pin_led_bright:()=>WL,player_play_music:()=>SL,player_set_mode:()=>CL,player_set_play:()=>cL,player_set_volume:()=>gL,player_whether_stop:()=>RL,robot_led_extern:()=>vL,robot_led_extern_get_value:()=>XL,robot_motor_extern:()=>FL,robot_motor_extern_get_speed:()=>PL,robot_servo_extern_absolute_run:()=>VL,robot_servo_extern_get_status:()=>yL,robot_servo_extern_relative_continue:()=>UL,robot_servo_extern_relative_origin:()=>BL,robot_servo_extern_relative_run:()=>GL,robot_servo_extern_stop:()=>bL,robot_servo_extern_stop_mode:()=>xL,robot_traffic_light_extern:()=>YL,servo_PIN_init:()=>KL,servo_get_angle:()=>jS,servo_get_speed:()=>ZS,servo_init:()=>JS,servo_move:()=>rL,servo_move_angle:()=>JL,servo_set_angle:()=>QS,servo_set_speed:()=>zS,servo_speed_360:()=>qS,syn6288_builtin_voice:()=>NL,syn6288_get_voice:()=>AL,syn6288_set_voice:()=>LL,syn6288_tts_play:()=>DL});var J={};t.r(J),t.d(J,{actuator_dc_motor:()=>CA,actuator_dc_motor_stop:()=>SA,actuator_get_led_bright:()=>oA,actuator_get_led_state:()=>pA,actuator_led_bright:()=>_A,actuator_led_brightness:()=>aA,actuator_mixbot_buzzer_on_off:()=>fA,actuator_mixgo_nova_mic_get:()=>XA,actuator_mixgo_nova_mic_set:()=>vA,actuator_mixgo_nova_onboard_music_pitch:()=>GA,actuator_mixgo_nova_onboard_music_stop:()=>UA,actuator_mixgo_nova_play_audio:()=>VA,actuator_mixgo_nova_play_online_audio:()=>BA,actuator_mixgo_nova_record_audio:()=>bA,actuator_mixgo_nova_voice_get:()=>xA,actuator_mixgo_nova_voice_set:()=>yA,actuator_mixgo_zero_led_color:()=>uA,actuator_onboard_neopixel_rgb:()=>hA,actuator_onboard_neopixel_rgb_all:()=>mA,actuator_onboard_neopixel_rgb_show_all_chase:()=>EA,actuator_onboard_neopixel_rgb_show_all_rainbow:()=>OA,actuator_onboard_neopixel_write:()=>MA,actuator_stepper_keep:()=>cA,actuator_stepper_stop:()=>gA,analog_ble_keyboard_init:()=>ZA,analog_ble_keyboard_input:()=>eN,analog_ble_keyboard_mouse_init:()=>uN,analog_ble_keyboard_mouse_input:()=>IN,analog_ble_keyboard_mouse_send_battery:()=>dN,analog_ble_keyboard_mouse_str:()=>TN,analog_ble_keyboard_send_battery:()=>nN,analog_ble_keyboard_str:()=>iN,analog_ble_mouse_init:()=>sN,analog_ble_mouse_input:()=>pN,analog_ble_mouse_keyboard_input:()=>MN,analog_ble_mouse_send_battery:()=>aN,analog_keyboard_input:()=>WA,analog_keyboard_str:()=>zA,analog_mouse_input:()=>qA,bitbot_motor:()=>YA,bitbot_move:()=>FA,bitbot_stop:()=>PA,ble_keyboard_connect:()=>tN,ble_keyboard_get_mac:()=>$A,ble_keyboard_mouse_connect:()=>lN,ble_keyboard_mouse_get_mac:()=>rN,ble_mouse_connect:()=>oN,ble_mouse_get_mac:()=>_N,cc_number:()=>rA,educore_ble_keyboard_input:()=>LN,educore_ble_sensor_connected:()=>SN,educore_ble_sensor_init:()=>CN,educore_buzzer:()=>hN,educore_buzzer_play_tone:()=>mN,educore_buzzer_play_tone_time:()=>EN,educore_buzzer_stop:()=>ON,educore_neopixel_clear:()=>gN,educore_neopixel_rgb:()=>cN,educore_rgb_light:()=>RN,esp32_music_get_tempo:()=>jL,esp32_music_reset:()=>iA,esp32_music_set_tempo:()=>zL,esp32_onboard_music_pitch:()=>ZL,esp32_onboard_music_pitch_with_time:()=>$L,esp32_onboard_music_play_list:()=>eA,esp32_onboard_music_stop:()=>tA,general_key:()=>JA,general_key_tuple:()=>jA,get_power_output:()=>kA,ledswitch:()=>sA,mixbot_motor:()=>DA,mixbot_motor_status:()=>LA,mixbot_move:()=>AA,mixbot_stop:()=>NA,mouse_key:()=>QA,number:()=>nA,rm_actuator_get_led_bright:()=>dA,rm_actuator_get_led_state:()=>IA,rm_actuator_led_bright:()=>lA,rm_actuator_led_brightness:()=>TA,rm_motor:()=>RA,set_all_power_output:()=>HA,set_power_output:()=>wA,special_key:()=>KA});var q={};t.r(q),t.d(q,{ai_sensor_20object:()=>sD,ai_sensor_ailocal_class:()=>JN,ai_sensor_ailocal_class_result:()=>qN,ai_sensor_ailocal_train:()=>KN,ai_sensor_asr_recognize:()=>$N,ai_sensor_audio_play:()=>zN,ai_sensor_audio_record:()=>QN,ai_sensor_barcode:()=>YN,ai_sensor_circle:()=>VN,ai_sensor_classifier_faces:()=>nD,ai_sensor_color:()=>wN,ai_sensor_color_chases:()=>WN,ai_sensor_color_chases_result:()=>HN,ai_sensor_config:()=>DN,ai_sensor_face:()=>iD,ai_sensor_find_20objects:()=>_D,ai_sensor_find_barcodes:()=>vN,ai_sensor_find_circles:()=>BN,ai_sensor_find_colors:()=>kN,ai_sensor_find_licenseplates:()=>eD,ai_sensor_find_lines:()=>bN,ai_sensor_find_qrcodes:()=>PN,ai_sensor_find_rects:()=>UN,ai_sensor_find_tags:()=>yN,ai_sensor_licenseplate:()=>tD,ai_sensor_line:()=>xN,ai_sensor_qrcode:()=>FN,ai_sensor_qrcode_lite:()=>NN,ai_sensor_rect:()=>GN,ai_sensor_rgb:()=>fN,ai_sensor_tag:()=>XN,ai_sensor_use_uart_init:()=>AN,ai_sensor_yolo_recognize:()=>jN,ai_sensor_yolo_recognize_result:()=>ZN});var Q={};t.r(Q),t.d(Q,{MICROPYTHON_AI_Speech_asr:()=>aD,MICROPYTHON_AI_Speech_unit:()=>pD,MICROPYTHON_AI_client:()=>oD});var z={};t.r(z),t.d(z,{mpython_blynk_app_data:()=>RD,mpython_blynk_app_notify:()=>MD,mpython_blynk_email:()=>cD,mpython_blynk_get_timers:()=>mD,mpython_blynk_on_connected:()=>dD,mpython_blynk_on_disconnected:()=>lD,mpython_blynk_run:()=>TD,mpython_blynk_sensor_data_to_app:()=>OD,mpython_blynk_set_property:()=>gD,mpython_blynk_setup:()=>CD,mpython_blynk_stop_timers:()=>hD,mpython_blynk_sync_virtual:()=>rD,mpython_blynk_terminal_widget_vpin:()=>uD,mpython_blynktimer:()=>ED,mpython_blynktimer_run:()=>ID});var j={};t.r(j),t.d(j,{cc_g1_read_bat:()=>SD,cc_g1_read_joystick:()=>LD,cc_g1_read_key:()=>AD,cc_g1_turnoff:()=>ND});var Z={};t.r(Z),t.d(Z,{ce_go_dc_motor:()=>yD,ce_go_get_led_bright:()=>FD,ce_go_get_led_state:()=>PD,ce_go_hall_attachInterrupt:()=>xD,ce_go_hall_data:()=>VD,ce_go_hall_initialize:()=>bD,ce_go_led_bright:()=>fD,ce_go_led_brightness:()=>YD,ce_go_light_number:()=>DD,ce_go_pin_light:()=>kD,ce_go_pin_near:()=>GD,ce_go_pin_near_line:()=>BD,ce_go_pin_near_state_change:()=>UD,ce_go_stepper_keep:()=>vD,ce_go_stepper_stop:()=>XD,educore_car:()=>HD,educore_car_pin_near:()=>qD,educore_car_pin_near_line:()=>JD,educore_car_stepper_keep:()=>WD,educore_car_stepper_stop:()=>KD,sensor_mixgome_eulerangles:()=>wD});var $={};t.r($),t.d($,{communicate_bluetooth_central_init:()=>Ff,communicate_bluetooth_connect:()=>vf,communicate_bluetooth_disconnect:()=>Xf,communicate_bluetooth_handle:()=>Gf,communicate_bluetooth_is_connected:()=>xf,communicate_bluetooth_mac:()=>yf,communicate_bluetooth_peripheral_init:()=>Pf,communicate_bluetooth_recv:()=>Bf,communicate_bluetooth_recv_only:()=>Vf,communicate_bluetooth_scan:()=>Yf,communicate_bluetooth_send:()=>bf,communicate_espnow_init:()=>Uf,communicate_espnow_init_new:()=>wf,communicate_i2c_available:()=>nf,communicate_i2c_init:()=>jD,communicate_i2c_master_read:()=>ef,communicate_i2c_onboard:()=>QD,communicate_i2c_read:()=>ZD,communicate_i2c_scan:()=>tf,communicate_i2c_write:()=>$D,communicate_ir_recv_init:()=>Rf,communicate_ir_send_init:()=>Lf,communicate_ow_init:()=>Tf,communicate_ow_read:()=>mf,communicate_ow_reset:()=>hf,communicate_ow_scan:()=>Mf,communicate_ow_select:()=>Of,communicate_ow_write:()=>Ef,communicate_spi_buffer:()=>pf,communicate_spi_init:()=>_f,communicate_spi_onboard:()=>zD,communicate_spi_read:()=>af,communicate_spi_read_output:()=>uf,communicate_spi_readinto:()=>rf,communicate_spi_readinto_output:()=>lf,communicate_spi_set:()=>of,communicate_spi_write:()=>df,communicate_spi_write_readinto:()=>If,espnow_radio_channel:()=>qf,espnow_radio_channel_new:()=>zf,espnow_radio_on_off:()=>jf,espnow_radio_rec:()=>$f,espnow_radio_recv:()=>eF,espnow_radio_recv_certain_msg:()=>iF,espnow_radio_recv_certain_msg_new:()=>sF,espnow_radio_recv_msg:()=>tF,espnow_radio_recv_new:()=>nF,espnow_radio_send:()=>Zf,espnow_radio_txpower:()=>Qf,i2c_slave_onreceive:()=>sf,internal_variable:()=>cf,ir_recv_timeout:()=>Sf,ir_transmit_busy:()=>ff,ir_transmit_conventional_data:()=>Af,ir_transmit_raw_code:()=>Df,ir_transmit_study_code:()=>Nf,ir_whether_recv:()=>Cf,lora_init:()=>_F,lora_packet:()=>oF,lora_recv:()=>aF,lora_send:()=>pF,network_espnow_info:()=>Hf,network_espnow_mac:()=>kf,network_espnow_recv:()=>Wf,network_espnow_recv_handle:()=>Jf,network_espnow_send:()=>Kf,recv_fun:()=>gf,urequests_attribute:()=>rF,urequests_get:()=>uF,urequests_method:()=>lF});var tt={};t.r(tt),t.d(tt,{display_animate:()=>xF,display_circle:()=>bF,display_color_seclet:()=>qF,display_draw_4strings:()=>fF,display_fill:()=>yF,display_lcd_use_i2c_init:()=>tP,display_line:()=>YF,display_line_arbitrarily:()=>FF,display_matrix_extern_bright_point:()=>gF,display_matrix_extern_bright_screen:()=>SF,display_matrix_extern_clear:()=>OF,display_matrix_extern_get_pixel:()=>cF,display_matrix_extern_get_screen_pixel:()=>CF,display_matrix_extern_image_builtins:()=>LF,display_matrix_extern_scroll_string:()=>mF,display_matrix_extern_scroll_string_delay:()=>EF,display_matrix_extern_shift:()=>RF,display_matrix_extern_show_frame_string:()=>MF,display_matrix_extern_show_frame_string_delay:()=>hF,display_matrix_extern_show_image:()=>IF,display_matrix_extern_show_image_or_string_delay:()=>TF,display_matrix_use_i2c_init:()=>dF,display_oled_drawPixel:()=>GF,display_oled_showBitmap:()=>BF,display_oled_use_i2c_init:()=>_P,display_onoff:()=>vF,display_rect:()=>PF,display_tm1650_power:()=>wF,display_tm1650_set_brightness:()=>WF,display_tm1650_show_dot:()=>HF,display_tm1650_show_num:()=>kF,display_tm_use_i2c_init:()=>UF,display_triangle:()=>VF,display_use_i2c_init:()=>DF,extern_oled_bright_point:()=>mP,extern_oled_clear:()=>TP,extern_oled_get_pixel:()=>hP,extern_oled_hvline:()=>OP,extern_oled_line:()=>RP,extern_oled_scroll_string:()=>dP,extern_oled_scroll_string_delay:()=>IP,extern_oled_shape_rect:()=>EP,extern_oled_shift:()=>MP,extern_oled_show_frame_string:()=>rP,extern_oled_show_frame_string_delay:()=>lP,extern_oled_show_image:()=>oP,extern_oled_show_image_or_string_delay:()=>uP,extern_oled_show_image_xy:()=>pP,extern_oled_show_string:()=>aP,image_shift:()=>XF,lcd_backlight:()=>nP,lcd_clear:()=>sP,lcd_print_string:()=>iP,lcd_show_image_or_string_delay:()=>eP,matrix_extern_image_arithmetic:()=>AF,matrix_extern_image_invert:()=>NF,tft_fill:()=>ZF,tft_line_arbitrarily:()=>$F,tft_scroll_string_delay:()=>jF,tft_show_frame_string_delay:()=>zF,tft_show_image_or_string_delay:()=>QF,tft_show_image_xy:()=>JF,tft_use_spi_init:()=>KF});var et={};t.r(et),t.d(et,{bitbot_display_image_create:()=>sY,display_bright_point:()=>yP,display_bright_screen:()=>bP,display_clear:()=>FP,display_get_pixel:()=>XP,display_get_screen_pixel:()=>xP,display_image_builtins:()=>NP,display_image_builtins_all:()=>DP,display_image_create:()=>fP,display_scroll_string:()=>LP,display_scroll_string_delay:()=>AP,display_shift:()=>vP,display_show_frame_string:()=>CP,display_show_frame_string_delay:()=>SP,display_show_image:()=>cP,display_show_image_or_string_delay:()=>gP,draw_pointer:()=>DY,image_arithmetic:()=>PP,image_invert:()=>YP,mixbot_display_bright_screen:()=>iY,mixbot_display_get_ambientbright:()=>eY,mixbot_display_get_screen_pixel:()=>tY,mixbot_display_image_create:()=>$P,mixbot_display_rotate:()=>nY,mixgo_display_image_create_new:()=>UP,mixgome_display_font:()=>GP,mixgome_display_image_create:()=>VP,mixgomini_display_image_create:()=>BP,mpython_display_hvline:()=>jP,mpython_display_line:()=>ZP,mpython_display_shape_rect:()=>zP,mpython_pbm_image:()=>wP,onboard_oled_bright_point:()=>QP,onboard_oled_scroll_string_delay:()=>qP,onboard_oled_show_frame_string_delay:()=>JP,onboard_oled_show_image:()=>kP,onboard_oled_show_image_or_string_delay:()=>KP,onboard_oled_show_image_xy:()=>HP,onboard_oled_show_string:()=>WP,onboard_tft_bright_point:()=>EY,onboard_tft_bright_screen:()=>RY,onboard_tft_clear:()=>MY,onboard_tft_clock_clear:()=>AY,onboard_tft_clock_draw:()=>LY,onboard_tft_clock_get_rtctime:()=>CY,onboard_tft_clock_init:()=>gY,onboard_tft_clock_set_time:()=>SY,onboard_tft_display_hvline:()=>IY,onboard_tft_display_line:()=>TY,onboard_tft_display_shape_circle:()=>NY,onboard_tft_display_shape_rect:()=>dY,onboard_tft_fill:()=>cY,onboard_tft_get_pixel:()=>mY,onboard_tft_get_screen_pixel:()=>OY,onboard_tft_scroll_string:()=>rY,onboard_tft_scroll_string_delay:()=>lY,onboard_tft_shift:()=>hY,onboard_tft_show_frame_string:()=>aY,onboard_tft_show_frame_string_delay:()=>uY,onboard_tft_show_image:()=>_Y,onboard_tft_show_image_or_string_delay:()=>pY,onboard_tft_show_image_xy:()=>oY});var it={};t.r(it),t.d(it,{factory_block:()=>xY,factory_block_return:()=>bY,factory_block_return_with_textarea:()=>BY,factory_block_with_textarea:()=>VY,factory_callMethod_noreturn:()=>XY,factory_callMethod_return:()=>yY,factory_declare:()=>vY,factory_from_import:()=>fY,factory_function_noreturn:()=>PY,factory_function_return:()=>YY,factory_import:()=>FY,folding_block:()=>GY});var nt={};t.r(nt),t.d(nt,{inout_analog_atten:()=>ev,inout_analog_read:()=>qY,inout_analog_read_init:()=>tv,inout_analog_write:()=>WY,inout_analog_write_init:()=>$Y,inout_analog_write_set:()=>KY,inout_digital_init:()=>jY,inout_digital_read:()=>kY,inout_digital_write:()=>wY,inout_highlow:()=>UY,inout_pin_attachInterrupt:()=>zY,inout_pin_pressed:()=>QY,inout_pin_pressed_init:()=>iv,inout_pwm_analog_write:()=>HY,inout_pwm_analog_write_init:()=>ZY,inout_pwm_analog_write_set_freq:()=>JY});var st={};t.r(st),t.d(st,{IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE:()=>cv,IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE:()=>Ov,IOT_EMQX_PING:()=>gv,IOT_FORMATTING:()=>mv,IOT_FORMAT_STRING:()=>Ev,IOT_MIXIO_NTP:()=>Cv,IOT_MIXIO_PUBLISH:()=>rv,IOT_MIXIO_SUBSCRIBE:()=>lv,iot_client_onboard:()=>Sv,iot_http_client:()=>Lv,iot_http_data:()=>Av,iot_mixio_check:()=>Tv,iot_mixio_connect:()=>uv,iot_mixio_connect_only:()=>Iv,iot_mixio_disconnect:()=>dv,iot_mixio_format_msg:()=>hv,iot_mixio_format_topic:()=>Mv,iot_mixly_key:()=>Rv,iot_mqtt_client:()=>Nv,iot_mqtt_data:()=>Dv,iot_onenet_check:()=>pv,iot_onenet_connect:()=>sv,iot_onenet_disconnect:()=>_v,iot_onenet_publish:()=>av,iot_onenet_publish_dict:()=>ov,iot_wifi_connect:()=>nv});var _t={};t.r(_t),t.d(_t,{educore_mqtt_connect:()=>_X,educore_mqtt_connect_success:()=>uX,educore_mqtt_subscribe_message:()=>oX,educore_mqtt_topic_publish:()=>aX,educore_mqtt_topic_subscribe:()=>pX,educore_wifi_connect:()=>sX,network_ap_connect:()=>bv,network_connect:()=>Fv,network_get_connect:()=>Yv,network_get_wifi:()=>xv,network_init:()=>fv,network_is_active:()=>yv,network_open:()=>Xv,network_scan:()=>Vv,network_server:()=>Bv,network_socket_accept:()=>Hv,network_socket_bind:()=>Uv,network_socket_close:()=>Qv,network_socket_connect:()=>wv,network_socket_init:()=>Gv,network_socket_listen:()=>kv,network_socket_receive:()=>Wv,network_socket_receive_from:()=>Jv,network_socket_send:()=>Kv,network_socket_send_to:()=>qv,network_stop:()=>vv,network_wifi_connect:()=>Pv,ntptime_address:()=>tX,ntptime_time:()=>$v,requests_attribute:()=>jv,requests_attribute2:()=>iX,requests_get:()=>zv,requests_get2:()=>eX,requests_method:()=>Zv,requests_post:()=>nX});var ot={};t.r(ot),t.d(ot,{CI130X_BROADCAST:()=>YX,CI130X_GET_THE_RECOGNIZED_CMD:()=>PX,CI130X_GET_WHETHER_IDENTIFY:()=>FX,CI130X_IDENTIFY_AND_SAVE:()=>fX,CI130X_SET_SYSTEM_CMD:()=>vX,HCSR04:()=>uy,PS2_Button:()=>dy,PS2_Buttons:()=>Iy,PS2_Buttons_new:()=>cy,PS2_State:()=>Ty,PS2_init:()=>ry,PS2_init_new:()=>Oy,PS2_stk:()=>My,PS2_stk_new:()=>gy,PS2_vibration:()=>ly,PS2_vibration_new:()=>Ry,RTC_get_time:()=>my,RTC_set_date:()=>mX,RTC_set_datetime:()=>hy,RTC_set_time:()=>hX,camera_sensor_init:()=>Zy,camera_sensor_result:()=>$y,educore_body_sensor:()=>wy,educore_button_sensor_extern:()=>Ky,educore_camera_sensor:()=>jy,educore_infrared_sensor:()=>Wy,educore_soilhum_sensor:()=>ky,educore_temp_sensor:()=>zy,educore_temphum_sensor:()=>Hy,educore_ultrasonic_sensor:()=>qy,esp32_s2_weather_init:()=>_y,esp32_s2_weather_rain:()=>py,esp32_s2_weather_wd:()=>oy,esp32_s2_weather_ws:()=>ay,extern_rfid_read:()=>JX,extern_rfid_readcontent:()=>QX,extern_rfid_readid:()=>qX,extern_rfid_status:()=>ZX,extern_rfid_write:()=>zX,extern_rfid_write_return:()=>jX,gnss_get_data:()=>Ly,gnss_have_data:()=>Ay,interaction_whether_to_interaction:()=>NX,interaction_whether_to_interaction_SANT:()=>DX,mixbot_sensor_extern_get_addr:()=>yy,mixbot_sensor_extern_set_addr:()=>xy,pm25_get_data:()=>Sy,radar_set_DETECTION_THRESHOLD:()=>LX,radar_set_DETECTION_THRESHOLD_SANT:()=>AX,robot_button_extern_get_value:()=>Ny,robot_color_extern_get_value:()=>Yy,robot_infrared_extern_get_value:()=>fy,robot_infrared_extern_grey_get_value:()=>Fy,robot_potentiometer_extern_get_value:()=>Py,robot_sonar_extern_get_value:()=>vy,robot_sonar_extern_led:()=>Xy,robot_touch_extern_get_value:()=>Dy,sensor_APDS9960_extern:()=>yX,sensor_DS18X20:()=>Uy,sensor_LTR308_extern:()=>xX,sensor_LTR390UV_extern:()=>UX,sensor_MAX30102_extern:()=>XX,sensor_QMC5883L_extern:()=>wX,sensor_VL530LX_extern:()=>WX,sensor_aht11_extern:()=>HX,sensor_bmp:()=>gX,sensor_dht11:()=>Ey,sensor_distance_hrsc04:()=>MX,sensor_hp203_extern:()=>bX,sensor_ltr381_extern:()=>BX,sensor_mixgo_extern_button_attachInterrupt:()=>IX,sensor_mixgo_extern_button_get_presses:()=>dX,sensor_mixgo_extern_button_is_pressed:()=>rX,sensor_mixgo_extern_button_was_pressed:()=>lX,sensor_mixgo_extern_light:()=>EX,sensor_mixgo_extern_pin_near:()=>RX,sensor_mixgo_extern_sound:()=>OX,sensor_mixgoce_hot_wheel_degrees:()=>sy,sensor_mixgoce_hot_wheel_is_touched:()=>ny,sensor_mpu9250_attachGestureInterrupt:()=>TX,sensor_read_humiture:()=>Jy,sensor_rtc_init:()=>cX,sensor_sht:()=>CX,sensor_shtc3_extern:()=>kX,sensor_spl06_001_extern:()=>VX,sensor_ucs12071_extern:()=>GX,sensor_use_i2c_init:()=>SX,sensor_use_spi_init:()=>KX,sensor_use_uart_init:()=>Cy,sensor_weather_solo_init:()=>by,sensor_weather_solo_rain:()=>Gy,sensor_weather_solo_wd:()=>Vy,sensor_weather_solo_ws:()=>By,sensor_weigh_init:()=>tx,ultrasonic_sensor_read_distance:()=>Qy,weather_data:()=>$X,weather_have_data:()=>ty,weather_set_label:()=>iy,weather_uart_mixio:()=>ey,weigh_sensor_get_weight:()=>ex});var pt={};t.r(pt),t.d(pt,{CI130X_BROADCAST_SANT:()=>$b,CI130X_GET_THE_RECOGNIZED_CMD_SANT:()=>Zb,CI130X_GET_WHETHER_IDENTIFY_SANT:()=>jb,CI130X_IDENTIFY_AND_SAVE_SANT:()=>zb,CI130X_SET_SYSTEM_CMD_SANT:()=>tV,HCSR04:()=>rx,bitbot_als_num:()=>Fb,dht11:()=>Vb,educore_button_sensor:()=>Wb,educore_button_was_pressed:()=>Kb,educore_gyroscope_sensor:()=>wb,educore_gyroscope_sensor_read:()=>kb,educore_gyroscope_sensor_shake:()=>Hb,educore_light_sensor:()=>Ub,educore_rfid_sensor:()=>Jb,educore_rfid_sensor_scan:()=>qb,educore_rfid_sensor_scan_data:()=>Qb,educore_voice_sensor:()=>Bb,number1:()=>lx,number2:()=>dx,number3:()=>Ix,number4:()=>Tx,number5:()=>Mx,number6:()=>hx,number7:()=>mx,onboard_RTC_get_time:()=>pb,onboard_RTC_get_time_str:()=>rb,onboard_RTC_get_timestamp:()=>ab,onboard_RTC_set_datetime:()=>_b,onboard_RTC_settime_string:()=>ob,onboard_RTC_timestamp_totuple:()=>ub,rfid_readcontent:()=>vx,rfid_readid:()=>Yx,rfid_write:()=>Xx,rfid_write_return:()=>yx,sensor_LTR308:()=>Nx,sensor_adxl345_get_acceleration:()=>Hx,sensor_aht11:()=>Fx,sensor_bitbot_ALS:()=>fb,sensor_button_get_presses:()=>vb,sensor_button_is_pressed:()=>Pb,sensor_button_was_pressed:()=>Yb,sensor_compass_reset:()=>zx,sensor_ds18x20:()=>Lx,sensor_eulerangles:()=>bx,sensor_get_acceleration:()=>xx,sensor_get_temperature:()=>Px,sensor_hp203:()=>fx,sensor_light:()=>bb,sensor_lm35:()=>Ax,sensor_mixbot_get_gyro:()=>Db,sensor_mixbot_patrol_calibrate:()=>Lb,sensor_mixbot_patrol_value:()=>Ab,sensor_mixbot_temperature:()=>Nb,sensor_mixgo_LTR308:()=>gx,sensor_mixgo_button_attachInterrupt:()=>_x,sensor_mixgo_button_get_presses:()=>sx,sensor_mixgo_button_is_pressed:()=>ix,sensor_mixgo_button_was_pressed:()=>nx,sensor_mixgo_cc_mmc5603_calibrate_compass:()=>Ib,sensor_mixgo_cc_mmc5603_get_angle:()=>db,sensor_mixgo_cc_mmc5603_get_magnetic:()=>lb,sensor_mixgo_light:()=>xb,sensor_mixgo_nova_LTR308:()=>Sx,sensor_mixgo_nova_pin_near:()=>cx,sensor_mixgo_pin_near:()=>Rx,sensor_mixgo_pin_near_double:()=>Ox,sensor_mixgo_pin_near_single:()=>Ex,sensor_mixgo_pin_pressed:()=>wx,sensor_mixgo_sant_color:()=>Cx,sensor_mixgo_touch_slide:()=>Ux,sensor_mixgocar42_button_attachInterrupt:()=>ux,sensor_mixgocar42_button_get_presses:()=>ax,sensor_mixgocar42_button_is_pressed:()=>ox,sensor_mixgocar42_button_was_pressed:()=>px,sensor_mixgocar_battery_left:()=>Sb,sensor_mixgocar_pin_near:()=>gb,sensor_mixgocar_pin_near_line:()=>cb,sensor_mixgocar_pin_near_state_change:()=>Cb,sensor_mixgoce_pin_pressed:()=>Gx,sensor_mixgoce_temperature:()=>Mb,sensor_mixgome_temperature:()=>Tb,sensor_mpu9250_calibrate_compass:()=>Jx,sensor_mpu9250_field_strength:()=>Qx,sensor_mpu9250_gesture:()=>Vx,sensor_mpu9250_get_acceleration:()=>Bx,sensor_mpu9250_get_gyro:()=>Kx,sensor_mpu9250_get_magnetic:()=>Wx,sensor_mpu9250_temperature:()=>qx,sensor_mpython_pin_pressed:()=>kx,sensor_mpython_qmi8658_get_gyro:()=>hb,sensor_mpython_qmi8658_temperature:()=>mb,sensor_onboard_compass_reset:()=>sb,sensor_onboard_mpu9250_calibrate_compass:()=>eb,sensor_onboard_mpu9250_field_strength:()=>nb,sensor_onboard_mpu9250_gesture:()=>jx,sensor_onboard_mpu9250_get_acceleration:()=>Zx,sensor_onboard_mpu9250_get_gyro:()=>tb,sensor_onboard_mpu9250_get_magnetic:()=>$x,sensor_onboard_mpu9250_temperature:()=>ib,sensor_pin_near:()=>yb,sensor_pin_pressed:()=>Xb,sensor_read:()=>Gb,sensor_rm_acc:()=>Rb,sensor_rm_battery_left:()=>Ob,sensor_rm_pin_near_double:()=>Eb,sensor_sound:()=>Dx});var at={};t.r(at),t.d(at,{serial_any:()=>_V,serial_print:()=>eV,serial_print_byte:()=>iV,serial_print_hex:()=>sV,serial_println:()=>nV,serial_read_from_ai:()=>hV,serial_readline:()=>pV,serial_readstr:()=>oV,serial_send_to_ai:()=>MV,serial_softserial:()=>aV,serial_softserial_new:()=>uV,system_input:()=>rV,system_print:()=>lV,system_print_end:()=>IV,system_print_inline:()=>dV,system_print_many:()=>TV});var ut={};t.r(ut),t.d(ut,{Panic_with_status_code:()=>DV,Timer_init:()=>kV,base_delay:()=>KV,controls_delay:()=>vV,controls_delay_new:()=>XV,controls_end_program:()=>FV,controls_millis:()=>fV,controls_uname:()=>YV,reset:()=>PV,system_bitbot_shutdown:()=>wV,system_device_name:()=>AV,system_device_serial_number:()=>NV,system_event_bus_source:()=>SV,system_event_bus_value:()=>LV,system_machine_reset:()=>UV,system_on_event:()=>cV,system_raise_event:()=>RV,system_reset:()=>EV,system_run_in_background:()=>mV,system_ticks_diff:()=>bV,system_timer:()=>xV,system_timer_init:()=>VV,system_timestamp:()=>gV,system_value:()=>CV,system_wait:()=>OV,system_wdt_feed:()=>GV,system_wdt_init:()=>BV,time_ticks_diff:()=>WV,timer:()=>yV,timer2:()=>HV});var rt={};t.r(rt),t.d(rt,{Air_daily_content:()=>_B,Air_now_content:()=>ZV,Geo_moon_content:()=>pB,Geo_sun_content:()=>oB,Life_suggestion_content:()=>tB,Location_search_content:()=>iB,Tide_daily_content:()=>eB,WEATHER_DAILY:()=>qV,WEATHER_HOUR:()=>QV,WEATHER_NOW:()=>JV,Weather_alarm_content:()=>$V,Weather_daily:()=>nB,Weather_daily_content:()=>sB,Weather_now:()=>zV,Weather_now_content:()=>jV});var lt={};t.r(lt),t.d(lt,{controls_pin_attachInterrupt:()=>AB,inout_analog_atten:()=>hB,inout_analog_write:()=>TB,inout_analog_write_init:()=>RB,inout_analog_write_set:()=>MB,inout_analog_write_set_freq:()=>gB,inout_digital_init:()=>OB,inout_digital_read:()=>IB,inout_digital_write:()=>dB,inout_highlow:()=>lB,inout_pinMode:()=>CB,inout_pin_attachInterrupt:()=>EB,inout_pin_pressed:()=>mB,inout_pin_pressed_init:()=>cB,pin_pressed:()=>LB,pin_pressed_init:()=>SB});var dt={};t.r(dt),t.d(dt,{mini_g2_aht11:()=>DB,mini_g2_hp203:()=>fB,mini_g2_rfid_readcontent:()=>YB,mini_g2_rfid_readid:()=>PB,mini_g2_rfid_status:()=>yB,mini_g2_rfid_write:()=>vB,mini_g2_rfid_write_outcome:()=>XB,mini_g2_varistor:()=>FB});var It={};t.r(It),t.d(It,{me_go_dc_motor:()=>HB,me_go_get_led_bright:()=>BB,me_go_get_led_state:()=>GB,me_go_hall_attachInterrupt:()=>WB,me_go_hall_data:()=>JB,me_go_hall_initialize:()=>KB,me_go_led_bright:()=>VB,me_go_led_brightness:()=>UB,me_go_light_number:()=>bB,me_go_pin_light:()=>ZB,me_go_pin_near:()=>QB,me_go_pin_near_line:()=>qB,me_go_pin_near_state_change:()=>zB,me_go_stepper_keep:()=>wB,me_go_stepper_stop:()=>kB,sensor_mixgome_eulerangles:()=>jB});var Tt={};t.r(Tt),t.d(Tt,{analog_input:()=>pG,analog_output:()=>uG,espnow_channel:()=>sG,haskylens_model:()=>_G,i2c_A_pin:()=>rG,i2c_B_pin:()=>lG,pins_analog:()=>hG,pins_analog_pin:()=>mG,pins_axis:()=>XG,pins_brightness:()=>yG,pins_builtinimg:()=>NG,pins_builtinimg_extern:()=>DG,pins_button:()=>RG,pins_buttonB:()=>cG,pins_dac:()=>EG,pins_dac_pin:()=>OG,pins_digital:()=>tG,pins_digital_dot:()=>kG,pins_digital_pin:()=>eG,pins_exlcdh:()=>YG,pins_exlcdv:()=>vG,pins_imglist:()=>fG,pins_input_pin:()=>iG,pins_one_more:()=>wG,pins_output_pin:()=>nG,pins_playlist:()=>FG,pins_playlist_extern:()=>PG,pins_pwm:()=>gG,pins_pwm_pin:()=>CG,pins_radio_datarate:()=>UG,pins_radio_power:()=>GG,pins_serial:()=>AG,pins_tone_notes:()=>BG,pins_touch:()=>LG,pins_touch_pin:()=>SG,pins_tts_bgmusic:()=>VG,pins_tts_builtin_music:()=>bG,pins_tts_voice:()=>xG,pwm_input:()=>oG,pwm_output:()=>aG,spi_A_pin:()=>dG,spi_B_pin:()=>IG,spi_C_pin:()=>TG,spi_D_pin:()=>MG});var Mt={};t.r(Mt),t.d(Mt,{inout_analog_atten:()=>$G,inout_analog_write:()=>JG,inout_analog_write_init:()=>ZG,inout_analog_write_set:()=>qG,inout_digital_init:()=>jG,inout_digital_read:()=>KG,inout_digital_write:()=>WG,inout_highlow:()=>HG,inout_pin_attachInterrupt:()=>zG,inout_pin_pressed:()=>QG,inout_pin_pressed_init:()=>tU});var ht={};t.r(ht),t.d(ht,{mini_g2_aht11:()=>eU,mini_g2_hp203:()=>iU,mini_g2_rfid_readcontent:()=>_U,mini_g2_rfid_readid:()=>sU,mini_g2_rfid_status:()=>aU,mini_g2_rfid_write:()=>oU,mini_g2_rfid_write_outcome:()=>pU,mini_g2_varistor:()=>nU});var mt={};t.r(mt),t.d(mt,{me_go_dc_motor:()=>hU,me_go_get_led_bright:()=>lU,me_go_get_led_state:()=>dU,me_go_hall_attachInterrupt:()=>mU,me_go_hall_data:()=>OU,me_go_hall_initialize:()=>EU,me_go_led_bright:()=>rU,me_go_led_brightness:()=>IU,me_go_light_number:()=>uU,me_go_pin_light:()=>SU,me_go_pin_near:()=>cU,me_go_pin_near_line:()=>RU,me_go_pin_near_state_change:()=>gU,me_go_stepper_keep:()=>TU,me_go_stepper_stop:()=>MU,sensor_mixgome_eulerangles:()=>CU});var Et={};t.r(Et),t.d(Et,{analog_input:()=>XU,analog_output:()=>xU,espnow_channel:()=>YU,haskylens_model:()=>vU,i2c_A_pin:()=>bU,i2c_B_pin:()=>VU,pins_analog:()=>HU,pins_analog_pin:()=>kU,pins_axis:()=>sw,pins_brightness:()=>pw,pins_builtinimg:()=>$U,pins_builtinimg_extern:()=>tw,pins_button:()=>AU,pins_buttonB:()=>NU,pins_dac:()=>qU,pins_dac_pin:()=>JU,pins_digital:()=>LU,pins_digital_dot:()=>Mw,pins_digital_pin:()=>DU,pins_exlcdh:()=>_w,pins_exlcdv:()=>ow,pins_imglist:()=>ew,pins_input_pin:()=>fU,pins_interrupt:()=>jU,pins_one_more:()=>Tw,pins_output_pin:()=>FU,pins_playlist:()=>iw,pins_playlist_extern:()=>nw,pins_pwm:()=>KU,pins_pwm_input:()=>PU,pins_pwm_pin:()=>WU,pins_radio_datarate:()=>Iw,pins_radio_power:()=>dw,pins_serial:()=>ZU,pins_tone_notes:()=>lw,pins_touch:()=>zU,pins_touch_pin:()=>QU,pins_tts_bgmusic:()=>rw,pins_tts_builtin_music:()=>uw,pins_tts_voice:()=>aw,pwm_output:()=>yU,spi_A_pin:()=>BU,spi_B_pin:()=>GU,spi_C_pin:()=>UU,spi_D_pin:()=>wU});const Ot=Blockly,Rt=Mixly,ct={NAME_TYPE:"VARIABLE",allVariables:function(t){var e;if(t.getDescendants)e=t.getDescendants();else{if(!t.getAllBlocks)throw"Not Block or Workspace: "+t;e=t.getAllBlocks()}for(var i=Object.create(null),n=0;n1&&(o+=n)):i=o}else i="i";return i}},gt=ct;
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ({
+
+/***/ "../micropython/blocks/actuator.js":
+/*!*****************************************!*\
+ !*** ../micropython/blocks/actuator.js ***!
+ \*****************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ actuator_extern_get_led_bright: () => (/* binding */ actuator_extern_get_led_bright),
+/* harmony export */ actuator_extern_led_bright: () => (/* binding */ actuator_extern_led_bright),
+/* harmony export */ actuator_extern_led_brightness: () => (/* binding */ actuator_extern_led_brightness),
+/* harmony export */ actuator_get_led_bright: () => (/* binding */ actuator_get_led_bright),
+/* harmony export */ actuator_led_bright: () => (/* binding */ actuator_led_bright),
+/* harmony export */ actuator_led_brightness: () => (/* binding */ actuator_led_brightness),
+/* harmony export */ actuator_neopixel_init: () => (/* binding */ actuator_neopixel_init),
+/* harmony export */ actuator_neopixel_rgb: () => (/* binding */ actuator_neopixel_rgb),
+/* harmony export */ actuator_neopixel_write: () => (/* binding */ actuator_neopixel_write),
+/* harmony export */ actuator_onboard_neopixel_rgb: () => (/* binding */ actuator_onboard_neopixel_rgb),
+/* harmony export */ actuator_onboard_neopixel_rgb_all: () => (/* binding */ actuator_onboard_neopixel_rgb_all),
+/* harmony export */ actuator_onboard_neopixel_write: () => (/* binding */ actuator_onboard_neopixel_write),
+/* harmony export */ esp32_mixgo_music_play_list_show: () => (/* binding */ esp32_mixgo_music_play_list_show),
+/* harmony export */ esp32_music_get_tempo: () => (/* binding */ esp32_music_get_tempo),
+/* harmony export */ esp32_music_pitch: () => (/* binding */ esp32_music_pitch),
+/* harmony export */ esp32_music_pitch_with_time: () => (/* binding */ esp32_music_pitch_with_time),
+/* harmony export */ esp32_music_play_list: () => (/* binding */ esp32_music_play_list),
+/* harmony export */ esp32_music_reset: () => (/* binding */ esp32_music_reset),
+/* harmony export */ esp32_music_set_tempo: () => (/* binding */ esp32_music_set_tempo),
+/* harmony export */ esp32_music_stop: () => (/* binding */ esp32_music_stop),
+/* harmony export */ esp32_onboard_music_pitch: () => (/* binding */ esp32_onboard_music_pitch),
+/* harmony export */ esp32_onboard_music_pitch_with_time: () => (/* binding */ esp32_onboard_music_pitch_with_time),
+/* harmony export */ esp32_onboard_music_play_list: () => (/* binding */ esp32_onboard_music_play_list),
+/* harmony export */ esp32_onboard_music_stop: () => (/* binding */ esp32_onboard_music_stop),
+/* harmony export */ get_led_bright: () => (/* binding */ get_led_bright),
+/* harmony export */ led_brightness: () => (/* binding */ led_brightness),
+/* harmony export */ led_light: () => (/* binding */ led_light),
+/* harmony export */ ledswitch: () => (/* binding */ ledswitch),
+/* harmony export */ number: () => (/* binding */ number),
+/* harmony export */ servo_move: () => (/* binding */ servo_move)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const ACTUATOR_HUE = 100;
+
+//Servo
+const servo_move = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendValueInput("DEGREE", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DEGREE_0_180);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SERVO_MOVE);
+ }
+};
+
+//LED
+const number = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["1", "1"],
+ ["2", "2"]
+ ]), 'op')
+ this.setOutput(true);
+ }
+};
+
+const ledswitch = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ON, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_OFF, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TOGGLE, "-1"]
+ ]), "flag");
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
+ }
+};
+
+const actuator_extern_led_bright = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED)
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LED_SETONOFF);
+ }
+};
+
+const actuator_extern_get_led_bright = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED)
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LED_GETONOFF);
+ }
+};
+
+const actuator_extern_led_brightness = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED)
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LED_SETBRIGHT);
+ }
+};
+
+const actuator_led_bright = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING);
+ this.appendValueInput('led')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED)
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_SETONOFF);
+ }
+};
+
+const actuator_get_led_bright = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
+ this.appendValueInput('led')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_GETONOFF);
+ }
+};
+
+const actuator_led_brightness = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING);
+ this.appendValueInput('led')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED)
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_SETBRIGHT);
+ }
+};
+
+//music
+const esp32_music_pitch = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TONE)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendValueInput('pitch')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);
+ }
+};
+
+const esp32_music_pitch_with_time = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TONE)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendValueInput('pitch')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY);
+ this.appendValueInput('time')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DURATION);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE2);
+ }
+};
+
+const esp32_music_stop = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NOTONE)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const esp32_music_set_tempo = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendValueInput('TICKS')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_SET_TEMPO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_ACTUATOR_ticks);
+ this.appendValueInput('BPM')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_SET_TEMPO);
+ }
+}
+
+const esp32_music_get_tempo = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Get_current_tempo)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_GET_TEMPO);
+ }
+}
+
+const esp32_music_reset = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Reset_music)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_RESET);
+ }
+}
+
+const esp32_onboard_music_pitch = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TONE);
+ this.appendValueInput('pitch')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);
+ }
+};
+
+const esp32_onboard_music_pitch_with_time = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TONE);
+ this.appendValueInput('pitch')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY);
+ this.appendValueInput('time')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DURATION);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE2);
+ }
+};
+
+const esp32_onboard_music_stop = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NOTONE);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const esp32_onboard_music_play_list = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendValueInput('LIST')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS);
+
+ }
+}
+
+const esp32_music_play_list = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendValueInput('LIST')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)
+ this.appendValueInput('PIN')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS);
+
+ }
+}
+
+const esp32_mixgo_music_play_list_show = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendValueInput('LIST')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)
+ this.appendValueInput('PIN')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN);
+ // this.appendValueInput('DISPLAY')
+ // .appendField(Blockly.Msg.MIXLY_ESP32_MIXGO_MUSIC_SHOW_IN);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MIXGO_MUSIC_PLAY_TONE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_PLAYSHOW)
+ }
+}
+//RGB
+const actuator_neopixel_init = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .setCheck("var");
+ this.appendValueInput("PIN", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN);
+ this.appendValueInput("LEDCOUNT")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_COUNT);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_PIN_COUNT);
+ }
+};
+
+const actuator_neopixel_rgb = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ // .appendField(Blockly.Msg.MIXLY_SETUP)
+ this.appendValueInput("_LED_")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM);
+ this.appendValueInput("RVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_R);
+ this.appendValueInput("GVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_G);
+ this.appendValueInput("BVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_B);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B);
+ }
+};
+
+const actuator_neopixel_write = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ // this.appendValueInput("PIN", Number)
+ // .setCheck(Number)
+ // .setAlign(Blockly.inputs.Align.RIGHT)
+ // .appendField(Blockly.Msg.MIXLY_PIN);
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_RGB_WRITE)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_WRI);
+ }
+};
+
+const actuator_onboard_neopixel_rgb = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ this.appendValueInput("_LED_")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM);
+ this.appendValueInput("RVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_R);
+ this.appendValueInput("GVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_G);
+ this.appendValueInput("BVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_B);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B);
+ }
+};
+
+const actuator_onboard_neopixel_rgb_all = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ this.appendValueInput("RVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_R);
+ this.appendValueInput("GVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_G);
+ this.appendValueInput("BVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_B);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B);
+ }
+};
+
+const actuator_onboard_neopixel_write = {
+ init: function () {
+ this.setColour(ACTUATOR_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_RGB_WRITE)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_WRI);
+ }
+};
+
+
+const led_light = actuator_led_bright;
+const get_led_bright = actuator_get_led_bright;
+const led_brightness = actuator_led_brightness;
+
+
+/***/ }),
+
+/***/ "../micropython/blocks/actuator_extern.js":
+/*!************************************************!*\
+ !*** ../micropython/blocks/actuator_extern.js ***!
+ \************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ PIN_init: () => (/* binding */ PIN_init),
+/* harmony export */ actuator_extern_get_led_bright: () => (/* binding */ actuator_extern_get_led_bright),
+/* harmony export */ actuator_extern_get_led_state: () => (/* binding */ actuator_extern_get_led_state),
+/* harmony export */ actuator_extern_led_bright: () => (/* binding */ actuator_extern_led_bright),
+/* harmony export */ actuator_extern_led_brightness: () => (/* binding */ actuator_extern_led_brightness),
+/* harmony export */ actuator_ms32006_dcmotor: () => (/* binding */ actuator_ms32006_dcmotor),
+/* harmony export */ actuator_ms32006_init: () => (/* binding */ actuator_ms32006_init),
+/* harmony export */ actuator_ms32006_stepper: () => (/* binding */ actuator_ms32006_stepper),
+/* harmony export */ actuator_neopixel_init: () => (/* binding */ actuator_neopixel_init),
+/* harmony export */ actuator_neopixel_rgb: () => (/* binding */ actuator_neopixel_rgb),
+/* harmony export */ actuator_neopixel_rgb_all: () => (/* binding */ actuator_neopixel_rgb_all),
+/* harmony export */ actuator_neopixel_write: () => (/* binding */ actuator_neopixel_write),
+/* harmony export */ actuator_use_uart_init: () => (/* binding */ actuator_use_uart_init),
+/* harmony export */ esp32_music_get_tempo_extern: () => (/* binding */ esp32_music_get_tempo_extern),
+/* harmony export */ esp32_music_pitch: () => (/* binding */ esp32_music_pitch),
+/* harmony export */ esp32_music_pitch_init: () => (/* binding */ esp32_music_pitch_init),
+/* harmony export */ esp32_music_pitch_with_time: () => (/* binding */ esp32_music_pitch_with_time),
+/* harmony export */ esp32_music_play_list: () => (/* binding */ esp32_music_play_list),
+/* harmony export */ esp32_music_reset_extern: () => (/* binding */ esp32_music_reset_extern),
+/* harmony export */ esp32_music_set_tempo_extern: () => (/* binding */ esp32_music_set_tempo_extern),
+/* harmony export */ esp32_music_stop: () => (/* binding */ esp32_music_stop),
+/* harmony export */ mixbot_actuator_extern_get_addr: () => (/* binding */ mixbot_actuator_extern_get_addr),
+/* harmony export */ mixbot_actuator_extern_set_addr: () => (/* binding */ mixbot_actuator_extern_set_addr),
+/* harmony export */ mixbot_addr_extern: () => (/* binding */ mixbot_addr_extern),
+/* harmony export */ parrot_PIN_init: () => (/* binding */ parrot_PIN_init),
+/* harmony export */ parrot_move_speed: () => (/* binding */ parrot_move_speed),
+/* harmony export */ pin_led_bright: () => (/* binding */ pin_led_bright),
+/* harmony export */ player_insert_music: () => (/* binding */ player_insert_music),
+/* harmony export */ player_play_music: () => (/* binding */ player_play_music),
+/* harmony export */ player_set_mode: () => (/* binding */ player_set_mode),
+/* harmony export */ player_set_play: () => (/* binding */ player_set_play),
+/* harmony export */ player_set_volume: () => (/* binding */ player_set_volume),
+/* harmony export */ player_whether_stop: () => (/* binding */ player_whether_stop),
+/* harmony export */ robot_led_extern: () => (/* binding */ robot_led_extern),
+/* harmony export */ robot_led_extern_get_value: () => (/* binding */ robot_led_extern_get_value),
+/* harmony export */ robot_motor_extern: () => (/* binding */ robot_motor_extern),
+/* harmony export */ robot_motor_extern_get_speed: () => (/* binding */ robot_motor_extern_get_speed),
+/* harmony export */ robot_servo_extern_absolute_run: () => (/* binding */ robot_servo_extern_absolute_run),
+/* harmony export */ robot_servo_extern_get_status: () => (/* binding */ robot_servo_extern_get_status),
+/* harmony export */ robot_servo_extern_relative_continue: () => (/* binding */ robot_servo_extern_relative_continue),
+/* harmony export */ robot_servo_extern_relative_origin: () => (/* binding */ robot_servo_extern_relative_origin),
+/* harmony export */ robot_servo_extern_relative_run: () => (/* binding */ robot_servo_extern_relative_run),
+/* harmony export */ robot_servo_extern_stop: () => (/* binding */ robot_servo_extern_stop),
+/* harmony export */ robot_servo_extern_stop_mode: () => (/* binding */ robot_servo_extern_stop_mode),
+/* harmony export */ robot_traffic_light_extern: () => (/* binding */ robot_traffic_light_extern),
+/* harmony export */ servo_PIN_init: () => (/* binding */ servo_PIN_init),
+/* harmony export */ servo_get_angle: () => (/* binding */ servo_get_angle),
+/* harmony export */ servo_get_speed: () => (/* binding */ servo_get_speed),
+/* harmony export */ servo_init: () => (/* binding */ servo_init),
+/* harmony export */ servo_move: () => (/* binding */ servo_move),
+/* harmony export */ servo_move_angle: () => (/* binding */ servo_move_angle),
+/* harmony export */ servo_set_angle: () => (/* binding */ servo_set_angle),
+/* harmony export */ servo_set_speed: () => (/* binding */ servo_set_speed),
+/* harmony export */ servo_speed_360: () => (/* binding */ servo_speed_360),
+/* harmony export */ syn6288_builtin_voice: () => (/* binding */ syn6288_builtin_voice),
+/* harmony export */ syn6288_get_voice: () => (/* binding */ syn6288_get_voice),
+/* harmony export */ syn6288_set_voice: () => (/* binding */ syn6288_set_voice),
+/* harmony export */ syn6288_tts_play: () => (/* binding */ syn6288_tts_play)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+const ACTUATOR_EXTERN_HUE = '#74A55B';
+
+//music
+const esp32_music_pitch_init = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIDI)
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .setCheck("var");
+ this.appendValueInput("PIN", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_PIN_COUNT);
+ }
+};
+
+const esp32_music_pitch = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TONE)
+ this.appendValueInput('pitch')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);
+ }
+};
+
+const esp32_music_pitch_with_time = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TONE)
+ this.appendValueInput('pitch')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY);
+ this.appendValueInput('time')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DURATION);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE2);
+ }
+};
+
+const esp32_music_play_list = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ this.appendValueInput('LIST')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS);
+
+ }
+}
+
+const esp32_music_set_tempo_extern = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ this.appendValueInput('TICKS')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_SET_TEMPO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_ACTUATOR_ticks);
+ this.appendValueInput('BPM')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_SET_TEMPO);
+ }
+}
+
+const esp32_music_get_tempo_extern = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Get_current_tempo)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_GET_TEMPO);
+ }
+}
+
+const esp32_music_reset_extern = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Reset_music)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_RESET);
+ }
+}
+
+const esp32_music_stop = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NOTONE)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const actuator_extern_led_bright = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED)
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LED_SETONOFF);
+ }
+};
+
+const actuator_extern_get_led_bright = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED)
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LED_GETONOFF);
+ }
+};
+
+const actuator_extern_get_led_state = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED)
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LED_GETONOFF);
+ }
+};
+
+const actuator_extern_led_brightness = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED)
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS)
+ this.appendDummyInput()
+ .appendField('%')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LED_SETBRIGHT);
+ }
+};
+
+//Servo
+const servo_init = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput("VAR")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO)
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const servo_move = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendValueInput("DEGREE", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DEGREE_0_180);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SERVO_MOVE);
+ }
+};
+
+const servo_speed_360 = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput("VAR")
+ .appendField("360°" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO)
+ this.appendValueInput("SPEED", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_turtle_rotate + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED + " (-10~10)");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SERVO_360_TOOLTIP);
+ }
+};
+
+//Servo
+const servo_set_angle = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField('180°' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendValueInput("NUM", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SERVO_MOVE);
+ }
+};
+
+const servo_set_speed = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField('360°' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendValueInput("NUM", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED);
+ this.appendDummyInput()
+ .appendField('%');
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SERVO_SPEED_TOOLIPS);
+ }
+};
+
+const servo_get_angle = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField('180°' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const servo_get_speed = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField('360°' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const actuator_ms32006_init = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField("初始化")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField("电机驱动");
+ this.appendDummyInput()
+ .appendField("地址")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['A', 'ms32006.ADDRESS_A'], ['B', 'ms32006.ADDRESS_B']]), 'mode');
+ this.appendValueInput('SUB1')
+ .setCheck("var")
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField("通信");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip("初始化MS32006电机驱动,使用I2C通信");
+ }
+};
+
+const actuator_ms32006_dcmotor = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField("直流电机")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CLOCKWISE, "ms32006.MOT_CW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANTI_CLOCKWISE, "ms32006.MOT_CCW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_N, "ms32006.MOT_N"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_P, "ms32006.MOT_P"]
+ ]), "direction");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STEPPER_SET_SPEED);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip("设置直流电机的状态及转速(0-100)");
+ }
+};
+
+
+
+const actuator_ms32006_stepper = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField("步进电机")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField("选择")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['A', 'ms32006.MOT_A'], ['B', 'ms32006.MOT_B']]), 'mode');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CLOCKWISE, "ms32006.MOT_CW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANTI_CLOCKWISE, "ms32006.MOT_CCW"]
+ ]), "direction");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField("转速");
+ this.appendValueInput('steps')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField("步数");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip("设置步进电机的状态、转速、步数(0-2047)");
+ }
+};
+
+//rgb
+const actuator_neopixel_init = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .setCheck("var");
+ this.appendValueInput("PIN", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN);
+ this.appendValueInput("LEDCOUNT")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_COUNT);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_PIN_COUNT);
+ }
+};
+
+const actuator_neopixel_rgb = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ // .appendField(Blockly.Msg.MIXLY_SETUP)
+ this.appendValueInput("_LED_")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM);
+ this.appendValueInput("RVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_R);
+ this.appendValueInput("GVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_G);
+ this.appendValueInput("BVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_B);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B_MP);
+ }
+};
+
+const actuator_neopixel_rgb_all = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.appendValueInput("RVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_R);
+ this.appendValueInput("GVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_G);
+ this.appendValueInput("BVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_B);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_ALL_R_G_B_MIXGOCC);
+ }
+};
+
+const actuator_neopixel_write = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ // this.appendValueInput("PIN", Number)
+ // .setCheck(Number)
+ // .setAlign(Blockly.inputs.Align.RIGHT)
+ // .appendField(Blockly.Msg.MIXLY_PIN);
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_RGB_WRITE)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_WRI);
+ }
+};
+
+const actuator_use_uart_init = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "uart")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["uart1", "uart1"],
+ ["uart2", "uart2"]
+ ]), "key");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ['SYN6288' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_synthesis,'SYN6288'],
+ ['NS9300' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MUSIC_PLAYER,'NS9300']
+ ]),'key2');
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ }
+};
+
+const player_whether_stop ={
+ init:function(){
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MUSIC_PLAYER)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WHETHER)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STOPPED, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PLAYING, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PAUSED, "2"]
+ ]), "key");
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const player_set_play = {
+ init:function(){
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MUSIC_PLAYER)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STAT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP3_PLAY, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP3_PAUSE, "2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STOP, "3"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP3_PREV, "4"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP3_NEXT, "5"]
+ ]), "key");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const player_set_volume = {
+ init:function(){
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MUSIC_PLAYER)
+ .setCheck("var");
+ this.appendValueInput('volume')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP3_VOL +blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STAT);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PLAYER_SET_VOLUME_TOOLTIP);
+ }
+}
+
+const player_set_mode = {
+ init:function(){
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MUSIC_PLAYER)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STAT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP3_LOOP_ALL, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP3_LOOP_ONE, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PLAYER_DIRECTORY_LOOP, "2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP3_LOOP_RAM, "3"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PLAYER_SINGLE_STOP, "4"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PLAYER_SEQUENTIAL_PLAY, "5"]
+ ]), "key");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const player_play_music = {
+ init:function(){
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MUSIC_PLAYER)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_START_MELODY,"play"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PLAYER_INSERT_MUSIC, "insert"]
+ ]), "key");
+ this.appendValueInput('song');
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PLAYER_PLAY_MUSIC_TOOTIP)
+ }
+}
+
+const player_insert_music ={
+
+}
+
+const syn6288_set_voice = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField('SYN6288')
+ this.appendValueInput('VOICE')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SET_VOLUME);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SET_VOLUME_TOOLTIP);
+ }
+}
+
+const syn6288_get_voice = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField('SYN6288')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_VOLUME)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SET_VOLUME_TOOLTIP);
+ }
+}
+
+const syn6288_builtin_voice = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField('SYN6288')
+ this.appendValueInput('VOICE')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PLAY_HINTS);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PROGRAM_BLOCK)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, 'True'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, 'False']]), 'mode');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PLAY_HINTS_TOOLTIP);
+ }
+}
+
+const syn6288_tts_play = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField('SYN6288')
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_synthesis);
+ this.appendValueInput('VOICE')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BACKGROUND_MUSIC);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PROGRAM_BLOCK)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, 'True'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, 'False']]), 'mode');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PLAY_TTS_TOOLTIP);
+ }
+}
+
+
+//mixbot extern
+const mixbot_addr_extern = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.extern_addr), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const robot_motor_extern = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOTOR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED);
+ this.appendDummyInput()
+ .appendField('%')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_MOTOR_EXTERN_TOOLTIP);
+ }
+}
+
+const robot_motor_extern_get_speed = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOTOR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_traffic_light_extern = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TRAFFIC_LIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_off_display, '0'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TRAFFIC_LIGHT_RED_ON, '1'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TRAFFIC_LIGHT_RED_BLINK, '2'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TRAFFIC_LIGHT_YELLOW_ON, '3'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TRAFFIC_LIGHT_YELLOW_BLINK, '4'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TRAFFIC_LIGHT_GREEN_ON, '5'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TRAFFIC_LIGHT_GREEN_BLINK, '6']
+ ]), "light");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_led_extern = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_WHITE, 'W'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED, 'R'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_YELLOW, 'Y'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN, 'G'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_BLUE, 'B']
+ ]), "color")
+ .appendField("LED")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendValueInput('value')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.BRIGHTNESS);
+ this.appendDummyInput()
+ .appendField('%')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_led_extern_get_value = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_WHITE, 'W'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED, 'R'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_YELLOW, 'Y'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN, 'G'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_BLUE, 'B']
+ ]), "color")
+ .appendField("LED")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.BRIGHTNESS)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_servo_extern_get_status = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO_MOTOR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BLE_POWER, '[0]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED, '[1]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_SINGLE_OP_ABSOLUTE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, '[2]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RELATIVE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, '[3]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SERVO_BLOCK_OR_NOT, '[4]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SERVO_FINISH_OR_NOT, '[5]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL, '']
+ ]), "status");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_servo_extern_stop_mode = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO_MOTOR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SERVO_SET_STOP_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SERVO_STOP_MODE_KEEP, '0'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SERVO_STOP_MODE_COAST, '1'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SERVO_STOP_MODE_BRAKE, '2']
+ ]), "status");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_servo_extern_stop = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO_MOTOR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STOP)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_servo_extern_absolute_run = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO_MOTOR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_SINGLE_OP_ABSOLUTE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.run)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE, '0'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BLE_POWER + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE, '1']
+ ]), "status");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMS);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField('%')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SERVO_TURN_DIRECTION)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CLOCKWISE, '0'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SERVO_NEAREST_PATH, '1'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANTI_CLOCKWISE, '2']
+ ]), "direction");
+ this.appendValueInput('angle')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DISPLAY_MATRIX_ROTATE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SERVO_ABSOLUTE_ANGLE_TOOLTIP);
+ }
+}
+
+const robot_servo_extern_relative_origin = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO_MOTOR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RELATIVE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.run)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SERVO_RELATIVE_ORIGIN_PATH)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_servo_extern_relative_run = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO_MOTOR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RELATIVE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.run)
+ .appendField("(" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SERVO_LIKE_ENCODING_MOTOR + ")")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE, '0'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BLE_POWER + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE, '1']
+ ]), "status");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMS);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField('%')
+ this.appendValueInput('angle')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DISPLAY_MATRIX_ROTATE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SERVO_RELATIVE_ANGLE_TOOLTIP);
+ }
+}
+
+const robot_servo_extern_relative_continue = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO_MOTOR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RELATIVE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.run)
+ .appendField("(" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SERVO_LIKE_ORDINARY_MOTOR + ")")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE, '0'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BLE_POWER + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE, '1']
+ ]), "status");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMS);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField('%')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SERVO_TURN_DIRECTION)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CLOCKWISE, '0'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANTI_CLOCKWISE, '2']
+ ]), "direction");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const mixbot_actuator_extern_get_addr = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXBOT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOTOR, 'ext_motor'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TRAFFIC_LIGHT, 'ext_traffic'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_WHITE + "LED", 'W_LED'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED + "LED", 'R_LED'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_YELLOW + "LED", 'Y_LED'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN + "LED", 'G_LED'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_BLUE + "LED", 'B_LED'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO_MOTOR, 'ext_servo']
+ ]), "name")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_EXTERN_GET_ADDR)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+}
+
+const mixbot_actuator_extern_set_addr = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXBOT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOTOR, 'ext_motor'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TRAFFIC_LIGHT, 'ext_traffic'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_WHITE + "LED", 'W_LED'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED + "LED", 'R_LED'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_YELLOW + "LED", 'Y_LED'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN + "LED", 'G_LED'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_BLUE + "LED", 'B_LED'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO_MOTOR, 'ext_servo']
+ ]), "name")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_EXTERN_SET_ADDR)
+ this.appendValueInput('old')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE);
+ this.appendValueInput('new')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UPDATE);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+//educore
+const PIN_init = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput("PIN", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const pin_led_bright = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING);
+ this.appendValueInput('pin')
+ .appendField('LED')
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const servo_PIN_init = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput("PIN", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const servo_move_angle = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput("SUB")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO);
+ this.appendValueInput("angle")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DISPLAY_MATRIX_ROTATE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DRAW_POINTER_ANGLE)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const parrot_PIN_init = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput("PIN", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOTOR + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const parrot_move_speed = {
+ init: function () {
+ this.setColour(ACTUATOR_EXTERN_HUE);
+ this.appendValueInput("SUB")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOTOR);
+ this.appendValueInput("speed")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DISPLAY_MATRIX_ROTATE +blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+/***/ }),
+
+/***/ "../micropython/blocks/actuator_onboard.js":
+/*!*************************************************!*\
+ !*** ../micropython/blocks/actuator_onboard.js ***!
+ \*************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ actuator_dc_motor: () => (/* binding */ actuator_dc_motor),
+/* harmony export */ actuator_dc_motor_stop: () => (/* binding */ actuator_dc_motor_stop),
+/* harmony export */ actuator_get_led_bright: () => (/* binding */ actuator_get_led_bright),
+/* harmony export */ actuator_get_led_state: () => (/* binding */ actuator_get_led_state),
+/* harmony export */ actuator_led_bright: () => (/* binding */ actuator_led_bright),
+/* harmony export */ actuator_led_brightness: () => (/* binding */ actuator_led_brightness),
+/* harmony export */ actuator_mixbot_buzzer_on_off: () => (/* binding */ actuator_mixbot_buzzer_on_off),
+/* harmony export */ actuator_mixgo_nova_mic_get: () => (/* binding */ actuator_mixgo_nova_mic_get),
+/* harmony export */ actuator_mixgo_nova_mic_set: () => (/* binding */ actuator_mixgo_nova_mic_set),
+/* harmony export */ actuator_mixgo_nova_onboard_music_pitch: () => (/* binding */ actuator_mixgo_nova_onboard_music_pitch),
+/* harmony export */ actuator_mixgo_nova_onboard_music_stop: () => (/* binding */ actuator_mixgo_nova_onboard_music_stop),
+/* harmony export */ actuator_mixgo_nova_play_audio: () => (/* binding */ actuator_mixgo_nova_play_audio),
+/* harmony export */ actuator_mixgo_nova_play_online_audio: () => (/* binding */ actuator_mixgo_nova_play_online_audio),
+/* harmony export */ actuator_mixgo_nova_record_audio: () => (/* binding */ actuator_mixgo_nova_record_audio),
+/* harmony export */ actuator_mixgo_nova_voice_get: () => (/* binding */ actuator_mixgo_nova_voice_get),
+/* harmony export */ actuator_mixgo_nova_voice_set: () => (/* binding */ actuator_mixgo_nova_voice_set),
+/* harmony export */ actuator_mixgo_zero_led_color: () => (/* binding */ actuator_mixgo_zero_led_color),
+/* harmony export */ actuator_onboard_neopixel_rgb: () => (/* binding */ actuator_onboard_neopixel_rgb),
+/* harmony export */ actuator_onboard_neopixel_rgb_all: () => (/* binding */ actuator_onboard_neopixel_rgb_all),
+/* harmony export */ actuator_onboard_neopixel_rgb_show_all_chase: () => (/* binding */ actuator_onboard_neopixel_rgb_show_all_chase),
+/* harmony export */ actuator_onboard_neopixel_rgb_show_all_rainbow: () => (/* binding */ actuator_onboard_neopixel_rgb_show_all_rainbow),
+/* harmony export */ actuator_onboard_neopixel_write: () => (/* binding */ actuator_onboard_neopixel_write),
+/* harmony export */ actuator_rm_onboard_neopixel_rgb: () => (/* binding */ actuator_rm_onboard_neopixel_rgb),
+/* harmony export */ actuator_rm_onboard_neopixel_rgb_all: () => (/* binding */ actuator_rm_onboard_neopixel_rgb_all),
+/* harmony export */ actuator_rm_onboard_neopixel_rgb_show_all_chase: () => (/* binding */ actuator_rm_onboard_neopixel_rgb_show_all_chase),
+/* harmony export */ actuator_stepper_keep: () => (/* binding */ actuator_stepper_keep),
+/* harmony export */ actuator_stepper_stop: () => (/* binding */ actuator_stepper_stop),
+/* harmony export */ analog_ble_keyboard_init: () => (/* binding */ analog_ble_keyboard_init),
+/* harmony export */ analog_ble_keyboard_input: () => (/* binding */ analog_ble_keyboard_input),
+/* harmony export */ analog_ble_keyboard_mouse_init: () => (/* binding */ analog_ble_keyboard_mouse_init),
+/* harmony export */ analog_ble_keyboard_mouse_input: () => (/* binding */ analog_ble_keyboard_mouse_input),
+/* harmony export */ analog_ble_keyboard_mouse_send_battery: () => (/* binding */ analog_ble_keyboard_mouse_send_battery),
+/* harmony export */ analog_ble_keyboard_mouse_str: () => (/* binding */ analog_ble_keyboard_mouse_str),
+/* harmony export */ analog_ble_keyboard_send_battery: () => (/* binding */ analog_ble_keyboard_send_battery),
+/* harmony export */ analog_ble_keyboard_str: () => (/* binding */ analog_ble_keyboard_str),
+/* harmony export */ analog_ble_mouse_init: () => (/* binding */ analog_ble_mouse_init),
+/* harmony export */ analog_ble_mouse_input: () => (/* binding */ analog_ble_mouse_input),
+/* harmony export */ analog_ble_mouse_keyboard_input: () => (/* binding */ analog_ble_mouse_keyboard_input),
+/* harmony export */ analog_ble_mouse_send_battery: () => (/* binding */ analog_ble_mouse_send_battery),
+/* harmony export */ analog_keyboard_input: () => (/* binding */ analog_keyboard_input),
+/* harmony export */ analog_keyboard_str: () => (/* binding */ analog_keyboard_str),
+/* harmony export */ analog_mouse_input: () => (/* binding */ analog_mouse_input),
+/* harmony export */ bitbot_motor: () => (/* binding */ bitbot_motor),
+/* harmony export */ bitbot_move: () => (/* binding */ bitbot_move),
+/* harmony export */ bitbot_stop: () => (/* binding */ bitbot_stop),
+/* harmony export */ ble_keyboard_connect: () => (/* binding */ ble_keyboard_connect),
+/* harmony export */ ble_keyboard_get_mac: () => (/* binding */ ble_keyboard_get_mac),
+/* harmony export */ ble_keyboard_mouse_connect: () => (/* binding */ ble_keyboard_mouse_connect),
+/* harmony export */ ble_keyboard_mouse_get_mac: () => (/* binding */ ble_keyboard_mouse_get_mac),
+/* harmony export */ ble_mouse_connect: () => (/* binding */ ble_mouse_connect),
+/* harmony export */ ble_mouse_get_mac: () => (/* binding */ ble_mouse_get_mac),
+/* harmony export */ cc_number: () => (/* binding */ cc_number),
+/* harmony export */ educore_ble_keyboard_input: () => (/* binding */ educore_ble_keyboard_input),
+/* harmony export */ educore_ble_sensor_connected: () => (/* binding */ educore_ble_sensor_connected),
+/* harmony export */ educore_ble_sensor_init: () => (/* binding */ educore_ble_sensor_init),
+/* harmony export */ educore_buzzer: () => (/* binding */ educore_buzzer),
+/* harmony export */ educore_buzzer_play_tone: () => (/* binding */ educore_buzzer_play_tone),
+/* harmony export */ educore_buzzer_play_tone_time: () => (/* binding */ educore_buzzer_play_tone_time),
+/* harmony export */ educore_buzzer_stop: () => (/* binding */ educore_buzzer_stop),
+/* harmony export */ educore_neopixel_clear: () => (/* binding */ educore_neopixel_clear),
+/* harmony export */ educore_neopixel_rgb: () => (/* binding */ educore_neopixel_rgb),
+/* harmony export */ educore_rgb_light: () => (/* binding */ educore_rgb_light),
+/* harmony export */ esp32_music_get_tempo: () => (/* binding */ esp32_music_get_tempo),
+/* harmony export */ esp32_music_reset: () => (/* binding */ esp32_music_reset),
+/* harmony export */ esp32_music_set_tempo: () => (/* binding */ esp32_music_set_tempo),
+/* harmony export */ esp32_onboard_music_pitch: () => (/* binding */ esp32_onboard_music_pitch),
+/* harmony export */ esp32_onboard_music_pitch_with_time: () => (/* binding */ esp32_onboard_music_pitch_with_time),
+/* harmony export */ esp32_onboard_music_play_list: () => (/* binding */ esp32_onboard_music_play_list),
+/* harmony export */ esp32_onboard_music_stop: () => (/* binding */ esp32_onboard_music_stop),
+/* harmony export */ general_key: () => (/* binding */ general_key),
+/* harmony export */ general_key_tuple: () => (/* binding */ general_key_tuple),
+/* harmony export */ generalkey_container: () => (/* binding */ generalkey_container),
+/* harmony export */ generalkey_create_with_item: () => (/* binding */ generalkey_create_with_item),
+/* harmony export */ get_power_output: () => (/* binding */ get_power_output),
+/* harmony export */ ledswitch: () => (/* binding */ ledswitch),
+/* harmony export */ mixbot_motor: () => (/* binding */ mixbot_motor),
+/* harmony export */ mixbot_motor_status: () => (/* binding */ mixbot_motor_status),
+/* harmony export */ mixbot_move: () => (/* binding */ mixbot_move),
+/* harmony export */ mixbot_stop: () => (/* binding */ mixbot_stop),
+/* harmony export */ mouse_key: () => (/* binding */ mouse_key),
+/* harmony export */ number: () => (/* binding */ number),
+/* harmony export */ rm_actuator_get_led_bright: () => (/* binding */ rm_actuator_get_led_bright),
+/* harmony export */ rm_actuator_get_led_state: () => (/* binding */ rm_actuator_get_led_state),
+/* harmony export */ rm_actuator_led_bright: () => (/* binding */ rm_actuator_led_bright),
+/* harmony export */ rm_actuator_led_brightness: () => (/* binding */ rm_actuator_led_brightness),
+/* harmony export */ rm_motor: () => (/* binding */ rm_motor),
+/* harmony export */ set_all_power_output: () => (/* binding */ set_all_power_output),
+/* harmony export */ set_power_output: () => (/* binding */ set_power_output),
+/* harmony export */ special_key: () => (/* binding */ special_key)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+const ACTUATOR_ONBOARD_HUE = '#6C9858'
+
+//LED
+const number = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["L1", "1"],
+ ["L2", "2"]
+ ]), 'op')
+ this.setOutput(true);
+ }
+};
+
+const ledswitch = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ON, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_OFF, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TOGGLE, "-1"]
+ ]), "flag");
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
+ }
+};
+
+const actuator_led_bright = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING);
+ this.appendValueInput('led')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED)
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_SETONOFF);
+ }
+};
+
+const actuator_get_led_bright = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
+ this.appendValueInput('led')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_GETONOFF);
+ }
+};
+
+const actuator_get_led_state = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
+ this.appendValueInput('led')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_GETONOFF);
+ }
+};
+
+const actuator_led_brightness = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING);
+ this.appendValueInput('led')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED)
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS)
+ this.appendDummyInput("")
+ .appendField("%")
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS + '(0-100%)');
+ }
+};
+
+const actuator_mixgo_zero_led_color = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING);
+ this.appendValueInput('led')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_SETCOLOR)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIGHT_RED, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIGHT_GREEN, "2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIGHT_BLUE, "3"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIGHT_YELLOW, "4"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIGHT_CYAN, "5"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIGHT_PURPLE, "6"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIGHT_WHITE, "7"]
+ ]), 'colorvalue');
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip();
+ }
+};
+
+const rm_actuator_led_bright = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED, "r"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN, "g"]
+ ]), "color");
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_SETONOFF);
+ }
+};
+
+const rm_actuator_get_led_bright = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED, "r"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN, "g"]
+ ]), "color");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_GETONOFF);
+ }
+};
+
+const rm_actuator_get_led_state = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED, "r"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN, "g"]
+ ]), "color");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_GETONOFF);
+ }
+};
+
+const rm_actuator_led_brightness = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED, "r"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN, "g"]
+ ]), "color");
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS)
+ this.appendDummyInput("")
+ .appendField("%")
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS + '(0-10)');
+ }
+};
+
+const cc_number = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["L1", "20"],
+ ["L2", "21"]
+ ]), 'op')
+ this.setOutput(true);
+ }
+};
+
+const actuator_onboard_neopixel_rgb = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ this.appendValueInput("_LED_")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM);
+ this.appendValueInput("RVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_R);
+ this.appendValueInput("GVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_G);
+ this.appendValueInput("BVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_B);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ const boardKey = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey();
+ switch (boardKey) {
+ case 'micropython:esp32c3:mixgo_cc':
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOCC);
+ break;
+ case 'micropython:esp32s2:mixgo_ce':
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOCC);
+ break;
+ case 'micropython:esp32c3:mixgo_me':
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOME);
+ break;
+ case 'micropython:esp32:mPython':
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B_MPYTHON);
+ break;
+ default:
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOME);
+ }
+ }
+};
+
+const actuator_onboard_neopixel_rgb_all = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ this.appendValueInput("RVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_R);
+ this.appendValueInput("GVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_G);
+ this.appendValueInput("BVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_B);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_ALL_R_G_B_MIXGOCC);
+ }
+};
+
+const actuator_onboard_neopixel_rgb_show_all_rainbow = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RAINBOW);
+ this.appendValueInput('time')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DURATION)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MILLIS);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ }
+};
+
+
+const actuator_onboard_neopixel_rgb_show_all_chase = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHASE);
+ this.appendValueInput("RVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_R);
+ this.appendValueInput("GVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_G);
+ this.appendValueInput("BVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_B);
+ this.appendValueInput('time')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PYTHON_RANGE_STEP)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MILLIS);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ }
+};
+
+const actuator_onboard_neopixel_write = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_RGB_WRITE)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_WRI);
+ }
+};
+
+
+const actuator_rm_onboard_neopixel_rgb = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ this.appendValueInput("_LED_")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM);
+ this.appendValueInput("RVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_R);
+ this.appendValueInput("GVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_G);
+ this.appendValueInput("BVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_B);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ const boardKey = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey();
+ switch (boardKey) {
+ case 'micropython:esp32c3:mixgocc':
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOCC);
+ break;
+ case 'micropython:esp32c3:mixgome':
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOME);
+ break;
+ case 'micropython:esp32:mPython':
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B_MPYTHON);
+ break;
+ default:
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOME);
+ }
+ }
+};
+
+const actuator_rm_onboard_neopixel_rgb_all = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ this.appendValueInput("RVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_R);
+ this.appendValueInput("GVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_G);
+ this.appendValueInput("BVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_B);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_ALL_R_G_B_MIXGOCC);
+ }
+};
+
+
+
+const actuator_rm_onboard_neopixel_rgb_show_all_chase = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHASE);
+ this.appendValueInput("RVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_R);
+ this.appendValueInput("GVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_G);
+ this.appendValueInput("BVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_B);
+ this.appendValueInput('time')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PYTHON_RANGE_STEP)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MILLIS);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ }
+};
+
+
+const esp32_music_set_tempo = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput('TICKS')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_SET_TEMPO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_ACTUATOR_ticks);
+ this.appendValueInput('BPM')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_SET_TEMPO);
+ }
+}
+
+const esp32_music_get_tempo = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Get_current_tempo)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_GET_TEMPO);
+ }
+}
+
+const esp32_music_reset = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Reset_music)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_RESET);
+ }
+}
+
+const esp32_onboard_music_pitch = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TONE);
+ this.appendValueInput('pitch')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);
+ }
+};
+
+const esp32_onboard_music_pitch_with_time = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TONE);
+ this.appendValueInput('pitch')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY);
+ this.appendValueInput('time')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DURATION);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE2);
+ }
+};
+
+const esp32_onboard_music_stop = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NOTONE);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const esp32_onboard_music_play_list = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput('LIST')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS);
+
+ }
+}
+
+const rm_motor = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_DC)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ['1', "1"],
+ ["2", "2"],
+ ["3", "3"]
+ ]), "wheel");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CLOCKWISE, "CW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANTI_CLOCKWISE, "CCW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_P, "P"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_N, "N"]
+ ]), "direction");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STEPPER_SET_SPEED);
+ this.appendDummyInput("")
+ .appendField("%")
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+//c3 motor onboard
+
+const actuator_stepper_keep = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField("MixGo Car")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_forward, "F"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_backward, "B"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_left, "L"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_right, "R"]
+ ]), "VAR");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STEPPER_SET_SPEED);
+ this.appendDummyInput()
+ .appendField('%')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const actuator_stepper_stop = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField("MixGo Car")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_P, "P"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_N, "N"]
+ ]), "VAR");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ }
+};
+
+const actuator_dc_motor = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_DC)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLYCAR_WHEEL_LEFT, "L"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLYCAR_WHEEL_RIGHT, "R"]
+ ]), "wheel");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CLOCKWISE, "CW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANTI_CLOCKWISE, "CCW"]
+ ]), "direction");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STEPPER_SET_SPEED);
+ this.appendDummyInput()
+ .appendField('%')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const actuator_dc_motor_stop = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_DC)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLYCAR_WHEEL_LEFT, "L"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLYCAR_WHEEL_RIGHT, "R"]
+ ]), "wheel");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STOP)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_P, "P"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_N, "N"]
+ ]), "direction");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+//mixbot onboard_motor below:
+
+const mixbot_motor_status = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_MOTOR_STATUS);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_MOTOR_STATUS_TOOLTIP);
+ }
+};
+
+const mixbot_move = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXBOT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_forward, "F"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_backward, "B"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_left, "L"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_right, "R"]
+ ]), "VAR");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BLE_POWER, "PWR"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED, "SPEED"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_MOTOR_TURNS, "TURNS"]
+ ]), "mode");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMS);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_MOVE_TOOLTIP);
+ }
+}
+
+const mixbot_stop = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXBOT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_P, "P"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_N, "N"]
+ ]), "VAR");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const mixbot_motor = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXBOT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOTOR)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_BOTH, "0"]
+ ]), "wheel");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BLE_POWER, "PWR"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED, "SPEED"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_MOTOR_TURNS, "TURNS"]
+ ]), "mode");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMS);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_MOVE_TOOLTIP);
+ }
+}
+
+const actuator_mixbot_buzzer_on_off = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_BUZZER);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_ON, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_OFF, "1"]
+ ]), 'on_off')
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+//bitbot onboard_motor below:
+const bitbot_move = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.BITBOT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_forward, "F"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_backward, "B"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_left, "L"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_right, "R"]
+ ]), "VAR");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED);
+ this.appendDummyInput("")
+ .appendField("%")
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const bitbot_stop = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.BITBOT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_P, "P"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_N, "N"]
+ ]), "VAR");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const bitbot_motor = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.BITBOT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOTOR)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "1"]
+ ]), "wheel");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CLOCKWISE, "CW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANTI_CLOCKWISE, "CCW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_P, "P"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_N, "N"]
+ ]), "direction");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED);
+ this.appendDummyInput("")
+ .appendField("%")
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const actuator_mixgo_nova_mic_set = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SOUND_SET_LOUDNESS)
+ this.appendDummyInput()
+ .appendField('%');
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_SETONOFF);
+ }
+};
+
+const actuator_mixgo_nova_mic_get = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SOUND_LOUDNESS + '(%)');
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_GETONOFF);
+ }
+};
+
+const actuator_mixgo_nova_voice_set = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_BUZZER + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP3_VOL)
+ this.appendDummyInput()
+ .appendField('%');
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_SETONOFF);
+ }
+};
+
+const actuator_mixgo_nova_voice_get = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_BUZZER + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP3_VOL + '(%)');
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_GETONOFF);
+ }
+};
+
+
+
+const actuator_mixgo_nova_record_audio = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput('PATH')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RECORD_AUDIO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH);
+ this.appendValueInput('TIME')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES_TIME);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+const actuator_mixgo_nova_play_audio = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput('PATH')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PLAY_AUDIO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+const actuator_mixgo_nova_play_online_audio = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput('PATH')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PLAY_ONLINE_AUDIO)
+ .appendField('URL');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+const actuator_mixgo_nova_onboard_music_pitch = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TONE);
+ this.appendValueInput('pitch')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);
+ }
+};
+
+const actuator_mixgo_nova_onboard_music_stop = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NOTONE);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const set_power_output = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["1", "1"], ["2", "2"], ["3", "3"]]), "index");
+ this.appendValueInput('duty')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blynk_IOT_IR_POWER + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PINMODEOUT);
+ this.appendDummyInput()
+ .appendField('%')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip();
+ }
+}
+
+const get_power_output = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["1", "1"], ["2", "2"]]), "index");
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blynk_IOT_IR_POWER + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PINMODEOUT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DUTY_RATIO);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+}
+
+const set_all_power_output = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING);
+ this.appendValueInput('duty')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.ALIGN_RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blynk_IOT_IR_POWER + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PINMODEOUT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY);
+ this.appendDummyInput()
+ .appendField('Hz')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_MOTOR_EXTERN_TOOLTIP);
+ }
+}
+
+const analog_keyboard_input = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD_INPUT);
+ this.appendValueInput('special');
+ this.appendValueInput('general');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RELEASE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_YES, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_NO, "False"]
+ ]), 'release');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD_INPUT);
+ }
+};
+
+const special_key = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPECIAL_KEY)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPECIAL_KEY0, "0x00"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPECIAL_KEY1, "0x01"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPECIAL_KEY2, "0x02"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPECIAL_KEY1, "0x04"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPECIAL_KEY8, "0x08"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPECIAL_KEY16, "0x10"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPECIAL_KEY32, "0x20"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPECIAL_KEY64, "0x40"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPECIAL_KEY128, "0x80"]
+ ]), 'op')
+ this.setOutput(true);
+ }
+};
+
+const general_key = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GENERAL_KEY)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPECIAL_KEY0, "0x00"],
+ ['A', "0x04"],
+ ['B', "0x05"],
+ ['C', "0x06"],
+ ['D', "0x07"],
+ ['E', "0x08"],
+ ['F', "0x09"],
+ ['G', "0x0A"],
+ ['H', "0x0B"],
+ ['I', "0x0C"],
+ ['J', "0x0D"],
+ ['K', "0x0E"],
+ ['L', "0x0F"],
+ ['M', "0x10"],
+ ['N', "0x11"],
+ ['O', "0x12"],
+ ['P', "0x13"],
+ ['Q', "0x14"],
+ ['R', "0x15"],
+ ['S', "0x16"],
+ ['T', "0x17"],
+ ['U', "0x18"],
+ ['V', "0x19"],
+ ['W', "0x1A"],
+ ['X', "0x1B"],
+ ['Y', "0x1C"],
+ ['Z', "0x1D"],
+ ['1 !', "0x1E"],
+ ['2 @', "0x1F"],
+ ['3 #', "0x20"],
+ ['4 $', "0x21"],
+ ['5 %', "0x22"],
+ ['6 ^', "0x23"],
+ ['7 &', "0x24"],
+ ['8 *', "0x25"],
+ ['9 (', "0x26"],
+ ['0 )', "0x27"],
+ ['ENTER', "0x28"],
+ ['ESC', "0x29"],
+ ['BACKSPACE', "0x2A"],
+ ['TAB', "0x2B"],
+ ['SPACE', "0x2C"],
+ ['- _', "0x2D"],
+ ['= +', "0x2E"],
+ ['[ {', "0x2F"],
+ ['] }', "0x30"],
+ ['\\ |', "0x31"],
+ ['; :', "0x33"],
+ ["' " + ' "', "0x34"],
+ ['` ~', "0x35"],
+ [', <', "0x36"],
+ ['. >', "0x37"],
+ ['/ ?', "0x38"],
+ ['CAPS_LOCK', "0x39"],
+ ['F1', "0x3A"],
+ ['F2', "0x3B"],
+ ['F3', "0x3C"],
+ ['F4', "0x3D"],
+ ['F5', "0x3E"],
+ ['F6', "0x3F"],
+ ['F7', "0x40"],
+ ['F8', "0x41"],
+ ['F9', "0x42"],
+ ['F10', "0x43"],
+ ['F11', "0x44"],
+ ['F12', "0x45"],
+ ['PRINTSCREEN', "0x46"],
+ ['SCROLL_LOCK', "0x47"],
+ ['PAUSE', "0x48"],
+ ['INSERT', "0x49"],
+ ['HOME', "0x4A"],
+ ['PAGE_UP', "0x4B"],
+ ['DELETE', "0x4C"],
+ ['END', "0x4D"],
+ ['PAGE_DOWN', "0x4E"],
+ ['RIGHT', "0x4F"],
+ ['LEFT', "0x50"],
+ ['DOWN', "0x51"],
+ ['UP', "0x52"],
+ ['NUM_LOCK', "0x53"],
+ ['/', "0x54"],
+ ['*', "0x55"],
+ ['-', "0x56"],
+ ['+', "0x57"],
+ ['ENTER', "0x58"],
+ ['1', "0x59"],
+ ['2', "0x5A"],
+ ['3', "0x5B"],
+ ['4', "0x5C"],
+ ['5', "0x5D"],
+ ['6', "0x5E"],
+ ['7', "0x5F"],
+ ['8', "0x60"],
+ ['9', "0x61"],
+ ['0', "0x62"],
+ ['.', "0x63"]
+ ]), 'op')
+ this.setOutput(true);
+ }
+};
+
+
+const general_key_tuple = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.itemCount_ = 2;
+ this.updateShape_();
+ this.setOutput(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['generalkey_create_with_item'], this));
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.GENERALKEY_TUPLE_CREATE_TOOLTIP);
+ },
+
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+ /**
+ * Parse XML to restore the list inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('generalkey_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('generalkey_create_with_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @private
+ * @this Blockly.Block
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ var i = 0;
+ while (this.getInput('ADD' + i)) {
+ this.removeInput('ADD' + i);
+ i++;
+ }
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.appendDummyInput('EMPTY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.GENERALKEY_CREATE_EMPTY_TITLE);
+ } else {
+ for (var i = 0; i < this.itemCount_; i++) {
+ var input = this.appendValueInput('ADD' + i);
+ if (i == 0) {
+ input.appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.GENERALKEY_CREATE_WITH_INPUT_WITH);
+ }
+ }
+ }
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+};
+
+const generalkey_container = {
+ /**
+ * Mutator block for list container.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GENERAL_KEY);
+ this.appendStatementInput('STACK');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.GENERALKEY_CONTAINER_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const generalkey_create_with_item = {
+ /**
+ * Mutator bolck for adding items.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_VARIABLES_NAME);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_CREATE_WITH_ITEM_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const analog_mouse_input = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOUSE_INPUT);
+ this.appendValueInput('key');
+ this.appendValueInput('x')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_X_CHANGES);
+ this.appendValueInput('y')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Y_CHANGES);
+ this.appendValueInput('wheel')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WHEEL_CHANGES);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RELEASE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_YES, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_NO, "False"]
+ ]), 'release');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD_INPUT);
+ }
+};
+
+const mouse_key = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOUSE_KEYS)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPECIAL_KEY0, "0x00"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOUSE_LEFT_KEY, "0x01"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOUSE_RIGHT_KEY, "0x02"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOUSE_MID_KEY, "0x04"]
+ ]), 'op')
+ this.setOutput(true);
+ }
+};
+
+const analog_keyboard_str = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD_INPUT);
+ this.appendValueInput('str')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STR_PRINT);
+ this.appendValueInput('time')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STR_PRINT_TIME_DELAY);
+ this.appendDummyInput()
+ .appendField('ms');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+const analog_ble_keyboard_init = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD);
+ this.appendValueInput('kname')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_SYSTEM_DEVICE_NAME);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+const ble_keyboard_get_mac = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ETHERNET_MAC_ADDRESS);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+}
+
+const ble_keyboard_connect = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IS_CONNECT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+}
+
+const analog_ble_keyboard_input = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SEND_KEYBOARD);
+ this.appendValueInput('special');
+ this.appendValueInput('general');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RELEASE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_YES, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_NO, "False"]
+ ]), 'release');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD_INPUT);
+ }
+};
+
+const analog_ble_keyboard_str = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD);
+ this.appendValueInput('str')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SEND_KEYBOARD + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STR_PRINT);
+ this.appendValueInput('time')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STR_PRINT_TIME_DELAY);
+ this.appendDummyInput()
+ .appendField('ms');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+const analog_ble_keyboard_send_battery = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD);
+ this.appendValueInput('battery')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SEND_KEYBOARD + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BATTERY + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO);
+ this.appendDummyInput()
+ .appendField('%');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+const analog_ble_mouse_init = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOUSE);
+ this.appendValueInput('name')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_SYSTEM_DEVICE_NAME);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+const ble_mouse_get_mac = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOUSE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ETHERNET_MAC_ADDRESS);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+}
+
+const ble_mouse_connect = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOUSE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IS_CONNECT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+}
+
+const analog_ble_mouse_input = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOUSE)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SEND + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOUSE_INPUT);
+ this.appendValueInput('key');
+ this.appendValueInput('x')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_X_CHANGES);
+ this.appendValueInput('y')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Y_CHANGES);
+ this.appendValueInput('wheel')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WHEEL_CHANGES);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RELEASE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_YES, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_NO, "False"]
+ ]), 'release');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD_INPUT);
+ }
+};
+
+const analog_ble_mouse_send_battery = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOUSE);
+ this.appendValueInput('battery')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SEND + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOUSE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BATTERY + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO);
+ this.appendDummyInput()
+ .appendField('%');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+const analog_ble_keyboard_mouse_init = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD_AND_MOUSE);
+ this.appendValueInput('kname')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_SYSTEM_DEVICE_NAME);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+const ble_keyboard_mouse_get_mac = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD_AND_MOUSE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ETHERNET_MAC_ADDRESS);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+}
+
+const ble_keyboard_mouse_connect = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD_AND_MOUSE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IS_CONNECT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+}
+
+const analog_ble_keyboard_mouse_send_battery = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD_AND_MOUSE);
+ this.appendValueInput('battery')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BATTERY + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO);
+ this.appendDummyInput()
+ .appendField('%');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+const analog_ble_keyboard_mouse_input = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD_AND_MOUSE)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SEND_KEYBOARD);
+ this.appendValueInput('special');
+ this.appendValueInput('general');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RELEASE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_YES, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_NO, "False"]
+ ]), 'release');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD_INPUT);
+ }
+};
+
+const analog_ble_keyboard_mouse_str = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD_AND_MOUSE);
+ this.appendValueInput('str')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SEND_KEYBOARD + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STR_PRINT);
+ this.appendValueInput('time')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STR_PRINT_TIME_DELAY);
+ this.appendDummyInput()
+ .appendField('ms');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+const analog_ble_mouse_keyboard_input = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD_AND_MOUSE)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SEND + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOUSE_INPUT);
+ this.appendValueInput('key');
+ this.appendValueInput('x')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_X_CHANGES);
+ this.appendValueInput('y')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Y_CHANGES);
+ this.appendValueInput('wheel')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WHEEL_CHANGES);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RELEASE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_YES, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_NO, "False"]
+ ]), 'release');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOUSE_INPUT);
+ }
+};
+//educore actuator
+const educore_buzzer = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIDI);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+}
+
+const educore_buzzer_play_tone = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput("buzzer");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TONE);
+ this.appendValueInput('pitch')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const educore_buzzer_play_tone_time = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput("buzzer");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TONE);
+ this.appendValueInput('pitch')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY);
+ this.appendValueInput('time')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DURATION);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const educore_buzzer_stop = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput("buzzer")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_off_display);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const educore_rgb_light = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+}
+
+const educore_neopixel_rgb = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput("rgb");
+ this.appendValueInput("_LED_")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM);
+ this.appendValueInput("RVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_R);
+ this.appendValueInput("GVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_G);
+ this.appendValueInput("BVALUE")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_B);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ // const boardKey = Boards.getSelectedBoardKey();
+ // switch (boardKey) {
+ // case 'micropython:esp32c3:mixgo_cc':
+ // this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOCC);
+ // break;
+ // case 'micropython:esp32s2:mixgo_ce':
+ // this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOCC);
+ // break;
+ // case 'micropython:esp32c3:mixgo_me':
+ // this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOME);
+ // break;
+ // case 'micropython:esp32:mPython':
+ // this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MPYTHON);
+ // break;
+ // default:
+ // this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOME);
+ // }
+ }
+};
+
+const educore_neopixel_clear = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput("rgb");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_off_display)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ }
+};
+
+const educore_ble_sensor_init = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput("name")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_SYSTEM_DEVICE_NAME + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_AS);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const educore_ble_sensor_connected = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput("SUB")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BE_CONNETCED)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const educore_ble_keyboard_input = {
+ init: function () {
+ this.setColour(ACTUATOR_ONBOARD_HUE);
+ this.appendValueInput("SUB")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KEYBOARD);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SEND_KEYBOARD);
+ this.appendValueInput('general');
+ // this.appendDummyInput()
+ // .appendField(Blockly.Msg.MIXLY_RELEASE)
+ // .appendField(new Blockly.FieldDropdown([
+ // [Blockly.Msg.MICROPYTHON_DISPLAY_YES, "True"],
+ // [Blockly.Msg.MICROPYTHON_DISPLAY_NO, "False"]
+ // ]), 'release');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+/***/ }),
+
+/***/ "../micropython/blocks/ai.js":
+/*!***********************************!*\
+ !*** ../micropython/blocks/ai.js ***!
+ \***********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ MICROPYTHON_AI_Speech_asr: () => (/* binding */ MICROPYTHON_AI_Speech_asr),
+/* harmony export */ MICROPYTHON_AI_Speech_unit: () => (/* binding */ MICROPYTHON_AI_Speech_unit),
+/* harmony export */ MICROPYTHON_AI_client: () => (/* binding */ MICROPYTHON_AI_client)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const AI_HUE = 205;
+
+const MICROPYTHON_AI_client = {
+ init: function () {
+ this.setColour(AI_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_asr, "ASR"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_UNIT, "UNIT"]
+ ]), 'CTYPE')
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Client)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput('API_KEY')
+ .appendField('API_KEY')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput('SECRET_KEY')
+ .appendField('SECRET_KEY')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.setInputsInline(false);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ }
+};
+
+const MICROPYTHON_AI_Speech_unit = { // AI_TYPE_FUNC
+ init: function () {
+ this.setColour(AI_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_UNIT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Client)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput('ID')
+ .appendField('ID')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput('STR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_STRING)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const MICROPYTHON_AI_Speech_asr = { // AI_TYPE_FUNC
+ init: function () {
+ this.setColour(AI_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_asr)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Client)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput('FILE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_AI_AUDIO_TIME)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LANGUAGE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_LANGUAGE_CHINESE, "1537"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_LANGUAGE_ENGLISH, "1737"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_LANGUAGE_CANTONESE, "1637"]
+ ]), 'LANGUAGE')
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+
+
+/***/ }),
+
+/***/ "../micropython/blocks/ai_sensor.js":
+/*!******************************************!*\
+ !*** ../micropython/blocks/ai_sensor.js ***!
+ \******************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ ai_sensor_20object: () => (/* binding */ ai_sensor_20object),
+/* harmony export */ ai_sensor_ailocal_class: () => (/* binding */ ai_sensor_ailocal_class),
+/* harmony export */ ai_sensor_ailocal_class_result: () => (/* binding */ ai_sensor_ailocal_class_result),
+/* harmony export */ ai_sensor_ailocal_train: () => (/* binding */ ai_sensor_ailocal_train),
+/* harmony export */ ai_sensor_asr_recognize: () => (/* binding */ ai_sensor_asr_recognize),
+/* harmony export */ ai_sensor_audio_play: () => (/* binding */ ai_sensor_audio_play),
+/* harmony export */ ai_sensor_audio_record: () => (/* binding */ ai_sensor_audio_record),
+/* harmony export */ ai_sensor_barcode: () => (/* binding */ ai_sensor_barcode),
+/* harmony export */ ai_sensor_circle: () => (/* binding */ ai_sensor_circle),
+/* harmony export */ ai_sensor_classifier_faces: () => (/* binding */ ai_sensor_classifier_faces),
+/* harmony export */ ai_sensor_color: () => (/* binding */ ai_sensor_color),
+/* harmony export */ ai_sensor_color_chases: () => (/* binding */ ai_sensor_color_chases),
+/* harmony export */ ai_sensor_color_chases_result: () => (/* binding */ ai_sensor_color_chases_result),
+/* harmony export */ ai_sensor_config: () => (/* binding */ ai_sensor_config),
+/* harmony export */ ai_sensor_face: () => (/* binding */ ai_sensor_face),
+/* harmony export */ ai_sensor_find_20objects: () => (/* binding */ ai_sensor_find_20objects),
+/* harmony export */ ai_sensor_find_barcodes: () => (/* binding */ ai_sensor_find_barcodes),
+/* harmony export */ ai_sensor_find_circles: () => (/* binding */ ai_sensor_find_circles),
+/* harmony export */ ai_sensor_find_colors: () => (/* binding */ ai_sensor_find_colors),
+/* harmony export */ ai_sensor_find_licenseplates: () => (/* binding */ ai_sensor_find_licenseplates),
+/* harmony export */ ai_sensor_find_lines: () => (/* binding */ ai_sensor_find_lines),
+/* harmony export */ ai_sensor_find_qrcodes: () => (/* binding */ ai_sensor_find_qrcodes),
+/* harmony export */ ai_sensor_find_rects: () => (/* binding */ ai_sensor_find_rects),
+/* harmony export */ ai_sensor_find_tags: () => (/* binding */ ai_sensor_find_tags),
+/* harmony export */ ai_sensor_licenseplate: () => (/* binding */ ai_sensor_licenseplate),
+/* harmony export */ ai_sensor_line: () => (/* binding */ ai_sensor_line),
+/* harmony export */ ai_sensor_qrcode: () => (/* binding */ ai_sensor_qrcode),
+/* harmony export */ ai_sensor_qrcode_lite: () => (/* binding */ ai_sensor_qrcode_lite),
+/* harmony export */ ai_sensor_rect: () => (/* binding */ ai_sensor_rect),
+/* harmony export */ ai_sensor_rgb: () => (/* binding */ ai_sensor_rgb),
+/* harmony export */ ai_sensor_tag: () => (/* binding */ ai_sensor_tag),
+/* harmony export */ ai_sensor_use_uart_init: () => (/* binding */ ai_sensor_use_uart_init),
+/* harmony export */ ai_sensor_yolo_recognize: () => (/* binding */ ai_sensor_yolo_recognize),
+/* harmony export */ ai_sensor_yolo_recognize_result: () => (/* binding */ ai_sensor_yolo_recognize_result)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const AI_SENSOR_HUE = '#90A244'; //'#9e77c9'//40;
+
+
+const ai_sensor_use_uart_init = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "uart")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["uart1", "uart1"],
+ ["uart2", "uart2"]
+ ]), "key");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO + 'MixGo AI' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor)
+
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ }
+};
+
+const ai_sensor_qrcode = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_QR_CODE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL_CODE_ANALYSIS);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_STRING, "info1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
+ ["x" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[0]"],
+ ["y" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[1]"],
+ ["w" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[2]"],
+ ["h" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "xc"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "yc"]
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_QR_CODE_TOOLTIP);
+ }
+};
+
+const ai_sensor_qrcode_lite = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_QR_CODE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT, "qrcode"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BAR_CODE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT, "barcode"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TAG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT, "apriltag"]
+ ]), "TYPE");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ANALYSIS_RESULT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip();
+ }
+};
+
+const ai_sensor_find_qrcodes = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_QR_CODE_RECOGNTITION);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + "[qrcode]");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_QR_CODE_RECOGNTITION_TOOLTIP);
+ }
+};
+
+const ai_sensor_config = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendValueInput("RX")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ETHERNET_CLINET_PORT)
+ .appendField("RX#")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("TX")
+ .appendField("TX#")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.SOFT_RESET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_RGB_WRITE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, 'True'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, 'False']]), 'mode')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_CONFIG_TOOLTIP);
+ }
+};
+
+const ai_sensor_rgb = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendValueInput("led1")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING)
+ .appendField("RGB1")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("led2")
+ .appendField("RGB2")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_CONFIG_TOOLTIP);
+ }
+};
+
+const ai_sensor_barcode = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BAR_CODE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL_CODE_ANALYSIS);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_STRING, "info1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
+ ["x" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[0]"],
+ ["y" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[1]"],
+ ["w" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[2]"],
+ ["h" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "xc"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "yc"]
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_BAR_CODE_TOOLTIP);
+ }
+};
+
+const ai_sensor_find_barcodes = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BAR_CODE_RECOGNTITION);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + "[barcode]");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_BAR_CODE_RECOGNTITION_TOOLTIP);
+ }
+};
+
+const ai_sensor_tag = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TAG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL_CODE_ANALYSIS);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_STRING, "info1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_turtle_rotate + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, "info2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
+ ["x" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[0]"],
+ ["y" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[1]"],
+ ["w" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[2]"],
+ ["h" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "xc"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "yc"]
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_TAG_TOOLTIP);
+ }
+};
+
+const ai_sensor_find_tags = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TAG_RECOGNTITION);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + "[tag]");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_TAG_RECOGNTITION_TOOLTIP);
+ }
+};
+
+const ai_sensor_line = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LINE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL_CODE_ANALYSIS);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LINE_ANGLE, "info1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY + "-x1x2y1y2", "rect"],
+ ["x1" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[0]"],
+ ["x2" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[1]"],
+ ["y1" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[2]"],
+ ["y2" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[3]"]
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_LINE_TOOLTIP);
+ }
+};
+
+const ai_sensor_find_lines = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LINE_RECOGNTITION);
+ this.appendValueInput("VAR1")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_THRESHOLD)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR2")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LINE_RECOGNTITION_ANGLE)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR3")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LINE_RECOGNTITION_SLOPE)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + "[line]");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_LINE_RECOGNTITION_TOOLTIP);
+ }
+};
+
+const ai_sensor_circle = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CIRCLE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL_CODE_ANALYSIS);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CIRCLE_AREA, "info1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
+ ["x" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[0]"],
+ ["y" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[1]"],
+ ["w" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[2]"],
+ ["h" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "xc"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "yc"]
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_CIRCLE_TOOLTIP);
+ }
+};
+
+const ai_sensor_find_circles = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CIRCLE_RECOGNTITION);
+ this.appendValueInput("VAR1")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_THRESHOLD)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR2")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CIRCLE_RECOGNTITION_MIN)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR3")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CIRCLE_RECOGNTITION_MAX)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + "[circle]");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_CIRCLE_RECOGNTITION_TOOLTIP);
+ }
+};
+
+const ai_sensor_rect = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RECT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL_CODE_ANALYSIS);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CIRCLE_AREA, "info1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
+ ["x" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[0]"],
+ ["y" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[1]"],
+ ["w" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[2]"],
+ ["h" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "xc"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "yc"]
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_RECT_TOOLTIP);
+ }
+};
+
+const ai_sensor_find_rects = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RECT_RECOGNTITION);
+ this.appendValueInput("VAR1")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_THRESHOLD)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + "[rect]");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_COLOR_RECOGNTITION_TOOLTIP);
+ }
+};
+
+const ai_sensor_color = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COLOR_ANALYSIS);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ['RGB' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR, "[0]"],
+ ['LAB' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COLOR_LAB, "[1]"]
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_COLOR_TOOLTIP);
+ }
+};
+
+const ai_sensor_find_colors = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COLOR_RECOGNTITION);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + "color");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_COLOR_RECOGNTITION_TOOLTIP);
+ }
+};
+
+const ai_sensor_color_chases_result = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COLOR_CHASE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COLOR_CHASE_ANALYSIS);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CIRCLE_AREA, "info1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
+ ["x" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[0]"],
+ ["y" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[1]"],
+ ["w" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[2]"],
+ ["h" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "xc"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "yc"]
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_CIRCLE_TOOLTIP);
+ }
+};
+
+const ai_sensor_color_chases = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COLOR_CHASE);
+ this.appendValueInput("VAR1")
+ .appendField('LAB' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COLOR_LAB)
+
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR2")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_THRESHOLD)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR3")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COLOR_CHASE_MERGE)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + "[colors]");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_CIRCLE_RECOGNTITION_TOOLTIP);
+ }
+};
+
+const ai_sensor_ailocal_train = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LOCAL_TRAIN);
+ this.appendValueInput("VAR1")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OBJECT_LIST)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR2")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_SAVE_AS + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODEL_NAME)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR3")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TRAIN_TIME)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR4")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipNlp_Topic_Title)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_LOCAL_TRAIN_TOOLTIP);
+ }
+};
+
+const ai_sensor_ailocal_class = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LOCAL_CLASS);
+ this.appendValueInput("VAR1")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OBJECT_LIST)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR2")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODEL_NAME)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR4")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipNlp_Topic_Title)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + "[objects]");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_MODEL_NAME_TOOLTIP);
+ }
+};
+
+const ai_sensor_ailocal_class_result = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LOCAL_CLASS + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COLOR_CHASE_ANALYSIS);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ['ID', "info1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CONFIDENCE_DEGREE, "info2"],
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_LOCAL_CLASS_TOOLTIP);
+ }
+};
+
+const ai_sensor_audio_record = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MUSIC_RECORD);
+ this.appendValueInput("VAR1")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR2")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_AI_AUDIO_TIME)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_MUSIC_RECORD_TOOLTIP);
+ }
+};
+
+const ai_sensor_audio_play = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MUSIC_PLAY);
+ this.appendValueInput("VAR1")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR2")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP3_VOL)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendDummyInput()
+ .appendField('%')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+
+ }
+};
+
+const ai_sensor_yolo_recognize = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_YOLO_RECOGNIZE);
+ this.appendValueInput("VAR1")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ANCHOR)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR2")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODEL_PATH)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR4")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipNlp_Topic_Title)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + "[objects]");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_YOLO_RECOGNIZE_TOOLTIP);
+ }
+};
+
+const ai_sensor_yolo_recognize_result = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_YOLO_RECOGNIZE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COLOR_CHASE_ANALYSIS);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ['ID', "info1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CONFIDENCE_DEGREE, "info2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
+ ["x" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[0]"],
+ ["y" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[1]"],
+ ["w" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[2]"],
+ ["h" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "xc"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "yc"]
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_YOLO_RECOGNIZE_RESULT_TOOLTIP);
+ }
+};
+
+const ai_sensor_asr_recognize = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_asr);
+ this.appendValueInput("VAR1")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_ASR_RECOGNISE_CORPUS)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("VAR2")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_THRESHOLD)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_ASR_RECOGNISE_TOOLTIP);
+ }
+};
+
+const ai_sensor_licenseplate = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LICENSEPLATE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL_CODE_ANALYSIS);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ['ID', "info1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
+ ["x" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[0]"],
+ ["y" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[1]"],
+ ["w" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[2]"],
+ ["h" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[3]"]
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_LICENSEPLATE_TOOLTIP);
+ }
+};
+
+const ai_sensor_find_licenseplates = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipOcr_licensePlate);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + "[licensePlate]");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_LICENSEPLATE_RECOGNTITION_TOOLTIP);
+ }
+};
+
+const ai_sensor_face = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FACE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL_CODE_ANALYSIS);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["ID", "info1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CONFIDENCE_DEGREE, "info2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
+ ["x" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[0]"],
+ ["y" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[1]"],
+ ["w" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[2]"],
+ ["h" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[3]"]
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_FACE_TOOLTIP);
+ }
+};
+
+const ai_sensor_classifier_faces = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipFace);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + "[face]");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_BAR_FACE_CLASSIFIER_TOOLTIP);
+ }
+};
+
+const ai_sensor_20object = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_20OBJECTS + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_OBJECT)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL_CODE_ANALYSIS);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ['ID', "info1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CONFIDENCE_DEGREE, "info2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
+ ["x" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[0]"],
+ ["y" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[1]"],
+ ["w" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[2]"],
+ ["h" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POSITION_XY, "rect[3]"]
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_20OBJECTS_TOOLTIP);
+ }
+};
+
+const ai_sensor_find_20objects = {
+ init: function () {
+ this.setColour(AI_SENSOR_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FIND_20OBJECTS);
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + "[20objects]");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AI_SENSOR_BAR_FIND_20OBJECTS_TOOLTIP);
+ }
+};
+
+/***/ }),
+
+/***/ "../micropython/blocks/blynk.js":
+/*!**************************************!*\
+ !*** ../micropython/blocks/blynk.js ***!
+ \**************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ mpython_blynk_app_data: () => (/* binding */ mpython_blynk_app_data),
+/* harmony export */ mpython_blynk_app_notify: () => (/* binding */ mpython_blynk_app_notify),
+/* harmony export */ mpython_blynk_email: () => (/* binding */ mpython_blynk_email),
+/* harmony export */ mpython_blynk_get_timers: () => (/* binding */ mpython_blynk_get_timers),
+/* harmony export */ mpython_blynk_on_connected: () => (/* binding */ mpython_blynk_on_connected),
+/* harmony export */ mpython_blynk_on_disconnected: () => (/* binding */ mpython_blynk_on_disconnected),
+/* harmony export */ mpython_blynk_run: () => (/* binding */ mpython_blynk_run),
+/* harmony export */ mpython_blynk_sensor_data_to_app: () => (/* binding */ mpython_blynk_sensor_data_to_app),
+/* harmony export */ mpython_blynk_set_property: () => (/* binding */ mpython_blynk_set_property),
+/* harmony export */ mpython_blynk_setup: () => (/* binding */ mpython_blynk_setup),
+/* harmony export */ mpython_blynk_stop_timers: () => (/* binding */ mpython_blynk_stop_timers),
+/* harmony export */ mpython_blynk_sync_virtual: () => (/* binding */ mpython_blynk_sync_virtual),
+/* harmony export */ mpython_blynk_terminal_widget_vpin: () => (/* binding */ mpython_blynk_terminal_widget_vpin),
+/* harmony export */ mpython_blynktimer: () => (/* binding */ mpython_blynktimer),
+/* harmony export */ mpython_blynktimer_run: () => (/* binding */ mpython_blynktimer_run)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+/******************* Blynk *****************/
+const BLYNK_HUE = '#2FAD7A';
+
+
+// 自定义终端部件 Terminal Blynk
+const mpython_blynk_terminal_widget_vpin = {
+ init: function () {
+ this.jsonInit({
+ "inputsInline": true,
+ "nextStatement": null,
+ "previousStatement": null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_TERMINAL_WIDGET_VPIN_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_TERMINAL_WIDGET_VPIN_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_TERMINAL_WIDGET_VPIN_MESSAGE0,
+ "args0": [
+ {
+ "check": Number,
+ "type": "input_value",
+ "name": "virtual_pin"
+ }
+ ]
+ });
+ }
+};
+
+// 同步虚拟管脚的状态 Blynk
+const mpython_blynk_sync_virtual = {
+ init: function () {
+ this.jsonInit({
+ "inputsInline": true,
+ "nextStatement": null,
+ "previousStatement": null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_SYNC_VIRTUAL_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_SYNC_VIRTUAL_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_SYNC_VIRTUAL_MESSAGE0,
+ "args0": [
+ {
+ "check": Number,
+ "type": "input_value",
+ "name": "virtual_pin"
+ }
+ ]
+ });
+ }
+};
+
+// 斷開连接 Blynk
+const mpython_blynk_on_disconnected = {
+ init: function () {
+ this.jsonInit({
+ "inputsInline": true,
+ // "nextStatement": null,
+ // "previousStatement": null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_ON_DISCONNECTED_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_ON_DISCONNECTED_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_ON_DISCONNECTED_MESSAGE0
+ });
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.CONTROLS_REPEAT_INPUT_DO);
+ }
+};
+
+// 连接上 Blynk
+const mpython_blynk_on_connected = {
+ init: function () {
+ this.jsonInit({
+ "inputsInline": true,
+ // "nextStatement": null,
+ // "previousStatement": null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_ON_CONNECTED_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_ON_CONNECTED_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_ON_CONNECTED_MESSAGE0
+ });
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.CONTROLS_REPEAT_INPUT_DO);
+ }
+};
+
+// Blynk 定时器的进程生效并运行
+const mpython_blynktimer_run = {
+ init: function () {
+ this.jsonInit({
+ "inputsInline": true,
+ "nextStatement": null,
+ "previousStatement": null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNKTIMER_RUN_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNKTIMER_RUN_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNKTIMER_RUN_MESSAGE0
+ });
+ }
+};
+
+// Blynk 进程生效并运行
+const mpython_blynk_run = {
+ init: function () {
+ this.jsonInit({
+ "inputsInline": true,
+ "nextStatement": null,
+ "previousStatement": null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_RUN_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_RUN_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_RUN_MESSAGE0
+ });
+ }
+};
+
+// Blynk APP 显示通知
+const mpython_blynk_app_notify = {
+ init: function () {
+ this.jsonInit({
+ "inputsInline": true,
+ "nextStatement": null,
+ "previousStatement": null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_APP_NOTIFY_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_APP_NOTIFY_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_APP_NOTIFY_MESSAGE0,
+ "args0": [
+ {
+ "check": String,
+ "type": "input_value",
+ "name": "notification"
+ }
+ ]
+ });
+ }
+};
+
+// 停止 Blynk 定时器 %1
+const mpython_blynk_stop_timers = {
+ init: function () {
+ this.jsonInit({
+ "inputsInline": true,
+ "nextStatement": null,
+ "previousStatement": null,
+ // "output": null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_STOP_TIMERS_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNKTIMER_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_STOP_TIMERS_MESSAGE0,
+ "args0": [
+ {
+ "check": Number,
+ "type": "input_value",
+ "name": "timer_num"
+ }
+ ]
+ });
+ }
+};
+
+// 给虚拟管脚添加 属性 %1 值 %2
+const mpython_blynk_set_property = {
+ init: function () {
+ this.jsonInit({
+ "inputsInline": true,
+ "nextStatement": null,
+ "previousStatement": null,
+ // "output": null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_SET_PROPERTY_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_SET_PROPERTY_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_SET_PROPERTY_MESSAGE0,
+ "args0": [
+ {
+ "check": String,
+ "type": "input_value",
+ "name": "attribute_name"
+ }
+ ,
+ {
+ // "check":String,
+ "type": "input_value",
+ "name": "attribute_value"
+ }
+ ]
+ });
+ }
+};
+
+// 向 %1 发邮件 主题 %2 正文 %3
+const mpython_blynk_email = {
+ init: function () {
+ this.jsonInit({
+ "inputsInline": true,
+ "nextStatement": null,
+ "previousStatement": null,
+ // "output": null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_EMAIL_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_EMAIL_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_EMAIL_MESSAGE0,
+ "args0": [
+ {
+ "check": String,
+ "type": "input_value",
+ "name": "TargetEmail"
+ }
+ ,
+ {
+ "check": String,
+ "type": "input_value",
+ "name": "subject"
+ }
+ ,
+ {
+ "check": String,
+ "type": "input_value",
+ "name": "body"
+ }
+ ]
+ });
+ }
+};
+
+// 可用的 Blynk 定时器
+const mpython_blynk_get_timers = {
+ init: function () {
+ this.jsonInit({
+ "inputsInline": true,
+ // "nextStatement": null,
+ // "previousStatement": null,
+ "output": null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_GET_TIMERS_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_GET_TIMERS_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_GET_TIMERS_MESSAGE0,
+ });
+ }
+};
+
+//blynk定时器
+const mpython_blynktimer = {
+ init: function () {
+ this.jsonInit({
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNKTIMER_MESSAGE0,
+ // "nextStatement": null,
+ // "previousStatement": null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNKTIMER_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNKTIMER_TOOLTIP,
+ "args0": [
+ {
+ "check": Number,
+ "type": "input_value",
+ "name": "Num"
+ }
+ ,
+ {
+ "options": [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_PERIODIC, 'False'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_ONE_SHOT, 'True']
+ ],
+ "type": "field_dropdown",
+ "name": "Timer_mode"
+ }
+ ,
+ {
+ "check": Number,
+ "type": "input_value",
+ "name": "period"
+ }
+ ]
+ });
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.CONTROLS_REPEAT_INPUT_DO);
+ }
+};
+
+// 发送数据 %1 到 Bylnk APP 的虚拟管脚 %2
+const mpython_blynk_sensor_data_to_app = {
+ init: function () {
+ this.jsonInit({
+ "inputsInline": true,
+ "nextStatement": null,
+ "previousStatement": null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_SENSOR_DATA_TO_APP_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_SENSOR_DATA_TO_APP_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_SENSOR_DATA_TO_APP_MESSAGE0,
+ "args0": [
+ {
+ "type": "input_value",
+ "name": "sensor_data"
+ }
+ ,
+ {
+ "check": Number,
+ "type": "input_value",
+ "name": "virtual_pin"
+ }
+ ]
+ });
+ }
+};
+
+// 从 Bylnk APP 获取虚拟管脚 %1 的值
+const mpython_blynk_app_data = {
+ init: function () {
+ this.jsonInit({
+ "inputsInline": true,
+ // "nextStatement": null,
+ // "previousStatement": null,
+ // "output":null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_APP_DATA_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_SENSOR_DATA_TO_APP_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_APP_DATA_MESSAGE0,
+ "args0": [
+ {
+ "check": Number,
+ "type": "input_value",
+ "name": "virtual_pin"
+ }
+ ,
+ {
+ "type": "input_value",
+ "name": "virtual_pin_val"
+ }
+ ]
+ });
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.CONTROLS_REPEAT_INPUT_DO);
+ }
+};
+
+// Bylnk设置
+const mpython_blynk_setup = {
+ init: function () {
+ this.jsonInit({
+ // "inputsInline": true,
+ "nextStatement": null,
+ "previousStatement": null,
+ "colour": BLYNK_HUE,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_SETUP_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_SETUP_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_BLYNK_SETUP_MESSAGE0,
+ "args0": [
+ {
+ "type": "input_dummy"
+ },
+ {
+ "check": String,
+ "type": "input_value",
+ "name": "server"
+ },
+ {
+ "check": Number,
+ "type": "input_value",
+ "name": "port"
+ },
+ {
+ "check": String,
+ "type": "input_value",
+ "name": "auth"
+ }
+ ]
+ });
+ }
+};
+
+
+/***/ }),
+
+/***/ "../micropython/blocks/cc_g1.js":
+/*!**************************************!*\
+ !*** ../micropython/blocks/cc_g1.js ***!
+ \**************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ cc_g1_init: () => (/* binding */ cc_g1_init),
+/* harmony export */ cc_g1_read_bat: () => (/* binding */ cc_g1_read_bat),
+/* harmony export */ cc_g1_read_joystick: () => (/* binding */ cc_g1_read_joystick),
+/* harmony export */ cc_g1_read_key: () => (/* binding */ cc_g1_read_key),
+/* harmony export */ cc_g1_turnoff: () => (/* binding */ cc_g1_turnoff)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const CCG1_HUE = 40;
+
+const cc_g1_init = {
+ init: function () {
+ this.setColour(CCG1_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + " CC_G1");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var TOOLTIPS = {
+ "temperature": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,
+ "relative_humidity": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP
+ };
+ return TOOLTIPS[mode]
+ });
+ }
+};
+
+const cc_g1_read_bat = {
+ init: function () {
+ this.setColour(CCG1_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_BATTERY);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const cc_g1_read_joystick = {
+ init: function () {
+ this.setColour(CCG1_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_JOYSTICK)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "[0]"],
+ ["y", "[1]"],
+ ["(x,y)", ""]
+ ]), "VAR");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DATA);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const cc_g1_read_key = {
+ init: function () {
+ this.setColour(CCG1_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["A", "0"],
+ ["B", "1"],
+ ["C", "2"],
+ ["D", "3"],
+ ["POWER", "4"],
+ ["SELECT", "5"]
+ ]), "VAR");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.WHETHER_IS_PRESSED);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const cc_g1_turnoff = {
+ init: function () {
+ this.setColour(CCG1_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANDLE_SHUTDOWN);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+
+/***/ }),
+
+/***/ "../micropython/blocks/ce_go.js":
+/*!**************************************!*\
+ !*** ../micropython/blocks/ce_go.js ***!
+ \**************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ ce_go_dc_motor: () => (/* binding */ ce_go_dc_motor),
+/* harmony export */ ce_go_get_led_bright: () => (/* binding */ ce_go_get_led_bright),
+/* harmony export */ ce_go_get_led_state: () => (/* binding */ ce_go_get_led_state),
+/* harmony export */ ce_go_hall_attachInterrupt: () => (/* binding */ ce_go_hall_attachInterrupt),
+/* harmony export */ ce_go_hall_data: () => (/* binding */ ce_go_hall_data),
+/* harmony export */ ce_go_hall_initialize: () => (/* binding */ ce_go_hall_initialize),
+/* harmony export */ ce_go_led_bright: () => (/* binding */ ce_go_led_bright),
+/* harmony export */ ce_go_led_brightness: () => (/* binding */ ce_go_led_brightness),
+/* harmony export */ ce_go_light_number: () => (/* binding */ ce_go_light_number),
+/* harmony export */ ce_go_pin_light: () => (/* binding */ ce_go_pin_light),
+/* harmony export */ ce_go_pin_near: () => (/* binding */ ce_go_pin_near),
+/* harmony export */ ce_go_pin_near_line: () => (/* binding */ ce_go_pin_near_line),
+/* harmony export */ ce_go_pin_near_state_change: () => (/* binding */ ce_go_pin_near_state_change),
+/* harmony export */ ce_go_stepper_keep: () => (/* binding */ ce_go_stepper_keep),
+/* harmony export */ ce_go_stepper_stop: () => (/* binding */ ce_go_stepper_stop),
+/* harmony export */ educore_car: () => (/* binding */ educore_car),
+/* harmony export */ educore_car_pin_near: () => (/* binding */ educore_car_pin_near),
+/* harmony export */ educore_car_pin_near_line: () => (/* binding */ educore_car_pin_near_line),
+/* harmony export */ educore_car_stepper_keep: () => (/* binding */ educore_car_stepper_keep),
+/* harmony export */ educore_car_stepper_stop: () => (/* binding */ educore_car_stepper_stop),
+/* harmony export */ sensor_mixgome_eulerangles: () => (/* binding */ sensor_mixgome_eulerangles)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const MEGO_HUE = 100;
+
+//LED
+const ce_go_light_number = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_FRONT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "GLED[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_FRONT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "GLED[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_BACK + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "GLED[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_BACK + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "GLED[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_FRONT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "RLED[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_FRONT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "RLED[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_BACK + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "RLED[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_BACK + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "RLED[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_LIGHT_HEADLIGHT, "WLED"]
+ ]), 'op')
+ this.setOutput(true);
+ }
+};
+
+const ce_go_led_bright = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING);
+ this.appendValueInput('led')
+ .appendField('ME GO')
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_SETONOFF);
+ }
+};
+
+const ce_go_get_led_bright = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
+ this.appendValueInput('led')
+ .appendField('ME GO')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_GETONOFF);
+ }
+};
+
+const ce_go_get_led_state = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
+ this.appendValueInput('led')
+ .appendField('ME GO')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_GETONOFF);
+ }
+};
+
+const ce_go_led_brightness = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING);
+ this.appendValueInput('led')
+ .appendField('ME GO')
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS)
+ this.appendDummyInput("")
+ .appendField("%")
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS + '(0-10)');
+ }
+};
+
+
+const ce_go_stepper_keep = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField("ME GO")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_forward, "F"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_backward, "B"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_left, "L"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_right, "R"]
+ ]), "VAR");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STEPPER_SET_SPEED);
+ this.appendDummyInput("")
+ .appendField("%")
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const ce_go_stepper_stop = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField("ME GO")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_P, "P"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_N, "N"]
+ ]), "VAR");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const ce_go_dc_motor = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField("ME GO")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_DC)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLYCAR_WHEEL_LEFT, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLYCAR_WHEEL_RIGHT, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN, "2"]
+ ]), "wheel");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ROTATION_FORWARD, "CW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ROTATION_BACKWARD, "CCW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_P, "P"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_N, "N"]
+ ]), "direction");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STEPPER_SET_SPEED);
+ this.appendDummyInput("")
+ .appendField("%")
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const ce_go_hall_attachInterrupt = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INTERRUPT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_HALL_SENSOR)
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "A"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "B"]]), "mode");
+ this.appendValueInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+const ce_go_hall_initialize = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_HALL_SENSOR)
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "A"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "B"]]), "mode");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['turns', "turns"], ['distance', "distance"], ['turns,distance', 'all']]), "args");
+ this.appendValueInput('num')
+ .setCheck(Number)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+const ce_go_hall_data = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_HALL_SENSOR)
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "A"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "B"]]), "mode");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['turns', "turns"], ['distance', "distance"], ['speed', 'speed']]), "args");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const ce_go_pin_near_line = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_MID, "[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_MID, "[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL, ""]
+ ]), "key")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LINE_SENSOR_VAL);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(function () {
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR;
+ return mode0 + mode1
+ });
+ }
+};
+
+const ce_go_pin_near = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_FRONT, "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_FRONT, "[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_BACK, "[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_BACK, "[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL, ""]
+ ]), "key")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_PROXIMITY_SENSOR);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(function () {
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR;
+ return mode0 + mode1
+ });
+ }
+};
+
+const ce_go_pin_near_state_change = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_CAR_SENSOR_ONBOARD_CHANGE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ME_GO_CAR_SENSOR_ONBOARD_AUTO_CHANGE, "AS"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_CAR_USE_LINE_ONLY, "LP"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_CAR_USE_PROXIMITY_ONLY, "OA"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_ONLY, "LS"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_SENSOR_MODE_OFF, "CL"]
+ ]), "key");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_mixgome_eulerangles = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_GESTURE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_PITCH, '[0]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_ROLL, '[1]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_PITCH + ', ' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_ROLL, '']
+ ]), 'angle');
+ // this.appendDummyInput("")
+ // .appendField(Blockly.Msg.BOARD_DIRECTION)
+ // .appendField(new Blockly.FieldDropdown([
+ // [Blockly.Msg.OLED_VER,'True'],
+ // [Blockly.Msg.OLED_HOR,'False'],
+ // ]),'dir');
+ this.appendDummyInput("")
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+
+ }
+};
+
+const ce_go_pin_light = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_MID, "[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_MID, "[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL, ""]
+ ]), "key")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_SENSOR);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(function () {
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_SENSOR;
+ return mode0 + mode1
+ });
+ }
+};
+
+//educore car
+const educore_car = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CAR);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+}
+
+const educore_car_stepper_keep = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendValueInput('car');
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_forward, "forward"],
+ // [Blockly.Msg.blockpy_backward, "B"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_left, "turn_left"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_right, "turn_right"]
+ ]), "VAR");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const educore_car_stepper_stop = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendValueInput('car');
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_P, "stop"]
+ // [Blockly.Msg.MOTOR_N, "N"]
+ ]), "VAR");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const educore_car_pin_near_line = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendValueInput('car');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "1"],
+ // [Blockly.Msg.MIXGO_LEFT_MID, "[1]"],
+ // [Blockly.Msg.MIXGO_RIGHT_MID, "[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "2"]
+ // [Blockly.Msg.MIXLY_ALL, ""]
+ ]), "key")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LINE_SENSOR_VAL);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const educore_car_pin_near = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendValueInput('car');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_PROXIMITY_SENSOR);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+/***/ }),
+
+/***/ "../micropython/blocks/communicate.js":
+/*!********************************************!*\
+ !*** ../micropython/blocks/communicate.js ***!
+ \********************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ communicate_bluetooth_central_init: () => (/* binding */ communicate_bluetooth_central_init),
+/* harmony export */ communicate_bluetooth_connect: () => (/* binding */ communicate_bluetooth_connect),
+/* harmony export */ communicate_bluetooth_disconnect: () => (/* binding */ communicate_bluetooth_disconnect),
+/* harmony export */ communicate_bluetooth_handle: () => (/* binding */ communicate_bluetooth_handle),
+/* harmony export */ communicate_bluetooth_is_connected: () => (/* binding */ communicate_bluetooth_is_connected),
+/* harmony export */ communicate_bluetooth_mac: () => (/* binding */ communicate_bluetooth_mac),
+/* harmony export */ communicate_bluetooth_peripheral_init: () => (/* binding */ communicate_bluetooth_peripheral_init),
+/* harmony export */ communicate_bluetooth_recv: () => (/* binding */ communicate_bluetooth_recv),
+/* harmony export */ communicate_bluetooth_recv_only: () => (/* binding */ communicate_bluetooth_recv_only),
+/* harmony export */ communicate_bluetooth_scan: () => (/* binding */ communicate_bluetooth_scan),
+/* harmony export */ communicate_bluetooth_send: () => (/* binding */ communicate_bluetooth_send),
+/* harmony export */ communicate_espnow_init: () => (/* binding */ communicate_espnow_init),
+/* harmony export */ communicate_espnow_init_new: () => (/* binding */ communicate_espnow_init_new),
+/* harmony export */ communicate_i2c_available: () => (/* binding */ communicate_i2c_available),
+/* harmony export */ communicate_i2c_init: () => (/* binding */ communicate_i2c_init),
+/* harmony export */ communicate_i2c_master_read: () => (/* binding */ communicate_i2c_master_read),
+/* harmony export */ communicate_i2c_onboard: () => (/* binding */ communicate_i2c_onboard),
+/* harmony export */ communicate_i2c_read: () => (/* binding */ communicate_i2c_read),
+/* harmony export */ communicate_i2c_scan: () => (/* binding */ communicate_i2c_scan),
+/* harmony export */ communicate_i2c_write: () => (/* binding */ communicate_i2c_write),
+/* harmony export */ communicate_ir_recv_init: () => (/* binding */ communicate_ir_recv_init),
+/* harmony export */ communicate_ir_send_init: () => (/* binding */ communicate_ir_send_init),
+/* harmony export */ communicate_ow_init: () => (/* binding */ communicate_ow_init),
+/* harmony export */ communicate_ow_read: () => (/* binding */ communicate_ow_read),
+/* harmony export */ communicate_ow_reset: () => (/* binding */ communicate_ow_reset),
+/* harmony export */ communicate_ow_scan: () => (/* binding */ communicate_ow_scan),
+/* harmony export */ communicate_ow_select: () => (/* binding */ communicate_ow_select),
+/* harmony export */ communicate_ow_write: () => (/* binding */ communicate_ow_write),
+/* harmony export */ communicate_spi_buffer: () => (/* binding */ communicate_spi_buffer),
+/* harmony export */ communicate_spi_init: () => (/* binding */ communicate_spi_init),
+/* harmony export */ communicate_spi_onboard: () => (/* binding */ communicate_spi_onboard),
+/* harmony export */ communicate_spi_read: () => (/* binding */ communicate_spi_read),
+/* harmony export */ communicate_spi_read_output: () => (/* binding */ communicate_spi_read_output),
+/* harmony export */ communicate_spi_readinto: () => (/* binding */ communicate_spi_readinto),
+/* harmony export */ communicate_spi_readinto_output: () => (/* binding */ communicate_spi_readinto_output),
+/* harmony export */ communicate_spi_set: () => (/* binding */ communicate_spi_set),
+/* harmony export */ communicate_spi_write: () => (/* binding */ communicate_spi_write),
+/* harmony export */ communicate_spi_write_readinto: () => (/* binding */ communicate_spi_write_readinto),
+/* harmony export */ espnow_radio_channel: () => (/* binding */ espnow_radio_channel),
+/* harmony export */ espnow_radio_channel_new: () => (/* binding */ espnow_radio_channel_new),
+/* harmony export */ espnow_radio_on_off: () => (/* binding */ espnow_radio_on_off),
+/* harmony export */ espnow_radio_rec: () => (/* binding */ espnow_radio_rec),
+/* harmony export */ espnow_radio_recv: () => (/* binding */ espnow_radio_recv),
+/* harmony export */ espnow_radio_recv_certain_msg: () => (/* binding */ espnow_radio_recv_certain_msg),
+/* harmony export */ espnow_radio_recv_certain_msg_new: () => (/* binding */ espnow_radio_recv_certain_msg_new),
+/* harmony export */ espnow_radio_recv_msg: () => (/* binding */ espnow_radio_recv_msg),
+/* harmony export */ espnow_radio_recv_new: () => (/* binding */ espnow_radio_recv_new),
+/* harmony export */ espnow_radio_send: () => (/* binding */ espnow_radio_send),
+/* harmony export */ espnow_radio_txpower: () => (/* binding */ espnow_radio_txpower),
+/* harmony export */ i2c_available: () => (/* binding */ i2c_available),
+/* harmony export */ i2c_init: () => (/* binding */ i2c_init),
+/* harmony export */ i2c_master_reader2: () => (/* binding */ i2c_master_reader2),
+/* harmony export */ i2c_read: () => (/* binding */ i2c_read),
+/* harmony export */ i2c_scan: () => (/* binding */ i2c_scan),
+/* harmony export */ i2c_slave_onreceive: () => (/* binding */ i2c_slave_onreceive),
+/* harmony export */ i2c_write: () => (/* binding */ i2c_write),
+/* harmony export */ internal_variable: () => (/* binding */ internal_variable),
+/* harmony export */ ir_recv_timeout: () => (/* binding */ ir_recv_timeout),
+/* harmony export */ ir_transmit_busy: () => (/* binding */ ir_transmit_busy),
+/* harmony export */ ir_transmit_conventional_data: () => (/* binding */ ir_transmit_conventional_data),
+/* harmony export */ ir_transmit_raw_code: () => (/* binding */ ir_transmit_raw_code),
+/* harmony export */ ir_transmit_study_code: () => (/* binding */ ir_transmit_study_code),
+/* harmony export */ ir_whether_recv: () => (/* binding */ ir_whether_recv),
+/* harmony export */ lora_init: () => (/* binding */ lora_init),
+/* harmony export */ lora_packet: () => (/* binding */ lora_packet),
+/* harmony export */ lora_recv: () => (/* binding */ lora_recv),
+/* harmony export */ lora_send: () => (/* binding */ lora_send),
+/* harmony export */ network_espnow_info: () => (/* binding */ network_espnow_info),
+/* harmony export */ network_espnow_mac: () => (/* binding */ network_espnow_mac),
+/* harmony export */ network_espnow_recv: () => (/* binding */ network_espnow_recv),
+/* harmony export */ network_espnow_recv_handle: () => (/* binding */ network_espnow_recv_handle),
+/* harmony export */ network_espnow_send: () => (/* binding */ network_espnow_send),
+/* harmony export */ recv_fun: () => (/* binding */ recv_fun),
+/* harmony export */ spi_buffer: () => (/* binding */ spi_buffer),
+/* harmony export */ spi_init: () => (/* binding */ spi_init),
+/* harmony export */ spi_read: () => (/* binding */ spi_read),
+/* harmony export */ spi_read_output: () => (/* binding */ spi_read_output),
+/* harmony export */ spi_readinto: () => (/* binding */ spi_readinto),
+/* harmony export */ spi_readinto_output: () => (/* binding */ spi_readinto_output),
+/* harmony export */ spi_set: () => (/* binding */ spi_set),
+/* harmony export */ spi_write: () => (/* binding */ spi_write),
+/* harmony export */ spi_write_readinto: () => (/* binding */ spi_write_readinto),
+/* harmony export */ urequests_attribute: () => (/* binding */ urequests_attribute),
+/* harmony export */ urequests_get: () => (/* binding */ urequests_get),
+/* harmony export */ urequests_method: () => (/* binding */ urequests_method)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const COMMUNICATE_HUE = 140
+
+const communicate_i2c_onboard = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LED_ON_BOARD + "I2C");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const communicate_spi_onboard = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LED_ON_BOARD + "SPI");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const communicate_i2c_init = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('SUB')
+ .appendField("I2C " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .setCheck("var");
+
+ this.appendValueInput("TX", Number)
+ .appendField("SCL")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("RX", Number)
+ .appendField("SDA")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput('freq')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_I2C_INIT);
+ }
+};
+
+const communicate_i2c_read = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .appendField("I2C")
+ .setCheck("var");
+ this.appendValueInput('address')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_RNUMBER);
+ this.appendValueInput('data')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_BYTE);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_I2C_READ);
+ }
+}
+
+const communicate_i2c_write = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .appendField("I2C")
+ .setCheck("var");
+ this.appendValueInput('address')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_WNUMBER);
+ this.appendValueInput('data')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_I2C_VALUE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_I2C_WRITE);
+ }
+}
+
+const communicate_i2c_scan = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .appendField("I2C")
+ .setCheck("var")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_I2C_SCAN1 + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_I2C_SCAN2)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_I2C_SCAN);
+ }
+}
+
+const communicate_spi_init = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_INIT);
+ this.appendValueInput('freq')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_BEGIN);
+ this.appendValueInput('sck')
+ .setCheck(Number)
+ .appendField('SCK');
+ this.appendValueInput('mosi')
+ .setCheck(Number)
+ .appendField('MOSI');
+ this.appendValueInput('miso')
+ .setCheck(Number)
+ .appendField('MISO');
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_INIT_TOOLTIP);
+ }
+};
+
+const communicate_spi_set = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField("SPI")
+ this.appendValueInput('data')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_BEGIN);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_SET);
+ }
+};
+
+const communicate_spi_buffer = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('SPI');
+ this.appendValueInput('data')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_BUFFER);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_BUFFER_SET);
+ }
+};
+
+const communicate_spi_read = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('SPI');
+ this.appendValueInput('data')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_READ);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_NOMBER2 + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_BYTE)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_READ);
+ }
+}
+
+const communicate_spi_read_output = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('SPI');
+ this.appendValueInput('data')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_READ);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_NOMBER2 + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_BYTE + ' ' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_OUTPUT);
+ this.appendValueInput('val')
+ .setCheck(Number);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_READ_OUTPUT);
+ }
+}
+
+const communicate_spi_readinto = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('SPI');
+ this.appendValueInput('data')
+ .setCheck('var')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_READ + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_BUFFER);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_READINTO);
+ }
+}
+
+const communicate_spi_readinto_output = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('SPI');
+ this.appendValueInput('data')
+ .setCheck('var')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_READ + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_BUFFER);
+ this.appendValueInput('val')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_OUTPUT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_READINTO_OUTPUT);
+ }
+}
+
+const communicate_spi_write = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('SPI');
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_WRITE);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_WRITE);
+ }
+};
+
+const communicate_spi_write_readinto = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('SPI');
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_WRITE)
+ // .appendField(new Blockly.FieldDropdown([
+ // [Blockly.Msg.LANG_MATH_BYTE, "byte"],
+ // [Blockly.Msg.MIXLY_ESP32_SPI_BUFFER, "buffer"]
+ // ]), "op");
+ this.appendValueInput('val')
+ .setCheck('var')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_BUFFER_READ);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SPI_WRITE_READINTO);
+ }
+};
+
+const communicate_i2c_master_read = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField("I2C");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_READ);
+ this.setOutput(true, Number);
+ }
+};
+
+const communicate_i2c_available = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField("I2C");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_READ + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SUCCESS);
+ this.setOutput(true, Boolean);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_I2C_AVAILABLE);
+ }
+};
+
+const i2c_slave_onreceive = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_I2C_SLAVE_ONRECEIVE)
+ .setCheck(Number);
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const communicate_ow_init = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('OneWire ' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP);
+ this.appendValueInput('BUS')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_OW_INIT);
+ }
+};
+
+const communicate_ow_scan = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('OneWire');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ONEWIRE_SCAN);
+ this.setOutput(true, 'List');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_OW_SCAN);
+ }
+};
+
+const communicate_ow_read = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('OneWire');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ONEWIRE_READ);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_OW_READ);
+ }
+};
+
+const communicate_ow_write = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('OneWire');
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_WRITE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_STRING, "write"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_BYTE, "writebyte"]
+ ]), "op");
+ this.appendValueInput('byte')
+ .setCheck([Number, String]);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_OW_WRITE);
+ }
+};
+
+const communicate_ow_select = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .appendField('OneWire')
+ .setCheck('var')
+ this.appendValueInput('byte')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET)
+ .appendField("ROM");
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_OW_SELECT);
+ }
+};
+
+
+const communicate_ow_reset = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .appendField('OneWire')
+ .setCheck('var')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_turtle_reset);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setOutput(false);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_OW_RESET);
+ }
+};
+
+const communicate_ir_recv_init = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('PIN')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_RECEIVE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_TYPE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_INPUT1, "8"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_INPUT2, "16"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_INPUT3, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TR_SEND_RC, "RC5"]
+ ]), "type");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_REPEAT_INPUT_DO + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ONENET_SUB);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const internal_variable = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXlY_RECV_FUN);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_CMD_CODE, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_ADDR_CODE, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_RAW_CODE, "2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_PULSE, "3"]
+ ]), "index");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const recv_fun = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXlY_RECV_FUN)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MILY_PAUSE, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RECOVER, "False"]
+ ]), "en");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const ir_whether_recv = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXlY_RECV_FUN);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_WHETHER_RECV);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const ir_recv_timeout = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('time')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXlY_RECV_FUN)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_TIMEOUT);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MILLISECOND);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const communicate_ir_send_init = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('PIN')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_SEND)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_TYPE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_SEND_samsung1, "False"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_SEND_samsung2, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TR_SEND_RC, "RC5"]
+ ]), "type")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BLE_POWER);
+ this.appendValueInput('power');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_QUYU_SYMBOL);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+
+const ir_transmit_conventional_data = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_SEND);
+ this.appendValueInput('cmd')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_CMD_CODE);
+ this.appendValueInput('addr')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_ADDR_CODE);
+ this.appendValueInput('toggle')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CONTROL);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TRANSMIT_CONVEN_DATA);
+ }
+};
+
+const ir_transmit_study_code = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_SEND);
+ this.appendValueInput('LIST')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_PULSE)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const ir_transmit_raw_code = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_SEND);
+ this.appendValueInput('raw')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_RAW_CODE)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+
+const ir_transmit_busy = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_TRANSMIT_DONE);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const communicate_bluetooth_central_init = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catEthernet_init + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_AS + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catBLE_UART);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ //this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_WRITE);
+ }
+}
+
+const communicate_bluetooth_peripheral_init = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catEthernet_init + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_AS + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catBLE_HID);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_NAME);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ //this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_WRITE);
+ }
+}
+
+const communicate_bluetooth_scan = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ONEWIRE_SCAN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ //this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_READ);
+ }
+}
+
+const communicate_bluetooth_mac = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_ESPNOW_MAC);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const communicate_bluetooth_connect = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEXT_JOIN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_NAME, "name"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ETHERNET_MAC_ADDRESS, "mac"]
+ ]), "mode");
+
+ this.appendValueInput('data')
+ .setCheck(String);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ //this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_WRITE);
+ }
+}
+
+const communicate_bluetooth_disconnect = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_DISCONNECT_ONENET);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const communicate_bluetooth_send = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SEND_DATA);
+ this.appendValueInput('data')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_BODY);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ //this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_WRITE);
+ }
+}
+
+const communicate_bluetooth_is_connected = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLUETOOTH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_IS_CONNECT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ //this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_READ);
+ }
+}
+
+const communicate_bluetooth_recv = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendValueInput('METHOD')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_ESPNOW_RECV)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_REPEAT_INPUT_DO + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ONENET_SUB);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ //this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_SUBSCRIBE_TOOLTIP);
+ }
+};
+
+const communicate_bluetooth_recv_only = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_ESPNOW_RECV)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ //this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_SUBSCRIBE_TOOLTIP);
+ }
+};
+
+const communicate_bluetooth_handle = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BLE_HANDLE)
+ this.appendValueInput('METHOD')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_ESPNOW_RECV)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_REPEAT_INPUT_DO + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ONENET_SUB);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ //this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_SUBSCRIBE_TOOLTIP);
+ }
+};
+
+//espnow
+const communicate_espnow_init = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('ESPnow ' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP);
+ this.appendValueInput('CHNL')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_CHANNEL);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TX_POWER)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["20", "20"], ["18", "18"], ["16", "16"], ["15", "15"], ["14", "14"], ["13", "13"], ["11", "11"], ["8", "8"], ["7", "7"], ["5", "5"], ["2", "2"]]), 'op');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+const communicate_espnow_init_new = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('ESPnow ' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP);
+ this.appendValueInput('CHNL')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_CHANNEL);
+ this.appendValueInput('DB')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BLE_POWER);
+ this.appendDummyInput()
+ .appendField('db');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_INIT_TOOLTIP);
+ }
+};
+
+const network_espnow_mac = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('ESPnow ');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_ESPNOW_MAC);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const network_espnow_info = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('ESPnow ');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_ESPNOW_INFO);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const network_espnow_recv = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('ESPnow ');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_ESPNOW_RECV);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["(" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ETHERNET_MAC_ADDRESS + ", " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_STRING + ")", ""],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ETHERNET_MAC_ADDRESS, "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_STRING, "[1]"]
+ ]), "mode");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const network_espnow_send = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('ESPnow ');
+ this.appendValueInput('mac')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_ESPNOW_SEND_MAC);
+ this.appendValueInput('content')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_ESPNOW_SEND);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_ESPNOW_SEND_TOOLTIP);
+ }
+};
+
+const network_espnow_recv_handle = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('ESPnow ');
+ this.appendValueInput('METHOD')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_SET_METHOD);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+//radio
+const espnow_radio_channel = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_RADIO_INIT);
+ this.appendValueInput('CHNL')
+ .setCheck(Number);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+const espnow_radio_txpower = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_RADIO + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TX_POWER)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["20", "20"], ["18", "18"], ["16", "16"], ["15", "15"], ["14", "14"], ["13", "13"], ["11", "11"], ["8", "8"], ["7", "7"], ["5", "5"], ["2", "2"]]), 'op');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+const espnow_radio_channel_new = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_RADIO_INIT);
+ this.appendValueInput('CHNL')
+ .setCheck(Number);
+ this.appendValueInput('DB')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BLE_POWER);
+ this.appendDummyInput()
+ .appendField('db');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_RADIO_INIT_TOOLTIP);
+ }
+};
+
+const espnow_radio_on_off = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_RADIO);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_ON, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_OFF, "False"]
+ ]), 'on_off')
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+const espnow_radio_send = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_RADIO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_SEND);
+ this.appendValueInput('send')
+ .setCheck(String);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_ESPNOW_SEND_TOOLTIP);
+ }
+};
+
+const espnow_radio_rec = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_RADIO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_ESPNOW_RECV);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const espnow_radio_recv_msg = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_RADIO_RECEIVED_MSG);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const espnow_radio_recv = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_RADIO_MSG_RECEIVED);
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ }
+};
+
+const espnow_radio_recv_certain_msg = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_RADIO_MSG_RECEIVED_CERTAIN)
+ .appendField('"')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('on'), 'msg')
+ .appendField('"')
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ }
+};
+
+const espnow_radio_recv_new = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_RADIO_MSG_RECEIVED);
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ }
+};
+
+const espnow_radio_recv_certain_msg_new = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP_ESPNOW_RADIO_MSG_RECEIVED_CERTAIN)
+ .appendField('"')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('on'), 'msg')
+ .appendField('"')
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ }
+};
+
+const lora_init = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('SUB')
+ .appendField('Lora' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .setCheck("var");
+ this.appendValueInput('SPISUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "SPI")
+ .setCheck("var");
+ this.appendValueInput('PINSUB')
+ .appendField("CS")
+ this.appendValueInput('frequency')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY)
+ this.appendValueInput('rate')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CODE_RATE)
+ this.appendValueInput('factor')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPREADING_FACTOR)
+ this.appendValueInput('power')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TX_POWER)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SIGNAL_BANDWIDTH)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ['7800', '7800'],
+ ['10400', '10400'],
+ ['15600', '15600'],
+ ['20800', '20800'],
+ ['31250', '31250'],
+ ['41700', '41700'],
+ ['62500', '62500'],
+ ['125000', '125000'],
+ ['250000', '250000'],
+ ['500000', '500000']
+ ]), 'bandwidth')
+ this.setFieldValue("125000", "bandwidth");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LORA_INIT_TOOLTIP);
+ }
+};
+
+const lora_packet = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('Lora ');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PACKAGE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SIGNAL_STRENGTH, 'packet_rssi'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SIGNAL_NOISE_RATE, 'packet_snr']
+ ]), 'key')
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const lora_send = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField('Lora ');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SEND_DATA);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_SEND);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ //this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_WRITE);
+ }
+}
+
+const lora_recv = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('var')
+ .appendField('Lora ');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_ESPNOW_RECV)
+ this.setOutput(true, String);
+ this.setInputsInline(true);
+ }
+};
+
+const urequests_get = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput("DOMAIN")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2)
+ .setCheck(String);
+ this.appendDummyInput("")
+
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('response'), 'VAR')
+
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_TOOLTIP);
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+
+}
+
+
+const urequests_attribute = {
+ init: function () {
+ this.appendValueInput('VAL')
+
+ var attr =
+ [[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_ATTR_HEADER, 'headers'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_ATTR_STATUS_CODE, 'status_code'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_ATTR_TEXT, 'text']
+ , [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_ATTR_COOKIES, 'cookies'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_ATTR_CONTENT, 'content']];
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(attr), 'ATTR')
+
+
+ this.setInputsInline(true);
+ this.setOutput(true, String);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('DIR');
+ var TOOLTIPS = {
+ 'clear': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TURTEL_CLEAR,
+ 'reset': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TURTEL_RESET,
+ 'home': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TURTEL_HOME
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+
+
+const urequests_method = {
+ init: function () {
+ this.appendValueInput("VAR")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2)
+ .setCheck(String);
+ var method = [
+ ['get', 'get'],
+ ['post', 'post'],
+ ['put', 'put'],
+ ['delete', 'delete'],
+ ['head', 'head'],
+ ['option', 'option']
+ ];
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_CONDUCT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(method), 'DIR')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS)
+ this.setOutput(true);
+ this.setInputsInline(true);
+
+ }
+};
+
+const i2c_init = communicate_i2c_init;
+const i2c_read = communicate_i2c_read;
+const i2c_write = communicate_i2c_write;
+const i2c_scan = communicate_i2c_scan;
+const spi_init = communicate_spi_init;
+const spi_set = communicate_spi_set;
+const spi_buffer = communicate_spi_buffer;
+const spi_read = communicate_spi_read;
+const spi_read_output = communicate_spi_read_output;
+const spi_readinto = communicate_spi_readinto;
+const spi_readinto_output = communicate_spi_readinto_output;
+const spi_write = communicate_spi_write;
+const spi_write_readinto = communicate_spi_write_readinto;
+const i2c_master_reader2 = communicate_i2c_master_read;
+const i2c_available = communicate_i2c_available;
+
+/***/ }),
+
+/***/ "../micropython/blocks/control.js":
+/*!****************************************!*\
+ !*** ../micropython/blocks/control.js ***!
+ \****************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ Panic_with_status_code: () => (/* binding */ Panic_with_status_code),
+/* harmony export */ base_setup: () => (/* binding */ base_setup),
+/* harmony export */ base_type: () => (/* binding */ base_type),
+/* harmony export */ controls_TypeLists: () => (/* binding */ controls_TypeLists),
+/* harmony export */ controls_delay: () => (/* binding */ controls_delay),
+/* harmony export */ controls_end_program: () => (/* binding */ controls_end_program),
+/* harmony export */ controls_flow_statements: () => (/* binding */ controls_flow_statements),
+/* harmony export */ controls_for: () => (/* binding */ controls_for),
+/* harmony export */ controls_forEach: () => (/* binding */ controls_forEach),
+/* harmony export */ controls_if: () => (/* binding */ controls_if),
+/* harmony export */ controls_if_else: () => (/* binding */ controls_if_else),
+/* harmony export */ controls_if_elseif: () => (/* binding */ controls_if_elseif),
+/* harmony export */ controls_if_if: () => (/* binding */ controls_if_if),
+/* harmony export */ controls_millis: () => (/* binding */ controls_millis),
+/* harmony export */ controls_uname: () => (/* binding */ controls_uname),
+/* harmony export */ controls_whileUntil: () => (/* binding */ controls_whileUntil),
+/* harmony export */ raw_block: () => (/* binding */ raw_block),
+/* harmony export */ reset: () => (/* binding */ reset)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const LOOPS_HUE = 120//'#EB8045';
+
+const base_setup = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP);
+ this.appendStatementInput('DO')
+ .appendField('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_CONTROL_SETUP);
+ }
+};
+
+const controls_delay = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DELAY)
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SECOND, "s"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_mSecond, "ms"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_uSecond, "us"]]), 'Time');
+ this.appendValueInput("DELAY_TIME", Number)
+ .setCheck(Number);
+ this.setFieldValue('ms', 'Time')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_CONTROL_DELAY);
+ }
+};
+
+const Panic_with_status_code = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendValueInput("STATUS_CODE", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Panic_with_status_code)
+ .setCheck(Number);
+ this.setPreviousStatement(true, null);
+ // this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Panic_with_status_code);
+ }
+};
+
+const reset = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Reset_micro);
+ this.setPreviousStatement(true);
+ // this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Reset_micro);
+ }
+};
+
+const controls_for = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FOR_INPUT_WITH)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('i'), 'VAR');
+ this.appendValueInput('FROM')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FOR_INPUT_FROM);
+ this.appendValueInput('TO')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FOR_INPUT_TO);
+ this.appendValueInput('STEP')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STEP);
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_TOOLTIP.replace('%1',
+ thisBlock.getFieldValue('VAR'));
+ });
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+};
+
+const controls_whileUntil = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendValueInput('BOOL')
+ .setCheck([Boolean, Number])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_WHILEUNTIL_TITLE_REPEAT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(this.OPERATORS), 'MODE');
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var op = thisBlock.getFieldValue('MODE');
+ var TOOLTIPS = {
+ 'WHILE': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_WHILE,
+ 'UNTIL': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL
+ };
+ return TOOLTIPS[op];
+ });
+ }
+};
+
+controls_whileUntil.OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_WHILE, 'WHILE'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_UNTIL, 'UNTIL']
+];
+
+const controls_flow_statements = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ var dropdown = new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(this.OPERATORS);
+ this.appendDummyInput()
+ .appendField(dropdown, 'FLOW')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FLOW_STATEMENTS_INPUT_OFLOOP);
+ this.setPreviousStatement(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var op = thisBlock.getFieldValue('FLOW');
+ var TOOLTIPS = {
+ 'BREAK': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK,
+ 'CONTINUE': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE
+ };
+ return TOOLTIPS[op];
+ });
+ },
+ onchange: function () {
+ if (!this.workspace) {
+ // Block has been deleted.
+ return;
+ }
+ var legal = false;
+ // Is the block nested in a control statement?
+ var block = this;
+ do {
+ if (block.type == 'controls_repeat' ||
+ block.type == 'controls_for' ||
+ block.type == 'controls_forEach' ||
+ block.type == 'controls_repeat_ext' ||
+ block.type == 'controls_whileUntil') {
+ legal = true;
+ break;
+ }
+ block = block.getSurroundParent();
+ } while (block);
+ if (legal) {
+ this.setWarningText(null);
+ } else {
+ this.setWarningText(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FLOW_STATEMENTS_WARNING);
+ }
+ }
+};
+
+controls_flow_statements.OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK, 'BREAK'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE, 'CONTINUE']
+];
+
+const controls_millis = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RUNTIME);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_mSecond, "ms"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_uSecond, "us"]]), 'Time');
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RUNTIME);
+ }
+};
+
+const controls_if = {
+ /**
+ * Block for if/elseif/else condition.
+ * @this Blockly.Block
+ */
+ init: function () {
+ //this.setHelpUrl(Blockly.Msg.CONTROLS_IF_HELPURL);
+ this.setColour(LOOPS_HUE);
+ this.appendValueInput('IF0')
+ .setCheck([Boolean, Number])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_MSG_IF);
+ this.appendStatementInput('DO0')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_MSG_THEN);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setHelpUrl("https://mixly.readthedocs.io/zh_CN/latest/arduino/03.Control.html#if");
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['controls_if_elseif',
+ 'controls_if_else'], this));
+ // Assign 'this' to a variable for use in the tooltip closure below.
+ var thisBlock = this;
+ this.setTooltip(function () {
+ if (!thisBlock.elseifCount_ && !thisBlock.elseCount_) {
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_TOOLTIP_1;
+ } else if (!thisBlock.elseifCount_ && thisBlock.elseCount_) {
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_TOOLTIP_2;
+ } else if (thisBlock.elseifCount_ && !thisBlock.elseCount_) {
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_TOOLTIP_3;
+ } else if (thisBlock.elseifCount_ && thisBlock.elseCount_) {
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_TOOLTIP_4;
+ }
+ return '';
+ });
+ this.elseifCount_ = 0;
+ this.elseCount_ = 0;
+ },
+ /**
+ * Create XML to represent the number of else-if and else inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ if (!this.elseifCount_ && !this.elseCount_) {
+ return null;
+ }
+ var container = document.createElement('mutation');
+ if (this.elseifCount_) {
+ container.setAttribute('elseif', this.elseifCount_);
+ }
+ if (this.elseCount_) {
+ container.setAttribute('else', 1);
+ }
+ return container;
+ },
+ /**
+ * Parse XML to restore the else-if and else inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ var containerBlock = this;
+ var valueConnections = [];
+ var statementConnections = [];
+ // var elseStatementConnection = null;
+ if (this.elseCount_) {
+ // if (containerBlock.getInputTargetBlock('ELSE') && containerBlock.getInputTargetBlock('ELSE').previousConnection)
+ // elseStatementConnection = containerBlock.getInputTargetBlock('ELSE').previousConnection;
+ this.removeInput('ELSE');
+ }
+ for (var i = this.elseifCount_; i > 0; i--) {
+ if (containerBlock.getInputTargetBlock('IF' + i) && containerBlock.getInputTargetBlock('IF' + i).previousConnection)
+ valueConnections[i] = (containerBlock.getInputTargetBlock('IF' + i).previousConnection);
+ else
+ valueConnections[i] = null;
+ this.removeInput('IF' + i);
+ if (containerBlock.getInputTargetBlock('DO' + i) && containerBlock.getInputTargetBlock('DO' + i).previousConnection)
+ statementConnections[i] = (containerBlock.getInputTargetBlock('DO' + i).previousConnection);
+ else
+ statementConnections[i] = null;
+ this.removeInput('DO' + i);
+ }
+ this.elseifCount_ = parseInt(xmlElement.getAttribute('elseif'), 10);
+ this.elseCount_ = parseInt(xmlElement.getAttribute('else'), 10);
+ //this.compose(containerBlock);
+ for (var i = 1; i <= this.elseifCount_; i++) {
+ this.appendValueInput('IF' + i)
+ .setCheck([Boolean, Number])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_MSG_ELSEIF);
+ this.appendStatementInput('DO' + i)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_MSG_THEN);
+ }
+ if (this.elseCount_) {
+ this.appendStatementInput('ELSE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_MSG_ELSE);
+ }
+ for (var i = valueConnections.length - 2; i > 0; i--) {
+ if (valueConnections[i])
+ valueConnections[i].reconnect(this, 'IF' + i);
+ }
+ for (var i = statementConnections.length - 2; i > 0; i--) {
+ if (statementConnections[i])
+ statementConnections[i].reconnect(this, 'DO' + i);
+ }
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock = workspace.newBlock('controls_if_if');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 1; i <= this.elseifCount_; i++) {
+ var elseifBlock = workspace.newBlock('controls_if_elseif');
+ elseifBlock.initSvg();
+ connection.connect(elseifBlock.previousConnection);
+ connection = elseifBlock.nextConnection;
+ }
+ if (this.elseCount_) {
+ var elseBlock = workspace.newBlock('controls_if_else');
+ elseBlock.initSvg();
+ connection.connect(elseBlock.previousConnection);
+ }
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ // Disconnect the else input blocks and remove the inputs.
+ if (this.elseCount_) {
+ this.removeInput('ELSE');
+ }
+ this.elseCount_ = 0;
+ // Disconnect all the elseif input blocks and remove the inputs.
+ for (var i = this.elseifCount_; i > 0; i--) {
+ this.removeInput('IF' + i);
+ this.removeInput('DO' + i);
+ }
+ this.elseifCount_ = 0;
+ // Rebuild the block's optional inputs.
+ var clauseBlock = containerBlock.getInputTargetBlock('STACK');
+ var valueConnections = [null];
+ var statementConnections = [null];
+ var elseStatementConnection = null;
+ while (clauseBlock) {
+ switch (clauseBlock.type) {
+ case 'controls_if_elseif':
+ this.elseifCount_++;
+ valueConnections.push(clauseBlock.valueConnection_);
+ statementConnections.push(clauseBlock.statementConnection_);
+ break;
+ case 'controls_if_else':
+ this.elseCount_++;
+ elseStatementConnection = clauseBlock.statementConnection_;
+ break;
+ default:
+ throw Error('Unknown block type: ' + clauseBlock.type);
+ }
+ clauseBlock = clauseBlock.nextConnection &&
+ clauseBlock.nextConnection.targetBlock();
+ }
+
+ this.updateShape_();
+ // Reconnect any child blocks.
+ this.reconnectChildBlocks_(valueConnections, statementConnections, elseStatementConnection);
+
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ var clauseBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 1;
+ while (clauseBlock) {
+ switch (clauseBlock.type) {
+ case 'controls_if_elseif':
+ var inputIf = this.getInput('IF' + i);
+ var inputDo = this.getInput('DO' + i);
+ clauseBlock.valueConnection_ =
+ inputIf && inputIf.connection.targetConnection;
+ clauseBlock.statementConnection_ =
+ inputDo && inputDo.connection.targetConnection;
+ i++;
+ break;
+ case 'controls_if_else':
+ var inputDo = this.getInput('ELSE');
+ clauseBlock.statementConnection_ =
+ inputDo && inputDo.connection.targetConnection;
+ break;
+ default:
+ throw 'Unknown block type.';
+ }
+ clauseBlock = clauseBlock.nextConnection &&
+ clauseBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Reconstructs the block with all child blocks attached.
+ */
+ rebuildShape_: function () {
+ var valueConnections = [null];
+ var statementConnections = [null];
+ var elseStatementConnection = null;
+
+ if (this.getInput('ELSE')) {
+ elseStatementConnection = this.getInput('ELSE').connection.targetConnection;
+ }
+ var i = 1;
+ while (this.getInput('IF' + i)) {
+ var inputIf = this.getInput('IF' + i);
+ var inputDo = this.getInput('DO' + i);
+ console.log(inputIf.connection.targetConnection);
+ valueConnections.push(inputIf.connection.targetConnection);
+ statementConnections.push(inputDo.connection.targetConnection);
+ i++;
+ }
+ this.updateShape_();
+ this.reconnectChildBlocks_(valueConnections, statementConnections, elseStatementConnection);
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @this Blockly.Block
+ * @private
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('ELSE')) {
+ this.removeInput('ELSE');
+ }
+ var i = 1;
+ while (this.getInput('IF' + i)) {
+ this.removeInput('IF' + i);
+ this.removeInput('DO' + i);
+ i++;
+ }
+ // Rebuild block.
+ for (var i = 1; i <= this.elseifCount_; i++) {
+ this.appendValueInput('IF' + i)
+ .setCheck([Number, Boolean])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['CONTROLS_IF_MSG_ELSEIF']);
+ this.appendStatementInput('DO' + i)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['CONTROLS_IF_MSG_THEN']);
+ }
+ if (this.elseCount_) {
+ this.appendStatementInput('ELSE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['CONTROLS_IF_MSG_ELSE']);
+ }
+ },
+ /**
+ * Reconnects child blocks.
+ * @param {!Array} valueConnections List of value
+ * connectsions for if input.
+ * @param {!Array} statementConnections List of
+ * statement connections for do input.
+ * @param {?Blockly.RenderedConnection} elseStatementConnection Statement
+ * connection for else input.
+ */
+ reconnectChildBlocks_: function (valueConnections, statementConnections,
+ elseStatementConnection) {
+ for (var i = 1; i <= this.elseifCount_; i++) {
+ valueConnections[i] && blockly_core__WEBPACK_IMPORTED_MODULE_0__.Mutator.reconnect(this, 'IF' + i);
+ statementConnections[i] && statementConnections[i].reconnect(this, 'DO' + i);
+ }
+ elseStatementConnection && elseStatementConnection.reconnect(this, 'ELSE');
+ }
+};
+
+const controls_if_if = {
+ /**
+ * Mutator block for if container.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_IF_TITLE_IF);
+ this.appendStatementInput('STACK');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_IF_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const controls_if_elseif = {
+ /**
+ * Mutator bolck for else-if condition.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_ELSEIF_TITLE_ELSEIF);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_ELSEIF_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const controls_if_else = {
+ /**
+ * Mutator block for else condition.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_ELSE_TITLE_ELSE);
+ this.setPreviousStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_ELSE_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+
+const controls_end_program = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CONTROL_END_PROGRAM);
+ this.setPreviousStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CONTROL_END_PROGRAM);
+ }
+};
+
+
+const controls_forEach = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendValueInput('LIST')
+ .setCheck(['List', String])
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOREACH_INPUT);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOREACH_INPUT_ITEM)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('i'), 'VAR');
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_TOOLTIP.replace('%1',
+ thisBlock.getFieldValue('VAR'));
+ });
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+};
+
+const raw_block = {
+ // Container.
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.appendDummyInput()
+ .appendField('Code Block:');
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldMultilineInput('12345'), 'TEXT');
+ }
+};
+
+const base_type = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendValueInput("DATA")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_PYTHON_TYPE);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_PYTHON_TYPE);
+ }
+};
+
+const controls_TypeLists = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_CONTORL_GET_TYPE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_INT, "int"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_FLOAT, "float"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_STRING, "str"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_LIST, "list"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_TUPLE, "tuple"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_DICT, "dict"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD, "set"],
+ // [Blockly.Msg.MIXLY_MICROBIT_IMAGE,"image"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_NULL, "NoneType"]]), "type");
+ //整数、浮点数、字符串、列表、元组、字典、集合、图像不太对, unfinished
+ this.setInputsInline(true);
+ this.setOutput(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('type');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_controls_TypeLists;
+ var TOOLTIPS = {
+ 'int': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_INT,
+ 'float': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_FLOAT,
+ 'str': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_STRING,
+ 'list': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_LIST,
+ 'tuple': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_TUPLE,
+ 'dict': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_DICT,
+ 'set': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD,
+ 'image': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_IMAGE,
+ 'NoneType': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_NULL
+ };
+ return mode0 + TOOLTIPS[mode];
+ });
+ }
+};
+
+const controls_uname = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_CONTORL_UNAME);
+
+ this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_CONTORL_UNAME);
+ }
+};
+
+
+/***/ }),
+
+/***/ "../micropython/blocks/display.js":
+/*!****************************************!*\
+ !*** ../micropython/blocks/display.js ***!
+ \****************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ display_animate: () => (/* binding */ display_animate),
+/* harmony export */ display_blink_rate: () => (/* binding */ display_blink_rate),
+/* harmony export */ display_bright_point: () => (/* binding */ display_bright_point),
+/* harmony export */ display_bright_screen: () => (/* binding */ display_bright_screen),
+/* harmony export */ display_circle: () => (/* binding */ display_circle),
+/* harmony export */ display_clear: () => (/* binding */ display_clear),
+/* harmony export */ display_draw_4strings: () => (/* binding */ display_draw_4strings),
+/* harmony export */ display_fill: () => (/* binding */ display_fill),
+/* harmony export */ display_get_pixel: () => (/* binding */ display_get_pixel),
+/* harmony export */ display_get_screen_image: () => (/* binding */ display_get_screen_image),
+/* harmony export */ display_get_screen_pixel: () => (/* binding */ display_get_screen_pixel),
+/* harmony export */ display_help: () => (/* binding */ display_help),
+/* harmony export */ display_image_builtins: () => (/* binding */ display_image_builtins),
+/* harmony export */ display_image_create: () => (/* binding */ display_image_create),
+/* harmony export */ display_image_size: () => (/* binding */ display_image_size),
+/* harmony export */ display_line: () => (/* binding */ display_line),
+/* harmony export */ display_line_arbitrarily: () => (/* binding */ display_line_arbitrarily),
+/* harmony export */ display_matrix_use_i2c_init: () => (/* binding */ display_matrix_use_i2c_init),
+/* harmony export */ display_oled_drawPixel: () => (/* binding */ display_oled_drawPixel),
+/* harmony export */ display_oled_showBitmap: () => (/* binding */ display_oled_showBitmap),
+/* harmony export */ display_onoff: () => (/* binding */ display_onoff),
+/* harmony export */ display_rect: () => (/* binding */ display_rect),
+/* harmony export */ display_rgb_color: () => (/* binding */ display_rgb_color),
+/* harmony export */ display_scroll_string: () => (/* binding */ display_scroll_string),
+/* harmony export */ display_scroll_string_delay: () => (/* binding */ display_scroll_string_delay),
+/* harmony export */ display_scroll_string_extern: () => (/* binding */ display_scroll_string_extern),
+/* harmony export */ display_show_image: () => (/* binding */ display_show_image),
+/* harmony export */ display_show_image_or_string: () => (/* binding */ display_show_image_or_string),
+/* harmony export */ display_show_image_or_string_delay: () => (/* binding */ display_show_image_or_string_delay),
+/* harmony export */ display_show_static: () => (/* binding */ display_show_static),
+/* harmony export */ display_tm1650_power: () => (/* binding */ display_tm1650_power),
+/* harmony export */ display_tm1650_show_dot: () => (/* binding */ display_tm1650_show_dot),
+/* harmony export */ display_tm1650_show_num: () => (/* binding */ display_tm1650_show_num),
+/* harmony export */ display_tm_use_i2c_init: () => (/* binding */ display_tm_use_i2c_init),
+/* harmony export */ display_triangle: () => (/* binding */ display_triangle),
+/* harmony export */ display_use_i2c_init: () => (/* binding */ display_use_i2c_init),
+/* harmony export */ esp32_display_is_on: () => (/* binding */ esp32_display_is_on),
+/* harmony export */ esp32_display_off: () => (/* binding */ esp32_display_off),
+/* harmony export */ esp32_display_on: () => (/* binding */ esp32_display_on),
+/* harmony export */ esp32_display_scroll: () => (/* binding */ esp32_display_scroll),
+/* harmony export */ esp32_display_show_animation: () => (/* binding */ esp32_display_show_animation),
+/* harmony export */ esp32_display_show_default_image: () => (/* binding */ esp32_display_show_default_image),
+/* harmony export */ esp32_display_show_string: () => (/* binding */ esp32_display_show_string),
+/* harmony export */ group_lcd_init: () => (/* binding */ group_lcd_init),
+/* harmony export */ group_lcd_power: () => (/* binding */ group_lcd_power),
+/* harmony export */ group_lcd_print: () => (/* binding */ group_lcd_print),
+/* harmony export */ group_lcd_print2: () => (/* binding */ group_lcd_print2),
+/* harmony export */ image_arithmetic: () => (/* binding */ image_arithmetic),
+/* harmony export */ image_shift: () => (/* binding */ image_shift),
+/* harmony export */ microbit_display_show_image: () => (/* binding */ microbit_display_show_image),
+/* harmony export */ monitor_show_scroll_string: () => (/* binding */ monitor_show_scroll_string),
+/* harmony export */ monitor_show_string: () => (/* binding */ monitor_show_string)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const DISPLAY_HUE = 180;
+
+const FIELD_COLOUR_CONFIG = {
+ colourOptions: ['#f00', '#000'],
+ columns: 2
+};
+
+//var IMG = [["HEART", "HEART"],["HEART_SMALL", "HEART_SMALL"],["HAPPY", "HAPPY"],["SAD", "SAD"],["SMILE", "SMILE"],["SILLY", "SILLY"],["FABULOUS", "FABULOUS"],["SURPRISED", "SURPRISED"],["ASLEEP", "ASLEEP"],["ANGRY", "ANGRY"],["CONFUSED", "CONFUSED"],["NO", "NO"],["YES", "YES"],["LEFT_ARROW", "LEFT_ARROW"],["RIGHT_ARROW", "RIGHT_ARROW"],["DRESS", "DRESS"],["TRANSFORMERS", "TRANSFORMERS"],["SCISSORS", "SCISSORS"],["EXIT", "EXIT"],["TREE", "TREE"],["PACMAN", "PACMAN"],["TARGET", "TARGET"],["TSHIRT", "TSHIRT"],["ROLLERSKATE", "ROLLERSKATE"],["DUCK", "DUCK"],["HOUSE", "HOUSE"],["TORTOISE", "TORTOISE"],["BUTTERFLY", "BUTTERFLY"],["STICKFIGURE", "STICKFIGURE"],["GHOST", "GHOST"],["PITCHFORK", "PITCHFORK"],["MUSIC_QUAVERS", "MUSIC_QUAVERS"],["MUSIC_QUAVER", "MUSIC_QUAVER"],["MUSIC_CROTCHET", "MUSIC_CROTCHET"],["COW", "COW"],["RABBIT", "RABBIT"],["SQUARE_SMALL", "SQUARE_SMALL"],["SQUARE", "SQUARE"],["DIAMOND_SMALL", "DIAMOND_SMALL"],["DIAMOND", "DIAMOND"],["CHESSBOARD", "CHESSBOARD"],["TRIANGLE_LEFT", "TRIANGLE_LEFT"],["TRIANGLE", "TRIANGLE"],["SNAKE", "SNAKE"],["UMBRELLA", "UMBRELLA"],["SKULL", "SKULL"],["GIRAFFE", "GIRAFFE"],["SWORD", "SWORD"]];
+
+const display_clear = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_HUE,
+ "nextStatement": null,
+ "previousStatement": null,
+ "helpUrl": "https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.clear",
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Clear_display
+ });
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Clear_display);
+ }
+};
+
+const display_get_pixel = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);
+ this.appendValueInput('y')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_GET_POINT);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_BRIGHTNESS);
+ }
+};
+
+const display_bright_point = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_BRIGHTNESS)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);
+ this.appendValueInput('y')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);
+ this.appendValueInput("STAT")
+ .setCheck([Number, Boolean]);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_DISPLAY_SETPIXEL);
+ }
+};
+
+const monitor_show_string = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR_ONE_BY_ONE, 'show'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_SCROLL, 'scroll']]), "MODE")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('MODE');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR;
+ var TOOLTIPS = {
+ 'show': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR_ONE_BY_ONE,
+ 'scroll': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING
+ };
+ return TOOLTIPS[mode] + mode0;
+ });
+ }
+};
+
+const monitor_show_scroll_string = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR_ONE_BY_ONE, 'show'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_SCROLL, 'scroll']]), "MODE")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ // .setAlign(Blockly.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DELAY);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('MODE');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR;
+ var TOOLTIPS = {
+ 'show': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR_ONE_BY_ONE,
+ 'scroll': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING
+ };
+ return TOOLTIPS[mode] + mode0;
+ });
+ }
+};
+
+
+const display_show_static = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_SHOW_STATIC);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MUSIC_SHOW_STATIC);
+ }
+};
+
+const microbit_display_show_image = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('PIN', String)
+ .setCheck("esp32_image")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP);
+ }
+};
+
+
+
+const esp32_display_show_default_image = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_HUE,
+ "InputsInline": true,
+ "nextStatement": null,
+ "previousStatement": null,
+ "helpUrl": "https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.show",
+ "tooltip": "Show the referenced image on the display.",
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP,
+ "args0": [{
+ "name": "image",
+ "options": [["HEART", "HEART"], ["HEART_SMALL", "HEART_SMALL"], ["HAPPY", "HAPPY"], ["SAD", "SAD"], ["SMILE", "SMILE"], ["SILLY", "SILLY"], ["FABULOUS", "FABULOUS"], ["SURPRISED", "SURPRISED"], ["ASLEEP", "ASLEEP"], ["ANGRY", "ANGRY"], ["CONFUSED", "CONFUSED"], ["NO", "NO"], ["YES", "YES"], ["LEFT_ARROW", "LEFT_ARROW"], ["RIGHT_ARROW", "RIGHT_ARROW"], ["DRESS", "DRESS"], ["TRANSFORMERS", "TRANSFORMERS"], ["SCISSORS", "SCISSORS"], ["EXIT", "EXIT"], ["TREE", "TREE"], ["PACMAN", "PACMAN"], ["TARGET", "TARGET"], ["TSHIRT", "TSHIRT"], ["ROLLERSKATE", "ROLLERSKATE"], ["DUCK", "DUCK"], ["HOUSE", "HOUSE"], ["TORTOISE", "TORTOISE"], ["BUTTERFLY", "BUTTERFLY"], ["STICKFIGURE", "STICKFIGURE"], ["GHOST", "GHOST"], ["PITCHFORK", "PITCHFORK"], ["MUSIC_QUAVERS", "MUSIC_QUAVERS"], ["MUSIC_QUAVER", "MUSIC_QUAVER"], ["MUSIC_CROTCHET", "MUSIC_CROTCHET"], ["COW", "COW"], ["RABBIT", "RABBIT"], ["SQUARE_SMALL", "SQUARE_SMALL"], ["SQUARE", "SQUARE"], ["DIAMOND_SMALL", "DIAMOND_SMALL"], ["DIAMOND", "DIAMOND"], ["CHESSBOARD", "CHESSBOARD"], ["TRIANGLE_LEFT", "TRIANGLE_LEFT"], ["TRIANGLE", "TRIANGLE"], ["SNAKE", "SNAKE"], ["UMBRELLA", "UMBRELLA"], ["SKULL", "SKULL"], ["GIRAFFE", "GIRAFFE"], ["SWORD", "SWORD"]],
+ "type": "field_dropdown"
+ }
+ ]
+ });
+ }
+};
+
+
+const esp32_display_show_animation = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_HUE,
+ "inputsInline": true,
+ "nextStatement": null,
+ "previousStatement": null,
+ "helpUrl": "https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.show",
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Animate_images,
+ "args0": [{
+ "check": "List",
+ "type": "input_value",
+ "name": "images"
+ }, {
+ "type": "input_value",
+ "name": "delay"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "checked": true,
+ "type": "field_checkbox",
+ "name": "wait"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "checked": false,
+ "type": "field_checkbox",
+ "name": "loop"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "checked": false,
+ "type": "field_checkbox",
+ "name": "clear"
+ }
+ ]
+ });
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SHOW_delay + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Animate_images1);
+ }
+};
+
+const esp32_display_scroll = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_HUE,
+ "nextStatement": null,
+ "previousStatement": null,
+ "helpUrl": "https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.scroll",
+ "tooltip": "Scroll the referenced text across the display.",
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Scroll_message,
+ "args0": [{
+ "check": "String",
+ "type": "input_value",
+ "name": "message"
+ }
+ ]
+ });
+ }
+};
+
+const esp32_display_on = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_on_display, 'on'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_off_display, 'off']]), 'on_off')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_monitor);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('on_off');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_monitor;
+ var TOOLTIPS = {
+ 'on': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_on_display,
+ 'off': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_off_display
+ };
+ return TOOLTIPS[mode] + mode0;
+ });
+ }
+};
+
+const esp32_display_off = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_HUE,
+ "nextStatement": null,
+ "previousStatement": null,
+ "helpUrl": "https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.off",
+ "tooltip": "Turn off the display.",
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_off_display
+ });
+ }
+};
+
+const esp32_display_is_on = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_HUE,
+ "output": "Boolean",
+ "helpUrl": "https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.is_on",
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Display_is_on
+ });
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Display_is_on1);
+ }
+};
+
+const display_image_builtins = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_HUE,
+ "args0": [{
+ "name": "image",
+ "options": [["HEART", "HEART"], ["HEART_SMALL", "HEART_SMALL"], ["HAPPY", "HAPPY"], ["SAD", "SAD"], ["SMILE", "SMILE"], ["SILLY", "SILLY"], ["FABULOUS", "FABULOUS"], ["SURPRISED", "SURPRISED"], ["ASLEEP", "ASLEEP"], ["ANGRY", "ANGRY"], ["CONFUSED", "CONFUSED"], ["NO", "NO"], ["YES", "YES"], ["LEFT_ARROW", "LEFT_ARROW"], ["RIGHT_ARROW", "RIGHT_ARROW"], ["DRESS", "DRESS"], ["TRANSFORMERS", "TRANSFORMERS"], ["SCISSORS", "SCISSORS"], ["EXIT", "EXIT"], ["TREE", "TREE"], ["PACMAN", "PACMAN"], ["TARGET", "TARGET"], ["TSHIRT", "TSHIRT"], ["ROLLERSKATE", "ROLLERSKATE"], ["DUCK", "DUCK"], ["HOUSE", "HOUSE"], ["TORTOISE", "TORTOISE"], ["BUTTERFLY", "BUTTERFLY"], ["STICKFIGURE", "STICKFIGURE"], ["GHOST", "GHOST"], ["PITCHFORK", "PITCHFORK"], ["MUSIC_QUAVERS", "MUSIC_QUAVERS"], ["MUSIC_QUAVER", "MUSIC_QUAVER"], ["MUSIC_CROTCHET", "MUSIC_CROTCHET"], ["COW", "COW"], ["RABBIT", "RABBIT"], ["SQUARE_SMALL", "SQUARE_SMALL"], ["SQUARE", "SQUARE"], ["DIAMOND_SMALL", "DIAMOND_SMALL"], ["DIAMOND", "DIAMOND"], ["CHESSBOARD", "CHESSBOARD"], ["TRIANGLE_LEFT", "TRIANGLE_LEFT"], ["TRIANGLE", "TRIANGLE"], ["SNAKE", "SNAKE"], ["UMBRELLA", "UMBRELLA"], ["SKULL", "SKULL"], ["GIRAFFE", "GIRAFFE"], ["SWORD", "SWORD"]],
+ "type": "field_dropdown"
+ }
+ ],
+ "output": ["esp32_image", "List"],
+ "helpUrl": "https://microbit-micropython.readthedocs.io/en/latest/image.html#attributes",
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Built_in_image1,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Built_in_image
+ });
+ }
+};
+
+
+const display_image_create = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_HUE,
+ "args0": [{
+ "type": "input_dummy"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "00"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "01"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "02"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "03"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "04"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "05"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "06"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "07"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "08"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "09"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "0a"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "0b"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "0c"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "0d"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "0e"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "0f"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "10"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "11"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "12"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "13"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "14"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "15"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "16"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "17"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "18"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "19"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "1a"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "1b"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "1c"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "1d"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "1e"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "1f"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "20"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "21"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "22"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "23"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "24"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "25"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "26"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "27"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "28"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "29"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "2a"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "2b"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "2c"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "2d"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "2e"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "2f"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "30"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "31"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "32"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "33"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "34"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "35"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "36"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "37"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "38"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "39"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "3a"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "3b"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "3c"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "3d"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "3e"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "3f"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "40"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "41"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "42"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "43"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "44"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "45"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "46"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "47"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "48"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "49"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "4a"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "4b"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "4c"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "4d"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "4e"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "4f"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "50"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "51"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "52"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "53"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "54"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "55"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "56"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "57"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "58"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "59"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "5a"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "5b"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "5c"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "5d"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "5e"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "5f"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "60"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "61"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "62"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "63"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "64"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "65"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "66"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "67"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "68"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "69"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "6a"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "6b"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "6c"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "6d"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "6e"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "6f"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "70"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "71"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "72"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "73"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "74"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "75"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "76"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "77"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "78"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "79"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "7a"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "7b"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "7c"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "7d"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "7e"
+ }, {
+ "colour": "#000000",
+ "type": "field_colour",
+ "name": "7f"
+ }
+ ],
+ "output": "esp32_image",
+ "helpUrl": "https://microbit-micropython.readthedocs.io/en/latest/image.html#microbit.Image",
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_Create_image
+ });
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Create_image1);
+ }
+};
+
+
+
+const image_shift = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP, 'up'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN, 'down'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, 'left'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, 'right'],
+ ];
+ //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);
+ this.setColour(DISPLAY_HUE);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.appendValueInput('img')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET)
+ .setCheck(["esp32_image", "List", String]);
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.appendValueInput('val')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_SHIFT)
+ .setCheck(Number);
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_UNIT)
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET3;
+ var TOOLTIPS = {
+ 'up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP,
+ 'down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN,
+ 'left': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT,
+ 'right': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT
+ };
+ return mode0 + mode1 + TOOLTIPS[mode] + mode2;
+ });
+ }
+};
+
+const image_arithmetic = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_DISPLAY_UNION, '+'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_DISPLAY_MINUS, '-']
+ ];
+ //this.setHelpUrl(Blockly.Msg.MATH_ARITHMETIC_HELPURL);
+ this.setColour(DISPLAY_HUE);
+ this.setOutput(true, "esp32_image");
+ this.appendValueInput('A')
+ // .setCheck(["esp32_image", "List", String])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_DISPLAY_MERGE_SHAPE);
+ this.appendValueInput('B')
+ // .setCheck(["esp32_image", "List", String])
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ '+': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_image_add,
+ '-': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_image_reduce
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const esp32_display_show_string = {
+ init: function () {
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR_ONE_BY_ONE, 'show'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING, 'scroll']]), "MODE");
+ this.jsonInit({
+ "colour": DISPLAY_HUE,
+ "inputsInline": true,
+ "nextStatement": null,
+ "previousStatement": null,
+ "helpUrl": "https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.show",
+ "tooltip": "Display the list of images as an animation with a certain delay between each frame. Indicate if you need to wait before continuing, continuously loop the animation and clear the display when finished.",
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SHOW_STRING,
+ "args0": [{
+ "check": String,
+ "type": "input_value",
+ "name": "images"
+ }, {
+ "type": "input_value",
+ "name": "delay"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "checked": true,
+ "type": "field_checkbox",
+ "name": "wait"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "checked": false,
+ "type": "field_checkbox",
+ "name": "loop"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "checked": false,
+ "type": "field_checkbox",
+ "name": "clear"
+ }
+ ]
+ });
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('MODE');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SHOW_delay;
+ var TOOLTIPS = {
+ 'show': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR_ONE_BY_ONE,
+ 'scroll': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING
+ };
+ return mode1 + TOOLTIPS[mode] + mode0;
+ });
+ }
+};
+
+// export const esp32_display_scroll_string = {
+// init : function () {
+// this.jsonInit({
+// "colour" : DISPLAY_HUE,
+// "inputsInline": true,
+// "nextStatement" : null,
+// "previousStatement" : null,
+// "helpUrl" : "https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.show",
+// "tooltip" : "Display the list of images as an animation with a certain delay between each frame. Indicate if you need to wait before continuing, continuously loop the animation and clear the display when finished.",
+// "message0" : Blockly.Msg.MIXLY_MICROBIT_Scroll_string,
+// "args0" : [{
+// "check" : String,
+// "type" : "input_value",
+// "name" : "images"
+// }, {
+// "type" : "input_value",
+// "name" : "delay"
+// }, {
+// "type" : "input_dummy"
+// }, {
+// "checked" : true,
+// "type" : "field_checkbox",
+// "name" : "wait"
+// }, {
+// "type" : "input_dummy"
+// }, {
+// "checked" : false,
+// "type" : "field_checkbox",
+// "name" : "loop"
+// }, {
+// "type" : "input_dummy"
+// }, {
+// "checked" : false,
+// "type" : "field_checkbox",
+// "name" : "clear"
+// }
+// ]
+// });
+// }
+// };
+
+const group_lcd_print = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput("TEXT", String)
+ .setCheck([String, Number])
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DF_LCD)
+ .appendField('mylcd')
+ //.appendField(new Blockly.FieldTextInput('mylcd'), 'VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_PRINT1);
+ this.appendValueInput("TEXT2", String)
+ .setCheck([String, Number])
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_PRINT2);
+ /*
+ this.appendValueInput("TEXT3", String)
+ .setCheck([String,Number])
+ .setAlign(Blockly.inputs.Align.RIGHT)
+ .appendField(Blockly.Msg.MIXLY_LCD_PRINT3);
+ this.appendValueInput("TEXT4", String)
+ .setCheck([String,Number])
+ .setAlign(Blockly.inputs.Align.RIGHT)
+ .appendField(Blockly.Msg.MIXLY_LCD_PRINT4);
+ */
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_PRINT4_TOOLTIP);
+ }
+};
+
+const group_lcd_init = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('device')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DF_LCD)
+ .appendField('1602')
+ .appendField('mylcd')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_ADDRESS);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DF_LCD + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_ADDRESS);
+ }
+};
+
+const group_lcd_print2 = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput("row", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DF_LCD)
+ .appendField('mylcd')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_ROW);
+ this.appendValueInput("column", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_COLUMN);
+ this.appendValueInput("TEXT", String)
+ .setCheck([String, Number])
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_PRINT);
+ this.setPreviousStatement(true, null);
+ this.setInputsInline(true);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_PRINT3_TOOLTIP);
+ }
+};
+
+const group_lcd_power = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DF_LCD)
+ .appendField('mylcd')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ON, "on()"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OFF, "off()"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_STAT_CLEAR, "clear()"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_NOBACKLIGHT, "backlight(off)"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_BACKLIGHT, "backlight(on)"]]), "STAT");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('STAT');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DF_LCD;
+ var TOOLTIPS = {
+ 'on()': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ON,
+ 'off()': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OFF,
+ 'clear()': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_STAT_CLEAR,
+ 'backlight(off)': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_NOBACKLIGHT,
+ 'backlight(on)': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_BACKLIGHT
+ };
+ return mode0 + mode1 + TOOLTIPS[mode];
+ });
+ }
+};
+
+// export const oled_init = {
+// init: function() {
+// this.setColour(DISPLAY_HUE);
+// this.appendValueInput('VAR')
+// .appendField(Blockly.Msg.OLED)
+// .setCheck("var");
+// this.appendValueInput("RX", Number)
+// //.appendField(Blockly.Msg.MIXLY_SETUP)
+// // .appendField(Blockly.Msg.OLED)
+// // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')
+// .appendField(Blockly.Msg.MIXLY_SETUP)
+// .appendField("sda")
+// .setCheck(Number)
+// .setAlign(Blockly.inputs.Align.RIGHT);
+// this.appendValueInput("TX", Number)
+// .appendField("scl")
+// .setCheck(Number)
+// .setAlign(Blockly.inputs.Align.RIGHT);
+// this.appendValueInput('freq')
+// .setCheck(Number)
+// .appendField(Blockly.Msg.MIXLY_FREQUENCY)
+// .setAlign(Blockly.inputs.Align.RIGHT);
+// this.setPreviousStatement(true, null);
+// this.setNextStatement(true, null);
+// this.setInputsInline(true);
+// }
+// };
+
+const display_use_i2c_init = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('I2CSUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "I2C")
+ .setCheck("var");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ // this.appendDummyInput("")
+ // .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO + "OLED")
+ // .appendField(new Blockly.FieldDropdown([
+ // ["OLED 128¡Á64", "OLED 128¡Á64"]
+ // ]), "key");
+ this.appendValueInput('row')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO + "OLED")
+ .setCheck(Number);
+ this.appendValueInput('column')
+ .appendField("X")
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip();
+ }
+};
+
+const display_draw_4strings = {
+ init: function () {
+ // this.appendDummyInput()
+ // .appendField(Blockly.Msg.OLED)
+ // this.appendDummyInput("")
+ // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')
+ // .appendField(Blockly.Msg.OLEDDISPLAY);
+ //.appendField(new Blockly.FieldImage(Blockly.pathToBlockly + 'blocks/display-oled-128x64-i2c/display-oled-128x64-i2c.jpg', Blockly.Arduino.imageSize, Blockly.Arduino.imageSize));
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ .setCheck("var");
+ this.appendValueInput("Text_line1", 'String')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLEDDISPLAY + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.line1);
+ this.appendValueInput("Text_line2", 'String')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.line2);
+ this.appendValueInput("Text_line3", 'String')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.line3);
+ this.appendValueInput("Text_line4", 'String')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.line4);
+ this.setInputsInline(false);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setColour(DISPLAY_HUE);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DF_LCD + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLEDDISPLAY + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_STRING);
+ }
+};
+
+const display_image_size = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HEIGHT, 'height'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIDTH, 'width']
+ ];
+ this.setColour(DISPLAY_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_IMAGE);
+ this.appendValueInput('VAR')
+ .setCheck("esp32_image")
+ // .appendField(Blockly.Msg.blockpy_USE_LIST);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setInputsInline(true);
+ this.setOutput(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_IMAGE
+ var TOOLTIPS = {
+ 'height': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HEIGHT,
+ 'width': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIDTH,
+ };
+ return mode0 + mode1 + TOOLTIPS[mode];
+ });
+ }
+};
+
+const display_rect = {
+ init: function () {
+ var brightness_or_not = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_ON, '1'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_OFF, '0']
+ ];
+ this.setColour(DISPLAY_HUE);
+ // this.appendDummyInput()
+ // .appendField(Blockly.Msg.OLED)
+ // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RECT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(brightness_or_not), 'OP')
+
+ // this.appendValueInput("PIN", Number)
+ // .setCheck(Number)
+ // .setAlign(Blockly.inputs.Align.RIGHT)
+ // .appendField(Blockly.Msg.MIXLY_PIN);
+ this.jsonInit({
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SHOW_RECT,
+ "args0": [{
+ "check": Number,
+ "type": "input_value",
+ "name": "x"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "width"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "height"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "checked": false,
+ "type": "field_checkbox",
+ "name": "fill"
+ }
+ ]
+ });
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OLED_RECT);
+ }
+};
+
+const display_line = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ // this.appendDummyInput()
+ // .appendField(Blockly.Msg.OLED)
+ // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ .setCheck("var");
+ // this.appendValueInput("PIN", Number)
+ // .setCheck(Number)
+ // .setAlign(Blockly.inputs.Align.RIGHT)
+ // .appendField(Blockly.Msg.MIXLY_PIN);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DISPLAY_DRAW)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DISPLAY_RLINE, "hline"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DISPLAY_VLINE, "vline"]]), "direction");
+ this.jsonInit({
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SHOW_LINE,
+ "args0": [{
+ "check": Number,
+ "type": "input_value",
+ "name": "x"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "length"
+ }
+ ]
+ });
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OLED_LINE);
+ }
+};
+
+const display_line_arbitrarily = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ // this.appendDummyInput()
+ // .appendField(Blockly.Msg.OLED)
+ // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ .setCheck("var");
+ // this.appendValueInput("PIN", Number)
+ // .setCheck(Number)
+ // .setAlign(Blockly.inputs.Align.RIGHT)
+ // .appendField(Blockly.Msg.MIXLY_PIN);
+ this.jsonInit({
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SHOW_LINE_ARBITRARILY,
+ "args0": [{
+ "check": Number,
+ "type": "input_value",
+ "name": "x1"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y1"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "x2"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y2"
+ },
+ ]
+ });
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OLED_LINE_ARBIT);
+ }
+}
+
+const display_get_screen_pixel = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);
+ }
+};
+
+const display_get_screen_image = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_GET_SCREEN_IMAGE);
+ this.setInputsInline(true);
+ this.setOutput(true, "esp32_image");
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_GET_SCREEN_IMAGE_TOOLTIP);
+ }
+};
+
+const display_bright_screen = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS);
+ }
+};
+
+const display_blink_rate = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_BLINK_RATE)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_BLINK_RATE);
+ }
+};
+
+const display_rgb_color = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ // this.appendValueInput("PIN", Number)
+ // .setCheck(Number)
+ // .setAlign(Blockly.inputs.Align.RIGHT)
+ // .appendField(Blockly.Msg.MIXLY_PIN);
+ this.appendValueInput("_LED_")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_AS)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldColour('#f00', null, FIELD_COLOUR_CONFIG), 'FIELDNAME');
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B);
+ }
+};
+
+const display_show_image_or_string = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('data')
+ .setCheck([String, "esp32_image", "List", 'Tuple'])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_OR_ANIMATION);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP_OR_STRING);
+ }
+};
+
+const display_scroll_string = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const display_show_image_or_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('data')
+ .setCheck([String, "esp32_image", "List", 'Tuple'])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_OR_ANIMATION);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY);
+ }
+};
+
+const display_scroll_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SCROLL_IMAGE_OR_STRING_DELAY);
+ }
+};
+
+const display_onoff = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ON, "ON"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_OFF, "OFF"]]), 'ONOFF')
+ this.setOutput(true, Boolean);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
+ }
+};
+
+// export const switch = {
+// init: function () {
+// this.setColour(DISPLAY_HUE);
+// this.appendDummyInput("")
+// .appendField(new Blockly.FieldDropdown([
+// [Blockly.Msg.MIXLY_ESP32_ON, "1"],
+// [Blockly.Msg.MIXLY_ESP32_OFF, "0"]
+// ]), "flag");
+// this.setOutput(true);
+// this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
+// }
+// };
+
+const display_fill = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('SUB');
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_STAT_CLEAR, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL, "1"]
+ ]), "key");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var TOOLTIPS = {
+ '0': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_STAT_CLEAR,
+ '1': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL
+ };
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DF_LCD + TOOLTIPS[mode];
+ });
+ }
+};
+
+const display_tm_use_i2c_init = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('I2CSUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "I2C")
+ .setCheck("var");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ // ["MPU9250", "MPU9250"],
+ // ["TM1637", "TM1637"],
+ ["TM1650", "TM1650"]
+ ]), "key");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_USE_I2C_TOOLTIP;
+ var TOOLTIPS = {
+ // "MPU9250": "MPU9250",
+ // "TM1637": "TM1637",
+ "TM1650": "TM1650"
+ };
+ return mode0 + TOOLTIPS[mode]
+ });
+ }
+};
+
+const display_tm1650_power = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["TM1650", "tm1650"]]), "TYPE");
+ this.appendValueInput("VAR")
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ON, "_on"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OFF, "_off"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_STAT_CLEAR, "_clear"]]), "STAT");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_4digitdisplay_power);
+ }
+};
+
+const display_tm1650_show_num = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["TM1650", "tm1650"]]), "TYPE");
+ this.appendValueInput("VAR")
+ this.appendValueInput("VALUE")
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SHOW_NUMBER);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ // this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_4digitdisplay_displayString);
+ }
+};
+
+const display_tm1650_show_dot = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["TM1650", "tm1650"]]), "TYPE");
+ this.appendValueInput("VAR")
+ this.appendValueInput("NO")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_NOMBER1)
+ this.appendValueInput("STAT")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_NOMBER2 + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_DOT)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_4digitdisplay_showDot);
+ }
+};
+
+const display_animate = {
+ init: function () {
+ var ANIMATE = [
+ ["ALL_CLOCKS", 'ALL_CLOCKS'],
+ ["ALL_ARROWS", 'ALL_ARROWS']
+ ];
+ this.setColour(DISPLAY_HUE);
+ this.setOutput(true, 'Tuple');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_DISPLAY_ANIMATE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(ANIMATE), 'ANIMATION')
+ //this.setTooltip(Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP);
+ }
+};
+
+const display_circle = {
+ init: function () {
+ var brightness_or_not = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_ON, '1'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_OFF, '0']
+ ];
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TURTLE_DRAW_CIRCLE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(brightness_or_not), 'OP')
+ this.jsonInit({
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANBIT_SHOW_CIRCLE,
+ "args0": [{
+ "check": Number,
+ "type": "input_value",
+ "name": "x"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "r"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "checked": false,
+ "type": "field_checkbox",
+ "name": "fill"
+ }
+ ]
+ });
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TURTLE_DRAW_CIRCLE);
+ }
+};
+
+const display_triangle = {
+ init: function () {
+ var brightness_or_not = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_ON, '1'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_OFF, '0']
+ ];
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DISPLAY_DRAW + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANBIT_DRAW_TRIANGLE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(brightness_or_not), 'OP')
+ this.jsonInit({
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANBIT_SHOW_triangle,
+ "args0": [{
+ "check": Number,
+ "type": "input_value",
+ "name": "x0"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y0"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "x1"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y1"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "x2"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y2"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "checked": false,
+ "type": "field_checkbox",
+ "name": "fill"
+ }
+ ]
+ });
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DISPLAY_DRAW + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANBIT_DRAW_TRIANGLE);
+ }
+};
+
+const display_help = {
+ init: function () {
+ this.setColour('#555555');
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_ONBOARDDISPLAY_HELP);
+ this.setInputsInline(true);
+ this.setTooltip('');
+ }
+};
+
+//显示-OLED-显示图像
+const display_oled_showBitmap = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP);
+ this.appendValueInput("START_X", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_START_X)
+ .setCheck(Number);
+ this.appendValueInput("START_Y", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_START_Y)
+ .setCheck(Number);
+ this.appendValueInput("bitmap_name", String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP_NAME);
+ this.appendValueInput("WIDTH", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIDTH)
+ .setCheck(Number);
+ this.appendValueInput("HEIGHT", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HEIGHT)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_SHOW_BMP_TOOLTIP);
+ }
+};
+
+//显示-OLED-画点
+const display_oled_drawPixel = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWPIXEL);
+ this.appendValueInput("POS_X")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_POSX)
+ this.appendValueInput("POS_Y")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_POSY)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAW_PIXE_TOOLTIP);
+ }
+};
+
+//pe:
+const display_matrix_use_i2c_init = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('I2CSUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "I2C")
+ .setCheck("var");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["32x12 Matrix", "32x12 Matrix"]
+ ]), "key");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+
+
+ }
+};
+
+const display_show_image = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('SUB')
+ this.appendValueInput('data')
+ .setCheck([String, "esp32_image", "List", 'Tuple'])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP_OR_STRING);
+ }
+};
+
+const display_scroll_string_extern = {
+ init: function () {
+ this.setColour(DISPLAY_HUE);
+ this.appendValueInput('SUB');
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+
+
+/***/ }),
+
+/***/ "../micropython/blocks/display_extern.js":
+/*!***********************************************!*\
+ !*** ../micropython/blocks/display_extern.js ***!
+ \***********************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ display_animate: () => (/* binding */ display_animate),
+/* harmony export */ display_blink_rate: () => (/* binding */ display_blink_rate),
+/* harmony export */ display_circle: () => (/* binding */ display_circle),
+/* harmony export */ display_color_seclet: () => (/* binding */ display_color_seclet),
+/* harmony export */ display_draw_4strings: () => (/* binding */ display_draw_4strings),
+/* harmony export */ display_fill: () => (/* binding */ display_fill),
+/* harmony export */ display_get_screen_image: () => (/* binding */ display_get_screen_image),
+/* harmony export */ display_help: () => (/* binding */ display_help),
+/* harmony export */ display_image_size: () => (/* binding */ display_image_size),
+/* harmony export */ display_lcd_use_i2c_init: () => (/* binding */ display_lcd_use_i2c_init),
+/* harmony export */ display_line: () => (/* binding */ display_line),
+/* harmony export */ display_line_arbitrarily: () => (/* binding */ display_line_arbitrarily),
+/* harmony export */ display_matrix_extern_bright_point: () => (/* binding */ display_matrix_extern_bright_point),
+/* harmony export */ display_matrix_extern_bright_screen: () => (/* binding */ display_matrix_extern_bright_screen),
+/* harmony export */ display_matrix_extern_clear: () => (/* binding */ display_matrix_extern_clear),
+/* harmony export */ display_matrix_extern_get_pixel: () => (/* binding */ display_matrix_extern_get_pixel),
+/* harmony export */ display_matrix_extern_get_screen_pixel: () => (/* binding */ display_matrix_extern_get_screen_pixel),
+/* harmony export */ display_matrix_extern_image_builtins: () => (/* binding */ display_matrix_extern_image_builtins),
+/* harmony export */ display_matrix_extern_scroll_string: () => (/* binding */ display_matrix_extern_scroll_string),
+/* harmony export */ display_matrix_extern_scroll_string_delay: () => (/* binding */ display_matrix_extern_scroll_string_delay),
+/* harmony export */ display_matrix_extern_shift: () => (/* binding */ display_matrix_extern_shift),
+/* harmony export */ display_matrix_extern_show_frame_string: () => (/* binding */ display_matrix_extern_show_frame_string),
+/* harmony export */ display_matrix_extern_show_frame_string_delay: () => (/* binding */ display_matrix_extern_show_frame_string_delay),
+/* harmony export */ display_matrix_extern_show_image: () => (/* binding */ display_matrix_extern_show_image),
+/* harmony export */ display_matrix_extern_show_image_or_string_delay: () => (/* binding */ display_matrix_extern_show_image_or_string_delay),
+/* harmony export */ display_matrix_use_i2c_init: () => (/* binding */ display_matrix_use_i2c_init),
+/* harmony export */ display_oled_drawPixel: () => (/* binding */ display_oled_drawPixel),
+/* harmony export */ display_oled_showBitmap: () => (/* binding */ display_oled_showBitmap),
+/* harmony export */ display_oled_use_i2c_init: () => (/* binding */ display_oled_use_i2c_init),
+/* harmony export */ display_onoff: () => (/* binding */ display_onoff),
+/* harmony export */ display_rect: () => (/* binding */ display_rect),
+/* harmony export */ display_rgb_color: () => (/* binding */ display_rgb_color),
+/* harmony export */ display_tm1650_power: () => (/* binding */ display_tm1650_power),
+/* harmony export */ display_tm1650_set_brightness: () => (/* binding */ display_tm1650_set_brightness),
+/* harmony export */ display_tm1650_show_dot: () => (/* binding */ display_tm1650_show_dot),
+/* harmony export */ display_tm1650_show_num: () => (/* binding */ display_tm1650_show_num),
+/* harmony export */ display_tm_use_i2c_init: () => (/* binding */ display_tm_use_i2c_init),
+/* harmony export */ display_triangle: () => (/* binding */ display_triangle),
+/* harmony export */ display_use_i2c_init: () => (/* binding */ display_use_i2c_init),
+/* harmony export */ extern_oled_bright_point: () => (/* binding */ extern_oled_bright_point),
+/* harmony export */ extern_oled_clear: () => (/* binding */ extern_oled_clear),
+/* harmony export */ extern_oled_get_pixel: () => (/* binding */ extern_oled_get_pixel),
+/* harmony export */ extern_oled_hvline: () => (/* binding */ extern_oled_hvline),
+/* harmony export */ extern_oled_line: () => (/* binding */ extern_oled_line),
+/* harmony export */ extern_oled_scroll_string: () => (/* binding */ extern_oled_scroll_string),
+/* harmony export */ extern_oled_scroll_string_delay: () => (/* binding */ extern_oled_scroll_string_delay),
+/* harmony export */ extern_oled_shape_rect: () => (/* binding */ extern_oled_shape_rect),
+/* harmony export */ extern_oled_shift: () => (/* binding */ extern_oled_shift),
+/* harmony export */ extern_oled_show_frame_string: () => (/* binding */ extern_oled_show_frame_string),
+/* harmony export */ extern_oled_show_frame_string_delay: () => (/* binding */ extern_oled_show_frame_string_delay),
+/* harmony export */ extern_oled_show_image: () => (/* binding */ extern_oled_show_image),
+/* harmony export */ extern_oled_show_image_or_string_delay: () => (/* binding */ extern_oled_show_image_or_string_delay),
+/* harmony export */ extern_oled_show_image_xy: () => (/* binding */ extern_oled_show_image_xy),
+/* harmony export */ extern_oled_show_string: () => (/* binding */ extern_oled_show_string),
+/* harmony export */ lcd_backlight: () => (/* binding */ lcd_backlight),
+/* harmony export */ lcd_clear: () => (/* binding */ lcd_clear),
+/* harmony export */ lcd_print_string: () => (/* binding */ lcd_print_string),
+/* harmony export */ lcd_show_image_or_string_delay: () => (/* binding */ lcd_show_image_or_string_delay),
+/* harmony export */ matrix_extern_image_arithmetic: () => (/* binding */ matrix_extern_image_arithmetic),
+/* harmony export */ matrix_extern_image_invert: () => (/* binding */ matrix_extern_image_invert),
+/* harmony export */ tft_fill: () => (/* binding */ tft_fill),
+/* harmony export */ tft_line_arbitrarily: () => (/* binding */ tft_line_arbitrarily),
+/* harmony export */ tft_scroll_string_delay: () => (/* binding */ tft_scroll_string_delay),
+/* harmony export */ tft_show_frame_string_delay: () => (/* binding */ tft_show_frame_string_delay),
+/* harmony export */ tft_show_image_or_string_delay: () => (/* binding */ tft_show_image_or_string_delay),
+/* harmony export */ tft_show_image_xy: () => (/* binding */ tft_show_image_xy),
+/* harmony export */ tft_use_spi_init: () => (/* binding */ tft_use_spi_init)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const DISPLAY_EXTERN_HUE = '5BA5A5';
+
+//var IMG = [["HEART", "HEART"],["HEART_SMALL", "HEART_SMALL"],["HAPPY", "HAPPY"],["SAD", "SAD"],["SMILE", "SMILE"],["SILLY", "SILLY"],["FABULOUS", "FABULOUS"],["SURPRISED", "SURPRISED"],["ASLEEP", "ASLEEP"],["ANGRY", "ANGRY"],["CONFUSED", "CONFUSED"],["NO", "NO"],["YES", "YES"],["LEFT_ARROW", "LEFT_ARROW"],["RIGHT_ARROW", "RIGHT_ARROW"],["DRESS", "DRESS"],["TRANSFORMERS", "TRANSFORMERS"],["SCISSORS", "SCISSORS"],["EXIT", "EXIT"],["TREE", "TREE"],["PACMAN", "PACMAN"],["TARGET", "TARGET"],["TSHIRT", "TSHIRT"],["ROLLERSKATE", "ROLLERSKATE"],["DUCK", "DUCK"],["HOUSE", "HOUSE"],["TORTOISE", "TORTOISE"],["BUTTERFLY", "BUTTERFLY"],["STICKFIGURE", "STICKFIGURE"],["GHOST", "GHOST"],["PITCHFORK", "PITCHFORK"],["MUSIC_QUAVERS", "MUSIC_QUAVERS"],["MUSIC_QUAVER", "MUSIC_QUAVER"],["MUSIC_CROTCHET", "MUSIC_CROTCHET"],["COW", "COW"],["RABBIT", "RABBIT"],["SQUARE_SMALL", "SQUARE_SMALL"],["SQUARE", "SQUARE"],["DIAMOND_SMALL", "DIAMOND_SMALL"],["DIAMOND", "DIAMOND"],["CHESSBOARD", "CHESSBOARD"],["TRIANGLE_LEFT", "TRIANGLE_LEFT"],["TRIANGLE", "TRIANGLE"],["SNAKE", "SNAKE"],["UMBRELLA", "UMBRELLA"],["SKULL", "SKULL"],["GIRAFFE", "GIRAFFE"],["SWORD", "SWORD"]];
+// var IMG = [["HEART", "HEART"], ["HEART_SMALL", "HEART_SMALL"], ["HAPPY", "HAPPY"], ["SAD", "SAD"], ["SMILE", "SMILE"], ["SILLY", "SILLY"], ["FABULOUS", "FABULOUS"], ["SURPRISED", "SURPRISED"], ["ASLEEP", "ASLEEP"], ["ANGRY", "ANGRY"], ["CONFUSED", "CONFUSED"], ["NO", "NO"], ["YES", "YES"]];
+
+
+
+
+
+const display_matrix_use_i2c_init = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('I2CSUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "I2C")
+ .setCheck("var");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["32x12 Matrix", "32x12 Matrix"],
+ ["16x8 Matrix", "16x8 Matrix"]
+ ]), "key");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+
+
+ }
+};
+
+const display_matrix_extern_show_image = {
+ init: function () {
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('data')
+ .setCheck([String, "esp32_image", "List", 'Tuple'])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP_OR_STRING);
+ }
+};
+
+const display_matrix_extern_show_image_or_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR);
+ this.appendValueInput("space")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CENTER)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_YES, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_NO, "False"]
+ ]), 'center')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY);
+ }
+};
+
+const display_matrix_extern_scroll_string = {
+ init: function () {
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const display_matrix_extern_scroll_string_delay = {
+ init: function () {
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);
+ this.appendValueInput("space")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SCROLL_IMAGE_OR_STRING_DELAY);
+ }
+};
+
+const display_matrix_extern_show_frame_string = {
+ init: function () {
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const display_matrix_extern_show_frame_string_delay = {
+ init: function () {
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const display_matrix_extern_shift = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP, 'shift_up'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN, 'shift_down'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, 'shift_left'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, 'shift_right'],
+ ];
+ //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.setColour(DISPLAY_EXTERN_HUE);
+ // this.setOutput(true);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET)
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.appendValueInput('val')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_SHIFT)
+ .setCheck(Number);
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_UNIT)
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET3;
+ var TOOLTIPS = {
+ 'up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP,
+ 'down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN,
+ 'left': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT,
+ 'right': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT
+ };
+ return mode0 + mode1 + TOOLTIPS[mode] + mode2;
+ });
+ }
+};
+
+const display_matrix_extern_get_pixel = {
+ init: function () {
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);
+ this.appendValueInput('y')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_GET_POINT);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_BRIGHTNESS);
+ }
+};
+
+const display_matrix_extern_bright_point = {
+ init: function () {
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_BRIGHTNESS)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);
+ this.appendValueInput('y')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);
+ this.appendValueInput("STAT")
+ .setCheck([Number, Boolean]);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_DISPLAY_SETPIXEL);
+ }
+};
+
+const display_matrix_extern_get_screen_pixel = {
+ init: function () {
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);
+ }
+};
+
+const display_matrix_extern_bright_screen = {
+ init: function () {
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS + ' 0.0-1.0');
+ }
+};
+
+const display_matrix_extern_clear = {
+ init: function () {
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Clear_display);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Clear_display);
+ }
+};
+
+
+const display_matrix_extern_image_builtins = {
+ init: function () {
+ var OPERATORS =
+ [["HEART", "HEART"], ["HEART_SMALL", "HEART_SMALL"], ["HAPPY", "HAPPY"], ["SAD", "SAD"], ["SMILE", "SMILE"], ["SILLY", "SILLY"], ["FABULOUS", "FABULOUS"], ["SURPRISED", "SURPRISED"], ["ASLEEP", "ASLEEP"], ["ANGRY", "ANGRY"], ["CONFUSED", "CONFUSED"], ["NO", "NO"], ["YES", "YES"]
+ // ,["LEFT_ARROW", "LEFT_ARROW"],["RIGHT_ARROW", "RIGHT_ARROW"],["DRESS", "DRESS"],["TRANSFORMERS", "TRANSFORMERS"],["SCISSORS", "SCISSORS"],["EXIT", "EXIT"],["TREE", "TREE"],["PACMAN", "PACMAN"],["TARGET", "TARGET"],["TSHIRT", "TSHIRT"],["ROLLERSKATE", "ROLLERSKATE"],["DUCK", "DUCK"],["HOUSE", "HOUSE"],["TORTOISE", "TORTOISE"],["BUTTERFLY", "BUTTERFLY"],["STICKFIGURE", "STICKFIGURE"],["GHOST", "GHOST"],["PITCHFORK", "PITCHFORK"],["MUSIC_QUAVERS", "MUSIC_QUAVERS"],["MUSIC_QUAVER", "MUSIC_QUAVER"],["MUSIC_CROTCHET", "MUSIC_CROTCHET"],["COW", "COW"],["RABBIT", "RABBIT"],["SQUARE_SMALL", "SQUARE_SMALL"],["SQUARE", "SQUARE"],["DIAMOND_SMALL", "DIAMOND_SMALL"],["DIAMOND", "DIAMOND"],["CHESSBOARD", "CHESSBOARD"],["TRIANGLE_LEFT", "TRIANGLE_LEFT"],["TRIANGLE", "TRIANGLE"],["SNAKE", "SNAKE"],["UMBRELLA", "UMBRELLA"],["SKULL", "SKULL"],["GIRAFFE", "GIRAFFE"],["SWORD", "SWORD"]
+ ];
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Built_in_image1)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'image');
+ this.setOutput(true, "esp32_image");
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Clear_display);
+ }
+};
+
+
+const matrix_extern_image_arithmetic = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_DISPLAY_UNION, 'add'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_DISPLAY_MINUS, 'sub']
+ ];
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.setOutput(true, "esp32_image");
+ this.appendValueInput('A')
+ // .setCheck(["esp32_image", "List", String])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_DISPLAY_MERGE_SHAPE);
+ this.appendValueInput('B')
+ // .setCheck(["esp32_image", "List", String])
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ '+': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_image_add,
+ '-': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_image_reduce
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const matrix_extern_image_invert = {
+ init: function () {
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('A')
+ .setCheck("esp32_image")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Invert_image1);
+ this.setInputsInline(true);
+ this.setOutput(true, "esp32_image");
+ }
+};
+
+//oled
+const display_use_i2c_init = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('I2CSUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "I2C")
+ .setCheck("var");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ // this.appendDummyInput("")
+ // .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO + "OLED")
+ // .appendField(new Blockly.FieldDropdown([
+ // ["OLED 128¡Á64", "OLED 128¡Á64"]
+ // ]), "key");
+ this.appendValueInput('row')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO + "OLED")
+ .setCheck(Number);
+ this.appendValueInput('column')
+ .appendField("X")
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip();
+ }
+};
+
+const display_draw_4strings = {
+ init: function () {
+ // this.appendDummyInput()
+ // .appendField(Blockly.Msg.OLED)
+ // this.appendDummyInput("")
+ // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')
+ // .appendField(Blockly.Msg.OLEDDISPLAY);
+ //.appendField(new Blockly.FieldImage(Blockly.pathToBlockly + 'blocks/display-oled-128x64-i2c/display-oled-128x64-i2c.jpg', Blockly.Arduino.imageSize, Blockly.Arduino.imageSize));
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ .setCheck("var");
+ this.appendValueInput("Text_line1", 'String')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLEDDISPLAY + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.line1);
+ this.appendValueInput("Text_line2", 'String')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.line2);
+ this.appendValueInput("Text_line3", 'String')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.line3);
+ this.appendValueInput("Text_line4", 'String')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.line4);
+ this.setInputsInline(false);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DF_LCD + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLEDDISPLAY + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_STRING);
+ }
+};
+
+const display_image_size = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HEIGHT, 'height'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIDTH, 'width']
+ ];
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_IMAGE);
+ this.appendValueInput('VAR')
+ .setCheck("esp32_image")
+ // .appendField(Blockly.Msg.blockpy_USE_LIST);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setInputsInline(true);
+ this.setOutput(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_IMAGE
+ var TOOLTIPS = {
+ 'height': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HEIGHT,
+ 'width': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIDTH,
+ };
+ return mode0 + mode1 + TOOLTIPS[mode];
+ });
+ }
+};
+
+const display_rect = {
+ init: function () {
+ var brightness_or_not = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_ON, '1'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_OFF, '0']
+ ];
+ this.setColour(DISPLAY_EXTERN_HUE);
+ // this.appendDummyInput()
+ // .appendField(Blockly.Msg.OLED)
+ // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RECT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(brightness_or_not), 'OP')
+
+ // this.appendValueInput("PIN", Number)
+ // .setCheck(Number)
+ // .setAlign(Blockly.inputs.Align.RIGHT)
+ // .appendField(Blockly.Msg.MIXLY_PIN);
+ this.jsonInit({
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SHOW_RECT,
+ "args0": [{
+ "check": Number,
+ "type": "input_value",
+ "name": "x"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "width"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "height"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "checked": false,
+ "type": "field_checkbox",
+ "name": "fill"
+ }
+ ]
+ });
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OLED_RECT);
+ }
+};
+
+const display_line = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ // this.appendDummyInput()
+ // .appendField(Blockly.Msg.OLED)
+ // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ .setCheck("var");
+ // this.appendValueInput("PIN", Number)
+ // .setCheck(Number)
+ // .setAlign(Blockly.inputs.Align.RIGHT)
+ // .appendField(Blockly.Msg.MIXLY_PIN);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DISPLAY_DRAW)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DISPLAY_RLINE, "hline"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DISPLAY_VLINE, "vline"]]), "direction");
+ this.jsonInit({
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SHOW_LINE,
+ "args0": [{
+ "check": Number,
+ "type": "input_value",
+ "name": "x"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "length"
+ }
+ ]
+ });
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OLED_LINE);
+ }
+};
+
+const display_line_arbitrarily = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ // this.appendDummyInput()
+ // .appendField(Blockly.Msg.OLED)
+ // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ .setCheck("var");
+ // this.appendValueInput("PIN", Number)
+ // .setCheck(Number)
+ // .setAlign(Blockly.inputs.Align.RIGHT)
+ // .appendField(Blockly.Msg.MIXLY_PIN);
+ this.jsonInit({
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SHOW_LINE_ARBITRARILY,
+ "args0": [{
+ "check": Number,
+ "type": "input_value",
+ "name": "x1"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y1"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "x2"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y2"
+ },
+ ]
+ });
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OLED_LINE_ARBIT);
+ }
+}
+
+const display_get_screen_image = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_GET_SCREEN_IMAGE);
+ this.setInputsInline(true);
+ this.setOutput(true, "esp32_image");
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_GET_SCREEN_IMAGE_TOOLTIP);
+ }
+};
+
+const display_blink_rate = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_BLINK_RATE)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_BLINK_RATE);
+ }
+};
+
+const display_rgb_color = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB)
+ this.appendValueInput("_LED_")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_AS)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldColour('#000', null, {
+ colourOptions: ['#f00', '#000'],
+ columns: 2
+ }), 'FIELDNAME');
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_NUM_R_G_B);
+ }
+};
+
+const display_onoff = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ON, "ON"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_OFF, "OFF"]]), 'ONOFF')
+ this.setOutput(true, Boolean);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
+ }
+};
+
+// export const switch = {
+// init: function () {
+// this.setColour(DISPLAY_EXTERN_HUE);
+// this.appendDummyInput("")
+// .appendField(new Blockly.FieldDropdown([
+// [Blockly.Msg.MIXLY_ESP32_ON, "1"],
+// [Blockly.Msg.MIXLY_ESP32_OFF, "0"]
+// ]), "flag");
+// this.setOutput(true);
+// this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
+// }
+// };
+
+const display_fill = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_STAT_CLEAR, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL, "1"]
+ ]), "key");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var TOOLTIPS = {
+ '0': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_STAT_CLEAR,
+ '1': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL
+ };
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DF_LCD + TOOLTIPS[mode];
+ });
+ }
+};
+
+const display_animate = {
+ init: function () {
+ var ANIMATE = [
+ ["ALL_CLOCKS", 'ALL_CLOCKS'],
+ ["ALL_ARROWS", 'ALL_ARROWS']
+ ];
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.setOutput(true, 'Tuple');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_DISPLAY_ANIMATE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(ANIMATE), 'ANIMATION')
+ //this.setTooltip(Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP);
+ }
+};
+
+const display_circle = {
+ init: function () {
+ var brightness_or_not = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_ON, '1'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_OFF, '0']
+ ];
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TURTLE_DRAW_CIRCLE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(brightness_or_not), 'OP')
+ this.jsonInit({
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANBIT_SHOW_CIRCLE,
+ "args0": [{
+ "check": Number,
+ "type": "input_value",
+ "name": "x"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "r"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "checked": false,
+ "type": "field_checkbox",
+ "name": "fill"
+ }
+ ]
+ });
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TURTLE_DRAW_CIRCLE);
+ }
+};
+
+const display_triangle = {
+ init: function () {
+ var brightness_or_not = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_ON, '1'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_OFF, '0']
+ ];
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DISPLAY_DRAW + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANBIT_DRAW_TRIANGLE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(brightness_or_not), 'OP')
+ this.jsonInit({
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANBIT_SHOW_triangle,
+ "args0": [{
+ "check": Number,
+ "type": "input_value",
+ "name": "x0"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y0"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "x1"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y1"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "x2"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y2"
+ }, {
+ "type": "input_dummy"
+ }, {
+ "checked": false,
+ "type": "field_checkbox",
+ "name": "fill"
+ }
+ ]
+ });
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DISPLAY_DRAW + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANBIT_DRAW_TRIANGLE);
+ }
+};
+
+const display_help = {
+ init: function () {
+ this.setColour('#555555');
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_ONBOARDDISPLAY_HELP);
+ this.setInputsInline(true);
+ this.setTooltip('');
+ }
+};
+
+//显示-OLED-显示图像
+const display_oled_showBitmap = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP);
+ this.appendValueInput("START_X", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_START_X)
+ .setCheck(Number);
+ this.appendValueInput("START_Y", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_START_Y)
+ .setCheck(Number);
+ this.appendValueInput("bitmap_name", String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP_NAME);
+ this.appendValueInput("WIDTH", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIDTH)
+ .setCheck(Number);
+ this.appendValueInput("HEIGHT", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HEIGHT)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_SHOW_BMP_TOOLTIP);
+ }
+};
+
+//显示-OLED-画点
+const display_oled_drawPixel = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWPIXEL);
+ this.appendValueInput("POS_X")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_POSX)
+ this.appendValueInput("POS_Y")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_POSY)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAW_PIXE_TOOLTIP);
+ }
+};
+
+const display_tm_use_i2c_init = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('I2CSUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "I2C")
+ .setCheck("var");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ // ["MPU9250", "MPU9250"],
+ // ["TM1637", "TM1637"],
+ ["TM1650", "TM1650"]
+ ]), "key");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_USE_I2C_TOOLTIP;
+ var TOOLTIPS = {
+ // "MPU9250": "MPU9250",
+ // "TM1637": "TM1637",
+ "TM1650": "TM1650"
+ };
+ return mode0 + TOOLTIPS[mode]
+ });
+ }
+};
+
+const display_tm1650_power = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["TM1650", "tm1650"]]), "TYPE");
+ this.appendValueInput("VAR")
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ON, "on"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OFF, "off"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_STAT_CLEAR, "clear"]]), "STAT");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_4digitdisplay_power);
+ }
+};
+
+const display_tm1650_show_num = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["TM1650", "tm1650"]]), "TYPE");
+ this.appendValueInput("VAR")
+ this.appendValueInput("VALUE")
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SHOW_NUMBER);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ // this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_4digitdisplay_displayString);
+ }
+};
+
+const display_tm1650_show_dot = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["TM1650", "tm1650"]]), "TYPE");
+ this.appendValueInput("VAR")
+ this.appendValueInput("NO")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_NOMBER1)
+ this.appendValueInput("STAT")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_NOMBER2 + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_DOT)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_4digitdisplay_showDot);
+ }
+};
+
+const display_tm1650_set_brightness = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["TM1650", "tm1650"]]), "TYPE");
+ this.appendValueInput("VAR")
+ this.appendValueInput("VALUE")
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SET_BRIGHTNESS);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_4DIGITDISPLAY_4DIGITDISPLAY_BRIGHTNESS_TOOLTIP);
+ }
+};
+
+const tft_use_spi_init = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SPISUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "SPI")
+ .setCheck("var");
+ this.appendValueInput('PINDC')
+ .appendField("DC")
+ this.appendValueInput('PINCS')
+ .appendField("CS")
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catTFT)
+ this.appendValueInput("WIDTH")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIDTH)
+ .setCheck(Number);
+ this.appendValueInput("HEIGHT")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HEIGHT)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_turtle_rotate)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_NO, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANTI_CLOCKWISE + '90°', "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANTI_CLOCKWISE + '180°', "2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANTI_CLOCKWISE + '270°', "3"]
+ ]), 'rotate')
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ }
+};
+
+const tft_show_image_xy = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catTFT);
+ this.appendValueInput('data')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP);
+ this.appendValueInput("x")
+ .setCheck(Number)
+ .appendField('x');
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField('y');
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_NUMBER);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP_OR_STRING);
+ }
+};
+
+const display_color_seclet = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendDummyInput("")
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldColour('#000', null, {
+ colourOptions: [
+ // grays
+ '#ffffff', '#cccccc', '#c0c0c0', '#999999', '#666666', '#333333', '#000000',
+ // reds
+ '#ffcccc', '#ff6666', '#ff0000', '#cc0000', '#990000', '#660000', '#330000',
+ // oranges
+ '#ffcc99', '#ff9966', '#ff9900', '#ff6600', '#cc6600', '#993300', '#663300',
+ // yellows
+ '#ffff99', '#ffff66', '#ffcc66', '#ffcc33', '#cc9933', '#996633', '#663333',
+ // olives
+ '#ffffcc', '#ffff33', '#ffff00', '#ffcc00', '#999900', '#666600', '#333300',
+ // greens
+ '#99ff99', '#66ff99', '#33ff33', '#33cc00', '#009900', '#006600', '#003300',
+ // turquoises
+ '#99ffff', '#33ffff', '#66cccc', '#00cccc', '#339999', '#336666', '#003333',
+ // blues
+ '#ccffff', '#66ffff', '#33ccff', '#3366ff', '#3333ff', '#000099', '#000066',
+ // purples
+ '#ccccff', '#9999ff', '#6666cc', '#6633ff', '#6600cc', '#333399', '#330099',
+ // violets
+ '#ffccff', '#ff99ff', '#cc66cc', '#cc33cc', '#993399', '#663366', '#330033'
+ ],
+ columns: 7
+ }), "COLOR");
+ this.setInputsInline(true);
+ this.setOutput(true, String);
+ }
+};
+
+
+const tft_show_image_or_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catTFT);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR);
+ this.appendValueInput("x")
+ .setCheck(Number)
+ .appendField('x');
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField('y');
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
+ this.appendValueInput("space")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CENTER)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_YES, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_NO, "False"]
+ ]), 'center')
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY);
+ }
+};
+
+
+const tft_scroll_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catTFT);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField('y');
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
+ this.appendValueInput("space")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SCROLL_IMAGE_OR_STRING_DELAY);
+ }
+};
+
+const tft_show_frame_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catTFT);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+
+
+const tft_fill = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catTFT);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_STAT_CLEAR, "BLACK"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL, "WHITE"]
+ ]), "key");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var TOOLTIPS = {
+ '0': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_STAT_CLEAR,
+ '1': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL
+ };
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DF_LCD + TOOLTIPS[mode];
+ });
+ }
+};
+
+const tft_line_arbitrarily = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ // this.appendDummyInput()
+ // .appendField(Blockly.Msg.OLED)
+ // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catTFT)
+ .setCheck("var");
+ // this.appendValueInput("PIN", Number)
+ // .setCheck(Number)
+ // .setAlign(Blockly.inputs.Align.RIGHT)
+ // .appendField(Blockly.Msg.MIXLY_PIN);
+ this.jsonInit({
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SHOW_LINE_ARBITRARILY,
+ "args0": [{
+ "check": Number,
+ "type": "input_value",
+ "name": "x1"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y1"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "x2"
+ }, {
+ "check": Number,
+ "type": "input_value",
+ "name": "y2"
+ },
+ ]
+ });
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OLED_LINE_ARBIT);
+ }
+}
+
+const display_lcd_use_i2c_init = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('I2CSUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "I2C")
+ .setCheck("var");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ // ["MPU9250", "MPU9250"],
+ // ["TM1637", "TM1637"],
+ ["LCD1602", "16"],
+ ["LCD2004", "20"]
+ ]), "key");
+ this.appendValueInput("ADDR")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MQTT_SERVER_ADD);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP;
+ var TOOLTIPS = {
+ "16": "LCD1602",
+ "20": "LCD2004"
+ };
+ return mode0 + TOOLTIPS[mode]
+ });
+ }
+};
+
+const lcd_show_image_or_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catLCD);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR);
+ this.appendValueInput("x")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.array2_cols);
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.array2_rows);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CENTER)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_YES, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_NO, "False"]
+ ]), 'center')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY);
+ }
+};
+
+const lcd_print_string = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catLCD);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_PRINT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR);
+ this.appendValueInput("x")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.array2_cols);
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.array2_rows);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const lcd_backlight = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catLCD);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TFT_Brightness)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_on_display, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_off_display, "0"]
+ ]), "key");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var TOOLTIPS = {
+ '1': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_on_display,
+ '0': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_off_display
+ };
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catLCD + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TFT_Brightness + TOOLTIPS[mode];
+ });
+ }
+};
+
+const lcd_clear = {
+ init: function () {
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catLCD);
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Clear_display);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Clear_display);
+ }
+};
+
+const display_oled_use_i2c_init = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('I2CSUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "I2C")
+ .setCheck("var");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO + 'oled128x64')
+ this.appendValueInput("ADDR")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MQTT_SERVER_ADD);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DRIVER)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ['SSD1306','0'],
+ ['SSD1315','1']
+ ]),'driver');
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP;
+ var TOOLTIPS = {
+ "16": "LCD1602",
+ "20": "LCD2004"
+ };
+ return mode0 + TOOLTIPS[mode]
+ });
+ }
+};
+
+const extern_oled_show_image = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catOLED);
+ this.appendValueInput('data')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP_OR_STRING);
+ }
+};
+
+const extern_oled_show_image_xy = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catOLED);
+ this.appendValueInput('data')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP);
+ this.appendValueInput("x")
+ .setCheck(Number)
+ .appendField('x');
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField('y');
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_NUMBER);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP_OR_STRING);
+ }
+};
+
+const extern_oled_show_string = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catOLED);
+ this.appendValueInput('data')
+ .setCheck([String, "esp32_image", "List", 'Tuple'])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP_OR_STRING);
+ }
+};
+
+const extern_oled_show_image_or_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catOLED);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR);
+ this.appendValueInput("x")
+ .setCheck(Number)
+ .appendField('x');
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField('y');
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
+ this.appendValueInput("space")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CENTER)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_YES, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_NO, "False"]
+ ]), 'center')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY);
+ }
+};
+
+const extern_oled_scroll_string = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catOLED);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const extern_oled_scroll_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catOLED);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField('y');
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
+ this.appendValueInput("space")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SCROLL_IMAGE_OR_STRING_DELAY);
+ }
+};
+
+const extern_oled_show_frame_string = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catOLED);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const extern_oled_show_frame_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catOLED);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const extern_oled_shift = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP, 'shift_up'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN, 'shift_down'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, 'shift_left'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, 'shift_right'],
+ ];
+ //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catOLED);
+ // this.setOutput(true);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET)
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.appendValueInput('val')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_SHIFT)
+ .setCheck(Number);
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_UNIT)
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET3;
+ var TOOLTIPS = {
+ 'up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP,
+ 'down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN,
+ 'left': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT,
+ 'right': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT
+ };
+ return mode0 + mode1 + TOOLTIPS[mode] + mode2;
+ });
+ }
+};
+
+const extern_oled_get_pixel = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catOLED);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);
+ this.appendValueInput('y')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_GET_POINT);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_BRIGHTNESS);
+ }
+};
+
+const extern_oled_bright_point = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catOLED);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_BRIGHTNESS)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);
+ this.appendValueInput('y')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);
+ this.appendValueInput("STAT")
+ .setCheck([Number, Boolean]);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_DISPLAY_SETPIXEL);
+ }
+};
+
+
+
+const extern_oled_clear = {
+ init: function () {
+ this.setColour(DISPLAY_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catOLED);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Clear_display);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Clear_display);
+ }
+};
+
+const extern_oled_shape_rect = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_EXTERN_HUE,
+ "args0": [
+ {
+ "name": "SUB",
+
+ "type": "input_value"
+ },
+ {
+ "name": "state",
+ "options": [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_MODE_1, '1'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_MODE_0, '0']
+ ],
+ "type": "field_dropdown"
+ },
+ {
+ "name": "shape",
+ "options": [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_HOLLOW, 'rect'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_SOLID, 'fill_rect']
+ ],
+ "type": "field_dropdown"
+ },
+ {
+ "type": "input_dummy"
+ },
+ {
+ "name": "x",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "y",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "w",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "h",
+ "type": "input_value",
+ //"check": "Number"
+ }
+
+ ],
+ "inputsInline": true,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_SHAPE_RECT_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_SHAPE_RECT_MESSAGE1,
+ "nextStatement": null,
+ "previousStatement": null
+ });
+ }
+};
+
+const extern_oled_hvline = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_EXTERN_HUE,
+ "args0": [
+ {
+ "name": "SUB",
+
+ "type": "input_value"
+ },
+ {
+ "name": "state",
+ "options": [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_MODE_1, '1'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_MODE_0, '0']
+ ],
+ "type": "field_dropdown"
+ },
+ {
+ "name": "dir_h_v",
+ "options": [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_vertical, '0'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_horizontal, '1']
+ ],
+ "type": "field_dropdown"
+ },
+ {
+ "type": "input_dummy"
+ },
+ {
+ "name": "x",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "y",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "length",
+ "type": "input_value",
+ //"check": "Number"
+ }
+
+ ],
+ "inputsInline": true,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_HVLINE_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_HVLINE_MESSAGE1,
+ "nextStatement": null,
+ "previousStatement": null
+ });
+ }
+};
+
+const extern_oled_line = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_EXTERN_HUE,
+ "args0": [
+ {
+ "name": "SUB",
+
+ "type": "input_value"
+ },
+ {
+ "name": "state",
+ "options": [[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_display_hline_1, '1'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_display_hline_0, '0']],
+ "type": "field_dropdown"
+ },
+ {
+ "type": "input_dummy"
+ }, {
+ "name": "x1",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "y1",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "x2",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "y2",
+ "type": "input_value",
+ //"check": "Number"
+ }
+
+ ],
+ "inputsInline": true,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_display_line_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_display_line_MESSAGE1,
+ "nextStatement": null,
+ "previousStatement": null
+ });
+ }
+};
+
+/***/ }),
+
+/***/ "../micropython/blocks/display_onboard.js":
+/*!************************************************!*\
+ !*** ../micropython/blocks/display_onboard.js ***!
+ \************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ bitbot_display_image_create: () => (/* binding */ bitbot_display_image_create),
+/* harmony export */ display_bright_point: () => (/* binding */ display_bright_point),
+/* harmony export */ display_bright_screen: () => (/* binding */ display_bright_screen),
+/* harmony export */ display_clear: () => (/* binding */ display_clear),
+/* harmony export */ display_get_pixel: () => (/* binding */ display_get_pixel),
+/* harmony export */ display_get_screen_pixel: () => (/* binding */ display_get_screen_pixel),
+/* harmony export */ display_image_builtins: () => (/* binding */ display_image_builtins),
+/* harmony export */ display_image_builtins_all: () => (/* binding */ display_image_builtins_all),
+/* harmony export */ display_image_create: () => (/* binding */ display_image_create),
+/* harmony export */ display_scroll_string: () => (/* binding */ display_scroll_string),
+/* harmony export */ display_scroll_string_delay: () => (/* binding */ display_scroll_string_delay),
+/* harmony export */ display_shift: () => (/* binding */ display_shift),
+/* harmony export */ display_show_frame_string: () => (/* binding */ display_show_frame_string),
+/* harmony export */ display_show_frame_string_delay: () => (/* binding */ display_show_frame_string_delay),
+/* harmony export */ display_show_image: () => (/* binding */ display_show_image),
+/* harmony export */ display_show_image_or_string_delay: () => (/* binding */ display_show_image_or_string_delay),
+/* harmony export */ draw_pointer: () => (/* binding */ draw_pointer),
+/* harmony export */ image_arithmetic: () => (/* binding */ image_arithmetic),
+/* harmony export */ image_invert: () => (/* binding */ image_invert),
+/* harmony export */ mixbot_display_bright_screen: () => (/* binding */ mixbot_display_bright_screen),
+/* harmony export */ mixbot_display_get_ambientbright: () => (/* binding */ mixbot_display_get_ambientbright),
+/* harmony export */ mixbot_display_get_screen_pixel: () => (/* binding */ mixbot_display_get_screen_pixel),
+/* harmony export */ mixbot_display_image_create: () => (/* binding */ mixbot_display_image_create),
+/* harmony export */ mixbot_display_rotate: () => (/* binding */ mixbot_display_rotate),
+/* harmony export */ mixgo_display_image_create_new: () => (/* binding */ mixgo_display_image_create_new),
+/* harmony export */ mixgome_display_font: () => (/* binding */ mixgome_display_font),
+/* harmony export */ mixgome_display_image_create: () => (/* binding */ mixgome_display_image_create),
+/* harmony export */ mixgomini_display_image_create: () => (/* binding */ mixgomini_display_image_create),
+/* harmony export */ mpython_display_hvline: () => (/* binding */ mpython_display_hvline),
+/* harmony export */ mpython_display_line: () => (/* binding */ mpython_display_line),
+/* harmony export */ mpython_display_shape_rect: () => (/* binding */ mpython_display_shape_rect),
+/* harmony export */ mpython_pbm_image: () => (/* binding */ mpython_pbm_image),
+/* harmony export */ onboard_oled_bright_point: () => (/* binding */ onboard_oled_bright_point),
+/* harmony export */ onboard_oled_scroll_string_delay: () => (/* binding */ onboard_oled_scroll_string_delay),
+/* harmony export */ onboard_oled_show_frame_string_delay: () => (/* binding */ onboard_oled_show_frame_string_delay),
+/* harmony export */ onboard_oled_show_image: () => (/* binding */ onboard_oled_show_image),
+/* harmony export */ onboard_oled_show_image_or_string_delay: () => (/* binding */ onboard_oled_show_image_or_string_delay),
+/* harmony export */ onboard_oled_show_image_xy: () => (/* binding */ onboard_oled_show_image_xy),
+/* harmony export */ onboard_oled_show_string: () => (/* binding */ onboard_oled_show_string),
+/* harmony export */ onboard_tft_bright_point: () => (/* binding */ onboard_tft_bright_point),
+/* harmony export */ onboard_tft_bright_screen: () => (/* binding */ onboard_tft_bright_screen),
+/* harmony export */ onboard_tft_clear: () => (/* binding */ onboard_tft_clear),
+/* harmony export */ onboard_tft_clock_clear: () => (/* binding */ onboard_tft_clock_clear),
+/* harmony export */ onboard_tft_clock_draw: () => (/* binding */ onboard_tft_clock_draw),
+/* harmony export */ onboard_tft_clock_get_rtctime: () => (/* binding */ onboard_tft_clock_get_rtctime),
+/* harmony export */ onboard_tft_clock_init: () => (/* binding */ onboard_tft_clock_init),
+/* harmony export */ onboard_tft_clock_set_time: () => (/* binding */ onboard_tft_clock_set_time),
+/* harmony export */ onboard_tft_display_hvline: () => (/* binding */ onboard_tft_display_hvline),
+/* harmony export */ onboard_tft_display_line: () => (/* binding */ onboard_tft_display_line),
+/* harmony export */ onboard_tft_display_shape_circle: () => (/* binding */ onboard_tft_display_shape_circle),
+/* harmony export */ onboard_tft_display_shape_rect: () => (/* binding */ onboard_tft_display_shape_rect),
+/* harmony export */ onboard_tft_fill: () => (/* binding */ onboard_tft_fill),
+/* harmony export */ onboard_tft_get_pixel: () => (/* binding */ onboard_tft_get_pixel),
+/* harmony export */ onboard_tft_get_screen_pixel: () => (/* binding */ onboard_tft_get_screen_pixel),
+/* harmony export */ onboard_tft_scroll_string: () => (/* binding */ onboard_tft_scroll_string),
+/* harmony export */ onboard_tft_scroll_string_delay: () => (/* binding */ onboard_tft_scroll_string_delay),
+/* harmony export */ onboard_tft_shift: () => (/* binding */ onboard_tft_shift),
+/* harmony export */ onboard_tft_show_frame_string: () => (/* binding */ onboard_tft_show_frame_string),
+/* harmony export */ onboard_tft_show_frame_string_delay: () => (/* binding */ onboard_tft_show_frame_string_delay),
+/* harmony export */ onboard_tft_show_image: () => (/* binding */ onboard_tft_show_image),
+/* harmony export */ onboard_tft_show_image_or_string_delay: () => (/* binding */ onboard_tft_show_image_or_string_delay),
+/* harmony export */ onboard_tft_show_image_xy: () => (/* binding */ onboard_tft_show_image_xy)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+const DISPLAY_ONBOARD_HUE = '#569A98';
+
+const display_show_image = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck([String, "esp32_image", "List", 'Tuple'])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey()
+ if (version == 'micropython:esp32:mixbot') {
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SHOW_SCROLL_STRING_TOOLTIP);
+ }
+ }
+};
+
+const display_show_image_or_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR);
+ this.appendValueInput("space")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CENTER)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_YES, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_NO, "False"]
+ ]), 'center')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+
+ }
+};
+
+const display_scroll_string = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const display_scroll_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);
+ this.appendValueInput("space")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+
+ }
+};
+
+const display_show_frame_string = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const display_show_frame_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const display_image_create = {
+ init: function () {
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)
+ for (let i = 0; i < 12; i++) {
+ let dummyInputObj = this.appendDummyInput();
+ for (let j = 0; j < 32; j++) {
+ dummyInputObj.appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldColour('#000', null, {
+ colourOptions: ['#f00', '#000'],
+ columns: 2
+ }), i + '-' + j);
+ }
+ }
+ this.setOutput(true);
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Create_image1);
+ }
+};
+
+const display_image_builtins = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_ONBOARD_HUE,
+ "args0": [{
+ "name": "image",
+ "options": [["HEART", "HEART"], ["HEART_SMALL", "HEART_SMALL"], ["HAPPY", "HAPPY"], ["SAD", "SAD"], ["SMILE", "SMILE"], ["SILLY", "SILLY"], ["FABULOUS", "FABULOUS"], ["SURPRISED", "SURPRISED"], ["ASLEEP", "ASLEEP"], ["ANGRY", "ANGRY"], ["CONFUSED", "CONFUSED"], ["NO", "NO"], ["YES", "YES"]
+ // ,["LEFT_ARROW", "LEFT_ARROW"],["RIGHT_ARROW", "RIGHT_ARROW"],["DRESS", "DRESS"],["TRANSFORMERS", "TRANSFORMERS"],["SCISSORS", "SCISSORS"],["EXIT", "EXIT"],["TREE", "TREE"],["PACMAN", "PACMAN"],["TARGET", "TARGET"],["TSHIRT", "TSHIRT"],["ROLLERSKATE", "ROLLERSKATE"],["DUCK", "DUCK"],["HOUSE", "HOUSE"],["TORTOISE", "TORTOISE"],["BUTTERFLY", "BUTTERFLY"],["STICKFIGURE", "STICKFIGURE"],["GHOST", "GHOST"],["PITCHFORK", "PITCHFORK"],["MUSIC_QUAVERS", "MUSIC_QUAVERS"],["MUSIC_QUAVER", "MUSIC_QUAVER"],["MUSIC_CROTCHET", "MUSIC_CROTCHET"],["COW", "COW"],["RABBIT", "RABBIT"],["SQUARE_SMALL", "SQUARE_SMALL"],["SQUARE", "SQUARE"],["DIAMOND_SMALL", "DIAMOND_SMALL"],["DIAMOND", "DIAMOND"],["CHESSBOARD", "CHESSBOARD"],["TRIANGLE_LEFT", "TRIANGLE_LEFT"],["TRIANGLE", "TRIANGLE"],["SNAKE", "SNAKE"],["UMBRELLA", "UMBRELLA"],["SKULL", "SKULL"],["GIRAFFE", "GIRAFFE"],["SWORD", "SWORD"]
+ ],
+ "type": "field_dropdown"
+ }],
+ "output": ["esp32_image", "List"],
+ "helpUrl": "https://microbit-micropython.readthedocs.io/en/latest/image.html#attributes",
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Built_in_image1,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Built_in_image
+ });
+ }
+};
+
+const display_image_builtins_all = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Built_in_image1)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.builtinimg), 'image');
+ this.setOutput(true, ["esp32_image", "List"]);
+ }
+};
+
+const image_arithmetic = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_DISPLAY_UNION, 'add'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_DISPLAY_MINUS, 'sub']
+ ];
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.setOutput(true, "esp32_image");
+ this.appendValueInput('A')
+ // .setCheck(["esp32_image", "List", String])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_DISPLAY_MERGE_SHAPE);
+ this.appendValueInput('B')
+ // .setCheck(["esp32_image", "List", String])
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ '+': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_image_add,
+ '-': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_image_reduce
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const image_invert = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('A')
+ .setCheck("esp32_image")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Invert_image1);
+ this.setInputsInline(true);
+ this.setOutput(true, "esp32_image");
+ }
+};
+
+const display_shift = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP, 'shift_up'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN, 'shift_down'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, 'shift_left'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, 'shift_right'],
+ ];
+ //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ // this.setOutput(true);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET)
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.appendValueInput('val')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_SHIFT)
+ .setCheck(Number);
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_UNIT)
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET3;
+ var TOOLTIPS = {
+ 'shift_up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP,
+ 'shift_down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN,
+ 'shift_left': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT,
+ 'shift_right': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT
+ };
+ return mode0 + mode1 + TOOLTIPS[mode] + mode2;
+ });
+ }
+};
+
+const display_get_pixel = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);
+ this.appendValueInput('y')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_GET_POINT);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_BRIGHTNESS);
+ }
+};
+
+const display_bright_point = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_BRIGHTNESS)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);
+ this.appendValueInput('y')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);
+ this.appendValueInput("STAT")
+ .setCheck([Number, Boolean]);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_DISPLAY_SETPIXEL);
+ }
+};
+
+const display_get_screen_pixel = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);
+ }
+};
+
+const display_bright_screen = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS + ' 0.0-1.0');
+ }
+};
+
+const display_clear = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Clear_display);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Clear_display);
+ }
+};
+
+
+
+
+
+
+
+//mixgo_me onboard_matrix below:
+
+
+
+const mixgome_display_image_create = {
+ init: function () {
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)
+ for (let i = 0; i < 5; i++) {
+ let dummyInputObj = this.appendDummyInput();
+ for (let j = 0; j < 8; j++) {
+ dummyInputObj.appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldColour('#000', null, {
+ colourOptions: ['#f00', '#000'],
+ columns: 2
+ }), i + '-' + j);
+ }
+ }
+ this.setOutput(true);
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Create_image1);
+ }
+};
+
+const mixgomini_display_image_create = {
+ init: function () {
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)
+ for (let i = 0; i < 8; i++) {
+ let dummyInputObj = this.appendDummyInput();
+ for (let j = 0; j < 12; j++) {
+ dummyInputObj.appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldColour('#000', null, {
+ colourOptions: ['#f00', '#000'],
+ columns: 2
+ }), i + '-' + j);
+ }
+ }
+ this.setOutput(true);
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Create_image1);
+ }
+};
+
+const mixgo_display_image_create_new = {
+ init: function () {
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)
+ for (let i = 0; i < 8; i++) {
+ let dummyInputObj = this.appendDummyInput();
+ for (let j = 0; j < 16; j++) {
+ dummyInputObj.appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldColour('#000', null, {
+ colourOptions: ['#f00', '#000'],
+ columns: 2
+ }), i + '-' + j);
+ }
+ }
+ this.setOutput(true, "esp32_image");
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Create_image1);
+ }
+};
+
+
+
+const mixgome_display_font = {
+ init: function () {
+ var OPERATORS = [
+ ['4x5' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_ME_DISPLAY_HORIZONTAL, "'4x5'"],
+ ['5x5' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_ME_DISPLAY_HORIZONTAL, "'5x5'"],
+ ['5x8' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_ME_DISPLAY_VERTICAL, "'5x8'"]
+ ];
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_SET_FONT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+
+ }
+};
+
+
+
+//mpython
+
+const onboard_oled_show_image = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP_OR_STRING);
+ }
+};
+
+const onboard_oled_show_image_xy = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP);
+ this.appendValueInput("x")
+ .setCheck(Number)
+ .appendField('x');
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField('y');
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_NUMBER);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP_OR_STRING);
+ }
+};
+
+const onboard_oled_show_string = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck([String, "esp32_image", "List", 'Tuple'])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP_OR_STRING);
+ }
+};
+
+const onboard_oled_show_image_or_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR);
+ this.appendValueInput("x")
+ .setCheck(Number)
+ .appendField('x');
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField('y');
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
+ this.appendValueInput("space")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CENTER)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_YES, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_NO, "False"]
+ ]), 'center')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY);
+ }
+};
+
+const onboard_oled_scroll_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField('y');
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
+ this.appendValueInput("space")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SCROLL_IMAGE_OR_STRING_DELAY);
+ }
+};
+
+
+const onboard_oled_show_frame_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const onboard_oled_bright_point = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_BRIGHTNESS)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);
+ this.appendValueInput('y')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);
+ this.appendValueInput("STAT")
+ .setCheck([Number, Boolean]);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_DISPLAY_SETPIXEL);
+ }
+};
+
+const mpython_display_shape_rect = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_ONBOARD_HUE,
+ "args0": [
+ {
+ "name": "state",
+ "options": [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_MODE_1, '1'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_MODE_0, '0']
+ ],
+ "type": "field_dropdown"
+ },
+ {
+ "name": "shape",
+ "options": [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_HOLLOW, 'rect'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_SOLID, 'fill_rect']
+ ],
+ "type": "field_dropdown"
+ },
+ {
+ "type": "input_dummy"
+ },
+ {
+ "name": "x",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "y",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "w",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "h",
+ "type": "input_value",
+ //"check": "Number"
+ }
+
+ ],
+ "inputsInline": true,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_SHAPE_RECT_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_SHAPE_RECT_MESSAGE0,
+ "nextStatement": null,
+ "previousStatement": null
+ });
+ }
+};
+
+const mpython_display_hvline = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_ONBOARD_HUE,
+ "args0": [
+ {
+ "name": "state",
+ "options": [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_MODE_1, '1'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_MODE_0, '0']
+ ],
+ "type": "field_dropdown"
+ },
+ {
+ "name": "dir_h_v",
+ "options": [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_vertical, '0'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_horizontal, '1']
+ ],
+ "type": "field_dropdown"
+ },
+ {
+ "type": "input_dummy"
+ },
+ {
+ "name": "x",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "y",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "length",
+ "type": "input_value",
+ //"check": "Number"
+ }
+
+ ],
+ "inputsInline": true,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_HVLINE_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_HVLINE_MESSAGE0,
+ "nextStatement": null,
+ "previousStatement": null
+ });
+ }
+};
+
+const mpython_display_line = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_ONBOARD_HUE,
+ "args0": [
+ {
+ "name": "state",
+ "options": [[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_display_hline_1, '1'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_display_hline_0, '0']],
+ "type": "field_dropdown"
+ },
+ {
+ "type": "input_dummy"
+ }, {
+ "name": "x1",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "y1",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "x2",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "y2",
+ "type": "input_value",
+ //"check": "Number"
+ }
+
+ ],
+ "inputsInline": true,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_display_line_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_display_line_MESSAGE0,
+ "nextStatement": null,
+ "previousStatement": null
+ });
+ }
+};
+
+const mpython_pbm_image = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_ONBOARD_HUE,
+ "args0": [
+ {
+ "type": "field_label",
+ "name": "size_image",
+ "text": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Built_in_image1
+ },
+
+ {
+ "name": "path",
+ "options": [
+ ["Heart", "Heart"],
+ ["Angry", "Angry"],
+ ["Bored", "Bored"],
+ ["Confused", "Confused"],
+ ["Happy", "Happy"],
+ ["Paper", "Paper"],
+ ["Rock", "Rock"],
+ ["Sad", "Sad"],
+ ["Scissors", "Scissors"],
+ ["Silly", "Silly"],
+ ["Sleep", "Sleep"],
+ ["Small_heart", "Small_heart"],
+ ["Small_paper", "Small_paper"],
+ ["Small_rock", "Small_rock"],
+ ["Small_scissors", "Small_scissors"],
+ ["Smile", "Smile"],
+ ["Surprise", "Surprise"],
+ ["Wonderful", "Wonderful"],
+ ["Eyes_Angry", "Eyes_Angry"],
+ ["Awake", "Awake"],
+ ["Black_eye", "Black_eye"],
+ ["Bottom_left", "Bottom_left"],
+ ["Bottom_right", "Bottom_right"],
+ ["Crazy_1", "Crazy_1"],
+ ["Crazy_2", "Crazy_2"],
+ ["Disappointed", "Disappointed"],
+ ["Dizzy", "Dizzy"],
+ ["Down", "Down"],
+ ["Evil", "Evil"],
+ ["Hurt", "Hurt"],
+ ["Knocked_out", "Knocked_out"],
+ ["Love", "Love"],
+ ["Middle_left", "Middle_left"],
+ ["Middle_right", "Middle_right"],
+ ["Neutral", "Neutral"],
+ ["Nuclear", "Nuclear"],
+ ["Pinch_left", "Pinch_left"],
+ ["Pinch_middle", "Pinch_middle"],
+ ["Pinch_right", "Pinch_right"],
+ ["Tear", "Tear"],
+ ["Tired_left", "Tired_left"],
+ ["Tired_middle", "Tired_middle"],
+ ["Tired_right", "Tired_right"],
+ ["Toxic", "Toxic"],
+ ["Up", "Up"],
+ ["Winking", "Winking"],
+ ["Accept", "Accept"],
+ ["Backward", "Backward"],
+ ["Decline", "Decline"],
+ ["Forward", "Forward"],
+ ["Left", "Left"],
+ ["No_go", "No_go"],
+ ["Question_mark", "Question_mark"],
+ ["Right", "Right"],
+ ["Stop_1", "Stop_1"],
+ ["Stop_2", "Stop_2"],
+ ["Thumbs_down", "Thumbs_down"],
+ ["Thumbs_up", "Thumbs_up"],
+ ["Warning", "Warning"],
+ ["Bomb", "Bomb"],
+ ["Boom", "Boom"],
+ ["Fire", "Fire"],
+ ["Flowers", "Flowers"],
+ ["Forest", "Forest"],
+ ["Lightning", "Lightning"],
+ ["Light_off", "Light_off"],
+ ["Light_on", "Light_on"],
+ ["Night", "Night"],
+ ["Pirate", "Pirate"],
+ ["Snow", "Snow"],
+ ["Target", "Target"],
+ ["Bar_0", "Bar_0"],
+ ["Bar_1", "Bar_1"],
+ ["Bar_2", "Bar_2"],
+ ["Bar_3", "Bar_3"],
+ ["Bar_4", "Bar_4"],
+ ["Dial_0", "Dial_0"],
+ ["Dial_1", "Dial_1"],
+ ["Dial_2", "Dial_2"],
+ ["Dial_3", "Dial_3"],
+ ["Dial_4", "Dial_4"],
+ ["Dots_0", "Dots_0"],
+ ["Dots_1", "Dots_1"],
+ ["Dots_2", "Dots_2"],
+ ["Dots_3", "Dots_3"],
+ ["Hourglass_0", "Hourglass_0"],
+ ["Hourglass_1", "Hourglass_1"],
+ ["Hourglass_2", "Hourglass_2"],
+ ["Timer_0", "Timer_0"],
+ ["Timer_1", "Timer_1"],
+ ["Timer_2", "Timer_2"],
+ ["Timer_3", "Timer_3"],
+ ["Timer_4", "Timer_4"],
+ ["Water_level_0", "Water_level_0"],
+ ["Water_level_1", "Water_level_1"],
+ ["Water_level_2", "Water_level_2"],
+ ["Water_level_3", "Water_level_3"],
+
+
+ ],
+ "type": "field_dropdown"
+ }
+ ],
+ "output": "String",
+ "helpUrl": '',
+ "tooltip": '',
+ "message0": '%1 %2'
+ });
+ }
+};
+
+//mixbot onboard_matrix below:
+
+
+
+const mixbot_display_image_create = {
+ init: function () {
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)
+ for (let i = 0; i < 5; i++) {
+ let dummyInputObj = this.appendDummyInput();
+ for (let j = 0; j < 5; j++) {
+ dummyInputObj.appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldColour('#000', null, {
+ colourOptions: ['#f00', '#000'],
+ columns: 2
+ }), i + '-' + j);
+ }
+ }
+ this.setOutput(true);
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Create_image1);
+ }
+};
+
+const mixbot_display_get_screen_pixel = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);
+ }
+};
+
+const mixbot_display_get_ambientbright = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_AMBIENTBRIGHT);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ }
+};
+
+const mixbot_display_bright_screen = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS + ' 0.0-1.0');
+ }
+};
+
+const mixbot_display_rotate = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mixpy_PL_PIE_SHADOW_N, '0'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CLOCKWISE + '90' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_setheading_degree, '1'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CLOCKWISE + '180' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_setheading_degree, '2'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CLOCKWISE + '270' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_setheading_degree, '3']
+ ];
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_SCREEN_ROTATE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+
+ }
+};
+
+const bitbot_display_image_create = {
+ init: function () {
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)
+ for (let i = 0; i < 12; i++) {
+ let dummyInputObj = this.appendDummyInput();
+ for (let j = 0; j < 12; j++) {
+ dummyInputObj.appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldColour('#000', null, {
+ colourOptions: ['#f00', '#000'],
+ columns: 2
+ }), i + '-' + j);
+ }
+ }
+ this.setOutput(true);
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Create_image1);
+ }
+};
+
+//mixgo_nova onboard tft below:
+const onboard_tft_show_image = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP_OR_STRING);
+ }
+};
+
+const onboard_tft_show_image_xy = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP);
+ this.appendValueInput("x")
+ .setCheck(Number)
+ .appendField('x');
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField('y');
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_NUMBER);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_BITMAP_OR_STRING);
+ }
+};
+
+const onboard_tft_show_image_or_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_DRAWSTR);
+ this.appendValueInput("x")
+ .setCheck(Number)
+ .appendField('x');
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField('y');
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
+ this.appendValueInput("space")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CENTER)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_YES, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_NO, "False"]
+ ]), 'center')
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY);
+ }
+};
+
+const onboard_tft_scroll_string = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const onboard_tft_scroll_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField('y');
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
+ this.appendValueInput("space")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SCROLL_IMAGE_OR_STRING_DELAY);
+ }
+};
+
+const onboard_tft_show_frame_string = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const onboard_tft_show_frame_string_delay = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);
+ this.appendValueInput("time")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const onboard_tft_display_shape_rect = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_ONBOARD_HUE,
+ "args0": [
+ {
+ "name": "shape",
+ "options": [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_HOLLOW, 'rect'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_SOLID, 'fill_rect']
+ ],
+ "type": "field_dropdown"
+ },
+ {
+ "type": "input_dummy"
+ },
+ {
+ "name": "x",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "y",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "w",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "h",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "VAR",
+ "type": "input_value",
+ //"check": "Number"
+ }
+
+ ],
+ "inputsInline": true,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_SHAPE_RECT_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ONBOARD_TFT_DISPLAY_SHAPE_RECT_MESSAGE0,
+ "nextStatement": null,
+ "previousStatement": null
+ });
+ }
+};
+
+const onboard_tft_display_hvline = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_ONBOARD_HUE,
+ "args0": [
+ {
+ "name": "dir_h_v",
+ "options": [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_vertical, '0'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_horizontal, '1']
+ ],
+ "type": "field_dropdown"
+ },
+ {
+ "type": "input_dummy"
+ },
+ {
+ "name": "x",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "y",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "length",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "VAR",
+ "type": "input_value",
+ //"check": "Number"
+ }
+
+ ],
+ "inputsInline": true,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_HVLINE_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ONBOARD_TFT_DISPLAY_HVLINE_MESSAGE0,
+ "nextStatement": null,
+ "previousStatement": null
+ });
+ }
+};
+
+const onboard_tft_display_line = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_ONBOARD_HUE,
+ "args0": [
+ {
+ "type": "input_dummy"
+ }, {
+ "name": "x1",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "y1",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "x2",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "y2",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "VAR",
+ "type": "input_value",
+ //"check": "Number"
+ }
+
+ ],
+ "inputsInline": true,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_HELPURL,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_display_line_TOOLTIP,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_display_line_MESSAGE0,
+ "nextStatement": null,
+ "previousStatement": null
+ });
+ }
+};
+
+const onboard_tft_shift = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP, 'shift_up'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN, 'shift_down'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, 'shift_left'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, 'shift_right'],
+ ];
+ //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ // this.setOutput(true);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET)
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.appendValueInput('val')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_SHIFT)
+ .setCheck(Number);
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_UNIT)
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET3;
+ var TOOLTIPS = {
+ 'up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP,
+ 'down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN,
+ 'left': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT,
+ 'right': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT
+ };
+ return mode0 + mode1 + TOOLTIPS[mode] + mode2;
+ });
+ }
+};
+
+const onboard_tft_get_pixel = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);
+ this.appendValueInput('y')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_BRIGHTNESS);
+ }
+};
+
+const onboard_tft_bright_point = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LCD_SETCOLOR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);
+ this.appendValueInput('y')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_DISPLAY_SETPIXEL);
+ }
+};
+
+
+
+const onboard_tft_clear = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Clear_display);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Clear_display);
+ }
+};
+
+const onboard_tft_get_screen_pixel = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);
+ }
+};
+
+const onboard_tft_bright_screen = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('x')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS + ' 0.0-1.0');
+ }
+};
+
+const onboard_tft_fill = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SCREEN_FILL)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const onboard_tft_clock_init = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_INIT_CLOCK);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CENTER_POS);
+ this.appendValueInput("x")
+ .setCheck(Number)
+ .appendField('x');
+ this.appendValueInput("y")
+ .setCheck(Number)
+ .appendField('y');
+ this.appendValueInput("size")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_CIRCLE_RADIUS);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const onboard_tft_clock_get_rtctime = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.GET_RTCTIME);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const onboard_tft_clock_set_time = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.SET_TIME);
+ this.appendValueInput("h")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HOUR);
+ this.appendValueInput("m")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MINUTE);
+ this.appendValueInput("s")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SECOND);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const onboard_tft_clock_draw = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DRAW_CLOCK);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const onboard_tft_clock_clear = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendValueInput('SUB')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CLEAR_CLOCK);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STM32_TFT_BACKGROUND_COLOR);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const onboard_tft_display_shape_circle = {
+ init: function () {
+ this.jsonInit({
+ "colour": DISPLAY_ONBOARD_HUE,
+ "args0": [
+ {
+ "name": "shape",
+ "options": [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_HOLLOW, 'False'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MPYTHON_DISPLAY_SOLID, 'True']
+ ],
+ "type": "field_dropdown"
+ },
+ {
+ "type": "input_dummy"
+ },
+ {
+ "name": "x",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "y",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "r",
+ "type": "input_value",
+ //"check": "Number"
+ },
+ {
+ "name": "VAR",
+ "type": "input_value",
+ //"check": "Number"
+ }
+
+ ],
+ "inputsInline": true,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mpython_HELPURL,
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ONBOARD_TFT_DISPLAY_SHAPE_CIRCLE_MESSAGE0,
+ "nextStatement": null,
+ "previousStatement": null
+ });
+ }
+};
+
+const draw_pointer = {
+ init: function () {
+ this.setColour(DISPLAY_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DRAW_POINTER)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DRAW_POINTER_ANGLE);
+ this.appendValueInput('angle');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DRAW_POINTER_DU);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DRAW_POINTER_TOOLTIP);
+ }
+};
+
+/***/ }),
+
+/***/ "../micropython/blocks/factory.js":
+/*!****************************************!*\
+ !*** ../micropython/blocks/factory.js ***!
+ \****************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ factory_block: () => (/* binding */ factory_block),
+/* harmony export */ factory_block_return: () => (/* binding */ factory_block_return),
+/* harmony export */ factory_block_return_with_textarea: () => (/* binding */ factory_block_return_with_textarea),
+/* harmony export */ factory_block_with_textarea: () => (/* binding */ factory_block_with_textarea),
+/* harmony export */ factory_callMethod_noreturn: () => (/* binding */ factory_callMethod_noreturn),
+/* harmony export */ factory_callMethod_return: () => (/* binding */ factory_callMethod_return),
+/* harmony export */ factory_create_with_container: () => (/* binding */ factory_create_with_container),
+/* harmony export */ factory_create_with_item: () => (/* binding */ factory_create_with_item),
+/* harmony export */ factory_declare: () => (/* binding */ factory_declare),
+/* harmony export */ factory_from_import: () => (/* binding */ factory_from_import),
+/* harmony export */ factory_function_noreturn: () => (/* binding */ factory_function_noreturn),
+/* harmony export */ factory_function_return: () => (/* binding */ factory_function_return),
+/* harmony export */ factory_import: () => (/* binding */ factory_import),
+/* harmony export */ folding_block: () => (/* binding */ folding_block)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const FACTORY_HUE = "#777777"//65;
+
+const factory_from_import = {
+ init: function () {
+ this.setColour(FACTORY_HUE);
+ this.appendDummyInput("")
+ .appendField("from ")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('ESP32'), 'path')
+ .appendField(" import ")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('*'), 'module');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const factory_import = {
+ init: function () {
+ this.setColour(FACTORY_HUE);
+ this.appendDummyInput("")
+ .appendField("import ")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('module'), 'module');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const factory_function_noreturn = {
+ init: function () {
+ //console.log('init');
+ this.setColour(FACTORY_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('my_function'), 'NAME');
+ this.itemCount_ = 1;
+ this.arguments_ = ['x'];//add
+ this.updateShape_();
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['factory_create_with_item'], this));
+ },
+ mutationToDom: function () {
+ //console.log('mutationToDom');
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ //add
+ for (var i = 0; i < this.arguments_.length; i++) {
+ var parameter = document.createElement('arg');
+ parameter.setAttribute('name', this.arguments_[i]);
+ container.appendChild(parameter);
+ }
+ return container;
+ },
+ domToMutation: function (xmlElement) {
+ //console.log('domToMutation');
+ this.arguments_ = [];//add
+ //add
+ for (var i = 0; xmlElement.childNodes[i]; i++) {
+ let childNode = xmlElement.childNodes[i];
+ if (childNode.nodeName.toLowerCase() == 'arg') {
+ this.arguments_.push(childNode.getAttribute('name'));
+ }
+ }
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+ decompose: function (workspace) {
+ //console.log('decompose');
+ var containerBlock =
+ workspace.newBlock('factory_create_with_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK')
+ .connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('factory_create_with_item');
+ itemBlock.initSvg();
+ itemBlock.setFieldValue(this.arguments_[i], 'NAME');//add
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+ compose: function (containerBlock) {
+ //console.log('compose');
+ this.arguments_ = [];//add
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ this.arguments_.push(itemBlock.getFieldValue('NAME'));//add
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+ saveConnections: function (containerBlock) {
+ //console.log('saveConnections');
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+ updateShape_: function () {
+ //console.log('updateShape_');
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ var i = 0;
+ while (this.getInput('ADD' + i)) {
+ this.removeInput('ADD' + i);
+ i++;
+ }
+ }
+ // Rebuild block.
+ for (var i = 0; i < this.itemCount_; i++) {
+ this.appendValueInput('ADD' + i)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(this.arguments_[i]);
+ }
+ }
+};
+
+const factory_create_with_container = {
+ init: function () {
+ this.setColour(FACTORY_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMS);
+ this.appendStatementInput('STACK');
+ this.contextMenu = false;
+ }
+};
+
+const factory_create_with_item = {
+ init: function () {
+ this.setColour(FACTORY_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_CREATE_WITH_ITEM_TITLE + ':')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('x'), 'NAME');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.contextMenu = false;
+ }
+};
+
+const factory_function_return = {
+ init: function () {
+ this.setColour(FACTORY_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('my_function'), 'NAME');
+ this.itemCount_ = 1;
+ this.arguments_ = ['x'];//add
+ this.updateShape_();
+ this.setOutput(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['factory_create_with_item'], this));
+ },
+ mutationToDom: factory_function_noreturn.mutationToDom,
+ domToMutation: factory_function_noreturn.domToMutation,
+ decompose: factory_function_noreturn.decompose,
+ compose: factory_function_noreturn.compose,
+ saveConnections: factory_function_noreturn.saveConnections,
+ updateShape_: factory_function_noreturn.updateShape_
+};
+
+const factory_declare = {
+ init: function () {
+ this.setColour(FACTORY_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('test'), 'NAME')
+ .appendField("=")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('Test'), 'TYPE')
+ .appendField("()");
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+}
+
+
+const factory_callMethod_noreturn = {
+ init: function () {
+ this.setColour(FACTORY_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('test'), 'NAME')
+ .appendField('.')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('callMethod'), 'METHOD');
+ this.itemCount_ = 1;
+ this.arguments_ = ['x'];//add
+ this.updateShape_();
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['factory_create_with_item'], this));
+ },
+ mutationToDom: factory_function_noreturn.mutationToDom,
+ domToMutation: factory_function_noreturn.domToMutation,
+ decompose: factory_function_noreturn.decompose,
+ compose: factory_function_noreturn.compose,
+ saveConnections: factory_function_noreturn.saveConnections,
+ updateShape_: factory_function_noreturn.updateShape_
+};
+
+const factory_callMethod_return = {
+ init: function () {
+ this.setColour(FACTORY_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('test'), 'NAME')
+ .appendField('.')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('callMethod'), 'METHOD');
+ this.itemCount_ = 1;
+ this.arguments_ = ['x'];//add
+ this.updateShape_();
+ this.setOutput(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['factory_create_with_item'], this));
+ },
+ mutationToDom: factory_function_noreturn.mutationToDom,
+ domToMutation: factory_function_noreturn.domToMutation,
+ decompose: factory_function_noreturn.decompose,
+ compose: factory_function_noreturn.compose,
+ saveConnections: factory_function_noreturn.saveConnections,
+ updateShape_: factory_function_noreturn.updateShape_
+};
+
+const factory_block = {
+ init: function () {
+ this.setColour(FACTORY_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('display.scroll("Hello World!")'), 'VALUE');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const factory_block_return = {
+ init: function () {
+ this.setColour(FACTORY_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('test'), 'VALUE');
+ this.setOutput(true);
+ }
+};
+
+const factory_block_with_textarea = {
+ init: function () {
+ this.setColour(FACTORY_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldMultilineInput('display.scroll("Hello World!")\ndisplay.scroll("Hello Mixly!")'), 'VALUE');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const factory_block_return_with_textarea = {
+ init: function () {
+ this.setColour(FACTORY_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldMultilineInput('Hello\nMixly'), 'VALUE');
+ this.setOutput(true);
+ }
+};
+
+const folding_block = {
+ init: function () {
+ this.setColour(FACTORY_HUE);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.FOLDING_BLOCK), "peien");
+ this.appendStatementInput('DO')
+ .appendField('');
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.FOLDING_BLOCK_HELP);
+ }
+};
+
+/***/ }),
+
+/***/ "../micropython/blocks/inout.js":
+/*!**************************************!*\
+ !*** ../micropython/blocks/inout.js ***!
+ \**************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ controls_pin_attachInterrupt: () => (/* binding */ controls_pin_attachInterrupt),
+/* harmony export */ inout_analog_atten: () => (/* binding */ inout_analog_atten),
+/* harmony export */ inout_analog_read: () => (/* binding */ inout_analog_read),
+/* harmony export */ inout_analog_read_init: () => (/* binding */ inout_analog_read_init),
+/* harmony export */ inout_analog_write: () => (/* binding */ inout_analog_write),
+/* harmony export */ inout_analog_write_init: () => (/* binding */ inout_analog_write_init),
+/* harmony export */ inout_analog_write_set: () => (/* binding */ inout_analog_write_set),
+/* harmony export */ inout_analog_write_set_freq: () => (/* binding */ inout_analog_write_set_freq),
+/* harmony export */ inout_digital_init: () => (/* binding */ inout_digital_init),
+/* harmony export */ inout_digital_read: () => (/* binding */ inout_digital_read),
+/* harmony export */ inout_digital_write: () => (/* binding */ inout_digital_write),
+/* harmony export */ inout_highlow: () => (/* binding */ inout_highlow),
+/* harmony export */ inout_pinMode: () => (/* binding */ inout_pinMode),
+/* harmony export */ inout_pin_attachInterrupt: () => (/* binding */ inout_pin_attachInterrupt),
+/* harmony export */ inout_pin_pressed: () => (/* binding */ inout_pin_pressed),
+/* harmony export */ inout_pin_pressed_init: () => (/* binding */ inout_pin_pressed_init),
+/* harmony export */ inout_pwm_analog_write: () => (/* binding */ inout_pwm_analog_write),
+/* harmony export */ inout_pwm_analog_write_init: () => (/* binding */ inout_pwm_analog_write_init),
+/* harmony export */ inout_pwm_analog_write_set_freq: () => (/* binding */ inout_pwm_analog_write_set_freq),
+/* harmony export */ pin_pressed: () => (/* binding */ pin_pressed),
+/* harmony export */ pin_pressed_init: () => (/* binding */ pin_pressed_init)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const BASE_HUE = 20//'#ae3838';//40;
+
+const inout_highlow = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HIGH, "HIGH"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LOW, "LOW"]]), 'BOOL')
+ this.setOutput(true, Boolean);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_HIGHLOW_TOOLTIP);
+ }
+};
+
+const inout_digital_write = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Digital_PINMODEOUT)
+ .setCheck(Number);
+ this.appendValueInput("STAT")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STAT)
+ .setCheck([Number, Boolean]);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_DIGITAL_WRITE_TOOLTIP);
+ }
+};
+
+const inout_digital_read = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Digital_PINMODEIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MACHINE_VALUE)
+ this.setInputsInline(true);
+ this.setOutput(true, [Boolean, Number]);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_DIGITAL_READ_TOOLTIP);
+ }
+};
+
+const inout_pwm_analog_write = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField("PWM" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Analog_PINMODEOUT)
+ .setCheck(Number);
+ this.appendValueInput("NUM", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_VALUE2)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_PWM_ANALOG_WRITE_TOOLTIP);
+ }
+};
+
+const inout_analog_write = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField("DAC" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Analog_PINMODEOUT)
+ .setCheck(Number);
+ this.appendValueInput("NUM", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_VALUE2)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_TOOLTIP);
+ }
+};
+
+const inout_analog_write_set = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Analog_PINMODEOUT)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_PERIOD_MIL)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_mSecond, "period"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_uSecond, "period_microseconds"]
+ ]), "key");
+ this.appendValueInput("NUM", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STAT)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_SET_TOOLTIP);
+ }
+};
+
+const inout_pwm_analog_write_set_freq = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField("PWM" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Analog_PINMODEOUT)
+ .setCheck(Number);
+ this.appendValueInput("NUM", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STAT)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_PWM_ANALOG_WRITE_SET_FREQ_TOOLTIP);
+ }
+};
+
+const inout_analog_read = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Analog_PINMODEIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MACHINE_VALUE)
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_ANALOG_READ_TOOLTIP);
+ }
+};
+
+const inout_analog_atten = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Analog_PINMODEIN)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_REF_VOLTAGE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STAT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["3.3V", "machine.ADC.ATTN_11DB"],
+ ["2.2V", "machine.ADC.ATTN_6DB"],
+ ["1.5V", "machine.ADC.ATTN_2_5DB"],
+ ["1.2V", "machine.ADC.ATTN_0DB"]
+ ]), "atten");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_ANALOG_ATTEN_TOOLTIP);
+ }
+};
+
+
+const inout_pin_pressed = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput('pin')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TOUCH_SENSOR);
+ // this.appendDummyInput()
+ // .appendField(Blockly.Msg.MIXLY_IS_TOUCHED);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MACHINE_VALUE)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_TOOLTIP);
+ }
+};
+
+const inout_pin_attachInterrupt = {
+ init: function () {
+ this.setColour(20);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ATTACHINTERRUPT_PIN)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RISING, "machine.Pin.IRQ_RISING"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FALLING, "machine.Pin.IRQ_FALLING"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHANGE, "(machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING)"]]), "mode");
+ this.appendValueInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_PIN_ATTACHINTERRUPT_TOOLTIP);
+ }
+};
+
+const inout_digital_init = {
+ init: function () {
+ this.setColour(20);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('pin#'), 'PIN_OBJ');
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_AS)
+ // .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE+Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Digital_PINMODEOUT, "machine.Pin.OUT"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Digital_PINMODEIN, "machine.Pin.IN"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PINMODEPULLUP, "machine.Pin.IN, machine.Pin.PULL_UP"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PINMODEPULLDOWN, "machine.Pin.IN, machine.Pin.PULL_DOWN"]
+ ]), "MODE")
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_DIGITAL_INIT_TOOLTIP);
+ },
+ getVars: function () {
+ return [this.getFieldValue('PIN_OBJ') == 'pin#' ? null : this.getFieldValue('PIN_OBJ')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
+ this.setTitleValue(newName, 'PIN_OBJ');
+ }
+ }
+};
+
+const inout_pwm_analog_write_init = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ // this.appendValueInput("PIN", Number)
+ // .appendField(Blockly.Msg.MIXLY_SETUP)
+ // .appendField("PWM"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)
+ // .appendField('pwm')
+ // .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('pwm#'), 'PIN_OBJ')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_AS)
+ this.appendDummyInput("")
+ .appendField("PWM" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Analog_PINMODEOUT)
+ // .appendField('pwm')
+ // .appendField(new Blockly.FieldDropdown(profile.default.pwm_pin),"PIN")
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_PWM_ANALOG_WRITE_INIT_TOOLTIP);
+ },
+ getVars: function () {
+ return [this.getFieldValue('PIN_OBJ') == 'pwm#' ? null : this.getFieldValue('PIN_OBJ')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
+ this.setTitleValue(newName, 'PIN_OBJ');
+ }
+ }
+};
+
+const inout_analog_write_init = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ // this.appendValueInput("PIN", Number)
+ // .appendField(Blockly.Msg.MIXLY_SETUP)
+ // .appendField("PWM"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)
+ // .appendField('pwm')
+ // .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('dac#'), 'PIN_OBJ')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_AS)
+ this.appendDummyInput("")
+ .appendField("DAC" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Analog_PINMODEOUT)
+ // .appendField('dac')
+ // .appendField(new Blockly.FieldDropdown(profile.default.dac_pin),"PIN")
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_INIT_TOOLTIP);
+ },
+ getVars: function () {
+ return [this.getFieldValue('PIN_OBJ') == 'dac#' ? null : this.getFieldValue('PIN_OBJ')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
+ this.setTitleValue(newName, 'PIN_OBJ');
+ }
+ }
+};
+
+const inout_analog_read_init = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ // this.appendValueInput("PIN", Number)
+ // .appendField(Blockly.Msg.MIXLY_SETUP)
+ // .appendField("PWM"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)
+ // .appendField('pwm')
+ // .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('adc#'), 'PIN_OBJ')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_AS)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Analog_PINMODEIN)
+ // .appendField('adc')
+ // .appendField(new Blockly.FieldDropdown(profile.default.adc_pin),"PIN")
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_ANALOG_READ_INIT_TOOLTIP);
+ },
+ getVars: function () {
+ return [this.getFieldValue('PIN_OBJ') == 'adc#' ? null : this.getFieldValue('PIN_OBJ')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
+ this.setTitleValue(newName, 'PIN_OBJ');
+ }
+ }
+};
+
+const inout_pin_pressed_init = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ // this.appendValueInput("PIN", Number)
+ // .appendField(Blockly.Msg.MIXLY_SETUP)
+ // .appendField("PWM"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)
+ // .appendField('pwm')
+ // .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('tc#'), 'PIN_OBJ')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_AS)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TOUCH_SENSOR)
+ // .appendField('tc')
+ // .appendField(new Blockly.FieldDropdown(profile.default.tc_pin),"PIN")
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_INIT_TOOLTIP);
+ },
+ getVars: function () {
+ return [this.getFieldValue('PIN_OBJ') == 'tc#' ? null : this.getFieldValue('PIN_OBJ')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
+ this.setTitleValue(newName, 'PIN_OBJ');
+ }
+ }
+};
+
+const inout_pinMode = inout_digital_init;
+const inout_analog_write_set_freq = inout_pwm_analog_write_set_freq;
+const pin_pressed_init = inout_pin_pressed_init;
+const pin_pressed = inout_pin_pressed;
+const controls_pin_attachInterrupt = inout_pin_attachInterrupt;
+
+
+/***/ }),
+
+/***/ "../micropython/blocks/iot.js":
+/*!************************************!*\
+ !*** ../micropython/blocks/iot.js ***!
+ \************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE: () => (/* binding */ IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE),
+/* harmony export */ IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE: () => (/* binding */ IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE),
+/* harmony export */ IOT_EMQX_PING: () => (/* binding */ IOT_EMQX_PING),
+/* harmony export */ IOT_FORMATTING: () => (/* binding */ IOT_FORMATTING),
+/* harmony export */ IOT_FORMAT_STRING: () => (/* binding */ IOT_FORMAT_STRING),
+/* harmony export */ IOT_MIXIO_NTP: () => (/* binding */ IOT_MIXIO_NTP),
+/* harmony export */ IOT_MIXIO_PUBLISH: () => (/* binding */ IOT_MIXIO_PUBLISH),
+/* harmony export */ IOT_MIXIO_SUBSCRIBE: () => (/* binding */ IOT_MIXIO_SUBSCRIBE),
+/* harmony export */ iot_checkonenet: () => (/* binding */ iot_checkonenet),
+/* harmony export */ iot_client_onboard: () => (/* binding */ iot_client_onboard),
+/* harmony export */ iot_create_with_item: () => (/* binding */ iot_create_with_item),
+/* harmony export */ iot_http_client: () => (/* binding */ iot_http_client),
+/* harmony export */ iot_http_data: () => (/* binding */ iot_http_data),
+/* harmony export */ iot_mixio_check: () => (/* binding */ iot_mixio_check),
+/* harmony export */ iot_mixio_connect: () => (/* binding */ iot_mixio_connect),
+/* harmony export */ iot_mixio_connect_only: () => (/* binding */ iot_mixio_connect_only),
+/* harmony export */ iot_mixio_disconnect: () => (/* binding */ iot_mixio_disconnect),
+/* harmony export */ iot_mixio_format_msg: () => (/* binding */ iot_mixio_format_msg),
+/* harmony export */ iot_mixio_format_topic: () => (/* binding */ iot_mixio_format_topic),
+/* harmony export */ iot_mixly_key: () => (/* binding */ iot_mixly_key),
+/* harmony export */ iot_mqtt_client: () => (/* binding */ iot_mqtt_client),
+/* harmony export */ iot_mqtt_data: () => (/* binding */ iot_mqtt_data),
+/* harmony export */ iot_onenet_check: () => (/* binding */ iot_onenet_check),
+/* harmony export */ iot_onenet_connect: () => (/* binding */ iot_onenet_connect),
+/* harmony export */ iot_onenet_disconnect: () => (/* binding */ iot_onenet_disconnect),
+/* harmony export */ iot_onenet_publish: () => (/* binding */ iot_onenet_publish),
+/* harmony export */ iot_onenet_publish_dict: () => (/* binding */ iot_onenet_publish_dict),
+/* harmony export */ iot_onenetconnect: () => (/* binding */ iot_onenetconnect),
+/* harmony export */ iot_onenetdisconnect: () => (/* binding */ iot_onenetdisconnect),
+/* harmony export */ iot_publish: () => (/* binding */ iot_publish),
+/* harmony export */ iot_publish_container: () => (/* binding */ iot_publish_container),
+/* harmony export */ iot_publish_item: () => (/* binding */ iot_publish_item),
+/* harmony export */ iot_wifi_connect: () => (/* binding */ iot_wifi_connect),
+/* harmony export */ iot_wificonnect: () => (/* binding */ iot_wificonnect)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+const IOT_HUE = '#526FC3';
+//'#2FAD7A';
+
+const iot_wifi_connect = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_CONNECT_WIFI);
+ this.appendValueInput('WIFINAME')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_NAME);
+ this.appendValueInput('PASSWORD')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_PASSWORD);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_WIFI_CONNECT_TOOLTIP);
+ }
+};
+
+const iot_onenet_connect = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField("OneNET" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_JOIN);
+ this.appendValueInput('CLIENT')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ONENET_CLIENT);
+ this.appendValueInput('SERVER')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ONENET_SERVER);
+ this.appendValueInput('USERNAME')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ONENET_USERNAME);
+ this.appendValueInput('PASSWORD')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ONENET_PASSWORD);
+ this.appendValueInput('TOPIC')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ONENET_TOPIC);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_ONENET_SUB);
+ //this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_ONENET_CONNECT_TOOLTIP);
+ }
+};
+
+const iot_onenet_disconnect = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField("OneNET")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_DISCONNECT_ONENET);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_ONENET_DISCONNECT_TOOLTIP);
+ }
+};
+
+const iot_onenet_check = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField("OneNET")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_CHECK_ONENET);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_ONENET_CHECK_TOOLTIP);
+ }
+};
+
+const iot_onenet_publish_dict = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField("OneNET")
+ this.appendValueInput('DICT')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_PUBLISH_ONENET);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_ONENET_PRINT_DATA)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldCheckbox('TRUE'), 'is_print');
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_ONENET_PUBLISH_DICT_TOOLTIP);
+ }
+};
+
+const iot_onenet_publish = {
+ /**
+ * Block for creating a list with any number of elements of any type.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField("OneNET")
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldLabel(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_PUBLISH_ONENET), 'TIP')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ this.itemCount_ = 2;
+ this.updateShape_();
+ this.setInputsInline(false);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['iot_publish_item'], this));
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_ONENET_PUBLISH_TOOLTIP);
+ },
+ /**
+ * Create XML to represent list inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+ /**
+ * Parse XML to restore the list inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('iot_publish_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('iot_create_with_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ let i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (let i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @private
+ * @this Blockly.Block
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ }
+ var keyNames = [];
+ for (let i = 0; this.getInput('ADD' + i); i++) {
+ //this.getInput('VALUE' + i).removeField("KEY"+i);
+ keyNames.push(this.getFieldValue("KEY" + i))
+ this.removeInput('ADD' + i);
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ //this.getField('TIP')
+ //.setText(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET_EMPTY);
+ this.setFieldValue(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_PUBLISH_ONENET_EMPTY, 'TIP');
+ } else {
+ //this.getField('TIP')
+ //.setText(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET);
+ this.setFieldValue(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_PUBLISH_ONENET, 'TIP');
+ for (let i = 0; i < this.itemCount_; i++) {
+ this.appendValueInput('ADD' + i)
+ .setCheck(null)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(
+ new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput(
+ keyNames.length > i
+ ? keyNames[i]
+ : '"key' + (i + 1) + '"'),
+ 'KEY' + i)
+ .appendField(":")
+ }
+ }
+ }, getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+};
+
+const iot_publish_container = {
+ /**
+ * Mutator block for list container.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_DICT);
+ this.appendStatementInput('STACK');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_CREATE_WITH_CONTAINER_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+
+const iot_publish_item = {
+ /**
+ * Mutator bolck for adding items.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_CREATE_WITH_ITEM_TITLE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_CREATE_WITH_ITEM_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const iot_create_with_item = {
+ /**
+ * Mutator bolck for adding items.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_CREATE_WITH_ITEM_TITLE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_CREATE_WITH_ITEM_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+
+const iot_mixio_connect = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT);
+ this.appendValueInput('SERVER')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_SERVER)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ this.appendValueInput('USERNAME')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIFI_USERNAME)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ this.appendValueInput('PASSWORD')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IOT_PASSWORD)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ this.appendValueInput('PROJECT')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_PROJECT)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const IOT_MIXIO_PUBLISH = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField("MixIO")
+ this.appendValueInput('TOPIC')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_PUBLISH_NEW)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_PUBLISH_TOPIC);
+ this.appendValueInput('MSG')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_BODY);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_EMQX_PUBLISH_TOOLTIP);
+ }
+};
+
+const IOT_MIXIO_SUBSCRIBE = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField("MixIO")
+ this.appendValueInput('TOPIC')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_SUBSCRIBE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_MSG)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_PUBLISH_TOPIC);
+ this.appendValueInput('METHOD')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_SET_METHOD);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_EMQX_SUBSCRIBE_TOOLTIP);
+ }
+};
+
+const iot_mixio_disconnect = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField("MixIO")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_DISCONNECT_ONENET);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ // this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_DISCONNECT_TOOLTIP);
+ }
+};
+
+const iot_mixio_connect_only = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField("MixIO")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_CONNECT);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ // this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_DISCONNECT_TOOLTIP);
+ }
+};
+
+const iot_mixio_check = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField("MixIO")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_CHECK_ONENET);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ // this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_CHECK_TOOLTIP);
+ }
+};
+
+const iot_mixio_format_topic = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_FORMAT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MQTT_Topic);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const iot_mixio_format_msg = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_FORMAT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_PUBLISH_MSG);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const IOT_FORMATTING = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_MAP_FORMATING);
+ this.setOutput(true);
+ // this.setTooltip();
+ }
+};
+
+const IOT_FORMAT_STRING = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_FORMAT + '(Json)');
+ this.setOutput(true);
+ // this.setTooltip();
+ }
+};
+
+const IOT_EMQX_PING = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ // this.appendValueInput('VAR')
+ // .setCheck("var")
+ this.appendDummyInput()
+ .appendField("MixIO")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_PING);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_EMQX_PING_TOOLTIP);
+ }
+};
+
+const IOT_MIXIO_NTP = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ // this.appendValueInput('VAR')
+ // .setCheck("var")
+ this.appendDummyInput()
+ .appendField("MixIO")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_NTP)
+ this.appendValueInput('addr')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blynk_SERVER_ADD);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT);
+ this.appendValueInput('SERVER')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_SERVER)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput('KEY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXIO_SHARE_KEY)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+
+const IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT);
+ this.appendValueInput('SERVER')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_SERVER)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput('KEY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "Mixly Key")
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+
+const iot_mixly_key = {
+ init: function () {
+ this.VISITOR_ID = mixly__WEBPACK_IMPORTED_MODULE_1__.Config.BOARD.visitorId.str32.substring(0, 8).toUpperCase();
+ this.setColour(IOT_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput(this.visitorId), 'VISITOR_ID');
+ this.setOutput(true, null);
+ },
+ onchange: function () {
+ const nowVisitorId = this.getFieldValue('VISITOR_ID');
+ if (this.VISITOR_ID !== nowVisitorId)
+ this.setFieldValue(this.VISITOR_ID, 'VISITOR_ID');
+ }
+};
+
+const iot_client_onboard = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField('MixIO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catEthernet_clinet);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const iot_http_client = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ // this.appendValueInput('VAR')
+ // .setCheck("var")
+ this.appendDummyInput()
+ .appendField("HTTP" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Client)
+ this.appendValueInput('addr')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_REQUESTS_GET)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_CURRENT_TIME)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OPEN_DEBUG)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, "False"]
+ ]), "key");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const iot_http_data = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField("HTTP" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Client)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_REQUESTS_LEN, "client_len"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_REQUESTS_GET_LEN, "server_len"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_REQUESTS_MESSAGE, "text"]
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+
+ }
+};
+
+const iot_mqtt_client = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ // this.appendValueInput('VAR')
+ // .setCheck("var")
+ this.appendDummyInput()
+ .appendField("MQTT" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Client)
+ this.appendValueInput('addr')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CONNECTTO);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_INIT_SUBSCRIBE)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MQTT_Topic)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_CURRENT_TIME, ""],
+ ]), "key")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OPEN_DEBUG)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, "False"]
+ ]), "key2");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const iot_mqtt_data = {
+ init: function () {
+ this.setColour(IOT_HUE);
+ this.appendDummyInput()
+ .appendField("MQTT" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Client)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_REQUESTS_LEN, "client_len"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_REQUESTS_GET_LEN, "server_len"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_REQUESTS_MESSAGE, "time_msg()"]
+ ]), "key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+
+ }
+};
+
+const iot_wificonnect = iot_wifi_connect;
+const iot_onenetconnect = iot_onenet_connect;
+const iot_onenetdisconnect = iot_onenet_disconnect;
+const iot_checkonenet = iot_onenet_check;
+const iot_publish = iot_onenet_publish;
+
+/***/ }),
+
+/***/ "../micropython/blocks/network.js":
+/*!****************************************!*\
+ !*** ../micropython/blocks/network.js ***!
+ \****************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ educore_mqtt_connect: () => (/* binding */ educore_mqtt_connect),
+/* harmony export */ educore_mqtt_connect_success: () => (/* binding */ educore_mqtt_connect_success),
+/* harmony export */ educore_mqtt_subscribe_message: () => (/* binding */ educore_mqtt_subscribe_message),
+/* harmony export */ educore_mqtt_topic_publish: () => (/* binding */ educore_mqtt_topic_publish),
+/* harmony export */ educore_mqtt_topic_subscribe: () => (/* binding */ educore_mqtt_topic_subscribe),
+/* harmony export */ educore_wifi_connect: () => (/* binding */ educore_wifi_connect),
+/* harmony export */ network_ap_connect: () => (/* binding */ network_ap_connect),
+/* harmony export */ network_connect: () => (/* binding */ network_connect),
+/* harmony export */ network_get_connect: () => (/* binding */ network_get_connect),
+/* harmony export */ network_get_wifi: () => (/* binding */ network_get_wifi),
+/* harmony export */ network_init: () => (/* binding */ network_init),
+/* harmony export */ network_is_active: () => (/* binding */ network_is_active),
+/* harmony export */ network_open: () => (/* binding */ network_open),
+/* harmony export */ network_scan: () => (/* binding */ network_scan),
+/* harmony export */ network_server: () => (/* binding */ network_server),
+/* harmony export */ network_socket_accept: () => (/* binding */ network_socket_accept),
+/* harmony export */ network_socket_bind: () => (/* binding */ network_socket_bind),
+/* harmony export */ network_socket_close: () => (/* binding */ network_socket_close),
+/* harmony export */ network_socket_connect: () => (/* binding */ network_socket_connect),
+/* harmony export */ network_socket_init: () => (/* binding */ network_socket_init),
+/* harmony export */ network_socket_listen: () => (/* binding */ network_socket_listen),
+/* harmony export */ network_socket_receive: () => (/* binding */ network_socket_receive),
+/* harmony export */ network_socket_receive_from: () => (/* binding */ network_socket_receive_from),
+/* harmony export */ network_socket_send: () => (/* binding */ network_socket_send),
+/* harmony export */ network_socket_send_to: () => (/* binding */ network_socket_send_to),
+/* harmony export */ network_stop: () => (/* binding */ network_stop),
+/* harmony export */ network_wifi_connect: () => (/* binding */ network_wifi_connect),
+/* harmony export */ ntptime_address: () => (/* binding */ ntptime_address),
+/* harmony export */ ntptime_time: () => (/* binding */ ntptime_time),
+/* harmony export */ requests_attribute: () => (/* binding */ requests_attribute),
+/* harmony export */ requests_attribute2: () => (/* binding */ requests_attribute2),
+/* harmony export */ requests_get: () => (/* binding */ requests_get),
+/* harmony export */ requests_get2: () => (/* binding */ requests_get2),
+/* harmony export */ requests_method: () => (/* binding */ requests_method),
+/* harmony export */ requests_post: () => (/* binding */ requests_post)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const NETWORK_HUE = 225;
+
+const network_init = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_INIT)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ['STA', "STA"],
+ ['AP', "AP"]
+ ]), "mode");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_INIT_TOOLTIP);
+ }
+};
+
+
+const network_open = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_WIFI_OPEN, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_WIFI_CLOSE, "False"]
+ ]), "op");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_WIFI_FLAG)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('op');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_OPEN_TOOLTIP;
+ var TOOLTIPS = {
+ 'True': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_WIFI_OPEN,
+ 'False': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_WIFI_CLOSE,
+ };
+ return TOOLTIPS[mode] + mode0
+ });
+ }
+};
+
+const network_is_active = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_WIFI_IS_ACTIVE)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_WIFI_IS_ACTIVE);
+ }
+};
+
+const network_scan = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_WIFI_SCAN)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(function () {
+ var mode = 'all';
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_SCAN_TOOLTIP
+ var TOOLTIPS = {
+ '0': "ssid",
+ '1': 'bssid',
+ '2': "channel",
+ '3': "RSSI",
+ '4': "authmode",
+ '5': "hidden",
+ 'all': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_WIFI_SCAN_ATTRIBUTE,
+ };
+ return mode0 + TOOLTIPS[mode]
+ });
+ }
+};
+
+const network_connect = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_CONNECT);
+ this.appendValueInput('id')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_NAME);
+ this.appendValueInput('password')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_PASSWORD);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_CONNECT_TOOLTIP);
+ }
+};
+
+const network_wifi_connect = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_WIFI_CONNECT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SYMBOL_QUESTION);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_WIFI_CONNECT_TOOLTIP);
+ }
+};
+
+const network_get_connect = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_GET_WIFI);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_IP, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_MASK, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_GATEWAY, "2"],
+ ["DNS", "3"]
+ ]), "mode");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('mode');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_GET_WIFI_TOOLTIP
+ var TOOLTIPS = {
+ '0': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_IP,
+ '1': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_MASK,
+ '2': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_GATEWAY,
+ '3': "DNS",
+ };
+ return mode0 + TOOLTIPS[mode]
+ });
+ }
+};
+
+const network_stop = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_STOP_CONNECT);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_STOP_TOOLTIP);
+ }
+};
+
+const network_get_wifi = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_GET_WIFI);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_WIFI_ESSID, "essid"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_WIFI_CHANNEL, "channel"]
+ ]), "op");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_GET_WIFI_TOOLTIP);
+ }
+};
+
+const network_ap_connect = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET);
+ this.appendValueInput('essid')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_WIFI_ESSID);
+ this.appendValueInput('channel')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NETWORK_WIFI_CHANNEL);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_AP_CONNECT_TOOLTIP);
+ }
+};
+
+const network_server = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_SERVER1);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_SERVER2);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_SOCKET_CLOSE_TOOLTIP);
+ }
+};
+
+const network_socket_init = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_INIT)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_TYPE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ['TCP', "TCP"],
+ ['UDP', "UDP"]
+ ]), "mode");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('mode');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_SOCKET_INIT_TOOLTIP
+ var TOOLTIPS = {
+ 'TCP': 'TCP',
+ 'UDP': 'UDP',
+ };
+ return mode0 + TOOLTIPS[mode]
+ });
+ }
+};
+
+const network_socket_bind = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_LET_SOCKET)
+ this.appendValueInput('address')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_BIND_TO_ADDRESS);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_SOCKET_BIND_TOOLTIP);
+ }
+};
+
+const network_socket_connect = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_LET_SOCKET)
+ this.appendValueInput('address')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_CONNECT_TO_ADDRESS);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_SOCKET_CONNECT_TOOLTIP);
+ }
+};
+
+const network_socket_listen = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendValueInput('queue')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_LISTEN)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_QUEUE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_SOCKET_LISTEN_TOOLTIP);
+ }
+};
+
+const network_socket_accept = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_ACCEPT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_SOCKET_ACCEPT_TOOLTIP);
+ }
+};
+
+const network_socket_receive = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField("TCP")
+ this.appendValueInput('size')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_RECEIVE)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_SOCKET_RECEIVE_TOOLTIP);
+ }
+};
+
+const network_socket_send = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ // .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField("TCP")
+ this.appendValueInput('content')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_SEND)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_SOCKET_SEND_TOOLTIP);
+ }
+};
+
+const network_socket_receive_from = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField("UDP")
+ this.appendValueInput('size')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_RECEIVE)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_SOCKET_RECEIVE_FROM_TOOLTIP);
+ }
+};
+
+const network_socket_send_to = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ // .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ .appendField("UDP")
+ this.appendValueInput('content')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_SEND)
+ this.appendValueInput('address')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_TO);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_SOCKET_SEND_TO_TOOLTIP);
+ }
+};
+
+const network_socket_close = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("var")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_CLOSE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NETWORK_SOCKET_CLOSE_TOOLTIP);
+ }
+};
+
+
+const requests_get = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendValueInput("DOMAIN")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2)
+ .setCheck(String);
+ this.appendDummyInput("")
+
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('response'), 'VAR')
+
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_TOOLTIP);
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+
+}
+
+
+const requests_attribute = {
+ init: function () {
+ this.appendValueInput('VAL')
+
+ var attr =
+ [[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_ATTR_STATUS_CODE, 'status_code'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_ATTR_TEXT, 'text']
+ , [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_ATTR_COOKIES, 'cookies'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_ATTR_CONTENT, 'content']];
+ this.setColour(NETWORK_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(attr), 'ATTR')
+
+
+ this.setInputsInline(true);
+ this.setOutput(true, String);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('DIR');
+ var TOOLTIPS = {
+ 'clear': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TURTEL_CLEAR,
+ 'reset': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TURTEL_RESET,
+ 'home': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TURTEL_HOME
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+
+
+const requests_method = {
+ init: function () {
+ this.appendValueInput("VAR")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2)
+ .setCheck(String);
+ var method = [
+ ['post', 'post'], ['put', 'put'],
+ ['delete', 'delete'], ['head', 'head'],
+ ['option', 'option']
+ ];
+ this.setColour(NETWORK_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_CONDUCT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(method), 'DIR')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS)
+
+
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('DIR');
+ var TOOLTIPS = {
+ 'forward': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TURTEL_FORWARD,
+ 'backward': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TURTEL_BACKWARD
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const ntptime_time = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_NTP + '(NTP)')
+ this.appendValueInput("data")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blynk_SERVER_ADD)
+ this.setOutput(true, 'Tuple');
+ this.setInputsInline(true);
+ }
+};
+
+const ntptime_address = {
+ init: function () {
+ this.setColour(NETWORK_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ['ntp.aliyun.com', "ntp.aliyun.com"],
+ ['ntp1.aliyun.com', "ntp1.aliyun.com"],
+ ['ntp2.aliyun.com', "ntp2.aliyun.com"],
+ ['ntp3.aliyun.com', "ntp3.aliyun.com"],
+ ['ntp4.aliyun.com', "ntp4.aliyun.com"],
+ ['ntp5.aliyun.com', "ntp5.aliyun.com"],
+ ['ntp6.aliyun.com', "ntp6.aliyun.com"],
+ ['ntp7.aliyun.com', "ntp7.aliyun.com"],
+ ['time1.cloud.tencent.com', "time1.cloud.tencent.com"],
+ ['time2.cloud.tencent.com', "time2.cloud.tencent.com"],
+ ['time3.cloud.tencent.com', "time3.cloud.tencent.com"],
+ ['time4.cloud.tencent.com', "time4.cloud.tencent.com"],
+ ['time5.cloud.tencent.com', "time5.cloud.tencent.com"]
+ ]), 'op')
+ this.setOutput(true);
+ }
+};
+
+const COMMUNICATE_HUE = '#3288dd';
+
+const requests_get2 = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput("URL")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2)
+ .setCheck(String);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_CONDUCT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["get", "get"], ["head", "head"], ["delete", "delete"]]), 'TYPE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_REQUESTS_GET_RESULT)
+ this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip("");
+ },
+};
+
+const requests_post = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput("URL")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DISPLAY_IMAGE_LET2)
+ .setCheck(String);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_CONDUCT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["post", "post"], ["put", "put"], ["patch", "patch"]]), 'TYPE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS)
+ this.appendValueInput("data")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OLED_STRING)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_REQUESTS_GET_RESULT)
+ this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip("");
+ },
+};
+
+const requests_attribute2 = {
+ init: function () {
+ this.appendValueInput('VAL')
+
+ var attr = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_ATTR_TEXT, 'text'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_ATTR_JSON, 'json()'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_ATTR_STATUS_CODE, 'status_code'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_REQUESTS_GET_ATTR_CONTENT, 'content'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_TEXT_ENCODE, 'encoding']
+ ];
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(attr), 'ATTR')
+ this.setInputsInline(true);
+ this.setOutput(true, String);
+ }
+};
+
+//educore_networke
+const educore_wifi_connect = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_CONNECT_WIFI);
+ this.appendValueInput('WIFINAME')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_NAME);
+ this.appendValueInput('PASSWORD')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_PASSWORD);
+ this.appendValueInput('TIMEOUT')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_TIMEOUT);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MILLIS)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_WIFI_CONNECT_TOOLTIP);
+ }
+};
+
+
+
+const educore_mqtt_connect = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_IOT_EMQX_CONNECT_TOOLTIP);
+ this.appendValueInput('SERVER')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_SERVER)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ this.appendValueInput('PORT')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_PORT)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ this.appendValueInput('CLIENT_ID')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_CLIENT_ID)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ this.appendValueInput('USERNAME')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIFI_USERNAME)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ this.appendValueInput('PASSWORD')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IOT_PASSWORD)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const educore_mqtt_subscribe_message = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendValueInput('TOPIC')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_SUBSCRIBE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_MSG)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_PUBLISH_TOPIC);
+ this.appendValueInput('MESSAGE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_of);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const educore_mqtt_topic_subscribe = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField("mqtt")
+ this.appendValueInput('TOPIC')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_SUBSCRIBE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_MSG)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_PUBLISH_TOPIC);
+ this.appendValueInput('METHOD')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_SET_METHOD);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const educore_mqtt_topic_publish = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField("mqtt")
+ this.appendValueInput('TOPIC')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_PUBLISH_NEW)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_PUBLISH_TOPIC);
+ this.appendValueInput('MSG')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_BODY);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const educore_mqtt_connect_success = {
+ init: function () {
+ this.setColour(COMMUNICATE_HUE);
+ this.appendDummyInput()
+ .appendField("mqtt"+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_IS_CONNECT)
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+/***/ }),
+
+/***/ "../micropython/blocks/nova_g1.js":
+/*!****************************************!*\
+ !*** ../micropython/blocks/nova_g1.js ***!
+ \****************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ get_potential_num: () => (/* binding */ get_potential_num),
+/* harmony export */ nova_g1_motor: () => (/* binding */ nova_g1_motor),
+/* harmony export */ nova_g1_spk_en: () => (/* binding */ nova_g1_spk_en),
+/* harmony export */ nova_g1_usb: () => (/* binding */ nova_g1_usb)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+const NOVAG1_HUE = 100;
+
+const get_potential_num = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_nova") { var name = 'Nova G1' }
+ this.setColour(NOVAG1_HUE);
+ this.appendDummyInput()
+ .appendField(name)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_NOVA_POTENTIAL_NUM);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+}
+
+const nova_g1_motor = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_nova") { var name = 'Nova G1' }
+ this.setColour(NOVAG1_HUE);
+ this.appendValueInput('PIN')
+ .appendField(name)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_DC)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LCD_NUMBERING)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CLOCKWISE, "CW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANTI_CLOCKWISE, "CCW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_P, "P"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_N, "N"]
+ ]), "direction");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STEPPER_SET_SPEED);
+ this.appendDummyInput("")
+ .appendField("%")
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const nova_g1_usb = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_nova") { var name = 'Nova G1' }
+ this.setColour(NOVAG1_HUE);
+ this.appendValueInput('PIN')
+ .appendField(name)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.SET_USB);
+ this.appendValueInput('percent')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_POWER_SUPPLY);
+ this.appendDummyInput("")
+ .appendField("%")
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const nova_g1_spk_en = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_nova") { var name = 'Nova G1' }
+ this.setColour(NOVAG1_HUE);
+ this.appendDummyInput()
+ .appendField(name)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPK_STATE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ON, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OFF, "False"]
+ ]), "state");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+/***/ }),
+
+/***/ "../micropython/blocks/pe_g1.js":
+/*!**************************************!*\
+ !*** ../micropython/blocks/pe_g1.js ***!
+ \**************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ pe_g1_battery_left: () => (/* binding */ pe_g1_battery_left),
+/* harmony export */ pe_g1_dc_motor: () => (/* binding */ pe_g1_dc_motor),
+/* harmony export */ pe_g1_dc_motor_speed: () => (/* binding */ pe_g1_dc_motor_speed),
+/* harmony export */ pe_g1_servo_get_angle: () => (/* binding */ pe_g1_servo_get_angle),
+/* harmony export */ pe_g1_servo_get_speed: () => (/* binding */ pe_g1_servo_get_speed),
+/* harmony export */ pe_g1_servo_set_angle: () => (/* binding */ pe_g1_servo_set_angle),
+/* harmony export */ pe_g1_servo_set_speed: () => (/* binding */ pe_g1_servo_set_speed),
+/* harmony export */ pe_g1_use_i2c_init: () => (/* binding */ pe_g1_use_i2c_init)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+const PEG1_HUE = 100;
+
+const pe_g1_use_i2c_init = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_ce") { var name = 'CE G6' }
+ else if (version == "mixgo_pe") { var name = 'PE G1' }
+ this.setColour(PEG1_HUE);
+ this.appendValueInput('I2CSUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "I2C")
+ .setCheck("var");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .appendField(name);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ }
+};
+
+const pe_g1_battery_left = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_ce") { var name = 'CE G6' }
+ else if (version == "mixgo_pe") { var name = 'PE G1' }
+ this.setColour(PEG1_HUE);
+ this.appendValueInput('SUB')
+ .appendField(name)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_CAR_BATTERY_LEFT);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const pe_g1_dc_motor = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_ce") { var name = 'CE G6' }
+ else if (version == "mixgo_pe") { var name = 'PE G1' }
+ this.setColour(PEG1_HUE);
+ this.appendValueInput('SUB')
+ .appendField(name)
+ .setCheck("var");
+ this.appendValueInput('PIN')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_DC)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LCD_NUMBERING)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CLOCKWISE, "CW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANTI_CLOCKWISE, "CCW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_P, "P"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_N, "N"]
+ ]), "direction");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STEPPER_SET_SPEED);
+ this.appendDummyInput("")
+ .appendField("%")
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const pe_g1_dc_motor_speed = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_ce") { var name = 'CE G6' }
+ else if (version == "mixgo_pe") { var name = 'PE G1' }
+ this.setColour(PEG1_HUE);
+ this.appendValueInput('SUB')
+ .appendField(name)
+ .setCheck("var");
+ this.appendValueInput('PIN')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_DC)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LCD_NUMBERING)
+
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STEPPER_GET_SPEED);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+}
+
+const pe_g1_servo_set_angle = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_ce") { var name = 'CE G6' }
+ else if (version == "mixgo_pe") { var name = 'PE G1' }
+ this.setColour(PEG1_HUE);
+ this.appendValueInput('SUB')
+ .appendField(name)
+ .setCheck("var");
+ this.appendValueInput('PIN')
+ .appendField('180°' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LCD_NUMBERING)
+
+ this.appendValueInput("NUM", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SERVO_MOVE);
+ }
+};
+
+const pe_g1_servo_set_speed = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_ce") { var name = 'CE G6' }
+ else if (version == "mixgo_pe") { var name = 'PE G1' }
+ this.setColour(PEG1_HUE);
+ this.appendValueInput('SUB')
+ .appendField(name)
+ .setCheck("var");
+ this.appendValueInput('PIN')
+ .appendField('360°' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LCD_NUMBERING)
+
+ this.appendValueInput("NUM", Number)
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED);
+ this.appendDummyInput()
+ .appendField('%');
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SERVO_SPEED_TOOLIPS);
+ }
+};
+
+const pe_g1_servo_get_angle = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_ce") { var name = 'CE G6' }
+ else if (version == "mixgo_pe") { var name = 'PE G1' }
+ this.setColour(PEG1_HUE);
+ this.appendValueInput('SUB')
+ .appendField(name)
+ .setCheck("var");
+ this.appendValueInput('PIN')
+ .appendField('180°' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO)
+
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const pe_g1_servo_get_speed = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_ce") { var name = 'CE G6' }
+ else if (version == "mixgo_pe") { var name = 'PE G1' }
+ this.setColour(PEG1_HUE);
+ this.appendValueInput('SUB')
+ .appendField(name)
+ .setCheck("var");
+ this.appendValueInput('PIN')
+ .appendField('360°' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LCD_NUMBERING)
+
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+/***/ }),
+
+/***/ "../micropython/blocks/pins.js":
+/*!*************************************!*\
+ !*** ../micropython/blocks/pins.js ***!
+ \*************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ analog_input: () => (/* binding */ analog_input),
+/* harmony export */ analog_output: () => (/* binding */ analog_output),
+/* harmony export */ espnow_channel: () => (/* binding */ espnow_channel),
+/* harmony export */ i2c_A_pin: () => (/* binding */ i2c_A_pin),
+/* harmony export */ i2c_B_pin: () => (/* binding */ i2c_B_pin),
+/* harmony export */ pins_analog: () => (/* binding */ pins_analog),
+/* harmony export */ pins_analog_pin: () => (/* binding */ pins_analog_pin),
+/* harmony export */ pins_axis: () => (/* binding */ pins_axis),
+/* harmony export */ pins_brightness: () => (/* binding */ pins_brightness),
+/* harmony export */ pins_builtinimg: () => (/* binding */ pins_builtinimg),
+/* harmony export */ pins_button: () => (/* binding */ pins_button),
+/* harmony export */ pins_dac: () => (/* binding */ pins_dac),
+/* harmony export */ pins_dac_pin: () => (/* binding */ pins_dac_pin),
+/* harmony export */ pins_digital: () => (/* binding */ pins_digital),
+/* harmony export */ pins_digital_dot: () => (/* binding */ pins_digital_dot),
+/* harmony export */ pins_digital_pin: () => (/* binding */ pins_digital_pin),
+/* harmony export */ pins_exlcdh: () => (/* binding */ pins_exlcdh),
+/* harmony export */ pins_exlcdv: () => (/* binding */ pins_exlcdv),
+/* harmony export */ pins_imglist: () => (/* binding */ pins_imglist),
+/* harmony export */ pins_input_pin: () => (/* binding */ pins_input_pin),
+/* harmony export */ pins_one_more: () => (/* binding */ pins_one_more),
+/* harmony export */ pins_output_pin: () => (/* binding */ pins_output_pin),
+/* harmony export */ pins_playlist: () => (/* binding */ pins_playlist),
+/* harmony export */ pins_pwm: () => (/* binding */ pins_pwm),
+/* harmony export */ pins_pwm_pin: () => (/* binding */ pins_pwm_pin),
+/* harmony export */ pins_radio_datarate: () => (/* binding */ pins_radio_datarate),
+/* harmony export */ pins_radio_power: () => (/* binding */ pins_radio_power),
+/* harmony export */ pins_serial: () => (/* binding */ pins_serial),
+/* harmony export */ pins_tone_notes: () => (/* binding */ pins_tone_notes),
+/* harmony export */ pins_touch: () => (/* binding */ pins_touch),
+/* harmony export */ pins_touch_pin: () => (/* binding */ pins_touch_pin),
+/* harmony export */ pwm_input: () => (/* binding */ pwm_input),
+/* harmony export */ pwm_output: () => (/* binding */ pwm_output),
+/* harmony export */ spi_A_pin: () => (/* binding */ spi_A_pin),
+/* harmony export */ spi_B_pin: () => (/* binding */ spi_B_pin),
+/* harmony export */ spi_C_pin: () => (/* binding */ spi_C_pin),
+/* harmony export */ spi_D_pin: () => (/* binding */ spi_D_pin)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+const PINS_HUE = 230;
+
+const pins_digital = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.digital), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_digital_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.digital_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_input_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.input_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_output_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.output_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pwm_input = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.pwm_input), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const analog_input = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.analog_input), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pwm_output = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.pwm_output), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const analog_output = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.analog_output), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const espnow_channel = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.espnow_channel), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+
+const i2c_A_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.i2c_A_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const i2c_B_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.i2c_B_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+
+const spi_A_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.spi_A_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const spi_B_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.spi_B_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const spi_C_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.spi_C_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const spi_D_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.spi_D_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_analog = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.analog), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_analog_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.analog_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_dac = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.dac), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_dac_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.dac_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_button = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.button), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_pwm = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.pwm), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_pwm_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.pwm_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_touch_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.touch_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_touch = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.touch), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_serial = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.serial_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_builtinimg = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.builtinimg), 'PIN');
+ this.setOutput(true, "esp32_image");
+ }
+};
+
+const pins_imglist = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.imglist), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_playlist = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.playlist), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_exlcdh = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.exlcdh), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_exlcdv = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.exlcdv), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_axis = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.axis), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+const pins_brightness = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.brightness), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_tone_notes = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.tone_notes), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_radio_power = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.radio_power), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_radio_datarate = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.radio_datarate), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_one_more = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.one_more), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_digital_dot = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.digital_dot), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+/***/ }),
+
+/***/ "../micropython/blocks/sensor.js":
+/*!***************************************!*\
+ !*** ../micropython/blocks/sensor.js ***!
+ \***************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ HCSR04: () => (/* binding */ HCSR04),
+/* harmony export */ RTC_get_time: () => (/* binding */ RTC_get_time),
+/* harmony export */ RTC_set_date: () => (/* binding */ RTC_set_date),
+/* harmony export */ RTC_set_datetime: () => (/* binding */ RTC_set_datetime),
+/* harmony export */ RTC_set_time: () => (/* binding */ RTC_set_time),
+/* harmony export */ dht11: () => (/* binding */ dht11),
+/* harmony export */ number1: () => (/* binding */ number1),
+/* harmony export */ sensor_adxl345_get_acceleration: () => (/* binding */ sensor_adxl345_get_acceleration),
+/* harmony export */ sensor_bmp: () => (/* binding */ sensor_bmp),
+/* harmony export */ sensor_button_get_presses: () => (/* binding */ sensor_button_get_presses),
+/* harmony export */ sensor_button_is_pressed: () => (/* binding */ sensor_button_is_pressed),
+/* harmony export */ sensor_button_was_pressed: () => (/* binding */ sensor_button_was_pressed),
+/* harmony export */ sensor_compass_reset: () => (/* binding */ sensor_compass_reset),
+/* harmony export */ sensor_dht11: () => (/* binding */ sensor_dht11),
+/* harmony export */ sensor_distance_hrsc04: () => (/* binding */ sensor_distance_hrsc04),
+/* harmony export */ sensor_ds18x20: () => (/* binding */ sensor_ds18x20),
+/* harmony export */ sensor_field_strength: () => (/* binding */ sensor_field_strength),
+/* harmony export */ sensor_get_acceleration: () => (/* binding */ sensor_get_acceleration),
+/* harmony export */ sensor_light: () => (/* binding */ sensor_light),
+/* harmony export */ sensor_light_level: () => (/* binding */ sensor_light_level),
+/* harmony export */ sensor_lm35: () => (/* binding */ sensor_lm35),
+/* harmony export */ sensor_mixgo_button_attachInterrupt: () => (/* binding */ sensor_mixgo_button_attachInterrupt),
+/* harmony export */ sensor_mixgo_button_get_presses: () => (/* binding */ sensor_mixgo_button_get_presses),
+/* harmony export */ sensor_mixgo_button_is_pressed: () => (/* binding */ sensor_mixgo_button_is_pressed),
+/* harmony export */ sensor_mixgo_button_was_pressed: () => (/* binding */ sensor_mixgo_button_was_pressed),
+/* harmony export */ sensor_mixgo_extern_button_attachInterrupt: () => (/* binding */ sensor_mixgo_extern_button_attachInterrupt),
+/* harmony export */ sensor_mixgo_extern_button_get_presses: () => (/* binding */ sensor_mixgo_extern_button_get_presses),
+/* harmony export */ sensor_mixgo_extern_button_is_pressed: () => (/* binding */ sensor_mixgo_extern_button_is_pressed),
+/* harmony export */ sensor_mixgo_extern_button_was_pressed: () => (/* binding */ sensor_mixgo_extern_button_was_pressed),
+/* harmony export */ sensor_mixgo_extern_light: () => (/* binding */ sensor_mixgo_extern_light),
+/* harmony export */ sensor_mixgo_extern_pin_near: () => (/* binding */ sensor_mixgo_extern_pin_near),
+/* harmony export */ sensor_mixgo_extern_sound: () => (/* binding */ sensor_mixgo_extern_sound),
+/* harmony export */ sensor_mixgo_light: () => (/* binding */ sensor_mixgo_light),
+/* harmony export */ sensor_mixgo_pin_near: () => (/* binding */ sensor_mixgo_pin_near),
+/* harmony export */ sensor_mixgo_pin_pressed: () => (/* binding */ sensor_mixgo_pin_pressed),
+/* harmony export */ sensor_mpu9250_attachGestureInterrupt: () => (/* binding */ sensor_mpu9250_attachGestureInterrupt),
+/* harmony export */ sensor_mpu9250_calibrate_compass: () => (/* binding */ sensor_mpu9250_calibrate_compass),
+/* harmony export */ sensor_mpu9250_field_strength: () => (/* binding */ sensor_mpu9250_field_strength),
+/* harmony export */ sensor_mpu9250_gesture: () => (/* binding */ sensor_mpu9250_gesture),
+/* harmony export */ sensor_mpu9250_get_acceleration: () => (/* binding */ sensor_mpu9250_get_acceleration),
+/* harmony export */ sensor_mpu9250_get_gyro: () => (/* binding */ sensor_mpu9250_get_gyro),
+/* harmony export */ sensor_mpu9250_get_magnetic: () => (/* binding */ sensor_mpu9250_get_magnetic),
+/* harmony export */ sensor_mpu9250_temperature: () => (/* binding */ sensor_mpu9250_temperature),
+/* harmony export */ sensor_pin_near: () => (/* binding */ sensor_pin_near),
+/* harmony export */ sensor_pin_pressed: () => (/* binding */ sensor_pin_pressed),
+/* harmony export */ sensor_rtc_init: () => (/* binding */ sensor_rtc_init),
+/* harmony export */ sensor_sht: () => (/* binding */ sensor_sht),
+/* harmony export */ sensor_temperature: () => (/* binding */ sensor_temperature),
+/* harmony export */ sensor_use_i2c_init: () => (/* binding */ sensor_use_i2c_init)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _sensor_onboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sensor_onboard */ "../micropython/blocks/sensor_onboard.js");
+
+
+
+const SENSOR_HUE = 40; //'#9e77c9'//40;
+
+const sensor_mixgo_button_is_pressed = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('btn')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IS_PRESSED);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SENOR_IS_PRESSED);
+ }
+};
+
+const sensor_mixgo_button_was_pressed = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('btn')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WAS_PRESSED);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SENOR_WAS_PRESSED);
+ }
+};
+
+const sensor_mixgo_button_get_presses = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('btn')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES);
+ this.appendValueInput('VAR')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES_TIME);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES);
+ }
+};
+
+const sensor_mixgo_button_attachInterrupt = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput("btn")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INTERRUPT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RISING, "machine.Pin.IRQ_RISING"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FALLING, "machine.Pin.IRQ_FALLING"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHANGE, "(machine.Pin.IRQ_RISING or machine.Pin.IRQ_FALLING)"]]), "mode");
+ this.appendValueInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);
+ }
+};
+
+
+const sensor_mixgo_extern_button_is_pressed = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IS_PRESSED);
+ this.appendValueInput("STAT")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ELECLEVEL);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SENOR_IS_PRESSED);
+ }
+};
+
+const sensor_mixgo_extern_button_was_pressed = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WAS_PRESSED);
+ this.appendValueInput("STAT")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ELECLEVEL);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SENOR_WAS_PRESSED);
+ }
+};
+
+const sensor_mixgo_extern_button_get_presses = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES);
+ this.appendValueInput('VAR')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES_TIME);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES);
+ }
+};
+
+const sensor_mixgo_extern_button_attachInterrupt = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RISING, "machine.Pin.IRQ_RISING"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FALLING, "machine.Pin.IRQ_FALLING"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHANGE, "(machine.Pin.IRQ_RISING or machine.Pin.IRQ_FALLING)"]]), "mode");
+ this.appendValueInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);
+ }
+};
+
+const sensor_mpu9250_attachGestureInterrupt = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('SUB')
+ .appendField("MPU9250")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_shake, "shake"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP, "up"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN, "down"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "left"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "right"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_up, "face up"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_down, "face down"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_freefall, "freefall"], ["3g", "3g"], ["6g", "6g"], ["8g", "8g"]]), "gesture");
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('gesture');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_STATE;
+ var mode3 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PERFORMANCE
+ var TOOLTIPS = {
+ 'shake': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_shake,
+ 'up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP,
+ 'down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN,
+ 'left': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT,
+ 'right': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT,
+ 'face up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_up,
+ 'face down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_down,
+ 'freefall': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_freefall,
+ '3g': '3g',
+ '6g': '6g',
+ '8g': '8g'
+ };
+ return mode0 + mode1 + mode2 + TOOLTIPS[mode] + mode3;
+ });
+ }
+};
+
+const sensor_mpu9250_gesture = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('SUB')
+ .appendField("MPU9250")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_shake, "shake"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP, "up"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN, "down"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "left"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "right"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_up, "face up"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_down, "face down"]]), "gesture");
+ this.setOutput(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('gesture');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_STATE;
+ var mode3 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PERFORMANCE
+ var TOOLTIPS = {
+ 'shake': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_shake,
+ 'up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP,
+ 'down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN,
+ 'left': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT,
+ 'right': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT,
+ 'face up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_up,
+ 'face down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_down,
+ // 'freefall':Blockly.Msg.MIXLY_MICROBIT_freefall,
+ // '3g': '3g',
+ // '6g': '6g',
+ // '8g': '8g'
+ };
+ return mode0 + mode1 + mode2 + TOOLTIPS[mode] + mode3;
+ });
+ }
+};
+
+const sensor_mpu9250_get_acceleration = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('SUB')
+ .appendField("MPU9250")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "x"],
+ ["y", "y"],
+ ["z", "z"],
+ ["(x,y,z)", "values"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;
+ var TOOLTIPS = {
+ 'x': 'x',
+ 'y': 'y',
+ 'z': 'z',
+ '(x,y,z)': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+
+
+const sensor_adxl345_get_acceleration = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ADXL345)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "x"],
+ ["y", "y"],
+ ["z", "z"],
+ ["(x,y,z)", "values"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;
+ var TOOLTIPS = {
+ 'x': 'x',
+ 'y': 'y',
+ 'z': 'z',
+ '(x,y,z)': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+
+
+const sensor_light_level = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_LIGHT_LEVEL)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_LIGHT_LEVEL_TOOLTIP);
+ }
+};
+
+const sensor_mpu9250_calibrate_compass = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('SUB')
+ .appendField("MPU9250")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS);
+ }
+};
+// export const sensor_mpu9250_is_compass_calibrated = {
+// init: function(){
+// this.setColour(SENSOR_HUE);
+// this.appendValueInput('SUB')
+// .setCheck("var");
+// this.appendDummyInput()
+// .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_IS_COMPASS_CALIBRATED)
+// this.setOutput(true, Number);
+// this.setInputsInline(true);
+// this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_IS_COMPASS_CALIBRATED1);
+// }
+// };
+// export const sensor_mpu9250_compass_heading = {
+// init: function(){
+// this.setColour(SENSOR_HUE);
+// this.appendValueInput('SUB')
+// .setCheck("var");
+// this.appendDummyInput()
+// .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE)
+// this.setOutput(true, Number);
+// this.setInputsInline(true);
+// }
+// };
+
+const sensor_mpu9250_temperature = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('SUB')
+ .appendField("MPU9250")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE);
+ }
+};
+
+const sensor_mpu9250_field_strength = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('SUB')
+ .appendField("MPU9250")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET_COMPASS)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH, 'strength'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, 'heading']]), 'compass');
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('compass');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET_COMPASS;
+ var TOOLTIPS = {
+ 'strength': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH,
+ 'heading': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE
+ };
+ return mode0 + TOOLTIPS[mode];
+ });
+ }
+};
+
+const sensor_distance_hrsc04 = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHAOSHENGBO)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHAOSHENGBO);
+ }
+};
+
+//传感器-实时时钟块_获取时间
+const RTC_get_time = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('SUB')
+ .appendField("RTC")
+ .setCheck("var");
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTCGETTIME);
+ // this.appendDummyInput("").setAlign(Blockly.inputs.Align.RIGHT).appendField('myRTC');
+ // this.appendDummyInput("").setAlign(Blockly.inputs.Align.RIGHT).appendField(new Blockly.FieldDropdown(RTC_TIME_TYPE), "TIME_TYPE");
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_RTC_GET_TIME_TOOLTIP);
+ // var thisBlock = this;
+ // this.setTooltip(function() {
+ // var mode = thisBlock.getFieldValue('TIME_TYPE');
+ // var mode0 = Blockly.Msg.MIXLY_RTCGETTIME;
+ // var TOOLTIPS = {
+ // 'Year':Blockly.Msg.MIXLY_YEAR,
+ // 'Month':Blockly.Msg.MIXLY_MONTH,
+ // 'Day':Blockly.Msg.MIXLY_DAY,
+ // 'Hour':Blockly.Msg.MIXLY_HOUR,
+ // 'Minute':Blockly.Msg.MIXLY_MINUTE,
+ // 'Second':Blockly.Msg.MIXLY_SECOND,
+ // 'Week':Blockly.Msg.MIXLY_WEEK,
+ // 'Mix1':Blockly.Msg.MIXLY_MIX1,
+ // 'Mix2':Blockly.Msg.MIXLY_MIX2
+ // };
+ // return mode0 +TOOLTIPS[mode];
+ // });
+ }
+};
+
+const RTC_set_time = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendDummyInput("")
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTCSETTIME)
+ .appendField('myRTC');
+ this.appendValueInput("hour")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HOUR);
+ this.appendValueInput("minute")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MINUTE);
+ this.appendValueInput("second")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SECOND);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(false);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTCSETTIME + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIX2);
+ }
+};
+
+const RTC_set_date = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendDummyInput("")
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTCSETDATE)
+ .appendField('myRTC');
+ this.appendValueInput("year")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_YEAR);
+ this.appendValueInput("month")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MONTH);
+ this.appendValueInput("day")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DAY);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTCSETDATE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIX1);
+ }
+};
+
+const sensor_compass_reset = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('SUB')
+ .appendField("MPU9250")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Reset_COMPASS)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Reset_COMPASS);
+ }
+};
+
+const HCSR04 = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHAOSHENGBO);
+ this.appendValueInput("PIN1", Number)
+ .appendField('Trig #')
+ .setCheck(Number);
+ this.appendValueInput("PIN2", Number)
+ .appendField('Echo #')
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_CHAOSHENGBO);
+ }
+
+};
+
+const sensor_dht11 = {
+ init: function () {
+ var WHAT = [[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE, 'temperature'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETHUMIDITY, 'relative_humidity'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DHT11_T_H, 'tempandhum']];
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['DHT11', 'dht11']
+ , ['DHT22', 'dht22']//, ['DHT21', '21'], ['DHT33', '33'], ['DHT44', '44']
+ ]), 'TYPE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(WHAT), "WHAT");
+ this.setOutput(true, Number);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var op = thisBlock.getFieldValue('WHAT');
+ var TOOLTIPS = {
+ 'temperature': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_TEM,
+ 'relative_humidity': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_HUM,
+ 'tempandhum': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_TEM_HUM
+ };
+ return TOOLTIPS[op];
+ });
+ }
+};
+
+
+const sensor_mixgo_extern_light = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LIGHT);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_VALUE);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ESP32_SENSOR_NIXGO_LIGHT_TOOLTIP);
+ }
+};
+
+const sensor_mixgo_extern_sound = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_SOUND);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_VALUE);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ESP32_SENSOR_NIXGO_SOUND_TOOLTIP);
+ }
+};
+
+const number1 = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["1", "touch1"], ["2", "touch2"]]), 'op')
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
+ }
+};
+
+const sensor_mixgo_pin_pressed = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput("button")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TOUCH_SENSOR)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IS_TOUCHED);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_sensor_pin_pressed);
+ }
+};
+
+const sensor_mixgo_extern_pin_near = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_NEAR);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_VALUE);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR);
+ }
+};
+
+
+const sensor_mixgo_pin_near = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "left"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "right"]]), "direction")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('direction');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR;
+ var TOOLTIPS = {
+ 'left': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT,
+ 'right': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1
+ });
+ }
+};
+
+const RTC_set_datetime = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ // this.appendDummyInput()
+ this.appendValueInput('SUB')
+ .appendField("RTC")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTC_TIME)
+ .setCheck("var");
+ this.appendValueInput('year')
+ .setCheck(Number)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_YEAR);
+ this.appendValueInput('month')
+ .setCheck(Number)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MONTH);
+ this.appendValueInput('day')
+ .setCheck(Number)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DAY);
+ this.appendValueInput('weekday')
+ .setCheck(Number)
+ .appendField(" " +
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEEK2);
+ this.appendValueInput('hour')
+ .setCheck(Number)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HOUR);
+ this.appendValueInput('minute')
+ .setCheck(Number)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MINUTE);
+ this.appendValueInput('second')
+ .setCheck(Number)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SECOND);
+ this.appendValueInput('millisecond')
+ .setCheck(Number)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MILLISECOND);
+ this.setInputsInline(false);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_RTC_SET_DATATIME_TOOLTIP);
+ }
+};
+
+const sensor_rtc_init = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendDummyInput("")
+ .appendField("RTC")
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .setCheck("var");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_RTC_INT_TOOLTIP);
+ }
+};
+
+const sensor_use_i2c_init = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('I2CSUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "I2C")
+ .setCheck("var");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["MPU9250", "MPU9250"],
+ ["BMP280", "BMP280"],
+ ["SHT20", "SHT20"],
+ ["ADXL345", "ADXL345"]
+ ]), "key");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setFieldValue("MPU9250", "key");
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_USE_I2C_TOOLTIP;
+ var TOOLTIPS = {
+ "MPU9250": "MPU9250",
+ "SHT20": "SHT20",
+ "BMP280": "BMP280",
+ "ADXL345": "ADXL345"
+ };
+ return mode0 + TOOLTIPS[mode]
+ });
+ }
+};
+
+const sensor_bmp = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('SUB')
+ .appendField("BMP280")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE, "get_BMP_temperature()"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETPRESSURE, "get_BMP_pressure()"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var TOOLTIPS = {
+ "get_BMP_temperature()": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_BMP_temperature_TOOLTIP,
+ "get_BMP_pressure()": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_BMP_press_TOOLTIP,
+ };
+ return TOOLTIPS[mode]
+ });
+ }
+};
+
+const sensor_sht = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('SUB')
+ .appendField("SHT20")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE, "get_SHT_temperature()"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETHUMIDITY, "get_SHT_relative_humidity()"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var TOOLTIPS = {
+ "get_SHT_temperature()": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,
+ "get_SHT_relative_humidity()": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP,
+ };
+ return TOOLTIPS[mode]
+ });
+ }
+};
+
+const sensor_ds18x20 = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField("DS18x20 " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_DS18X20_TOOLTIP);
+ }
+};
+
+const sensor_mpu9250_get_magnetic = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('SUB')
+ .appendField("MPU9250")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "x"],
+ ["y", "y"],
+ ["z", "z"],
+ ["(x,y,z)", "values"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH;
+ var TOOLTIPS = {
+ 'x': 'x',
+ 'y': 'y',
+ 'z': 'z',
+ '(x,y,z)': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+
+const sensor_mpu9250_get_gyro = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendValueInput('SUB')
+ .appendField("MPU9250")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENOR_GYRO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "x"],
+ ["y", "y"],
+ ["z", "z"],
+ ["(x,y,z)", "values"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENOR_GYRO;
+ var TOOLTIPS = {
+ 'x': 'x',
+ 'y': 'y',
+ 'z': 'z',
+ '(x,y,z)': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+
+const sensor_lm35 = {
+ init: function () {
+ this.setColour(SENSOR_HUE);
+ this.appendDummyInput("")
+ .appendField("LM35" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMP);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_LM35);
+ }
+};
+
+const sensor_button_is_pressed = sensor_mixgo_button_is_pressed;
+const sensor_button_was_pressed = sensor_mixgo_button_was_pressed;
+const sensor_button_get_presses = sensor_mixgo_button_get_presses;
+const sensor_pin_pressed = sensor_mixgo_pin_pressed;
+const sensor_pin_near = sensor_mixgo_pin_near;
+const sensor_mixgo_light = _sensor_onboard__WEBPACK_IMPORTED_MODULE_1__.sensor_LTR308;
+const sensor_light = sensor_mixgo_light;
+const sensor_get_acceleration = sensor_mpu9250_get_acceleration;
+const dht11 = sensor_dht11;
+const sensor_field_strength = sensor_mpu9250_field_strength;
+const sensor_temperature = sensor_mpu9250_temperature
+
+/***/ }),
+
+/***/ "../micropython/blocks/sensor_extern.js":
+/*!**********************************************!*\
+ !*** ../micropython/blocks/sensor_extern.js ***!
+ \**********************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ CI130X_BROADCAST: () => (/* binding */ CI130X_BROADCAST),
+/* harmony export */ CI130X_GET_THE_RECOGNIZED_CMD: () => (/* binding */ CI130X_GET_THE_RECOGNIZED_CMD),
+/* harmony export */ CI130X_GET_WHETHER_IDENTIFY: () => (/* binding */ CI130X_GET_WHETHER_IDENTIFY),
+/* harmony export */ CI130X_IDENTIFY_AND_SAVE: () => (/* binding */ CI130X_IDENTIFY_AND_SAVE),
+/* harmony export */ CI130X_SET_SYSTEM_CMD: () => (/* binding */ CI130X_SET_SYSTEM_CMD),
+/* harmony export */ HCSR04: () => (/* binding */ HCSR04),
+/* harmony export */ PS2_Button: () => (/* binding */ PS2_Button),
+/* harmony export */ PS2_Buttons: () => (/* binding */ PS2_Buttons),
+/* harmony export */ PS2_Buttons_new: () => (/* binding */ PS2_Buttons_new),
+/* harmony export */ PS2_State: () => (/* binding */ PS2_State),
+/* harmony export */ PS2_init: () => (/* binding */ PS2_init),
+/* harmony export */ PS2_init_new: () => (/* binding */ PS2_init_new),
+/* harmony export */ PS2_stk: () => (/* binding */ PS2_stk),
+/* harmony export */ PS2_stk_new: () => (/* binding */ PS2_stk_new),
+/* harmony export */ PS2_vibration: () => (/* binding */ PS2_vibration),
+/* harmony export */ PS2_vibration_new: () => (/* binding */ PS2_vibration_new),
+/* harmony export */ camera_sensor_init: () => (/* binding */ camera_sensor_init),
+/* harmony export */ camera_sensor_result: () => (/* binding */ camera_sensor_result),
+/* harmony export */ educore_body_sensor: () => (/* binding */ educore_body_sensor),
+/* harmony export */ educore_button_sensor_extern: () => (/* binding */ educore_button_sensor_extern),
+/* harmony export */ educore_camera_sensor: () => (/* binding */ educore_camera_sensor),
+/* harmony export */ educore_infrared_sensor: () => (/* binding */ educore_infrared_sensor),
+/* harmony export */ educore_soilhum_sensor: () => (/* binding */ educore_soilhum_sensor),
+/* harmony export */ educore_temp_sensor: () => (/* binding */ educore_temp_sensor),
+/* harmony export */ educore_temphum_sensor: () => (/* binding */ educore_temphum_sensor),
+/* harmony export */ educore_ultrasonic_sensor: () => (/* binding */ educore_ultrasonic_sensor),
+/* harmony export */ esp32_s2_weather_init: () => (/* binding */ esp32_s2_weather_init),
+/* harmony export */ esp32_s2_weather_rain: () => (/* binding */ esp32_s2_weather_rain),
+/* harmony export */ esp32_s2_weather_wd: () => (/* binding */ esp32_s2_weather_wd),
+/* harmony export */ esp32_s2_weather_ws: () => (/* binding */ esp32_s2_weather_ws),
+/* harmony export */ extern_rfid_read: () => (/* binding */ extern_rfid_read),
+/* harmony export */ extern_rfid_readcontent: () => (/* binding */ extern_rfid_readcontent),
+/* harmony export */ extern_rfid_readid: () => (/* binding */ extern_rfid_readid),
+/* harmony export */ extern_rfid_status: () => (/* binding */ extern_rfid_status),
+/* harmony export */ extern_rfid_write: () => (/* binding */ extern_rfid_write),
+/* harmony export */ extern_rfid_write_return: () => (/* binding */ extern_rfid_write_return),
+/* harmony export */ gnss_get_data: () => (/* binding */ gnss_get_data),
+/* harmony export */ gnss_have_data: () => (/* binding */ gnss_have_data),
+/* harmony export */ interaction_whether_to_interaction: () => (/* binding */ interaction_whether_to_interaction),
+/* harmony export */ interaction_whether_to_interaction_SANT: () => (/* binding */ interaction_whether_to_interaction_SANT),
+/* harmony export */ mixbot_sensor_extern_get_addr: () => (/* binding */ mixbot_sensor_extern_get_addr),
+/* harmony export */ mixbot_sensor_extern_set_addr: () => (/* binding */ mixbot_sensor_extern_set_addr),
+/* harmony export */ pm25_get_data: () => (/* binding */ pm25_get_data),
+/* harmony export */ radar_set_DETECTION_THRESHOLD: () => (/* binding */ radar_set_DETECTION_THRESHOLD),
+/* harmony export */ radar_set_DETECTION_THRESHOLD_SANT: () => (/* binding */ radar_set_DETECTION_THRESHOLD_SANT),
+/* harmony export */ robot_button_extern_get_value: () => (/* binding */ robot_button_extern_get_value),
+/* harmony export */ robot_color_extern_get_value: () => (/* binding */ robot_color_extern_get_value),
+/* harmony export */ robot_infrared_extern_get_value: () => (/* binding */ robot_infrared_extern_get_value),
+/* harmony export */ robot_infrared_extern_grey_get_value: () => (/* binding */ robot_infrared_extern_grey_get_value),
+/* harmony export */ robot_potentiometer_extern_get_value: () => (/* binding */ robot_potentiometer_extern_get_value),
+/* harmony export */ robot_sonar_extern_get_value: () => (/* binding */ robot_sonar_extern_get_value),
+/* harmony export */ robot_sonar_extern_led: () => (/* binding */ robot_sonar_extern_led),
+/* harmony export */ robot_touch_extern_get_value: () => (/* binding */ robot_touch_extern_get_value),
+/* harmony export */ sensor_APDS9960_extern: () => (/* binding */ sensor_APDS9960_extern),
+/* harmony export */ sensor_DS18X20: () => (/* binding */ sensor_DS18X20),
+/* harmony export */ sensor_LTR308_extern: () => (/* binding */ sensor_LTR308_extern),
+/* harmony export */ sensor_LTR390UV_extern: () => (/* binding */ sensor_LTR390UV_extern),
+/* harmony export */ sensor_MAX30102_extern: () => (/* binding */ sensor_MAX30102_extern),
+/* harmony export */ sensor_QMC5883L_extern: () => (/* binding */ sensor_QMC5883L_extern),
+/* harmony export */ sensor_VL530LX_extern: () => (/* binding */ sensor_VL530LX_extern),
+/* harmony export */ sensor_adxl345_get_acceleration: () => (/* binding */ sensor_adxl345_get_acceleration),
+/* harmony export */ sensor_aht11_extern: () => (/* binding */ sensor_aht11_extern),
+/* harmony export */ sensor_bmp: () => (/* binding */ sensor_bmp),
+/* harmony export */ sensor_compass_reset: () => (/* binding */ sensor_compass_reset),
+/* harmony export */ sensor_dht11: () => (/* binding */ sensor_dht11),
+/* harmony export */ sensor_hp203_extern: () => (/* binding */ sensor_hp203_extern),
+/* harmony export */ sensor_light_level: () => (/* binding */ sensor_light_level),
+/* harmony export */ sensor_lm35: () => (/* binding */ sensor_lm35),
+/* harmony export */ sensor_ltr381_extern: () => (/* binding */ sensor_ltr381_extern),
+/* harmony export */ sensor_mixgo_extern_button_attachInterrupt: () => (/* binding */ sensor_mixgo_extern_button_attachInterrupt),
+/* harmony export */ sensor_mixgo_extern_button_get_presses: () => (/* binding */ sensor_mixgo_extern_button_get_presses),
+/* harmony export */ sensor_mixgo_extern_button_is_pressed: () => (/* binding */ sensor_mixgo_extern_button_is_pressed),
+/* harmony export */ sensor_mixgo_extern_button_was_pressed: () => (/* binding */ sensor_mixgo_extern_button_was_pressed),
+/* harmony export */ sensor_mixgo_extern_light: () => (/* binding */ sensor_mixgo_extern_light),
+/* harmony export */ sensor_mixgo_extern_pin_near: () => (/* binding */ sensor_mixgo_extern_pin_near),
+/* harmony export */ sensor_mixgo_extern_sound: () => (/* binding */ sensor_mixgo_extern_sound),
+/* harmony export */ sensor_mixgoce_hot_wheel_degrees: () => (/* binding */ sensor_mixgoce_hot_wheel_degrees),
+/* harmony export */ sensor_mixgoce_hot_wheel_is_touched: () => (/* binding */ sensor_mixgoce_hot_wheel_is_touched),
+/* harmony export */ sensor_mpu9250_attachGestureInterrupt: () => (/* binding */ sensor_mpu9250_attachGestureInterrupt),
+/* harmony export */ sensor_mpu9250_calibrate_compass: () => (/* binding */ sensor_mpu9250_calibrate_compass),
+/* harmony export */ sensor_mpu9250_field_strength: () => (/* binding */ sensor_mpu9250_field_strength),
+/* harmony export */ sensor_mpu9250_gesture: () => (/* binding */ sensor_mpu9250_gesture),
+/* harmony export */ sensor_mpu9250_get_acceleration: () => (/* binding */ sensor_mpu9250_get_acceleration),
+/* harmony export */ sensor_mpu9250_get_gyro: () => (/* binding */ sensor_mpu9250_get_gyro),
+/* harmony export */ sensor_mpu9250_get_magnetic: () => (/* binding */ sensor_mpu9250_get_magnetic),
+/* harmony export */ sensor_mpu9250_temperature: () => (/* binding */ sensor_mpu9250_temperature),
+/* harmony export */ sensor_read_humiture: () => (/* binding */ sensor_read_humiture),
+/* harmony export */ sensor_sht: () => (/* binding */ sensor_sht),
+/* harmony export */ sensor_shtc3_extern: () => (/* binding */ sensor_shtc3_extern),
+/* harmony export */ sensor_spl06_001_extern: () => (/* binding */ sensor_spl06_001_extern),
+/* harmony export */ sensor_ucs12071_extern: () => (/* binding */ sensor_ucs12071_extern),
+/* harmony export */ sensor_use_i2c_init: () => (/* binding */ sensor_use_i2c_init),
+/* harmony export */ sensor_use_spi_init: () => (/* binding */ sensor_use_spi_init),
+/* harmony export */ sensor_use_uart_init: () => (/* binding */ sensor_use_uart_init),
+/* harmony export */ sensor_weather_solo_init: () => (/* binding */ sensor_weather_solo_init),
+/* harmony export */ sensor_weather_solo_rain: () => (/* binding */ sensor_weather_solo_rain),
+/* harmony export */ sensor_weather_solo_wd: () => (/* binding */ sensor_weather_solo_wd),
+/* harmony export */ sensor_weather_solo_ws: () => (/* binding */ sensor_weather_solo_ws),
+/* harmony export */ sensor_weigh_init: () => (/* binding */ sensor_weigh_init),
+/* harmony export */ ultrasonic_sensor_read_distance: () => (/* binding */ ultrasonic_sensor_read_distance),
+/* harmony export */ weather_data: () => (/* binding */ weather_data),
+/* harmony export */ weather_have_data: () => (/* binding */ weather_have_data),
+/* harmony export */ weather_set_label: () => (/* binding */ weather_set_label),
+/* harmony export */ weather_set_label_container: () => (/* binding */ weather_set_label_container),
+/* harmony export */ weather_set_label_item: () => (/* binding */ weather_set_label_item),
+/* harmony export */ weather_uart_mixio: () => (/* binding */ weather_uart_mixio),
+/* harmony export */ weigh_sensor_get_weight: () => (/* binding */ weigh_sensor_get_weight)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+const SENSOR_EXTERN_HUE = '#A58C5B'; //'#9e77c9'//40;
+
+
+const sensor_mixgo_extern_button_is_pressed = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IS_PRESSED);
+ this.appendValueInput("STAT")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ELECLEVEL);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SENOR_IS_PRESSED);
+ }
+};
+
+const sensor_mixgo_extern_button_was_pressed = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WAS_PRESSED);
+ this.appendValueInput("STAT")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ELECLEVEL);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SENOR_WAS_PRESSED);
+ }
+};
+
+const sensor_mixgo_extern_button_get_presses = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES);
+ this.appendValueInput('VAR')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES_TIME);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES);
+ }
+};
+
+const sensor_mixgo_extern_button_attachInterrupt = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RISING, "machine.Pin.IRQ_RISING"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FALLING, "machine.Pin.IRQ_FALLING"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHANGE, "(machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING)"]]), "mode");
+ this.appendValueInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);
+ }
+};
+
+
+const sensor_mpu9250_attachGestureInterrupt = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField("MPU9250")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_shake, "shake"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP, "up"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN, "down"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "left"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "right"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_up, "face up"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_down, "face down"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_freefall, "freefall"], ["3g", "3g"], ["6g", "6g"], ["8g", "8g"]]), "gesture");
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('gesture');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_STATE;
+ var mode3 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PERFORMANCE
+ var TOOLTIPS = {
+ 'shake': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_shake,
+ 'up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP,
+ 'down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN,
+ 'left': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT,
+ 'right': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT,
+ 'face up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_up,
+ 'face down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_down,
+ 'freefall': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_freefall,
+ '3g': '3g',
+ '6g': '6g',
+ '8g': '8g'
+ };
+ return mode0 + mode1 + mode2 + TOOLTIPS[mode] + mode3;
+ });
+ }
+};
+
+
+const sensor_adxl345_get_acceleration = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ADXL345)
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "x"],
+ ["y", "y"],
+ ["z", "z"],
+ ["(x,y,z)", "values"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;
+ var TOOLTIPS = {
+ 'x': 'x',
+ 'y': 'y',
+ 'z': 'z',
+ '(x,y,z)': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+
+
+
+const sensor_light_level = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_LIGHT_LEVEL)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_LIGHT_LEVEL_TOOLTIP);
+ }
+};
+
+
+
+const sensor_dht11 = {
+ init: function () {
+ var WHAT = [[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE, 'temperature'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETHUMIDITY, 'humidity']];
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['DHT11', 'DHT11']
+ , ['DHT22', 'DHT22']//, ['DHT21', '21'], ['DHT33', '33'], ['DHT44', '44']
+ ]), 'TYPE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(WHAT), "WHAT");
+ this.setOutput(true, Number);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var op = thisBlock.getFieldValue('WHAT');
+ var TOOLTIPS = {
+ 'temperature': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_TEM,
+ 'relative_humidity': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_HUM,
+ 'tempandhum': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_TEM_HUM
+ };
+ return TOOLTIPS[op];
+ });
+ }
+};
+
+
+const sensor_mixgo_extern_light = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LIGHT);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_VALUE);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ESP32_SENSOR_NIXGO_LIGHT_TOOLTIP);
+ }
+};
+
+const sensor_mixgo_extern_sound = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_SOUND);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_VALUE);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ESP32_SENSOR_NIXGO_SOUND_TOOLTIP);
+ }
+};
+
+
+
+const sensor_mixgo_extern_pin_near = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "left"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "right"]]), "direction")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('direction');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR;
+ var TOOLTIPS = {
+ 'left': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT,
+ 'right': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1
+ });
+ }
+};
+
+const sensor_bmp = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALTITUDE_SENSOR+" BMP280")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE, "get_BMP_temperature()"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETPRESSURE, "get_BMP_pressure()"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var TOOLTIPS = {
+ "get_BMP_temperature()": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_BMP_temperature_TOOLTIP,
+ "get_BMP_pressure()": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_BMP_press_TOOLTIP,
+ };
+ return TOOLTIPS[mode]
+ });
+ }
+};
+
+const sensor_sht = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMP_AND_HUMIDITY_SENSOR +" SHT20")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE, "get_SHT_temperature()"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETHUMIDITY, "get_SHT_relative_humidity()"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var TOOLTIPS = {
+ "get_SHT_temperature()": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,
+ "get_SHT_relative_humidity()": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP,
+ };
+ return TOOLTIPS[mode]
+ });
+ }
+};
+
+const sensor_DS18X20 = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField("DS18X20 " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_DS18X20_TOOLTIP);
+ }
+};
+
+const sensor_lm35 = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField("LM35" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMP);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_LM35);
+ }
+};
+
+
+//pe
+const sensor_use_i2c_init = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('I2CSUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "I2C")
+ .setCheck("var");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LIGHT+"(LTR308ALS)", "LTR308"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COLOR_SENSOR+"(LTR381RGB)", "LTR381RGB"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COLOR_SENSOR+"(UCS12071)","UCS12071"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LIGHTUV +"(LTR390UV)","LTR390UV"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALTITUDE_SENSOR+"(HP203X)", "HP203X"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALTITUDE_SENSOR+"(SPL06_001)","SPL06_001"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALTITUDE_SENSOR+"(BMP280)", "BMP280"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMP_AND_HUMIDITY_SENSOR + "(SHTC3)", "SHTC3"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMP_AND_HUMIDITY_SENSOR + "(AHT21)", "AHT21"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMP_AND_HUMIDITY_SENSOR + "(SHT20)", "SHT20"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LASER_RANGE_SENSOR + "(VL53L0X)", "VL53L0X"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GEOMAGNETIC_SENSOR + "(QMC5883L)", "QMC5883L"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MAX30102+"(MAX30102)", "MAX30102"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR +"、"+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ENVIRONMENT_LIGHT+"、"+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NEXT+"、"+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_APDS9960+"(APDS9960)", "APDS9960"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NINE_AXIS_SENSOR+"(MPU9250)", "MPU9250"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MixGo_MPU9250+"(ADXL345)", "ADXL345"],
+ ["RFID", "RFID"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RADAR_SENSOR+"(CBR817)", "CBR817"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_asr+"(CI130X)","CI130X"]
+ ]), "key");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setFieldValue("LTR308", "key");
+ }
+};
+
+const radar_set_DETECTION_THRESHOLD = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RADAR+'CBR817')
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXlY_INTERACTION)
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DETECTION_THRESHOLD);
+ this.appendValueInput('VAR2')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DELAY_TIME);
+ this.appendDummyInput()
+ .appendField('ms');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THRESHOLD_TOOLTIP+' ; '+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DELAY_TIME_RANGE)
+ }
+};
+
+const radar_set_DETECTION_THRESHOLD_SANT = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RADAR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXlY_INTERACTION)
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DETECTION_THRESHOLD);
+ this.appendValueInput('VAR2')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DELAY_TIME);
+ this.appendDummyInput()
+ .appendField('ms');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THRESHOLD_TOOLTIP+' ; '+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DELAY_TIME_RANGE)
+ }
+};
+
+const interaction_whether_to_interaction = {
+ init:function(){
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RADAR+'CBR817')
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_TO_INTERACTION)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const interaction_whether_to_interaction_SANT = {
+ init:function(){
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RADAR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_TO_INTERACTION)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const CI130X_IDENTIFY_AND_SAVE = {
+ init:function(){
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_asr+'CI130X')
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IDENTIFY_ONCE_AND_SAVE)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+const CI130X_GET_WHETHER_IDENTIFY = {
+ init:function(){
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_asr+'CI130X')
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HELLO_XIAOZHI,"1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_XIAOZHIXIAOZHI ,"2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_FIRST ,"3"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_SECOND ,"4"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_THIRD ,"5"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_FOURTH ,"6"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_FIFTH ,"7"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_SIXTH ,"8"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_SEVENTH ,"9"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_EIGHTH ,"10"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_NINTH ,"11"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_TENTH ,"12"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_ELEVENTH ,"13"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_TWELFTH ,"14"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_13TH ,"15"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_14TH ,"16"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_15TH ,"17"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_16TH ,"18"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_17TH ,"19"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_18TH ,"20"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_19TH ,"21"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_20TH ,"22"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Turn_on_the_lights ,"23"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Turn_off_the_lights ,"24"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Turn_up_the_brightness ,"25"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Turn_down_the_brightness ,"26"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_red ,"27"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_orange ,"28"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_yellow ,"29"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_green ,"30"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_cyan ,"31"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_blue ,"32"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_purple ,"33"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_white ,"34"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Turn_on_the_fan ,"35"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Turn_off_the_fan ,"36"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_First_gear ,"37"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Wind_speed_second ,"38"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Third_gear ,"39"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Previous ,"40"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Next_page ,"41"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Show_smiley_face ,"42"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Show_crying_face ,"43"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Show_love ,"44"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Close_display ,"45"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Start_execution ,"46"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FORWARD ,"47"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BACKWARD ,"48"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURNLEFT ,"49"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURNRIGHT ,"50"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STOP ,"51"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Accelerate ,"52"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_retard ,"53"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ROTATION_FORWARD ,"54"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ROTATION_BACKWARD ,"55"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_temperature ,"56"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_humidity ,"57"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_brightness ,"58"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_sound ,"59"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_time ,"60"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_distance ,"61"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_pressure ,"62"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_key ,"63"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_touch ,"64"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_color ,"65"]
+ ]),"cmd")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WHETHER+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BE_IDENTIFIED);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const CI130X_GET_THE_RECOGNIZED_CMD = {
+ init:function(){
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_asr+'CI130X')
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RECOGNIZED_STATE,"status1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WHETHER_BROADCAST,"status2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_RECOGNIZED_CMD,"result"]
+ ]),"key")
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CI130X_GET_THE_RECOGNIZED_STATE_TOOLTIP);
+ }
+};
+
+const CI130X_BROADCAST = {
+ init:function(){
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_asr+'CI130X')
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP3_PLAY)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_INOUT_PULL_NONE,"None"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIND_SPEED,"154"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HYETAL,"155"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMPERATURE,"156"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Humidity,"157"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Altitude, "158"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SOUND, "159"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS, "160"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_HALL_SENSOR_DISTANCE,"161"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO,"162"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE,"163"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON2,"164"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TOUCH,"165"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PAY,"166"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CARSH_CHANGE,"167"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COUNTDOWN,"168"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TIMING,"169"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AT_THE_MOMENT,"170"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE,"171"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FORWARD ,"172"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BACKWARD ,"173"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURNLEFT ,"174"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURNRIGHT ,"175"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STOP ,"176"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Accelerate ,"177"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_retard ,"178"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ROTATION_FORWARD ,"179"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ROTATION_BACKWARD ,"180"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_JOIN,"181"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SHOW,"182"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LAMPLIGHT,"183"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ACCELERATION,"184"]
+ ]),"star");
+ this.appendValueInput('NUM')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NUMBER);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UNIT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_INOUT_PULL_NONE,"None"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_YEAR,"117"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MONTH,"118"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DAY,"119"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HOUR,"120"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MINUTE,"121"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SECOND,"122"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEEK2,"123"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RMB_UNIT,"124"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_setheading_degree,"125"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GEAR,"126"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LAYER,"127"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GRAM,"128"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_METER,"129"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CENTIMETER,"130"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MILLIMETER,"131"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LUMEN,"132"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DECIBEL,"133"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_hectopascal,"134"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PERCENT,"135"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CELSIUS,"136"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_METER_PER_SEC,"137"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_on_display,"138"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_off_display,"139"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SUCCESS,"140"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FAILED,"141"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WRONG,"142"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GOOD,"143"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_blockpy_set_add,"144"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DECREASE,"145"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED,"146"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_ORANGE,"147"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_YELLOW,"148"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN,"149"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_CYAN,"150"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_BLUE,"151"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_PURPLE,"152"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_WHITE,"153"]
+ ]),"end");
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+const CI130X_SET_SYSTEM_CMD = {
+ init:function(){
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_asr+'CI130X')
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SYSTEM + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CMD)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MILXY_ENTER_WAKE_UP,"1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_INCREASE_VOLUME,"202"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_REDUCE_VOLUME,"203"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MAX_VOLUME,"204"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MINIMUM,"205"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OPEN_RESPONSE,"206"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CLOSE_RESPONSE,"207"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_QUIT_WAKE_UP,"208"]
+ ]),"cmd")
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_MAX30102_extern = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MAX30102 + " MAX30102");
+ this.appendValueInput('SUB')
+ //.appendField("BMP280")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MAX30102_IR, "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MAX30102_RED, "[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MAX30102_IR + ',' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MAX30102_RED, ""],
+ ]), "key")
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_APDS9960_extern = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_APDS9960 + " APDS9960");
+ this.appendValueInput('SUB')
+ //.appendField("BMP280")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_APDS9960_COLOR, "color"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_APDS9960_GESTURE, "gesture"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_APDS9960_APPROACH, "proximity"],
+ ]), "key")
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_LTR308_extern = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LIGHT + " LTR308ALS");
+ this.appendValueInput('SUB')
+ //.appendField("BMP280")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_LIGHT_INTENSITY);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_ltr381_extern = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor + " LTR381RGB")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR, "[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IR_STRENGTH, "[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIGHT_STRENGTH, "[0]"],
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_ucs12071_extern = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor + " UCS12071")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET +'RGB'+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RGB_RAW, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_ENV_LIGHT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS, "2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.GET_IR_STRENGTH+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS,"3"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_LTR390UV_extern = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LIGHTUV + " LTR390UV")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_ENV_LIGHT, "E"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_ULTRAVIOLET, "U"],
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_VL530LX_extern = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LASER_RANGE + " VL53L0X");
+ this.appendValueInput('SUB')
+ //.appendField("BMP280")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_DISTANCE + '(mm)');
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_shtc3_extern = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEM_HUM + " SHTC3")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE, "temperature"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETHUMIDITY, "humidity"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var TOOLTIPS = {
+ "temperature": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,
+ "humidity": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP
+ };
+ return TOOLTIPS[mode]
+ });
+ }
+};
+
+const sensor_aht11_extern = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEM_HUM + " AHT21")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE, "temperature"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETHUMIDITY, "humidity"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var TOOLTIPS = {
+ "temperature": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,
+ "relative_humidity": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP
+ };
+ return TOOLTIPS[mode]
+ });
+ }
+};
+
+const sensor_hp203_extern = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Altitude + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor + " HP203X")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETPRESSURE, "pressure()"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE, "temperature()"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_ALTITUDE, "altitude()"],
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_spl06_001_extern = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Altitude + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor + " SPL06_001")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETPRESSURE, "pressure()"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE, "temperature()"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_ALTITUDE, "altitude()"],
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_QMC5883L_extern = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGOPE_FIELD + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor + " QMC5883L")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, "get_bearing()"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMPERATURE, "get_temp()"],
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_mpu9250_gesture = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField("MPU9250")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_shake, "shake"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP, "up"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN, "down"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "left"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "right"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_up, "face up"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_down, "face down"]]), "gesture");
+ this.setOutput(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('gesture');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_STATE;
+ var mode3 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PERFORMANCE
+ var TOOLTIPS = {
+ 'shake': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_shake,
+ 'up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP,
+ 'down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN,
+ 'left': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT,
+ 'right': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT,
+ 'face up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_up,
+ 'face down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_down,
+ // 'freefall':Blockly.Msg.MIXLY_MICROBIT_freefall,
+ // '3g': '3g',
+ // '6g': '6g',
+ // '8g': '8g'
+ };
+ return mode0 + mode1 + mode2 + TOOLTIPS[mode] + mode3;
+ });
+ }
+};
+
+const sensor_mpu9250_get_acceleration = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NINE_AXIS_SENSOR+" MPU9250")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "x"],
+ ["y", "y"],
+ ["z", "z"],
+ ["(x,y,z)", "values"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;
+ var TOOLTIPS = {
+ 'x': 'x',
+ 'y': 'y',
+ 'z': 'z',
+ '(x,y,z)': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+
+const sensor_mpu9250_get_magnetic = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NINE_AXIS_SENSOR+" MPU9250")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "x"],
+ ["y", "y"],
+ ["z", "z"],
+ ["(x,y,z)", "values"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH;
+ var TOOLTIPS = {
+ 'x': 'x',
+ 'y': 'y',
+ 'z': 'z',
+ '(x,y,z)': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+
+const sensor_mpu9250_get_gyro = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NINE_AXIS_SENSOR+" MPU9250")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENOR_GYRO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "x"],
+ ["y", "y"],
+ ["z", "z"],
+ ["(x,y,z)", "values"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENOR_GYRO;
+ var TOOLTIPS = {
+ 'x': 'x',
+ 'y': 'y',
+ 'z': 'z',
+ '(x,y,z)': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+
+const sensor_mpu9250_calibrate_compass = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NINE_AXIS_SENSOR+" MPU9250")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS);
+ }
+};
+
+
+const sensor_mpu9250_temperature = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NINE_AXIS_SENSOR+" MPU9250")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE);
+ }
+};
+
+
+const sensor_mpu9250_field_strength = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField("MPU9250")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET_COMPASS)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH, 'strength'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, 'heading']]), 'compass');
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('compass');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET_COMPASS;
+ var TOOLTIPS = {
+ 'strength': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH,
+ 'heading': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE
+ };
+ return mode0 + TOOLTIPS[mode];
+ });
+ }
+};
+
+const sensor_compass_reset = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField("MPU9250")
+ .setCheck("var");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Reset_COMPASS)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Reset_COMPASS);
+ }
+};
+
+const sensor_use_spi_init = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SPISUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "SPI")
+ .setCheck("var");
+ this.appendValueInput('PINSUB')
+ .appendField("CS")
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["RFID", "RFID"],
+ ["WS-LoRa", "Weather"]
+ ]), "key");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setFieldValue("RFID", "key");
+ }
+};
+
+const extern_rfid_read = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField("RFID" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_READ_CARD);
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.appendValueInput('SECTOR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_INDEX)
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_READ_CARD_UID, "id"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL, "content"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL, "ALL"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const extern_rfid_readid = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField("RFID" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_READ_CARD);
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_READ_CARD_UID);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const extern_rfid_readcontent = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField("RFID" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_READ_CARD);
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.appendValueInput('SECTOR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_INDEX)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL);
+ this.setOutput(true, 'Tuple');
+ this.setInputsInline(true);
+ }
+};
+
+const extern_rfid_write = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_RFID_WRITE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ this.appendValueInput('SECTOR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_INDEX)
+ this.appendValueInput('CONTENT')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_WRITE_NUM)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ }
+};
+
+const extern_rfid_write_return = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_RFID_WRITE);
+ this.appendValueInput('SUB')
+ .setCheck("var")
+ this.appendValueInput('SECTOR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_INDEX)
+ this.appendValueInput('CONTENT')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_WRITE_NUM)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.RETURN_SUCCESS_OR_NOT);
+ this.setInputsInline(true);
+ this.setOutput(true, Boolean);
+ }
+};
+
+const extern_rfid_status = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField("RFID");
+ this.appendValueInput('SUB')
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_SCAN_OK, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_SCAN_NOTAGERR, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_SCAN_ERROR, "2"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+//--------------------待写气象数据
+const weather_data = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField("无线气象站" + " WS-LoRa")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["全部(元组)", "data()[0]"],
+ ["全部(json)", "data()[1]"],
+ ["全部(json,附带位置信息)", "data()[2]"],
+ ["编号", "data()[0][0]"],
+ ["电量", "data()[0][1]"],
+ ["风速", "data()[0][2]"],
+ ["阵风", "data()[0][3]"],
+ ["风向", "data()[0][4]"],
+ ["雨量", "data()[0][5]"],
+ ["温度", "data()[0][6]"],
+ ["湿度", "data()[0][7]"],
+ ["光照", "data()[0][8]"],
+ ["紫外线", "data()[0][9]"],
+ ["大气压", "data()[0][10]"],
+ ["信号强度", "data()[0][11]"],
+ ["信噪比", "data()[0][12]"],
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip("返回气象数据元组 data= (设备id,电池状态,风速m/s,阵风m/s,风向°,雨量mm,温度℃,湿度%,光照Lux,UVI,大气压Pa,信号强度dB,信噪比dB)");
+ }
+};
+
+const weather_have_data = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField("无线气象站" + " WS-LoRa")
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_AVAILABLE)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const weather_uart_mixio = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField("无线气象站" + " WS-LoRa")
+ .setCheck("var");
+ this.appendValueInput('BASE')
+ .appendField("以主题")
+ this.appendDummyInput("")
+ .appendField("串口发送至MixIO")
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ }
+};
+
+const weather_set_label = {
+
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField("无线气象站" + " WS-LoRa")
+ .setCheck("var");
+ this.itemCount_ = 2;
+ this.updateShape_();
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setInputsInline(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['weather_set_label_item'], this));
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip();
+ },
+
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('weather_set_label_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('weather_set_label_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i)
+ .connection.connect(connections[i]);
+ }
+ }
+ },
+
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ var i = 0;
+ while (this.getInput('ADD' + i)) {
+ this.removeInput('ADD' + i);
+ i++;
+ }
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.appendDummyInput('EMPTY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GPS_LOCATION + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mixpy_PYLAB_TICKS_TAG + '(id,long,lat)');
+ } else {
+ for (var i = 0; i < this.itemCount_; i++) {
+ var input = this.appendValueInput('ADD' + i);
+ if (i == 0) {
+ input.appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GPS_LOCATION + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mixpy_PYLAB_TICKS_TAG + '(id,long,lat)');
+ }
+ }
+ }
+ }
+};
+const weather_set_label_container = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GPS_LOCATION + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mixpy_PYLAB_TICKS_TAG);
+ this.appendStatementInput('STACK');
+ this.contextMenu = false;
+ }
+};
+
+const weather_set_label_item = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_CREATE_WITH_ITEM_TITLE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.contextMenu = false;
+ }
+};
+
+const sensor_mixgoce_hot_wheel_is_touched = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HOT_WHEEL)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TOUCH_SENSOR)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP, "4"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN, "2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "3"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"],
+ ["OK", "0"]
+ ]), "key");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DATA, "value"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT, "is_touched()"]
+ ]), "stat");
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip();
+ }
+};
+
+const sensor_mixgoce_hot_wheel_degrees = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HOT_WHEEL)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TOUCH_SENSOR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE + '(-180°~180°)');
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip();
+ }
+};
+
+const esp32_s2_weather_init = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ForecastType + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor);
+ this.appendValueInput('wd')
+ .setCheck(Number)
+ .appendField('wd');
+ this.appendValueInput('ws')
+ .setCheck(Number)
+ .appendField('ws');
+ this.appendValueInput('rain')
+ .setCheck(Number)
+ .appendField('rain');
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const esp32_s2_weather_wd = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ForecastType + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ForecastFx)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const esp32_s2_weather_rain = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('rain')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ForecastType + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RAIN_TIME + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RAIN)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const esp32_s2_weather_ws = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ForecastType + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blynk_IOT_IR_FAN, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIND_RATING, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blynk_IOT_IR_FAN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIND_RATING, "ALL"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const HCSR04 = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHAOSHENGBO);
+ this.appendValueInput("PIN1", Number)
+ .appendField('Trig #')
+ .setCheck(Number);
+ this.appendValueInput("PIN2", Number)
+ .appendField('Echo #')
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_CHAOSHENGBO);
+ }
+
+};
+
+//PS2
+const PS2_init = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2);
+ this.appendDummyInput("")
+ .appendField('CLK#')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.output_pin), "PS2_CLK")
+ .appendField('DOU#')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.output_pin), "PS2_DOU")
+ .appendField('DIN#')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.output_pin), "PS2_DIN")
+ .appendField('CS#')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.output_pin), "PS2_CS");
+ // this.appendDummyInput("")
+ // .appendField(Blockly.Msg.PS2_setRumble)
+ // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_ON,"true"],[Blockly.Msg.MIXLY_OFF,"false"]]), "rumble");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip('');
+ }
+};
+
+
+var PSBUTTON = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_TRIANGLE, "PSB_GREEN"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_CIRCLE, "PSB_RED"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_CROSS, "PSB_BLUE"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_SQUARE, "PSB_PINK"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_L1, "PSB_L1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_L2, "PSB_L2"],
+ // ["PSB_L3","PSB_L3"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_R1, "PSB_R1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_R2, "PSB_R2"],
+ // ["PSB_R3","PSB_R3"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_UP, "PSB_PAD_UP"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_RIGHT, "PSB_PAD_RIGHT"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_DOWN, "PSB_PAD_DOWN"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_LEFT, "PSB_PAD_LEFT"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_SELECT, "PSB_SELECT"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_START, "PSB_START"]
+];
+
+//
+const PS2_vibration = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2 + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_setRumble)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STM32_OLED_SMALL + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catActuator_motor)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_OFF, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_ON, "1"],
+ ]), "smotorstate")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STM32_OLED_BIG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catActuator_motor + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGOPE_AMPLITUDE)
+ this.appendValueInput("AMP", Number)
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STM32_OLED_BIG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catActuator_motor + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGOPE_AMPLITUDE + "0-100");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+//
+const PS2_Button = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_BUTTON)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(PSBUTTON), "psbt")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON_HOLD, "Button"]
+ // ,[Blockly.Msg.MIXLY_BUTTON_PRESSED, "ButtonPressed"]
+ // ,[Blockly.Msg.MIXLY_BUTTON_RELEASED,"ButtonReleased"]
+ // ,[Blockly.Msg.MIXLY_CHANGE,"NewButtonState"]
+ ]), "btstate");
+ this.setOutput(true, Boolean);
+ this.setTooltip('');
+ }
+};
+
+//
+const PS2_State = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_BUTTON)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT, "0"]
+ , [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_I2C_VALUE, "1"]
+ // ,[Blockly.Msg.MIXLY_BUTTON_RELEASED,"ButtonReleased"]
+ // ,[Blockly.Msg.MIXLY_CHANGE,"NewButtonState"]
+ ]), "btstate");
+ this.setOutput(true, Boolean);
+ this.setTooltip('');
+ }
+};
+
+const PS2_Buttons = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_BUTTON)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(PSBUTTON), "psbt")
+ this.setOutput(true, Boolean);
+ this.setTooltip('');
+ }
+};
+
+const PS2_stk = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ var PSSTK = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_RX, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_RY, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_LX, "2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_LY, "3"],
+ ];
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_stick)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(PSSTK), "psstk");
+ this.setOutput(true, Number);
+ this.setTooltip('');
+ }
+};
+
+const PS2_init_new = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2);
+ this.appendValueInput('CLK')
+ .appendField('CLK#');
+ this.appendValueInput('DOU')
+ .appendField('DOU#');
+ this.appendValueInput('DIN')
+ .appendField('DIN#');
+ this.appendValueInput('CS')
+ .appendField('CS#');
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip('');
+ }
+};
+
+const PS2_vibration_new = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_setRumble)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STM32_OLED_SMALL + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catActuator_motor)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_OFF, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_ON, "1"],
+ ]), "smotorstate")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STM32_OLED_BIG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catActuator_motor + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGOPE_AMPLITUDE)
+ this.appendValueInput("AMP", Number)
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STM32_OLED_BIG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catActuator_motor + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGOPE_AMPLITUDE + "0-100");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const PS2_Buttons_new = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_BUTTON.slice(3))
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(PSBUTTON), "psbt")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WAS_PRESSED)
+ this.setOutput(true, Boolean);
+ this.setTooltip('');
+ }
+};
+
+const PS2_stk_new = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ var PSSTK = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_RX, "RX"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_RY, "RY"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_LX, "LX"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2_LY, "LY"],
+ ];
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PS2);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_JOYSTICK)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(PSSTK), "psstk");
+ this.setOutput(true, Number);
+ this.setTooltip('');
+ }
+};
+
+const sensor_use_uart_init = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "uart")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["uart1", "uart1"],
+ ["uart2", "uart2"]
+ ]), "key");
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PM25_SENSOR, "PM"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GNSS_SENSOR, "GNSS"]
+ ]), "sensor");
+
+
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ }
+};
+
+const pm25_get_data = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField('PM2.5' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ['PM2.5', "[0]"],
+ ['PM10', "[1]"],
+ ['(PM2.5, PM10)', ""],
+ ]), "pm")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CONCENTRATION)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PM_CONCENTRATION_TOOLTIP);
+ }
+}
+
+const gnss_have_data = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GNSS_SENSOR)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_AVAILABLE)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const gnss_get_data = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GNSS_SENSOR)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GPS_TIME, "time"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GPS_LOCATION, "locate"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT, "status"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var TOOLTIPS = {
+ 'time': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GNSS_SENSOR_GET_TIME_TOOLTIP,
+ 'locate': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GNSS_SENSOR_GET_LOCATE_TOOLTIP,
+ 'status': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GNSS_SENSOR_GET_STATUS_TOOLTIP
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+//mixbot/feiyi extern below:
+const robot_button_extern_get_value = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TURTLE_POS)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mixpy_PL_TEXT_TOP, '[0]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mixpy_PL_TEXT_BOTTOM, '[1]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, '[2]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, '[3]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.mixpy_PL_TEXT_CENTER, '[4]']
+ ]), "num");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DATA)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_touch_extern_get_value = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_INOUT_EVENT_TOUCH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_EXTERN_TOUCHED + "?")
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_infrared_extern_get_value = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_NEAR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DATA)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_infrared_extern_grey_get_value = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_GRAY_NEAR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DATA)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_potentiometer_extern_get_value = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KNOB_POTENTIOMETER)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DATA)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_color_extern_get_value = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_NAME, '[0]'],
+ ["RGB" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_TUPLE, '[1]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ENVIRONMENT_BRIGHTNESS, '[2]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_REFLECTION_BRIGHTNESS, '[3]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL, '']
+ ]), "color");
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ }
+}
+
+const mixbot_sensor_extern_get_addr = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXBOT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON, 'ext_button'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_INOUT_EVENT_TOUCH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor, 'ext_collision'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_NEAR, 'ext_infrared'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KNOB_POTENTIOMETER, 'ext_potentiometer'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor, 'ext_color'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_SONAR, 'ext_sonar']
+ ]), "name")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_EXTERN_GET_ADDR)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+}
+
+const mixbot_sensor_extern_set_addr = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXBOT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON, 'ext_button'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_INOUT_EVENT_TOUCH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor, 'ext_collision'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_NEAR, 'ext_infrared'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_KNOB_POTENTIOMETER, 'ext_potentiometer'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor, 'ext_color'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_SONAR, 'ext_sonar']
+ ]), "name")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_EXTERN_SET_ADDR)
+ this.appendValueInput('old')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE);
+ this.appendValueInput('new')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UPDATE);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_sonar_extern_get_value = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_SONAR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DATA + '(cm)')
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+}
+
+const robot_sonar_extern_led = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_SONAR)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PIN_NUMBERING)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "0"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "1"]]), "mode");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_INDICATOR_LIGHT)
+ this.appendValueInput('light')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LCD_NUMBERING);
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const sensor_weather_solo_init = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.weather_solo);
+ this.appendValueInput('wd')
+ .appendField('W-D#');
+ this.appendValueInput('ws')
+ .appendField('W-S#');
+ this.appendValueInput('rain')
+ .appendField('Rain#');
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip('');
+ }
+};
+
+const sensor_weather_solo_wd = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.weather_solo);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ForecastFx)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ABBR, "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, "[1]"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_weather_solo_ws = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.weather_solo);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIND_SPEED)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SPEED + 'm/s', "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIND_RATING, "[1]"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_weather_solo_rain = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.weather_solo);
+ this.appendValueInput('time')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RAIN_TIME)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ACCUMULATED, "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AVERAGE, "[1]"]
+ ]), "key");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RAIN + '(mm)');
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+//educore sensor_extern
+const educore_body_sensor = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("PIN")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BODY_SENSOR);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const educore_soilhum_sensor = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("PIN")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SOILHUM_SENSOR);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const educore_temphum_sensor = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("PIN")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMP_AND_HUMIDITY_SENSOR);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const educore_infrared_sensor = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("PIN")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Infrared_pyroelectric_sensor);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const educore_button_sensor_extern = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("PIN")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_BUTTON);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_read_humiture = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_of)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMPERATURE,"0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Humidity,"1"]
+ ]),"key");
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const educore_ultrasonic_sensor = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("PIN")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_SONAR);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const ultrasonic_sensor_read_distance = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_of+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_HALL_SENSOR_DISTANCE);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const educore_temp_sensor = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("PIN")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DS18B20);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const educore_camera_sensor = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("PIN")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SMARTCAMERA);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const camera_sensor_init = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("SUB")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SMARTCAMERA);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PROCCED)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipFace,"FACE_RECOGNIZE"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FACE_CLASSIFIER,"FACE_DETECT"]
+ ]),"key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const camera_sensor_result = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput("SUB")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SMARTCAMERA);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_of + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RECOGNIZED_RESULT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_weigh_init = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + 'HX711/720' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEIGH_SENSOR);
+ this.appendValueInput('sck')
+ .appendField('#SCK');
+ this.appendValueInput('dat')
+ .appendField('#DAT');
+ this.appendValueInput('pc')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Calibration_ratio);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip('');
+ }
+};
+
+const weigh_sensor_get_weight = {
+ init: function () {
+ this.setColour(SENSOR_EXTERN_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEIGH_SENSOR)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_of + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DATA)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+}
+
+/***/ }),
+
+/***/ "../micropython/blocks/sensor_onboard.js":
+/*!***********************************************!*\
+ !*** ../micropython/blocks/sensor_onboard.js ***!
+ \***********************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ CI130X_BROADCAST_SANT: () => (/* binding */ CI130X_BROADCAST_SANT),
+/* harmony export */ CI130X_GET_THE_RECOGNIZED_CMD_SANT: () => (/* binding */ CI130X_GET_THE_RECOGNIZED_CMD_SANT),
+/* harmony export */ CI130X_GET_WHETHER_IDENTIFY_SANT: () => (/* binding */ CI130X_GET_WHETHER_IDENTIFY_SANT),
+/* harmony export */ CI130X_IDENTIFY_AND_SAVE_SANT: () => (/* binding */ CI130X_IDENTIFY_AND_SAVE_SANT),
+/* harmony export */ CI130X_SET_SYSTEM_CMD_SANT: () => (/* binding */ CI130X_SET_SYSTEM_CMD_SANT),
+/* harmony export */ HCSR04: () => (/* binding */ HCSR04),
+/* harmony export */ RTC_set_date: () => (/* binding */ RTC_set_date),
+/* harmony export */ RTC_set_time: () => (/* binding */ RTC_set_time),
+/* harmony export */ bitbot_als_num: () => (/* binding */ bitbot_als_num),
+/* harmony export */ dht11: () => (/* binding */ dht11),
+/* harmony export */ educore_button_sensor: () => (/* binding */ educore_button_sensor),
+/* harmony export */ educore_button_was_pressed: () => (/* binding */ educore_button_was_pressed),
+/* harmony export */ educore_gyroscope_sensor: () => (/* binding */ educore_gyroscope_sensor),
+/* harmony export */ educore_gyroscope_sensor_read: () => (/* binding */ educore_gyroscope_sensor_read),
+/* harmony export */ educore_gyroscope_sensor_shake: () => (/* binding */ educore_gyroscope_sensor_shake),
+/* harmony export */ educore_light_sensor: () => (/* binding */ educore_light_sensor),
+/* harmony export */ educore_rfid_sensor: () => (/* binding */ educore_rfid_sensor),
+/* harmony export */ educore_rfid_sensor_scan: () => (/* binding */ educore_rfid_sensor_scan),
+/* harmony export */ educore_rfid_sensor_scan_data: () => (/* binding */ educore_rfid_sensor_scan_data),
+/* harmony export */ educore_voice_sensor: () => (/* binding */ educore_voice_sensor),
+/* harmony export */ number1: () => (/* binding */ number1),
+/* harmony export */ number2: () => (/* binding */ number2),
+/* harmony export */ number3: () => (/* binding */ number3),
+/* harmony export */ number4: () => (/* binding */ number4),
+/* harmony export */ number5: () => (/* binding */ number5),
+/* harmony export */ number6: () => (/* binding */ number6),
+/* harmony export */ number7: () => (/* binding */ number7),
+/* harmony export */ onboard_RTC_get_time: () => (/* binding */ onboard_RTC_get_time),
+/* harmony export */ onboard_RTC_get_time_str: () => (/* binding */ onboard_RTC_get_time_str),
+/* harmony export */ onboard_RTC_get_timestamp: () => (/* binding */ onboard_RTC_get_timestamp),
+/* harmony export */ onboard_RTC_get_timetuple_to_str: () => (/* binding */ onboard_RTC_get_timetuple_to_str),
+/* harmony export */ onboard_RTC_set_datetime: () => (/* binding */ onboard_RTC_set_datetime),
+/* harmony export */ onboard_RTC_settime_string: () => (/* binding */ onboard_RTC_settime_string),
+/* harmony export */ onboard_RTC_timestamp_totuple: () => (/* binding */ onboard_RTC_timestamp_totuple),
+/* harmony export */ rfid_readcontent: () => (/* binding */ rfid_readcontent),
+/* harmony export */ rfid_readid: () => (/* binding */ rfid_readid),
+/* harmony export */ rfid_write: () => (/* binding */ rfid_write),
+/* harmony export */ rfid_write_return: () => (/* binding */ rfid_write_return),
+/* harmony export */ sensor_LTR308: () => (/* binding */ sensor_LTR308),
+/* harmony export */ sensor_aht11: () => (/* binding */ sensor_aht11),
+/* harmony export */ sensor_bitbot_ALS: () => (/* binding */ sensor_bitbot_ALS),
+/* harmony export */ sensor_button_get_presses: () => (/* binding */ sensor_button_get_presses),
+/* harmony export */ sensor_button_is_pressed: () => (/* binding */ sensor_button_is_pressed),
+/* harmony export */ sensor_button_was_pressed: () => (/* binding */ sensor_button_was_pressed),
+/* harmony export */ sensor_distance_hrsc04: () => (/* binding */ sensor_distance_hrsc04),
+/* harmony export */ sensor_eulerangles: () => (/* binding */ sensor_eulerangles),
+/* harmony export */ sensor_field_strength: () => (/* binding */ sensor_field_strength),
+/* harmony export */ sensor_get_acceleration: () => (/* binding */ sensor_get_acceleration),
+/* harmony export */ sensor_get_temperature: () => (/* binding */ sensor_get_temperature),
+/* harmony export */ sensor_hp203: () => (/* binding */ sensor_hp203),
+/* harmony export */ sensor_light: () => (/* binding */ sensor_light),
+/* harmony export */ sensor_mixbot_get_gyro: () => (/* binding */ sensor_mixbot_get_gyro),
+/* harmony export */ sensor_mixbot_patrol_calibrate: () => (/* binding */ sensor_mixbot_patrol_calibrate),
+/* harmony export */ sensor_mixbot_patrol_value: () => (/* binding */ sensor_mixbot_patrol_value),
+/* harmony export */ sensor_mixbot_temperature: () => (/* binding */ sensor_mixbot_temperature),
+/* harmony export */ sensor_mixgo_LTR308: () => (/* binding */ sensor_mixgo_LTR308),
+/* harmony export */ sensor_mixgo_button_attachInterrupt: () => (/* binding */ sensor_mixgo_button_attachInterrupt),
+/* harmony export */ sensor_mixgo_button_get_presses: () => (/* binding */ sensor_mixgo_button_get_presses),
+/* harmony export */ sensor_mixgo_button_is_pressed: () => (/* binding */ sensor_mixgo_button_is_pressed),
+/* harmony export */ sensor_mixgo_button_was_pressed: () => (/* binding */ sensor_mixgo_button_was_pressed),
+/* harmony export */ sensor_mixgo_cc_mmc5603_calibrate_compass: () => (/* binding */ sensor_mixgo_cc_mmc5603_calibrate_compass),
+/* harmony export */ sensor_mixgo_cc_mmc5603_get_angle: () => (/* binding */ sensor_mixgo_cc_mmc5603_get_angle),
+/* harmony export */ sensor_mixgo_cc_mmc5603_get_magnetic: () => (/* binding */ sensor_mixgo_cc_mmc5603_get_magnetic),
+/* harmony export */ sensor_mixgo_light: () => (/* binding */ sensor_mixgo_light),
+/* harmony export */ sensor_mixgo_nova_LTR308: () => (/* binding */ sensor_mixgo_nova_LTR308),
+/* harmony export */ sensor_mixgo_nova_pin_near: () => (/* binding */ sensor_mixgo_nova_pin_near),
+/* harmony export */ sensor_mixgo_pin_near: () => (/* binding */ sensor_mixgo_pin_near),
+/* harmony export */ sensor_mixgo_pin_near_double: () => (/* binding */ sensor_mixgo_pin_near_double),
+/* harmony export */ sensor_mixgo_pin_near_single: () => (/* binding */ sensor_mixgo_pin_near_single),
+/* harmony export */ sensor_mixgo_pin_pressed: () => (/* binding */ sensor_mixgo_pin_pressed),
+/* harmony export */ sensor_mixgo_sant_color: () => (/* binding */ sensor_mixgo_sant_color),
+/* harmony export */ sensor_mixgo_touch_slide: () => (/* binding */ sensor_mixgo_touch_slide),
+/* harmony export */ sensor_mixgocar42_button_attachInterrupt: () => (/* binding */ sensor_mixgocar42_button_attachInterrupt),
+/* harmony export */ sensor_mixgocar42_button_get_presses: () => (/* binding */ sensor_mixgocar42_button_get_presses),
+/* harmony export */ sensor_mixgocar42_button_is_pressed: () => (/* binding */ sensor_mixgocar42_button_is_pressed),
+/* harmony export */ sensor_mixgocar42_button_was_pressed: () => (/* binding */ sensor_mixgocar42_button_was_pressed),
+/* harmony export */ sensor_mixgocar_battery_left: () => (/* binding */ sensor_mixgocar_battery_left),
+/* harmony export */ sensor_mixgocar_pin_near: () => (/* binding */ sensor_mixgocar_pin_near),
+/* harmony export */ sensor_mixgocar_pin_near_line: () => (/* binding */ sensor_mixgocar_pin_near_line),
+/* harmony export */ sensor_mixgocar_pin_near_state_change: () => (/* binding */ sensor_mixgocar_pin_near_state_change),
+/* harmony export */ sensor_mixgoce_pin_pressed: () => (/* binding */ sensor_mixgoce_pin_pressed),
+/* harmony export */ sensor_mixgoce_temperature: () => (/* binding */ sensor_mixgoce_temperature),
+/* harmony export */ sensor_mixgome_temperature: () => (/* binding */ sensor_mixgome_temperature),
+/* harmony export */ sensor_mpython_pin_pressed: () => (/* binding */ sensor_mpython_pin_pressed),
+/* harmony export */ sensor_mpython_qmi8658_get_gyro: () => (/* binding */ sensor_mpython_qmi8658_get_gyro),
+/* harmony export */ sensor_mpython_qmi8658_temperature: () => (/* binding */ sensor_mpython_qmi8658_temperature),
+/* harmony export */ sensor_onboard_compass_reset: () => (/* binding */ sensor_onboard_compass_reset),
+/* harmony export */ sensor_onboard_mpu9250_calibrate_compass: () => (/* binding */ sensor_onboard_mpu9250_calibrate_compass),
+/* harmony export */ sensor_onboard_mpu9250_field_strength: () => (/* binding */ sensor_onboard_mpu9250_field_strength),
+/* harmony export */ sensor_onboard_mpu9250_gesture: () => (/* binding */ sensor_onboard_mpu9250_gesture),
+/* harmony export */ sensor_onboard_mpu9250_get_acceleration: () => (/* binding */ sensor_onboard_mpu9250_get_acceleration),
+/* harmony export */ sensor_onboard_mpu9250_get_gyro: () => (/* binding */ sensor_onboard_mpu9250_get_gyro),
+/* harmony export */ sensor_onboard_mpu9250_get_magnetic: () => (/* binding */ sensor_onboard_mpu9250_get_magnetic),
+/* harmony export */ sensor_onboard_mpu9250_temperature: () => (/* binding */ sensor_onboard_mpu9250_temperature),
+/* harmony export */ sensor_pin_near: () => (/* binding */ sensor_pin_near),
+/* harmony export */ sensor_pin_pressed: () => (/* binding */ sensor_pin_pressed),
+/* harmony export */ sensor_read: () => (/* binding */ sensor_read),
+/* harmony export */ sensor_rm_acc: () => (/* binding */ sensor_rm_acc),
+/* harmony export */ sensor_rm_battery_left: () => (/* binding */ sensor_rm_battery_left),
+/* harmony export */ sensor_rm_pin_near_double: () => (/* binding */ sensor_rm_pin_near_double),
+/* harmony export */ sensor_rtc_init: () => (/* binding */ sensor_rtc_init),
+/* harmony export */ sensor_sound: () => (/* binding */ sensor_sound),
+/* harmony export */ sensor_temperature: () => (/* binding */ sensor_temperature)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _sensor_extern_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sensor_extern.js */ "../micropython/blocks/sensor_extern.js");
+
+
+
+
+const SENSOR_ONBOARD_HUE = '#947C54'; //'#9e77c9'//40;
+
+const sensor_mixgo_button_is_pressed = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput('btn')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IS_PRESSED);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SENOR_IS_PRESSED);
+ }
+};
+
+const sensor_mixgo_button_was_pressed = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput('btn')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WAS_PRESSED);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SENOR_WAS_PRESSED);
+ }
+};
+
+const sensor_mixgo_button_get_presses = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput('btn')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES);
+ this.appendValueInput('VAR')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES_TIME);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES);
+ }
+};
+
+const sensor_mixgo_button_attachInterrupt = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput("btn")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INTERRUPT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RISING, "machine.Pin.IRQ_RISING"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FALLING, "machine.Pin.IRQ_FALLING"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHANGE, "(machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING)"]]), "mode");
+ this.appendValueInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);
+ }
+};
+
+const sensor_mixgocar42_button_is_pressed = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IS_PRESSED);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SENOR_IS_PRESSED);
+ }
+};
+
+const sensor_mixgocar42_button_was_pressed = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WAS_PRESSED);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SENOR_WAS_PRESSED);
+ }
+};
+
+const sensor_mixgocar42_button_get_presses = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES);
+ this.appendValueInput('VAR')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES_TIME);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_PRESSES);
+ }
+};
+
+const sensor_mixgocar42_button_attachInterrupt = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INTERRUPT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RISING, "machine.Pin.IRQ_RISING"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FALLING, "machine.Pin.IRQ_FALLING"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHANGE, "(machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING)"]]), "mode");
+ this.appendValueInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);
+ }
+};
+
+const sensor_mixgo_pin_pressed = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput("button")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TOUCH_SENSOR)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IS_TOUCHED);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_sensor_pin_pressed);
+ }
+};
+
+const sensor_mixgoce_pin_pressed = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput("button")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TOUCH_SENSOR)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IS_TOUCHED);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_sensor_pin_pressed);
+ }
+};
+
+const sensor_mpython_pin_pressed = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput("button")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TOUCH_SENSOR)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IS_TOUCHED);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_sensor_pin_pressed);
+ }
+};
+
+const sensor_mixgo_touch_slide = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOUCH_SLIDE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_VALUE);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOUCH_SLIDE_TOOLTIP);
+ }
+};
+
+
+const sensor_distance_hrsc04 = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHAOSHENGBO)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHAOSHENGBO);
+ }
+};
+
+// var RTC_TIME_TYPE = [
+// [Blockly.Msg.MIXLY_YEAR, "Year"],
+// [Blockly.Msg.MIXLY_MONTH, "Month"],
+// [Blockly.Msg.MIXLY_DAY, "Day"],
+// [Blockly.Msg.MIXLY_HOUR, "Hour"],
+// [Blockly.Msg.MIXLY_MINUTE, "Minute"],
+// [Blockly.Msg.MIXLY_SECOND, "Second"],
+// [Blockly.Msg.MIXLY_WEEK, "Week"],
+// [Blockly.Msg.MIXLY_MIX1, "Mix1"],
+// [Blockly.Msg.MIXLY_MIX2, "Mix2"],
+// ];
+
+const RTC_set_time = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTCSETTIME)
+ .appendField('myRTC');
+ this.appendValueInput("hour")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HOUR);
+ this.appendValueInput("minute")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MINUTE);
+ this.appendValueInput("second")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SECOND);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(false);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTCSETTIME + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIX2);
+ }
+};
+
+const RTC_set_date = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTCSETDATE)
+ .appendField('myRTC');
+ this.appendValueInput("year")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_YEAR);
+ this.appendValueInput("month")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MONTH);
+ this.appendValueInput("day")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DAY);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTCSETDATE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIX1);
+ }
+};
+
+
+
+const HCSR04 = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHAOSHENGBO);
+ this.appendValueInput("PIN1", Number)
+ .appendField('Trig #')
+ .setCheck(Number);
+ this.appendValueInput("PIN2", Number)
+ .appendField('Echo #')
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_CHAOSHENGBO);
+ }
+
+};
+
+const sensor_mixgo_light = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LIGHT);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ESP32_SENSOR_NIXGO_LIGHT_TOOLTIP);
+ }
+};
+
+
+const number1 = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["1", "touch1"], ["2", "touch2"]]), 'op')
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
+ }
+};
+
+const number2 = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"]]), 'op')
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
+ }
+};
+
+const number3 = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP, "12"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN, "14"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "13"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "15"], ["A", "32"], ["B", "33"]]), 'op')
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
+ }
+};
+
+const number4 = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"]]), 'op')
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
+ }
+};
+
+const number5 = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"]]), 'op')
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
+ }
+};
+
+const number6 = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["3", "3"], ["4", "4"]]), 'op')
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
+ }
+};
+
+const number7 = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["0", "0"], ["1", "1"]]), 'op')
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
+ }
+};
+
+const sensor_mixgo_pin_near_single = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_NEAR);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_VALUE);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR);
+ }
+};
+
+const sensor_mixgo_pin_near_double = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "left"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "right"]]), "direction")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('direction');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR;
+ var TOOLTIPS = {
+ 'left': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT,
+ 'right': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1
+ });
+ }
+};
+
+const sensor_mixgo_pin_near = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR);
+ // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.mixpy_PL_TEXT_TOP, "l"], [Blockly.Msg.mixpy_PL_TEXT_BOTTOM, "r"]]), "direction")
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ // var thisBlock = this;
+ // this.setTooltip(function () {
+ // var mode = thisBlock.getFieldValue('direction');
+ // var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ // var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;
+ // var TOOLTIPS = {
+ // 'l': Blockly.Msg.mixpy_PL_TEXT_TOP,
+ // 'r': Blockly.Msg.mixpy_PL_TEXT_BOTTOM,
+ // };
+ // return mode0 + TOOLTIPS[mode] + mode1
+ // });
+ }
+};
+
+
+const sensor_mixgo_nova_pin_near = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "l"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "r"]]), "direction")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('direction');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR;
+ var TOOLTIPS = {
+ 'l': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT,
+ 'r': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1
+ });
+ }
+};
+
+const sensor_mixgo_nova_LTR308 = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "l"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "r"]]), "direction")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LIGHT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DATA);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('direction');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LIGHT;
+ var TOOLTIPS = {
+ 'l': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT,
+ 'r': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1
+ });
+ }
+};
+
+const sensor_mixgo_LTR308 = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.mixpy_PL_TEXT_TOP, "l"], [Blockly.Msg.mixpy_PL_TEXT_BOTTOM, "r"]]), "direction")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LIGHT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DATA);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_mixgo_sant_color = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COLOR_SENSOR + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DATA);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+//传感器-实时时钟块_获取时间
+const onboard_RTC_get_time = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField("RTC")
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTCGETTIME);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_RTC_GET_TIME_TOOLTIP + ' (year, month, mday, hour, minute, second, weekday, yearday)');
+ // var thisBlock = this;
+ // this.setTooltip(function() {
+ // var mode = thisBlock.getFieldValue('TIME_TYPE');
+ // var mode0 = Blockly.Msg.MIXLY_RTCGETTIME;
+ // var TOOLTIPS = {
+ // 'Year':Blockly.Msg.MIXLY_YEAR,
+ // 'Month':Blockly.Msg.MIXLY_MONTH,
+ // 'Day':Blockly.Msg.MIXLY_DAY,
+ // 'Hour':Blockly.Msg.MIXLY_HOUR,
+ // 'Minute':Blockly.Msg.MIXLY_MINUTE,
+ // 'Second':Blockly.Msg.MIXLY_SECOND,
+ // 'Week':Blockly.Msg.MIXLY_WEEK,
+ // 'Mix1':Blockly.Msg.MIXLY_MIX1,
+ // 'Mix2':Blockly.Msg.MIXLY_MIX2
+ // };
+ // return mode0 +TOOLTIPS[mode];
+ // });
+ }
+};
+
+const onboard_RTC_get_timestamp = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput('LIST')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTCGETTIMESTAMP);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_RTC_GET_TIMESTAMP_TOOLTIP);
+ }
+};
+
+const onboard_RTC_timestamp_totuple = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTC_TIMESTAMP);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_TO_TUPLE);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ }
+};
+
+const onboard_RTC_settime_string = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField('RTC');
+ this.appendValueInput('CONTENT')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_USE_STRING_TUPLE)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTCSETTIME);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ }
+};
+
+const onboard_RTC_set_datetime = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField("RTC")
+ this.appendValueInput('year')
+ .setCheck(Number)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_YEAR);
+ this.appendValueInput('month')
+ .setCheck(Number)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MONTH);
+ this.appendValueInput('day')
+ .setCheck(Number)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DAY);
+ this.appendValueInput('hour')
+ .setCheck(Number)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HOUR);
+ this.appendValueInput('minute')
+ .setCheck(Number)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MINUTE);
+ this.appendValueInput('second')
+ .setCheck(Number)
+ .appendField(" " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SECOND);
+ this.setInputsInline(false);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_RTC_SET_DATATIME_TOOLTIP);
+ }
+};
+
+const sensor_rtc_init = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField("RTC")
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .setCheck("var");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_RTC_INT_TOOLTIP);
+ }
+};
+
+const onboard_RTC_get_time_str = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTC_GET_TIME_STR);
+ this.setOutput(true, String);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_RTC_GET_TIME_TOOLTIP);
+ }
+};
+
+const onboard_RTC_get_timetuple_to_str = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput('CONTENT')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GPS_TIME + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_TUPLE)
+ .setCheck()
+ this.appendDummyInput()
+ .appendField( blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.A_TO_B + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GPS_TIME + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_STRING)
+ this.setOutput(true, String);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_LTR308 = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LIGHT);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ESP32_SENSOR_NIXGO_LIGHT_TOOLTIP);
+ }
+};
+
+const sensor_sound = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SOUND);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ESP32_SENSOR_NIXGO_SOUND_TOOLTIP);
+ }
+};
+
+const sensor_aht11 = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEM_HUM + " ")
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE, "temperature"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETHUMIDITY, "humidity"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var TOOLTIPS = {
+ "temperature": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,
+ "humidity": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32C3_SENSOR_AHT_HUM_TOOLTIP
+ };
+ return TOOLTIPS[mode]
+ });
+ }
+};
+
+
+const sensor_get_temperature = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+
+
+
+
+const sensor_hp203 = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Altitude + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor + " ")
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETPRESSURE, "pressure()"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE, "temperature()"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_ALTITUDE, "altitude()"],
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const rfid_readid = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField("RFID" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_READ_CARD);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_READ_CARD_UID);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const rfid_readcontent = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField("RFID" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_READ_CARD);
+ this.appendValueInput('SECTOR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_INDEX)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const rfid_write = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_RFID_WRITE);
+ this.appendValueInput('SECTOR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_INDEX)
+ this.appendValueInput('CONTENT')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_WRITE_NUM)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ }
+};
+
+const rfid_write_return = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_RFID_WRITE);
+ this.appendValueInput('SECTOR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_INDEX)
+ this.appendValueInput('CONTENT')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_WRITE_NUM)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.RETURN_SUCCESS_OR_NOT);
+ this.setInputsInline(true);
+ this.setOutput(true, Boolean);
+ }
+};
+
+const sensor_get_acceleration = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "[0]"],
+ ["y", "[1]"],
+ ["z", "[2]"],
+ ["(x,y,z)", ""],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STRENGTH, "strength"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;
+ var TOOLTIPS = {
+ '[0]': 'x',
+ '[1]': 'y',
+ '[2]': 'z',
+ '': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+
+const sensor_eulerangles = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_GESTURE_ALL)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_PITCH, '[0]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_ROLL, '[1]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_PITCH + ', ' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_ROLL, '']
+ ]), 'angle');
+
+ this.appendDummyInput("")
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+
+ }
+};
+
+const sensor_onboard_mpu9250_gesture = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField("MPU9250")
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_shake, "shake"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP, "up"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN, "down"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT, "left"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT, "right"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_up, "face up"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_down, "face down"]]), "gesture");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('gesture');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_STATE;
+ var mode3 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PERFORMANCE
+ var TOOLTIPS = {
+ 'shake': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_shake,
+ 'up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UP,
+ 'down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DOWN,
+ 'left': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LEFT,
+ 'right': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RIGHT,
+ 'face up': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_up,
+ 'face down': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_face_down,
+ // 'freefall':Blockly.Msg.MIXLY_MICROBIT_freefall,
+ // '3g': '3g',
+ // '6g': '6g',
+ // '8g': '8g'
+ };
+ return mode0 + mode1 + mode2 + TOOLTIPS[mode] + mode3;
+ });
+ }
+};
+
+const sensor_onboard_mpu9250_get_acceleration = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField("MPU9250")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "x"],
+ ["y", "y"],
+ ["z", "z"],
+ ["(x,y,z)", "values"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;
+ var TOOLTIPS = {
+ 'x': 'x',
+ 'y': 'y',
+ 'z': 'z',
+ '(x,y,z)': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+
+const sensor_onboard_mpu9250_get_magnetic = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField("MPU9250")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "x"],
+ ["y", "y"],
+ ["z", "z"],
+ ["(x,y,z)", "values"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH;
+ var TOOLTIPS = {
+ 'x': 'x',
+ 'y': 'y',
+ 'z': 'z',
+ '(x,y,z)': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+
+const sensor_onboard_mpu9250_get_gyro = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField("MPU9250")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENOR_GYRO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "x"],
+ ["y", "y"],
+ ["z", "z"],
+ ["(x,y,z)", "values"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENOR_GYRO;
+ var TOOLTIPS = {
+ 'x': 'x',
+ 'y': 'y',
+ 'z': 'z',
+ '(x,y,z)': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+
+const sensor_onboard_mpu9250_calibrate_compass = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField("MPU9250")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS);
+ }
+};
+
+
+const sensor_onboard_mpu9250_temperature = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField("MPU9250")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE);
+ }
+};
+
+
+const sensor_onboard_mpu9250_field_strength = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField("MPU9250")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET_COMPASS)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH, 'strength'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, 'heading']]), 'compass');
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('compass');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET_COMPASS;
+ var TOOLTIPS = {
+ 'strength': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH,
+ 'heading': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE
+ };
+ return mode0 + TOOLTIPS[mode];
+ });
+ }
+};
+
+const sensor_onboard_compass_reset = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField("MPU9250")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Reset_COMPASS)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Reset_COMPASS);
+ }
+};
+
+//mixgo_cc onboard_sensor blocks:
+const sensor_mixgo_cc_mmc5603_get_magnetic = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "[0]"],
+ ["y", "[1]"],
+ ["z", "[2]"],
+ ["(x,y,z)", ""],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH_ALL, "all"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH;
+ var TOOLTIPS = {
+ '[0]': 'x',
+ '[1]': 'y',
+ '[2]': 'z',
+ '': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+const sensor_mixgo_cc_mmc5603_get_angle = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET_COMPASS + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+
+ }
+};
+
+const sensor_mixgo_cc_mmc5603_calibrate_compass = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS);
+ }
+};
+
+
+//mixgo_me onboard_sensor blocks:
+
+
+const sensor_mixgome_temperature = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE)
+ this.appendDummyInput("")
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+
+ }
+};
+
+//mixgo_ce onboard_sensor blocks:
+
+
+const sensor_mixgoce_temperature = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE)
+ this.appendDummyInput("")
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+
+ }
+};
+
+
+
+
+const sensor_mpython_qmi8658_get_gyro = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENOR_GYRO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "[0]"],
+ ["y", "[1]"],
+ ["z", "[2]"],
+ ["(x,y,z)", ""]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENOR_GYRO;
+ var TOOLTIPS = {
+ '[0]': 'x',
+ '[1]': 'y',
+ '[2]': 'z',
+ '': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+
+const sensor_mpython_qmi8658_temperature = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE);
+ }
+};
+
+
+
+
+const sensor_rm_pin_near_double = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "1"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "2"]]), "direction")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('direction');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR;
+ var TOOLTIPS = {
+ 'left': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT,
+ 'right': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1
+ });
+ }
+};
+
+const sensor_rm_battery_left = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_CAR_BATTERY_LEFT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_rm_acc = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField("acc" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ADXL345_XA, "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ADXL345_YA, "[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ACC_SHAKE, "[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ADXL345_XA + ',' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ADXL345_YA + ',' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ACC_SHAKE, ""]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_ACCELERATION);
+
+ }
+};
+
+//car4.2
+const sensor_mixgocar_pin_near_line = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_MID, "[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_MID, "[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL, ""]
+ ]), "key")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LINE_SENSOR_VAL);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(function () {
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR;
+ return mode0 + mode1
+ });
+ }
+};
+
+const sensor_mixgocar_pin_near = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_FRONT, "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_FRONT, "[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_BACK, "[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_BACK, "[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL, ""]
+ ]), "key")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_PROXIMITY_SENSOR);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(function () {
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR;
+ return mode0 + mode1
+ });
+ }
+};
+
+const sensor_mixgocar_pin_near_state_change = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_CAR_SENSOR_ONBOARD_CHANGE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_CAR_SENSOR_ONBOARD_AUTO_CHANGE, "AS"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_CAR_USE_LINE_ONLY, "LP"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_CAR_USE_PROXIMITY_ONLY, "OA"]
+ ]), "key");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+
+const sensor_mixgocar_battery_left = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_CAR_BATTERY_LEFT);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+//mixbot onboard_sensor below:
+
+
+const sensor_mixbot_patrol_calibrate = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LINE_SENSOR)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_LINE_SENSOR_CALIBRATE_WHITE, "WHITE"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_LINE_SENSOR_CALIBRATE_BLACK, "BLACK"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXBOT_LINE_SENSOR_CALIBRATE_RESET, "RESET_TO_FAB"]
+ ]), "key");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_mixbot_patrol_value = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_FRONT, "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_FRONT, "[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_BACK, "[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_BACK, "[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL, ""]
+ ]), "key")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LINE_SENSOR_VAL);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(function () {
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR;
+ return mode0 + mode1
+ });
+ }
+};
+
+const sensor_mixbot_temperature = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Board_temperature)
+ this.appendDummyInput("")
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+
+ }
+};
+
+
+
+const sensor_mixbot_get_gyro = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENOR_GYRO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["x", "[0]"],
+ ["y", "[1]"],
+ ["z", "[2]"],
+ ["(x,y,z)", ""]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENOR_GYRO;
+ var TOOLTIPS = {
+ '[0]': 'x',
+ '[1]': 'y',
+ '[2]': 'z',
+ '': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Shiliang_Direction,
+ };
+ return mode0 + TOOLTIPS[mode] + mode1 + mode2;
+ });
+ }
+};
+
+const sensor_bitbot_ALS = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ANALOG + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_LIGHT)
+ this.appendValueInput('mode')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LCD_NUMBERING);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_LIGHT_INTENSITY + "(%)");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const bitbot_als_num = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.als_num), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const sensor_button_is_pressed = sensor_mixgo_button_is_pressed;
+const sensor_button_was_pressed = sensor_mixgo_button_was_pressed;
+const sensor_button_get_presses = sensor_mixgo_button_get_presses;
+const sensor_pin_pressed = sensor_mixgo_pin_pressed;
+const sensor_pin_near = sensor_mixgo_pin_near;
+const sensor_light = sensor_mixgo_light;
+const dht11 = _sensor_extern_js__WEBPACK_IMPORTED_MODULE_2__.sensor_dht11;
+const sensor_field_strength = _sensor_extern_js__WEBPACK_IMPORTED_MODULE_2__.sensor_mpu9250_field_strength;
+const sensor_temperature = _sensor_extern_js__WEBPACK_IMPORTED_MODULE_2__.sensor_mpu9250_temperature
+
+//educore sensor_onboard
+const educore_voice_sensor = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_EXTERN_SOUND);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const sensor_read = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_of + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_I2C_VALUE);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const educore_light_sensor = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIGHT_SENSOR);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const educore_gyroscope_sensor = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GYROSCOPE_SENSOR);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const educore_gyroscope_sensor_read = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Horizontal_inclination, "X"],
+ ["y", "[1]"],
+ ["z", "[2]"]
+ ]), "key");
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const educore_gyroscope_sensor_shake = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BE_SHAKED)
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const educore_button_sensor = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["a", "a"],
+ ["b", "b"],
+ ["c", "c"]
+ ]), "btn");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const educore_button_was_pressed = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WAS_PRESSED);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SENOR_WAS_PRESSED);
+ }
+};
+
+const educore_rfid_sensor = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput("PIN")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_RFID_INITIAL);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const educore_rfid_sensor_scan = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput("SUB")
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_RFID_READ);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const educore_rfid_sensor_scan_data = {
+ init: function () {
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendValueInput("SUB")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_RFID_READ + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_DATA_FROM);
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_NUMBER,"serial_number"]
+ ]),"key");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const CI130X_IDENTIFY_AND_SAVE_SANT = {
+ init:function(){
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_asr + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_IDENTIFY_ONCE_AND_SAVE)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+const CI130X_GET_WHETHER_IDENTIFY_SANT = {
+ init:function(){
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_asr + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HELLO_XIAOZHI,"1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_XIAOZHIXIAOZHI ,"2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_FIRST ,"3"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_SECOND ,"4"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_THIRD ,"5"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_FOURTH ,"6"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_FIFTH ,"7"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_SIXTH ,"8"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_SEVENTH ,"9"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_EIGHTH ,"10"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_NINTH ,"11"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_TENTH ,"12"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_ELEVENTH ,"13"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_TWELFTH ,"14"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_13TH ,"15"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_14TH ,"16"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_15TH ,"17"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_16TH ,"18"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_17TH ,"19"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_18TH ,"20"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_19TH ,"21"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_20TH ,"22"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Turn_on_the_lights ,"23"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Turn_off_the_lights ,"24"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Turn_up_the_brightness ,"25"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Turn_down_the_brightness ,"26"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_red ,"27"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_orange ,"28"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_yellow ,"29"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_green ,"30"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_cyan ,"31"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_blue ,"32"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_purple ,"33"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Set_it_to_white ,"34"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Turn_on_the_fan ,"35"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Turn_off_the_fan ,"36"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_First_gear ,"37"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Wind_speed_second ,"38"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Third_gear ,"39"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Previous ,"40"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Next_page ,"41"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Show_smiley_face ,"42"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Show_crying_face ,"43"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Show_love ,"44"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Close_display ,"45"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Start_execution ,"46"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FORWARD ,"47"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BACKWARD ,"48"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURNLEFT ,"49"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURNRIGHT ,"50"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STOP ,"51"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Accelerate ,"52"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_retard ,"53"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ROTATION_FORWARD ,"54"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ROTATION_BACKWARD ,"55"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_temperature ,"56"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_humidity ,"57"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_brightness ,"58"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_sound ,"59"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_time ,"60"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_distance ,"61"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_pressure ,"62"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_key ,"63"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_touch ,"64"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Query_color ,"65"]
+ ]),"cmd")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WHETHER+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BE_IDENTIFIED);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const CI130X_GET_THE_RECOGNIZED_CMD_SANT = {
+ init:function(){
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_asr + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RECOGNIZED_STATE,"status1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WHETHER_BROADCAST,"status2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_THE_RECOGNIZED_CMD,"result"]
+ ]),"key")
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CI130X_GET_THE_RECOGNIZED_STATE_TOOLTIP);
+ }
+};
+
+const CI130X_BROADCAST_SANT = {
+ init:function(){
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_asr + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MP3_PLAY)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_INOUT_PULL_NONE,"None"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIND_SPEED,"154"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HYETAL,"155"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMPERATURE,"156"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Humidity,"157"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Altitude, "158"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SOUND, "159"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS, "160"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_HALL_SENSOR_DISTANCE,"161"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERVO,"162"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_BY_ANGLE,"163"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUTTON2,"164"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TOUCH,"165"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PAY,"166"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CARSH_CHANGE,"167"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COUNTDOWN,"168"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TIMING,"169"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AT_THE_MOMENT,"170"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE,"171"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FORWARD ,"172"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BACKWARD ,"173"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURNLEFT ,"174"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURNRIGHT ,"175"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STOP ,"176"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Accelerate ,"177"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_retard ,"178"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ROTATION_FORWARD ,"179"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ROTATION_BACKWARD ,"180"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_JOIN,"181"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SHOW,"182"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LAMPLIGHT,"183"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ACCELERATION,"184"]
+ ]),"star");
+ this.appendValueInput('NUM')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_NUMBER);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_UNIT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_INOUT_PULL_NONE,"None"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_YEAR,"117"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MONTH,"118"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DAY,"119"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HOUR,"120"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MINUTE,"121"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SECOND,"122"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEEK2,"123"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RMB_UNIT,"124"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_setheading_degree,"125"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GEAR,"126"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LAYER,"127"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GRAM,"128"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_METER,"129"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CENTIMETER,"130"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MILLIMETER,"131"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LUMEN,"132"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DECIBEL,"133"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_hectopascal,"134"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PERCENT,"135"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CELSIUS,"136"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_METER_PER_SEC,"137"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_on_display,"138"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Turn_off_display,"139"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SUCCESS,"140"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FAILED,"141"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WRONG,"142"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GOOD,"143"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_blockpy_set_add,"144"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DECREASE,"145"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED,"146"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_ORANGE,"147"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_YELLOW,"148"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN,"149"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_CYAN,"150"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_BLUE,"151"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_PURPLE,"152"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_WHITE,"153"]
+ ]),"end");
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+const CI130X_SET_SYSTEM_CMD_SANT = {
+ init:function(){
+ this.setColour(SENSOR_ONBOARD_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AipSpeech_asr+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SYSTEM + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CMD)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MILXY_ENTER_WAKE_UP,"1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_INCREASE_VOLUME,"202"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_REDUCE_VOLUME,"203"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MAX_VOLUME,"204"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MINIMUM,"205"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OPEN_RESPONSE,"206"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CLOSE_RESPONSE,"207"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_QUIT_WAKE_UP,"208"]
+ ]),"cmd")
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+/***/ }),
+
+/***/ "../micropython/blocks/serial.js":
+/*!***************************************!*\
+ !*** ../micropython/blocks/serial.js ***!
+ \***************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ serial_any: () => (/* binding */ serial_any),
+/* harmony export */ serial_begin: () => (/* binding */ serial_begin),
+/* harmony export */ serial_print: () => (/* binding */ serial_print),
+/* harmony export */ serial_print_byte: () => (/* binding */ serial_print_byte),
+/* harmony export */ serial_print_hex: () => (/* binding */ serial_print_hex),
+/* harmony export */ serial_println: () => (/* binding */ serial_println),
+/* harmony export */ serial_read_from_ai: () => (/* binding */ serial_read_from_ai),
+/* harmony export */ serial_readline: () => (/* binding */ serial_readline),
+/* harmony export */ serial_readstr: () => (/* binding */ serial_readstr),
+/* harmony export */ serial_readstr_until: () => (/* binding */ serial_readstr_until),
+/* harmony export */ serial_receive_data_event: () => (/* binding */ serial_receive_data_event),
+/* harmony export */ serial_send_to_ai: () => (/* binding */ serial_send_to_ai),
+/* harmony export */ serial_softserial: () => (/* binding */ serial_softserial),
+/* harmony export */ serial_softserial_new: () => (/* binding */ serial_softserial_new),
+/* harmony export */ system_input: () => (/* binding */ system_input),
+/* harmony export */ system_print: () => (/* binding */ system_print),
+/* harmony export */ system_print_container: () => (/* binding */ system_print_container),
+/* harmony export */ system_print_end: () => (/* binding */ system_print_end),
+/* harmony export */ system_print_inline: () => (/* binding */ system_print_inline),
+/* harmony export */ system_print_item: () => (/* binding */ system_print_item),
+/* harmony export */ system_print_many: () => (/* binding */ system_print_many)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const SERIAL_HUE = 65; //'#58a8de'//65;
+
+const serial_print_byte = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendValueInput("CONTENT", String)
+ .appendField("Serial")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['uart1', '1']]), 'mode')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_WRITE + '(' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_BYTE + ')');
+ //this.setFieldValue('1','mode')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_PRINT_TOOLTIP);
+ }
+};
+
+const serial_print = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendValueInput("CONTENT", String)
+ .appendField("Serial")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['uart1', '1']]), 'mode')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_PRINT);
+ //this.setFieldValue('1','mode')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_PRINT_TOOLTIP);
+ }
+};
+
+const serial_println = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendValueInput("CONTENT", String)
+ .appendField("Serial")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['uart1', '1']]), 'mode')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_PRINTLN);
+ //this.setFieldValue('1','mode')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_PRINT_Huanhang_TOOLTIP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_PRINT_TOOLTIP);
+ }
+};
+
+//打印16进制数
+const serial_print_hex = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendDummyInput()
+ .appendField("Serial")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['uart1', '1']]), 'mode')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_PRINTLN);
+ this.appendValueInput("CONTENT", Number)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_BIN, "bin"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_OCT, "oct"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_DEC, "int"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_HEX, "hex"]]), "STAT")
+ .setCheck(Number);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setFieldValue('hex', 'STAT')
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_PRINT_HEX_TOOLTIP);
+ }
+};
+
+const serial_receive_data_event = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendValueInput('char_marker')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_SERIAL_WHEN_CONTAIN_DATA)
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ }
+};
+
+const serial_readstr = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendDummyInput()
+ .appendField("Serial")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['uart1', '1']]), 'mode')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_READSTR);
+ //this.setFieldValue('1','mode')
+ this.setOutput(true, String);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_BLOCKGROUP_SERIAL_READ_STR);
+ }
+};
+
+const serial_any = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendDummyInput()
+ .appendField("Serial")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['uart1', '1']]), 'mode')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_AVAILABLE);
+ //this.setFieldValue('1','mode')
+ this.setOutput(true, Boolean);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_AVAILABLE1);
+ }
+};
+
+const serial_readline = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendDummyInput()
+ .appendField("Serial")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['uart1', '1']]), 'mode')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_READ_LINE);
+ //this.setFieldValue('1','mode')
+ this.setOutput(true, String);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_SERIAL_READ_LINE1);
+ }
+};
+
+const serial_readstr_until = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendDummyInput()
+ .appendField("Serial " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_READSTR_UNTIL)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["new line", "serial.delimiters(Delimiters.NewLine)"],
+ [",", "serial.delimiters(Delimiters.Comma)"],
+ ["$", "serial.delimiters(Delimiters.Dollar)"],
+ [":", "serial.delimiters(Delimiters.Colon)"],
+ [".", "serial.delimiters(Delimiters.Fullstop)"],
+ ["#", "serial.delimiters(Delimiters.Hash)"]
+ ]), "char_marker");
+
+ this.setInputsInline(true);
+ this.setOutput(true, String);
+ }
+};
+
+const serial_softserial_new = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendValueInput("RX")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['uart1', '1']]), 'mode')
+ .appendField("RX#")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendValueInput("TX")
+ .appendField("TX#")
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_BEGIN)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['115200', '115200'], ['57600', '57600'], ['37400', '38400'], ['31250', '31250'], ['28800', '28800'], ['19200', '19200'], ['14400', '14400'], ['9600', '9600'], ['4800', '4800'], ['2400', '2400'], ['1200', '1200'], ['300', '300']]), 'baudrate');
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_softserial);
+ }
+};
+
+const serial_softserial = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['uart1 (RX=23,TX=19)', '1'], ['uart2 (RX=5,TX=18)', '2']]), 'mode');
+ //this.setFieldValue('1','mode')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_BEGIN)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['115200', '115200'], ['57600', '57600'], ['37400', '38400'], ['31250', '31250'], ['28800', '28800'], ['19200', '19200'], ['14400', '14400'], ['9600', '9600'], ['4800', '4800'], ['2400', '2400'], ['1200', '1200'], ['300', '300']]), 'baudrate');
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_softserial);
+ }
+};
+
+const serial_begin = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendDummyInput()
+ .appendField("Serial " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_BEGIN)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['115200', '115200'], ['57600', '57600'], ['37400', '38400'], ['31250', '31250'], ['28800', '28800'], ['19200', '19200'], ['14400', '14400'], ['9600', '9600'], ['4800', '4800'], ['2400', '2400'], ['1200', '1200'], ['300', '300']]), 'baudrate');
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_SET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_BEGIN);
+ }
+};
+
+const system_input = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendValueInput("VAR")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_inout_raw_input)
+ .setCheck(String);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.INOUT_input_TOOLTIP);
+ }
+}
+
+const system_print = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendValueInput("VAR")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_PRINTLN);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.BLOCKPY_PRINT_TOOLTIP);
+ }
+};
+
+const system_print_inline = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendValueInput("VAR")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_PRINT);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_PRINT_TOOLTIP);
+ }
+};
+
+const system_print_end = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendValueInput("VAR")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_PRINT);
+ this.appendValueInput("END")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ENDSWITH);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_INOUT_PRINT_END_TOOLTIP);
+ }
+};
+
+const system_print_many = {
+
+ init: function () {
+ this.setColour(SERIAL_HUE);
+
+ this.itemCount_ = 2;
+ this.updateShape_();
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setInputsInline(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['system_print_item'], this));
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_TOOLTIP);
+ },
+
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('system_print_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('system_print_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i)
+ .connection.connect(connections[i]);
+ }
+ }
+ },
+
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ var i = 0;
+ while (this.getInput('ADD' + i)) {
+ this.removeInput('ADD' + i);
+ i++;
+ }
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.appendDummyInput('EMPTY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_INOUT_PRINT_EMPTY);
+ } else {
+ for (var i = 0; i < this.itemCount_; i++) {
+ var input = this.appendValueInput('ADD' + i);
+ if (i == 0) {
+ input.appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_PRINTLN);
+ }
+ }
+ }
+ }
+};
+const system_print_container = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SERIAL_PRINTLN);
+ this.appendStatementInput('STACK');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_CONTAINER_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const system_print_item = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_CREATE_WITH_ITEM_TITLE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_ITEM_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const serial_send_to_ai = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendValueInput("CONTENT")
+ .appendField("Serial")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['uart1', '1']]), 'mode')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMQX_PUBLISH);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FOR_INPUT_TO + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OTHER + 'MP' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DEVICE)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_WHILEUNTIL_TITLE_REPEAT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, 'True'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, 'False']]), 'STAT')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ }
+};
+
+const serial_read_from_ai = {
+ init: function () {
+ this.setColour(SERIAL_HUE);
+ this.appendDummyInput()
+ .appendField("Serial")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['uart1', '1']]), 'mode')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_READ + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OTHER + 'MP' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DEVICE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SD_DATA);
+ this.setOutput(true, Boolean);
+ }
+};
+
+/***/ }),
+
+/***/ "../micropython/blocks/system.js":
+/*!***************************************!*\
+ !*** ../micropython/blocks/system.js ***!
+ \***************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ Panic_with_status_code: () => (/* binding */ Panic_with_status_code),
+/* harmony export */ Timer_init: () => (/* binding */ Timer_init),
+/* harmony export */ base_delay: () => (/* binding */ base_delay),
+/* harmony export */ controls_delay: () => (/* binding */ controls_delay),
+/* harmony export */ controls_delay_new: () => (/* binding */ controls_delay_new),
+/* harmony export */ controls_millis: () => (/* binding */ controls_millis),
+/* harmony export */ controls_uname: () => (/* binding */ controls_uname),
+/* harmony export */ raw_block: () => (/* binding */ raw_block),
+/* harmony export */ reset: () => (/* binding */ reset),
+/* harmony export */ system_bitbot_shutdown: () => (/* binding */ system_bitbot_shutdown),
+/* harmony export */ system_machine_reset: () => (/* binding */ system_machine_reset),
+/* harmony export */ system_ticks_diff: () => (/* binding */ system_ticks_diff),
+/* harmony export */ system_timer: () => (/* binding */ system_timer),
+/* harmony export */ system_timer_init: () => (/* binding */ system_timer_init),
+/* harmony export */ system_wdt_feed: () => (/* binding */ system_wdt_feed),
+/* harmony export */ system_wdt_init: () => (/* binding */ system_wdt_init),
+/* harmony export */ time_ticks_diff: () => (/* binding */ time_ticks_diff),
+/* harmony export */ timer: () => (/* binding */ timer),
+/* harmony export */ timer2: () => (/* binding */ timer2)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+
+const SYSTEM_HUE = 120; //'#EB8045';
+
+const controls_delay_new = {
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DELAY)
+ this.appendValueInput("DELAY_TIME", Number)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SECOND, "s"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_mSecond, "ms"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_uSecond, "us"]]), 'Time');
+ this.setFieldValue('s', 'Time')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_CONTROL_DELAY);
+ }
+};
+
+const controls_delay = {
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DELAY)
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SECOND, "s"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_mSecond, "ms"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_uSecond, "us"]]), 'Time');
+ this.appendValueInput("DELAY_TIME", Number)
+ .setCheck(Number);
+ this.setFieldValue('ms', 'Time')
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_CONTROL_DELAY);
+ }
+};
+
+const Panic_with_status_code = {
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.appendValueInput("STATUS_CODE", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Panic_with_status_code)
+ .setCheck(Number);
+ this.setPreviousStatement(true, null);
+ // this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Panic_with_status_code);
+ }
+};
+
+const reset = {
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Reset_micro);
+ this.setPreviousStatement(true);
+ // this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Reset_micro);
+ }
+};
+
+const controls_millis = {
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RUNTIME);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_mSecond, "ms"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_uSecond, "us"]]), 'Time');
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_CONTROLS_MILLIS_TOOLTIP);
+ }
+};
+
+const raw_block = {
+ // Container.
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.appendDummyInput()
+ .appendField('Code Block:');
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldMultilineInput('12345'), 'TEXT');
+ }
+};
+
+const controls_uname = {
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_CONTORL_UNAME);
+
+ this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_CONTORL_UNAME);
+ }
+};
+
+const timer = {
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.appendValueInput('VAR')
+ .appendField("Timer")
+ .setCheck("var");
+ this.appendValueInput('period')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ // .appendField("Timer")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_PERIOD_MIL);
+ this.appendValueInput('mode')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE);
+ this.appendValueInput('callback')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_REPEAT_INPUT_DO);
+ // this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TIMER_TOOLTIP);
+ }
+};
+
+const system_timer = {
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.appendValueInput('VAR')
+ .appendField("Timer")
+ .setCheck("var");
+ // .appendField("I2C " + Blockly.Msg.MIXLY_SETUP)
+ this.appendValueInput("period")
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_PERIOD_MIL)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_mSecond)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_ONE_SHOT, "ONE_SHOT"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_PERIODIC, "PERIODIC"]]), "mode");
+ this.appendValueInput('callback')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SYSTEM_TIMER_TOOLTIP);
+ }
+};
+
+const system_ticks_diff = {
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.appendValueInput('END')
+ // .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TIME_TICKS_DIFF);
+ this.appendValueInput('START')
+ // .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TIME_MINUS);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SYSTEM_TICKS_DIFF_TOOLTIP);
+ }
+};
+
+const system_timer_init = {
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.appendDummyInput("")
+ .appendField("Timer")
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SYSTEM_TIMER_INIT_TOOLTIP);
+ }
+};
+
+const system_wdt_init = {
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MACHINE_WDT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ this.appendValueInput('period')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MACHINE_WDT_TIMEOUT)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_mSecond)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MACHINE_WDT_INIT_TOOLTIP);
+ }
+};
+
+const system_wdt_feed = {
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MACHINE_WDT)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MACHINE_FEED)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MACHINE_WDT_FEED_TOOLTIP);
+ }
+};
+
+const system_machine_reset = {
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MACHINE_RESET)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MACHINE_RESET_TOOLTIP);
+ }
+};
+
+const system_bitbot_shutdown = {
+ init: function () {
+ this.setColour(SYSTEM_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.BITBOT)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.SHUTDOWN)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROPYTHON_BITBOT_SHUTDOWN_TOOLTIP);
+ }
+};
+
+const Timer_init = system_timer_init;
+const timer2 = system_timer;
+const time_ticks_diff = system_ticks_diff;
+const base_delay = controls_delay;
+
+/***/ }),
+
+/***/ "../micropython/blocks/weather.js":
+/*!****************************************!*\
+ !*** ../micropython/blocks/weather.js ***!
+ \****************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ Air_daily_content: () => (/* binding */ Air_daily_content),
+/* harmony export */ Air_now_content: () => (/* binding */ Air_now_content),
+/* harmony export */ Geo_moon_content: () => (/* binding */ Geo_moon_content),
+/* harmony export */ Geo_sun_content: () => (/* binding */ Geo_sun_content),
+/* harmony export */ Life_suggestion_content: () => (/* binding */ Life_suggestion_content),
+/* harmony export */ Location_search_content: () => (/* binding */ Location_search_content),
+/* harmony export */ Tide_daily_content: () => (/* binding */ Tide_daily_content),
+/* harmony export */ WEATHER_DAILY: () => (/* binding */ WEATHER_DAILY),
+/* harmony export */ WEATHER_HOUR: () => (/* binding */ WEATHER_HOUR),
+/* harmony export */ WEATHER_NOW: () => (/* binding */ WEATHER_NOW),
+/* harmony export */ Weather_alarm_content: () => (/* binding */ Weather_alarm_content),
+/* harmony export */ Weather_daily: () => (/* binding */ Weather_daily),
+/* harmony export */ Weather_daily_content: () => (/* binding */ Weather_daily_content),
+/* harmony export */ Weather_now: () => (/* binding */ Weather_now),
+/* harmony export */ Weather_now_content: () => (/* binding */ Weather_now_content)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const WEATHER_HUE = '#27b6ac';
+
+const WEATHER_NOW = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catweather)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW, "weather_now"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_ALARM, "weather_alarm"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_AIR_NOW, "air_now"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_TIDE_DAILY, "tide_daily"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_PLACE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_SEARCH, "location_search"]
+ ]), "mode");
+ this.appendValueInput('key')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_API_PRIVATE_KEY);
+ this.appendValueInput('addr')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GEOGRAPHIC_LOCATION);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const WEATHER_DAILY = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catweather)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY, "weather_daily"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_LIFE_SUGGESTION, "life_suggestion"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_AIR_DAILY, "air_daily"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_GEO_SUN, "geo_sun"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_GEO_MOON, "geo_moon"]
+ ]), "mode");
+ this.appendValueInput('key')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_API_PRIVATE_KEY);
+ this.appendValueInput('addr')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GEOGRAPHIC_LOCATION);
+ this.appendValueInput('day')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DAILY);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const WEATHER_HOUR = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catweather)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_HOURS);
+ this.appendValueInput('key')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_API_PRIVATE_KEY);
+ this.appendValueInput('addr')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GEOGRAPHIC_LOCATION);
+ this.appendValueInput('hour')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_HOURS);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const Weather_now = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catweather)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW, "Weather_now"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_ALARM, "Weather_alarm"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_AIR_NOW, "Air_now"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_TIDE_DAILY, "Tide_daily"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_PLACE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_SEARCH, "Location_search"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_LIFE_SUGGESTION, "Life_suggestion"]
+ ]), "mode");
+ this.appendValueInput('key')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_API_PRIVATE_KEY);
+ this.appendValueInput('addr')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GEOGRAPHIC_LOCATION);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const Weather_now_content = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMETER_FREE, "none"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEATHER_PHENOMENON, "text"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEATHER_PHENOMENON_CODE, "code"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMPERATURE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMPERATURE_UNIT_, "temperature"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_FEEL, "feels_like"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Altitude + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PRESSURE_UNIT, "pressure"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_HUMIDITY, "humidity"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_VISIBILITY, "visibility"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ForecastFx, "wind_direction"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_WIND_DIRECT_DEGREE, "wind_direction_degree"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_WIND_SPEED, "wind_speed"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIND_RATING, "wind_scale"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_CLOUDS, "clouds"]
+ ]), "content");
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const Air_now_content = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_AIR_NOW + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMETER_FREE, "none"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_AIRQUAILTY, "api"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_PM25, "pm25"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_PM10, "pm10"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_so2, "so2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_no2, "no2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_co, "co"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_o3, "o3"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_pp, "primary_pollutant"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_quailty, "quality"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_last_update, "last_update"]
+ ]), "content");
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const Weather_alarm_content = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_ALARM + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMETER_FREE, "none"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEATHER_ALARM_TITLE, "title"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEATHER_ALARM_TYPE, "type"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEATHER_ALARM_LEVEL, "level"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEATHER_ALARM_DESCRIPTION, "description"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEATHER_ALARM_PUB_DATE, "pub_date"]
+ ]), "content");
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const Life_suggestion_content = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_LIFE_SUGGESTION + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMETER_FREE, "none"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_AC, "ac"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_AP, "air_pollution"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_AIRING, "airing"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_ALLERGY, "allergy"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_BEER, "beer"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_BOATING, "boating"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_CAR_WS, "car_washing"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_CHILL, "chill"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_COMFORT, "comfort"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_DATING, "dating"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_DRESSING, "dressing"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_FISHING, "fishing"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_FLU, "flu"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_HAIR_DRESS, "hair_dressing"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_KITEFLYING, "kiteflying"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_MAKEUP, "makeup"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_MOOD, "mood"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_MORNINIG_SPORT, "morning_sport"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_NIGHT_LIFE, "night_life"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_ROAD_CONDI, "road_condition"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_SHOPPING, "shopping"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_SPORT, "sport"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_SUNSCREEN, "sunscreen"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_TRAFFIC, "traffic"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_TRAVEL, "travel"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_UMBRELLA, "umbrella"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIFE_SUGGESTION_UV, "uv"]
+ ]), "content");
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const Tide_daily_content = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_TIDE_DAILY + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMETER_FREE, "none"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GPS_DATE, "date"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TIDE_DAILY_HEIGHT, "tide"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TIDE_DAILY_0_TIME, "0,time"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TIDE_DAILY_0_HEIGHT, "0,height"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TIDE_DAILY_1_TIME, "1,time"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TIDE_DAILY_1_HEIGHT, "1,height"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TIDE_DAILY_2_TIME, "2,time"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TIDE_DAILY_2_HEIGHT, "2,height"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TIDE_DAILY_3_TIME, "3,time"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TIDE_DAILY_3_HEIGHT, "3,height"]
+ ]), "content");
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const Location_search_content = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_PLACE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_SEARCH + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMETER_FREE, "none"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LOCATION_SEARCH_ID, "id"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LOCATION_SEARCH_NAME, "name"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LOCATION_SEARCH_COUNTRY, "country"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LOCATION_SEARCH_PATH, "path"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LOCATION_SEARCH_TIMEZONE, "timezone"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LOCATION_SEARCH_TIMEZONE_O, "timezone_offset"]
+ ]), "content");
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const Weather_daily = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catweather)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY, "Weather_daily"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_AIR_DAILY, "Air_daily"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_GEO_SUN, "Geo_sun"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_GEO_MOON, "Geo_moon"]
+ ]), "mode");
+ this.appendValueInput('key')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_API_PRIVATE_KEY);
+ this.appendValueInput('addr')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GEOGRAPHIC_LOCATION);
+ this.appendValueInput('day')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DAILY);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const Weather_daily_content = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY);
+ this.appendValueInput('day')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_START);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY_DAY + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMETER_FREE, "none"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GPS_DATE, "date"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DAYTIME_WEATHER_PHENOMENON, "text_day"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DAYTIME_WEATHER_PHENOMENON_CODE, "code_day"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EVENING_WEATHER_PHENOMENON, "text_night"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EVENING_WEATHER_PHENOMENON_CODE, "code_night"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ForecastHigh + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMPERATURE_UNIT_, "high"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ForecastLow + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEMPERATURE_UNIT_, "low"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PROBABILITY_OF_PRECIPITATION, "precip"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ForecastFx, "wind_direction"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_WIND_DIRECT_DEGREE, "wind_direction_degree"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_WIND_SPEED, "wind_speed"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIND_RATING, "wind_scale"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RAINFALL, "rainfall"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_HUMIDITY, "humidity"]
+ ]), "content");
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const Air_daily_content = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_AIR_DAILY);
+ this.appendValueInput('day')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_START);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY_DAY + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMETER_FREE, "none"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_AIRQUAILTY, "api"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_PM25, "pm25"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_PM10, "pm10"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_so2, "so2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_no2, "no2"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_co, "co"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_o3, "o3"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIR_NOW_quailty, "quality"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GPS_DATE, "date"]
+ ]), "content");
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const Geo_sun_content = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_GEO_SUN);
+ this.appendValueInput('day')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_START);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY_DAY + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMETER_FREE, "none"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GPS_DATE, "date"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SUNRISE_T, "sunrise"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SUNSET_T, "sunset"]
+ ]), "content");
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const Geo_moon_content = {
+ init: function () {
+ this.setColour(WEATHER_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_GEO_MOON);
+ this.appendValueInput('day')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_START);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY_DAY + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMETER_FREE, "none"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GPS_DATE, "date"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLT_MOONRISE_T, "rise"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOONSET_T, "set"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOON_FRACTION, "fraction"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOON_PHASE, "phase"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MOON_PHASE_NAME, "phase_name"]
+ ]), "content");
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+/***/ }),
+
+/***/ "../micropython/export.js":
+/*!********************************!*\
+ !*** ../micropython/export.js ***!
+ \********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ MicroPythonAIBlocks: () => (/* reexport module object */ _blocks_ai__WEBPACK_IMPORTED_MODULE_4__),
+/* harmony export */ MicroPythonAIGenerators: () => (/* reexport module object */ _generators_ai__WEBPACK_IMPORTED_MODULE_30__),
+/* harmony export */ MicroPythonAISensorBlocks: () => (/* reexport module object */ _blocks_ai_sensor__WEBPACK_IMPORTED_MODULE_3__),
+/* harmony export */ MicroPythonAISensorGenerators: () => (/* reexport module object */ _generators_ai_sensor__WEBPACK_IMPORTED_MODULE_29__),
+/* harmony export */ MicroPythonActuatorBlocks: () => (/* reexport module object */ _blocks_actuator__WEBPACK_IMPORTED_MODULE_2__),
+/* harmony export */ MicroPythonActuatorExternBlocks: () => (/* reexport module object */ _blocks_actuator_extern__WEBPACK_IMPORTED_MODULE_0__),
+/* harmony export */ MicroPythonActuatorExternGenerators: () => (/* reexport module object */ _generators_actuator_extern__WEBPACK_IMPORTED_MODULE_26__),
+/* harmony export */ MicroPythonActuatorGenerators: () => (/* reexport module object */ _generators_actuator__WEBPACK_IMPORTED_MODULE_28__),
+/* harmony export */ MicroPythonActuatorOnBoardBlocks: () => (/* reexport module object */ _blocks_actuator_onboard__WEBPACK_IMPORTED_MODULE_1__),
+/* harmony export */ MicroPythonActuatorOnBoardGenerators: () => (/* reexport module object */ _generators_actuator_onboard__WEBPACK_IMPORTED_MODULE_27__),
+/* harmony export */ MicroPythonBlynkBlocks: () => (/* reexport module object */ _blocks_blynk__WEBPACK_IMPORTED_MODULE_5__),
+/* harmony export */ MicroPythonBlynkGenerators: () => (/* reexport module object */ _generators_blynk__WEBPACK_IMPORTED_MODULE_31__),
+/* harmony export */ MicroPythonCCG1Blocks: () => (/* reexport module object */ _blocks_cc_g1__WEBPACK_IMPORTED_MODULE_6__),
+/* harmony export */ MicroPythonCCG1Generators: () => (/* reexport module object */ _generators_cc_g1__WEBPACK_IMPORTED_MODULE_32__),
+/* harmony export */ MicroPythonCEGOBlocks: () => (/* reexport module object */ _blocks_ce_go__WEBPACK_IMPORTED_MODULE_7__),
+/* harmony export */ MicroPythonCEGOGenerators: () => (/* reexport module object */ _generators_ce_go__WEBPACK_IMPORTED_MODULE_33__),
+/* harmony export */ MicroPythonCommunicateBlocks: () => (/* reexport module object */ _blocks_communicate__WEBPACK_IMPORTED_MODULE_8__),
+/* harmony export */ MicroPythonCommunicateGenerators: () => (/* reexport module object */ _generators_communicate__WEBPACK_IMPORTED_MODULE_34__),
+/* harmony export */ MicroPythonControlBlocks: () => (/* reexport module object */ _blocks_control__WEBPACK_IMPORTED_MODULE_9__),
+/* harmony export */ MicroPythonControlGenerators: () => (/* reexport module object */ _generators_control__WEBPACK_IMPORTED_MODULE_35__),
+/* harmony export */ MicroPythonDisplayBlocks: () => (/* reexport module object */ _blocks_display__WEBPACK_IMPORTED_MODULE_12__),
+/* harmony export */ MicroPythonDisplayExternBlocks: () => (/* reexport module object */ _blocks_display_extern__WEBPACK_IMPORTED_MODULE_10__),
+/* harmony export */ MicroPythonDisplayExternGenerators: () => (/* reexport module object */ _generators_display_extern__WEBPACK_IMPORTED_MODULE_36__),
+/* harmony export */ MicroPythonDisplayGenerators: () => (/* reexport module object */ _generators_display__WEBPACK_IMPORTED_MODULE_38__),
+/* harmony export */ MicroPythonDisplayOnBoardBlocks: () => (/* reexport module object */ _blocks_display_onboard__WEBPACK_IMPORTED_MODULE_11__),
+/* harmony export */ MicroPythonDisplayOnBoardGenerators: () => (/* reexport module object */ _generators_display_onboard__WEBPACK_IMPORTED_MODULE_37__),
+/* harmony export */ MicroPythonFactoryBlocks: () => (/* reexport module object */ _blocks_factory__WEBPACK_IMPORTED_MODULE_13__),
+/* harmony export */ MicroPythonFactoryGenerators: () => (/* reexport module object */ _generators_factory__WEBPACK_IMPORTED_MODULE_39__),
+/* harmony export */ MicroPythonInputBlocks: () => (/* reexport module object */ _blocks_inout__WEBPACK_IMPORTED_MODULE_14__),
+/* harmony export */ MicroPythonInputGenerators: () => (/* reexport module object */ _generators_inout__WEBPACK_IMPORTED_MODULE_40__),
+/* harmony export */ MicroPythonIotBlocks: () => (/* reexport module object */ _blocks_iot__WEBPACK_IMPORTED_MODULE_15__),
+/* harmony export */ MicroPythonIotGenerators: () => (/* reexport module object */ _generators_iot__WEBPACK_IMPORTED_MODULE_41__),
+/* harmony export */ MicroPythonNetworkBlocks: () => (/* reexport module object */ _blocks_network__WEBPACK_IMPORTED_MODULE_16__),
+/* harmony export */ MicroPythonNetworkGenerators: () => (/* reexport module object */ _generators_network__WEBPACK_IMPORTED_MODULE_42__),
+/* harmony export */ MicroPythonNovaG1Blocks: () => (/* reexport module object */ _blocks_nova_g1__WEBPACK_IMPORTED_MODULE_17__),
+/* harmony export */ MicroPythonNovaG1Generators: () => (/* reexport module object */ _generators_nova_g1__WEBPACK_IMPORTED_MODULE_43__),
+/* harmony export */ MicroPythonPeG1Blocks: () => (/* reexport module object */ _blocks_pe_g1__WEBPACK_IMPORTED_MODULE_18__),
+/* harmony export */ MicroPythonPeG1Generators: () => (/* reexport module object */ _generators_pe_g1__WEBPACK_IMPORTED_MODULE_44__),
+/* harmony export */ MicroPythonPinsBlocks: () => (/* reexport module object */ _blocks_pins__WEBPACK_IMPORTED_MODULE_19__),
+/* harmony export */ MicroPythonPinsGenerators: () => (/* reexport module object */ _generators_pins__WEBPACK_IMPORTED_MODULE_45__),
+/* harmony export */ MicroPythonSensorBlocks: () => (/* reexport module object */ _blocks_sensor__WEBPACK_IMPORTED_MODULE_22__),
+/* harmony export */ MicroPythonSensorExternBlocks: () => (/* reexport module object */ _blocks_sensor_extern__WEBPACK_IMPORTED_MODULE_20__),
+/* harmony export */ MicroPythonSensorExternGenerators: () => (/* reexport module object */ _generators_sensor_extern__WEBPACK_IMPORTED_MODULE_46__),
+/* harmony export */ MicroPythonSensorGenerators: () => (/* reexport module object */ _generators_sensor__WEBPACK_IMPORTED_MODULE_48__),
+/* harmony export */ MicroPythonSensorOnBoardBlocks: () => (/* reexport module object */ _blocks_sensor_onboard__WEBPACK_IMPORTED_MODULE_21__),
+/* harmony export */ MicroPythonSensorOnBoardGenerators: () => (/* reexport module object */ _generators_sensor_onboard__WEBPACK_IMPORTED_MODULE_47__),
+/* harmony export */ MicroPythonSerialBlocks: () => (/* reexport module object */ _blocks_serial__WEBPACK_IMPORTED_MODULE_23__),
+/* harmony export */ MicroPythonSerialGenerators: () => (/* reexport module object */ _generators_serial__WEBPACK_IMPORTED_MODULE_49__),
+/* harmony export */ MicroPythonSystemBlocks: () => (/* reexport module object */ _blocks_system__WEBPACK_IMPORTED_MODULE_24__),
+/* harmony export */ MicroPythonSystemGenerators: () => (/* reexport module object */ _generators_system__WEBPACK_IMPORTED_MODULE_50__),
+/* harmony export */ MicroPythonWeatherBlocks: () => (/* reexport module object */ _blocks_weather__WEBPACK_IMPORTED_MODULE_25__),
+/* harmony export */ MicroPythonWeatherGenerators: () => (/* reexport module object */ _generators_weather__WEBPACK_IMPORTED_MODULE_51__)
+/* harmony export */ });
+/* harmony import */ var _blocks_actuator_extern__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./blocks/actuator_extern */ "../micropython/blocks/actuator_extern.js");
+/* harmony import */ var _blocks_actuator_onboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./blocks/actuator_onboard */ "../micropython/blocks/actuator_onboard.js");
+/* harmony import */ var _blocks_actuator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blocks/actuator */ "../micropython/blocks/actuator.js");
+/* harmony import */ var _blocks_ai_sensor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./blocks/ai_sensor */ "../micropython/blocks/ai_sensor.js");
+/* harmony import */ var _blocks_ai__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./blocks/ai */ "../micropython/blocks/ai.js");
+/* harmony import */ var _blocks_blynk__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./blocks/blynk */ "../micropython/blocks/blynk.js");
+/* harmony import */ var _blocks_cc_g1__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./blocks/cc_g1 */ "../micropython/blocks/cc_g1.js");
+/* harmony import */ var _blocks_ce_go__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./blocks/ce_go */ "../micropython/blocks/ce_go.js");
+/* harmony import */ var _blocks_communicate__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./blocks/communicate */ "../micropython/blocks/communicate.js");
+/* harmony import */ var _blocks_control__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./blocks/control */ "../micropython/blocks/control.js");
+/* harmony import */ var _blocks_display_extern__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./blocks/display_extern */ "../micropython/blocks/display_extern.js");
+/* harmony import */ var _blocks_display_onboard__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./blocks/display_onboard */ "../micropython/blocks/display_onboard.js");
+/* harmony import */ var _blocks_display__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./blocks/display */ "../micropython/blocks/display.js");
+/* harmony import */ var _blocks_factory__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./blocks/factory */ "../micropython/blocks/factory.js");
+/* harmony import */ var _blocks_inout__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./blocks/inout */ "../micropython/blocks/inout.js");
+/* harmony import */ var _blocks_iot__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./blocks/iot */ "../micropython/blocks/iot.js");
+/* harmony import */ var _blocks_network__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./blocks/network */ "../micropython/blocks/network.js");
+/* harmony import */ var _blocks_nova_g1__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./blocks/nova_g1 */ "../micropython/blocks/nova_g1.js");
+/* harmony import */ var _blocks_pe_g1__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./blocks/pe_g1 */ "../micropython/blocks/pe_g1.js");
+/* harmony import */ var _blocks_pins__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./blocks/pins */ "../micropython/blocks/pins.js");
+/* harmony import */ var _blocks_sensor_extern__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./blocks/sensor_extern */ "../micropython/blocks/sensor_extern.js");
+/* harmony import */ var _blocks_sensor_onboard__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./blocks/sensor_onboard */ "../micropython/blocks/sensor_onboard.js");
+/* harmony import */ var _blocks_sensor__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./blocks/sensor */ "../micropython/blocks/sensor.js");
+/* harmony import */ var _blocks_serial__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./blocks/serial */ "../micropython/blocks/serial.js");
+/* harmony import */ var _blocks_system__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./blocks/system */ "../micropython/blocks/system.js");
+/* harmony import */ var _blocks_weather__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./blocks/weather */ "../micropython/blocks/weather.js");
+/* harmony import */ var _generators_actuator_extern__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./generators/actuator_extern */ "../micropython/generators/actuator_extern.js");
+/* harmony import */ var _generators_actuator_onboard__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./generators/actuator_onboard */ "../micropython/generators/actuator_onboard.js");
+/* harmony import */ var _generators_actuator__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./generators/actuator */ "../micropython/generators/actuator.js");
+/* harmony import */ var _generators_ai_sensor__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./generators/ai_sensor */ "../micropython/generators/ai_sensor.js");
+/* harmony import */ var _generators_ai__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./generators/ai */ "../micropython/generators/ai.js");
+/* harmony import */ var _generators_blynk__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./generators/blynk */ "../micropython/generators/blynk.js");
+/* harmony import */ var _generators_cc_g1__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./generators/cc_g1 */ "../micropython/generators/cc_g1.js");
+/* harmony import */ var _generators_ce_go__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./generators/ce_go */ "../micropython/generators/ce_go.js");
+/* harmony import */ var _generators_communicate__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./generators/communicate */ "../micropython/generators/communicate.js");
+/* harmony import */ var _generators_control__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./generators/control */ "../micropython/generators/control.js");
+/* harmony import */ var _generators_display_extern__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./generators/display_extern */ "../micropython/generators/display_extern.js");
+/* harmony import */ var _generators_display_onboard__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./generators/display_onboard */ "../micropython/generators/display_onboard.js");
+/* harmony import */ var _generators_display__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./generators/display */ "../micropython/generators/display.js");
+/* harmony import */ var _generators_factory__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./generators/factory */ "../micropython/generators/factory.js");
+/* harmony import */ var _generators_inout__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./generators/inout */ "../micropython/generators/inout.js");
+/* harmony import */ var _generators_iot__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./generators/iot */ "../micropython/generators/iot.js");
+/* harmony import */ var _generators_network__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./generators/network */ "../micropython/generators/network.js");
+/* harmony import */ var _generators_nova_g1__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./generators/nova_g1 */ "../micropython/generators/nova_g1.js");
+/* harmony import */ var _generators_pe_g1__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./generators/pe_g1 */ "../micropython/generators/pe_g1.js");
+/* harmony import */ var _generators_pins__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./generators/pins */ "../micropython/generators/pins.js");
+/* harmony import */ var _generators_sensor_extern__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./generators/sensor_extern */ "../micropython/generators/sensor_extern.js");
+/* harmony import */ var _generators_sensor_onboard__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./generators/sensor_onboard */ "../micropython/generators/sensor_onboard.js");
+/* harmony import */ var _generators_sensor__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./generators/sensor */ "../micropython/generators/sensor.js");
+/* harmony import */ var _generators_serial__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./generators/serial */ "../micropython/generators/serial.js");
+/* harmony import */ var _generators_system__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./generators/system */ "../micropython/generators/system.js");
+/* harmony import */ var _generators_weather__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./generators/weather */ "../micropython/generators/weather.js");
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/***/ }),
+
+/***/ "../micropython/generators/actuator.js":
+/*!*********************************************!*\
+ !*** ../micropython/generators/actuator.js ***!
+ \*********************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ actuator_extern_get_led_bright: () => (/* binding */ actuator_extern_get_led_bright),
+/* harmony export */ actuator_extern_led_bright: () => (/* binding */ actuator_extern_led_bright),
+/* harmony export */ actuator_extern_led_brightness: () => (/* binding */ actuator_extern_led_brightness),
+/* harmony export */ actuator_get_led_bright: () => (/* binding */ actuator_get_led_bright),
+/* harmony export */ actuator_led_bright: () => (/* binding */ actuator_led_bright),
+/* harmony export */ actuator_led_brightness: () => (/* binding */ actuator_led_brightness),
+/* harmony export */ actuator_neopixel_init: () => (/* binding */ actuator_neopixel_init),
+/* harmony export */ actuator_neopixel_rgb: () => (/* binding */ actuator_neopixel_rgb),
+/* harmony export */ actuator_neopixel_write: () => (/* binding */ actuator_neopixel_write),
+/* harmony export */ actuator_onboard_neopixel_rgb: () => (/* binding */ actuator_onboard_neopixel_rgb),
+/* harmony export */ actuator_onboard_neopixel_rgb_all: () => (/* binding */ actuator_onboard_neopixel_rgb_all),
+/* harmony export */ actuator_onboard_neopixel_write: () => (/* binding */ actuator_onboard_neopixel_write),
+/* harmony export */ esp32_mixgo_music_play_list_show: () => (/* binding */ esp32_mixgo_music_play_list_show),
+/* harmony export */ esp32_music_get_tempo: () => (/* binding */ esp32_music_get_tempo),
+/* harmony export */ esp32_music_pitch: () => (/* binding */ esp32_music_pitch),
+/* harmony export */ esp32_music_pitch_with_time: () => (/* binding */ esp32_music_pitch_with_time),
+/* harmony export */ esp32_music_play_list: () => (/* binding */ esp32_music_play_list),
+/* harmony export */ esp32_music_reset: () => (/* binding */ esp32_music_reset),
+/* harmony export */ esp32_music_set_tempo: () => (/* binding */ esp32_music_set_tempo),
+/* harmony export */ esp32_music_stop: () => (/* binding */ esp32_music_stop),
+/* harmony export */ esp32_onboard_music_pitch: () => (/* binding */ esp32_onboard_music_pitch),
+/* harmony export */ esp32_onboard_music_pitch_with_time: () => (/* binding */ esp32_onboard_music_pitch_with_time),
+/* harmony export */ esp32_onboard_music_play_list: () => (/* binding */ esp32_onboard_music_play_list),
+/* harmony export */ esp32_onboard_music_stop: () => (/* binding */ esp32_onboard_music_stop),
+/* harmony export */ get_led_bright: () => (/* binding */ get_led_bright),
+/* harmony export */ led_brightness: () => (/* binding */ led_brightness),
+/* harmony export */ led_light: () => (/* binding */ led_light),
+/* harmony export */ ledswitch: () => (/* binding */ ledswitch),
+/* harmony export */ number: () => (/* binding */ number),
+/* harmony export */ servo_move: () => (/* binding */ servo_move)
+/* harmony export */ });
+const esp32_music_pitch = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var number_pitch = generator.valueToCode(this, 'pitch', generator.ORDER_ATOMIC);
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'music.pitch(' + pin + ', ' + number_pitch + ')\n';
+ return code;
+}
+
+const esp32_music_pitch_with_time = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var number_pitch = generator.valueToCode(this, 'pitch', generator.ORDER_ATOMIC);
+ var number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'music.pitch_time(' + pin + ', ' + number_pitch + ', ' + number_time + ')\n';
+ return code;
+}
+
+const esp32_music_stop = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'music.stop(' + pin + ')\n';
+ return code;
+}
+
+const esp32_music_set_tempo = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var bpm = generator.valueToCode(this, 'BPM', generator.ORDER_ASSIGNMENT);
+ var ticks = generator.valueToCode(this, 'TICKS', generator.ORDER_ASSIGNMENT);
+ var code = "music.set_tempo(" + ticks + ", " + bpm + ")\n";
+ return code;
+}
+
+const esp32_music_get_tempo = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var code = "music.get_tempo()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const esp32_onboard_music_pitch = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var number_pitch = generator.valueToCode(this, 'pitch', generator.ORDER_ATOMIC);
+ var code = 'music.pitch(' + number_pitch + ')\n';
+ return code;
+}
+
+const esp32_onboard_music_pitch_with_time = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var number_pitch = generator.valueToCode(this, 'pitch', generator.ORDER_ATOMIC);
+ var number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
+ var code = 'music.pitch_time(' + number_pitch + ', ' + number_time + ')\n';
+ return code;
+}
+
+const esp32_onboard_music_stop = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var code = 'music.stop(' + ')\n';
+ return code;
+}
+
+const esp32_onboard_music_play_list = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);
+ var code = "music.play(" + lst + ")\n";
+ return code;
+}
+
+const esp32_music_play_list = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ASSIGNMENT);
+ var code = "music.play(" + lst + ", " + pin + ")\n";
+ return code;
+}
+
+const esp32_mixgo_music_play_list_show = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ASSIGNMENT);
+ // var display = generator.valueToCode(this, 'DISPLAY', generator.ORDER_ASSIGNMENT);
+ var code = "music.play_show(" + lst + ", " + pin + ")\n";
+ return code;
+}
+
+const esp32_music_reset = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ return "music.reset()\n";
+}
+
+const servo_move = function (_, generator) {
+ generator.definitions_['import_servo'] = 'import servo';
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var value_degree = generator.valueToCode(this, 'DEGREE', generator.ORDER_ATOMIC);
+ var code = 'servo.servo_write_angle(' + dropdown_pin + ',' + value_degree + ')\n';
+ return code;
+}
+
+const number = function (_, generator) {
+ var code = this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ledswitch = function (_, generator) {
+ var code = this.getFieldValue('flag');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const actuator_extern_led_bright = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ // var bright = this.getFieldValue('bright');
+ var code = "mixgo.led(" + pin + ").setonoff(" + bright + ")\n";
+ return code;
+}
+
+const actuator_extern_get_led_bright = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = "mixgo.led(" + pin + ").getonoff(" + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const actuator_extern_led_brightness = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var code = 'mixgo.led(' + pin + ').setbrightness(' + flag + ')\n';
+ return code;
+}
+
+const actuator_led_bright = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ // var bright = this.getFieldValue('bright');
+ var code = "mixgo.led" + op + ".setonoff(" + bright + ")\n";
+ return code;
+}
+
+const actuator_get_led_bright = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ var code = "mixgo.led" + op + ".getonoff(" + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const actuator_led_brightness = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var code = 'mixgo.led' + op + '.setbrightness(' + flag + ')\n';
+ return code;
+}
+
+const actuator_neopixel_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var dropdown_rgbpin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var value_ledcount = generator.valueToCode(this, 'LEDCOUNT', generator.ORDER_ATOMIC);
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_neopixel'] = 'import neopixel';
+ var code = v + ' = neopixel.NeoPixel(machine.Pin(' + dropdown_rgbpin + '), ' + value_ledcount + ', timing = True)\n';
+ return code;
+}
+
+const actuator_neopixel_write = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_neopixel'] = 'import neopixel';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.write()\n';
+ return code;
+}
+
+const actuator_neopixel_rgb = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_neopixel'] = 'import neopixel';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
+ var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
+ var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
+ var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
+ var code = v + '[' + value_led + '] = (' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
+ return code;
+}
+
+const actuator_onboard_neopixel_write = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var code = 'mixgo.rgb.write()\n';
+ return code;
+}
+
+const actuator_onboard_neopixel_rgb = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
+ var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
+ var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
+ var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
+ var code = 'mixgo.rgb[' + value_led + '] = (' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
+ return code;
+}
+
+const actuator_onboard_neopixel_rgb_all = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
+ var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
+ var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
+ var code = 'mixgo.rgb.fill((' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + '))\n';
+ return code;
+}
+
+const led_light = actuator_led_bright;
+const get_led_bright = actuator_get_led_bright;
+const led_brightness = actuator_led_brightness;
+
+/***/ }),
+
+/***/ "../micropython/generators/actuator_extern.js":
+/*!****************************************************!*\
+ !*** ../micropython/generators/actuator_extern.js ***!
+ \****************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ PIN_init: () => (/* binding */ PIN_init),
+/* harmony export */ actuator_extern_get_led_bright: () => (/* binding */ actuator_extern_get_led_bright),
+/* harmony export */ actuator_extern_get_led_state: () => (/* binding */ actuator_extern_get_led_state),
+/* harmony export */ actuator_extern_led_bright: () => (/* binding */ actuator_extern_led_bright),
+/* harmony export */ actuator_extern_led_brightness: () => (/* binding */ actuator_extern_led_brightness),
+/* harmony export */ actuator_ms32006_dcmotor: () => (/* binding */ actuator_ms32006_dcmotor),
+/* harmony export */ actuator_ms32006_init: () => (/* binding */ actuator_ms32006_init),
+/* harmony export */ actuator_ms32006_stepper: () => (/* binding */ actuator_ms32006_stepper),
+/* harmony export */ actuator_neopixel_init: () => (/* binding */ actuator_neopixel_init),
+/* harmony export */ actuator_neopixel_rgb: () => (/* binding */ actuator_neopixel_rgb),
+/* harmony export */ actuator_neopixel_rgb_all: () => (/* binding */ actuator_neopixel_rgb_all),
+/* harmony export */ actuator_neopixel_write: () => (/* binding */ actuator_neopixel_write),
+/* harmony export */ actuator_use_uart_init: () => (/* binding */ actuator_use_uart_init),
+/* harmony export */ esp32_music_get_tempo_extern: () => (/* binding */ esp32_music_get_tempo_extern),
+/* harmony export */ esp32_music_pitch: () => (/* binding */ esp32_music_pitch),
+/* harmony export */ esp32_music_pitch_init: () => (/* binding */ esp32_music_pitch_init),
+/* harmony export */ esp32_music_pitch_with_time: () => (/* binding */ esp32_music_pitch_with_time),
+/* harmony export */ esp32_music_play_list: () => (/* binding */ esp32_music_play_list),
+/* harmony export */ esp32_music_reset_extern: () => (/* binding */ esp32_music_reset_extern),
+/* harmony export */ esp32_music_set_tempo_extern: () => (/* binding */ esp32_music_set_tempo_extern),
+/* harmony export */ esp32_music_stop: () => (/* binding */ esp32_music_stop),
+/* harmony export */ mixbot_actuator_extern_get_addr: () => (/* binding */ mixbot_actuator_extern_get_addr),
+/* harmony export */ mixbot_actuator_extern_set_addr: () => (/* binding */ mixbot_actuator_extern_set_addr),
+/* harmony export */ mixbot_addr_extern: () => (/* binding */ mixbot_addr_extern),
+/* harmony export */ parrot_PIN_init: () => (/* binding */ parrot_PIN_init),
+/* harmony export */ parrot_move_speed: () => (/* binding */ parrot_move_speed),
+/* harmony export */ pin_led_bright: () => (/* binding */ pin_led_bright),
+/* harmony export */ player_play_music: () => (/* binding */ player_play_music),
+/* harmony export */ player_set_mode: () => (/* binding */ player_set_mode),
+/* harmony export */ player_set_play: () => (/* binding */ player_set_play),
+/* harmony export */ player_set_volume: () => (/* binding */ player_set_volume),
+/* harmony export */ player_whether_stop: () => (/* binding */ player_whether_stop),
+/* harmony export */ robot_led_extern: () => (/* binding */ robot_led_extern),
+/* harmony export */ robot_led_extern_get_value: () => (/* binding */ robot_led_extern_get_value),
+/* harmony export */ robot_motor_extern: () => (/* binding */ robot_motor_extern),
+/* harmony export */ robot_motor_extern_get_speed: () => (/* binding */ robot_motor_extern_get_speed),
+/* harmony export */ robot_servo_extern_absolute_run: () => (/* binding */ robot_servo_extern_absolute_run),
+/* harmony export */ robot_servo_extern_get_status: () => (/* binding */ robot_servo_extern_get_status),
+/* harmony export */ robot_servo_extern_relative_continue: () => (/* binding */ robot_servo_extern_relative_continue),
+/* harmony export */ robot_servo_extern_relative_origin: () => (/* binding */ robot_servo_extern_relative_origin),
+/* harmony export */ robot_servo_extern_relative_run: () => (/* binding */ robot_servo_extern_relative_run),
+/* harmony export */ robot_servo_extern_stop: () => (/* binding */ robot_servo_extern_stop),
+/* harmony export */ robot_servo_extern_stop_mode: () => (/* binding */ robot_servo_extern_stop_mode),
+/* harmony export */ robot_traffic_light_extern: () => (/* binding */ robot_traffic_light_extern),
+/* harmony export */ servo_PIN_init: () => (/* binding */ servo_PIN_init),
+/* harmony export */ servo_get_angle: () => (/* binding */ servo_get_angle),
+/* harmony export */ servo_get_speed: () => (/* binding */ servo_get_speed),
+/* harmony export */ servo_init: () => (/* binding */ servo_init),
+/* harmony export */ servo_move: () => (/* binding */ servo_move),
+/* harmony export */ servo_move_angle: () => (/* binding */ servo_move_angle),
+/* harmony export */ servo_set_angle: () => (/* binding */ servo_set_angle),
+/* harmony export */ servo_set_speed: () => (/* binding */ servo_set_speed),
+/* harmony export */ servo_speed_360: () => (/* binding */ servo_speed_360),
+/* harmony export */ syn6288_builtin_voice: () => (/* binding */ syn6288_builtin_voice),
+/* harmony export */ syn6288_get_voice: () => (/* binding */ syn6288_get_voice),
+/* harmony export */ syn6288_set_voice: () => (/* binding */ syn6288_set_voice),
+/* harmony export */ syn6288_tts_play: () => (/* binding */ syn6288_tts_play)
+/* harmony export */ });
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const servo_init = function (_, generator) {
+ generator.definitions_['import_servo'] = 'import servo';
+ generator.definitions_['import_board'] = 'import board';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = v + ' = servo.Servo(board.' + dropdown_pin + ')\n';
+ return code;
+}
+
+const servo_speed_360 = function (_, generator) {
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var speed = generator.valueToCode(this, 'SPEED', generator.ORDER_ATOMIC);
+ var code = v + '.set_speed(' + speed + ')\n';
+ return code;
+}
+
+const servo_set_angle = function (_, generator) {
+ generator.definitions_['import_servo'] = 'import servo';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
+ var code = 'servo.servo180_angle(' + dropdown_pin + ',' + num + ')\n';
+ return code;
+}
+
+const servo_set_speed = function (_, generator) {
+ generator.definitions_['import_servo'] = 'import servo';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
+ var code = 'servo.servo360_speed(' + dropdown_pin + ',' + num + ')\n';
+ return code;
+}
+
+const servo_get_angle = function (_, generator) {
+ generator.definitions_['import_servo'] = 'import servo';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'servo.servo180_angle(' + dropdown_pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const servo_get_speed = function (_, generator) {
+ generator.definitions_['import_servo'] = 'import servo';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'servo.servo360_speed(' + dropdown_pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const actuator_ms32006_init = function (_, generator) {
+ generator.definitions_['import ms32006'] = 'import ms32006';
+ var address = this.getFieldValue('mode')
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var sub1 = generator.valueToCode(this, 'SUB1', generator.ORDER_ATOMIC);
+ var code = sub + '=ms32006.MS32006(' + sub1 + ',addr=' + address + ')\n';
+ return code;
+}
+
+const actuator_ms32006_dcmotor = function (_, generator) {
+ generator.definitions_['import ms32006'] = 'import ms32006';
+ var direction = this.getFieldValue('direction')
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ var code = sub + '.dc_motor(' + direction + ',' + speed + ')\n';
+ return code;
+}
+
+const actuator_ms32006_stepper = function (_, generator) {
+ generator.definitions_['import ms32006'] = 'import ms32006';
+ var mode = this.getFieldValue('mode')
+ var direction = this.getFieldValue('direction')
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ var steps = generator.valueToCode(this, 'steps', generator.ORDER_ATOMIC);
+ var code = sub + '.move(' + mode + ',' + direction + ',' + speed + ',' + steps + ')\n';
+ return code;
+}
+
+const esp32_music_pitch_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var dropdown_rgbpin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ generator.definitions_['import_music'] = 'import music';
+ var code = v + ' = music.MIDI(' + dropdown_rgbpin + ')\n';
+ return code;
+}
+
+const esp32_music_pitch = function (block, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);
+ var code = v + '.pitch(' + number_pitch + ')\n';
+ return code;
+}
+
+const esp32_music_pitch_with_time = function (block, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);
+ var number_time = generator.valueToCode(block, 'time', generator.ORDER_ATOMIC);
+ var code = v + '.pitch_time(' + number_pitch + ', ' + number_time + ')\n';
+ return code;
+}
+
+const esp32_music_stop = function (block, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.stop(' + ')\n';
+ return code;
+}
+
+const esp32_music_set_tempo_extern = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var bpm = generator.valueToCode(this, 'BPM', generator.ORDER_ASSIGNMENT);
+ var ticks = generator.valueToCode(this, 'TICKS', generator.ORDER_ASSIGNMENT);
+ var code = v + ".set_tempo(" + ticks + ", " + bpm + ")\n";
+ return code;
+}
+
+const esp32_music_get_tempo_extern = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + ".get_tempo()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const esp32_music_play_list = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + ".play(" + v + '.' + lst + ")\n";
+ return code;
+}
+
+const esp32_music_reset_extern = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ return v + ".reset()\n";
+}
+
+const servo_move = function (_, generator) {
+ generator.definitions_['import_servo'] = 'import servo';
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var value_degree = generator.valueToCode(this, 'DEGREE', generator.ORDER_ATOMIC);
+ var code = 'servo.servo_write_angle(' + dropdown_pin + ',' + value_degree + ')\n';
+ return code;
+}
+
+const actuator_extern_led_bright = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ // var bright = this.getFieldValue('bright');
+ var code = "mixgo.LED(" + pin + ").setonoff(" + bright + ")\n";
+ return code;
+}
+
+const actuator_extern_get_led_bright = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = "mixgo.LED(" + pin + ").getbrightness(" + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const actuator_extern_get_led_state = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = "mixgo.LED(" + pin + ").getonoff(" + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const actuator_extern_led_brightness = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var code = 'mixgo.LED(' + pin + ').setbrightness(' + flag + ')\n';
+ return code;
+}
+
+const actuator_neopixel_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var dropdown_rgbpin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var value_ledcount = generator.valueToCode(this, 'LEDCOUNT', generator.ORDER_ATOMIC);
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_neopixel'] = 'import neopixel';
+ var code = v + ' = neopixel.NeoPixel(machine.Pin(' + dropdown_rgbpin + '), ' + value_ledcount + ')\n';
+ return code;
+}
+
+const actuator_neopixel_rgb_all = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
+ var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
+ var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
+ var code = v + '.fill((' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + '))\n';
+ return code;
+}
+
+const actuator_neopixel_write = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_neopixel'] = 'import neopixel';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.write()\n';
+ return code;
+}
+
+const actuator_neopixel_rgb = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_neopixel'] = 'import neopixel';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
+ var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
+ var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
+ var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
+ var code = v + '[' + value_led + '] = (' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
+ return code;
+}
+
+const actuator_use_uart_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var key2 = this.getFieldValue('key2');
+ if (key2=='SYN6288'){
+ generator.definitions_['import_syn6288'] = 'import syn6288';
+ var code = v + '=syn6288.SYN6288(' + key + ')\n';
+ return code;
+ }else if(key2=='NS9300'){
+ generator.definitions_['import_ns9300'] = 'import ns9300';
+ var code = v + '=ns9300.NS9300(' + key + ')\n';
+ return code;
+ }
+
+}
+
+const player_whether_stop = function(_,generator){
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = v+'.status('+key+')';
+ return [code,generator.ORDER_ATOMIC];
+}
+
+const player_set_play = function(_,generator){
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = v+'.control('+key+')\n';
+ return code;
+}
+
+const player_set_volume = function(_,generator){
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var vol = generator.valueToCode(this, 'volume', generator.ORDER_ATOMIC);
+ var code = v+'.volume('+vol+')\n';
+ return code;
+}
+
+const player_set_mode = function(_,generator){
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = v +'.mode('+key+')\n';
+ return code;
+}
+
+const player_play_music = function(_,generator){
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var s = generator.valueToCode(this, 'song', generator.ORDER_ATOMIC);
+ var code = v +'.'+key+'('+s+')\n';
+ return code;
+}
+
+const syn6288_set_voice = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var voice = generator.valueToCode(this, 'VOICE', generator.ORDER_ASSIGNMENT);
+ var code = v + ".volume(" + voice + ")\n";
+ return code;
+}
+
+const syn6288_get_voice = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + ".volume()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const syn6288_builtin_voice = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var mode = this.getFieldValue('mode');
+ var voice = generator.valueToCode(this, 'VOICE', generator.ORDER_ASSIGNMENT);
+ var code = v + ".hint_tones(" + voice + ',blocking=' + mode + ")\n";
+ return code;
+}
+
+const syn6288_tts_play = function (_, generator) {
+ generator.definitions_['import_music'] = 'import music';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var mode = this.getFieldValue('mode');
+ var voice = generator.valueToCode(this, 'VOICE', generator.ORDER_ASSIGNMENT);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = v + ".synthesis(" + data + ',music=' + voice + ',blocking=' + mode + ")\n";
+ return code;
+}
+
+//mixbot extern below:
+const mixbot_addr_extern = function (_, generator) {
+ var code = this.getFieldValue('PIN');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const robot_motor_extern = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_motor'] = 'from mixbot_ext import ext_motor';
+ var code = 'ext_motor.run(' + mode + ',' + speed + ")\n";
+ return code;
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_motor'] = 'ext_motor_left = i2cdevice.Motor(ext_i2c_left)';
+ var code = 'ext_motor_left.run(0,' + speed + ')\n';
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_motor'] = 'ext_motor_right = i2cdevice.Motor(ext_i2c_right)';
+ var code = 'ext_motor_right.run(0,' + speed + ')\n';
+ }
+ return code;
+ }
+}
+
+const robot_motor_extern_get_speed = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ if (version == 'mixbot') {
+ var code = 'ext_motor.run(' + mode + ")";
+ return [code, generator.ORDER_ATOMIC];
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_motor'] = 'ext_motor_left = i2cdevice.Motor(ext_i2c_left)';
+ var code = 'ext_motor_left.run()';
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_motor'] = 'ext_motor_right = i2cdevice.Motor(ext_i2c_right)';
+ var code = 'ext_motor_right.run()';
+ }
+ return [code, generator.ORDER_ATOMIC];
+ }
+}
+
+const robot_traffic_light_extern = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ var light = this.getFieldValue('light');
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_traffic'] = 'from mixbot_ext import ext_traffic';
+ var mode = this.getFieldValue('mode');
+ var light = this.getFieldValue('light');
+ var code = 'ext_traffic.led(' + mode + ',';
+ if (light == '0' || light == '1' || light == '2') { code += '0' + ',' }
+ else if (light == '3' || light == '4') { code += '1' + ',' }
+ else if (light == '5' || light == '6') { code += '2' + ',' }
+ if (light == '0') { code += '0' }
+ else if (light == '1' || light == '3' || light == '5') { code += '1' }
+ else if (light == '2' || light == '4' || light == '6') { code += '-1' }
+ code += ")\n";
+ return code;
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_traffic'] = 'ext_traffic_left = i2cdevice.Traffic_LED(ext_i2c_left)';
+ var code = 'ext_traffic_left.led(0,';
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_traffic'] = 'ext_traffic_right = i2cdevice.Traffic_LED(ext_i2c_right)';
+ var code = 'ext_traffic_right.led(0,';
+ }
+ if (light == '0' || light == '1' || light == '2') { code += '0' + ',' }
+ else if (light == '3' || light == '4') { code += '1' + ',' }
+ else if (light == '5' || light == '6') { code += '2' + ',' }
+ if (light == '0') { code += '0' }
+ else if (light == '1' || light == '3' || light == '5') { code += '1' }
+ else if (light == '2' || light == '4' || light == '6') { code += '-1' }
+ code += ")\n";
+ return code;
+ }
+}
+
+const robot_led_extern = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ var color = this.getFieldValue('color');
+ var value = generator.valueToCode(this, 'value', generator.ORDER_ATOMIC);
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_' + color + '_LED'] = 'from mixbot_ext import ' + color + '_LED';
+ var code = color + '_LED.brightness(' + mode + ',' + value + ")\n";
+ return code;
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_' + color + '_LED'] = 'ext_' + color + '_LED_left = i2cdevice.' + color + '_LED(ext_i2c_left)';
+ var code = 'ext_' + color + '_LED_left.brightness(' + '0,' + value + ")\n";
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_' + color + '_LED'] = 'ext_' + color + '_LED_right = i2cdevice.' + color + '_LED(ext_i2c_right)';
+ var code = 'ext_' + color + '_LED_right.brightness(' + '0,' + value + ")\n";
+ }
+ return code;
+ }
+}
+
+const robot_led_extern_get_value = function (_, generator) {
+ var mode = this.getFieldValue('mode');
+ var color = this.getFieldValue('color');
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_' + color + '_LED'] = 'from mixbot_ext import ' + color + '_LED';
+ var code = color + '_LED.brightness(' + mode + ")";
+ return [code, generator.ORDER_ATOMIC];
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_' + color + '_LED'] = 'ext_' + color + '_LED_left = i2cdevice.' + color + '_LED(ext_i2c_left)';
+ var code = 'ext_' + color + '_LED_left.brightness(0)';
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_' + color + '_LED'] = 'ext_' + color + '_LED_right = i2cdevice.' + color + '_LED(ext_i2c_right)';
+ var code = 'ext_' + color + '_LED_right.brightness(0)';
+ }
+ return [code, generator.ORDER_ATOMIC];
+ }
+}
+
+const robot_servo_extern_get_status = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ var status = this.getFieldValue('status');
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';
+ var code = 'ext_servo.state(' + mode + ")" + status;
+ return [code, generator.ORDER_ATOMIC];
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';
+ var code = 'ext_servo_left.state(0)' + status;
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';
+ var code = 'ext_servo_right.state(0)' + status;
+ }
+ return [code, generator.ORDER_ATOMIC];
+ }
+}
+
+const robot_servo_extern_stop_mode = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ var status = this.getFieldValue('status');
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';
+ var code = 'ext_servo.stop_mode(' + mode + "," + status + ")\n";
+ return code;
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';
+ var code = 'ext_servo_left.stop_mode(' + "0," + status + ")\n";
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';
+ var code = 'ext_servo_right.stop_mode(' + "0," + status + ")\n";
+ }
+ return code;
+ }
+}
+
+const robot_servo_extern_stop = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';
+ var code = 'ext_servo.stop(' + mode + ")\n";
+ return code;
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';
+ var code = 'ext_servo_left.stop(0)\n';
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';
+ var code = 'ext_servo_right.stop(0)\n';
+ }
+ return code;
+ }
+}
+
+const robot_servo_extern_absolute_run = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ var status = this.getFieldValue('status');
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ var direction = this.getFieldValue('direction');
+ var angle = generator.valueToCode(this, 'angle', generator.ORDER_ATOMIC);
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';
+ var code = 'ext_servo.absolute_run(' + mode + "," + status + "," + speed + "," + direction + "," + angle + ")\n";
+ return code;
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';
+ var code = 'ext_servo_left.absolute_run(' + "0," + status + "," + speed + "," + direction + "," + angle + ")\n";
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';
+ var code = 'ext_servo_right.absolute_run(' + "0," + status + "," + speed + "," + direction + "," + angle + ")\n";
+ }
+ return code;
+ }
+}
+
+const robot_servo_extern_relative_origin = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';
+ var code = 'ext_servo.relative_origin(' + mode + ")\n";
+ return code;
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';
+ var code = 'ext_servo_left.relative_origin(0)\n';
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';
+ var code = 'ext_servo_right.relative_origin(0)\n';
+ }
+ return code;
+ }
+}
+
+const robot_servo_extern_relative_run = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ var status = this.getFieldValue('status');
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ var angle = generator.valueToCode(this, 'angle', generator.ORDER_ATOMIC);
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';
+ var code = 'ext_servo.relative_run(' + mode + "," + status + "," + speed + "," + angle + ")\n";
+ return code;
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';
+ var code = 'ext_servo_left.relative_run(' + "0," + status + "," + speed + "," + angle + ")\n";
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';
+ var code = 'ext_servo_right.relative_run(' + "0," + status + "," + speed + "," + angle + ")\n";
+ }
+ return code;
+ }
+}
+
+const robot_servo_extern_relative_continue = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ var status = this.getFieldValue('status');
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ var direction = this.getFieldValue('direction');
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';
+ var code = 'ext_servo.relative_continue(' + mode + "," + status + "," + speed + "," + direction + ")\n";
+ return code;
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';
+ var code = 'ext_servo_left.relative_continue(' + "0," + status + "," + speed + "," + direction + ")\n";
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';
+ var code = 'ext_servo_right.relative_continue(' + "0," + status + "," + speed + "," + direction + ")\n";
+ }
+ return code;
+ }
+}
+
+const mixbot_actuator_extern_get_addr = function (_, generator) {
+ var name = this.getFieldValue('name');
+ generator.definitions_['import_mixbot_ext_' + name] = 'from mixbot_ext import ' + name;
+ var code = name + '.addr_get()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const mixbot_actuator_extern_set_addr = function (_, generator) {
+ var name = this.getFieldValue('name');
+ generator.definitions_['import_mixbot_ext_' + name] = 'from mixbot_ext import ' + name;
+ var oldaddr = generator.valueToCode(this, 'old', generator.ORDER_ATOMIC);
+ var newaddr = generator.valueToCode(this, 'new', generator.ORDER_ATOMIC);
+ var code = name + '.addr_set(' + oldaddr + ',' + newaddr + ')\n';
+ return code;
+}
+
+//educore
+const PIN_init = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + 'pin'] = 'from ' + version + ' import pin';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'pin('+ dropdown_pin +')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const pin_led_bright = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var pin = generator.valueToCode(this, 'pin', generator.ORDER_ATOMIC);
+ generator.definitions_['import_' + version + 'pin'] = 'from ' + version + ' import pin';
+ var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var code = pin+".write_digital(value=" + bright + ")\n";
+ return code;
+}
+
+const servo_PIN_init = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + 'servo'] = 'from ' + version + ' import servo';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'servo('+ dropdown_pin +')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const servo_move_angle = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + 'servo'] = 'from ' + version + ' import servo';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var a = generator.valueToCode(this, 'angle', generator.ORDER_ATOMIC);
+ var code = sub+'.angle('+ a +')\n';
+ return code;
+}
+
+const parrot_PIN_init = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + 'parrot'] = 'from ' + version + ' import parrot';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'parrot('+ dropdown_pin +')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const parrot_move_speed = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + 'parrot'] = 'from ' + version + ' import parrot';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ var code = sub+'.speed('+ speed +')\n';
+ return code;
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/actuator_onboard.js":
+/*!*****************************************************!*\
+ !*** ../micropython/generators/actuator_onboard.js ***!
+ \*****************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ actuator_dc_motor: () => (/* binding */ actuator_dc_motor),
+/* harmony export */ actuator_dc_motor_stop: () => (/* binding */ actuator_dc_motor_stop),
+/* harmony export */ actuator_get_led_bright: () => (/* binding */ actuator_get_led_bright),
+/* harmony export */ actuator_get_led_state: () => (/* binding */ actuator_get_led_state),
+/* harmony export */ actuator_led_bright: () => (/* binding */ actuator_led_bright),
+/* harmony export */ actuator_led_brightness: () => (/* binding */ actuator_led_brightness),
+/* harmony export */ actuator_mixbot_buzzer_on_off: () => (/* binding */ actuator_mixbot_buzzer_on_off),
+/* harmony export */ actuator_mixgo_nova_mic_get: () => (/* binding */ actuator_mixgo_nova_mic_get),
+/* harmony export */ actuator_mixgo_nova_mic_set: () => (/* binding */ actuator_mixgo_nova_mic_set),
+/* harmony export */ actuator_mixgo_nova_onboard_music_pitch: () => (/* binding */ actuator_mixgo_nova_onboard_music_pitch),
+/* harmony export */ actuator_mixgo_nova_onboard_music_stop: () => (/* binding */ actuator_mixgo_nova_onboard_music_stop),
+/* harmony export */ actuator_mixgo_nova_play_audio: () => (/* binding */ actuator_mixgo_nova_play_audio),
+/* harmony export */ actuator_mixgo_nova_play_online_audio: () => (/* binding */ actuator_mixgo_nova_play_online_audio),
+/* harmony export */ actuator_mixgo_nova_record_audio: () => (/* binding */ actuator_mixgo_nova_record_audio),
+/* harmony export */ actuator_mixgo_nova_voice_get: () => (/* binding */ actuator_mixgo_nova_voice_get),
+/* harmony export */ actuator_mixgo_nova_voice_set: () => (/* binding */ actuator_mixgo_nova_voice_set),
+/* harmony export */ actuator_mixgo_zero_led_color: () => (/* binding */ actuator_mixgo_zero_led_color),
+/* harmony export */ actuator_onboard_neopixel_rgb: () => (/* binding */ actuator_onboard_neopixel_rgb),
+/* harmony export */ actuator_onboard_neopixel_rgb_all: () => (/* binding */ actuator_onboard_neopixel_rgb_all),
+/* harmony export */ actuator_onboard_neopixel_rgb_show_all_chase: () => (/* binding */ actuator_onboard_neopixel_rgb_show_all_chase),
+/* harmony export */ actuator_onboard_neopixel_rgb_show_all_rainbow: () => (/* binding */ actuator_onboard_neopixel_rgb_show_all_rainbow),
+/* harmony export */ actuator_onboard_neopixel_write: () => (/* binding */ actuator_onboard_neopixel_write),
+/* harmony export */ actuator_stepper_keep: () => (/* binding */ actuator_stepper_keep),
+/* harmony export */ actuator_stepper_stop: () => (/* binding */ actuator_stepper_stop),
+/* harmony export */ analog_ble_keyboard_init: () => (/* binding */ analog_ble_keyboard_init),
+/* harmony export */ analog_ble_keyboard_input: () => (/* binding */ analog_ble_keyboard_input),
+/* harmony export */ analog_ble_keyboard_mouse_init: () => (/* binding */ analog_ble_keyboard_mouse_init),
+/* harmony export */ analog_ble_keyboard_mouse_input: () => (/* binding */ analog_ble_keyboard_mouse_input),
+/* harmony export */ analog_ble_keyboard_mouse_send_battery: () => (/* binding */ analog_ble_keyboard_mouse_send_battery),
+/* harmony export */ analog_ble_keyboard_mouse_str: () => (/* binding */ analog_ble_keyboard_mouse_str),
+/* harmony export */ analog_ble_keyboard_send_battery: () => (/* binding */ analog_ble_keyboard_send_battery),
+/* harmony export */ analog_ble_keyboard_str: () => (/* binding */ analog_ble_keyboard_str),
+/* harmony export */ analog_ble_mouse_init: () => (/* binding */ analog_ble_mouse_init),
+/* harmony export */ analog_ble_mouse_input: () => (/* binding */ analog_ble_mouse_input),
+/* harmony export */ analog_ble_mouse_keyboard_input: () => (/* binding */ analog_ble_mouse_keyboard_input),
+/* harmony export */ analog_ble_mouse_send_battery: () => (/* binding */ analog_ble_mouse_send_battery),
+/* harmony export */ analog_keyboard_input: () => (/* binding */ analog_keyboard_input),
+/* harmony export */ analog_keyboard_str: () => (/* binding */ analog_keyboard_str),
+/* harmony export */ analog_mouse_input: () => (/* binding */ analog_mouse_input),
+/* harmony export */ bitbot_motor: () => (/* binding */ bitbot_motor),
+/* harmony export */ bitbot_move: () => (/* binding */ bitbot_move),
+/* harmony export */ bitbot_stop: () => (/* binding */ bitbot_stop),
+/* harmony export */ ble_keyboard_connect: () => (/* binding */ ble_keyboard_connect),
+/* harmony export */ ble_keyboard_get_mac: () => (/* binding */ ble_keyboard_get_mac),
+/* harmony export */ ble_keyboard_mouse_connect: () => (/* binding */ ble_keyboard_mouse_connect),
+/* harmony export */ ble_keyboard_mouse_get_mac: () => (/* binding */ ble_keyboard_mouse_get_mac),
+/* harmony export */ ble_mouse_connect: () => (/* binding */ ble_mouse_connect),
+/* harmony export */ ble_mouse_get_mac: () => (/* binding */ ble_mouse_get_mac),
+/* harmony export */ cc_number: () => (/* binding */ cc_number),
+/* harmony export */ educore_ble_keyboard_input: () => (/* binding */ educore_ble_keyboard_input),
+/* harmony export */ educore_ble_sensor_connected: () => (/* binding */ educore_ble_sensor_connected),
+/* harmony export */ educore_ble_sensor_init: () => (/* binding */ educore_ble_sensor_init),
+/* harmony export */ educore_buzzer: () => (/* binding */ educore_buzzer),
+/* harmony export */ educore_buzzer_play_tone: () => (/* binding */ educore_buzzer_play_tone),
+/* harmony export */ educore_buzzer_play_tone_time: () => (/* binding */ educore_buzzer_play_tone_time),
+/* harmony export */ educore_buzzer_stop: () => (/* binding */ educore_buzzer_stop),
+/* harmony export */ educore_neopixel_clear: () => (/* binding */ educore_neopixel_clear),
+/* harmony export */ educore_neopixel_rgb: () => (/* binding */ educore_neopixel_rgb),
+/* harmony export */ educore_rgb_light: () => (/* binding */ educore_rgb_light),
+/* harmony export */ esp32_music_get_tempo: () => (/* binding */ esp32_music_get_tempo),
+/* harmony export */ esp32_music_reset: () => (/* binding */ esp32_music_reset),
+/* harmony export */ esp32_music_set_tempo: () => (/* binding */ esp32_music_set_tempo),
+/* harmony export */ esp32_onboard_music_pitch: () => (/* binding */ esp32_onboard_music_pitch),
+/* harmony export */ esp32_onboard_music_pitch_with_time: () => (/* binding */ esp32_onboard_music_pitch_with_time),
+/* harmony export */ esp32_onboard_music_play_list: () => (/* binding */ esp32_onboard_music_play_list),
+/* harmony export */ esp32_onboard_music_stop: () => (/* binding */ esp32_onboard_music_stop),
+/* harmony export */ general_key: () => (/* binding */ general_key),
+/* harmony export */ general_key_tuple: () => (/* binding */ general_key_tuple),
+/* harmony export */ get_power_output: () => (/* binding */ get_power_output),
+/* harmony export */ ledswitch: () => (/* binding */ ledswitch),
+/* harmony export */ mixbot_motor: () => (/* binding */ mixbot_motor),
+/* harmony export */ mixbot_motor_status: () => (/* binding */ mixbot_motor_status),
+/* harmony export */ mixbot_move: () => (/* binding */ mixbot_move),
+/* harmony export */ mixbot_stop: () => (/* binding */ mixbot_stop),
+/* harmony export */ mouse_key: () => (/* binding */ mouse_key),
+/* harmony export */ number: () => (/* binding */ number),
+/* harmony export */ rm_actuator_get_led_bright: () => (/* binding */ rm_actuator_get_led_bright),
+/* harmony export */ rm_actuator_get_led_state: () => (/* binding */ rm_actuator_get_led_state),
+/* harmony export */ rm_actuator_led_bright: () => (/* binding */ rm_actuator_led_bright),
+/* harmony export */ rm_actuator_led_brightness: () => (/* binding */ rm_actuator_led_brightness),
+/* harmony export */ rm_motor: () => (/* binding */ rm_motor),
+/* harmony export */ set_all_power_output: () => (/* binding */ set_all_power_output),
+/* harmony export */ set_power_output: () => (/* binding */ set_power_output),
+/* harmony export */ special_key: () => (/* binding */ special_key)
+/* harmony export */ });
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const esp32_music_set_tempo = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';
+ var bpm = generator.valueToCode(this, 'BPM', generator.ORDER_ASSIGNMENT);
+ var ticks = generator.valueToCode(this, 'TICKS', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_music.set_tempo(" + ticks + ", " + bpm + ")\n";
+ return code;
+}
+
+const esp32_music_get_tempo = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';
+ var code = "onboard_music.get_tempo()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const esp32_onboard_music_pitch = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';
+ var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);
+ var code = 'onboard_music.pitch(' + number_pitch + ')\n';
+ return code;
+}
+
+const esp32_onboard_music_pitch_with_time = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);
+ var number_time = generator.valueToCode(block, 'time', generator.ORDER_ATOMIC);
+ if (version == 'mixgo_zero') {
+ generator.definitions_['import_mixgo_zero_voice_spk_midi'] = "from mixgo_zero_voice import spk_midi";
+ var code = 'spk_midi.pitch_time(' + number_pitch + ', ' + number_time + ')\n';
+ } else if (version == 'mixgo_nova') {
+ generator.definitions_['import_mixgo_nova_voice_spk_midi'] = "from mixgo_nova_voice import spk_midi";
+ var code = 'spk_midi.pitch_time(' + number_pitch + ', ' + number_time + ')\n';
+ } else {
+ generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';
+ var code = 'onboard_music.pitch_time(' + number_pitch + ', ' + number_time + ')\n';
+ }
+ return code;
+}
+
+const esp32_onboard_music_stop = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';
+ var code = 'onboard_music.stop(' + ')\n';
+ return code;
+}
+
+const esp32_onboard_music_play_list = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);
+ if (version == 'mixgo_sant') {
+ generator.definitions_['import_mixgo_sant_onboard_music'] = "from mixgo_sant import onboard_music";
+ var code = "onboard_music.play(" + lst + ")\n";
+ } else if (version == 'mixgo_nova') {
+ generator.definitions_['import_mixgo_nova_voice_spk_midi'] = "from mixgo_nova_voice import spk_midi";
+ var code = "spk_midi.play(" + lst + ")\n";
+ } else {
+ generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';
+ var code = "onboard_music.play(" + lst + ")\n";
+ }
+ return code;
+}
+
+const esp32_music_reset = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';
+ return "onboard_music.reset()\n";
+}
+
+const number = function (_, generator) {
+ var code = this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ledswitch = function (_, generator) {
+ var code = this.getFieldValue('flag');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const actuator_led_bright = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';
+ var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var code = "onboard_led.setonoff(" + op + "," + bright + ")\n";
+ return code;
+}
+
+const actuator_get_led_bright = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';
+ var code = "onboard_led.getbrightness(" + op + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const actuator_get_led_state = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';
+ var code = "onboard_led.getonoff(" + op + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const actuator_led_brightness = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';
+ var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var code = "onboard_led.setbrightness(" + op + "," + flag + ")\n";
+ return code;
+}
+
+const actuator_mixgo_zero_led_color = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';
+ var color = this.getFieldValue('colorvalue');
+ var code = "onboard_led.setcolor(" + op + "," + color + ")\n";
+ return code;
+}
+
+const cc_number = function (_, generator) {
+ var code = this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const rm_actuator_led_bright = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var op = this.getFieldValue('color');
+ generator.definitions_['import_' + version + '_' + op + 'led'] = 'from ' + version + ' import ' + op + 'led';
+ var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var code = op + "led.setonoff(" + bright + ")\n";
+ return code;
+}
+
+const rm_actuator_get_led_bright = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var op = this.getFieldValue('color');
+ generator.definitions_['import_' + version + '_' + op + 'led'] = 'from ' + version + ' import ' + op + 'led';
+ var code = op + "led.getbrightness()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const rm_actuator_get_led_state = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var op = this.getFieldValue('color');
+ generator.definitions_['import_' + version + '_' + op + 'led'] = 'from ' + version + ' import ' + op + 'led';
+ var code = op + "led.getonoff()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const rm_actuator_led_brightness = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var op = this.getFieldValue('color');
+ generator.definitions_['import_' + version + '_' + op + 'led'] = 'from ' + version + ' import ' + op + 'led';
+ var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var code = op + "led.setbrightness(" + flag + ")\n";
+ return code;
+}
+
+const actuator_onboard_neopixel_write = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
+ var code = 'onboard_rgb.write()\n';
+ return code;
+}
+
+const actuator_onboard_neopixel_rgb = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
+ var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
+ var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
+ var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
+ var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
+ var code = 'onboard_rgb[' + value_led + '] = (' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
+ return code;
+}
+
+const actuator_onboard_neopixel_rgb_all = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
+ var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
+ var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
+ var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
+ var code = 'onboard_rgb.fill((' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + '))\n';
+ return code;
+}
+
+const actuator_onboard_neopixel_rgb_show_all_chase = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
+ var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
+ var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
+ var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
+ var number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
+ var code = 'onboard_rgb.color_chase(' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ', ' + number_time + ')\n';
+ return code;
+}
+
+const actuator_onboard_neopixel_rgb_show_all_rainbow = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
+ var number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
+ var code = 'onboard_rgb.rainbow_cycle(' + number_time + ')\n';
+ return code;
+}
+
+const rm_motor = function (_, generator) {
+ var wheel = this.getFieldValue('wheel');
+ generator.definitions_['import_rm_e1_motor' + wheel] = 'from rm_e1 import motor' + wheel;
+ var v = this.getFieldValue('direction');
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ var code = "motor" + wheel + '.motion("' + v + '",' + speed + ")\n";
+ return code;
+}
+
+//c3 motor onboard
+const actuator_stepper_keep = function (_, generator) {
+ var v = this.getFieldValue('VAR');
+ generator.definitions_['import_mixgocar_c3_car'] = 'from mixgocar_c3 import car';
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);
+ var code = 'car.motor_move("' + v + '",' + speed + ")\n";
+ return code;
+}
+
+const actuator_stepper_stop = function (_, generator) {
+ var v = this.getFieldValue('VAR');
+ generator.definitions_['import_mixgocar_c3_car'] = 'from mixgocar_c3 import car';
+ var code = 'car.motor_move("' + v + '"' + ")\n";
+ return code;
+}
+
+const actuator_dc_motor = function (_, generator) {
+ var wheel = this.getFieldValue('wheel');
+ generator.definitions_['import_mixgocar_c3_car'] = 'from mixgocar_c3 import car';
+ var v = this.getFieldValue('direction');
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ var code = "car.motor(car.MOTO_" + wheel + ',"' + v + '",' + speed + ")\n";
+ return code;
+}
+
+const actuator_dc_motor_stop = function (_, generator) {
+ var wheel = this.getFieldValue('wheel');
+ generator.definitions_['import_mixgocar_c3_car'] = 'from mixgocar_c3 import car';
+ var v = this.getFieldValue('direction');
+ var code = "car.motor(car.MOTO_" + wheel + ',"' + v + '"' + ")\n";
+ return code;
+}
+
+//mixbot onboard_motor below:
+
+const mixbot_motor_status = function (_, generator) {
+ generator.definitions_['import_mixbot_motor'] = 'from mixbot import motor';
+ var code = 'motor.status()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const mixbot_move = function (_, generator) {
+ var v = this.getFieldValue('VAR');
+ var mode = this.getFieldValue('mode');
+ generator.definitions_['import_mixbot_motor'] = 'from mixbot import motor';
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);
+ var code = 'motor.move("' + v + '",motor.' + mode + '_MODE,' + speed + ")\n";
+ return code;
+}
+
+const mixbot_stop = function (_, generator) {
+ var v = this.getFieldValue('VAR');
+ generator.definitions_['import_mixbot_motor'] = 'from mixbot import motor';
+ if (v == 'N') {
+ var code = 'motor.move("N",motor.STOP_MODE)\n'
+ } else if (v == 'P') {
+ var code = 'motor.move("P",motor.BRAKE_MODE)\n'
+ }
+ return code;
+}
+
+const mixbot_motor = function (_, generator) {
+ var wheel = this.getFieldValue('wheel');
+ generator.definitions_['import_mixbot_motor'] = 'from mixbot import motor';
+ var mode = this.getFieldValue('mode');
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ var code = 'motor.run(' + wheel + ',motor.' + mode + '_MODE,' + speed + ")\n";
+ return code;
+}
+
+const actuator_mixbot_buzzer_on_off = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_spk_en'] = 'from ' + version + ' import spk_en';
+ var op = this.getFieldValue('on_off');
+ var code = "spk_en.value(" + op + ")\n";
+ return code;
+}
+
+//bitbot onboard_motor below:
+const bitbot_move = function (_, generator) {
+ var v = this.getFieldValue('VAR');
+ generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);
+ var code = 'onboard_bot51.move("' + v + '",' + speed + ")\n";
+ return code;
+}
+
+const bitbot_stop = function (_, generator) {
+ var v = this.getFieldValue('VAR');
+ generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';
+ var code = 'onboard_bot51.move("' + v + '"' + ")\n";
+ return code;
+}
+
+const bitbot_motor = function (_, generator) {
+ var wheel = this.getFieldValue('wheel');
+ var direction = this.getFieldValue('direction');
+ generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ var code = 'onboard_bot51.motor(' + wheel + ',"' + direction + '",' + speed + ")\n";
+ return code;
+}
+
+const actuator_mixgo_nova_mic_set = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'mixgo_zero') {
+ generator.definitions_['import_mixgo_zero_voice_ob_code'] = "from mixgo_zero_voice import ob_code";
+ } else {
+ generator.definitions_['import_mixgo_nova_voice_ob_code'] = "from mixgo_nova_voice import ob_code";
+ }
+
+ var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var code = "ob_code.mic_volume(" + bright + ")\n";
+ return code;
+}
+
+const actuator_mixgo_nova_mic_get = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'mixgo_zero') {
+ generator.definitions_['import_mixgo_zero_voice_ob_code'] = "from mixgo_zero_voice import ob_code";
+ } else {
+ generator.definitions_['import_mixgo_nova_voice_ob_code'] = "from mixgo_nova_voice import ob_code";
+ }
+ var code = "ob_code.mic_volume()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const actuator_mixgo_nova_voice_set = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'mixgo_zero') {
+ generator.definitions_['import_mixgo_zero_voice_ob_code'] = "from mixgo_zero_voice import ob_code";
+ } else {
+ generator.definitions_['import_mixgo_nova_voice_ob_code'] = "from mixgo_nova_voice import ob_code";
+ }
+ var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var code = "ob_code.voice_volume(" + bright + ")\n";
+ return code;
+}
+
+const actuator_mixgo_nova_voice_get = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'mixgo_zero') {
+ generator.definitions_['import_mixgo_zero_voice_ob_code'] = "from mixgo_zero_voice import ob_code";
+ } else {
+ generator.definitions_['import_mixgo_nova_voice_ob_code'] = "from mixgo_nova_voice import ob_code";
+ }
+ var code = "ob_code.voice_volume()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const actuator_mixgo_nova_record_audio = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'mixgo_zero') {
+ generator.definitions_['import_mixgo_zero_voice_record_audio'] = "from mixgo_zero_voice import record_audio";
+ } else {
+ generator.definitions_['import_mixgo_nova_voice_record_audio'] = "from mixgo_nova_voice import record_audio";
+ }
+ var path = generator.valueToCode(this, 'PATH', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'TIME', generator.ORDER_ASSIGNMENT);
+ var code = "record_audio(" + path + ", " + time + ")\n";
+ return code;
+}
+
+const actuator_mixgo_nova_play_audio = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'mixgo_zero') {
+ generator.definitions_['import_mixgo_zero_voice_play_audio'] = "from mixgo_zero_voice import play_audio";
+ } else {
+ generator.definitions_['import_mixgo_nova_voice_play_audio'] = "from mixgo_nova_voice import play_audio";
+ }
+ var path = generator.valueToCode(this, 'PATH', generator.ORDER_ASSIGNMENT);
+ var code = "play_audio(" + path + ")\n";
+ return code;
+}
+
+const actuator_mixgo_nova_play_online_audio = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ if (version == 'mixgo_zero') {
+ generator.definitions_['import_mixgo_zero_voice_play_audio_url'] = "from mixgo_zero_voice import play_audio_url";
+ } else {
+ generator.definitions_['import_mixgo_nova_voice_play_audio_url'] = "from mixgo_nova_voice import play_audio_url";
+ }
+ var path = generator.valueToCode(this, 'PATH', generator.ORDER_ASSIGNMENT);
+ var code = "play_audio_url(" + path + ")\n";
+ return code;
+}
+
+const actuator_mixgo_nova_onboard_music_pitch = function (block, generator) {
+ generator.definitions_['import_mixgo_nova_voice_spk_midi'] = "from mixgo_nova_voice import spk_midi";
+ var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);
+ var code = 'spk_midi.pitch(' + number_pitch + ')\n';
+ return code;
+}
+
+const actuator_mixgo_nova_onboard_music_stop = function (block, generator) {
+ generator.definitions_['import_mixgo_nova_voice_spk_midi'] = "from mixgo_nova_voice import spk_midi";
+ var code = 'spk_midi.stop(' + ')\n';
+ return code;
+}
+
+const set_power_output = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ var index = this.getFieldValue('index');
+ var duty = generator.valueToCode(this, 'duty', generator.ORDER_ATOMIC);
+ generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
+ var code = 'onboard_bot.usben(' + index + ',' + duty + ')\n';
+ return code;
+}
+
+const get_power_output = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ var index = this.getFieldValue('index');
+ generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
+ var code = 'onboard_bot.usben(' + index + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const set_all_power_output = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ var duty = generator.valueToCode(this, 'duty', generator.ORDER_ATOMIC);
+ generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
+ var code = 'onboard_bot.usben(freq = ' + duty + ')\n';
+ return code;
+}
+
+const analog_keyboard_input = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var sp = generator.valueToCode(this, 'special', generator.ORDER_ATOMIC);
+ var ge = generator.valueToCode(this, 'general', generator.ORDER_ATOMIC);
+ var re = this.getFieldValue('release');
+ generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
+ var code = "onboard_bot.hid_keyboard(" + sp + "," + ge + "," + re + ")\n";
+ return code;
+}
+
+const special_key = function (_, generator) {
+ var code = this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const general_key = function (_, generator) {
+ var code = this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const analog_mouse_input = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
+ var wheel = generator.valueToCode(this, 'wheel', generator.ORDER_ATOMIC);
+ var re = this.getFieldValue('release');
+ generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
+ var code = "onboard_bot.hid_mouse(keys=" + key + ",move=(" + x + "," + y + "),wheel=" + wheel + ",release=" + re + ")\n";
+ return code;
+}
+
+const mouse_key = function (_, generator) {
+ var code = this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const analog_keyboard_str = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var str = generator.valueToCode(this, 'str', generator.ORDER_ATOMIC);
+ var t = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
+ generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
+ var code = "onboard_bot.hid_keyboard_str(" + str + ",delay=" + t + ")\n";
+ return code;
+}
+
+const general_key_tuple = function (_, generator) {
+ // Create a list with any number of elements of any type.
+ var code = new Array(this.itemCount_);
+ var default_value = '0';
+ for (var n = 0; n < this.itemCount_; n++) {
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || default_value;
+ }
+ if (this.itemCount_ != 1) {
+ var code = '(' + code.join(', ') + ')';
+ } else {
+ var code = '(' + code.join(', ') + ',)';
+ }
+
+ return [code, generator.ORDER_ATOMIC];
+};
+
+const analog_ble_keyboard_init = function (_, generator) {
+ generator.definitions_['import_ble_keyboard'] = 'from ble_hid_keyboard import Keyboard';
+ var kname = generator.valueToCode(this, 'kname', generator.ORDER_ATOMIC)
+ var code = 'ble_keyboard=Keyboard(' + kname + ')\n';
+ return code;
+}
+
+const ble_keyboard_get_mac = function (_, generator) {
+ generator.definitions_['import_ble_keyboard'] = 'from ble_hid_keyboard import Keyboard';
+ var code = 'ble_keyboard.mac';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ble_keyboard_connect = function (_, generator) {
+ generator.definitions_['import_ble_keyboard'] = 'from ble_hid_keyboard import Keyboard';
+ var code = 'ble_keyboard.is_connected()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const analog_ble_keyboard_input = function (_, generator) {
+ var sp = generator.valueToCode(this, 'special', generator.ORDER_ATOMIC);
+ var ge = generator.valueToCode(this, 'general', generator.ORDER_ATOMIC);
+ var re = this.getFieldValue('release');
+ generator.definitions_['import_ble_keyboard'] = 'from ble_hid_keyboard import Keyboard';
+ var code = "ble_keyboard.notify_hid(" + sp + "," + ge + "," + re + ")\n";
+ return code;
+}
+
+const analog_ble_keyboard_str = function (_, generator) {
+ var str = generator.valueToCode(this, 'str', generator.ORDER_ATOMIC);
+ var t = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
+ generator.definitions_['import_ble_keyboard'] = 'from ble_hid_keyboard import Keyboard';
+ var code = "ble_keyboard.notify_str(" + str + ",delay=" + t + ")\n";
+ return code;
+}
+
+const analog_ble_keyboard_send_battery = function (_, generator) {
+ var b = generator.valueToCode(this, 'battery', generator.ORDER_ATOMIC);
+ generator.definitions_['import_ble_keyboard'] = 'from ble_hid_keyboard import Keyboard';
+ var code = "ble_keyboard.notify_battery(" + b + ")\n";
+ return code;
+}
+
+const analog_ble_mouse_init = function (_, generator) {
+ generator.definitions_['import_ble_mouse'] = 'from ble_hid_mouse import Mouse';
+ var name = generator.valueToCode(this, 'name', generator.ORDER_ATOMIC)
+ var code = 'ble_mouse=Mouse(' + name + ')\n';
+ return code;
+}
+
+const ble_mouse_get_mac = function (_, generator) {
+ generator.definitions_['import_ble_mouse'] = 'from ble_hid_mouse import Mouse';
+ var code = 'ble_mouse.mac';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ble_mouse_connect = function (_, generator) {
+ generator.definitions_['import_ble_mouse'] = 'from ble_hid_mouse import Mouse';
+ var code = 'ble_mouse.is_connected()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const analog_ble_mouse_input = function (_, generator) {
+ var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
+ var wheel = generator.valueToCode(this, 'wheel', generator.ORDER_ATOMIC);
+ var re = this.getFieldValue('release');
+ generator.definitions_['import_ble_mouse'] = 'from ble_hid_mouse import Mouse';
+ var code = "ble_mouse.notify_hid(" + key + ",(" + x + "," + y + ")," + wheel + "," + re + ")\n";
+ return code;
+}
+
+const analog_ble_mouse_send_battery = function (_, generator) {
+ var b = generator.valueToCode(this, 'battery', generator.ORDER_ATOMIC);
+ generator.definitions_['import_ble_mouse'] = 'from ble_hid_mouse import Mouse';
+ var code = "ble_mouse.notify_battery(" + b + ")\n";
+ return code;
+}
+
+const analog_ble_keyboard_mouse_init = function (_, generator) {
+ generator.definitions_['import_HID_ble_hid'] = 'from ble_hid import HID';
+ var kname = generator.valueToCode(this, 'kname', generator.ORDER_ATOMIC)
+ var code = 'ble_hid = HID(' + kname + ')\n';
+ return code;
+}
+
+const ble_keyboard_mouse_get_mac = function (_, generator) {
+ generator.definitions_['import_HID_ble_hid'] = 'from ble_hid import HID';
+ var code = 'ble_hid.mac';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ble_keyboard_mouse_connect = function (_, generator) {
+ generator.definitions_['import_HID_ble_hid'] = 'from ble_hid import HID';
+ var code = 'ble_hid.is_connected()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const analog_ble_keyboard_mouse_send_battery = function (_, generator) {
+ var b = generator.valueToCode(this, 'battery', generator.ORDER_ATOMIC);
+ generator.definitions_['import_HID_ble_hid'] = 'from ble_hid import HID';
+ var code = "ble_hid.battery_notify(" + b + ")\n";
+ return code;
+}
+
+const analog_ble_keyboard_mouse_input = function (_, generator) {
+ var sp = generator.valueToCode(this, 'special', generator.ORDER_ATOMIC);
+ var ge = generator.valueToCode(this, 'general', generator.ORDER_ATOMIC);
+ var re = this.getFieldValue('release');
+ generator.definitions_['import_HID_ble_hid'] = 'from ble_hid import HID';
+ var code = "ble_hid.keyboard_notify(" + sp + "," + ge + "," + re + ")\n";
+ return code;
+}
+
+const analog_ble_keyboard_mouse_str = function (_, generator) {
+ var str = generator.valueToCode(this, 'str', generator.ORDER_ATOMIC);
+ var t = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
+ generator.definitions_['import_HID_ble_hid'] = 'from ble_hid import HID';
+ var code = "ble_hid.keyboard_str(" + str + ",delay=" + t + ")\n";
+ return code;
+}
+
+const analog_ble_mouse_keyboard_input = function (_, generator) {
+ var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
+ var wheel = generator.valueToCode(this, 'wheel', generator.ORDER_ATOMIC);
+ var re = this.getFieldValue('release');
+ generator.definitions_['import_HID_ble_hid'] = 'from ble_hid import HID';
+ var code = "ble_hid.mouse_notify(" + key + ",(" + x + "," + y + ")," + wheel + "," + re + ")\n";
+ return code;
+}
+//educore actuator
+const educore_buzzer = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_speaker'] = 'from ' + version + ' import spesker';
+ var code = "speaker()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_buzzer_play_tone = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_speaker'] = 'from ' + version + ' import spesker';
+ var bu = generator.valueToCode(this, 'buzzer', generator.ORDER_ATOMIC);
+ var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);
+ var code = bu+'.tone(freq=[' + number_pitch + '])\n';
+ return code;
+}
+
+const educore_buzzer_play_tone_time = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_speaker'] = 'from ' + version + ' import spesker';
+ var bu = generator.valueToCode(this, 'buzzer', generator.ORDER_ATOMIC);
+ var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);
+ var number_time = generator.valueToCode(block, 'time', generator.ORDER_ATOMIC);
+ var code = bu+'.tone(freq=' + number_pitch + ', dur=' + number_time + ')\n';
+ return code;
+}
+
+const educore_buzzer_stop = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_speaker'] = 'from ' + version + ' import spesker';
+ var bu = generator.valueToCode(this, 'buzzer', generator.ORDER_ATOMIC);
+ var code = bu+'.stop()\n';
+ return code;
+}
+
+const educore_rgb_light = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + 'rgb'] = 'from ' + version + ' import rgb';
+ var code = "rgb()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_neopixel_rgb = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + 'rgb'] = 'from ' + version + ' import rgb';
+ var rgb = generator.valueToCode(this, 'rgb', generator.ORDER_ATOMIC);
+ var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
+ var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
+ var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
+ var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
+ var code = rgb+'.write(index[' + value_led + '], r=int(' + value_rvalue + '), g=int(' + value_gvalue + '), b=int(' + value_bvalue + '))\n';
+ return code;
+}
+
+const educore_neopixel_clear = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + 'rgb'] = 'from ' + version + ' import rgb';
+ var rgb = generator.valueToCode(this, 'rgb', generator.ORDER_ATOMIC);
+ var code = rgb+'.clear()\n';
+ return code;
+}
+
+const educore_ble_sensor_init = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_hid'] = 'from ' + version + ' import hid';
+ var n = generator.valueToCode(this, 'name', generator.ORDER_ATOMIC);
+ var code = 'hid.(name='+ n +')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_ble_sensor_connected = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_hid'] = 'from ' + version + ' import hid';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub+'.isconnected()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_ble_keyboard_input = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_keycode'] = 'from ' + version + ' import keycode';
+ var ge = generator.valueToCode(this, 'general', generator.ORDER_ATOMIC);
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub+".keyboard_send("+ ge + ")\n";
+ return code;
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/ai.js":
+/*!***************************************!*\
+ !*** ../micropython/generators/ai.js ***!
+ \***************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ MICROPYTHON_AI_Speech_asr: () => (/* binding */ MICROPYTHON_AI_Speech_asr),
+/* harmony export */ MICROPYTHON_AI_Speech_unit: () => (/* binding */ MICROPYTHON_AI_Speech_unit),
+/* harmony export */ MICROPYTHON_AI_client: () => (/* binding */ MICROPYTHON_AI_client)
+/* harmony export */ });
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const MICROPYTHON_AI_client = function (_, generator) {
+ var ctype = this.getFieldValue('CTYPE');
+ generator.definitions_['import_baidu_speech'] = 'import baidu_speech';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var api_key = generator.valueToCode(this, 'API_KEY', generator.ORDER_ATOMIC);
+ var sound = '';
+ if (ctype == "ASR") {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_sound'] = "from " + version + " import onboard_sound";
+ sound += 'onboard_sound.adc' + ',';
+ }
+ var secret_key = generator.valueToCode(this, 'SECRET_KEY', generator.ORDER_ATOMIC);
+ var code = v + ' = ' + 'baidu_speech.' + ctype + '(' + sound + api_key + ', ' + secret_key + ')\n';
+ return code;
+}
+
+const MICROPYTHON_AI_Speech_unit = function (_, generator) {
+ generator.definitions_['import_baidu_speech'] = 'import baidu_speech';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var id = generator.valueToCode(this, 'ID', generator.ORDER_ATOMIC);
+ var s = generator.valueToCode(this, 'STR', generator.ORDER_ATOMIC);
+ var code = v + '.chatbot(' + id + ',' + s + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const MICROPYTHON_AI_Speech_asr = function (_, generator) {
+ var language = this.getFieldValue('LANGUAGE');
+ generator.definitions_['import_baidu_speech'] = 'import baidu_speech';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var fn = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC) || '""';
+ var code = v + '.recognize(record_time=' + fn + ',dev_pid=' + language + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+
+
+/***/ }),
+
+/***/ "../micropython/generators/ai_sensor.js":
+/*!**********************************************!*\
+ !*** ../micropython/generators/ai_sensor.js ***!
+ \**********************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ ai_sensor_20object: () => (/* binding */ ai_sensor_20object),
+/* harmony export */ ai_sensor_ailocal_class: () => (/* binding */ ai_sensor_ailocal_class),
+/* harmony export */ ai_sensor_ailocal_class_result: () => (/* binding */ ai_sensor_ailocal_class_result),
+/* harmony export */ ai_sensor_ailocal_train: () => (/* binding */ ai_sensor_ailocal_train),
+/* harmony export */ ai_sensor_asr_recognize: () => (/* binding */ ai_sensor_asr_recognize),
+/* harmony export */ ai_sensor_audio_play: () => (/* binding */ ai_sensor_audio_play),
+/* harmony export */ ai_sensor_audio_record: () => (/* binding */ ai_sensor_audio_record),
+/* harmony export */ ai_sensor_barcode: () => (/* binding */ ai_sensor_barcode),
+/* harmony export */ ai_sensor_circle: () => (/* binding */ ai_sensor_circle),
+/* harmony export */ ai_sensor_classifier_faces: () => (/* binding */ ai_sensor_classifier_faces),
+/* harmony export */ ai_sensor_color: () => (/* binding */ ai_sensor_color),
+/* harmony export */ ai_sensor_color_chases: () => (/* binding */ ai_sensor_color_chases),
+/* harmony export */ ai_sensor_color_chases_result: () => (/* binding */ ai_sensor_color_chases_result),
+/* harmony export */ ai_sensor_config: () => (/* binding */ ai_sensor_config),
+/* harmony export */ ai_sensor_face: () => (/* binding */ ai_sensor_face),
+/* harmony export */ ai_sensor_find_20objects: () => (/* binding */ ai_sensor_find_20objects),
+/* harmony export */ ai_sensor_find_barcodes: () => (/* binding */ ai_sensor_find_barcodes),
+/* harmony export */ ai_sensor_find_circles: () => (/* binding */ ai_sensor_find_circles),
+/* harmony export */ ai_sensor_find_colors: () => (/* binding */ ai_sensor_find_colors),
+/* harmony export */ ai_sensor_find_licenseplates: () => (/* binding */ ai_sensor_find_licenseplates),
+/* harmony export */ ai_sensor_find_lines: () => (/* binding */ ai_sensor_find_lines),
+/* harmony export */ ai_sensor_find_qrcodes: () => (/* binding */ ai_sensor_find_qrcodes),
+/* harmony export */ ai_sensor_find_rects: () => (/* binding */ ai_sensor_find_rects),
+/* harmony export */ ai_sensor_find_tags: () => (/* binding */ ai_sensor_find_tags),
+/* harmony export */ ai_sensor_licenseplate: () => (/* binding */ ai_sensor_licenseplate),
+/* harmony export */ ai_sensor_line: () => (/* binding */ ai_sensor_line),
+/* harmony export */ ai_sensor_qrcode: () => (/* binding */ ai_sensor_qrcode),
+/* harmony export */ ai_sensor_qrcode_lite: () => (/* binding */ ai_sensor_qrcode_lite),
+/* harmony export */ ai_sensor_rect: () => (/* binding */ ai_sensor_rect),
+/* harmony export */ ai_sensor_rgb: () => (/* binding */ ai_sensor_rgb),
+/* harmony export */ ai_sensor_tag: () => (/* binding */ ai_sensor_tag),
+/* harmony export */ ai_sensor_use_uart_init: () => (/* binding */ ai_sensor_use_uart_init),
+/* harmony export */ ai_sensor_yolo_recognize: () => (/* binding */ ai_sensor_yolo_recognize),
+/* harmony export */ ai_sensor_yolo_recognize_result: () => (/* binding */ ai_sensor_yolo_recognize_result)
+/* harmony export */ });
+const ai_sensor_use_uart_init = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = v + '=mixgo_ai.AI(' + key + ',quick=1)\n';
+ return code;
+}
+
+const ai_sensor_qrcode_lite = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var type = this.getFieldValue('TYPE');
+ var code = sub + '.find_' + type + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_config = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var rx = generator.valueToCode(this, 'RX', generator.ORDER_ATOMIC);
+ var tx = generator.valueToCode(this, 'TX', generator.ORDER_ATOMIC);
+ var dropdown_uart = this.getFieldValue('mode');
+ var code = v + '.configure(' + tx + ',' + rx + ',restart=' + dropdown_uart + ')\n';
+ return code;
+}
+
+const ai_sensor_rgb = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var led1 = generator.valueToCode(this, 'led1', generator.ORDER_ATOMIC);
+ var led2 = generator.valueToCode(this, 'led2', generator.ORDER_ATOMIC);
+ var code = v + '.led_rgb(' + led1 + ',' + led2 + ')\n';
+ return code;
+}
+
+const ai_sensor_qrcode = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_find_qrcodes = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.find_qrcodes()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_barcode = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_find_barcodes = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.find_barcodes()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_tag = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_find_tags = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.find_apriltags()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_line = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_find_lines = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
+ var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
+ var v3 = generator.valueToCode(this, 'VAR3', generator.ORDER_ATOMIC);
+ var code = v + '.find_lines(' + v1 + ',' + v2 + ',' + v3 + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_circle = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_find_circles = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
+ var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
+ var v3 = generator.valueToCode(this, 'VAR3', generator.ORDER_ATOMIC);
+ var code = v + '.find_circles(' + v1 + ',' + v2 + ',' + v3 + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_rect = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_find_rects = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
+ var code = v + '.find_rects(' + v1 + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_color = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_find_colors = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.find_colors()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_color_chases_result = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_color_chases = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
+ var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
+ var v3 = generator.valueToCode(this, 'VAR3', generator.ORDER_ATOMIC);
+ var code = v + '.color_track(' + v1 + ',' + v2 + ',' + v3 + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_ailocal_train = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
+ var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
+ var v3 = generator.valueToCode(this, 'VAR3', generator.ORDER_ATOMIC);
+ var v4 = generator.valueToCode(this, 'VAR4', generator.ORDER_ATOMIC);
+ var code = v + '.ailocal_train(' + v1 + ',' + v2 + ',' + v3 + ',' + v4 + ')\n';
+ return code;
+}
+
+const ai_sensor_ailocal_class = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
+ var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
+ var v4 = generator.valueToCode(this, 'VAR4', generator.ORDER_ATOMIC);
+ var code = v + '.ailocal_class(' + v1 + ',' + v2 + ',' + v4 + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_ailocal_class_result = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_audio_record = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
+ var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
+ var code = v + '.audio_record(path=' + v1 + ',times=' + v2 + ')\n';
+ return code;
+}
+
+const ai_sensor_audio_play = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
+ var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
+ var code = v + '.audio_play(path=' + v1 + ',volume=' + v2 + ')\n';
+ return code;
+}
+
+const ai_sensor_yolo_recognize = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
+ var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
+ var v4 = generator.valueToCode(this, 'VAR4', generator.ORDER_ATOMIC);
+ var code = v + '.yolo_recognize(' + v1 + ',' + v2 + ',' + v4 + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_yolo_recognize_result = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_asr_recognize = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
+ var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
+ var code = v + '.asr_recognize(' + v1 + ',threshold=' + v2 + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_licenseplate = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_find_licenseplates = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.find_licenseplate()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_face = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_classifier_faces = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.face_detect()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_20object = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ai_sensor_find_20objects = function (_, generator) {
+ generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.find_20object()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/blynk.js":
+/*!******************************************!*\
+ !*** ../micropython/generators/blynk.js ***!
+ \******************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ mpython_blynk_app_data: () => (/* binding */ mpython_blynk_app_data),
+/* harmony export */ mpython_blynk_app_notify: () => (/* binding */ mpython_blynk_app_notify),
+/* harmony export */ mpython_blynk_email: () => (/* binding */ mpython_blynk_email),
+/* harmony export */ mpython_blynk_get_timers: () => (/* binding */ mpython_blynk_get_timers),
+/* harmony export */ mpython_blynk_on_connected: () => (/* binding */ mpython_blynk_on_connected),
+/* harmony export */ mpython_blynk_on_disconnected: () => (/* binding */ mpython_blynk_on_disconnected),
+/* harmony export */ mpython_blynk_run: () => (/* binding */ mpython_blynk_run),
+/* harmony export */ mpython_blynk_sensor_data_to_app: () => (/* binding */ mpython_blynk_sensor_data_to_app),
+/* harmony export */ mpython_blynk_set_property: () => (/* binding */ mpython_blynk_set_property),
+/* harmony export */ mpython_blynk_setup: () => (/* binding */ mpython_blynk_setup),
+/* harmony export */ mpython_blynk_stop_timers: () => (/* binding */ mpython_blynk_stop_timers),
+/* harmony export */ mpython_blynk_sync_virtual: () => (/* binding */ mpython_blynk_sync_virtual),
+/* harmony export */ mpython_blynk_terminal_widget_vpin: () => (/* binding */ mpython_blynk_terminal_widget_vpin),
+/* harmony export */ mpython_blynktimer: () => (/* binding */ mpython_blynktimer),
+/* harmony export */ mpython_blynktimer_run: () => (/* binding */ mpython_blynktimer_run)
+/* harmony export */ });
+// Blynk 第二版
+// Blynk 自定义终端部件 Terminal
+const mpython_blynk_terminal_widget_vpin = function (_, generator) {
+ // generator.definitions_['import_BlynkLib'] = 'import blynklib';
+ var virtual_pin = generator.valueToCode(this, 'virtual_pin', generator.ORDER_ATOMIC);
+
+ generator.functions_['terminal_widget_vpin_' + virtual_pin] =
+ `
+ALLOWED_COMMANDS_LIST = ['ls', 'lsusb', 'ip a', 'ip abc']
+
+@blynk.handle_event('write V${virtual_pin}')
+def write_handler(pin, _values):
+ header = ''
+ result = ''
+ delimiter = '{}\\n'.format('=' * 30)
+ if _values and _values[0] in ALLOWED_COMMANDS_LIST:
+ cmd_params = _values[0].split(' ')
+ try:
+ result = subprocess.check_output(cmd_params).decode('utf-8')
+ header = '[output]\\n'
+ except subprocess.CalledProcessError as exe_err:
+ header = '[error]\\n'
+ result = 'Return Code: {}\\n'.format(exe_err.returncode)
+ except Exception as g_err:
+ print("Command caused '{}'".format(g_err))
+ elif _values and _values[0] == 'help':
+ header = '[help -> allowed commands]\\n'
+ result = '{}\\n'.format('\\n'.join(ALLOWED_COMMANDS_LIST))
+
+ # communicate with terminal if help or some allowed command
+ if result:
+ output = '{}{}{}{}'.format(header, delimiter, result, delimiter)
+ print(output)
+ blynk.virtual_write(pin, output)
+ blynk.virtual_write(pin, '\\n')
+`
+
+ var code = '';
+ return code;
+}
+
+// Blynk 同步虚拟管脚的状态
+const mpython_blynk_sync_virtual = function (_, generator) {
+ // generator.definitions_['import_BlynkLib'] = 'import blynklib';
+ var virtual_pin = generator.valueToCode(this, 'virtual_pin', generator.ORDER_ATOMIC);
+
+ var code = 'blynk.virtual_sync(' + virtual_pin + ')\n';
+ return code;
+}
+
+// 斷開连接 Blynk
+const mpython_blynk_on_disconnected = function (_, generator) {
+ // generator.definitions_['import_BlynkLib'] = 'import blynklib';
+
+ var branch = generator.statementToCode(this, 'DO');
+ branch = generator.addLoopTrap(branch, this.id) || generator.PASS;
+
+ generator.definitions_['blynk_on_disconnected'] =
+ '@blynk.handle_event("disconnect")\n' +
+ 'def connect_handler():\n' +
+ " print('Blynk disconnected')\n" + branch;
+
+ return '';
+}
+
+// 连接上 Blynk
+const mpython_blynk_on_connected = function (_, generator) {
+ // generator.definitions_['import_BlynkLib'] = 'import blynklib';
+
+ var branch = generator.statementToCode(this, 'DO');
+ branch = generator.addLoopTrap(branch, this.id) || generator.PASS;
+
+ generator.definitions_['blynk_on_connected'] =
+ '@blynk.handle_event("connect")\n' +
+ 'def connect_handler():\n' +
+ " print('Blynk connected')\n" + branch;
+
+ return '';
+}
+
+// Blynk 定时器的进程生效并运行
+const mpython_blynktimer_run = function () {
+ // generator.definitions_['import_BlynkLib'] = 'import blynklib';
+ // generator.definitions_['import_blynktimer'] = 'import blynktimer';
+
+ var code = 'blynk_timer.run()\n';
+ return code;
+}
+
+// Blynk 进程生效并运行
+const mpython_blynk_run = function () {
+ // generator.definitions_['import_BlynkLib'] = 'import blynklib';
+
+ var code = 'blynk.run()\n';
+ return code;
+}
+
+// Blynk APP 显示通知
+const mpython_blynk_app_notify = function (_, generator) {
+ // generator.definitions_['import_BlynkLib'] = 'import blynklib';
+ var notification = generator.valueToCode(this, 'notification', generator.ORDER_ATOMIC);
+
+ var code = 'blynk.notify(' + notification + ')\n';
+ return code;
+}
+
+// 停止 Blynk 定时器 %1
+const mpython_blynk_stop_timers = function (_, generator) {
+ generator.definitions_['import_blynktimer'] = 'import blynktimer';
+ generator.definitions_['def_blynktimer'] = 'blynk_timer = blynktimer.Timer(no_timers_err=False)';
+
+ var timer_num = generator.valueToCode(this, 'timer_num', generator.ORDER_ATOMIC);
+ var code = `blynk_timer.stop('${timer_num}_blynk_timer${timer_num}')` + '\n';
+
+ return code;
+}
+
+// 可用的 Blynk 定时器
+const mpython_blynk_get_timers = function (_, generator) {
+ generator.definitions_['import_blynktimer'] = 'import blynktimer';
+ generator.definitions_['def_blynktimer'] = 'blynk_timer = blynktimer.Timer(no_timers_err=False)';
+
+ var code = `blynk_timer.get_timers()`;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//blynk定时器
+const mpython_blynktimer = function (_, generator) {
+ generator.definitions_['import_blynktimer'] = 'import blynktimer';
+
+ var Num = generator.valueToCode(this, 'Num', generator.ORDER_ATOMIC);
+ var period = generator.valueToCode(this, 'period', generator.ORDER_ATOMIC);
+ var Timer_mode = this.getFieldValue('Timer_mode');
+
+ var branch = generator.statementToCode(this, 'DO');
+ branch = generator.addLoopTrap(branch, this.id) || generator.PASS;
+
+ generator.definitions_['def_blynktimer'] = 'blynk_timer = blynktimer.Timer(no_timers_err=False)';
+
+ generator.definitions_['blynktimer_event' + Num] =
+ `
+@blynk_timer.register(interval=${period}, run_once=${Timer_mode})
+def blynk_timer${Num}():
+`
+ + branch;
+
+ return '';
+}
+
+// 发送数据 %1 到 Bylnk APP 的虚拟管脚 %2
+const mpython_blynk_sensor_data_to_app = function (_, generator) {
+ // generator.definitions_['import_BlynkLib'] = 'import blynklib';
+ var sensor_data = generator.valueToCode(this, 'sensor_data', generator.ORDER_ATOMIC);
+ var virtual_pin = generator.valueToCode(this, 'virtual_pin', generator.ORDER_ATOMIC);
+ var code = 'blynk.virtual_write(' + virtual_pin + ', ' + sensor_data + ')\n';
+ return code;
+}
+
+// 从 Bylnk APP 获取虚拟管脚 %1 的值
+const mpython_blynk_app_data = function (_, generator) {
+
+ // generator.definitions_['import_BlynkLib'] = 'import blynklib';
+ var virtual_pin = generator.valueToCode(this, 'virtual_pin', generator.ORDER_ATOMIC);
+
+ var branch = generator.statementToCode(this, 'DO');
+ branch = generator.addLoopTrap(branch, this.id) || generator.PASS;
+
+ generator.definitions_['blynk_VIRTUAL_WRITE_' + virtual_pin] =
+ "@blynk.handle_event('write V" + virtual_pin + "')\n" +
+ 'def write_virtual_pin_handler(pin, _value):\n' +
+ ' for i in range(0, len(_value)):\n' +
+ ' try: _value[i] = eval(_value[i])\n' +
+ ' except: pass\n' +
+ ' if len(_value) == 1: _value = _value[0]\n' + branch;
+ //' print('+'"v' + virtual_pin + '_value: {}".format(_value))\n'
+ // var code = 'blynk.run()\n';
+ return '';
+}
+
+// 向 %1 发邮件 主题 %2 正文 %3
+const mpython_blynk_email = function (_, generator) {
+ var body = generator.valueToCode(this, 'body', generator.ORDER_ATOMIC);
+ var subject = generator.valueToCode(this, 'subject', generator.ORDER_ATOMIC);
+ var TargetEmail = generator.valueToCode(this, 'TargetEmail', generator.ORDER_ATOMIC);
+
+ var code = `blynk.email(${TargetEmail}, ${subject}, ${body})` + '\n';
+ return code;
+}
+
+// 给虚拟管脚添加 属性 %1 值 %2
+const mpython_blynk_set_property = function (_, generator) {
+ var attribute_value = generator.valueToCode(this, 'attribute_value', generator.ORDER_ATOMIC);
+ var attribute_name = generator.valueToCode(this, 'attribute_name', generator.ORDER_ATOMIC);
+
+ var code = `blynk.set_property(pin, ${attribute_name}, ${attribute_value})` + '\n';
+
+ return code;
+}
+
+// Bylnk设置
+const mpython_blynk_setup = function (_, generator) {
+ generator.definitions_['import_BlynkLib'] = 'import blynklib';
+ var server = generator.valueToCode(this, 'server', generator.ORDER_ATOMIC);
+ var auth = generator.valueToCode(this, 'auth', generator.ORDER_ATOMIC);
+ var port = generator.valueToCode(this, 'port', generator.ORDER_ATOMIC);
+
+ generator.definitions_['mpython_blynk_setup'] =
+ "blynk = blynklib.Blynk(" + auth + ", server=" + server + ", port=" + port + ")";
+
+ generator.definitions_['blynk_on_connected'] =
+ `
+@blynk.handle_event("connect")
+def connect_handler():
+ print('Blynk connected')
+`
+
+ generator.definitions_['blynk_on_disconnected'] =
+ `
+@blynk.handle_event("disconnect")
+def connect_handler():
+ print('Blynk disconnected')
+`
+
+ return '';
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/cc_g1.js":
+/*!******************************************!*\
+ !*** ../micropython/generators/cc_g1.js ***!
+ \******************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ cc_g1_read_bat: () => (/* binding */ cc_g1_read_bat),
+/* harmony export */ cc_g1_read_joystick: () => (/* binding */ cc_g1_read_joystick),
+/* harmony export */ cc_g1_read_key: () => (/* binding */ cc_g1_read_key),
+/* harmony export */ cc_g1_turnoff: () => (/* binding */ cc_g1_turnoff)
+/* harmony export */ });
+const cc_g1_read_bat = function (_, generator) {
+ generator.definitions_['import_cc_g1'] = 'from cc_g1 import handle';
+ var code = 'handle.read_bat()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const cc_g1_read_joystick = function (_, generator) {
+ var v = this.getFieldValue('VAR');
+ generator.definitions_['import_cc_g1'] = 'from cc_g1 import handle';
+ var code = 'handle.read_joystick()' + v + '';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const cc_g1_read_key = function (_, generator) {
+ var v = this.getFieldValue('VAR');
+ generator.definitions_['import_cc_g1'] = 'from cc_g1 import handle';
+ var code = 'handle.read_key(' + v + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const cc_g1_turnoff = function (_, generator) {
+ generator.definitions_['import_cc_g1'] = 'from cc_g1 import handle';
+ var code = 'handle.shutdown()';
+ return code;
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/ce_go.js":
+/*!******************************************!*\
+ !*** ../micropython/generators/ce_go.js ***!
+ \******************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ ce_go_dc_motor: () => (/* binding */ ce_go_dc_motor),
+/* harmony export */ ce_go_get_led_bright: () => (/* binding */ ce_go_get_led_bright),
+/* harmony export */ ce_go_get_led_state: () => (/* binding */ ce_go_get_led_state),
+/* harmony export */ ce_go_hall_attachInterrupt: () => (/* binding */ ce_go_hall_attachInterrupt),
+/* harmony export */ ce_go_hall_data: () => (/* binding */ ce_go_hall_data),
+/* harmony export */ ce_go_hall_initialize: () => (/* binding */ ce_go_hall_initialize),
+/* harmony export */ ce_go_led_bright: () => (/* binding */ ce_go_led_bright),
+/* harmony export */ ce_go_led_brightness: () => (/* binding */ ce_go_led_brightness),
+/* harmony export */ ce_go_light_number: () => (/* binding */ ce_go_light_number),
+/* harmony export */ ce_go_pin_light: () => (/* binding */ ce_go_pin_light),
+/* harmony export */ ce_go_pin_near: () => (/* binding */ ce_go_pin_near),
+/* harmony export */ ce_go_pin_near_line: () => (/* binding */ ce_go_pin_near_line),
+/* harmony export */ ce_go_pin_near_state_change: () => (/* binding */ ce_go_pin_near_state_change),
+/* harmony export */ ce_go_stepper_keep: () => (/* binding */ ce_go_stepper_keep),
+/* harmony export */ ce_go_stepper_stop: () => (/* binding */ ce_go_stepper_stop),
+/* harmony export */ educore_car: () => (/* binding */ educore_car),
+/* harmony export */ educore_car_pin_near: () => (/* binding */ educore_car_pin_near),
+/* harmony export */ educore_car_pin_near_line: () => (/* binding */ educore_car_pin_near_line),
+/* harmony export */ educore_car_stepper_keep: () => (/* binding */ educore_car_stepper_keep),
+/* harmony export */ educore_car_stepper_stop: () => (/* binding */ educore_car_stepper_stop),
+/* harmony export */ sensor_mixgome_eulerangles: () => (/* binding */ sensor_mixgome_eulerangles)
+/* harmony export */ });
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const ce_go_light_number = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ } else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_car'] = 'from mini_go import car';
+ }
+ var code = 'car.' + this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ce_go_led_bright = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_car'] = 'from mini_go import car';
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
+ }
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var code = "car.setonoff(" + op + "," + bright + ")\n";
+ return code;
+}
+
+const ce_go_get_led_bright = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_car'] = 'from mini_go import car';
+ }
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ var code = "car.getrightness(" + op + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ce_go_get_led_state = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_car'] = 'from mini_go import car';
+ }
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ var code = "car.getonoff(" + op + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ce_go_led_brightness = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_car'] = 'from mini_go import car';
+ }
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var code = "car.setbrightness(" + op + "," + flag + ")\n";
+ return code;
+}
+
+const ce_go_stepper_keep = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_car'] = 'from mini_go import car';
+ }
+ var v = this.getFieldValue('VAR');
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);
+ var code = 'car.move("' + v + '",' + speed + ")\n";
+ return code;
+}
+
+const ce_go_stepper_stop = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_car'] = 'from mini_go import car';
+ }
+ var v = this.getFieldValue('VAR');
+ var code = 'car.move("' + v + '")\n';
+ return code;
+}
+
+const ce_go_dc_motor = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_car'] = 'from mini_go import car';
+ }
+ var wheel = this.getFieldValue('wheel');
+ var v = this.getFieldValue('direction');
+ if (wheel == 0) {
+ if (v == 'CW') { v = 'CCW' }
+ else if (v == 'CCW') { v = 'CW' }
+ }
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ var code = "car.motor(car.MOTO[" + wheel + '],"' + v + '",' + speed + ")\n";
+ return code;
+}
+
+const ce_go_hall_attachInterrupt = function (_, generator) {
+ var dropdown_mode = this.getFieldValue('mode');
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_hall_' + dropdown_mode] = 'from ce_go import hall_' + dropdown_mode;
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_hall' + dropdown_mode] = 'from mini_go import hall_'+ dropdown_mode;
+ }
+ var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
+ var code = 'hall_' + dropdown_mode + '.irq_cb(' + atta + ')\n'
+ return code;
+}
+
+const ce_go_hall_initialize = function (_, generator) {
+ var dropdown_mode = this.getFieldValue('mode');
+ var args = this.getFieldValue('args');
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_hall_' + dropdown_mode] = 'from ce_go import hall_' + dropdown_mode;
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_hall' + dropdown_mode] = 'from mini_go import hall_'+ dropdown_mode;
+ }
+ var num = generator.valueToCode(this, 'num', generator.ORDER_ATOMIC);
+ if (args == 'all') {
+ var code = 'hall_' + dropdown_mode + '.initial(' + 'turns' + '=' + num + ',distance=' + num + ')\n'
+ return code;
+ }
+ var code = 'hall_' + dropdown_mode + '.initial(' + args + '=' + num + ')\n'
+ return code;
+}
+
+const ce_go_hall_data = function (_, generator) {
+ var dropdown_mode = this.getFieldValue('mode');
+ var args = this.getFieldValue('args');
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_hall_' + dropdown_mode] = 'from ce_go import hall_' + dropdown_mode;
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_hall' + dropdown_mode] = 'from mini_go import hall_'+ dropdown_mode;
+ }
+ var code = 'hall_' + dropdown_mode + '.' + args + '';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ce_go_pin_near_line = function (_, generator) {
+ var key = this.getFieldValue('key');
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_hall'] = 'from me_go import car';
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_hall'] = 'from ce_go import car';
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_hall'] = 'from mini_go import car';
+ }
+ var code = 'car.patrol()' + key + '';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ce_go_pin_near = function (_, generator) {
+ var key = this.getFieldValue('key');
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_hall'] = 'from me_go import car';
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_hall'] = 'from ce_go import car';
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_hall'] = 'from mini_go import car';
+ }
+ var code = 'car.obstacle()' + key + '';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ce_go_pin_near_state_change = function (_, generator) {
+ var key = this.getFieldValue('key');
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_hall'] = 'from me_go import car';
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_hall'] = 'from ce_go import car';
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_hall'] = 'from mini_go import car';
+ }
+ var code = 'car.ir_mode(car.' + key + ')\n';
+ return code;
+}
+
+const sensor_mixgome_eulerangles = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_mixgo_me_onboard_mxc6655xa'] = "from mixgo_me import onboard_mxc6655xa";
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_mixgo_ce_onboard_mxc6655xa'] = "from mixgo_ce import onboard_mxc6655xa";
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_onboard_mxc6655xa'] = 'from mini_go import onboard_mxc6655xa';
+ }
+ var angle = this.getFieldValue('angle');
+ var code = 'onboard_mxc6655xa.eulerangles(upright=True)' + angle;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ce_go_pin_light = function (_, generator) {
+ var key = this.getFieldValue('key');
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me" || version == "mixgo_cc") {
+ generator.definitions_['import_me_go_hall'] = 'from me_go import car';
+ }
+ else if (version == "mixgo_ce") {
+ generator.definitions_['import_ce_go_hall'] = 'from ce_go import car';
+ }else if (version == "mixgo_mini"){
+ generator.definitions_['import_mini_go_hall'] = 'from mini_go import car';
+ }
+ var code = 'car.light()' + key + '';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//educore car
+
+const educore_car = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_'+version+'_car'] = 'from '+version+' import car';
+ var code = 'car()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_car_stepper_keep = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_'+version+'_car'] = 'from '+version+' import car';
+ var car = generator.valueToCode(this, 'car', generator.ORDER_ASSIGNMENT);
+ var v = this.getFieldValue('VAR');
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);
+ var code = car+'.'+ v +'('+speed+")\n";
+ return code;
+}
+
+const educore_car_stepper_stop = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_'+version+'_car'] = 'from '+version+' import car';
+ var car = generator.valueToCode(this, 'car', generator.ORDER_ASSIGNMENT);
+ var v = this.getFieldValue('VAR');
+ var code = car+'.'+ v +"()\n";
+ return code;
+}
+
+const educore_car_pin_near_line = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_'+version+'_car'] = 'from '+version+' import car';
+ var car = generator.valueToCode(this, 'car', generator.ORDER_ASSIGNMENT);
+ var key = this.getFieldValue('key');
+ var code = car+'.get_itr_dnum(' + key + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_car_pin_near = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_'+version+'_car'] = 'from '+version+' import car';
+ var car = generator.valueToCode(this, 'car', generator.ORDER_ASSIGNMENT);
+ var code = car+'.get_distance()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/communicate.js":
+/*!************************************************!*\
+ !*** ../micropython/generators/communicate.js ***!
+ \************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ communicate_bluetooth_central_init: () => (/* binding */ communicate_bluetooth_central_init),
+/* harmony export */ communicate_bluetooth_connect: () => (/* binding */ communicate_bluetooth_connect),
+/* harmony export */ communicate_bluetooth_disconnect: () => (/* binding */ communicate_bluetooth_disconnect),
+/* harmony export */ communicate_bluetooth_handle: () => (/* binding */ communicate_bluetooth_handle),
+/* harmony export */ communicate_bluetooth_is_connected: () => (/* binding */ communicate_bluetooth_is_connected),
+/* harmony export */ communicate_bluetooth_mac: () => (/* binding */ communicate_bluetooth_mac),
+/* harmony export */ communicate_bluetooth_peripheral_init: () => (/* binding */ communicate_bluetooth_peripheral_init),
+/* harmony export */ communicate_bluetooth_recv: () => (/* binding */ communicate_bluetooth_recv),
+/* harmony export */ communicate_bluetooth_recv_only: () => (/* binding */ communicate_bluetooth_recv_only),
+/* harmony export */ communicate_bluetooth_scan: () => (/* binding */ communicate_bluetooth_scan),
+/* harmony export */ communicate_bluetooth_send: () => (/* binding */ communicate_bluetooth_send),
+/* harmony export */ communicate_espnow_init: () => (/* binding */ communicate_espnow_init),
+/* harmony export */ communicate_espnow_init_new: () => (/* binding */ communicate_espnow_init_new),
+/* harmony export */ communicate_i2c_available: () => (/* binding */ communicate_i2c_available),
+/* harmony export */ communicate_i2c_init: () => (/* binding */ communicate_i2c_init),
+/* harmony export */ communicate_i2c_master_read: () => (/* binding */ communicate_i2c_master_read),
+/* harmony export */ communicate_i2c_onboard: () => (/* binding */ communicate_i2c_onboard),
+/* harmony export */ communicate_i2c_read: () => (/* binding */ communicate_i2c_read),
+/* harmony export */ communicate_i2c_scan: () => (/* binding */ communicate_i2c_scan),
+/* harmony export */ communicate_i2c_write: () => (/* binding */ communicate_i2c_write),
+/* harmony export */ communicate_ir_recv_init: () => (/* binding */ communicate_ir_recv_init),
+/* harmony export */ communicate_ir_send_init: () => (/* binding */ communicate_ir_send_init),
+/* harmony export */ communicate_ow_init: () => (/* binding */ communicate_ow_init),
+/* harmony export */ communicate_ow_read: () => (/* binding */ communicate_ow_read),
+/* harmony export */ communicate_ow_reset: () => (/* binding */ communicate_ow_reset),
+/* harmony export */ communicate_ow_scan: () => (/* binding */ communicate_ow_scan),
+/* harmony export */ communicate_ow_select: () => (/* binding */ communicate_ow_select),
+/* harmony export */ communicate_ow_write: () => (/* binding */ communicate_ow_write),
+/* harmony export */ communicate_spi_buffer: () => (/* binding */ communicate_spi_buffer),
+/* harmony export */ communicate_spi_init: () => (/* binding */ communicate_spi_init),
+/* harmony export */ communicate_spi_onboard: () => (/* binding */ communicate_spi_onboard),
+/* harmony export */ communicate_spi_read: () => (/* binding */ communicate_spi_read),
+/* harmony export */ communicate_spi_read_output: () => (/* binding */ communicate_spi_read_output),
+/* harmony export */ communicate_spi_readinto: () => (/* binding */ communicate_spi_readinto),
+/* harmony export */ communicate_spi_readinto_output: () => (/* binding */ communicate_spi_readinto_output),
+/* harmony export */ communicate_spi_set: () => (/* binding */ communicate_spi_set),
+/* harmony export */ communicate_spi_write: () => (/* binding */ communicate_spi_write),
+/* harmony export */ communicate_spi_write_readinto: () => (/* binding */ communicate_spi_write_readinto),
+/* harmony export */ espnow_radio_channel: () => (/* binding */ espnow_radio_channel),
+/* harmony export */ espnow_radio_channel_new: () => (/* binding */ espnow_radio_channel_new),
+/* harmony export */ espnow_radio_on_off: () => (/* binding */ espnow_radio_on_off),
+/* harmony export */ espnow_radio_rec: () => (/* binding */ espnow_radio_rec),
+/* harmony export */ espnow_radio_recv: () => (/* binding */ espnow_radio_recv),
+/* harmony export */ espnow_radio_recv_certain_msg: () => (/* binding */ espnow_radio_recv_certain_msg),
+/* harmony export */ espnow_radio_recv_certain_msg_new: () => (/* binding */ espnow_radio_recv_certain_msg_new),
+/* harmony export */ espnow_radio_recv_msg: () => (/* binding */ espnow_radio_recv_msg),
+/* harmony export */ espnow_radio_recv_new: () => (/* binding */ espnow_radio_recv_new),
+/* harmony export */ espnow_radio_send: () => (/* binding */ espnow_radio_send),
+/* harmony export */ espnow_radio_txpower: () => (/* binding */ espnow_radio_txpower),
+/* harmony export */ i2c_slave_onreceive: () => (/* binding */ i2c_slave_onreceive),
+/* harmony export */ internal_variable: () => (/* binding */ internal_variable),
+/* harmony export */ ir_recv_timeout: () => (/* binding */ ir_recv_timeout),
+/* harmony export */ ir_transmit_busy: () => (/* binding */ ir_transmit_busy),
+/* harmony export */ ir_transmit_conventional_data: () => (/* binding */ ir_transmit_conventional_data),
+/* harmony export */ ir_transmit_raw_code: () => (/* binding */ ir_transmit_raw_code),
+/* harmony export */ ir_transmit_study_code: () => (/* binding */ ir_transmit_study_code),
+/* harmony export */ ir_whether_recv: () => (/* binding */ ir_whether_recv),
+/* harmony export */ lora_init: () => (/* binding */ lora_init),
+/* harmony export */ lora_packet: () => (/* binding */ lora_packet),
+/* harmony export */ lora_recv: () => (/* binding */ lora_recv),
+/* harmony export */ lora_send: () => (/* binding */ lora_send),
+/* harmony export */ network_espnow_info: () => (/* binding */ network_espnow_info),
+/* harmony export */ network_espnow_mac: () => (/* binding */ network_espnow_mac),
+/* harmony export */ network_espnow_recv: () => (/* binding */ network_espnow_recv),
+/* harmony export */ network_espnow_recv_handle: () => (/* binding */ network_espnow_recv_handle),
+/* harmony export */ network_espnow_send: () => (/* binding */ network_espnow_send),
+/* harmony export */ recv_fun: () => (/* binding */ recv_fun),
+/* harmony export */ urequests_attribute: () => (/* binding */ urequests_attribute),
+/* harmony export */ urequests_get: () => (/* binding */ urequests_get),
+/* harmony export */ urequests_method: () => (/* binding */ urequests_method)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+const communicate_i2c_onboard = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_i2c'] = 'from ' + version + ' import onboard_i2c';
+ var code = 'onboard_i2c';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const communicate_spi_onboard = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_i2c'] = 'from ' + version + ' import onboard_spi';
+ var code = 'onboard_spi';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const communicate_i2c_init = function (block, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin1 = generator.valueToCode(this, 'RX', generator.ORDER_ATOMIC);
+ var dropdown_pin2 = generator.valueToCode(this, 'TX', generator.ORDER_ATOMIC);
+ var freq = generator.valueToCode(this, 'freq', generator.ORDER_ATOMIC);
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ return "" + sub + " = machine.SoftI2C(scl = machine.Pin(" + dropdown_pin2 + "), sda = machine.Pin(" + dropdown_pin1 + "), freq = " + freq + ")\n";
+}
+
+const communicate_i2c_read = function (block, generator) {
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ return ["" + name + ".readfrom(" + address + ", " + data + ")", generator.ORDER_ATOMIC];
+}
+
+const communicate_i2c_write = function (block, generator) {
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ return "" + name + ".writeto(" + address + ", " + data + ")\n";
+}
+
+const communicate_i2c_scan = function (block, generator) {
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ return ["" + name + ".scan()", generator.ORDER_ATOMIC];
+}
+
+const communicate_i2c_master_read = function (block, generator) {
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = "" + name + ".read()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const communicate_i2c_available = function (block, generator) {
+
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = "" + name + ".available()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const i2c_slave_onreceive = function (block, generator) {
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ generator.setups_['setup_i2c_' + pin] = 'Wire.begin(' + pin + ');';
+ generator.setups_['setup_i2c_onReceive_' + pin] = 'Wire.onReceive(i2cReceiveEvent_' + pin + ');';
+ var funcName = 'i2cReceiveEvent_' + pin;
+ var branch = generator.statementToCode(this, 'DO');
+ var code2 = 'void' + ' ' + funcName + '(int howMany) {\n' + branch + '}\n';
+ generator.definitions_[funcName] = code2;
+ return '';
+}
+
+const communicate_spi_init = function (block, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var freq = generator.valueToCode(this, 'freq', generator.ORDER_ATOMIC);
+ var mosi = generator.valueToCode(this, 'mosi', generator.ORDER_ATOMIC);
+ var miso = generator.valueToCode(this, 'miso', generator.ORDER_ATOMIC);
+ var sck = generator.valueToCode(this, 'sck', generator.ORDER_ATOMIC);
+ return "" + name + " = machine.SoftSPI(baudrate=" + freq + ", sck=machine.Pin(" + sck + "), mosi=machine.Pin(" + mosi + "), miso=machine.Pin(" + miso + "))\n";
+}
+
+const communicate_spi_set = function (block, generator) {
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ return "spi.init(baudrate=" + data + ")\n";
+}
+
+const communicate_spi_buffer = function (block, generator) {
+ var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ return "" + varname + "=bytearray(" + data + ")\n";
+}
+
+const communicate_spi_read = function (block, generator) {
+ var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ return ["" + varname + ".read(" + data + ")", generator.ORDER_ATOMIC];
+}
+
+const communicate_spi_read_output = function (block, generator) {
+ var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ var val = generator.valueToCode(this, 'val', generator.ORDER_ATOMIC);
+ return ["" + varname + ".read(" + data + "," + val + ")", generator.ORDER_ATOMIC];
+}
+
+const communicate_spi_readinto = function (block, generator) {
+ var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ return ["" + varname + ".readinto(" + data + ")", generator.ORDER_ATOMIC];
+}
+
+const communicate_spi_readinto_output = function (block, generator) {
+ var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ var val = generator.valueToCode(this, 'val', generator.ORDER_ATOMIC);
+ return ["" + varname + ".readinto(" + data + "," + val + ")", generator.ORDER_ATOMIC];
+}
+
+const communicate_spi_write = function (block, generator) {
+ var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ return ["" + varname + ".write(" + data + ".encode('utf-8'))", generator.ORDER_ATOMIC];
+}
+
+const communicate_spi_write_readinto = function (block, generator) {
+ var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ var val = generator.valueToCode(this, 'val', generator.ORDER_ATOMIC);
+ // var op=this.getFieldValue('op');
+ // if(op=="byte"){
+ return ["" + varname + ".write_readinto(" + data + ".encode('utf-8')," + val + ")", generator.ORDER_ATOMIC];
+ // }else{
+ // return [""+varname+".write_readinto(" + data + ","+val+")", generator.ORDER_ATOMIC];
+ // }
+}
+
+const communicate_ow_init = function (block, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_onewire'] = "import onewire";
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var varName = generator.valueToCode(this, 'BUS', generator.ORDER_ATOMIC);
+ var code = "" + name + "=onewire.OneWire(machine.Pin(" + varName + "))\n";
+ return code;
+}
+
+const communicate_ow_scan = function (block, generator) {
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = "" + name + ".scan()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const communicate_ow_reset = function (block, generator) {
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = "" + name + ".reset()\n";
+ return code;
+}
+
+const communicate_ow_read = function (block, generator) {
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = "" + name + ".readbyte()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const communicate_ow_write = function (block, generator) {
+ var varName = generator.valueToCode(this, 'byte', generator.ORDER_ATOMIC);
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var op = this.getFieldValue('op');
+ var code = "" + name + "." + op + "(" + varName + ")\n";
+ return code;
+}
+
+const communicate_ow_select = function (block, generator) {
+ var varName = generator.valueToCode(this, 'byte', generator.ORDER_ATOMIC);
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = "" + name + ".select_rom(" + varName + ".encode('utf-8'))\n";
+ return code;
+}
+
+const communicate_ir_recv_init = function (block, generator) {
+ generator.definitions_['import_irremote'] = 'import irremote';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var bit = this.getFieldValue('type');
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (sub == "" && bit == "RC5") {
+ var code = "ir_rx = irremote.RC5_RX(" + pin + ")\n";
+ }
+ else if (sub == "") {
+ var code = "ir_rx = irremote.NEC_RX(" + pin + "," + bit + ")\n";
+ }
+ else {
+ var code = "ir_rx = irremote.NEC_RX(" + pin + "," + bit + "," + sub + ")\n";
+ }
+ return code;
+}
+
+const internal_variable = function (block, generator) {
+ generator.definitions_['import_irremote'] = 'import irremote';
+ var index = this.getFieldValue('index');
+ var code = "ir_rx.code[" + index + "]";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const recv_fun = function (block, generator) {
+ generator.definitions_['import_irremote'] = 'import irremote';
+ var en = this.getFieldValue('en');
+ var code = "ir_rx.enable(" + en + ")\n";
+ return code;
+}
+
+const ir_whether_recv = function (block, generator) {
+ generator.definitions_['import_irremote'] = 'import irremote';
+ var code = "ir_rx.any()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ir_recv_timeout = function (block, generator) {
+ generator.definitions_['import_irremote'] = 'import irremote';
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
+ var code = "ir_rx.timeout(" + time + ")\n";
+ return code;
+}
+
+const communicate_ir_send_init = function (block, generator) {
+ generator.definitions_['import_irremote'] = 'import irremote';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var sam = this.getFieldValue('type');
+ var power = generator.valueToCode(this, 'power', generator.ORDER_ATOMIC);
+ if (sam == "RC5") {
+ var code = "ir_tx = irremote.RC5_TX(" + pin + "," + power + ")\n";
+ }
+ else {
+ var code = "ir_tx = irremote.NEC_TX(" + pin + "," + sam + "," + power + ")\n";
+ }
+ return code;
+}
+
+const ir_transmit_conventional_data = function (block, generator) {
+ generator.definitions_['import_irremote'] = 'import irremote';
+ var cmd = generator.valueToCode(this, 'cmd', generator.ORDER_ATOMIC);
+ var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
+ var toggle = generator.valueToCode(this, 'toggle', generator.ORDER_ATOMIC);
+ var code = "ir_tx.transmit(" + cmd + "," + addr + "," + toggle + ")\n";
+ return code;
+}
+
+const ir_transmit_study_code = function (block, generator) {
+ generator.definitions_['import_irremote'] = 'import irremote';
+ var s_code = generator.valueToCode(this, 'LIST', generator.ORDER_ATOMIC);
+ var code = "ir_tx.transmit(pulses=" + s_code + ")\n";
+ return code;
+}
+
+const ir_transmit_raw_code = function (block, generator) {
+ generator.definitions_['import_irremote'] = 'import irremote';
+ var raw = generator.valueToCode(this, 'raw', generator.ORDER_ATOMIC);
+ var code = "ir_tx.transmit(raw=" + raw + ")\n";
+ return code;
+}
+
+const ir_transmit_busy = function (block, generator) {
+ generator.definitions_['import_irremote'] = 'import irremote';
+ var code = "ir_tx.busy()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const communicate_bluetooth_central_init = function (block, generator) {
+ generator.definitions_['import_ble_central'] = 'import ble_central';
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = name + " = ble_central.BLESimpleCentral()\n";
+ return code;
+}
+
+const communicate_bluetooth_peripheral_init = function (block, generator) {
+ generator.definitions_['import_ble_peripheral'] = 'import ble_peripheral';
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = name + " = ble_peripheral.BLESimplePeripheral(" + data + ")\n";
+ return code;
+}
+
+const communicate_bluetooth_scan = function (block, generator) {
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = name + ".scan()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const communicate_bluetooth_connect = function (block, generator) {
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var mode = this.getFieldValue('mode');
+ var code = name + ".connect(" + mode + '=' + data + ")\n";
+ return code;
+}
+
+const communicate_bluetooth_disconnect = function (block, generator) {
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = name + '.disconnect()\n';
+ return code;
+}
+
+const communicate_bluetooth_mac = function (block, generator) {
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ return [name + ".mac", generator.ORDER_ATOMIC];
+}
+
+const communicate_bluetooth_is_connected = function (block, generator) {
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = name + ".is_connected()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const communicate_bluetooth_send = function (block, generator) {
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = name + ".send(" + data + ")\n";
+ return code;
+}
+
+const communicate_bluetooth_recv_only = function (block, generator) {
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = v + '.recv()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const communicate_bluetooth_recv = function (block, generator) {
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);
+ var code = v + '.recv(' + method + ')\n';
+ return code;
+}
+
+const communicate_bluetooth_handle = function (block, generator) {
+ generator.definitions_['import_ble_handle'] = 'import ble_handle';
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);
+ var code = v + '=ble_handle.Handle()\n' + v + '.recv(' + method + ')\n';
+ return code;
+}
+
+//espnow
+const communicate_espnow_init = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var varName = generator.valueToCode(this, 'CHNL', generator.ORDER_ATOMIC);
+ var power = this.getFieldValue('op');
+ var code = "" + name + "=radio.ESPNow(channel=" + varName + ",txpower=" + power + ")\n";
+ return code;
+}
+
+const communicate_espnow_init_new = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var varName = generator.valueToCode(this, 'CHNL', generator.ORDER_ATOMIC);
+ var varName2 = generator.valueToCode(this, 'DB', generator.ORDER_ATOMIC);
+ var code = "" + name + "=radio.ESPNow(channel=" + varName + ',txpower=' + varName2 + ")\n";
+ return code;
+}
+
+const network_espnow_mac = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ return [name + ".mac", generator.ORDER_ATOMIC];
+}
+
+const network_espnow_info = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ return [name + ".info()", generator.ORDER_ATOMIC];
+}
+
+const network_espnow_recv = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ var mode = this.getFieldValue('mode');
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = name + ".recv()" + mode;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const network_espnow_send = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var mac = generator.valueToCode(this, 'mac', generator.ORDER_ATOMIC);
+ var content = generator.valueToCode(this, 'content', generator.ORDER_ATOMIC);
+ var code = name + ".send(" + mac + "," + content + ")\n";
+ return code;
+}
+
+const network_espnow_recv_handle = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);
+ var code = name + ".recv_cb(" + method + ")\n";
+ return code;
+}
+
+//radio
+const espnow_radio_channel = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ generator.definitions_['var_declare_ESPNow_radio'] = "ESPNow_radio=radio.ESPNow()";
+ var varName = generator.valueToCode(this, 'CHNL', generator.ORDER_ATOMIC);
+ var code = "ESPNow_radio.set_channel(channel=" + varName + ")\n";
+ return code;
+}
+
+const espnow_radio_txpower = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ generator.definitions_['var_declare_ESPNow_radio'] = "ESPNow_radio=radio.ESPNow()";
+ var power = this.getFieldValue('op');
+ var code = "ESPNow_radio.set_channel(txpower=" + power + ")\n";
+ return code;
+}
+
+const espnow_radio_channel_new = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ var varName2 = generator.valueToCode(this, 'DB', generator.ORDER_ATOMIC);
+ generator.definitions_['var_declare_ESPNow_radio'] = "ESPNow_radio=radio.ESPNow(channel=1,txpower=" + varName2 + ")";
+ var varName = generator.valueToCode(this, 'CHNL', generator.ORDER_ATOMIC);
+ var code = "ESPNow_radio.set_channel(" + varName + ")\n";
+ return code;
+}
+
+const espnow_radio_on_off = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';
+ var op = this.getFieldValue('on_off');
+ var code = "ESPNow_radio.active(" + op + ")\n";
+ return code;
+}
+
+const espnow_radio_send = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';
+ var varName = generator.valueToCode(this, 'send', generator.ORDER_ATOMIC);
+ var code = 'ESPNow_radio.send("ffffffffffff",' + varName + ")\n";
+ return code;
+}
+
+const espnow_radio_rec = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';
+ var code = "ESPNow_radio.recv()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const espnow_radio_recv_msg = function (block, generator) {
+ var code = "ESPNow_radio_msg";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const espnow_radio_recv = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ generator.definitions_['import_ubinascii'] = 'import ubinascii';
+ generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';
+ var doCode = generator.statementToCode(block, 'DO') || generator.PASS;
+ generator.definitions_['def_ESPNow_radio_recv'] = 'def ESPNow_radio_recv(mac,ESPNow_radio_msg):\n' + doCode;
+ generator.definitions_['def_ESPNow_radio_recv_all'] = '_radio_msg_list = []\n' + 'def ESPNow_radio_recv_callback(mac,ESPNow_radio_msg):\n' + ' global _radio_msg_list\n' + ' try: ESPNow_radio_recv(mac,ESPNow_radio_msg)\n' + ' except: pass\n' + ' if str(ESPNow_radio_msg) in _radio_msg_list:\n' + " eval('radio_recv_' + bytes.decode(ubinascii.hexlify(ESPNow_radio_msg)) + '()')\n";
+ generator.definitions_['ESPNow_radio_recv_callback'] = "ESPNow_radio.recv_cb(ESPNow_radio_recv_callback)\n";
+
+ return '';
+}
+
+var writeUTF = function (str, isGetBytes) {
+ var back = [];
+ var byteSize = 0;
+ for (var i = 0; i < str.length; i++) {
+ var code = str.charCodeAt(i);
+ if (0x00 <= code && code <= 0x7f) {
+ byteSize += 1;
+ back.push(code);
+ } else if (0x80 <= code && code <= 0x7ff) {
+ byteSize += 2;
+ back.push((192 | (31 & (code >> 6))));
+ back.push((128 | (63 & code)))
+ } else if ((0x800 <= code && code <= 0xd7ff) || (0xe000 <= code && code <= 0xffff)) {
+ byteSize += 3;
+ back.push((224 | (15 & (code >> 12))));
+ back.push((128 | (63 & (code >> 6))));
+ back.push((128 | (63 & code)))
+ }
+ }
+ for (i = 0; i < back.length; i++) {
+ back[i] &= 0xff;
+ }
+ if (isGetBytes) {
+ return back;
+ }
+ if (byteSize <= 0xff) {
+ return [0, byteSize].concat(back);
+ }
+ return [byteSize >> 8, byteSize & 0xff].concat(back);
+}
+
+var toUTF8Hex = function (str) {
+ var charBuf = writeUTF(str, true);
+ var re = '';
+ for (var i = 0; i < charBuf.length; i++) {
+ var x = (charBuf[i] & 0xFF).toString(16);
+ if (x.length === 1) {
+ x = '0' + x;
+ }
+ re += x;
+ }
+ return re;
+}
+
+const espnow_radio_recv_certain_msg = function (block, generator) {
+ generator.definitions_['import_radio'] = "import radio";
+ generator.definitions_['import_ubinascii'] = 'import ubinascii';
+ generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';
+ var doCode = generator.statementToCode(block, 'DO') || generator.PASS;
+ generator.definitions_['def_ESPNow_radio_recv_all'] = '_radio_msg_list = []\n' + 'def ESPNow_radio_recv_callback(mac,ESPNow_radio_msg):\n' + ' global _radio_msg_list\n' + ' try: ESPNow_radio_recv(mac,ESPNow_radio_msg)\n' + ' except: pass\n' + ' if str(ESPNow_radio_msg) in _radio_msg_list:\n' + " eval('radio_recv_' + bytes.decode(ubinascii.hexlify(ESPNow_radio_msg)) + '()')\n";
+ generator.definitions_['ESPNow_radio_recv_callback'] = "ESPNow_radio.recv_cb(ESPNow_radio_recv_callback)\n";
+ var message = block.getFieldValue('msg');
+ var message_utf8 = toUTF8Hex(message);
+ generator.definitions_['def_radio_recv_' + message_utf8] =
+ '_radio_msg_list.append(\'' + message + '\')\n' +
+ 'def radio_recv_' + message_utf8 + '():\n' + doCode;
+ return '';
+}
+
+const espnow_radio_recv_new = function (block, generator) {
+ generator.definitions_['import_radio'] = 'import radio';
+ generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';
+ var doCode = generator.statementToCode(block, 'DO') || generator.PASS;
+ generator.definitions_['def_ESPNow_radio_recv'] = 'def ESPNow_radio_recv(mac, ESPNow_radio_msg):\n'
+ + `${doCode}\nESPNow_radio.recv_cb("__all__", ESPNow_radio_recv)\n`;
+ return '';
+}
+
+const espnow_radio_recv_certain_msg_new = function (block, generator) {
+ generator.definitions_['import_radio'] = 'import radio';
+ generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';
+ var doCode = generator.statementToCode(block, 'DO') || generator.PASS;
+ var message = block.getFieldValue('msg');
+ generator.definitions_['def_ESPNow_radio_recv_' + message] = 'def ESPNow_radio_recv(mac, ESPNow_radio_msg):\n'
+ + `${doCode}\nESPNow_radio.recv_cb("${message}", ESPNow_radio_recv)\n`;
+ return '';
+}
+
+const lora_init = function (block, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var sv = generator.valueToCode(this, 'SPISUB', generator.ORDER_ATOMIC);
+ var pv = generator.valueToCode(this, 'PINSUB', generator.ORDER_ATOMIC);
+ var fr = generator.valueToCode(this, 'frequency', generator.ORDER_ATOMIC);
+ var r = generator.valueToCode(this, 'rate', generator.ORDER_ATOMIC);
+ var f = generator.valueToCode(this, 'factor', generator.ORDER_ATOMIC);
+ var p = generator.valueToCode(this, 'power', generator.ORDER_ATOMIC);
+ var bandwidth = this.getFieldValue('bandwidth');
+ var code;
+ generator.definitions_['import_rfm98'] = 'import rfm98';
+ var code = v + ' = rfm98.RFM98(' + sv + ',cs_pin=' + pv + ',frequency_mhz=' + fr + ',signal_bandwidth=' + bandwidth + ',coding_rate=' + r + ',spreading_factor=' + f + ',tx_power=' + p + ')\n';
+ return code;
+}
+
+const lora_packet = function (block, generator) {
+ generator.definitions_['import_rfm98'] = 'import rfm98';
+ var key = this.getFieldValue('key');
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ return [name + "." + key + '()', generator.ORDER_ATOMIC];
+}
+
+const lora_send = function (block, generator) {
+ generator.definitions_['import_rfm98'] = 'import rfm98';
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = name + ".send(" + data + ")\n";
+ return code;
+}
+
+const lora_recv = function (block, generator) {
+ generator.definitions_['import_rfm98'] = 'import rfm98';
+ var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ return [name + '.recv()', generator.ORDER_ATOMIC];
+}
+
+const urequests_get = function (block, generator) {
+ generator.definitions_.import_requests = "import urequests";
+ var varName = generator.variableDB_.getName(this.getFieldValue('VAR'), blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ var str = generator.valueToCode(this, 'DOMAIN', generator.ORDER_ATOMIC);
+ var code = varName + '= ' + 'urequests.get(' + str + ')\n';
+ return code;
+}
+
+const urequests_attribute = function (block, generator) {
+ generator.definitions_.import_requests = "import urequests";
+ var varName = generator.valueToCode(this, 'VAL', generator.ORDER_ASSIGNMENT) || '0';
+ var attr = this.getFieldValue('ATTR');
+ var code = varName + "." + attr;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const urequests_method = function (block, generator) {
+ generator.definitions_.import_requests = "import urequests";
+ var method = this.getFieldValue('DIR');
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = "urequests." + method + "(" + str + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/control.js":
+/*!********************************************!*\
+ !*** ../micropython/generators/control.js ***!
+ \********************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ base_setup: () => (/* binding */ base_setup),
+/* harmony export */ controls_flow_statements: () => (/* binding */ controls_flow_statements),
+/* harmony export */ controls_for: () => (/* binding */ controls_for),
+/* harmony export */ controls_forEach: () => (/* binding */ controls_forEach),
+/* harmony export */ controls_if: () => (/* binding */ controls_if),
+/* harmony export */ controls_repeat: () => (/* binding */ controls_repeat),
+/* harmony export */ controls_type: () => (/* binding */ controls_type),
+/* harmony export */ controls_typeLists: () => (/* binding */ controls_typeLists),
+/* harmony export */ controls_whileUntil: () => (/* binding */ controls_whileUntil)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _mixly_python_generators_control__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mixly/python/generators/control */ "../python/generators/control.js");
+
+
+
+const base_setup = function (_, generator) {
+ var branch = generator.statementToCode(this, 'DO');
+ branch = branch.replace(/(^\s*)|(\s*$)/g, "").replace(/\n {4}/g, '\n');//去除两端空格
+ if (branch) {
+ if (branch.endsWith('\n')) {
+ generator.setups_['setup_setup'] = branch;
+ } else {
+ generator.setups_['setup_setup'] = branch + '\n';
+ }
+ }
+ return '';
+}
+
+// ok
+const controls_if = function (a, generator) {
+ var b = 0,
+ c = "",
+ d,
+ e;
+ do
+ e = generator.valueToCode(a, "IF" + b, generator.ORDER_NONE) || "False", d = generator.statementToCode(a, "DO" + b) || generator.PASS, c += (0 == b ? "if " : "elif ") + e + ":\n" + d, ++b;
+ while (a.getInput("IF" + b));
+ a.getInput("ELSE") && (d = generator.statementToCode(a, "ELSE") || generator.PASS, c += "else:\n" + d);
+ return c
+}
+
+// ok
+const controls_for = function (a, generator) {
+ var b = generator.variableDB_.getName(a.getFieldValue("VAR"), blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE),
+ //var b = generator.valueToCode(a, "VAR", generator.ORDER_MEMBER) || "''",
+ c = generator.valueToCode(a, "FROM", generator.ORDER_NONE) || "0",
+ d = generator.valueToCode(a, "TO", generator.ORDER_NONE) || "0",
+ e = generator.valueToCode(a, "STEP", generator.ORDER_NONE) || "1",
+ f = generator.addLoopTrap(generator.statementToCode(a, "DO"), a.id) || generator.PASS,
+ g = "",
+ h = function (_, generator) {
+ return generator.provideFunction_("upRange",
+ ["def " + generator.FUNCTION_NAME_PLACEHOLDER_ + "(start, stop, step):", " while start <= stop:", " yield start", " start += abs(step)"])
+ },
+ k = function (_, generator) {
+ return generator.provideFunction_("downRange", ["def " + generator.FUNCTION_NAME_PLACEHOLDER_ + "(start, stop, step):", " while start >= stop:", " yield start", " start -= abs(step)"])
+ }
+ a = function (a, b, c) {
+ return "(" + a + " <= " + b + ") and " + h() + "(" + a + ", " + b + ", " + c + ") or " + k() + "(" + a + ", " + b + ", " + c + ")"
+ }
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.isNumber(c) && blockly_core__WEBPACK_IMPORTED_MODULE_0__.isNumber(d) &&
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.isNumber(e))
+ c = parseFloat(c), d = parseFloat(d), e = Math.abs(parseFloat(e)), 0 === c % 1 && 0 === d % 1 && 0 === e % 1 ? (c <= d ? (d++, a = 0 == c && 1 == e ? d : c + ", " + d, 1 != e && (a += ", " + e)) : (d--, a = c + ", " + d + ", -" + e), a = "range(" + a + ")") : (a = c < d ? h() : k(), a += "(" + c + ", " + d + ", " + e + ")");
+ else {
+ var l = function (a, c) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.isNumber(a))
+ a = parseFloat(a);
+ else {
+ var d = generator.variableDB_.getDistinctName(b + c, blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ g += d + " = " + a + "\n";
+ a = d
+ }
+ return a
+ }
+ c = l(c, "_start");
+ d = l(d, "_end");
+ l(e, "_inc");
+ a = "number" == typeof c && "number" == typeof d ? c < d ? h(c, d, e) : k(c, d, e) : a(c, d, e)
+ }
+ return g += "for " + b + " in " + a + ":\n" + f
+}
+
+// ok
+const controls_repeat = _mixly_python_generators_control__WEBPACK_IMPORTED_MODULE_1__.controls_repeat_ext;
+
+const controls_whileUntil = function (a, generator) {
+ var b = "UNTIL" == a.getFieldValue("MODE"),
+ c = generator.valueToCode(a, "BOOL", b ? generator.ORDER_LOGICAL_NOT : generator.ORDER_NONE) || "False",
+ d = generator.addLoopTrap(generator.statementToCode(a, "DO"), a.id) || generator.PASS;
+ b && (c = "not " + c);
+ return "while " + c + ":\n" + d
+}
+
+// ok
+const controls_flow_statements = function (a) {
+ switch (a.getFieldValue("FLOW")) {
+ case "BREAK":
+ return "break\n";
+ case "CONTINUE":
+ return "continue\n"
+ }
+ throw "Unknown flow statement.";
+}
+
+//ok
+const controls_forEach = function (block, generator) {
+ // For each loop.
+ var variable0 = generator.variableDB_.getName(
+ block.getFieldValue('VAR'), blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ var argument0 = generator.valueToCode(block, 'LIST',
+ generator.ORDER_RELATIONAL) || '[]';
+ var branch = generator.statementToCode(block, 'DO');
+ branch = generator.addLoopTrap(branch, block.id) ||
+ generator.PASS;
+ var code = 'for ' + variable0 + ' in ' + argument0 + ':\n' + branch;
+ return code;
+}
+
+// ok
+const controls_type = function (_, generator) {
+ var data = generator.valueToCode(this, 'DATA', generator.ORDER_ATOMIC) || '1000'
+ var code = 'type(' + data + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const controls_typeLists = function (_, generator) {
+ generator.definitions_['import_microbit_*'] = 'from microbit import *';
+ var type = this.getFieldValue('type');
+ // generator.definitions_['func_type' + type] = code;
+ return [type, generator.ORDER_ATOMIC];
+}
+
+
+/***/ }),
+
+/***/ "../micropython/generators/display.js":
+/*!********************************************!*\
+ !*** ../micropython/generators/display.js ***!
+ \********************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ display_animate: () => (/* binding */ display_animate),
+/* harmony export */ display_blink_rate: () => (/* binding */ display_blink_rate),
+/* harmony export */ display_bright_point: () => (/* binding */ display_bright_point),
+/* harmony export */ display_bright_screen: () => (/* binding */ display_bright_screen),
+/* harmony export */ display_circle: () => (/* binding */ display_circle),
+/* harmony export */ display_clear: () => (/* binding */ display_clear),
+/* harmony export */ display_draw_4strings: () => (/* binding */ display_draw_4strings),
+/* harmony export */ display_fill: () => (/* binding */ display_fill),
+/* harmony export */ display_get_pixel: () => (/* binding */ display_get_pixel),
+/* harmony export */ display_get_screen_image: () => (/* binding */ display_get_screen_image),
+/* harmony export */ display_get_screen_pixel: () => (/* binding */ display_get_screen_pixel),
+/* harmony export */ display_image_builtins: () => (/* binding */ display_image_builtins),
+/* harmony export */ display_image_create: () => (/* binding */ display_image_create),
+/* harmony export */ display_line: () => (/* binding */ display_line),
+/* harmony export */ display_line_arbitrarily: () => (/* binding */ display_line_arbitrarily),
+/* harmony export */ display_matrix_use_i2c_init: () => (/* binding */ display_matrix_use_i2c_init),
+/* harmony export */ display_oled_drawPixel: () => (/* binding */ display_oled_drawPixel),
+/* harmony export */ display_oled_showBitmap: () => (/* binding */ display_oled_showBitmap),
+/* harmony export */ display_onoff: () => (/* binding */ display_onoff),
+/* harmony export */ display_rect: () => (/* binding */ display_rect),
+/* harmony export */ display_scroll_string: () => (/* binding */ display_scroll_string),
+/* harmony export */ display_scroll_string_delay: () => (/* binding */ display_scroll_string_delay),
+/* harmony export */ display_scroll_string_extern: () => (/* binding */ display_scroll_string_extern),
+/* harmony export */ display_show_image: () => (/* binding */ display_show_image),
+/* harmony export */ display_show_image_or_string: () => (/* binding */ display_show_image_or_string),
+/* harmony export */ display_show_image_or_string_delay: () => (/* binding */ display_show_image_or_string_delay),
+/* harmony export */ display_show_static: () => (/* binding */ display_show_static),
+/* harmony export */ display_tm1650_power: () => (/* binding */ display_tm1650_power),
+/* harmony export */ display_tm1650_show_dot: () => (/* binding */ display_tm1650_show_dot),
+/* harmony export */ display_tm1650_show_num: () => (/* binding */ display_tm1650_show_num),
+/* harmony export */ display_tm_use_i2c_init: () => (/* binding */ display_tm_use_i2c_init),
+/* harmony export */ display_triangle: () => (/* binding */ display_triangle),
+/* harmony export */ display_use_i2c_init: () => (/* binding */ display_use_i2c_init),
+/* harmony export */ image_arithmetic: () => (/* binding */ image_arithmetic),
+/* harmony export */ image_shift: () => (/* binding */ image_shift)
+/* harmony export */ });
+const display_show_image_or_string = function (_, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = "matrix.show(" + data + ")\n";
+ return code;
+}
+
+const display_scroll_string = function (_, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = "matrix.scroll(" + data + ")\n";
+ return code;
+}
+
+const display_show_static = function (_, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = "matrix.showstatic(" + data + ")\n";
+ return code;
+}
+
+const display_show_image_or_string_delay = function (_, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ var code = "matrix.show(" + data + ',' + time + ")\n";
+ return code;
+}
+
+const display_scroll_string_delay = function (_, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ var code = "matrix.scroll(" + data + ',' + time + ")\n";
+ return code;
+}
+
+const display_image_create = function (block, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var colours = {
+ "#000000": "0",
+ //"#440000": "1",
+ //"#660000": "2",
+ //"#880000": "3",
+ //"#aa0000": "4",
+ //"#bb0000": "5",
+ //"#cc0000": "6",
+ //"#dd0000": "7",
+ //"#ee0000": "8",
+ "#ff0000": "1"
+ }
+ var colour_00 = colours[block.getFieldValue("00")];
+ var colour_01 = colours[block.getFieldValue("01")];
+ var colour_02 = colours[block.getFieldValue("02")];
+ var colour_03 = colours[block.getFieldValue("03")];
+ var colour_04 = colours[block.getFieldValue("04")];
+ var colour_05 = colours[block.getFieldValue("05")];
+ var colour_06 = colours[block.getFieldValue("06")];
+ var colour_07 = colours[block.getFieldValue("07")];
+ var colour_08 = colours[block.getFieldValue("08")];
+ var colour_09 = colours[block.getFieldValue("09")];
+ var colour_0a = colours[block.getFieldValue("0a")];
+ var colour_0b = colours[block.getFieldValue("0b")];
+ var colour_0c = colours[block.getFieldValue("0c")];
+ var colour_0d = colours[block.getFieldValue("0d")];
+ var colour_0e = colours[block.getFieldValue("0e")];
+ var colour_0f = colours[block.getFieldValue("0f")];
+ var colour_10 = colours[block.getFieldValue("10")];
+ var colour_11 = colours[block.getFieldValue("11")];
+ var colour_12 = colours[block.getFieldValue("12")];
+ var colour_13 = colours[block.getFieldValue("13")];
+ var colour_14 = colours[block.getFieldValue("14")];
+ var colour_15 = colours[block.getFieldValue("15")];
+ var colour_16 = colours[block.getFieldValue("16")];
+ var colour_17 = colours[block.getFieldValue("17")];
+ var colour_18 = colours[block.getFieldValue("18")];
+ var colour_19 = colours[block.getFieldValue("19")];
+ var colour_1a = colours[block.getFieldValue("1a")];
+ var colour_1b = colours[block.getFieldValue("1b")];
+ var colour_1c = colours[block.getFieldValue("1c")];
+ var colour_1d = colours[block.getFieldValue("1d")];
+ var colour_1e = colours[block.getFieldValue("1e")];
+ var colour_1f = colours[block.getFieldValue("1f")];
+ var colour_20 = colours[block.getFieldValue("20")];
+ var colour_21 = colours[block.getFieldValue("21")];
+ var colour_22 = colours[block.getFieldValue("22")];
+ var colour_23 = colours[block.getFieldValue("23")];
+ var colour_24 = colours[block.getFieldValue("24")];
+ var colour_25 = colours[block.getFieldValue("25")];
+ var colour_26 = colours[block.getFieldValue("26")];
+ var colour_27 = colours[block.getFieldValue("27")];
+ var colour_28 = colours[block.getFieldValue("28")];
+ var colour_29 = colours[block.getFieldValue("29")];
+ var colour_2a = colours[block.getFieldValue("2a")];
+ var colour_2b = colours[block.getFieldValue("2b")];
+ var colour_2c = colours[block.getFieldValue("2c")];
+ var colour_2d = colours[block.getFieldValue("2d")];
+ var colour_2e = colours[block.getFieldValue("2e")];
+ var colour_2f = colours[block.getFieldValue("2f")];
+ var colour_30 = colours[block.getFieldValue("30")];
+ var colour_31 = colours[block.getFieldValue("31")];
+ var colour_32 = colours[block.getFieldValue("32")];
+ var colour_33 = colours[block.getFieldValue("33")];
+ var colour_34 = colours[block.getFieldValue("34")];
+ var colour_35 = colours[block.getFieldValue("35")];
+ var colour_36 = colours[block.getFieldValue("36")];
+ var colour_37 = colours[block.getFieldValue("37")];
+ var colour_38 = colours[block.getFieldValue("38")];
+ var colour_39 = colours[block.getFieldValue("39")];
+ var colour_3a = colours[block.getFieldValue("3a")];
+ var colour_3b = colours[block.getFieldValue("3b")];
+ var colour_3c = colours[block.getFieldValue("3c")];
+ var colour_3d = colours[block.getFieldValue("3d")];
+ var colour_3e = colours[block.getFieldValue("3e")];
+ var colour_3f = colours[block.getFieldValue("3f")];
+ var colour_40 = colours[block.getFieldValue("40")];
+ var colour_41 = colours[block.getFieldValue("41")];
+ var colour_42 = colours[block.getFieldValue("42")];
+ var colour_43 = colours[block.getFieldValue("43")];
+ var colour_44 = colours[block.getFieldValue("44")];
+ var colour_45 = colours[block.getFieldValue("45")];
+ var colour_46 = colours[block.getFieldValue("46")];
+ var colour_47 = colours[block.getFieldValue("47")];
+ var colour_48 = colours[block.getFieldValue("48")];
+ var colour_49 = colours[block.getFieldValue("49")];
+ var colour_4a = colours[block.getFieldValue("4a")];
+ var colour_4b = colours[block.getFieldValue("4b")];
+ var colour_4c = colours[block.getFieldValue("4c")];
+ var colour_4d = colours[block.getFieldValue("4d")];
+ var colour_4e = colours[block.getFieldValue("4e")];
+ var colour_4f = colours[block.getFieldValue("4f")];
+ var colour_50 = colours[block.getFieldValue("50")];
+ var colour_51 = colours[block.getFieldValue("51")];
+ var colour_52 = colours[block.getFieldValue("52")];
+ var colour_53 = colours[block.getFieldValue("53")];
+ var colour_54 = colours[block.getFieldValue("54")];
+ var colour_55 = colours[block.getFieldValue("55")];
+ var colour_56 = colours[block.getFieldValue("56")];
+ var colour_57 = colours[block.getFieldValue("57")];
+ var colour_58 = colours[block.getFieldValue("58")];
+ var colour_59 = colours[block.getFieldValue("59")];
+ var colour_5a = colours[block.getFieldValue("5a")];
+ var colour_5b = colours[block.getFieldValue("5b")];
+ var colour_5c = colours[block.getFieldValue("5c")];
+ var colour_5d = colours[block.getFieldValue("5d")];
+ var colour_5e = colours[block.getFieldValue("5e")];
+ var colour_5f = colours[block.getFieldValue("5f")];
+ var colour_60 = colours[block.getFieldValue("60")];
+ var colour_61 = colours[block.getFieldValue("61")];
+ var colour_62 = colours[block.getFieldValue("62")];
+ var colour_63 = colours[block.getFieldValue("63")];
+ var colour_64 = colours[block.getFieldValue("64")];
+ var colour_65 = colours[block.getFieldValue("65")];
+ var colour_66 = colours[block.getFieldValue("66")];
+ var colour_67 = colours[block.getFieldValue("67")];
+ var colour_68 = colours[block.getFieldValue("68")];
+ var colour_69 = colours[block.getFieldValue("69")];
+ var colour_6a = colours[block.getFieldValue("6a")];
+ var colour_6b = colours[block.getFieldValue("6b")];
+ var colour_6c = colours[block.getFieldValue("6c")];
+ var colour_6d = colours[block.getFieldValue("6d")];
+ var colour_6e = colours[block.getFieldValue("6e")];
+ var colour_6f = colours[block.getFieldValue("6f")];
+ var colour_70 = colours[block.getFieldValue("70")];
+ var colour_71 = colours[block.getFieldValue("71")];
+ var colour_72 = colours[block.getFieldValue("72")];
+ var colour_73 = colours[block.getFieldValue("73")];
+ var colour_74 = colours[block.getFieldValue("74")];
+ var colour_75 = colours[block.getFieldValue("75")];
+ var colour_76 = colours[block.getFieldValue("76")];
+ var colour_77 = colours[block.getFieldValue("77")];
+ var colour_78 = colours[block.getFieldValue("78")];
+ var colour_79 = colours[block.getFieldValue("79")];
+ var colour_7a = colours[block.getFieldValue("7a")];
+ var colour_7b = colours[block.getFieldValue("7b")];
+ var colour_7c = colours[block.getFieldValue("7c")];
+ var colour_7d = colours[block.getFieldValue("7d")];
+ var colour_7e = colours[block.getFieldValue("7e")];
+ var colour_7f = colours[block.getFieldValue("7f")];
+ var code = 'matrix.Image("' + colour_00 + colour_01 + colour_02 + colour_03 + colour_04 + colour_05 + colour_06 + colour_07 + colour_08 + colour_09 + colour_0a + colour_0b + colour_0c + colour_0d + colour_0e + colour_0f + ':' + colour_10 + colour_11 + colour_12 + colour_13 + colour_14 + colour_15 + colour_16 + colour_17 + colour_18 + colour_19 + colour_1a + colour_1b + colour_1c + colour_1d + colour_1e + colour_1f + ':' + colour_20 + colour_21 + colour_22 + colour_23 + colour_24 + colour_25 + colour_26 + colour_27 + colour_28 + colour_29 + colour_2a + colour_2b + colour_2c + colour_2d + colour_2e + colour_2f + ':' + colour_30 + colour_31 + colour_32 + colour_33 + colour_34 + colour_35 + colour_36 + colour_37 + colour_38 + colour_39 + colour_3a + colour_3b + colour_3c + colour_3d + colour_3e + colour_3f + ':' + colour_40 + colour_41 + colour_42 + colour_43 + colour_44 + colour_45 + colour_46 + colour_47 + colour_48 + colour_49 + colour_4a + colour_4b + colour_4c + colour_4d + colour_4e + colour_4f + ':' + colour_50 + colour_51 + colour_52 + colour_53 + colour_54 + colour_55 + colour_56 + colour_57 + colour_58 + colour_59 + colour_5a + colour_5b + colour_5c + colour_5d + colour_5e + colour_5f + ':' + colour_60 + colour_61 + colour_62 + colour_63 + colour_64 + colour_65 + colour_66 + colour_67 + colour_68 + colour_69 + colour_6a + colour_6b + colour_6c + colour_6d + colour_6e + colour_6f + ':' + colour_70 + colour_71 + colour_72 + colour_73 + colour_74 + colour_75 + colour_76 + colour_77 + colour_78 + colour_79 + colour_7a + colour_7b + colour_7c + colour_7d + colour_7e + colour_7f + '")';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_image_builtins = function (block, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var dropdown_image = block.getFieldValue('image');
+ var code = 'matrix.Image.' + dropdown_image;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_get_pixel = function (block, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
+ var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
+ var code = 'matrix.get_pixel(int(' + value_x + '), int(' + value_y + '))';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_bright_point = function (_, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
+ var code = 'matrix.set_pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + ")\n";
+ return code;
+}
+
+const display_get_screen_pixel = function (_, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var code = 'matrix.get_brightness()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_get_screen_image = function (_, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var code = 'matrix.get_screenimage()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_bright_screen = function (_, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var code = 'matrix.set_brightness(' + x + ')\n';
+ return code;
+}
+
+const display_blink_rate = function (_, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var code = 'matrix.blink_rate(' + x + ')\n';
+ return code;
+}
+
+const display_clear = function (_, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var code = 'matrix.clear()\n';
+ return code;
+}
+
+const display_use_i2c_init = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var i2csub = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var row = generator.valueToCode(this, 'row', generator.ORDER_ATOMIC);
+ var column = generator.valueToCode(this, 'column', generator.ORDER_ATOMIC);
+ var code = sub + " = ssd1306.SSD1306_I2C(" + row + "," + column + "," + i2csub + ")\n";
+ return code;
+}
+
+const display_draw_4strings = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var value_text_line1 = generator.valueToCode(this, 'Text_line1', generator.ORDER_ASSIGNMENT) || '\'\'';
+ var value_text_line2 = generator.valueToCode(this, 'Text_line2', generator.ORDER_ASSIGNMENT) || '\'\'';
+ var value_text_line3 = generator.valueToCode(this, 'Text_line3', generator.ORDER_ASSIGNMENT) || '\'\'';
+ var value_text_line4 = generator.valueToCode(this, 'Text_line4', generator.ORDER_ASSIGNMENT) || '\'\'';
+ var code = varName + '.show_str(' + value_text_line1 + ',' + value_text_line2 + ',' + value_text_line3 + ',' + value_text_line4 + ')\n'
+ return code;
+}
+
+const display_line_arbitrarily = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
+ var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
+ var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);
+ var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);
+ var code = varName + '.show_line(' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', 1)\n';
+ return code;
+}
+
+const display_rect = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
+ var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
+ var value_width = generator.valueToCode(this, 'width', generator.ORDER_ATOMIC);
+ var value_height = generator.valueToCode(this, 'height', generator.ORDER_ATOMIC);
+ var checkbox_fill = this.getFieldValue("fill") == 'TRUE' ? 'True' : 'False';
+ var size = this.getFieldValue('OP');
+ var code = '';
+ switch (checkbox_fill) {
+ case "True":
+ code = varName + '.show_fill_rect(' + location_x + ', ' + location_y + ', ' + value_width + ', ' + value_height + ',' + size + ')\n';
+ break;
+ case "False":
+ code = varName + '.show_rect(' + location_x + ', ' + location_y + ', ' + value_width + ', ' + value_height + ',' + size + ')\n';
+ break;
+ }
+ return code;
+}
+
+const image_arithmetic = function (block, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var op = block.getFieldValue("OP");
+ var imga = generator.valueToCode(block, 'A', generator.ORDER_ATOMIC);
+ var imgb = generator.valueToCode(block, 'B', generator.ORDER_ATOMIC);
+ var code = '';
+ if (op == 'INTERSECTION') {
+ code = imga + '-(' + imga + '-' + imgb + ')';
+ }
+ else {
+ code = imga + op + imgb;
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_line = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
+ var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
+ var value_length = generator.valueToCode(this, 'length', generator.ORDER_ATOMIC);
+ var value_direction = this.getFieldValue("direction");
+ var code = varName + '.show_' + value_direction + '(' + location_x + ', ' + location_y + ', ' + value_length + ', 1)\n';
+ return code;
+}
+
+const display_onoff = function (_, generator) {
+ var code = (this.getFieldValue('ONOFF') == 'ON') ? '1' : '0';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const image_shift = function (block, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var op = block.getFieldValue("OP");
+ var image = generator.valueToCode(block, 'img', generator.ORDER_ATOMIC);
+ var value = generator.valueToCode(block, 'val', generator.ORDER_ATOMIC);
+ var code = image + '.shift_' + op + '(' + value + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_fill = function (_, generator) {
+ var varName = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ generator.definitions_['import_machine'] = 'import machine';
+ var key = this.getFieldValue('key');
+ var code = varName + '.show_fill(' + key + ')\n';
+ return code;
+}
+
+// export const switch = function (_, generator) {
+// var code = this.getFieldValue('flag');
+// return [code, generator.ORDER_ATOMIC];
+// }
+
+const display_tm_use_i2c_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue("key");
+ var code;
+ if (key == 'TM1650') {
+ generator.definitions_['import_tm1650'] = 'import tm1650';
+ code = v + ' = tm1650.' + key + "(" + iv + ')\n';
+ } else if (key == 'TM1637') {
+ generator.definitions_['import_tm1637'] = 'import tm1637';
+ code = v + ' = tm1637.' + key + "(" + iv + ')\n';
+ }
+ return code;
+}
+
+const display_tm1650_power = function (_, generator) {
+ var type = this.getFieldValue("TYPE");
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var stat = this.getFieldValue("STAT");
+ var code = v + '.' + type + stat + "()\n";
+ return code;
+}
+
+const display_tm1650_show_num = function (_, generator) {
+ var type = this.getFieldValue("TYPE");
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var val = generator.valueToCode(this, 'VALUE', generator.ORDER_ATOMIC);
+ var code = v + '.' + type + "_show_num(" + val + ")\n";
+ return code;
+}
+
+const display_tm1650_show_dot = function (_, generator) {
+ var type = this.getFieldValue("TYPE");
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var n = generator.valueToCode(this, 'NO', generator.ORDER_ATOMIC);
+ var stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
+ var code = v + '.' + type + "_show_dot(" + n + ", " + stat + ")\n";
+ return code;
+}
+
+const display_animate = function (_, generator) {
+ // Boolean values true and false.
+ var name = this.getFieldValue("ANIMATION");
+ var code = 'matrix.Image.' + name;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_circle = function (_, generator) {
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
+ var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
+ var value_r = generator.valueToCode(this, 'r', generator.ORDER_ATOMIC);
+ var checkbox_fill = this.getFieldValue("fill") == 'TRUE' ? 'True' : 'False';
+ var size = this.getFieldValue('OP');
+ var code = '';
+ switch (checkbox_fill) {
+ case "True":
+ code = varName + '.show_fill_circle(' + location_x + ', ' + location_y + ', ' + value_r + ', ' + size + ')\n';
+ break;
+ case "False":
+ code = varName + '.show_circle(' + location_x + ', ' + location_y + ', ' + value_r + ', ' + size + ')\n';
+ break;
+ }
+ return code;
+}
+
+const display_triangle = function (_, generator) {
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var location_x0 = generator.valueToCode(this, 'x0', generator.ORDER_ATOMIC);
+ var location_y0 = generator.valueToCode(this, 'y0', generator.ORDER_ATOMIC);
+ var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
+ var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
+ var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);
+ var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);
+ var checkbox_fill = this.getFieldValue("fill") == 'TRUE' ? 'True' : 'False';
+ var size = this.getFieldValue('OP');
+ var code = '';
+ switch (checkbox_fill) {
+ case "True":
+ code = varName + '.show_fill_triangle(' + location_x0 + ', ' + location_y0 + ', ' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', ' + size + ')\n';
+ break;
+ case "False":
+ code = varName + '.show_triangle(' + location_x0 + ', ' + location_y0 + ', ' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', ' + size + ')\n';
+ break;
+ }
+ return code;
+}
+
+const display_oled_showBitmap = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var location_x = generator.valueToCode(this, 'START_X', generator.ORDER_ATOMIC);
+ var location_y = generator.valueToCode(this, 'START_Y', generator.ORDER_ATOMIC);
+ var bmp = generator.valueToCode(this, 'bitmap_name', generator.ORDER_ATOMIC);
+ var w = generator.valueToCode(this, 'WIDTH', generator.ORDER_ATOMIC);
+ var h = generator.valueToCode(this, 'HEIGHT', generator.ORDER_ATOMIC);
+ var code = varName + '.show_bitmap(' + location_x + ', ' + location_y + ', ' + bmp + ',' + w + ',' + h + ')\n';
+ return code;
+}
+
+const display_oled_drawPixel = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var location_x = generator.valueToCode(this, 'POS_X', generator.ORDER_ATOMIC);
+ var location_y = generator.valueToCode(this, 'POS_Y', generator.ORDER_ATOMIC);
+ var code = varName + '.show_pixel(' + location_x + ', ' + location_y + ')\n';
+ return code;
+}
+
+// pe:
+const display_matrix_use_i2c_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue("key");
+ var code;
+ if (key == '32x12 Matrix') {
+ generator.definitions_['import_matrix32x12'] = 'import matrix32x12';
+ code = v + ' = matrix32x12.Matrix(' + iv + ')\n';
+ } else if (key == 'TM1637') {
+ generator.definitions_['import_tm1637'] = 'import tm1637';
+ code = v + ' = tm1637.' + key + "(" + iv + ')\n';
+ }
+ return code;
+}
+
+const display_show_image = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ generator.definitions_['import_matrix32x12'] = 'import matrix32x12';
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = v + ".set_buffer(" + data + ")\n";
+ return code;
+}
+
+const display_scroll_string_extern = function (_, generator) {
+ generator.definitions_['import_matrix32x12'] = 'import matrix32x12';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = v + ".scroll(" + data + ")\n";
+ return code;
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/display_extern.js":
+/*!***************************************************!*\
+ !*** ../micropython/generators/display_extern.js ***!
+ \***************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ display_animate: () => (/* binding */ display_animate),
+/* harmony export */ display_circle: () => (/* binding */ display_circle),
+/* harmony export */ display_color_seclet: () => (/* binding */ display_color_seclet),
+/* harmony export */ display_draw_4strings: () => (/* binding */ display_draw_4strings),
+/* harmony export */ display_fill: () => (/* binding */ display_fill),
+/* harmony export */ display_lcd_use_i2c_init: () => (/* binding */ display_lcd_use_i2c_init),
+/* harmony export */ display_line: () => (/* binding */ display_line),
+/* harmony export */ display_line_arbitrarily: () => (/* binding */ display_line_arbitrarily),
+/* harmony export */ display_matrix_extern_bright_point: () => (/* binding */ display_matrix_extern_bright_point),
+/* harmony export */ display_matrix_extern_bright_screen: () => (/* binding */ display_matrix_extern_bright_screen),
+/* harmony export */ display_matrix_extern_clear: () => (/* binding */ display_matrix_extern_clear),
+/* harmony export */ display_matrix_extern_get_pixel: () => (/* binding */ display_matrix_extern_get_pixel),
+/* harmony export */ display_matrix_extern_get_screen_pixel: () => (/* binding */ display_matrix_extern_get_screen_pixel),
+/* harmony export */ display_matrix_extern_image_builtins: () => (/* binding */ display_matrix_extern_image_builtins),
+/* harmony export */ display_matrix_extern_scroll_string: () => (/* binding */ display_matrix_extern_scroll_string),
+/* harmony export */ display_matrix_extern_scroll_string_delay: () => (/* binding */ display_matrix_extern_scroll_string_delay),
+/* harmony export */ display_matrix_extern_shift: () => (/* binding */ display_matrix_extern_shift),
+/* harmony export */ display_matrix_extern_show_frame_string: () => (/* binding */ display_matrix_extern_show_frame_string),
+/* harmony export */ display_matrix_extern_show_frame_string_delay: () => (/* binding */ display_matrix_extern_show_frame_string_delay),
+/* harmony export */ display_matrix_extern_show_image: () => (/* binding */ display_matrix_extern_show_image),
+/* harmony export */ display_matrix_extern_show_image_or_string_delay: () => (/* binding */ display_matrix_extern_show_image_or_string_delay),
+/* harmony export */ display_matrix_use_i2c_init: () => (/* binding */ display_matrix_use_i2c_init),
+/* harmony export */ display_oled_drawPixel: () => (/* binding */ display_oled_drawPixel),
+/* harmony export */ display_oled_showBitmap: () => (/* binding */ display_oled_showBitmap),
+/* harmony export */ display_oled_use_i2c_init: () => (/* binding */ display_oled_use_i2c_init),
+/* harmony export */ display_onoff: () => (/* binding */ display_onoff),
+/* harmony export */ display_rect: () => (/* binding */ display_rect),
+/* harmony export */ display_tm1650_power: () => (/* binding */ display_tm1650_power),
+/* harmony export */ display_tm1650_set_brightness: () => (/* binding */ display_tm1650_set_brightness),
+/* harmony export */ display_tm1650_show_dot: () => (/* binding */ display_tm1650_show_dot),
+/* harmony export */ display_tm1650_show_num: () => (/* binding */ display_tm1650_show_num),
+/* harmony export */ display_tm_use_i2c_init: () => (/* binding */ display_tm_use_i2c_init),
+/* harmony export */ display_triangle: () => (/* binding */ display_triangle),
+/* harmony export */ display_use_i2c_init: () => (/* binding */ display_use_i2c_init),
+/* harmony export */ extern_oled_bright_point: () => (/* binding */ extern_oled_bright_point),
+/* harmony export */ extern_oled_clear: () => (/* binding */ extern_oled_clear),
+/* harmony export */ extern_oled_get_pixel: () => (/* binding */ extern_oled_get_pixel),
+/* harmony export */ extern_oled_hvline: () => (/* binding */ extern_oled_hvline),
+/* harmony export */ extern_oled_line: () => (/* binding */ extern_oled_line),
+/* harmony export */ extern_oled_scroll_string: () => (/* binding */ extern_oled_scroll_string),
+/* harmony export */ extern_oled_scroll_string_delay: () => (/* binding */ extern_oled_scroll_string_delay),
+/* harmony export */ extern_oled_shape_rect: () => (/* binding */ extern_oled_shape_rect),
+/* harmony export */ extern_oled_shift: () => (/* binding */ extern_oled_shift),
+/* harmony export */ extern_oled_show_frame_string: () => (/* binding */ extern_oled_show_frame_string),
+/* harmony export */ extern_oled_show_frame_string_delay: () => (/* binding */ extern_oled_show_frame_string_delay),
+/* harmony export */ extern_oled_show_image: () => (/* binding */ extern_oled_show_image),
+/* harmony export */ extern_oled_show_image_or_string_delay: () => (/* binding */ extern_oled_show_image_or_string_delay),
+/* harmony export */ extern_oled_show_image_xy: () => (/* binding */ extern_oled_show_image_xy),
+/* harmony export */ extern_oled_show_string: () => (/* binding */ extern_oled_show_string),
+/* harmony export */ image_shift: () => (/* binding */ image_shift),
+/* harmony export */ lcd_backlight: () => (/* binding */ lcd_backlight),
+/* harmony export */ lcd_clear: () => (/* binding */ lcd_clear),
+/* harmony export */ lcd_print_string: () => (/* binding */ lcd_print_string),
+/* harmony export */ lcd_show_image_or_string_delay: () => (/* binding */ lcd_show_image_or_string_delay),
+/* harmony export */ matrix_extern_image_arithmetic: () => (/* binding */ matrix_extern_image_arithmetic),
+/* harmony export */ matrix_extern_image_invert: () => (/* binding */ matrix_extern_image_invert),
+/* harmony export */ tft_fill: () => (/* binding */ tft_fill),
+/* harmony export */ tft_line_arbitrarily: () => (/* binding */ tft_line_arbitrarily),
+/* harmony export */ tft_scroll_string_delay: () => (/* binding */ tft_scroll_string_delay),
+/* harmony export */ tft_show_frame_string_delay: () => (/* binding */ tft_show_frame_string_delay),
+/* harmony export */ tft_show_image_or_string_delay: () => (/* binding */ tft_show_image_or_string_delay),
+/* harmony export */ tft_show_image_xy: () => (/* binding */ tft_show_image_xy),
+/* harmony export */ tft_use_spi_init: () => (/* binding */ tft_use_spi_init)
+/* harmony export */ });
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const display_matrix_use_i2c_init = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue("key");
+ var font = '';
+ if (['mpython', 'mixgo_pe', 'mixgo_nova'].indexOf(version) >= 0) {
+ font = '0x700000'
+ } else if (['mixgo_sant'].indexOf(version) >= 0) {
+ font = '0xE00000'
+ } else {
+ font = '0x3A0000'
+ }
+ var code;
+ if (key == '32x12 Matrix') {
+ generator.definitions_['import_matrix32x12'] = 'import matrix32x12';
+ code = v + ' = matrix32x12.Matrix(' + iv + ',font_address=' + font + ')\n';
+ } else if (key == '16x8 Matrix') {
+ generator.definitions_['import_matrix16x8'] = 'import matrix16x8';
+ code = v + ' = matrix16x8.Matrix(' + iv + ')\n';
+ }
+ return code;
+}
+
+const display_matrix_extern_show_image = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = v + ".shows(" + data + ")\n";
+ return code;
+}
+
+const display_matrix_extern_show_image_or_string_delay = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
+ var op = this.getFieldValue('center');
+ var code = v + ".shows(" + data + ',space = ' + space + ',center = ' + op + ")\n";
+ return code;
+}
+
+const display_matrix_extern_show_frame_string = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = v + ".frame(" + data + ")\n";
+ return code;
+}
+
+const display_matrix_extern_show_frame_string_delay = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ var code = v + ".frame(" + data + ',delay = ' + time + ")\n";
+ return code;
+}
+
+const display_matrix_extern_scroll_string = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = v + ".scroll(" + data + ")\n";
+ return code;
+}
+
+const display_matrix_extern_scroll_string_delay = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
+ var code = v + ".scroll(" + data + ',speed =' + time + ',space = ' + space + ")\n";
+ return code;
+}
+
+const display_matrix_extern_clear = function (block, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.fill(0)\n' + v + '.show()\n';
+ return code;
+}
+
+const display_matrix_extern_shift = function (a, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var op = a.getFieldValue("OP");
+ var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);
+ var code = v + '.' + op + '(' + value + ')\n';
+ return code;
+}
+
+const display_matrix_extern_get_pixel = function (block, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
+ var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
+ var code = v + '.pixel(int(' + value_x + '), int(' + value_y + '))';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_matrix_extern_bright_point = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
+ var code = v + '.pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + ")\n" + v + '.show()\n';
+ return code;
+}
+
+const display_matrix_extern_get_screen_pixel = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.get_brightness()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_matrix_extern_bright_screen = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var code = v + '.set_brightness(' + x + ')\n';
+ return code;
+}
+
+const display_matrix_extern_image_builtins = function (block, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var dropdown_image = block.getFieldValue('image');
+ var code = v + '.' + dropdown_image;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const matrix_extern_image_arithmetic = function (a, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var op = a.getFieldValue("OP");
+ var imga = generator.valueToCode(a, 'A', generator.ORDER_ATOMIC);
+ var imgb = generator.valueToCode(a, 'B', generator.ORDER_ATOMIC);
+ var code = v + '.map_' + op + '(' + imga + ',' + imgb + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const matrix_extern_image_invert = function (a, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var imga = generator.valueToCode(a, 'A', generator.ORDER_ATOMIC);
+ var code = v + '.map_invert(' + imga + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//oled
+const display_use_i2c_init = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var i2csub = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var row = generator.valueToCode(this, 'row', generator.ORDER_ATOMIC);
+ var column = generator.valueToCode(this, 'column', generator.ORDER_ATOMIC);
+ var code = sub + " = ssd1306.SSD1306_I2C(" + row + "," + column + "," + i2csub + ")\n";
+ return code;
+}
+
+const display_draw_4strings = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var value_text_line1 = generator.valueToCode(this, 'Text_line1', generator.ORDER_ASSIGNMENT) || '\'\'';
+ var value_text_line2 = generator.valueToCode(this, 'Text_line2', generator.ORDER_ASSIGNMENT) || '\'\'';
+ var value_text_line3 = generator.valueToCode(this, 'Text_line3', generator.ORDER_ASSIGNMENT) || '\'\'';
+ var value_text_line4 = generator.valueToCode(this, 'Text_line4', generator.ORDER_ASSIGNMENT) || '\'\'';
+ var code = varName + '.show_str(' + value_text_line1 + ',' + value_text_line2 + ',' + value_text_line3 + ',' + value_text_line4 + ')\n'
+ return code;
+}
+
+const display_line_arbitrarily = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
+ var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
+ var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);
+ var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);
+ var code = varName + '.show_line(' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', 1)\n';
+ return code;
+}
+
+const display_rect = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
+ var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
+ var value_width = generator.valueToCode(this, 'width', generator.ORDER_ATOMIC);
+ var value_height = generator.valueToCode(this, 'height', generator.ORDER_ATOMIC);
+ var checkbox_fill = this.getFieldValue("fill") == 'TRUE' ? 'True' : 'False';
+ var size = this.getFieldValue('OP');
+ switch (checkbox_fill) {
+ case "True":
+ var code = varName + '.show_fill_rect(' + location_x + ', ' + location_y + ', ' + value_width + ', ' + value_height + ',' + size + ')\n';
+ return code;
+ case "False":
+ var code = varName + '.show_rect(' + location_x + ', ' + location_y + ', ' + value_width + ', ' + value_height + ',' + size + ')\n';
+ return code;
+ }
+}
+
+
+const display_line = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
+ var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
+ var value_length = generator.valueToCode(this, 'length', generator.ORDER_ATOMIC);
+ var value_direction = this.getFieldValue("direction");
+ var code = varName + '.show_' + value_direction + '(' + location_x + ', ' + location_y + ', ' + value_length + ', 1)\n';
+ return code;
+}
+
+const display_onoff = function (_, generator) {
+ var code = (this.getFieldValue('ONOFF') == 'ON') ? '1' : '0';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const image_shift = function (a, generator) {
+ generator.definitions_['import_matrix'] = 'import matrix';
+ var op = a.getFieldValue("OP");
+ var image = generator.valueToCode(a, 'img', generator.ORDER_ATOMIC);
+ var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);
+ var code = image + '.shift_' + op + '(' + value + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_fill = function (_, generator) {
+ var varName = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ generator.definitions_['import_machine'] = 'import machine';
+ var key = this.getFieldValue('key');
+ var code = varName + '.show_fill(' + key + ')\n';
+ return code;
+}
+
+// export const switch = function (_, generator) {
+// var code = this.getFieldValue('flag');
+// return [code, generator.ORDER_ATOMIC];
+// };
+
+const display_animate = function (_, generator) {
+ // Boolean values true and false.
+ var name = this.getFieldValue("ANIMATION");
+ var code = 'matrix.Image.' + name;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_circle = function (_, generator) {
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
+ var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
+ var value_r = generator.valueToCode(this, 'r', generator.ORDER_ATOMIC);
+ var checkbox_fill = this.getFieldValue("fill") == 'TRUE' ? 'True' : 'False';
+ var size = this.getFieldValue('OP');
+ switch (checkbox_fill) {
+ case "True":
+ var code = varName + '.show_fill_circle(' + location_x + ', ' + location_y + ', ' + value_r + ', ' + size + ')\n';
+ return code;
+ case "False":
+ var code = varName + '.show_circle(' + location_x + ', ' + location_y + ', ' + value_r + ', ' + size + ')\n';
+ return code;
+ }
+}
+
+const display_triangle = function (_, generator) {
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var location_x0 = generator.valueToCode(this, 'x0', generator.ORDER_ATOMIC);
+ var location_y0 = generator.valueToCode(this, 'y0', generator.ORDER_ATOMIC);
+ var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
+ var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
+ var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);
+ var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);
+ var checkbox_fill = this.getFieldValue("fill") == 'TRUE' ? 'True' : 'False';
+ var size = this.getFieldValue('OP');
+ switch (checkbox_fill) {
+ case "True":
+ var code = varName + '.show_fill_triangle(' + location_x0 + ', ' + location_y0 + ', ' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', ' + size + ')\n';
+ return code;
+ case "False":
+ var code = varName + '.show_triangle(' + location_x0 + ', ' + location_y0 + ', ' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', ' + size + ')\n';
+ return code;
+ }
+}
+
+const display_oled_showBitmap = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var location_x = generator.valueToCode(this, 'START_X', generator.ORDER_ATOMIC);
+ var location_y = generator.valueToCode(this, 'START_Y', generator.ORDER_ATOMIC);
+ var bmp = generator.valueToCode(this, 'bitmap_name', generator.ORDER_ATOMIC);
+ var w = generator.valueToCode(this, 'WIDTH', generator.ORDER_ATOMIC);
+ var h = generator.valueToCode(this, 'HEIGHT', generator.ORDER_ATOMIC);
+ var code = varName + '.show_bitmap(' + location_x + ', ' + location_y + ', ' + bmp + ',' + w + ',' + h + ')\n';
+ return code;
+}
+
+const display_oled_drawPixel = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_ssd1306'] = 'import ssd1306';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var location_x = generator.valueToCode(this, 'POS_X', generator.ORDER_ATOMIC);
+ var location_y = generator.valueToCode(this, 'POS_Y', generator.ORDER_ATOMIC);
+ var code = varName + '.show_pixel(' + location_x + ', ' + location_y + ')\n';
+ return code;
+}
+
+//tm1650
+const display_tm_use_i2c_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue("key");
+ var code;
+ if (key == 'TM1650') {
+ generator.definitions_['import_tm1650'] = 'import tm1650';
+ code = v + ' = tm1650.' + key + "(" + iv + ')\n';
+ } else if (key == 'TM1637') {
+ generator.definitions_['import_tm1637'] = 'import tm1637';
+ code = v + ' = tm1637.' + key + "(" + iv + ')\n';
+ }
+ return code;
+}
+
+const display_tm1650_power = function (_, generator) {
+ // var type = this.getFieldValue("TYPE");
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var stat = this.getFieldValue("STAT");
+ var code = v + '.' + stat + "()\n";
+ return code;
+}
+
+const display_tm1650_show_num = function (_, generator) {
+ // var type = this.getFieldValue("TYPE");
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var val = generator.valueToCode(this, 'VALUE', generator.ORDER_ATOMIC);
+ var code = v + ".shownum(" + val + ")\n";
+ return code;
+}
+
+const display_tm1650_show_dot = function (_, generator) {
+ // var type = this.getFieldValue("TYPE");
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var n = generator.valueToCode(this, 'NO', generator.ORDER_ATOMIC);
+ var stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
+ var code = v + '.showDP(' + n + ", " + stat + ")\n";
+ return code;
+}
+
+const display_tm1650_set_brightness = function (_, generator) {
+ // var type = this.getFieldValue("TYPE");
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var val = generator.valueToCode(this, 'VALUE', generator.ORDER_ATOMIC);
+ var code = v + ".intensity(" + val + ")\n";
+ return code;
+}
+
+const tft_use_spi_init = function (_, generator) {
+ generator.definitions_['import_st7789'] = 'import st7789';
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var font = '';
+ if (['mpython', 'mixgo_pe', 'mixgo_nova'].indexOf(version) >= 0) {
+ font = '0x700000'
+ } else if (['mixgo_sant'].indexOf(version) >= 0) {
+ font = '0xE00000'
+ } else {
+ font = '0x3A0000'
+ }
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var sv = generator.valueToCode(this, 'SPISUB', generator.ORDER_ATOMIC);
+ var pv = generator.valueToCode(this, 'PINCS', generator.ORDER_ATOMIC);
+ var dv = generator.valueToCode(this, 'PINDC', generator.ORDER_ATOMIC);
+ var w = generator.valueToCode(this, 'WIDTH', generator.ORDER_ATOMIC);
+ var h = generator.valueToCode(this, 'HEIGHT', generator.ORDER_ATOMIC);
+ var op = this.getFieldValue('rotate');
+ var code = v + ' = st7789.ST7789(' + sv + ',' + w + ',' + h + ',dc_pin=' + dv + ',cs_pin=' + pv + ',rotation=' + op + ',font_address=' + font + ')\n';
+ return code;
+}
+
+const tft_show_image_xy = function (_, generator) {
+ generator.definitions_['import_st7789'] = 'import st7789';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ if (color.slice(0, 2) == "0x") {
+ var code = v + ".image(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',color=' + color + ")\n";
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = v + ".image(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',color=0x' + rgb565.toString(16) + ")\n";
+ }
+ return code;
+}
+
+const display_color_seclet = function (_, generator) {
+ var colour = this.getFieldValue('COLOR');
+ var code = '0x' + colour.slice(1) + ''
+ var rgb565 = (code & 0xf80000) >> 8 | (code & 0xfc00) >> 5 | (code & 0xff) >> 3
+ return ['0x' + rgb565.toString(16), generator.ORDER_ATOMIC];
+}
+
+const tft_show_image_or_string_delay = function (_, generator) {
+ generator.definitions_['import_st7789'] = 'import st7789';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var op = this.getFieldValue('center');
+ if (color.slice(0, 2) == "0x") {
+ var code = v + ".shows(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ',color=' + color + ")\n";
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = v + ".shows(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ',color=0x' + rgb565.toString(16) + ")\n";
+ }
+ return code;
+}
+
+const tft_show_frame_string_delay = function (_, generator) {
+ generator.definitions_['import_st7789'] = 'import st7789';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ if (color.slice(0, 2) == "0x") {
+ var code = v + ".frame(" + data + ',size = ' + size + ',delay = ' + time + ',color=' + color + ")\n";
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = v + ".frame(" + data + ',size = ' + size + ',delay = ' + time + ',color=0x' + rgb565.toString(16) + ")\n";
+ }
+ return code;
+}
+
+const tft_scroll_string_delay = function (_, generator) {
+ generator.definitions_['import_st7789'] = 'import st7789';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ if (color.slice(0, 2) == "0x") {
+ var code = v + ".scroll(" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ',color=' + color + ")\n";
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = v + ".scroll(" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ',color=0x' + rgb565.toString(16) + ")\n";
+ }
+ return code;
+}
+
+const tft_fill = function (_, generator) {
+ generator.definitions_['import_st7789'] = 'import st7789';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = v + '.fill(st7789.' + key + ')\n';
+ return code;
+}
+
+const tft_line_arbitrarily = function (_, generator) {
+ generator.definitions_['import_st7789'] = 'import st7789';
+ var varName = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
+ var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
+ var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);
+ var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ if (color.slice(0, 2) == "0x") {
+ var code = varName + '.line(' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', color=' + color + ')\n';
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = varName + '.line(' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', color=0x' + rgb565.toString(16) + ')\n';
+ }
+ return code;
+}
+
+const display_lcd_use_i2c_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue("key");
+ var addr = generator.valueToCode(this, 'ADDR', generator.ORDER_ATOMIC);
+ var code;
+ generator.definitions_['import_i2clcd'] = 'import i2clcd';
+ code = v + ' = i2clcd.LCD' + "(" + iv + ',lcd_width=' + key + ',i2c_addr=' + addr +')\n';
+ return code;
+}
+
+const lcd_show_image_or_string_delay = function (_, generator) {
+ generator.definitions_['import_i2clcd'] = 'import i2clcd';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var op = this.getFieldValue('center');
+ var code = v + ".shows(" + data + ',column = ' + x + ',line = ' + y + ',center = ' + op + ")\n";
+ return code;
+}
+
+const lcd_print_string = function (_, generator) {
+ generator.definitions_['import_i2clcd'] = 'import i2clcd';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var delay = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ var code = v + ".print(" + data + ',column = ' + x + ',line = ' + y + ',delay=' + delay + ")\n";
+ return code;
+}
+
+const lcd_backlight = function (_, generator) {
+ generator.definitions_['import_i2clcd'] = 'import i2clcd';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = v + '.backlight(' + key + ')\n';
+ return code;
+}
+
+const lcd_clear = function (block, generator) {
+ generator.definitions_['import_i2clcd'] = 'import i2clcd';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.clear()\n';
+ return code;
+}
+
+const display_oled_use_i2c_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
+ var addr = generator.valueToCode(this, 'ADDR', generator.ORDER_ATOMIC);
+ var m =this.getFieldValue("driver");
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var font = '';
+ if (['mpython', 'mixgo_pe', 'mixgo_nova'].indexOf(version) >= 0) {
+ font = '0x700000'
+ } else if (['mixgo_sant'].indexOf(version) >= 0) {
+ font = '0xE00000'
+ } else {
+ font = '0x3A0000'
+ }
+ var code;
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ code = v + ' = oled128x64.OLED' + "(" + iv + ',address=' + addr + ',font_address=' + font + ',types='+m+')\n';
+
+ return code;
+}
+
+const extern_oled_show_image = function (_, generator) {
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = v + ".image(" + data + ")\n";
+ return code;
+}
+
+const extern_oled_show_image_xy = function (_, generator) {
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var code = v + ".image(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ")\n";
+ return code;
+}
+
+const extern_oled_show_string = function (_, generator) {
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = v + ".shows(" + data + ")\n";
+ return code;
+}
+
+const extern_oled_show_image_or_string_delay = function (_, generator) {
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
+ var op = this.getFieldValue('center');
+ var code = v + ".shows(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ")\n";
+ return code;
+}
+
+const extern_oled_show_frame_string = function (_, generator) {
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = v + ".frame(" + data + ")\n";
+ return code;
+}
+
+const extern_oled_show_frame_string_delay = function (_, generator) {
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ var code = v + ".frame(" + data + ',size = ' + size + ',delay = ' + time + ")\n";
+ return code;
+}
+
+const extern_oled_scroll_string = function (_, generator) {
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = v + ".scroll(" + data + ")\n";
+ return code;
+}
+
+const extern_oled_scroll_string_delay = function (_, generator) {
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
+ var code = v + ".scroll(" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ")\n";
+ return code;
+}
+
+const extern_oled_clear = function (block, generator) {
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.fill(0)\n' + v + '.show()\n';
+ return code;
+}
+
+const extern_oled_shift = function (a, generator) {
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var op = a.getFieldValue("OP");
+ var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);
+ var code = v + '.' + op + '(' + value + ')\n';
+ return code;
+}
+
+const extern_oled_get_pixel = function (block, generator) {
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
+ var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
+ var code = v + '.pixel(int(' + value_x + '), int(' + value_y + '))';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const extern_oled_bright_point = function (_, generator) {
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
+ var code = v + '.pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + ")\n" + v + '.show()\n';
+ return code;
+}
+
+const extern_oled_shape_rect = function (block, generator) {
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
+ var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
+ var w = generator.valueToCode(block, 'w', generator.ORDER_ATOMIC);
+ var h = generator.valueToCode(block, 'h', generator.ORDER_ATOMIC);
+ var state = block.getFieldValue('state');
+ var shape = block.getFieldValue('shape');
+ var code = v + '.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', ' + state + ')\n' + v + '.show()\n';
+ return code;
+}
+
+const extern_oled_hvline = function (block, generator) { //水平线
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
+ var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
+ var var_length = generator.valueToCode(block, 'length', generator.ORDER_ATOMIC);
+ var state = block.getFieldValue('state');
+ var hv = block.getFieldValue('dir_h_v');
+ var code = v + '.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', ' + state + ')\n' + v + '.show()\n';
+ return code;
+}
+
+const extern_oled_line = function (block, generator) {
+ generator.definitions_['import_oled128x64'] = 'import oled128x64';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var x1 = generator.valueToCode(block, 'x1', generator.ORDER_ATOMIC);
+ var y1 = generator.valueToCode(block, 'y1', generator.ORDER_ATOMIC);
+ var x2 = generator.valueToCode(block, 'x2', generator.ORDER_ATOMIC);
+ var y2 = generator.valueToCode(block, 'y2', generator.ORDER_ATOMIC);
+ var state = block.getFieldValue('state');
+ var code = v + '.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', ' + state + ')\n' + v + '.show()\n';
+ return code;
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/display_onboard.js":
+/*!****************************************************!*\
+ !*** ../micropython/generators/display_onboard.js ***!
+ \****************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ bitbot_display_image_create: () => (/* binding */ bitbot_display_image_create),
+/* harmony export */ display_bright_point: () => (/* binding */ display_bright_point),
+/* harmony export */ display_bright_screen: () => (/* binding */ display_bright_screen),
+/* harmony export */ display_clear: () => (/* binding */ display_clear),
+/* harmony export */ display_get_pixel: () => (/* binding */ display_get_pixel),
+/* harmony export */ display_get_screen_pixel: () => (/* binding */ display_get_screen_pixel),
+/* harmony export */ display_image_builtins: () => (/* binding */ display_image_builtins),
+/* harmony export */ display_image_builtins_all: () => (/* binding */ display_image_builtins_all),
+/* harmony export */ display_image_create: () => (/* binding */ display_image_create),
+/* harmony export */ display_scroll_string: () => (/* binding */ display_scroll_string),
+/* harmony export */ display_scroll_string_delay: () => (/* binding */ display_scroll_string_delay),
+/* harmony export */ display_shift: () => (/* binding */ display_shift),
+/* harmony export */ display_show_frame_string: () => (/* binding */ display_show_frame_string),
+/* harmony export */ display_show_frame_string_delay: () => (/* binding */ display_show_frame_string_delay),
+/* harmony export */ display_show_image: () => (/* binding */ display_show_image),
+/* harmony export */ display_show_image_or_string_delay: () => (/* binding */ display_show_image_or_string_delay),
+/* harmony export */ draw_pointer: () => (/* binding */ draw_pointer),
+/* harmony export */ image_arithmetic: () => (/* binding */ image_arithmetic),
+/* harmony export */ image_invert: () => (/* binding */ image_invert),
+/* harmony export */ mixbot_display_bright_screen: () => (/* binding */ mixbot_display_bright_screen),
+/* harmony export */ mixbot_display_get_ambientbright: () => (/* binding */ mixbot_display_get_ambientbright),
+/* harmony export */ mixbot_display_get_screen_pixel: () => (/* binding */ mixbot_display_get_screen_pixel),
+/* harmony export */ mixbot_display_image_create: () => (/* binding */ mixbot_display_image_create),
+/* harmony export */ mixbot_display_rotate: () => (/* binding */ mixbot_display_rotate),
+/* harmony export */ mixgo_display_image_create_new: () => (/* binding */ mixgo_display_image_create_new),
+/* harmony export */ mixgome_display_font: () => (/* binding */ mixgome_display_font),
+/* harmony export */ mixgome_display_image_create: () => (/* binding */ mixgome_display_image_create),
+/* harmony export */ mixgomini_display_image_create: () => (/* binding */ mixgomini_display_image_create),
+/* harmony export */ mpython_display_hvline: () => (/* binding */ mpython_display_hvline),
+/* harmony export */ mpython_display_line: () => (/* binding */ mpython_display_line),
+/* harmony export */ mpython_display_shape_rect: () => (/* binding */ mpython_display_shape_rect),
+/* harmony export */ mpython_pbm_image: () => (/* binding */ mpython_pbm_image),
+/* harmony export */ onboard_oled_bright_point: () => (/* binding */ onboard_oled_bright_point),
+/* harmony export */ onboard_oled_scroll_string_delay: () => (/* binding */ onboard_oled_scroll_string_delay),
+/* harmony export */ onboard_oled_show_frame_string_delay: () => (/* binding */ onboard_oled_show_frame_string_delay),
+/* harmony export */ onboard_oled_show_image: () => (/* binding */ onboard_oled_show_image),
+/* harmony export */ onboard_oled_show_image_or_string_delay: () => (/* binding */ onboard_oled_show_image_or_string_delay),
+/* harmony export */ onboard_oled_show_image_xy: () => (/* binding */ onboard_oled_show_image_xy),
+/* harmony export */ onboard_oled_show_string: () => (/* binding */ onboard_oled_show_string),
+/* harmony export */ onboard_tft_bright_point: () => (/* binding */ onboard_tft_bright_point),
+/* harmony export */ onboard_tft_bright_screen: () => (/* binding */ onboard_tft_bright_screen),
+/* harmony export */ onboard_tft_clear: () => (/* binding */ onboard_tft_clear),
+/* harmony export */ onboard_tft_clock_clear: () => (/* binding */ onboard_tft_clock_clear),
+/* harmony export */ onboard_tft_clock_draw: () => (/* binding */ onboard_tft_clock_draw),
+/* harmony export */ onboard_tft_clock_get_rtctime: () => (/* binding */ onboard_tft_clock_get_rtctime),
+/* harmony export */ onboard_tft_clock_init: () => (/* binding */ onboard_tft_clock_init),
+/* harmony export */ onboard_tft_clock_set_time: () => (/* binding */ onboard_tft_clock_set_time),
+/* harmony export */ onboard_tft_display_hvline: () => (/* binding */ onboard_tft_display_hvline),
+/* harmony export */ onboard_tft_display_line: () => (/* binding */ onboard_tft_display_line),
+/* harmony export */ onboard_tft_display_shape_circle: () => (/* binding */ onboard_tft_display_shape_circle),
+/* harmony export */ onboard_tft_display_shape_rect: () => (/* binding */ onboard_tft_display_shape_rect),
+/* harmony export */ onboard_tft_fill: () => (/* binding */ onboard_tft_fill),
+/* harmony export */ onboard_tft_get_pixel: () => (/* binding */ onboard_tft_get_pixel),
+/* harmony export */ onboard_tft_get_screen_pixel: () => (/* binding */ onboard_tft_get_screen_pixel),
+/* harmony export */ onboard_tft_scroll_string: () => (/* binding */ onboard_tft_scroll_string),
+/* harmony export */ onboard_tft_scroll_string_delay: () => (/* binding */ onboard_tft_scroll_string_delay),
+/* harmony export */ onboard_tft_shift: () => (/* binding */ onboard_tft_shift),
+/* harmony export */ onboard_tft_show_frame_string: () => (/* binding */ onboard_tft_show_frame_string),
+/* harmony export */ onboard_tft_show_frame_string_delay: () => (/* binding */ onboard_tft_show_frame_string_delay),
+/* harmony export */ onboard_tft_show_image: () => (/* binding */ onboard_tft_show_image),
+/* harmony export */ onboard_tft_show_image_or_string_delay: () => (/* binding */ onboard_tft_show_image_or_string_delay),
+/* harmony export */ onboard_tft_show_image_xy: () => (/* binding */ onboard_tft_show_image_xy)
+/* harmony export */ });
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const display_show_image = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ if (version == "educore"){
+ generator.definitions_['import_' + version + 'oled'] = "from " + version + " import oled";
+ var code = "oled.print(" + data + ")\n";
+ }else{
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var code = "onboard_matrix.shows(" + data + ")\n";
+ }
+ return code;
+}
+
+const display_show_image_or_string_delay = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
+ var op = this.getFieldValue('center');
+ if (version == "mixgo_sant" || version == "mixgo_nova") {
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var code = "onboard_tft.shows(" + data + ",space = " + space + ',center = ' + op + ")\n";
+ return code;
+ }else if (version == "educore"){
+ generator.definitions_['import_' + version + 'oled'] = "from " + version + " import oled";
+ var code = "oled.print(" + data + ',space = ' + space + ',center = ' + op + ")\n";
+ }
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var code = "onboard_matrix.shows(" + data + ',space = ' + space + ',center = ' + op + ")\n";
+ return code;
+}
+
+const display_show_frame_string = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ if (version == 'mpython' || version == 'educore') {
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_oled.frame(" + data + ")\n";
+ } else {
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_matrix.frame(" + data + ")\n";
+ }
+ return code;
+}
+
+const display_show_frame_string_delay = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ if (version == 'mpython' || version == 'educore') {
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_oled.frame(" + data + ',delay = ' + time + ")\n";
+ } else {
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var code = "onboard_matrix.frame(" + data + ',delay = ' + time + ")\n";
+ }
+ return code;
+}
+
+const display_scroll_string = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ if (version == 'mpython'|| version == 'educore') {
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_oled.scroll(" + data + ")\n";
+ } else {
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_matrix.scroll(" + data + ")\n";
+ }
+ return code;
+}
+
+const display_scroll_string_delay = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
+ if (version == 'mpython'|| version == 'educore') {
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var code = "onboard_oled.scroll(" + data + ',speed =' + time + ',space = ' + space + ")\n";
+ }else{
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var code = "onboard_matrix.scroll(" + data + ',speed =' + time + ',space = ' + space + ")\n";
+ }
+ return code;
+}
+
+const display_image_builtins = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var dropdown_image = block.getFieldValue('image');
+ var code = 'onboard_matrix.' + dropdown_image;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_image_builtins_all = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var dropdown_image = block.getFieldValue('image');
+ var code = 'onboard_matrix.' + dropdown_image;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_image_create = function (block, generator) {
+ var colours = {
+ "#000000": "0",
+ //"#440000": "1",
+ //"#660000": "2",
+ //"#880000": "3",
+ //"#aa0000": "4",
+ //"#bb0000": "5",
+ //"#cc0000": "6",
+ //"#dd0000": "7",
+ //"#ee0000": "8",
+ "#ff0000": "1"
+ }
+ function pad(num) {
+ let newNum = '';
+ if (num.length % 2 === 1) {
+ num = '0' + num;
+ }
+ if (num.length < 8) {
+ let k = 8 - num.length
+ for (let i = 1; i <= k; i++) {
+ num = '0' + num;
+ }
+ }
+
+ for (let i = 1; i <= num.length; i++)
+ if (i % 2 === 0 && i !== num.length)
+ newNum = newNum + num[i - 1] + ',0x';
+ else
+ newNum += num[i - 1];
+ return '0x' + newNum;
+ }
+ let colorList = [];
+ for (let i = 0; i < 12; i++) {
+ let colorRow = '';
+ let colorNum = 0;
+ let correct = 0;
+
+ for (let j = 0; j < 32; j++) {
+ if (j < 8) {
+ correct = 7 - j
+ }
+ else if (j < 16) {
+ correct = 23 - j
+ }
+ else if (j < 24) {
+ correct = 39 - j
+ }
+ else if (j < 32) {
+ correct = 55 - j
+ }
+ colorNum += Number(colours[block.getFieldValue(i + '-' + j)]) * Math.pow(2, 31 - correct);
+
+ }
+ colorRow += pad(colorNum.toString(16));
+ colorList.unshift(colorRow);
+ }
+ let codelist = [];
+ for (let i = 0; i < colorList.length; i++) {
+ codelist[i] = colorList[colorList.length - 1 - i];
+ }
+ //var code = "bytearray(b'" + colorList.join('') + "')";
+ var code = '[' + codelist + ']';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_clear = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ if (version == 'mpython') {
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var code = 'onboard_oled.fill(0)\n' + 'onboard_oled.show()\n';
+ }
+ else {
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var code = 'onboard_matrix.fill(0)\n' + 'onboard_matrix.show()\n';
+ }
+ return code;
+}
+
+const image_arithmetic = function (a, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var op = a.getFieldValue("OP");
+ var imga = generator.valueToCode(a, 'A', generator.ORDER_ATOMIC);
+ var imgb = generator.valueToCode(a, 'B', generator.ORDER_ATOMIC);
+ var code = 'onboard_matrix.map_' + op + '(' + imga + ',' + imgb + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const image_invert = function (a, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var imga = generator.valueToCode(a, 'A', generator.ORDER_ATOMIC);
+ var code = 'onboard_matrix.map_invert(' + imga + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_shift = function (a, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ if (version == 'mpython') {
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var op = a.getFieldValue("OP");
+ var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);
+ var code = 'onboard_oled.' + op + '(' + value + ')\n';
+ } else {
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var op = a.getFieldValue("OP");
+ var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);
+ var code = 'onboard_matrix.' + op + '(' + value + ')\n';
+ }
+ return code;
+}
+
+// export const onboard_oled_shift = function (a) {
+// var version = Boards.getSelectedBoardKey().split(':')[2]
+
+// return code;
+// };
+
+const display_get_pixel = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ if (version == 'mpython') {
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
+ var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
+ var code = 'onboard_oled.pixel(int(' + value_x + '), int(' + value_y + '))';
+ } else {
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
+ var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
+ var code = 'onboard_matrix.pixel(int(' + value_x + '), int(' + value_y + '))';
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_bright_point = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
+ var code = 'onboard_matrix.pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + ")\n" + 'onboard_matrix.show()\n';
+ return code;
+}
+
+const display_get_screen_pixel = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var code = 'onboard_matrix.get_brightness()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const display_bright_screen = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var code = 'onboard_matrix.set_brightness(' + x + ')\n';
+ return code;
+}
+
+//mixgo_me onboard_matrix below:
+
+const mixgome_display_image_create = function (block, generator) {
+ var colours = {
+ "#000000": "0",
+ "#ff0000": "1"
+ }
+ function pad(num) {
+ let newNum = '';
+ if (num.length % 2 === 1) {
+ num = '0' + num;
+ }
+
+ for (let i = 1; i <= num.length; i++)
+ if (i % 2 === 0 && i !== num.length)
+ newNum = newNum + num[i - 1] + '\\x';
+ else
+ newNum += num[i - 1];
+ return '\\x' + newNum;
+ }
+ let colorList = [];
+ for (let i = 0; i < 5; i++) {
+ let colorRow = '';
+ let colorNum = 0;
+ for (let j = 0; j < 8; j++) {
+ colorNum += Number(colours[block.getFieldValue((4 - i) + '-' + j)]) * Math.pow(2, j);
+ }
+ colorRow += pad(colorNum.toString(16));
+ colorList.unshift(colorRow);
+ }
+
+ var code = "bytearray(b'" + colorList.join('') + "')";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const mixgomini_display_image_create = function (block, generator) {
+ var blinkColor = '#ff0000';
+ var code = '';
+ for (let i = 0; i < 12; i++) {
+ let value = 0;
+ for (let j = 0; j < 8; j++) {
+ if (block.getFieldValue(`${j}-${i}`) !== blinkColor) {
+ continue;
+ }
+ value += 1 << j;
+ }
+ let temp = value.toString(16);
+ code += '\\x' + Array(2 - temp.length).fill(0).join('') + temp;
+ }
+ code = `bytearray(b'${code}')`;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const mixgome_display_font = function (a, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var op = a.getFieldValue("OP");
+ var code = 'onboard_matrix.font(' + op + ')\n';
+ return code;
+}
+
+const mixgo_display_image_create_new = function (block, generator) {
+ var colours = {
+ "#000000": "0",
+ "#ff0000": "1"
+ }
+ function pad(num) {
+ let newNum = '';
+ if (num.length % 2 === 1) {
+ num = '0' + num;
+ }
+ while (num.length < 4) {
+ num = '0' + num;
+ }
+ for (let i = 1; i <= num.length; i++)
+ if (i % 2 === 0 && i !== num.length)
+ newNum = newNum + num[i - 1] + '\\x';
+ else
+ newNum += num[i - 1];
+ return '\\x' + newNum;
+ }
+ let colorList = [];
+ for (let i = 0; i < 8; i++) {
+ let colorRow = '';
+ let colorNum = 0;
+ for (let j = 0; j < 16; j++) {
+ var c = (j + 8) % 16
+ colorNum += Number(colours[block.getFieldValue((7 - i) + '-' + c)]) * Math.pow(2, j);
+ }
+ colorRow += pad(colorNum.toString(16));
+ colorList.unshift(colorRow);
+ }
+
+ var code = "bytearray(b'" + colorList.join('') + "')";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//mpython
+
+const mpython_pbm_image = function (block, generator) {
+ var code = block.getFieldValue('path');
+ var sort = ['expression_picture', 'eye_picture', 'informatio_picture', 'object_picture', 'progres_picture']
+ var img = [["Angry", "Bored", "Confused", "Happy", "Heart", "Paper", "Rock", "Sad", "Scissors", "Silly", "Sleep", "Small_heart", "Small_paper", "Small_rock", "Small_scissors", "Smile", "Surprise", "Wonderful"], ["Eyes_Angry", "Awake", "Black_eye", "Bottom_left", "Bottom_right", "Crazy_1", "Crazy_2", "Disappointed", "Dizzy", "Down", "Hurt", "Evil", "Knocked_out", "Love", "Middle_left", "Middle_right", "Neutral", "Nuclear", "Pinch_left", "Pinch_middle", "Pinch_right", "Tear", "Tired_middle", "Tired_left", "Tired_right", "Toxic", "Up", "Winking"], ["Accept", "Backward", "Decline", "Forward", "Left", "No_go", "Question_mark", "Right", "Stop_1", "Stop_2", "Thumbs_down", "Thumbs_up", "Warning"], ["Bomb", "Boom", "Fire", "Flowers", "Forest", "Lightning", "Light_off", "Light_on", "Night", "Pirate", "Snow", "Target"], ["Bar_0", "Bar_1", "Bar_2", "Bar_3", "Bar_4", "Dial_0", "Dial_1", "Dial_2", "Dial_3", "Dial_4", "Dots_0", "Dots_1", "Dots_2", "Dots_3", "Hourglass_0", "Hourglass_1", "Hourglass_2", "Timer_0", "Timer_1", "Timer_2", "Timer_3", "Timer_4", "Water_level_0", "Water_level_1", "Water_level_2", "Water_level_3"]]
+ for (var i = 0; i < 5; i++) {
+ if (img[i].indexOf(code) != -1) {
+ var tag = i;
+ break;
+ }
+ }
+ generator.definitions_['import_' + sort[tag] + '_' + code] = "from " + sort[tag] + " import " + code;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const onboard_oled_show_image = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_oled.image(" + data + ")\n";
+ return code;
+}
+
+const onboard_oled_show_image_xy = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_oled.image(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ")\n";
+ return code;
+}
+
+const onboard_oled_show_string = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_oled.shows(" + data + ")\n";
+ return code;
+}
+
+const onboard_oled_show_image_or_string_delay = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
+ var op = this.getFieldValue('center');
+ var code = "onboard_oled.shows(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ")\n";
+ return code;
+}
+
+const onboard_oled_show_frame_string_delay = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_oled.frame(" + data + ',size = ' + size + ',delay = ' + time + ")\n";
+ return code;
+}
+
+const onboard_oled_scroll_string_delay = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_oled.scroll(" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ")\n";
+ return code;
+}
+
+const onboard_oled_bright_point = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
+ var code = 'onboard_oled.pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + ")\n" + 'onboard_oled.show()\n';
+ return code;
+}
+
+const mpython_display_shape_rect = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
+ var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
+ var w = generator.valueToCode(block, 'w', generator.ORDER_ATOMIC);
+ var h = generator.valueToCode(block, 'h', generator.ORDER_ATOMIC);
+ var state = block.getFieldValue('state');
+ var shape = block.getFieldValue('shape');
+ var code = 'onboard_oled.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', ' + state + ')\n' + 'onboard_oled.show()\n';
+ return code;
+}
+
+const mpython_display_hvline = function (block, generator) { //水平线
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
+ var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
+ var var_length = generator.valueToCode(block, 'length', generator.ORDER_ATOMIC);
+ var state = block.getFieldValue('state');
+ var hv = block.getFieldValue('dir_h_v');
+ var code = 'onboard_oled.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', ' + state + ')\n' + 'onboard_oled.show()\n';
+ return code;
+}
+
+const mpython_display_line = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
+ var x1 = generator.valueToCode(block, 'x1', generator.ORDER_ATOMIC);
+ var y1 = generator.valueToCode(block, 'y1', generator.ORDER_ATOMIC);
+ var x2 = generator.valueToCode(block, 'x2', generator.ORDER_ATOMIC);
+ var y2 = generator.valueToCode(block, 'y2', generator.ORDER_ATOMIC);
+ var state = block.getFieldValue('state');
+ var code = 'onboard_oled.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', ' + state + ')\n' + 'onboard_oled.show()\n';
+ return code;
+}
+
+//mixbot onboard_matrix below:
+
+const mixbot_display_image_create = function (block, generator) {
+ var colours = {
+ "#000000": "0",
+ "#ff0000": "1"
+ }
+ function pad(num) {
+ let newNum = '';
+ if (num.length % 2 === 1) {
+ num = '0' + num;
+ }
+
+ for (let i = 1; i <= num.length; i++)
+ if (i % 2 === 0 && i !== num.length)
+ newNum = newNum + num[i - 1] + '\\x';
+ else
+ newNum += num[i - 1];
+ return '\\x' + newNum;
+ }
+ let colorList = [];
+ for (let i = 0; i < 5; i++) {
+ let colorRow = '';
+ let colorNum = 0;
+ for (let j = 0; j < 5; j++) {
+ colorNum += Number(colours[block.getFieldValue((4 - i) + '-' + j)]) * Math.pow(2, j);
+ }
+ colorRow += pad(colorNum.toString(16));
+ colorList.unshift(colorRow);
+ }
+
+ var code = "b'" + colorList.join('') + "'";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const mixbot_display_get_screen_pixel = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var code = 'onboard_matrix.screenbright()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const mixbot_display_get_ambientbright = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var code = 'onboard_matrix.ambientbright()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const mixbot_display_bright_screen = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var code = 'onboard_matrix.screenbright(' + x + ')\n';
+ return code;
+}
+
+const mixbot_display_rotate = function (a, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
+ var op = a.getFieldValue("OP");
+ var code = 'onboard_matrix.direction(' + op + ')\n';
+ return code;
+}
+
+const bitbot_display_image_create = function (block, generator) {
+ var colours = {
+ "#000000": "0",
+ "#ff0000": "1"
+ }
+ function pad(num) {
+
+ if (num.length == 1) {
+ return '\\x0' + num + '\\x00';
+ }
+ if (num.length == 2) {
+ return '\\x' + num + '\\x00';
+ }
+ if (num.length == 3) {
+ return '\\x' + num[1] + num[2] + '\\x0' + num[0];
+ }
+ }
+ let colorList = [];
+ for (let i = 0; i < 12; i++) {
+ let colorRow = '';
+ let colorNum = 0;
+ for (let j = 0; j < 12; j++) {
+ colorNum += Number(colours[block.getFieldValue((11 - i) + '-' + j)]) * Math.pow(2, j);
+ }
+ colorRow += pad(colorNum.toString(16));
+ colorList.unshift(colorRow);
+ }
+
+ var code = "b'" + colorList.join('') + "'";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//mixgo_nova onboard tft below:
+const onboard_tft_show_image = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_tft.image(" + data + ", color=0xffff)\n";
+ return code;
+}
+
+const onboard_tft_show_image_xy = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ if (color.slice(0, 2) == "0x") {
+ var code = "onboard_tft.image(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',color=' + color + ")\n";
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = "onboard_tft.image(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',color=0x' + rgb565.toString(16) + ")\n";
+ }
+ return code;
+}
+
+const onboard_tft_show_image_or_string_delay = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
+ var op = this.getFieldValue('center');
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ if (color.slice(0, 2) == "0x") {
+ var code = "onboard_tft.shows(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ',color=' + color + ")\n";
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = "onboard_tft.shows(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ',color=0x' + rgb565.toString(16) + ")\n";
+ }
+ return code;
+}
+
+const onboard_tft_show_frame_string = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_tft";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_tft.frame(" + data + ",color=0xffff)\n";
+ return code;
+}
+
+const onboard_tft_show_frame_string_delay = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ if (color.slice(0, 2) == "0x") {
+ var code = "onboard_tft.frame(" + data + ',size = ' + size + ',delay = ' + time + ',color=' + color + ")\n";
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = "onboard_tft.frame(" + data + ',size = ' + size + ',delay = ' + time + ',color=0x' + rgb565.toString(16) + ")\n";
+ }
+ return code;
+}
+
+const onboard_tft_scroll_string = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_tft";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_tft.scroll(" + data + ",color=0xffff)\n";
+ return code;
+}
+
+const onboard_tft_scroll_string_delay = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
+ var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ if (color.slice(0, 2) == "0x") {
+ var code = "onboard_tft.scroll(" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ',color=' + color + ")\n";
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = "onboard_tft.scroll(" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ',color=0x' + rgb565.toString(16) + ")\n";
+ }
+ return code;
+}
+
+const onboard_tft_display_shape_rect = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
+ var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
+ var w = generator.valueToCode(block, 'w', generator.ORDER_ATOMIC);
+ var h = generator.valueToCode(block, 'h', generator.ORDER_ATOMIC);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var shape = block.getFieldValue('shape');
+ if (color.slice(0, 2) == "0x") {
+ var code = 'onboard_tft.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', ' + color + ')\n' + 'onboard_tft.show()\n';
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = 'onboard_tft.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', 0x' + rgb565.toString(16) + ')\n' + 'onboard_tft.show()\n';
+ }
+ return code;
+}
+
+const onboard_tft_display_hvline = function (block, generator) { //水平线
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
+ var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
+ var var_length = generator.valueToCode(block, 'length', generator.ORDER_ATOMIC);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var hv = block.getFieldValue('dir_h_v');
+ if (color.slice(0, 2) == "0x") {
+ var code = 'onboard_tft.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', ' + color + ')\n' + 'onboard_tft.show()\n';
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = 'onboard_tft.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', 0x' + rgb565.toString(16) + ')\n' + 'onboard_tft.show()\n';
+ }
+ return code;
+}
+
+const onboard_tft_display_line = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var x1 = generator.valueToCode(block, 'x1', generator.ORDER_ATOMIC);
+ var y1 = generator.valueToCode(block, 'y1', generator.ORDER_ATOMIC);
+ var x2 = generator.valueToCode(block, 'x2', generator.ORDER_ATOMIC);
+ var y2 = generator.valueToCode(block, 'y2', generator.ORDER_ATOMIC);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ if (color.slice(0, 2) == "0x") {
+ var code = 'onboard_tft.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', ' + color + ')\n' + 'onboard_tft.show()\n';
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = 'onboard_tft.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', 0x' + rgb565.toString(16) + ')\n' + 'onboard_tft.show()\n';
+ }
+ return code;
+}
+
+const onboard_tft_clear = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var code = 'onboard_tft.fill(0)\n' + 'onboard_tft.show()\n';
+ return code;
+}
+
+const onboard_tft_shift = function (a, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var op = a.getFieldValue("OP");
+ var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);
+ var code = 'onboard_tft.' + op + '(' + value + ')\n';
+ return code;
+}
+
+const onboard_tft_get_pixel = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
+ var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
+ var code = 'hex(onboard_tft.pixel(int(' + value_x + '), int(' + value_y + ')))';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const onboard_tft_bright_point = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ if (color.slice(0, 2) == "0x") {
+ var code = 'onboard_tft.pixel(int(' + x + '), int(' + y + '), ' + color + ")\n" + 'onboard_tft.show()\n';
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = 'onboard_tft.pixel(int(' + x + '), int(' + y + '), 0x' + rgb565.toString(16) + ")\n" + 'onboard_tft.show()\n';
+ }
+ return code;
+}
+
+const onboard_tft_get_screen_pixel = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var code = 'onboard_tft.get_brightness()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const onboard_tft_bright_screen = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var code = 'onboard_tft.set_brightness(' + x + ')\n';
+ return code;
+}
+
+const onboard_tft_fill = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT);
+ if (color.slice(0, 2) == "0x") {
+ var code = 'onboard_tft.fill(' + color + ')\nonboard_tft.show()\n';
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = 'onboard_tft.fill(0x' + rgb565.toString(16) + ')\nonboard_tft.show()\n';
+ }
+ return code;
+}
+
+const onboard_tft_clock_init = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_Clock'] = "from " + version + " import Clock";
+ var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
+ var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ if (color.slice(0, 2) == "0x") {
+ var code = sub + "=Clock(" + x + ',' + y + ',' + size + ',' + color + ")\n";
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = sub + "=Clock(" + x + ',' + y + ',' + size + ',0x' + rgb565.toString(16) + ")\n";
+ }
+ return code;
+}
+
+const onboard_tft_clock_get_rtctime = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_Clock'] = "from " + version + " import Clock";
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);
+ var code = sub + ".set_rtctime()\n";
+ return code;
+}
+
+const onboard_tft_clock_set_time = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_Clock'] = "from " + version + " import Clock";
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);
+ var h = generator.valueToCode(this, 'h', generator.ORDER_ASSIGNMENT);
+ var m = generator.valueToCode(this, 'm', generator.ORDER_ASSIGNMENT);
+ var s = generator.valueToCode(this, 's', generator.ORDER_ASSIGNMENT);
+ var code = sub + ".set_time(" + h + ',' + m + ',' + s + ")\n";
+ return code;
+}
+
+const onboard_tft_clock_draw = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_Clock'] = "from " + version + " import Clock";
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);
+ var code = sub + ".draw_clock()\n";
+ return code;
+}
+
+const onboard_tft_clock_clear = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_Clock'] = "from " + version + " import Clock";
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ if (color.slice(0, 2) == "0x") {
+ var code = sub + ".clear(" + color + ")\n";
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = sub + ".clear(0x" + rgb565.toString(16) + ")\n";
+ }
+ return code;
+}
+
+const onboard_tft_display_shape_circle = function (block, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
+ var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
+ var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
+ var R = generator.valueToCode(block, 'r', generator.ORDER_ATOMIC);
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var shape = block.getFieldValue('shape');
+ if (color.slice(0, 2) == "0x") {
+ var code = 'onboard_tft.ellipse(' + x + ', ' + y + ', ' + R + ', ' + R + ', ' + color + ',' + shape + ')\n' + 'onboard_tft.show()\n';
+ } else {
+ const rgbValues = color.match(/\d+/g);
+ const r = parseInt(rgbValues[0]);
+ const g = parseInt(rgbValues[1]);
+ const b = parseInt(rgbValues[2]);
+ var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
+ var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
+ var code = 'onboard_tft.ellipse(' + x + ', ' + y + ', ' + R + ', ' + R + ', 0x' + rgb565.toString(16) + ',' + shape + ')\n' + 'onboard_tft.show()\n';
+ }
+ return code;
+}
+
+const draw_pointer = function(_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_'+version+'_onboard_matrix'] = "from "+version+" import onboard_matrix";
+ var angle = generator.valueToCode(this, 'angle', generator.ORDER_ASSIGNMENT);
+ var code = "onboard_matrix.pointern(angle=" + angle + ")\n";
+ return code;
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/factory.js":
+/*!********************************************!*\
+ !*** ../micropython/generators/factory.js ***!
+ \********************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ factory_block: () => (/* binding */ factory_block),
+/* harmony export */ factory_block_return: () => (/* binding */ factory_block_return),
+/* harmony export */ factory_block_return_with_textarea: () => (/* binding */ factory_block_return_with_textarea),
+/* harmony export */ factory_block_with_textarea: () => (/* binding */ factory_block_with_textarea),
+/* harmony export */ factory_callMethod_noreturn: () => (/* binding */ factory_callMethod_noreturn),
+/* harmony export */ factory_callMethod_return: () => (/* binding */ factory_callMethod_return),
+/* harmony export */ factory_declare: () => (/* binding */ factory_declare),
+/* harmony export */ factory_from_import: () => (/* binding */ factory_from_import),
+/* harmony export */ factory_function_noreturn: () => (/* binding */ factory_function_noreturn),
+/* harmony export */ factory_function_return: () => (/* binding */ factory_function_return),
+/* harmony export */ factory_import: () => (/* binding */ factory_import),
+/* harmony export */ folding_block: () => (/* binding */ folding_block)
+/* harmony export */ });
+const factory_from_import = function (_, generator) {
+ var path = this.getFieldValue('path');
+ var module = this.getFieldValue('module');
+ generator.definitions_['import_' + path + '_' + module] = 'from ' + path + ' import ' + module;
+ return '';
+}
+
+const factory_import = function (_, generator) {
+ var module = this.getFieldValue('module');
+ generator.definitions_['import_' + module] = 'import ' + module;
+ return '';
+}
+
+const factory_function_noreturn = function (_, generator) {
+ var NAME = this.getFieldValue('NAME');
+ var code = new Array(this.itemCount_);
+ for (var n = 0; n < this.itemCount_; n++) {
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || '';
+ }
+ return NAME + '(' + code.join(', ') + ')\n';
+}
+
+const factory_function_return = function (_, generator) {
+ var NAME = this.getFieldValue('NAME');
+ var code = new Array(this.itemCount_);
+ for (var n = 0; n < this.itemCount_; n++) {
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || '';
+ }
+ return [NAME + '(' + code.join(', ') + ')', generator.ORDER_ATOMIC];
+}
+
+const factory_declare = function () {
+ var TYPE = this.getFieldValue('TYPE');
+ var NAME = this.getFieldValue('NAME');
+ return NAME + ' = ' + TYPE + '()\n';
+}
+
+const factory_callMethod_noreturn = function (_, generator) {
+ var NAME = this.getFieldValue('NAME');
+ var METHOD = this.getFieldValue('METHOD');
+ var code = new Array(this.itemCount_);
+ for (var n = 0; n < this.itemCount_; n++) {
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || '';
+ }
+ return NAME + '.' + METHOD + '(' + code.join(', ') + ')\n';
+}
+
+const factory_callMethod_return = function (_, generator) {
+ var NAME = this.getFieldValue('NAME');
+ var METHOD = this.getFieldValue('METHOD');
+ var code = new Array(this.itemCount_);
+ for (var n = 0; n < this.itemCount_; n++) {
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || '';
+ }
+ return [NAME + '.' + METHOD + '(' + code.join(', ') + ')', generator.ORDER_ATOMIC];
+}
+
+const factory_block = function () {
+ var VALUE = this.getFieldValue('VALUE');
+ //if(!(VALUE.charAt(VALUE.length-1)==";")){
+ //VALUE=VALUE+';';
+ //}
+ return VALUE + '\n';
+}
+
+const factory_block_return = function (_, generator) {
+ var VALUE = this.getFieldValue('VALUE');
+ return [VALUE, generator.ORDER_ATOMIC];
+}
+
+const factory_block_with_textarea = function () {
+ var VALUE = this.getFieldValue('VALUE');
+ //if(!(VALUE.charAt(VALUE.length-1)==";")){
+ //VALUE=VALUE+';';
+ //}
+ return VALUE + '\n';
+}
+
+const factory_block_return_with_textarea = function (_, generator) {
+ var VALUE = this.getFieldValue('VALUE');
+ return [VALUE, generator.ORDER_ATOMIC];
+}
+
+const folding_block = function (_, generator) {
+ var comment = this.getFieldValue('peien');
+ comment = "#" + comment;
+ var branch = generator.statementToCode(this, 'DO');
+ branch = branch.replace(/(^\s*)|(\s*$)/g, "");//去除两端空格
+ branch = branch.replace(/(\n\s\s\s\s)/g, "\n");//去除换行时空格
+ return comment + '\n' + branch + '\n';
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/inout.js":
+/*!******************************************!*\
+ !*** ../micropython/generators/inout.js ***!
+ \******************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ inout_analog_atten: () => (/* binding */ inout_analog_atten),
+/* harmony export */ inout_analog_read: () => (/* binding */ inout_analog_read),
+/* harmony export */ inout_analog_read_init: () => (/* binding */ inout_analog_read_init),
+/* harmony export */ inout_analog_write: () => (/* binding */ inout_analog_write),
+/* harmony export */ inout_analog_write_init: () => (/* binding */ inout_analog_write_init),
+/* harmony export */ inout_analog_write_set: () => (/* binding */ inout_analog_write_set),
+/* harmony export */ inout_digital_init: () => (/* binding */ inout_digital_init),
+/* harmony export */ inout_digital_read: () => (/* binding */ inout_digital_read),
+/* harmony export */ inout_digital_write: () => (/* binding */ inout_digital_write),
+/* harmony export */ inout_highlow: () => (/* binding */ inout_highlow),
+/* harmony export */ inout_pin_attachInterrupt: () => (/* binding */ inout_pin_attachInterrupt),
+/* harmony export */ inout_pin_pressed: () => (/* binding */ inout_pin_pressed),
+/* harmony export */ inout_pin_pressed_init: () => (/* binding */ inout_pin_pressed_init),
+/* harmony export */ inout_pwm_analog_write: () => (/* binding */ inout_pwm_analog_write),
+/* harmony export */ inout_pwm_analog_write_init: () => (/* binding */ inout_pwm_analog_write_init),
+/* harmony export */ inout_pwm_analog_write_set_freq: () => (/* binding */ inout_pwm_analog_write_set_freq)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+// ok
+const inout_highlow = function (_, generator) {
+ // Boolean values HIGH and LOW.
+ var code = (this.getFieldValue('BOOL') == 'HIGH') ? '1' : '0';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+// ok
+const inout_digital_write = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
+ var code = "";
+ code += dropdown_pin + '.value(' + dropdown_stat + ')\n'
+ return code;
+}
+
+// ok
+const inout_digital_read = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = "";
+ code = dropdown_pin + '.value()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+// ok
+const inout_pwm_analog_write = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ //var dropdown_stat = this.getFieldValue('STAT');
+ var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
+ //generator.setups_['setup_output'+dropdown_pin] = 'pinMode('+dropdown_pin+', OUTPUT);';
+ var code = dropdown_pin + '.duty_u16(' + value_num + ')\n';
+ return code;
+}
+
+// ok
+const inout_analog_write = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ //var dropdown_stat = this.getFieldValue('STAT');
+ var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
+ //generator.setups_['setup_output'+dropdown_pin] = 'pinMode('+dropdown_pin+', OUTPUT);';
+ var code = dropdown_pin + '.write(' + value_num + ')\n';
+ return code;
+}
+
+// ok
+const inout_analog_write_set = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = dropdown_pin + '.set_analog_' + key + '(' + value_num + ')\n';
+ //var code = 'pin' + dropdown_pin + '.set_analog_period(' + value_num + ')\n';
+ return code;
+}
+
+const inout_pwm_analog_write_set_freq = function (_, generator) {
+ //generator.definitions_['import_machine_Pin'] = "from machine import Pin";
+ // generator.definitions_['import_machine_PWM'] = "from machine import PWM";
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
+ var code = dropdown_pin + '.freq(' + value_num + ')\n';
+ //var code = 'pin' + dropdown_pin + '.set_analog_period(' + value_num + ')\n';
+ return code;
+}
+
+// ok
+const inout_analog_read = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ //generator.setups_['setup_input_'+dropdown_pin] = 'pinMode('+dropdown_pin+', INPUT);';
+ var code = dropdown_pin + '.read_u16()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+// ok
+const inout_pin_pressed = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var pin = generator.valueToCode(this, 'pin', generator.ORDER_ATOMIC);
+ var code = pin + '.read()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const inout_pin_attachInterrupt = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var dropdown_mode = this.getFieldValue('mode');
+ var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
+ var code = 'machine.Pin(' + dropdown_pin + ').irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\n'
+ //var funcName = 'attachInterrupt_func_' + dropdown_pin;
+ //var branch = generator.statementToCode(this, 'DO') || generator.PASS;
+ //var code2 = 'def' + ' ' + funcName + '(p):\n' + branch + '\n';
+ //generator.setups_[funcName] = code2;
+ return code;
+}
+
+const inout_digital_init = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var pin_obj = this.getFieldValue('PIN_OBJ') || 'pin#';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var dropdown_mode = this.getFieldValue('MODE');
+ var varName = (pin_obj == 'pin#') ? 'pin' + dropdown_pin : generator.variableDB_.getName(pin_obj, blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ var code = varName + ' = machine.Pin(' + dropdown_pin + ', ' + dropdown_mode + ')\n';
+ return code;
+}
+
+const inout_pwm_analog_write_init = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var pin_obj = this.getFieldValue('PIN_OBJ') || 'pwm#';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var varName = (pin_obj == 'pwm#') ? 'pwm' + dropdown_pin : generator.variableDB_.getName(pin_obj, blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ var code = varName + ' = machine.PWM(machine.Pin(' + dropdown_pin + '))\n';
+ return code;
+}
+
+// ok
+const inout_analog_write_init = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var pin_obj = this.getFieldValue('PIN_OBJ') || 'dac#';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var varName = (pin_obj == 'dac#') ? 'dac' + dropdown_pin : generator.variableDB_.getName(pin_obj, blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ var code = varName + ' = machine.DAC(machine.Pin(' + dropdown_pin + '))\n';
+ return code;
+}
+
+const inout_analog_read_init = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var pin_obj = this.getFieldValue('PIN_OBJ') || 'adc#';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var varName = (pin_obj == 'adc#') ? 'adc' + dropdown_pin : generator.variableDB_.getName(pin_obj, blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ var code = varName + ' = machine.ADC(machine.Pin(' + dropdown_pin + '))\n';
+ return code;
+}
+
+const inout_analog_atten = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ //var dropdown_stat = this.getFieldValue('STAT');
+ var value_atten = this.getFieldValue('atten')
+ var code = dropdown_pin + '.atten(' + value_atten + ')\n';
+ return code;
+}
+
+// ok
+const inout_pin_pressed_init = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var pin_obj = this.getFieldValue('PIN_OBJ') || 'tc#';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var varName = (pin_obj == 'tc#') ? 'tc' + dropdown_pin : generator.variableDB_.getName(pin_obj, blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ var code = varName + ' = machine.TouchPad(machine.Pin(' + dropdown_pin + '))\n';
+ return code;
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/iot.js":
+/*!****************************************!*\
+ !*** ../micropython/generators/iot.js ***!
+ \****************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE: () => (/* binding */ IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE),
+/* harmony export */ IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE: () => (/* binding */ IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE),
+/* harmony export */ IOT_EMQX_PING: () => (/* binding */ IOT_EMQX_PING),
+/* harmony export */ IOT_FORMATTING: () => (/* binding */ IOT_FORMATTING),
+/* harmony export */ IOT_FORMAT_STRING: () => (/* binding */ IOT_FORMAT_STRING),
+/* harmony export */ IOT_MIXIO_NTP: () => (/* binding */ IOT_MIXIO_NTP),
+/* harmony export */ IOT_MIXIO_PUBLISH: () => (/* binding */ IOT_MIXIO_PUBLISH),
+/* harmony export */ IOT_MIXIO_SUBSCRIBE: () => (/* binding */ IOT_MIXIO_SUBSCRIBE),
+/* harmony export */ iot_client_onboard: () => (/* binding */ iot_client_onboard),
+/* harmony export */ iot_http_client: () => (/* binding */ iot_http_client),
+/* harmony export */ iot_http_data: () => (/* binding */ iot_http_data),
+/* harmony export */ iot_mixio_check: () => (/* binding */ iot_mixio_check),
+/* harmony export */ iot_mixio_connect: () => (/* binding */ iot_mixio_connect),
+/* harmony export */ iot_mixio_connect_only: () => (/* binding */ iot_mixio_connect_only),
+/* harmony export */ iot_mixio_disconnect: () => (/* binding */ iot_mixio_disconnect),
+/* harmony export */ iot_mixio_format_msg: () => (/* binding */ iot_mixio_format_msg),
+/* harmony export */ iot_mixio_format_topic: () => (/* binding */ iot_mixio_format_topic),
+/* harmony export */ iot_mixly_key: () => (/* binding */ iot_mixly_key),
+/* harmony export */ iot_mqtt_client: () => (/* binding */ iot_mqtt_client),
+/* harmony export */ iot_mqtt_data: () => (/* binding */ iot_mqtt_data),
+/* harmony export */ iot_onenet_check: () => (/* binding */ iot_onenet_check),
+/* harmony export */ iot_onenet_connect: () => (/* binding */ iot_onenet_connect),
+/* harmony export */ iot_onenet_disconnect: () => (/* binding */ iot_onenet_disconnect),
+/* harmony export */ iot_onenet_publish: () => (/* binding */ iot_onenet_publish),
+/* harmony export */ iot_onenet_publish_dict: () => (/* binding */ iot_onenet_publish_dict),
+/* harmony export */ iot_wifi_connect: () => (/* binding */ iot_wifi_connect)
+/* harmony export */ });
+const iot_wifi_connect = function (_, generator) {
+ generator.definitions_['import_mixiot'] = "import mixiot";
+ var username = generator.valueToCode(this, 'WIFINAME', generator.ORDER_ATOMIC);
+ var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);
+ var code = 'mixiot.wlan_connect(' + username + ',' + password + ')\n';
+ return code;
+}
+
+const iot_onenet_connect = function (_, generator) {
+ generator.definitions_['import_onenet'] = "import onenet";
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var client = generator.valueToCode(this, 'CLIENT', generator.ORDER_ATOMIC);
+ var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
+ var username = generator.valueToCode(this, 'USERNAME', generator.ORDER_ATOMIC);
+ var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);
+ var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
+ var subscribe = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT) || 'None';
+ var code = v + ' = onenet.init_MQTT_client(' + client + ', ' + server + ', ' + username + ', ' + password + ', ' + topic + ', ' + subscribe + ')\n';
+ return code;
+}
+
+const iot_onenet_disconnect = function (_, generator) {
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ generator.definitions_['import_onenet'] = "import onenet";
+ var code = v + '.do_disconnect()\n';
+ return code;
+}
+
+const iot_onenet_publish_dict = function (_, generator) {
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var d = generator.valueToCode(this, 'DICT', generator.ORDER_ATOMIC);
+ var check = this.getFieldValue("is_print") == 'TRUE' ? 'True' : 'False';
+ generator.definitions_['import_onenet'] = "import onenet";
+ var code = v + '.publish(' + d + ', is_print = ' + check + ')\n';
+ return code;
+}
+
+const iot_onenet_check = function (_, generator) {
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ generator.definitions_['import_onenet'] = "import onenet";
+ var code = v + '.check_msg()\n';
+ return code;
+}
+
+const iot_onenet_publish = function (_, generator) {
+ // Create a list with any number of elements of any type.
+
+ //var size=window.parseFloat(this.getFieldValue('SIZE'));
+ generator.definitions_['import_onenet'] = "import onenet";
+ var ck = new Array(this.itemCount_);
+ var cv = new Array(this.itemCount_);
+ var ct = new Array(this.itemCount_);
+
+ var default_value = '0';
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+
+ for (let n = 0; n < this.itemCount_; n++) {
+ var keyName = this.getFieldValue('KEY' + n);
+ ck[n] = keyName;
+ }
+ for (let n = 0; n < this.itemCount_; n++) {
+ cv[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || default_value;
+ }
+ var code = v + ".publish({";
+ for (let n = 0; n < this.itemCount_; n++) {
+ ct[n] = ck[n] + ': ' + cv[n];
+ }
+ //var code = "c.publish('$dp', pubData("+ '{' + code.join(', ') + '})\n';
+ //var code =''+varName+'['+size+"]"+'='+ '{' + code.join(', ') + '}\n';
+ //generator.setups_['setup_lists'+varName] = code;
+ code = code + ct.join(', ') + "})\n";
+ return code;
+}
+
+const iot_mixio_connect = function (_, generator) {
+ generator.definitions_['import_mixiot'] = "import mixiot";
+ generator.definitions_['import_machine'] = "import machine";
+ generator.definitions_['import_ubinascii_hexlify'] = "from ubinascii import hexlify";
+ var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
+ var username = generator.valueToCode(this, 'USERNAME', generator.ORDER_ATOMIC);
+ var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);
+ var project = generator.valueToCode(this, 'PROJECT', generator.ORDER_ATOMIC);
+ //var subscribe = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT) || '0';
+ var a = "'" + username.replace("'", "").replace("'", "") + "/" + project.replace("'", "").replace("'", "") + "/'"
+ var code = 'MQTT_USR_PRJ = ' + a + '\n' + 'mqtt_client = mixiot.init_MQTT_client(' + server + ', ' + username + ', ' + password + ', MQTT_USR_PRJ)\n';
+ return code;
+}
+
+const IOT_MIXIO_PUBLISH = function (_, generator) {
+ var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
+ var msg = generator.valueToCode(this, 'MSG', generator.ORDER_ATOMIC);
+ generator.definitions_['import_mixiot'] = "import mixiot";
+ var code = 'mqtt_client.publish(MQTT_USR_PRJ + ' + topic + ', ' + msg + ')\n';
+ return code;
+}
+
+const IOT_MIXIO_SUBSCRIBE = function (_, generator) {
+ var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
+ var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);
+ generator.definitions_['import_mixiot'] = "import mixiot";
+ var code = 'mqtt_client.set_callback(' + topic + ',' + method + ', MQTT_USR_PRJ)\n';
+ code += 'mqtt_client.subscribe(MQTT_USR_PRJ + ' + topic + ')\n';
+ return code;
+}
+
+const iot_mixio_disconnect = function (_, generator) {
+ generator.definitions_['import_mixiot'] = "import mixiot";
+ var code = 'mqtt_client.disconnect(MQTT_USR_PRJ)\n';
+ return code;
+}
+
+const iot_mixio_connect_only = function (_, generator) {
+ generator.definitions_['import_mixiot'] = "import mixiot";
+ var code = 'mqtt_client.connect()\n';
+ return code;
+}
+
+const iot_mixio_check = function (_, generator) {
+ generator.definitions_['import_mixiot'] = "import mixiot";
+ var code = 'mqtt_client.check_msg()\n';
+ return code;
+}
+
+const iot_mixio_format_topic = function (_, generator) {
+ var code = 'mqtt_client.decode("utf-8").split("/")[-1]';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const iot_mixio_format_msg = function (_, generator) {
+ var code = 'mqtt_client.decode("utf-8")';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const IOT_FORMATTING = function (_, generator) {
+ generator.definitions_['import_mixpy'] = "import mixpy";
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = 'mixpy.format_content(' + v + ', mqtt_client.client_id)';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const IOT_FORMAT_STRING = function (_, generator) {
+ generator.definitions_['import_mixpy'] = "import mixpy";
+ var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = 'mixpy.format_str(' + v + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE = function (_, generator) {
+ var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
+ // var port = '1883';
+ var share_code = generator.valueToCode(this, 'KEY', generator.ORDER_ATOMIC);
+ generator.definitions_['import_mixiot'] = "import mixiot";
+ generator.definitions_['import_machine'] = "import machine";
+ generator.definitions_['import_urequests'] = "import urequests";
+ generator.definitions_['import_ubinascii_hexlify'] = "from ubinascii import hexlify";
+ generator.definitions_['import_mixpy_analyse_sharekey'] = "from mixpy import analyse_sharekey";
+ // var mac_address = 'str(binascii.hexlify(wifi.radio.mac_address))[2:14]'
+ // var socket_pool = 'socketpool.SocketPool(wifi.radio)'
+ // var ssl_context = 'ssl.create_default_context()'
+ var code = 'sk = analyse_sharekey(\'http://'+server.substring(1, server.length-1)+'/mixio-php/sharekey.php?sk=' + share_code + '\')\n'+
+ 'MQTT_USR_PRJ = sk[0]+\'/\'+sk[1]+\'/\'\n' +
+ 'mqtt_client = mixiot.init_MQTT_client(' + server + ', sk[0], sk[2]' + ', MQTT_USR_PRJ)\n';
+ return code;
+}
+
+const iot_mixly_key = function (_, generator) {
+ var code = this.getFieldValue('VISITOR_ID');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE = function (_, generator) {
+ generator.definitions_['import_mixiot'] = "import mixiot";
+ generator.definitions_['import_machine'] = "import machine";
+ generator.definitions_['import_ubinascii_hexlify'] = "from ubinascii import hexlify";
+ var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
+ // var port = '1883';
+ var username = '"MixIO_public"';
+ var password = '"MixIO_public"';
+ var mixly_code = generator.valueToCode(this, 'KEY', generator.ORDER_ATOMIC);
+ var a = '"MixIO/' + mixly_code + '/default/"'
+ // var mac_address = 'str(binascii.hexlify(wifi.radio.mac_address))[2:14]'
+ // var socket_pool = 'socketpool.SocketPool(wifi.radio)'
+ // var ssl_context = 'ssl.create_default_context()'
+ var code = 'MQTT_USR_PRJ = ' + a + '\n' + 'mqtt_client = mixiot.init_MQTT_client(' + server + ', ' + username + ', ' + password + ', MQTT_USR_PRJ)\n';
+ return code;
+}
+
+const IOT_EMQX_PING = function (_, generator) {
+ generator.definitions_['import_mixiot'] = "import mixiot";
+ var code = 'mqtt_client.pingSync()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const IOT_MIXIO_NTP = function (_, generator) {
+ generator.definitions_['import_mixiot'] = "import mixiot";
+ var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
+ var code = 'mixiot.ntp(' + addr + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const iot_client_onboard = function (_, generator) {
+ var code = 'mqtt_client';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const iot_http_client = function (_, generator) {
+ generator.definitions_['import_debugnet'] = "import debugnet";
+ var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = 'HTTP_client = debugnet.request("GET",' + addr + ',debug=' + key + ')\n';
+ return code;
+}
+
+const iot_http_data = function (_, generator) {
+ generator.definitions_['import_debugnet'] = "import debugnet";
+ var key = this.getFieldValue('key');
+ var code = 'HTTP_client.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const iot_mqtt_client = function (_, generator) {
+ generator.definitions_['import_debugnet'] = "import debugnet";
+ var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key2');
+ var code = 'mqtt_client = debugnet.init_MQTT_client(' + addr + ', "MixIO_public", "MixIO_public", "MixIO/3QBAGKRL/default/",debug=' + key + ')\n';
+ code += 'mqtt_client.subscribe("$SYS/hello")\n';
+ return code;
+}
+
+const iot_mqtt_data = function (_, generator) {
+ generator.definitions_['import_mixiot'] = "import mixiot";
+ var key = this.getFieldValue('key');
+ var code = 'mqtt_client.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/network.js":
+/*!********************************************!*\
+ !*** ../micropython/generators/network.js ***!
+ \********************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ educore_mqtt_connect: () => (/* binding */ educore_mqtt_connect),
+/* harmony export */ educore_mqtt_connect_success: () => (/* binding */ educore_mqtt_connect_success),
+/* harmony export */ educore_mqtt_subscribe_message: () => (/* binding */ educore_mqtt_subscribe_message),
+/* harmony export */ educore_mqtt_topic_publish: () => (/* binding */ educore_mqtt_topic_publish),
+/* harmony export */ educore_mqtt_topic_subscribe: () => (/* binding */ educore_mqtt_topic_subscribe),
+/* harmony export */ educore_wifi_connect: () => (/* binding */ educore_wifi_connect),
+/* harmony export */ network_ap_connect: () => (/* binding */ network_ap_connect),
+/* harmony export */ network_connect: () => (/* binding */ network_connect),
+/* harmony export */ network_get_connect: () => (/* binding */ network_get_connect),
+/* harmony export */ network_get_wifi: () => (/* binding */ network_get_wifi),
+/* harmony export */ network_init: () => (/* binding */ network_init),
+/* harmony export */ network_is_active: () => (/* binding */ network_is_active),
+/* harmony export */ network_open: () => (/* binding */ network_open),
+/* harmony export */ network_scan: () => (/* binding */ network_scan),
+/* harmony export */ network_server: () => (/* binding */ network_server),
+/* harmony export */ network_socket_accept: () => (/* binding */ network_socket_accept),
+/* harmony export */ network_socket_bind: () => (/* binding */ network_socket_bind),
+/* harmony export */ network_socket_close: () => (/* binding */ network_socket_close),
+/* harmony export */ network_socket_connect: () => (/* binding */ network_socket_connect),
+/* harmony export */ network_socket_init: () => (/* binding */ network_socket_init),
+/* harmony export */ network_socket_listen: () => (/* binding */ network_socket_listen),
+/* harmony export */ network_socket_receive: () => (/* binding */ network_socket_receive),
+/* harmony export */ network_socket_receive_from: () => (/* binding */ network_socket_receive_from),
+/* harmony export */ network_socket_send: () => (/* binding */ network_socket_send),
+/* harmony export */ network_socket_send_to: () => (/* binding */ network_socket_send_to),
+/* harmony export */ network_stop: () => (/* binding */ network_stop),
+/* harmony export */ network_wifi_connect: () => (/* binding */ network_wifi_connect),
+/* harmony export */ ntptime_address: () => (/* binding */ ntptime_address),
+/* harmony export */ ntptime_time: () => (/* binding */ ntptime_time),
+/* harmony export */ requests_attribute: () => (/* binding */ requests_attribute),
+/* harmony export */ requests_attribute2: () => (/* binding */ requests_attribute2),
+/* harmony export */ requests_get: () => (/* binding */ requests_get),
+/* harmony export */ requests_get2: () => (/* binding */ requests_get2),
+/* harmony export */ requests_method: () => (/* binding */ requests_method),
+/* harmony export */ requests_post: () => (/* binding */ requests_post)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const network_init = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var mode = this.getFieldValue('mode');
+ return "" + varName + " = network.WLAN(network." + mode + "_IF);\n";
+}
+
+// export const network_connect = function() {
+// generator.definitions_['import_network'] = "import network";
+// // generator.setups_['class_wlan'] ='wlan.active(True)\n';
+// var varName =generator.valueToCode(this, 'VAR',generator.ORDER_ATOMIC);
+// var id = generator.valueToCode(this, 'id', generator.ORDER_ATOMIC);
+// var password = generator.valueToCode(this, 'password', generator.ORDER_ATOMIC);
+// return "if not "+varName+".isconnected():\n"+
+// " "+varName+".connect("+id+","+password+")\n"+
+// " while not "+varName+".isconnected():\n"+
+// " pass\n";
+// }
+
+const network_connect = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ // generator.setups_['class_wlan'] ='wlan.active(True)\n';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var id = generator.valueToCode(this, 'id', generator.ORDER_ATOMIC);
+ var password = generator.valueToCode(this, 'password', generator.ORDER_ATOMIC);
+ return "" + varName + ".connect(" + id + "," + password + ")\n"
+}
+
+const network_wifi_connect = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = varName + '.isconnected()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const network_get_connect = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var mode = this.getFieldValue('mode');
+ var code = "" + varName + ".ifconfig()[" + mode + "]";
+ return [code, generator.ORDER_ATOMIC]
+}
+
+const network_stop = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ return "" + varName + ".disconnect()\n";
+}
+
+const network_open = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var op = this.getFieldValue('op');
+ var code = "" + varName + ".active(" + op + ")\n";
+ return code;
+}
+
+const network_is_active = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = "" + varName + ".active()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const network_get_wifi = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var op = this.getFieldValue('op');
+ var code = "" + varName + ".config('" + op + "')";
+ return [code, generator.ORDER_ATOMIC]
+}
+
+const network_ap_connect = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ // generator.setups_['class_wlan'] ='ap = network.WLAN(network.AP_IF)\n'+'ap.active(True)\n';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var essid = generator.valueToCode(this, 'essid', generator.ORDER_ATOMIC);
+ var channel = generator.valueToCode(this, 'channel', generator.ORDER_ATOMIC);
+ return "" + varName + ".config(essid = " + essid + ", channel = " + channel + ")\n";
+}
+
+const network_scan = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = "" + varName + ".scan()";
+ return [code, generator.ORDER_ATOMIC];
+
+}
+
+const network_server = function (_, generator) {
+ generator.definitions_['import_server_*'] = 'from server import *';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ // generator.setups_['class_wlan'] ='SSID="ying"\n'+'PASSWORD="201411132040"\n';
+ return 'if not ' + varName + '.isconnected():\n'
+ + ' connectWifi(SSID, PASSWORD)\n'
+ + 'ip=' + varName + '.ifconfig()[0]\n'
+ + 'print(ip)\n'
+ + 'time.sleep(1)\n'
+ + 'DATA=listenData()\n'
+}
+
+const network_socket_init = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ generator.definitions_['import_socket'] = "import socket";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var mode = this.getFieldValue('mode');
+ if (mode == 'UDP') {
+ mode = 'socket.SOCK_DGRAM'
+ }
+ else if (mode == 'TCP') {
+ mode = 'socket.SOCK_STREAM'
+ }
+ return "" + varName + " = socket.socket(socket.AF_INET," + mode + ")\n";
+}
+
+const network_socket_bind = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ generator.definitions_['import_socket'] = "import socket";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);
+ return "" + varName + ".bind(" + address + ")\n";
+}
+
+const network_socket_connect = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ generator.definitions_['import_socket'] = "import socket";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);
+ return "" + varName + ".connect(socket.getaddrinfo" + address + "[0][-1])\n";
+}
+
+const network_socket_listen = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ generator.definitions_['import_socket'] = "import socket";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var queue = generator.valueToCode(this, 'queue', generator.ORDER_ATOMIC);
+ return "" + varName + ".listen(" + queue + ")\n";
+}
+
+const network_socket_accept = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ generator.definitions_['import_socket'] = "import socket";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = "" + varName + ".accept()";
+ return [code, generator.ORDER_ASSIGNMENT];
+}
+
+const network_socket_receive = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ generator.definitions_['import_socket'] = "import socket";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ATOMIC);
+ var code = "" + varName + ".recv(" + size + ")";
+ return [code, generator.ORDER_ASSIGNMENT];
+}
+
+const network_socket_send = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ generator.definitions_['import_socket'] = "import socket";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var content = generator.valueToCode(this, 'content', generator.ORDER_ATOMIC);
+ var code = "" + varName + ".send(" + content + ")\n";
+ return code;
+}
+
+const network_socket_receive_from = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ generator.definitions_['import_socket'] = "import socket";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var size = generator.valueToCode(this, 'size', generator.ORDER_ATOMIC);
+ var code = "" + varName + ".recvfrom(" + size + ")";
+ return [code, generator.ORDER_ASSIGNMENT];
+}
+
+const network_socket_send_to = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ generator.definitions_['import_socket'] = "import socket";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var content = generator.valueToCode(this, 'content', generator.ORDER_ATOMIC);
+ var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);
+ var code = "" + varName + ".sendto(" + content + "," + address + ")\n";
+ return code;
+}
+
+const network_socket_close = function (_, generator) {
+ generator.definitions_['import_network'] = "import network";
+ generator.definitions_['import_socket'] = "import socket";
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = "" + varName + ".close()\n";
+ return code;
+}
+
+const requests_get = function (_, generator) {
+ generator.definitions_.import_requests = "import requests";
+ var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ var str = generator.valueToCode(this, 'DOMAIN', generator.ORDER_ATOMIC);
+ var code = varName + '= ' + 'requests.get(' + str + ')\n';
+
+ return code;
+}
+
+const requests_attribute = function (_, generator) {
+ generator.definitions_.import_requests = "import requests";
+ var varName = generator.valueToCode(this, 'VAL', generator.ORDER_ASSIGNMENT) || '0';
+ var attr = this.getFieldValue('ATTR');
+ var code = varName + "." + attr;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const requests_method = function (_, generator) {
+ generator.definitions_.import_requests = "import requests";
+ var method = this.getFieldValue('DIR');
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = "requests." + method + "(" + str + ')\n';
+ return code;
+}
+
+const ntptime_time = function (_, generator) {
+ generator.definitions_['import_ntptime'] = "import ntptime";
+ var str = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ var code = "ntptime.time(host=" + str + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ntptime_address = function (_, generator) {
+ var code = "'" + this.getFieldValue('op') + "'";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const requests_get2 = function (_, generator) {
+ generator.definitions_['import_urequests'] = "import urequests";
+ var dropdown_type = this.getFieldValue('TYPE');
+ var str = generator.valueToCode(this, 'URL', generator.ORDER_ATOMIC);
+ var code = 'urequests.' + dropdown_type + '(' + str + ')';
+ return [code, generator.ORDER_ATOMIC];
+
+};
+
+const requests_attribute2 = function (_, generator) {
+ generator.definitions_['import_urequests'] = "import urequests";
+ var varName = generator.valueToCode(this, 'VAL', generator.ORDER_ASSIGNMENT) || '0';
+ var attr = this.getFieldValue('ATTR');
+ var code = varName + "." + attr;
+ return [code, generator.ORDER_ATOMIC];
+};
+
+const requests_post = function (_, generator) {
+ generator.definitions_['import_urequests'] = "import urequests";
+ var dropdown_type = this.getFieldValue('TYPE');
+ var str = generator.valueToCode(this, 'URL', generator.ORDER_ATOMIC);
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ var code = 'urequests.' + dropdown_type + '(' + str + ',data=' + data + ')';
+ return [code, generator.ORDER_ATOMIC];
+
+};
+
+const educore_wifi_connect = function (_, generator) {
+ generator.definitions_['import_educore_wifi'] = "from educore import wifi";
+ var username = generator.valueToCode(this, 'WIFINAME', generator.ORDER_ATOMIC);
+ var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);
+ var timeout = generator.valueToCode(this, 'TIMEOUT', generator.ORDER_ATOMIC);
+ var code = 'wifi.connect(ssid='+username+', psd='+password+', timeout='+timeout+')\n';
+ return code;
+}
+
+const educore_mqtt_connect = function (_, generator) {
+ generator.definitions_['import_educore_mqttclient'] = "from educore import mqttclient";
+ var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
+ var port = generator.valueToCode(this, 'PORT', generator.ORDER_ATOMIC);
+ var client_id = generator.valueToCode(this, 'CLIENT_ID', generator.ORDER_ATOMIC);
+ var username = generator.valueToCode(this, 'USERNAME', generator.ORDER_ATOMIC);
+ var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);
+ // var a = "'" + username.replace("'", "").replace("'", "") + "/" + project.replace("'", "").replace("'", "") + "/'"
+ // var code = 'MQTT_USR_PRJ = ' + a + '\n' + 'mqtt_client = mixiot.init_MQTT_client(' + server + ', ' + username + ', ' + password + ', MQTT_USR_PRJ)\n';
+ var code = 'mqttclient.connect(server='+server+', port='+port+',client_id='+client_id+',user='+username+',psd='+password+')\n'
+ return code;
+}
+
+const educore_mqtt_subscribe_message = function (_, generator) {
+ generator.definitions_['import_educore_mqttclient'] = "from educore import mqttclient";
+ var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
+ var message = generator.valueToCode(this, 'MESSAGE', generator.ORDER_ATOMIC);
+ var code = 'mqttclient.'+message+'(' + topic + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_mqtt_topic_subscribe = function (_, generator) {
+ var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
+ var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);
+ generator.definitions_['import_educore_mqttclient'] = "from educore import mqttclient";
+ // var code = 'mqtt_client.set_callback(' + topic + ',' + method + ', MQTT_USR_PRJ)\n';
+ // code += 'mqtt_client.subscribe(MQTT_USR_PRJ + ' + topic + ')\n';
+ var code = 'mqttclient.received(topic='+topic+', callback='+method+')\n';
+ return code;
+}
+
+const educore_mqtt_topic_publish = function (_, generator) {
+ generator.definitions_['import_educore_mqttclient'] = "from educore import mqttclient";
+ var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
+ var msg = generator.valueToCode(this, 'MSG', generator.ORDER_ATOMIC);
+ var code = 'mqtt_client.publish(topic=' + topic + ',content=' + msg + ')\n';
+ return code;
+}
+
+const educore_mqtt_connect_success = function (_, generator) {
+ generator.definitions_['import_educore_mqttclient'] = "from educore import mqttclient";
+ var code = 'mqtt_client.connescted()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/nova_g1.js":
+/*!********************************************!*\
+ !*** ../micropython/generators/nova_g1.js ***!
+ \********************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ get_potential_num: () => (/* binding */ get_potential_num),
+/* harmony export */ nova_g1_motor: () => (/* binding */ nova_g1_motor),
+/* harmony export */ nova_g1_spk_en: () => (/* binding */ nova_g1_spk_en),
+/* harmony export */ nova_g1_usb: () => (/* binding */ nova_g1_usb)
+/* harmony export */ });
+const get_potential_num = function (_, generator) {
+ generator.definitions_['from_nova_g1_import_ext_g1'] = 'from nova_g1 import ext_g1';
+ var code = 'ext_g1.varistor()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const nova_g1_motor = function (_, generator) {
+ generator.definitions_['from_nova_g1_import_ext_g1'] = 'from nova_g1 import ext_g1';
+ var wheel = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var v = this.getFieldValue('direction');
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ var code = "ext_g1.motor(" + wheel + ',"' + v + '",' + speed + ")\n";
+ return code;
+}
+
+const nova_g1_usb = function (_, generator) {
+ generator.definitions_['from_nova_g1_import_ext_g1'] = 'from nova_g1 import ext_g1';
+ var p = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var percent = generator.valueToCode(this, 'percent', generator.ORDER_ATOMIC);
+ var code = "ext_g1.usb_pwm(" + p + ',' + percent + ")\n";
+ return code;
+}
+
+const nova_g1_spk_en = function (_, generator) {
+ generator.definitions_['from_nova_g1_import_ext_g1'] = 'from nova_g1 import ext_g1';
+ var state = this.getFieldValue('state');
+ var code = "ext_g1.spk_en(" + state + ")\n";
+ return code;
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/pe_g1.js":
+/*!******************************************!*\
+ !*** ../micropython/generators/pe_g1.js ***!
+ \******************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ pe_g1_battery_left: () => (/* binding */ pe_g1_battery_left),
+/* harmony export */ pe_g1_dc_motor: () => (/* binding */ pe_g1_dc_motor),
+/* harmony export */ pe_g1_dc_motor_speed: () => (/* binding */ pe_g1_dc_motor_speed),
+/* harmony export */ pe_g1_servo_get_angle: () => (/* binding */ pe_g1_servo_get_angle),
+/* harmony export */ pe_g1_servo_get_speed: () => (/* binding */ pe_g1_servo_get_speed),
+/* harmony export */ pe_g1_servo_set_angle: () => (/* binding */ pe_g1_servo_set_angle),
+/* harmony export */ pe_g1_servo_set_speed: () => (/* binding */ pe_g1_servo_set_speed),
+/* harmony export */ pe_g1_use_i2c_init: () => (/* binding */ pe_g1_use_i2c_init)
+/* harmony export */ });
+const pe_g1_use_i2c_init = function (_, generator) {
+ generator.definitions_['import_pe_g1'] = 'import pe_g1';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
+ var code = v + ' = pe_g1.PE_G1(' + iv + ')\n';
+ return code;
+}
+
+const pe_g1_battery_left = function (_, generator) {
+ generator.definitions_['import_pe_g1'] = 'import pe_g1';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + '.read_bat()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const pe_g1_dc_motor = function (_, generator) {
+ generator.definitions_['import_pe_g1'] = 'import pe_g1';
+ var s = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var wheel = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var v = this.getFieldValue('direction');
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ var code = s + ".motor(" + wheel + ',"' + v + '",' + speed + ")\n";
+ return code;
+}
+
+const pe_g1_dc_motor_speed = function (_, generator) {
+ generator.definitions_['import_pe_g1'] = 'import pe_g1';
+ var s = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var wheel = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var v = 'NC';
+ var code = s + ".motor(" + wheel + ',"' + v + '"' + ")\n";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const pe_g1_servo_set_angle = function (_, generator) {
+ generator.definitions_['import_pe_g1'] = 'import pe_g1';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
+ var code = v + '.servo180(' + dropdown_pin + ',' + num + ')\n';
+ return code;
+}
+
+const pe_g1_servo_set_speed = function (_, generator) {
+ generator.definitions_['import_pe_g1'] = 'import pe_g1';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
+ var code = v + '.servo360(' + dropdown_pin + ',' + num + ')\n';
+ return code;
+}
+
+const pe_g1_servo_get_angle = function (_, generator) {
+ generator.definitions_['import_pe_g1'] = 'import pe_g1';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = v + '.servo180(' + dropdown_pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const pe_g1_servo_get_speed = function (_, generator) {
+ generator.definitions_['import_pe_g1'] = 'import pe_g1';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = v + '.servo360(' + dropdown_pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/pins.js":
+/*!*****************************************!*\
+ !*** ../micropython/generators/pins.js ***!
+ \*****************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ espnow_channel: () => (/* binding */ espnow_channel),
+/* harmony export */ pins_analog: () => (/* binding */ pins_analog),
+/* harmony export */ pins_analog_pin: () => (/* binding */ pins_analog_pin),
+/* harmony export */ pins_axis: () => (/* binding */ pins_axis),
+/* harmony export */ pins_brightness: () => (/* binding */ pins_brightness),
+/* harmony export */ pins_builtinimg: () => (/* binding */ pins_builtinimg),
+/* harmony export */ pins_button: () => (/* binding */ pins_button),
+/* harmony export */ pins_dac: () => (/* binding */ pins_dac),
+/* harmony export */ pins_dac_pin: () => (/* binding */ pins_dac_pin),
+/* harmony export */ pins_digital: () => (/* binding */ pins_digital),
+/* harmony export */ pins_digital_dot: () => (/* binding */ pins_digital_dot),
+/* harmony export */ pins_digital_pin: () => (/* binding */ pins_digital_pin),
+/* harmony export */ pins_exlcdh: () => (/* binding */ pins_exlcdh),
+/* harmony export */ pins_exlcdv: () => (/* binding */ pins_exlcdv),
+/* harmony export */ pins_imglist: () => (/* binding */ pins_imglist),
+/* harmony export */ pins_interrupt: () => (/* binding */ pins_interrupt),
+/* harmony export */ pins_one_more: () => (/* binding */ pins_one_more),
+/* harmony export */ pins_playlist: () => (/* binding */ pins_playlist),
+/* harmony export */ pins_pwm: () => (/* binding */ pins_pwm),
+/* harmony export */ pins_pwm_pin: () => (/* binding */ pins_pwm_pin),
+/* harmony export */ pins_radio_datarate: () => (/* binding */ pins_radio_datarate),
+/* harmony export */ pins_radio_power: () => (/* binding */ pins_radio_power),
+/* harmony export */ pins_serial: () => (/* binding */ pins_serial),
+/* harmony export */ pins_tone_notes: () => (/* binding */ pins_tone_notes),
+/* harmony export */ pins_touch: () => (/* binding */ pins_touch),
+/* harmony export */ pins_touch_pin: () => (/* binding */ pins_touch_pin)
+/* harmony export */ });
+const pins_digital = function (_, generator) {
+ var code = this.getFieldValue('PIN');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const pins_button = pins_digital;
+const pins_digital_pin = pins_digital;
+const pins_analog_pin = pins_digital;
+const pins_analog = pins_digital;
+const pins_pwm_pin = pins_digital;
+const pins_pwm = pins_digital;
+const pins_dac_pin = pins_digital;
+const pins_dac = pins_digital;
+const pins_touch_pin = pins_digital;
+const pins_touch = pins_digital;
+const espnow_channel = pins_digital;
+const pins_interrupt = pins_digital;
+const pins_serial = pins_digital;
+const pins_builtinimg = pins_digital;
+const pins_imglist = pins_digital;
+const pins_playlist = pins_digital;
+const pins_axis = pins_digital;
+const pins_exlcdh = pins_digital;
+const pins_exlcdv = pins_digital;
+const pins_brightness = pins_digital;
+const pins_tone_notes = pins_digital;
+const pins_radio_power = pins_digital;
+const pins_radio_datarate = pins_digital;
+const pins_one_more = pins_digital;
+const pins_digital_dot = pins_digital;
+
+/***/ }),
+
+/***/ "../micropython/generators/sensor.js":
+/*!*******************************************!*\
+ !*** ../micropython/generators/sensor.js ***!
+ \*******************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ HCSR04: () => (/* binding */ HCSR04),
+/* harmony export */ RTC_get_time: () => (/* binding */ RTC_get_time),
+/* harmony export */ RTC_set_date: () => (/* binding */ RTC_set_date),
+/* harmony export */ RTC_set_datetime: () => (/* binding */ RTC_set_datetime),
+/* harmony export */ RTC_set_time: () => (/* binding */ RTC_set_time),
+/* harmony export */ dht11: () => (/* binding */ dht11),
+/* harmony export */ number1: () => (/* binding */ number1),
+/* harmony export */ sensor_adxl345_get_acceleration: () => (/* binding */ sensor_adxl345_get_acceleration),
+/* harmony export */ sensor_bmp: () => (/* binding */ sensor_bmp),
+/* harmony export */ sensor_button_get_presses: () => (/* binding */ sensor_button_get_presses),
+/* harmony export */ sensor_button_is_pressed: () => (/* binding */ sensor_button_is_pressed),
+/* harmony export */ sensor_button_was_pressed: () => (/* binding */ sensor_button_was_pressed),
+/* harmony export */ sensor_compass_reset: () => (/* binding */ sensor_compass_reset),
+/* harmony export */ sensor_dht11: () => (/* binding */ sensor_dht11),
+/* harmony export */ sensor_distance_hrsc04: () => (/* binding */ sensor_distance_hrsc04),
+/* harmony export */ sensor_ds18x20: () => (/* binding */ sensor_ds18x20),
+/* harmony export */ sensor_light: () => (/* binding */ sensor_light),
+/* harmony export */ sensor_lm35: () => (/* binding */ sensor_lm35),
+/* harmony export */ sensor_mixgo_button_attachInterrupt: () => (/* binding */ sensor_mixgo_button_attachInterrupt),
+/* harmony export */ sensor_mixgo_button_get_presses: () => (/* binding */ sensor_mixgo_button_get_presses),
+/* harmony export */ sensor_mixgo_button_is_pressed: () => (/* binding */ sensor_mixgo_button_is_pressed),
+/* harmony export */ sensor_mixgo_button_was_pressed: () => (/* binding */ sensor_mixgo_button_was_pressed),
+/* harmony export */ sensor_mixgo_extern_button_attachInterrupt: () => (/* binding */ sensor_mixgo_extern_button_attachInterrupt),
+/* harmony export */ sensor_mixgo_extern_button_get_presses: () => (/* binding */ sensor_mixgo_extern_button_get_presses),
+/* harmony export */ sensor_mixgo_extern_button_is_pressed: () => (/* binding */ sensor_mixgo_extern_button_is_pressed),
+/* harmony export */ sensor_mixgo_extern_button_was_pressed: () => (/* binding */ sensor_mixgo_extern_button_was_pressed),
+/* harmony export */ sensor_mixgo_extern_light: () => (/* binding */ sensor_mixgo_extern_light),
+/* harmony export */ sensor_mixgo_extern_pin_near: () => (/* binding */ sensor_mixgo_extern_pin_near),
+/* harmony export */ sensor_mixgo_extern_sound: () => (/* binding */ sensor_mixgo_extern_sound),
+/* harmony export */ sensor_mixgo_light: () => (/* binding */ sensor_mixgo_light),
+/* harmony export */ sensor_mixgo_pin_near: () => (/* binding */ sensor_mixgo_pin_near),
+/* harmony export */ sensor_mixgo_pin_pressed: () => (/* binding */ sensor_mixgo_pin_pressed),
+/* harmony export */ sensor_mpu9250_attachGestureInterrupt: () => (/* binding */ sensor_mpu9250_attachGestureInterrupt),
+/* harmony export */ sensor_mpu9250_calibrate_compass: () => (/* binding */ sensor_mpu9250_calibrate_compass),
+/* harmony export */ sensor_mpu9250_field_strength: () => (/* binding */ sensor_mpu9250_field_strength),
+/* harmony export */ sensor_mpu9250_gesture: () => (/* binding */ sensor_mpu9250_gesture),
+/* harmony export */ sensor_mpu9250_get_acceleration: () => (/* binding */ sensor_mpu9250_get_acceleration),
+/* harmony export */ sensor_mpu9250_get_gyro: () => (/* binding */ sensor_mpu9250_get_gyro),
+/* harmony export */ sensor_mpu9250_get_magnetic: () => (/* binding */ sensor_mpu9250_get_magnetic),
+/* harmony export */ sensor_mpu9250_temperature: () => (/* binding */ sensor_mpu9250_temperature),
+/* harmony export */ sensor_pin_near: () => (/* binding */ sensor_pin_near),
+/* harmony export */ sensor_pin_pressed: () => (/* binding */ sensor_pin_pressed),
+/* harmony export */ sensor_rtc_init: () => (/* binding */ sensor_rtc_init),
+/* harmony export */ sensor_sht: () => (/* binding */ sensor_sht),
+/* harmony export */ sensor_use_i2c_init: () => (/* binding */ sensor_use_i2c_init)
+/* harmony export */ });
+/* harmony import */ var _sensor_onboard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sensor_onboard */ "../micropython/generators/sensor_onboard.js");
+
+
+const sensor_mixgo_button_is_pressed = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
+ var code = 'mixgo.' + btn + '.is_pressed()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//ok
+const sensor_mixgo_button_was_pressed = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
+ var code = 'mixgo.' + btn + '.was_pressed()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_button_get_presses = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
+ var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ var code = 'mixgo.' + btn + '.get_presses(' + argument + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_button_attachInterrupt = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var dropdown_btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
+ var dropdown_mode = this.getFieldValue('mode');
+ var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
+ var code = 'mixgo.' + dropdown_btn + '.irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\n'
+ return code;
+}
+
+//ok
+const sensor_mixgo_extern_button_is_pressed = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
+ var code = 'mixgo.Button(' + pin + ').is_pressed(' + dropdown_stat + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//ok
+const sensor_mixgo_extern_button_was_pressed = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
+ var code = 'mixgo.Button(' + pin + ').was_pressed(' + dropdown_stat + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_extern_button_get_presses = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ var code = 'mixgo.Button(' + pin + ').get_presses(' + argument + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_extern_button_attachInterrupt = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var dropdown_mode = this.getFieldValue('mode');
+ var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
+ var code = 'mixgo.Button(' + pin + ').irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\n'
+ return code;
+}
+
+//ok
+const sensor_mpu9250_attachGestureInterrupt = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ var gesture = this.getFieldValue('gesture');
+ var branch = generator.statementToCode(this, 'DO');
+ var d = branch || generator.PASS;
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "mpu")
+ generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
+ var code = 'if ' + v + '.mpu9250_is_gesture("' + gesture + '"):\n' + d;
+ return code;
+}
+
+const sensor_mpu9250_gesture = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ var gesture = this.getFieldValue('gesture');
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "mpu")
+ generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
+ var code = v + '.mpu9250_is_gesture("' + gesture + '")';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//ok
+const sensor_mpu9250_get_acceleration = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ var key = this.getFieldValue('key');
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "mpu")
+ generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
+ var code = v + '.mpu9250_get_' + key + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_adxl345_get_acceleration = function (_, generator) {
+ generator.definitions_['import_adxl345'] = 'import adxl345';
+ // generator.definitions_['import_machine'] = 'import machine';
+ var key = this.getFieldValue('key');
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code;
+ if (key == 'x') {
+ code = v + '.readX()';
+ } else if (key == 'y') {
+ code = v + '.readY()';
+ } else if (key == 'z') {
+ code = v + '.readZ()';
+ } else if (key == 'values') {
+ code = v + '.readXYZ()';
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mpu9250_get_magnetic = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ var key = this.getFieldValue('key');
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "mpu")
+ generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
+ var code = v + '.mpu9250_magnetic_' + key + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mpu9250_get_gyro = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ var key = this.getFieldValue('key');
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "mpu")
+ generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
+ var code = v + '.mpu9250_gyro_' + key + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mpu9250_calibrate_compass = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ return '' + v + '.calibrate()\n';
+}
+
+const sensor_mpu9250_temperature = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "mpu")
+ generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
+ return [v + '.mpu9250_get_temperature()', generator.ORDER_ATOMIC];
+}
+
+const sensor_mpu9250_field_strength = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "compass")
+ generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';
+ var compass = this.getFieldValue('compass');
+ var a;
+ if (compass == 'strength') {
+ a = v + '.get_field_strength()';
+ }
+ else if (compass == 'heading') {
+ a = v + '.heading()';
+ }
+ return [a, generator.ORDER_ATOMIC];
+}
+
+const sensor_distance_hrsc04 = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ generator.setups_['class_hrsc04'] =
+ 'class HCSR04:\n' +
+ ' def __init__(self, tpin=pin15, epin=pin14, spin=pin13):\n' +
+ ' self.trigger_pin = tpin\n' +
+ ' self.echo_pin = epin\n' +
+ ' self.sclk_pin = spin\n' +
+ '\n' +
+ ' def distance_mm(self):\n' +
+ ' spi.init(baudrate=125000, sclk=self.sclk_pin,\n' +
+ ' mosi=self.trigger_pin, miso=self.echo_pin)\n' +
+ ' pre = 0\n' +
+ ' post = 0\n' +
+ ' k = -1\n' +
+ ' length = 500\n' +
+ ' resp = bytearray(length)\n' +
+ ' resp[0] = 0xFF\n' +
+ ' spi.write_readinto(resp, resp)\n' +
+ ' # find first non zero value\n' +
+ ' try:\n' +
+ ' i, value = next((ind, v) for ind, v in enumerate(resp) if v)\n' +
+ ' except StopIteration:\n' +
+ ' i = -1\n' +
+ ' if i > 0:\n' +
+ ' pre = bin(value).count("1")\n' +
+ ' # find first non full high value afterwards\n' +
+ ' try:\n' +
+ ' k, value = next((ind, v)\n' +
+ ' for ind, v in enumerate(resp[i:length - 2]) if resp[i + ind + 1] == 0)\n' +
+ ' post = bin(value).count("1") if k else 0\n' +
+ ' k = k + i\n' +
+ ' except StopIteration:\n' +
+ ' i = -1\n' +
+ ' dist= -1 if i < 0 else round((pre + (k - i) * 8. + post) * 8 * 0.172)\n' +
+ ' return dist\n' +
+ '\n' +
+ 'sonar=HCSR04()\n'
+ return ['sonar.distance_mm()/10.0', generator.ORDER_ATOMIC];
+}
+
+const RTC_get_time = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "rtc")
+ generator.definitions_['import_mixgo_rtc'] = 'from mixgo import rtc';
+ var code = v + '.datetime()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const RTC_set_time = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var hour = generator.valueToCode(this, "hour", generator.ORDER_ASSIGNMENT);
+ var minute = generator.valueToCode(this, "minute", generator.ORDER_ASSIGNMENT);
+ var second = generator.valueToCode(this, "second", generator.ORDER_ASSIGNMENT);
+ generator.setups_['class_DS1307'] = generator.CLASS_DS1307_INIT;
+ var code = 'str(ds.Hour(' + hour + '))+ str(ds.Minute(' + minute + ')) +str(ds.Second(' + second + '))\n';
+ return code;
+}
+
+const RTC_set_date = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var year = generator.valueToCode(this, "year", generator.ORDER_ASSIGNMENT);
+ var month = generator.valueToCode(this, "month", generator.ORDER_ASSIGNMENT);
+ var day = generator.valueToCode(this, "day", generator.ORDER_ASSIGNMENT);
+ generator.setups_['class_DS1307'] = generator.CLASS_DS1307_INIT;
+ var code = 'str(ds.Year(' + year + '))+ str(ds.Month(' + month + ')) +str(ds.Day(' + day + '))\n';
+ return code;
+}
+
+const sensor_compass_reset = function (block, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ return '' + v + '.reset_calibrate()\n';
+}
+
+const HCSR04 = function (_, generator) {
+ generator.definitions_['import_sonar'] = 'import sonar';
+ var dropdown_pin1 = generator.valueToCode(this, "PIN1", generator.ORDER_ASSIGNMENT);
+ var dropdown_pin2 = generator.valueToCode(this, "PIN2", generator.ORDER_ASSIGNMENT);
+ var code = 'sonar.Sonar(' + dropdown_pin1 + ', ' + dropdown_pin2 + ').checkdist()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_dht11 = function (_, generator) {
+ generator.definitions_['import_dhtx'] = 'import dhtx';
+ var sensor_type = this.getFieldValue('TYPE');
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var what = this.getFieldValue('WHAT');
+ var code = 'dhtx.get_dht_' + what + "('" + sensor_type + "', " + dropdown_pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_extern_light = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'mixgo.get_brightness(' + pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_extern_sound = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'mixgo.get_soundlevel(' + pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const number1 = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var code = this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_pin_pressed = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'button', generator.ORDER_ATOMIC);
+ var code = 'mixgo.' + pin + '.is_touched()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_extern_pin_near = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'mixgo.' + 'Infrared(' + pin + ')()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_pin_near = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var direction = this.getFieldValue('direction');
+ var code = 'mixgo.' + 'infrared_' + direction + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const RTC_set_datetime = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var year = generator.valueToCode(this, "year", generator.ORDER_ASSIGNMENT);
+ var month = generator.valueToCode(this, "month", generator.ORDER_ASSIGNMENT);
+ var day = generator.valueToCode(this, "day", generator.ORDER_ASSIGNMENT);
+ var hour = generator.valueToCode(this, "hour", generator.ORDER_ASSIGNMENT);
+ var minute = generator.valueToCode(this, "minute", generator.ORDER_ASSIGNMENT);
+ var second = generator.valueToCode(this, "second", generator.ORDER_ASSIGNMENT);
+ var week = generator.valueToCode(this, "weekday", generator.ORDER_ASSIGNMENT);
+ var millisecond = generator.valueToCode(this, "millisecond", generator.ORDER_ASSIGNMENT);
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "rtc")
+ generator.definitions_['import_mixgo_rtc'] = 'from mixgo import rtc';
+ var code = v + '.datetime((' + year + ',' + month + ',' + day + ',' + week + ',' + hour + ',' + minute + ',' + second + ',' + millisecond + '))\n';
+ return code;
+}
+
+const sensor_rtc_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ generator.definitions_['import_machine'] = 'import machine';
+ var code = v + ' = machine.RTC()\n';
+ return code;
+}
+
+const sensor_use_i2c_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_machine'] = 'import machine';
+ var code;
+ if (key == 'MPU9250') {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ code = v + ' = mpu9250.' + key + "(" + iv + ')\n';
+ } else if (key == 'BMP280') {
+ generator.definitions_['import_bmp280'] = 'import bmp280';
+ code = v + ' = bmp280.' + key + "(" + iv + ')\n';
+ } else if (key == 'SHT20') {
+ generator.definitions_['import_sht20'] = 'import sht20';
+ code = v + ' = sht20.' + key + "(" + iv + ')\n';
+ } else if (key == 'ADXL345') {
+ generator.definitions_['import_adxl345'] = 'import adxl345';
+ code = v + ' = adxl345.' + key + "(" + iv + ')\n';
+ }
+ return code;
+}
+
+const sensor_bmp = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_bmp280'] = 'import bmp280';
+ var code = v + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_sht = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_sht20'] = 'import sht20';
+ var code = v + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_ds18x20 = function (_, generator) {
+ generator.definitions_['import_ds18x20x'] = 'import ds18x20x';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'ds18x20x.get_ds18x20_temperature(' + dropdown_pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_lm35 = function (_, generator) {
+ generator.definitions_['import_lm35'] = 'import lm35';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'lm35.get_LM35_temperature(' + dropdown_pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_button_is_pressed = sensor_mixgo_button_is_pressed;
+const sensor_button_was_pressed = sensor_mixgo_button_was_pressed;
+const sensor_button_get_presses = sensor_mixgo_button_get_presses;
+const sensor_pin_pressed = sensor_mixgo_pin_pressed;
+const sensor_pin_near = sensor_mixgo_pin_near;
+const sensor_mixgo_light = _sensor_onboard__WEBPACK_IMPORTED_MODULE_0__.sensor_LTR308;
+const sensor_light = sensor_mixgo_light;
+// export const sensor_get_acceleration = sensor_mixgo_get_acceleration;
+const dht11 = sensor_dht11;
+
+/***/ }),
+
+/***/ "../micropython/generators/sensor_extern.js":
+/*!**************************************************!*\
+ !*** ../micropython/generators/sensor_extern.js ***!
+ \**************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ CI130X_BROADCAST: () => (/* binding */ CI130X_BROADCAST),
+/* harmony export */ CI130X_GET_THE_RECOGNIZED_CMD: () => (/* binding */ CI130X_GET_THE_RECOGNIZED_CMD),
+/* harmony export */ CI130X_GET_WHETHER_IDENTIFY: () => (/* binding */ CI130X_GET_WHETHER_IDENTIFY),
+/* harmony export */ CI130X_IDENTIFY_AND_SAVE: () => (/* binding */ CI130X_IDENTIFY_AND_SAVE),
+/* harmony export */ CI130X_SET_SYSTEM_CMD: () => (/* binding */ CI130X_SET_SYSTEM_CMD),
+/* harmony export */ HCSR04: () => (/* binding */ HCSR04),
+/* harmony export */ PS2_Button: () => (/* binding */ PS2_Button),
+/* harmony export */ PS2_Buttons: () => (/* binding */ PS2_Buttons),
+/* harmony export */ PS2_Buttons_new: () => (/* binding */ PS2_Buttons_new),
+/* harmony export */ PS2_State: () => (/* binding */ PS2_State),
+/* harmony export */ PS2_init: () => (/* binding */ PS2_init),
+/* harmony export */ PS2_init_new: () => (/* binding */ PS2_init_new),
+/* harmony export */ PS2_stk: () => (/* binding */ PS2_stk),
+/* harmony export */ PS2_stk_new: () => (/* binding */ PS2_stk_new),
+/* harmony export */ PS2_vibration: () => (/* binding */ PS2_vibration),
+/* harmony export */ PS2_vibration_new: () => (/* binding */ PS2_vibration_new),
+/* harmony export */ RTC_get_time: () => (/* binding */ RTC_get_time),
+/* harmony export */ RTC_set_date: () => (/* binding */ RTC_set_date),
+/* harmony export */ RTC_set_datetime: () => (/* binding */ RTC_set_datetime),
+/* harmony export */ RTC_set_time: () => (/* binding */ RTC_set_time),
+/* harmony export */ camera_sensor_init: () => (/* binding */ camera_sensor_init),
+/* harmony export */ camera_sensor_result: () => (/* binding */ camera_sensor_result),
+/* harmony export */ educore_body_sensor: () => (/* binding */ educore_body_sensor),
+/* harmony export */ educore_button_sensor_extern: () => (/* binding */ educore_button_sensor_extern),
+/* harmony export */ educore_camera_sensor: () => (/* binding */ educore_camera_sensor),
+/* harmony export */ educore_infrared_sensor: () => (/* binding */ educore_infrared_sensor),
+/* harmony export */ educore_soilhum_sensor: () => (/* binding */ educore_soilhum_sensor),
+/* harmony export */ educore_temp_sensor: () => (/* binding */ educore_temp_sensor),
+/* harmony export */ educore_temphum_sensor: () => (/* binding */ educore_temphum_sensor),
+/* harmony export */ educore_ultrasonic_sensor: () => (/* binding */ educore_ultrasonic_sensor),
+/* harmony export */ esp32_s2_weather_init: () => (/* binding */ esp32_s2_weather_init),
+/* harmony export */ esp32_s2_weather_rain: () => (/* binding */ esp32_s2_weather_rain),
+/* harmony export */ esp32_s2_weather_wd: () => (/* binding */ esp32_s2_weather_wd),
+/* harmony export */ esp32_s2_weather_ws: () => (/* binding */ esp32_s2_weather_ws),
+/* harmony export */ extern_rfid_read: () => (/* binding */ extern_rfid_read),
+/* harmony export */ extern_rfid_readcontent: () => (/* binding */ extern_rfid_readcontent),
+/* harmony export */ extern_rfid_readid: () => (/* binding */ extern_rfid_readid),
+/* harmony export */ extern_rfid_status: () => (/* binding */ extern_rfid_status),
+/* harmony export */ extern_rfid_write: () => (/* binding */ extern_rfid_write),
+/* harmony export */ extern_rfid_write_return: () => (/* binding */ extern_rfid_write_return),
+/* harmony export */ gnss_get_data: () => (/* binding */ gnss_get_data),
+/* harmony export */ gnss_have_data: () => (/* binding */ gnss_have_data),
+/* harmony export */ interaction_whether_to_interaction: () => (/* binding */ interaction_whether_to_interaction),
+/* harmony export */ interaction_whether_to_interaction_SANT: () => (/* binding */ interaction_whether_to_interaction_SANT),
+/* harmony export */ mixbot_sensor_extern_get_addr: () => (/* binding */ mixbot_sensor_extern_get_addr),
+/* harmony export */ mixbot_sensor_extern_set_addr: () => (/* binding */ mixbot_sensor_extern_set_addr),
+/* harmony export */ pm25_get_data: () => (/* binding */ pm25_get_data),
+/* harmony export */ radar_set_DETECTION_THRESHOLD: () => (/* binding */ radar_set_DETECTION_THRESHOLD),
+/* harmony export */ radar_set_DETECTION_THRESHOLD_SANT: () => (/* binding */ radar_set_DETECTION_THRESHOLD_SANT),
+/* harmony export */ robot_button_extern_get_value: () => (/* binding */ robot_button_extern_get_value),
+/* harmony export */ robot_color_extern_get_value: () => (/* binding */ robot_color_extern_get_value),
+/* harmony export */ robot_infrared_extern_get_value: () => (/* binding */ robot_infrared_extern_get_value),
+/* harmony export */ robot_infrared_extern_grey_get_value: () => (/* binding */ robot_infrared_extern_grey_get_value),
+/* harmony export */ robot_potentiometer_extern_get_value: () => (/* binding */ robot_potentiometer_extern_get_value),
+/* harmony export */ robot_sonar_extern_get_value: () => (/* binding */ robot_sonar_extern_get_value),
+/* harmony export */ robot_sonar_extern_led: () => (/* binding */ robot_sonar_extern_led),
+/* harmony export */ robot_touch_extern_get_value: () => (/* binding */ robot_touch_extern_get_value),
+/* harmony export */ sensor_APDS9960_extern: () => (/* binding */ sensor_APDS9960_extern),
+/* harmony export */ sensor_DS18X20: () => (/* binding */ sensor_DS18X20),
+/* harmony export */ sensor_LTR308_extern: () => (/* binding */ sensor_LTR308_extern),
+/* harmony export */ sensor_LTR390UV_extern: () => (/* binding */ sensor_LTR390UV_extern),
+/* harmony export */ sensor_MAX30102_extern: () => (/* binding */ sensor_MAX30102_extern),
+/* harmony export */ sensor_QMC5883L_extern: () => (/* binding */ sensor_QMC5883L_extern),
+/* harmony export */ sensor_VL530LX_extern: () => (/* binding */ sensor_VL530LX_extern),
+/* harmony export */ sensor_aht11_extern: () => (/* binding */ sensor_aht11_extern),
+/* harmony export */ sensor_bmp: () => (/* binding */ sensor_bmp),
+/* harmony export */ sensor_dht11: () => (/* binding */ sensor_dht11),
+/* harmony export */ sensor_distance_hrsc04: () => (/* binding */ sensor_distance_hrsc04),
+/* harmony export */ sensor_hp203_extern: () => (/* binding */ sensor_hp203_extern),
+/* harmony export */ sensor_ltr381_extern: () => (/* binding */ sensor_ltr381_extern),
+/* harmony export */ sensor_mixgo_extern_button_attachInterrupt: () => (/* binding */ sensor_mixgo_extern_button_attachInterrupt),
+/* harmony export */ sensor_mixgo_extern_button_get_presses: () => (/* binding */ sensor_mixgo_extern_button_get_presses),
+/* harmony export */ sensor_mixgo_extern_button_is_pressed: () => (/* binding */ sensor_mixgo_extern_button_is_pressed),
+/* harmony export */ sensor_mixgo_extern_button_was_pressed: () => (/* binding */ sensor_mixgo_extern_button_was_pressed),
+/* harmony export */ sensor_mixgo_extern_light: () => (/* binding */ sensor_mixgo_extern_light),
+/* harmony export */ sensor_mixgo_extern_pin_near: () => (/* binding */ sensor_mixgo_extern_pin_near),
+/* harmony export */ sensor_mixgo_extern_sound: () => (/* binding */ sensor_mixgo_extern_sound),
+/* harmony export */ sensor_mixgoce_hot_wheel_degrees: () => (/* binding */ sensor_mixgoce_hot_wheel_degrees),
+/* harmony export */ sensor_mixgoce_hot_wheel_is_touched: () => (/* binding */ sensor_mixgoce_hot_wheel_is_touched),
+/* harmony export */ sensor_mpu9250_attachGestureInterrupt: () => (/* binding */ sensor_mpu9250_attachGestureInterrupt),
+/* harmony export */ sensor_read_humiture: () => (/* binding */ sensor_read_humiture),
+/* harmony export */ sensor_rtc_init: () => (/* binding */ sensor_rtc_init),
+/* harmony export */ sensor_sht: () => (/* binding */ sensor_sht),
+/* harmony export */ sensor_shtc3_extern: () => (/* binding */ sensor_shtc3_extern),
+/* harmony export */ sensor_spl06_001_extern: () => (/* binding */ sensor_spl06_001_extern),
+/* harmony export */ sensor_ucs12071_extern: () => (/* binding */ sensor_ucs12071_extern),
+/* harmony export */ sensor_use_i2c_init: () => (/* binding */ sensor_use_i2c_init),
+/* harmony export */ sensor_use_spi_init: () => (/* binding */ sensor_use_spi_init),
+/* harmony export */ sensor_use_uart_init: () => (/* binding */ sensor_use_uart_init),
+/* harmony export */ sensor_weather_solo_init: () => (/* binding */ sensor_weather_solo_init),
+/* harmony export */ sensor_weather_solo_rain: () => (/* binding */ sensor_weather_solo_rain),
+/* harmony export */ sensor_weather_solo_wd: () => (/* binding */ sensor_weather_solo_wd),
+/* harmony export */ sensor_weather_solo_ws: () => (/* binding */ sensor_weather_solo_ws),
+/* harmony export */ sensor_weigh_init: () => (/* binding */ sensor_weigh_init),
+/* harmony export */ ultrasonic_sensor_read_distance: () => (/* binding */ ultrasonic_sensor_read_distance),
+/* harmony export */ weather_data: () => (/* binding */ weather_data),
+/* harmony export */ weather_have_data: () => (/* binding */ weather_have_data),
+/* harmony export */ weather_set_label: () => (/* binding */ weather_set_label),
+/* harmony export */ weather_uart_mixio: () => (/* binding */ weather_uart_mixio),
+/* harmony export */ weigh_sensor_get_weight: () => (/* binding */ weigh_sensor_get_weight)
+/* harmony export */ });
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const sensor_mixgo_extern_button_is_pressed = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
+ var code = 'mixgo.Button(' + pin + ').is_pressed(' + dropdown_stat + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//ok
+const sensor_mixgo_extern_button_was_pressed = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
+ var code = 'mixgo.Button(' + pin + ').was_pressed(' + dropdown_stat + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_extern_button_get_presses = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ var code = 'mixgo.Button(' + pin + ').get_presses(' + argument + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_extern_button_attachInterrupt = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var dropdown_mode = this.getFieldValue('mode');
+ var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
+ var code = 'mixgo.Button(' + pin + ').irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\n'
+ return code;
+}
+
+const sensor_mpu9250_attachGestureInterrupt = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ var gesture = this.getFieldValue('gesture');
+ var branch = generator.statementToCode(this, 'DO');
+ var d = branch || generator.PASS;
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "mpu")
+ generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
+ var code = 'if ' + v + '.mpu9250_is_gesture("' + gesture + '"):\n' + d;
+ return code;
+}
+
+const sensor_distance_hrsc04 = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ generator.setups_['class_hrsc04'] =
+ 'class HCSR04:\n' +
+ ' def __init__(self, tpin=pin15, epin=pin14, spin=pin13):\n' +
+ ' self.trigger_pin = tpin\n' +
+ ' self.echo_pin = epin\n' +
+ ' self.sclk_pin = spin\n' +
+ '\n' +
+ ' def distance_mm(self):\n' +
+ ' spi.init(baudrate=125000, sclk=self.sclk_pin,\n' +
+ ' mosi=self.trigger_pin, miso=self.echo_pin)\n' +
+ ' pre = 0\n' +
+ ' post = 0\n' +
+ ' k = -1\n' +
+ ' length = 500\n' +
+ ' resp = bytearray(length)\n' +
+ ' resp[0] = 0xFF\n' +
+ ' spi.write_readinto(resp, resp)\n' +
+ ' # find first non zero value\n' +
+ ' try:\n' +
+ ' i, value = next((ind, v) for ind, v in enumerate(resp) if v)\n' +
+ ' except StopIteration:\n' +
+ ' i = -1\n' +
+ ' if i > 0:\n' +
+ ' pre = bin(value).count("1")\n' +
+ ' # find first non full high value afterwards\n' +
+ ' try:\n' +
+ ' k, value = next((ind, v)\n' +
+ ' for ind, v in enumerate(resp[i:length - 2]) if resp[i + ind + 1] == 0)\n' +
+ ' post = bin(value).count("1") if k else 0\n' +
+ ' k = k + i\n' +
+ ' except StopIteration:\n' +
+ ' i = -1\n' +
+ ' dist= -1 if i < 0 else round((pre + (k - i) * 8. + post) * 8 * 0.172)\n' +
+ ' return dist\n' +
+ '\n' +
+ 'sonar=HCSR04()\n'
+ return ['sonar.distance_mm()/10.0', generator.ORDER_ATOMIC];
+}
+
+const RTC_set_time = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var hour = generator.valueToCode(this, "hour", generator.ORDER_ASSIGNMENT);
+ var minute = generator.valueToCode(this, "minute", generator.ORDER_ASSIGNMENT);
+ var second = generator.valueToCode(this, "second", generator.ORDER_ASSIGNMENT);
+ generator.setups_['class_DS1307'] = generator.CLASS_DS1307_INIT;
+ var code = 'str(ds.Hour(' + hour + '))+ str(ds.Minute(' + minute + ')) +str(ds.Second(' + second + '))\n';
+ return code;
+}
+
+const RTC_set_date = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var year = generator.valueToCode(this, "year", generator.ORDER_ASSIGNMENT);
+ var month = generator.valueToCode(this, "month", generator.ORDER_ASSIGNMENT);
+ var day = generator.valueToCode(this, "day", generator.ORDER_ASSIGNMENT);
+ generator.setups_['class_DS1307'] = generator.CLASS_DS1307_INIT;
+ var code = 'str(ds.Year(' + year + '))+ str(ds.Month(' + month + ')) +str(ds.Day(' + day + '))\n';
+ return code;
+}
+
+const sensor_mixgo_extern_light = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'mixgo.get_brightness(' + pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_extern_sound = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'mixgo.get_soundlevel(' + pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_extern_pin_near = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var direction = this.getFieldValue('direction');
+ var code = 'mixgo.' + 'infrared_' + direction + '.near()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_rtc_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ generator.definitions_['import_machine'] = 'import machine';
+ var code = v + ' = machine.RTC()\n';
+ return code;
+}
+
+const sensor_bmp = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_bmp280'] = 'import bmp280';
+ var code = v + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_sht = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_sht20'] = 'import sht20';
+ var code = v + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//pe
+const sensor_use_i2c_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code;
+ if (key == 'MPU9250') {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ code = v + ' = mpu9250.' + key + "(" + iv + ')\n';
+ } else if (key == 'BMP280') {
+ generator.definitions_['import_bmp280'] = 'import bmp280';
+ code = v + ' = bmp280.' + key + "(" + iv + ')\n';
+ } else if (key == 'SHT20') {
+ generator.definitions_['import_sht20'] = 'import sht20';
+ code = v + ' = sht20.' + key + "(" + iv + ')\n';
+ } else if (key == 'ADXL345') {
+ generator.definitions_['import_adxl345'] = 'import adxl345';
+ code = v + ' = adxl345.' + key + "(" + iv + ')\n';
+ } else if (key == 'LTR308') {
+ generator.definitions_['import_ltr308al'] = 'import ltr308al';
+ code = v + ' = ltr308al.LTR_308ALS(' + iv + ')\n';
+ } else if (key == 'LTR381RGB') {
+ generator.definitions_['import_ltr381rgb'] = 'import ltr381rgb';
+ code = v + ' = ltr381rgb.LTR_381RGB(' + iv + ')\n';
+ } else if(key == 'UCS12071'){
+ generator.definitions_['import_ucs12071'] = 'import ucs12071';
+ code = v + ' = ucs12071.UCS12071(' + iv + ')\n';
+ } else if (key == 'LTR390UV'){
+ generator.definitions_['import_ltr390uv'] = 'import ltr390uv';
+ code = v + ' = ltr390uv.ALS_UVS(' + iv +')\n';
+ } else if (key == 'HP203X') {
+ generator.definitions_['import_hp203x'] = 'import hp203x';
+ code = v + ' = hp203x.HP203X(' + iv + ')\n';
+ } else if(key == "SPL06_001"){
+ generator.definitions_['import_spl06_001'] = 'import spl06_001';
+ code = v + ' = spl06_001.SPL06(' + iv + ')\n';
+ } else if (key == 'SHTC3') {
+ generator.definitions_['import_shtc3'] = 'import shtc3';
+ code = v + ' = shtc3.' + key + "(" + iv + ')\n';
+ } else if (key == 'AHT21') {
+ generator.definitions_['import_ahtx0'] = 'import ahtx0';
+ code = v + ' = ahtx0.AHTx0(' + iv + ')\n';
+ } else if (key == 'VL53L0X') {
+ generator.definitions_['import_vl53l0x'] = 'import vl53l0x';
+ code = v + ' = vl53l0x.' + key + "(" + iv + ')\n';
+ } else if (key == 'QMC5883L') {
+ generator.definitions_['import_qmc5883l'] = 'import qmc5883l';
+ code = v + ' = qmc5883l.Compass(' + iv + ')\n';
+ } else if (key == 'MAX30102') {
+ generator.definitions_['import_max30102'] = 'import max30102';
+ code = v + ' = max30102.MAX30102(' + iv + ')\n';
+ } else if (key == 'APDS9960') {
+ generator.definitions_['import_apds9960'] = 'import apds9960';
+ code = v + ' = apds9960.APDS9960(' + iv + ')\n';
+ } else if (key == 'RFID') {
+ generator.definitions_['import_rc522'] = 'import rc522';
+ code = v + ' = rc522.RC522(' + iv + ')\n';
+ }else if (key == 'CBR817') {
+ generator.definitions_['import_cbr817'] = 'import cbr817';
+ code = v + ' = cbr817.' + key + "(" + iv + ')\n';
+ }else if (key == 'CI130X'){
+ generator.definitions_['import_ci130x'] = 'import ci130x';
+ code = v + ' = ci130x.' + key + "(" + iv + ')\n';
+ }
+ return code;
+}
+
+const radar_set_DETECTION_THRESHOLD = function (_, generator) {
+ generator.definitions_['import_cbr817'] = 'import cbr817';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var value = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var value2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
+ var code = sub + '.threshold(' + value +')\n'+sub + '.delay_ms(' + value2 +')\n';
+ return code;
+}
+
+const radar_set_DETECTION_THRESHOLD_SANT = function (_, generator) {
+ generator.definitions_['import_sant_g2_ext_mmw'] = 'from sant_g2 import ext_mmw';
+ var value = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var value2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
+ var code = 'ext_mmw.threshold(' + value +')\n'+ 'ext_mmw.delay_ms(' + value2 +')\n';
+ return code;
+}
+
+const interaction_whether_to_interaction = function(_,generator){
+ generator.definitions_['import_cbr817'] = 'import cbr817';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub+'.result()';
+ return [code,generator.ORDER_ATOMIC];
+}
+
+const interaction_whether_to_interaction_SANT = function(_,generator){
+ generator.definitions_['import_sant_g2_ext_mmw'] = 'from sant_g2 import ext_mmw';
+ var code = 'ext_mmw.result()';
+ return [code,generator.ORDER_ATOMIC];
+}
+
+const CI130X_IDENTIFY_AND_SAVE = function(_,generator){
+ generator.definitions_['import_ci130x'] = 'import ci130x';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub+'.cmd_id()\n';
+ return code;
+}
+
+const CI130X_GET_WHETHER_IDENTIFY = function(_,generator){
+ generator.definitions_['import_ci130x'] = 'import ci130x';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var cmd = this.getFieldValue('cmd');
+ var code = sub+'.result('+cmd+')';
+ return [code,generator.ORDER_ATOMIC];
+}
+
+const CI130X_GET_THE_RECOGNIZED_CMD = function(_,generator){
+ generator.definitions_['import_ci130x'] = 'import ci130x';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ if(key == 'status1'){
+ var code = sub+'.status()[0]';
+ }else if(key == 'status2'){
+ var code = sub+'.status()[1]';
+ }else{
+ var code = sub+'.'+key +'()';
+ }
+ return [code,generator.ORDER_ATOMIC];
+}
+
+const CI130X_BROADCAST = function(_,generator){
+ generator.definitions_['import_ci130x'] = 'import ci130x';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
+ var star = this.getFieldValue('star');
+ var end = this.getFieldValue('end');
+ var code = sub+'.play('+star+','+num+','+end+')\n';
+ return code;
+}
+
+const CI130X_SET_SYSTEM_CMD = function(_,generator){
+ generator.definitions_['import_ci130x'] = 'import ci130x';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var cmd = this.getFieldValue('cmd');
+ var code = sub+'.sys_cmd('+cmd+')\n';
+ return code;
+}
+
+const sensor_MAX30102_extern = function (_, generator) {
+ generator.definitions_['import_max30102'] = 'import max30102';
+ var key = this.getFieldValue('key');
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub + '.heartrate()' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_APDS9960_extern = function (_, generator) {
+ generator.definitions_['import_apds9960'] = 'import apds9960';
+ var key = this.getFieldValue('key');
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub + '.' + key + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_LTR308_extern = function (_, generator) {
+ generator.definitions_['import_ltr308al'] = 'import ltr308al';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub + '.getdata()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_hp203_extern = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_hp203x'] = 'import hp203x';
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_spl06_001_extern = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_spl06_001'] = 'import spl06_001';
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_ltr381_extern = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_ltr381rgb'] = 'import ltr381rgb';
+ var code = sub + '.getdata()' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_ucs12071_extern = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_ucs12071'] = 'import ucs12071';
+ if (key == '0'){
+ var code = sub + '.color()';
+ }
+ else if(key == '1'){
+ var code = sub + '.color_raw()';
+ }
+ else if(key == '2'){
+ var code = sub + '.als()';
+ }
+ else{
+ var code = sub + '.ir()';
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_LTR390UV_extern = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_time'] = 'import time';
+ generator.definitions_['import_ltr390uv'] = 'import ltr390uv';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ if (key == 'E') {
+ var code = sub + '.ambient_light()';
+ } else {
+ var code = sub + '.ultraviolet()';
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_QMC5883L_extern = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_qmc5883l'] = 'import qmc5883l';
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_shtc3_extern = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_shtc3'] = 'import shtc3';
+ var code = sub + '.' + key + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_aht11_extern = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_ahtx0'] = 'import ahtx0';
+ var code = sub + '.' + key + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_VL530LX_extern = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ generator.definitions_['import_vl53l0x'] = 'import vl53l0x';
+ var code = sub + '.read()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_use_spi_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var sv = generator.valueToCode(this, 'SPISUB', generator.ORDER_ATOMIC);
+ var pv = generator.valueToCode(this, 'PINSUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code;
+ if (key == 'RFID') {
+ generator.definitions_['import_rc522'] = 'import rc522';
+ var code = v + ' = rc522.RC522(' + sv + ',' + pv + ')\n';
+ } else if (key == 'Weather') {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version] = 'import ' + version;
+ generator.definitions_['import_ws_lora'] = 'import ws_lora';
+ if (version == 'mixgo_pe') {
+ var code = v + ' = ws_lora.Weather(' + sv + ',' + pv + ')\n';
+ } else if (version == 'mixgo_nova') {
+ var code = v + ' = ws_lora.Weather(' + sv + ',' + pv + ',' + version + '.onboard_i2c_soft' + ')\n';
+ } else {
+ var code = v + ' = ws_lora.Weather(' + sv + ',' + pv + ',' + version + '.onboard_i2c' + ')\n';
+ }
+ }
+ return code;
+}
+
+const extern_rfid_read = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_rc522'] = 'import rc522';
+ var code = sub + '.read_card(' + sector + ',"' + key + '")';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const extern_rfid_readid = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ generator.definitions_['import_rc522'] = 'import rc522';
+ var code = sub + '.read_card(0, x="id")';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const extern_rfid_readcontent = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
+ generator.definitions_['import_rc522'] = 'import rc522';
+ var code = sub + '.read_card(' + sector + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const extern_rfid_write = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
+ var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
+ generator.definitions_['import_rc522'] = 'import rc522';
+ var code = sub + '.write_card(' + cnt + ',' + sector + ')\n';
+ return code;
+}
+
+const extern_rfid_write_return = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
+ var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
+ generator.definitions_['import_rc522'] = 'import rc522';
+ var code = sub + '.write_card(' + cnt + ',' + sector + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const extern_rfid_status = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_rc522'] = 'import rc522';
+ var code = sub + '.scan_card()==' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const weather_data = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_ws_lora'] = 'import ws_lora';
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const weather_have_data = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ generator.definitions_['import_ws_lora'] = 'import ws_lora';
+ var code = sub + '.any()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const weather_uart_mixio = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var base = generator.valueToCode(this, 'BASE', generator.ORDER_ATOMIC);
+ generator.definitions_['import_ws_lora'] = 'import ws_lora';
+ var code = sub + '.uart_mixio(topic=' + base + ')\n';
+ return code;
+}
+
+const weather_set_label = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ generator.definitions_['import_ws_lora'] = 'import ws_lora';
+ var code = new Array(this.itemCount_);
+ var default_value = '0';
+ for (var n = 0; n < this.itemCount_; n++) {
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || default_value;
+ }
+ var code = sub + '.label(' + code.join(', ') + ')\n';
+ return code;
+}
+
+const sensor_mixgoce_hot_wheel_is_touched = function (_, generator) {
+ var key = this.getFieldValue('key');
+ var stat = this.getFieldValue('stat');
+ generator.definitions_['import_tpwheel'] = 'import tpwheel';
+ var code = 'tpwheel.TouchPadWheels(' + key + ').' + stat;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgoce_hot_wheel_degrees = function (_, generator) {
+ generator.definitions_['import_tpwheel'] = 'import tpwheel';
+ var code = 'tpwheel.hot_wheels_degree()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const esp32_s2_weather_init = function (_, generator) {
+ generator.definitions_['import_weather'] = 'import weather';
+ generator.definitions_['import_board_*'] = 'from board import *';
+ var wd = generator.valueToCode(this, 'wd', generator.ORDER_ATOMIC);
+ var ws = generator.valueToCode(this, 'ws', generator.ORDER_ATOMIC);
+ var rain = generator.valueToCode(this, 'rain', generator.ORDER_ATOMIC);
+ var code = "wd = weather.Weather_wd(" + wd + ")\n"
+ code += "ws = weather.Weather_ws(" + ws + ")\n"
+ code += "rain = weather.Weather_rain(" + rain + ")\n"
+ return code;
+}
+
+const esp32_s2_weather_wd = function (_, generator) {
+ generator.definitions_['import_weather'] = 'import weather';
+ var code = 'wd.wind_direction()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const esp32_s2_weather_rain = function (_, generator) {
+ generator.definitions_['import_weather'] = 'import weather';
+ var rain = generator.valueToCode(this, 'rain', generator.ORDER_ATOMIC);
+ var code = 'rain.rain_count(time_Hour=' + rain + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const esp32_s2_weather_ws = function (_, generator) {
+ generator.definitions_['import_weather'] = 'import weather';
+ var key = this.getFieldValue('key');
+ if (key == 'ALL') {
+ var code = 'ws.wind_speed()';
+ } else {
+ var code = 'ws.wind_speed()[' + key + ']';
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const HCSR04 = function (_, generator) {
+ generator.definitions_['import_sonar'] = 'import sonar';
+ var dropdown_pin1 = generator.valueToCode(this, "PIN1", generator.ORDER_ASSIGNMENT);
+ var dropdown_pin2 = generator.valueToCode(this, "PIN2", generator.ORDER_ASSIGNMENT);
+ var code = 'sonar.Sonar(' + dropdown_pin1 + ',' + dropdown_pin2 + ').checkdist()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const PS2_init = function (_, generator) {
+ generator.definitions_['import_ps2'] = 'import ps2';
+ //generator.definitions_['import_board'] = 'import board';
+ var PS2_CLK = this.getFieldValue('PS2_CLK');
+ var PS2_DOU = this.getFieldValue('PS2_DOU');
+ var PS2_DIN = this.getFieldValue('PS2_DIN');
+ var PS2_CS = this.getFieldValue('PS2_CS');
+ var code = 'mixgope_ps = ps2.PS2Controller(' + PS2_CLK + ',' + PS2_DOU + ',' + PS2_DIN + ',' + PS2_CS + ')\n';
+ return code;
+}
+
+const PS2_vibration = function (_, generator) {
+ generator.definitions_['import_ps2'] = 'import ps2';
+ var ss = this.getFieldValue('smotorstate');
+ var amp = generator.valueToCode(this, 'AMP', generator.ORDER_ATOMIC);
+ var code = "mixgope_ps.PS2_vibration(" + ss + ',' + amp + ")\n";
+ return code;
+}
+
+const PS2_Button = function (_, generator) {
+ generator.definitions_['import_ps2'] = 'import ps2';
+ var bt = this.getFieldValue('psbt');
+ var code = "mixgope_ps.PS2_keydata()[0] & (ps2." + bt + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const PS2_Buttons = function (_, generator) {
+ generator.definitions_['import_ps2'] = 'import ps2';
+ var bt = this.getFieldValue('psbt');
+ var code = "ps2." + bt;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const PS2_State = function (_, generator) {
+ generator.definitions_['import_ps2'] = 'import ps2';
+ var bt = this.getFieldValue('btstate');
+ var code = "mixgope_ps.PS2_keydata()[" + bt + "]";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const PS2_stk = function (_, generator) {
+ generator.definitions_['import_ps2'] = 'import ps2';
+ var stk = this.getFieldValue('psstk');
+ var code = "mixgope_ps.PS2_keydata()[1][" + stk + "]";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const RTC_set_datetime = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var year = generator.valueToCode(this, "year", generator.ORDER_ASSIGNMENT);
+ var month = generator.valueToCode(this, "month", generator.ORDER_ASSIGNMENT);
+ var day = generator.valueToCode(this, "day", generator.ORDER_ASSIGNMENT);
+ var hour = generator.valueToCode(this, "hour", generator.ORDER_ASSIGNMENT);
+ var minute = generator.valueToCode(this, "minute", generator.ORDER_ASSIGNMENT);
+ var second = generator.valueToCode(this, "second", generator.ORDER_ASSIGNMENT);
+ var week = generator.valueToCode(this, "weekday", generator.ORDER_ASSIGNMENT);
+ var millisecond = generator.valueToCode(this, "millisecond", generator.ORDER_ASSIGNMENT);
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "rtc")
+ generator.definitions_['import_mixgo_rtc'] = 'from mixgo import rtc';
+ var code = v + '.datetime((' + year + ',' + month + ',' + day + ',' + week + ',' + hour + ',' + minute + ',' + second + ',' + millisecond + '))\n';
+ return code;
+}
+
+const RTC_get_time = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "rtc")
+ generator.definitions_['import_mixgo_rtc'] = 'from mixgo import rtc';
+ var code = v + '.datetime()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_dht11 = function (_, generator) {
+ generator.definitions_['import_dhtx'] = 'import dhtx';
+ var sensor_type = this.getFieldValue('TYPE');
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var what = this.getFieldValue('WHAT');
+ var code = 'dhtx.' + sensor_type + "(" + dropdown_pin + ').' + what + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const PS2_init_new = function (_, generator) {
+ generator.definitions_['import_ps2'] = 'import ps2';
+ //generator.definitions_['import_board'] = 'import board';
+ var PS2_CLK = generator.valueToCode(this, 'CLK', generator.ORDER_ATOMIC);
+ var PS2_DOU = generator.valueToCode(this, 'DOU', generator.ORDER_ATOMIC);
+ var PS2_DIN = generator.valueToCode(this, 'DIN', generator.ORDER_ATOMIC);
+ var PS2_CS = generator.valueToCode(this, 'CS', generator.ORDER_ATOMIC);
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub + ' = ps2.PS2Controller(' + PS2_CLK + ',' + PS2_DOU + ',' + PS2_DIN + ',' + PS2_CS + ')\n';
+ return code;
+}
+
+const PS2_vibration_new = function (_, generator) {
+ generator.definitions_['import_ps2'] = 'import ps2';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var ss = this.getFieldValue('smotorstate');
+ var amp = generator.valueToCode(this, 'AMP', generator.ORDER_ATOMIC);
+ var code = sub + ".vibration(" + ss + ',' + amp + ")\n";
+ return code;
+}
+
+const PS2_Buttons_new = function (_, generator) {
+ generator.definitions_['import_ps2'] = 'import ps2';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var bt = this.getFieldValue('psbt');
+ var code = sub + '.button(ps2.' + bt + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const PS2_stk_new = function (_, generator) {
+ generator.definitions_['import_ps2'] = 'import ps2';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var stk = this.getFieldValue('psstk');
+ var code = sub + ".analog(ps2.PSS_" + stk + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_use_uart_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var s = this.getFieldValue('sensor');
+ var code = ''
+ if (s == 'PM') {
+ generator.definitions_['import_pm2_5'] = 'import pm2_5';
+ code = v + '=pm2_5.PM2_5(' + key + ')\n';
+ } else if (s == 'GNSS') {
+ generator.definitions_['import_gnss'] = 'import gnss';
+ code = v + '=gnss.NMEA0183(' + key + ')\n';
+ }
+ return code;
+}
+
+const pm25_get_data = function (_, generator) {
+ generator.definitions_['import_pm2_5'] = 'import pm2_5';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var pm = this.getFieldValue('pm');
+ var code = v + ".concentration()" + pm;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const gnss_get_data = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_gnss'] = 'import gnss';
+ var code = sub + '.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const gnss_have_data = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ generator.definitions_['import_gnss'] = 'import gnss';
+ var code = sub + '.any()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//mixbot/feiyi extern below:
+const robot_button_extern_get_value = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ var num = this.getFieldValue('num');
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_button'] = 'from mixbot_ext import ext_button';
+ var code = 'ext_button.value(' + mode + ")" + num;
+ return [code, generator.ORDER_ATOMIC];
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_button'] = 'ext_button_left = i2cdevice.Buttonx5(ext_i2c_left)';
+ var code = 'ext_button_left.value()' + num;
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_button'] = 'ext_button_right = i2cdevice.Buttonx5(ext_i2c_right)';
+ var code = 'ext_button_right.value()' + num;
+ }
+ return [code, generator.ORDER_ATOMIC];
+ }
+}
+
+const robot_touch_extern_get_value = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_collision'] = 'from mixbot_ext import ext_collision';
+ var code = 'ext_collision.value(' + mode + ")";
+ return [code, generator.ORDER_ATOMIC];
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_collision'] = 'ext_collision_left = i2cdevice.Button(ext_i2c_left)';
+ var code = 'ext_collision_left.value()';
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_collision'] = 'ext_collision_right = i2cdevice.Button(ext_i2c_right)';
+ var code = 'ext_collision_right.value()';
+ }
+ return [code, generator.ORDER_ATOMIC];
+ }
+}
+
+const robot_infrared_extern_get_value = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'mixbot') {
+ var mode = this.getFieldValue('mode');
+ generator.definitions_['import_mixbot_ext_ext_infrared'] = 'from mixbot_ext import ext_infrared';
+ var code = 'ext_infrared.value(' + mode + ")";
+ return [code, generator.ORDER_ATOMIC];
+ } else if (version == 'feiyi') {
+ var mode = this.getFieldValue('mode');
+ generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';
+ var code = 'onboard_bot51.read_ps(' + mode + ")";
+ return [code, generator.ORDER_ATOMIC];
+ }
+}
+
+const robot_infrared_extern_grey_get_value = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_grey_near'] = 'ext_grey_near_left = i2cdevice.Infrared(ext_i2c_left)';
+ var code = 'ext_grey_near_left.value()';
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_grey_near'] = 'ext_grey_near_right = i2cdevice.Infrared(ext_i2c_right)';
+ var code = 'ext_grey_near_right.value()';
+ }
+ return [code, generator.ORDER_ATOMIC];
+ }
+}
+
+const robot_potentiometer_extern_get_value = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_potentiometer'] = 'from mixbot_ext import ext_potentiometer';
+ var code = 'ext_potentiometer.value(' + mode + ")";
+ return [code, generator.ORDER_ATOMIC];
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_potentiometer'] = 'ext_potentiometer_left = i2cdevice.Dimmer(ext_i2c_left)';
+ var code = 'ext_potentiometer_left.value()';
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_potentiometer'] = 'ext_potentiometer_right = i2cdevice.Dimmer(ext_i2c_right)';
+ var code = 'ext_potentiometer_right.value()';
+ }
+ return [code, generator.ORDER_ATOMIC];
+ }
+}
+
+const robot_color_extern_get_value = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ var color = this.getFieldValue('color');
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_color'] = 'from mixbot_ext import ext_color';
+ var code = 'ext_color.recognition(' + mode + ")" + color;
+ return [code, generator.ORDER_ATOMIC];
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_color'] = 'ext_color_left = i2cdevice.Color_ID(ext_i2c_left)';
+ var code = 'ext_color_left.recognition()' + color;
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_color'] = 'ext_color_right = i2cdevice.Color_ID(ext_i2c_right)';
+ var code = 'ext_color_right.recognition()' + color;
+ }
+ return [code, generator.ORDER_ATOMIC];
+ }
+}
+
+const robot_sonar_extern_get_value = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_sonar'] = 'from mixbot_ext import ext_sonar';
+ var code = 'ext_sonar.value(' + mode + ")";
+ return [code, generator.ORDER_ATOMIC];
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_sonar'] = 'ext_sonar_left = i2cdevice.Sonar(ext_i2c_left)';
+ var code = 'ext_sonar_left.value()';
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_sonar'] = 'ext_sonar_right = i2cdevice.Sonar(ext_i2c_right)';
+ var code = 'ext_sonar_right.value()';
+ }
+ return [code, generator.ORDER_ATOMIC];
+ }
+}
+
+const robot_sonar_extern_led = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var mode = this.getFieldValue('mode');
+ var light = generator.valueToCode(this, 'light', generator.ORDER_ATOMIC);
+ var op = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ if (version == 'mixbot') {
+ generator.definitions_['import_mixbot_ext_ext_sonar'] = 'from mixbot_ext import ext_sonar';
+ var code = 'ext_sonar.led(' + mode + ',' + light + ',' + op + ")\n";
+ return code;
+ } else if (version == 'feiyi') {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
+ if (mode == "0") {
+ generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
+ generator.definitions_['import_left_sonar'] = 'ext_sonar_left = i2cdevice.Sonar(ext_i2c_left)';
+ var code = 'ext_sonar_left.led(0,' + light + ',' + op + ')\n';
+ } else if (mode == "1") {
+ generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
+ generator.definitions_['import_right_sonar'] = 'ext_sonar_right = i2cdevice.Sonar(ext_i2c_right)';
+ var code = 'ext_sonar_right.led(0,' + light + ',' + op + ')\n';
+ }
+ return code;
+ }
+}
+
+const mixbot_sensor_extern_get_addr = function (_, generator) {
+ var name = this.getFieldValue('name');
+ generator.definitions_['import_mixbot_ext_' + name] = 'from mixbot_ext import ' + name;
+ var code = name + '.addr_get()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const mixbot_sensor_extern_set_addr = function (_, generator) {
+ var name = this.getFieldValue('name');
+ generator.definitions_['import_mixbot_ext_' + name] = 'from mixbot_ext import ' + name;
+ var oldaddr = generator.valueToCode(this, 'old', generator.ORDER_ATOMIC);
+ var newaddr = generator.valueToCode(this, 'new', generator.ORDER_ATOMIC);
+ var code = name + '.addr_set(' + oldaddr + ',' + newaddr + ')\n';
+ return code;
+}
+
+const sensor_weather_solo_init = function (_, generator) {
+ generator.definitions_['import_ws_solo'] = 'import ws_solo';
+ var wd = generator.valueToCode(this, 'wd', generator.ORDER_ATOMIC);
+ var ws = generator.valueToCode(this, 'ws', generator.ORDER_ATOMIC);
+ var rain = generator.valueToCode(this, 'rain', generator.ORDER_ATOMIC);
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub + ' = ws_solo.Weather_Solo(' + wd + ', ' + ws + ', ' + rain + ')\n';
+ return code;
+}
+
+const sensor_weather_solo_wd = function (_, generator) {
+ generator.definitions_['import_ws_solo'] = 'import ws_solo';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.wind_direction()' + key + '';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_weather_solo_ws = function (_, generator) {
+ generator.definitions_['import_ws_solo'] = 'import ws_solo';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.wind_speed()' + key + '';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_weather_solo_rain = function (_, generator) {
+ generator.definitions_['import_ws_solo'] = 'import ws_solo';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub + '.rain_count(' + time + ')' + key + '';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+
+const sensor_DS18X20 = function(_, generator){
+ generator.definitions_['import_DS18X20'] = 'from ds18b20 import DS18X20';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code ='DS18X20('+dropdown_pin+').temperature()';
+ return [code, generator.ORDER_ATOMIC];
+};
+
+//educore sensor_extern
+const educore_body_sensor = function (_, generator) {
+ generator.definitions_['import_educore_tsd'] = 'from educore import tsd';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'tsd(' + pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_soilhum_sensor = function (_, generator) {
+ generator.definitions_['import_educore_solihum'] = 'from educore import soilhum';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'soilhum(' + pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_temphum_sensor = function (_, generator) {
+ generator.definitions_['import_educore_dht'] = 'from educore import dht';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'dht(' + pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_infrared_sensor = function (_, generator) {
+ generator.definitions_['import_educore_tsd'] = 'from educore import tsd';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'tsd(' + pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_button_sensor_extern = function (_, generator) {
+ generator.definitions_['import_educore_button'] = 'from educore import button';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'button(' + pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_read_humiture = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub+".read()["+key+"]";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_ultrasonic_sensor = function (_, generator) {
+ generator.definitions_['import_educore_ultrasonic'] = 'from educore import ultrasonic';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'ultrasonic(' + pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const ultrasonic_sensor_read_distance = function (_, generator) {
+ generator.definitions_['import_educore_ultrasonic'] = 'from educore import ultrasonic';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub+".diatance()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_temp_sensor = function (_, generator) {
+ generator.definitions_['import_educore_ds18b20'] = 'from educore import ds18b20';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'ds18b20(' + pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_camera_sensor = function (_, generator) {
+ generator.definitions_['import_educore_smartcamera'] = 'from educore import smartcamera';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'smartcamera(' + pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const camera_sensor_init = function (_, generator) {
+ generator.definitions_['import_educore_smartcamera'] = 'from educore import smartcamera';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub+'.init(' + key + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const camera_sensor_result = function (_, generator) {
+ generator.definitions_['import_educore_smartcamera'] = 'from educore import smartcamera';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub+'.result()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_weigh_init = function (_, generator) {
+ generator.definitions_['import_hx270'] = 'import hx720';
+ var sck = generator.valueToCode(this, 'sck', generator.ORDER_ATOMIC);
+ var dat = generator.valueToCode(this, 'dat', generator.ORDER_ATOMIC);
+ var pc = generator.valueToCode(this, 'pc', generator.ORDER_ATOMIC);
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub + ' = hx720.HX720(' + sck + ', ' + dat + ', ' + pc + ')\n';
+ return code;
+}
+
+const weigh_sensor_get_weight = function (_, generator) {
+ generator.definitions_['import_hx270'] = 'import hx720';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = v + ".read_weight(10)";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/sensor_onboard.js":
+/*!***************************************************!*\
+ !*** ../micropython/generators/sensor_onboard.js ***!
+ \***************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ CI130X_BROADCAST_SANT: () => (/* binding */ CI130X_BROADCAST_SANT),
+/* harmony export */ CI130X_GET_THE_RECOGNIZED_CMD_SANT: () => (/* binding */ CI130X_GET_THE_RECOGNIZED_CMD_SANT),
+/* harmony export */ CI130X_GET_WHETHER_IDENTIFY_SANT: () => (/* binding */ CI130X_GET_WHETHER_IDENTIFY_SANT),
+/* harmony export */ CI130X_IDENTIFY_AND_SAVE_SANT: () => (/* binding */ CI130X_IDENTIFY_AND_SAVE_SANT),
+/* harmony export */ CI130X_SET_SYSTEM_CMD_SANT: () => (/* binding */ CI130X_SET_SYSTEM_CMD_SANT),
+/* harmony export */ HCSR04: () => (/* binding */ HCSR04),
+/* harmony export */ bitbot_als_num: () => (/* binding */ bitbot_als_num),
+/* harmony export */ dht11: () => (/* binding */ dht11),
+/* harmony export */ educore_button_sensor: () => (/* binding */ educore_button_sensor),
+/* harmony export */ educore_button_was_pressed: () => (/* binding */ educore_button_was_pressed),
+/* harmony export */ educore_gyroscope_sensor: () => (/* binding */ educore_gyroscope_sensor),
+/* harmony export */ educore_gyroscope_sensor_read: () => (/* binding */ educore_gyroscope_sensor_read),
+/* harmony export */ educore_gyroscope_sensor_shake: () => (/* binding */ educore_gyroscope_sensor_shake),
+/* harmony export */ educore_light_sensor: () => (/* binding */ educore_light_sensor),
+/* harmony export */ educore_rfid_sensor: () => (/* binding */ educore_rfid_sensor),
+/* harmony export */ educore_rfid_sensor_scan: () => (/* binding */ educore_rfid_sensor_scan),
+/* harmony export */ educore_rfid_sensor_scan_data: () => (/* binding */ educore_rfid_sensor_scan_data),
+/* harmony export */ educore_voice_sensor: () => (/* binding */ educore_voice_sensor),
+/* harmony export */ number1: () => (/* binding */ number1),
+/* harmony export */ number2: () => (/* binding */ number2),
+/* harmony export */ number3: () => (/* binding */ number3),
+/* harmony export */ number4: () => (/* binding */ number4),
+/* harmony export */ number5: () => (/* binding */ number5),
+/* harmony export */ number6: () => (/* binding */ number6),
+/* harmony export */ number7: () => (/* binding */ number7),
+/* harmony export */ onboard_RTC_get_time: () => (/* binding */ onboard_RTC_get_time),
+/* harmony export */ onboard_RTC_get_time_str: () => (/* binding */ onboard_RTC_get_time_str),
+/* harmony export */ onboard_RTC_get_timestamp: () => (/* binding */ onboard_RTC_get_timestamp),
+/* harmony export */ onboard_RTC_get_timetuple_to_str: () => (/* binding */ onboard_RTC_get_timetuple_to_str),
+/* harmony export */ onboard_RTC_set_datetime: () => (/* binding */ onboard_RTC_set_datetime),
+/* harmony export */ onboard_RTC_settime_string: () => (/* binding */ onboard_RTC_settime_string),
+/* harmony export */ onboard_RTC_timestamp_totuple: () => (/* binding */ onboard_RTC_timestamp_totuple),
+/* harmony export */ rfid_readcontent: () => (/* binding */ rfid_readcontent),
+/* harmony export */ rfid_readid: () => (/* binding */ rfid_readid),
+/* harmony export */ rfid_write: () => (/* binding */ rfid_write),
+/* harmony export */ rfid_write_return: () => (/* binding */ rfid_write_return),
+/* harmony export */ sensor_LTR308: () => (/* binding */ sensor_LTR308),
+/* harmony export */ sensor_adxl345_get_acceleration: () => (/* binding */ sensor_adxl345_get_acceleration),
+/* harmony export */ sensor_aht11: () => (/* binding */ sensor_aht11),
+/* harmony export */ sensor_bitbot_ALS: () => (/* binding */ sensor_bitbot_ALS),
+/* harmony export */ sensor_button_get_presses: () => (/* binding */ sensor_button_get_presses),
+/* harmony export */ sensor_button_is_pressed: () => (/* binding */ sensor_button_is_pressed),
+/* harmony export */ sensor_button_was_pressed: () => (/* binding */ sensor_button_was_pressed),
+/* harmony export */ sensor_compass_reset: () => (/* binding */ sensor_compass_reset),
+/* harmony export */ sensor_ds18x20: () => (/* binding */ sensor_ds18x20),
+/* harmony export */ sensor_eulerangles: () => (/* binding */ sensor_eulerangles),
+/* harmony export */ sensor_get_acceleration: () => (/* binding */ sensor_get_acceleration),
+/* harmony export */ sensor_get_temperature: () => (/* binding */ sensor_get_temperature),
+/* harmony export */ sensor_hp203: () => (/* binding */ sensor_hp203),
+/* harmony export */ sensor_light: () => (/* binding */ sensor_light),
+/* harmony export */ sensor_lm35: () => (/* binding */ sensor_lm35),
+/* harmony export */ sensor_mixbot_get_gyro: () => (/* binding */ sensor_mixbot_get_gyro),
+/* harmony export */ sensor_mixbot_patrol_calibrate: () => (/* binding */ sensor_mixbot_patrol_calibrate),
+/* harmony export */ sensor_mixbot_patrol_value: () => (/* binding */ sensor_mixbot_patrol_value),
+/* harmony export */ sensor_mixbot_temperature: () => (/* binding */ sensor_mixbot_temperature),
+/* harmony export */ sensor_mixgo_LTR308: () => (/* binding */ sensor_mixgo_LTR308),
+/* harmony export */ sensor_mixgo_button_attachInterrupt: () => (/* binding */ sensor_mixgo_button_attachInterrupt),
+/* harmony export */ sensor_mixgo_button_get_presses: () => (/* binding */ sensor_mixgo_button_get_presses),
+/* harmony export */ sensor_mixgo_button_is_pressed: () => (/* binding */ sensor_mixgo_button_is_pressed),
+/* harmony export */ sensor_mixgo_button_was_pressed: () => (/* binding */ sensor_mixgo_button_was_pressed),
+/* harmony export */ sensor_mixgo_cc_mmc5603_calibrate_compass: () => (/* binding */ sensor_mixgo_cc_mmc5603_calibrate_compass),
+/* harmony export */ sensor_mixgo_cc_mmc5603_get_angle: () => (/* binding */ sensor_mixgo_cc_mmc5603_get_angle),
+/* harmony export */ sensor_mixgo_cc_mmc5603_get_magnetic: () => (/* binding */ sensor_mixgo_cc_mmc5603_get_magnetic),
+/* harmony export */ sensor_mixgo_light: () => (/* binding */ sensor_mixgo_light),
+/* harmony export */ sensor_mixgo_nova_LTR308: () => (/* binding */ sensor_mixgo_nova_LTR308),
+/* harmony export */ sensor_mixgo_nova_pin_near: () => (/* binding */ sensor_mixgo_nova_pin_near),
+/* harmony export */ sensor_mixgo_pin_near: () => (/* binding */ sensor_mixgo_pin_near),
+/* harmony export */ sensor_mixgo_pin_near_double: () => (/* binding */ sensor_mixgo_pin_near_double),
+/* harmony export */ sensor_mixgo_pin_near_single: () => (/* binding */ sensor_mixgo_pin_near_single),
+/* harmony export */ sensor_mixgo_pin_pressed: () => (/* binding */ sensor_mixgo_pin_pressed),
+/* harmony export */ sensor_mixgo_sant_color: () => (/* binding */ sensor_mixgo_sant_color),
+/* harmony export */ sensor_mixgo_touch_slide: () => (/* binding */ sensor_mixgo_touch_slide),
+/* harmony export */ sensor_mixgocar42_button_attachInterrupt: () => (/* binding */ sensor_mixgocar42_button_attachInterrupt),
+/* harmony export */ sensor_mixgocar42_button_get_presses: () => (/* binding */ sensor_mixgocar42_button_get_presses),
+/* harmony export */ sensor_mixgocar42_button_is_pressed: () => (/* binding */ sensor_mixgocar42_button_is_pressed),
+/* harmony export */ sensor_mixgocar42_button_was_pressed: () => (/* binding */ sensor_mixgocar42_button_was_pressed),
+/* harmony export */ sensor_mixgocar_battery_left: () => (/* binding */ sensor_mixgocar_battery_left),
+/* harmony export */ sensor_mixgocar_pin_near: () => (/* binding */ sensor_mixgocar_pin_near),
+/* harmony export */ sensor_mixgocar_pin_near_line: () => (/* binding */ sensor_mixgocar_pin_near_line),
+/* harmony export */ sensor_mixgocar_pin_near_state_change: () => (/* binding */ sensor_mixgocar_pin_near_state_change),
+/* harmony export */ sensor_mixgoce_pin_pressed: () => (/* binding */ sensor_mixgoce_pin_pressed),
+/* harmony export */ sensor_mixgoce_temperature: () => (/* binding */ sensor_mixgoce_temperature),
+/* harmony export */ sensor_mixgome_temperature: () => (/* binding */ sensor_mixgome_temperature),
+/* harmony export */ sensor_mpu9250_calibrate_compass: () => (/* binding */ sensor_mpu9250_calibrate_compass),
+/* harmony export */ sensor_mpu9250_field_strength: () => (/* binding */ sensor_mpu9250_field_strength),
+/* harmony export */ sensor_mpu9250_gesture: () => (/* binding */ sensor_mpu9250_gesture),
+/* harmony export */ sensor_mpu9250_get_acceleration: () => (/* binding */ sensor_mpu9250_get_acceleration),
+/* harmony export */ sensor_mpu9250_get_gyro: () => (/* binding */ sensor_mpu9250_get_gyro),
+/* harmony export */ sensor_mpu9250_get_magnetic: () => (/* binding */ sensor_mpu9250_get_magnetic),
+/* harmony export */ sensor_mpu9250_temperature: () => (/* binding */ sensor_mpu9250_temperature),
+/* harmony export */ sensor_mpython_pin_pressed: () => (/* binding */ sensor_mpython_pin_pressed),
+/* harmony export */ sensor_mpython_qmi8658_get_gyro: () => (/* binding */ sensor_mpython_qmi8658_get_gyro),
+/* harmony export */ sensor_mpython_qmi8658_temperature: () => (/* binding */ sensor_mpython_qmi8658_temperature),
+/* harmony export */ sensor_onboard_compass_reset: () => (/* binding */ sensor_onboard_compass_reset),
+/* harmony export */ sensor_onboard_mpu9250_calibrate_compass: () => (/* binding */ sensor_onboard_mpu9250_calibrate_compass),
+/* harmony export */ sensor_onboard_mpu9250_field_strength: () => (/* binding */ sensor_onboard_mpu9250_field_strength),
+/* harmony export */ sensor_onboard_mpu9250_gesture: () => (/* binding */ sensor_onboard_mpu9250_gesture),
+/* harmony export */ sensor_onboard_mpu9250_get_acceleration: () => (/* binding */ sensor_onboard_mpu9250_get_acceleration),
+/* harmony export */ sensor_onboard_mpu9250_get_gyro: () => (/* binding */ sensor_onboard_mpu9250_get_gyro),
+/* harmony export */ sensor_onboard_mpu9250_get_magnetic: () => (/* binding */ sensor_onboard_mpu9250_get_magnetic),
+/* harmony export */ sensor_onboard_mpu9250_temperature: () => (/* binding */ sensor_onboard_mpu9250_temperature),
+/* harmony export */ sensor_pin_near: () => (/* binding */ sensor_pin_near),
+/* harmony export */ sensor_pin_pressed: () => (/* binding */ sensor_pin_pressed),
+/* harmony export */ sensor_read: () => (/* binding */ sensor_read),
+/* harmony export */ sensor_rm_acc: () => (/* binding */ sensor_rm_acc),
+/* harmony export */ sensor_rm_battery_left: () => (/* binding */ sensor_rm_battery_left),
+/* harmony export */ sensor_rm_pin_near_double: () => (/* binding */ sensor_rm_pin_near_double),
+/* harmony export */ sensor_sound: () => (/* binding */ sensor_sound)
+/* harmony export */ });
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _sensor_extern_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sensor_extern.js */ "../micropython/generators/sensor_extern.js");
+
+
+
+const sensor_mixgo_button_is_pressed = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version] = 'import ' + version;
+ var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
+ var code = version + '.' + btn + '.is_pressed()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//ok
+const sensor_mixgo_button_was_pressed = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version] = 'import ' + version;
+ var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
+ var code = version + '.' + btn + '.was_pressed()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_button_get_presses = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version] = 'import ' + version;
+ var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
+ var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ var code = version + '.' + btn + '.get_presses(' + argument + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_button_attachInterrupt = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version] = 'import ' + version;
+ var dropdown_btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
+ var dropdown_mode = this.getFieldValue('mode');
+ var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
+ var code = version + '.' + dropdown_btn + '.irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\n'
+ return code;
+}
+
+//ok
+const sensor_mixgocar42_button_is_pressed = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version] = 'import ' + version;
+ var code = version + '.' + 'button.is_pressed()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//ok
+const sensor_mixgocar42_button_was_pressed = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version] = 'import ' + version;
+ var code = version + '.' + 'button.was_pressed()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgocar42_button_get_presses = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version] = 'import ' + version;
+ var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ var code = version + '.' + 'button.get_presses(' + argument + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgocar42_button_attachInterrupt = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version] = 'import ' + version;
+ var dropdown_mode = this.getFieldValue('mode');
+ var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
+ var code = version + '.' + 'button.irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\n'
+ return code;
+}
+
+const HCSR04 = function (_, generator) {
+ generator.definitions_['import_sonar'] = 'import sonar';
+ var dropdown_pin1 = generator.valueToCode(this, "PIN1", generator.ORDER_ASSIGNMENT);
+ var dropdown_pin2 = generator.valueToCode(this, "PIN2", generator.ORDER_ASSIGNMENT);
+ var code = 'sonar.Sonar(' + dropdown_pin1 + ', ' + dropdown_pin2 + ').checkdist()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const number1 = function (_, generator) {
+ var code = this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const number2 = function (_, generator) {
+ var code = this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const number3 = function (_, generator) {
+ var code = this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const number4 = function (_, generator) {
+ var code = this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const number5 = function (_, generator) {
+ var code = this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const number6 = function (_, generator) {
+ var code = this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const number7 = function (_, generator) {
+ var code = this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_pin_near_single = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_als'] = "from " + version + " import onboard_als";
+ var code = 'onboard_als.ps_nl()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_pin_near_double = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version] = 'import ' + version;
+ var direction = this.getFieldValue('direction');
+ var code = version + '.' + 'infrared_' + direction + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_pin_near = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_als'] = 'from ' + version + ' import onboard_als';
+ var code = 'onboard_als.ps()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_nova_pin_near = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var direction = this.getFieldValue('direction');
+ generator.definitions_['import_' + version + '_' + direction] = 'from ' + version + ' import onboard_als_' + direction;
+ var code = 'onboard_als_' + direction + '.ps_nl()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_LTR308 = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_als'] = 'from ' + version + ' import onboard_als';
+ var code = 'onboard_als.als()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_sant_color = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_als'] = 'from ' + version + ' import onboard_als';
+ var code = 'onboard_als.color()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_nova_LTR308 = function (_, generator) {
+ var direction = this.getFieldValue('direction');
+ generator.definitions_['import_' + version + '_' + direction] = 'from ' + version + ' import onboard_als_' + direction;
+ var code = 'onboard_als_' + direction + '.als_vis()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_ds18x20 = function (_, generator) {
+ generator.definitions_['import_ds18x20x'] = 'import ds18x20x';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'ds18x20x.get_ds18x20_temperature(' + dropdown_pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_lm35 = function (_, generator) {
+ generator.definitions_['import_lm35'] = 'import lm35';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'lm35.get_LM35_temperature(' + dropdown_pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_LTR308 = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo") {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ return ['mixgo.get_brightness()', generator.ORDER_ATOMIC];
+ } else if (version == "mixgo_ce") {
+ generator.definitions_['import_mixgo_ce'] = 'import mixgo_ce';
+ return ['mixgo_ce.get_brightness()', generator.ORDER_ATOMIC];
+ } else if (version == "mpython") {
+ generator.definitions_['import_mpython_onboard_light'] = 'from mpython import onboard_light';
+ return ['onboard_light.brightness()', generator.ORDER_ATOMIC];
+ }
+ generator.definitions_['import_' + version + '_onboard_als'] = "from " + version + " import onboard_als";
+ var code = 'onboard_als.als_vis()';
+ return [code, generator.ORDER_ATOMIC];
+ // else{return ['', generator.ORDER_ATOMIC];}
+}
+
+const sensor_sound = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'mixbot') {
+ generator.definitions_['import_' + version + '_sound'] = 'from ' + version + ' import sound';
+ var code = 'sound.loudness()';
+ } else if (version == 'mixgo_zero') {
+ generator.definitions_['import_mixgo_zero_voice_sound_level'] = "from mixgo_zero_voice import sound_level";
+ var code = 'sound_level()';
+ } else if (version == 'mixgo_nova') {
+ generator.definitions_['import_mixgo_nova_voice_sound_level'] = "from mixgo_nova_voice import sound_level";
+ var code = 'sound_level()';
+ } else if (version == "mixgo") {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ return ['mixgo.get_soundlevel()', generator.ORDER_ATOMIC];
+ } else if (version == "mpython") {
+ generator.definitions_['import_mpython_onboard_sound'] = 'from mpython import onboard_sound';
+ return ['onboard_sound.soundlevel()', generator.ORDER_ATOMIC];
+ } else if (version == "mixgo_mini") {
+ generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
+ var code = 'onboard_bot.soundlevel()';
+ } else {
+ generator.definitions_['import_' + version + '_onboard_sound'] = 'from ' + version + ' import onboard_sound';
+ var code = 'onboard_sound.read()';
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+// export const sensor_mixgo_nova_sound = function (_, generator) {
+// var version = Boards.getSelectedBoardKey().split(':')[2]
+// return [code, generator.ORDER_ATOMIC];
+// }
+
+const sensor_hp203 = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var key = this.getFieldValue('key');
+ if (version == "mixgo_mini") {
+ generator.definitions_['import_mixgo_mini_onboard_i2c'] = 'from mixgo_mini import onboard_i2c';
+ generator.definitions_['import_spl06_001'] = 'import spl06_001';
+ generator.definitions_['import_onboard_bps'] = 'onboard_bps = spl06_001.SPL06(onboard_i2c)';
+ } else {
+ generator.definitions_['import_' + version + '_onboard_bps'] = "from " + version + " import onboard_bps";
+ }
+ var code = 'onboard_bps.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_aht11 = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var key = this.getFieldValue('key');
+ if (version == 'mixgo_nova' || version == 'mixgo_zero') {
+ generator.definitions_['import_' + version + '_onboard_ths'] = "from " + version + " import onboard_ths";
+ } else if (version == 'mixgo_mini') {
+ generator.definitions_['import_mixgo_mini_onboard_i2c'] = 'from mixgo_mini import onboard_i2c';
+ generator.definitions_['import_shtc3'] = 'import shtc3';
+ generator.definitions_['import_onboard_ths'] = 'onboard_ths = shtc3.SHTC3(onboard_i2c)';
+ } else {
+ generator.definitions_['import_' + version + '_onboard_ths'] = "from " + version + " import onboard_ths";
+ }
+ var code = 'onboard_ths.' + key + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_get_temperature = function (_, generator) {
+ generator.definitions_['import_feiyi_onboard_acc'] = 'from feiyi import onboard_acc';
+ return ['onboard_acc.temperature()', generator.ORDER_ATOMIC];
+}
+
+const rfid_readid = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_rfid'] = "from " + version + " import onboard_rfid";
+ var code = 'onboard_rfid.read_card(0, x="id")';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const rfid_readcontent = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
+ generator.definitions_['import_' + version + '_onboard_rfid'] = "from " + version + " import onboard_rfid";
+ var code = 'onboard_rfid.read_card(' + sector + ', x="content")';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const rfid_write = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
+ var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
+ generator.definitions_['import_' + version + '_onboard_rfid'] = "from " + version + " import onboard_rfid";
+ var code = 'onboard_rfid.write_card(' + cnt + ',' + sector + ')\n';
+ return code;
+}
+
+const rfid_write_return = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
+ var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
+ generator.definitions_['import_' + version + '_onboard_rfid'] = "from " + version + " import onboard_rfid";
+ var code = 'onboard_rfid.write_card(' + cnt + ',' + sector + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_get_acceleration = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var key = this.getFieldValue('key');
+ if (key == 'strength') {
+ if (version == 'mixbot') {
+ generator.definitions_['import_' + version + '_acc_gyr'] = 'from ' + version + ' import acc_gyr';
+ var code = 'acc_gyr.strength()';
+ } else {
+ generator.definitions_['import_' + version + '_onboard_acc'] = "from " + version + " import onboard_acc";
+ var code = 'onboard_acc.strength()';
+ }
+ return [code, generator.ORDER_ATOMIC];
+ }
+ if (version == 'mixbot') {
+ generator.definitions_['import_' + version + '_acc_gyr'] = 'from ' + version + ' import acc_gyr';
+ var code = 'acc_gyr.accelerometer()' + key;
+ } else if (version == 'mpython') {
+ generator.definitions_['import_mpython_motion'] = 'from mpython import motion';
+ var code = 'motion.accelerometer()' + key;
+ } else {
+ generator.definitions_['import_' + version + '_onboard_acc'] = "from " + version + " import onboard_acc";
+ var code = 'onboard_acc.acceleration()' + key;
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_eulerangles = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_acc'] = "from " + version + " import onboard_acc";
+ var angle = this.getFieldValue('angle');
+ var code = 'onboard_acc.eulerangles()' + angle;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mpu9250_gesture = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ var gesture = this.getFieldValue('gesture');
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "mpu")
+ generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
+ var code = v + '.mpu9250_is_gesture("' + gesture + '")';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//ok
+const sensor_mpu9250_get_acceleration = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ var key = this.getFieldValue('key');
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "mpu")
+ generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
+ var code = v + '.mpu9250_get_' + key + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgoce_pin_pressed = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var pin = generator.valueToCode(this, 'button', generator.ORDER_ATOMIC);
+ if ( true) {
+ generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
+ var code = 'onboard_bot.touched(' + pin + ')';
+ }else { var code; }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_touch_slide = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'mixgo_mini'|| version == 'mixgo_sant') {
+ generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
+ var code = 'onboard_bot.touch_slide()';
+ } else {
+ generator.definitions_['import_' + version] = 'import ' + version;
+ var code = version + '.touch_slide(3,4)';
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_pin_pressed = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version] = 'import ' + version;
+ var pin = generator.valueToCode(this, 'button', generator.ORDER_ATOMIC);
+ var code = version + '.' + pin + '.is_touched()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mpython_pin_pressed = function (_, generator) {
+ generator.definitions_['import_mpython'] = 'import mpython';
+ var pin = generator.valueToCode(this, 'button', generator.ORDER_ATOMIC);
+ var code = 'mpython.touch_' + pin + '.is_touched()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_adxl345_get_acceleration = function (_, generator) {
+ generator.definitions_['import_adxl345'] = 'import adxl345';
+ // generator.definitions_['import_machine'] = 'import machine';
+ var key = this.getFieldValue('key');
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code;
+ if (key == 'x') {
+ code = v + '.readX()';
+ } else if (key == 'y') {
+ code = v + '.readY()';
+ } else if (key == 'z') {
+ code = v + '.readZ()';
+ } else if (key == 'values') {
+ code = v + '.readXYZ()';
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mpu9250_get_magnetic = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ var key = this.getFieldValue('key');
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "mpu")
+ generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
+ var code = v + '.mpu9250_magnetic_' + key + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mpu9250_get_gyro = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ var key = this.getFieldValue('key');
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "mpu")
+ generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
+ var code = v + '.mpu9250_gyro_' + key + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mpu9250_calibrate_compass = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ return '' + v + '.calibrate()\n';
+}
+
+const sensor_mpu9250_temperature = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "mpu")
+ generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
+ return [v + '.mpu9250_get_temperature()', generator.ORDER_ATOMIC];
+}
+
+const sensor_mpu9250_field_strength = function (_, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ if (v == "compass")
+ generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';
+ var compass = this.getFieldValue('compass');
+ var a;
+ if (compass == 'strength') {
+ a = v + '.get_field_strength()';
+ } else if (compass == 'heading') {
+ a = v + '.heading()';
+ }
+ return [a, generator.ORDER_ATOMIC];
+}
+
+const sensor_compass_reset = function (block, generator) {
+ generator.definitions_['import_mpu9250'] = 'import mpu9250';
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ return '' + v + '.reset_calibrate()\n';
+}
+
+const sensor_onboard_mpu9250_gesture = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var gesture = this.getFieldValue('gesture');
+ generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';
+ var code = 'onboard_mpu.mpu9250_is_gesture("' + gesture + '")';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_onboard_mpu9250_get_acceleration = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';
+ var code = 'onboard_mpu.mpu9250_get_' + key + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_onboard_mpu9250_get_magnetic = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';
+ var code = 'onboard_mpu.mpu9250_magnetic_' + key + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_onboard_mpu9250_get_gyro = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';
+ var code = 'onboard_mpu.mpu9250_gyro_' + key + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_onboard_mpu9250_calibrate_compass = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_mixgo_onboard_compass'] = 'from mixgo import onboard_compass';
+ return '' + 'onboard_compass.calibrate()\n';
+}
+
+const sensor_onboard_mpu9250_temperature = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';
+ return ['onboard_mpu.mpu9250_get_temperature()', generator.ORDER_ATOMIC];
+}
+
+const sensor_onboard_mpu9250_field_strength = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_mixgo_onboard_compass'] = 'from mixgo import onboard_compass';
+ var compass = this.getFieldValue('compass');
+ var a;
+ if (compass == 'strength') {
+ a = 'onboard_compass.get_field_strength()';
+ } else if (compass == 'heading') {
+ a = 'onboard_compass.heading()';
+ }
+ return [a, generator.ORDER_ATOMIC];
+}
+
+const sensor_onboard_compass_reset = function (block, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ generator.definitions_['import_mixgo_onboard_compass'] = 'from mixgo import onboard_compass';
+ return '' + 'onboard_compass.reset_calibrate()\n';
+}
+
+const onboard_RTC_set_datetime = function (_, generator) {
+ generator.definitions_['import_rtctime'] = "import rtctime";
+ var year = generator.valueToCode(this, "year", generator.ORDER_ASSIGNMENT);
+ var month = generator.valueToCode(this, "month", generator.ORDER_ASSIGNMENT);
+ var day = generator.valueToCode(this, "day", generator.ORDER_ASSIGNMENT);
+ var hour = generator.valueToCode(this, "hour", generator.ORDER_ASSIGNMENT);
+ var minute = generator.valueToCode(this, "minute", generator.ORDER_ASSIGNMENT);
+ var second = generator.valueToCode(this, "second", generator.ORDER_ASSIGNMENT);
+ var code = 'rtctime.settime((' + year + ',' + month + ',' + day + ',' + hour + ',' + minute + ',' + second + ',0,0))\n';
+ return code;
+}
+
+const onboard_RTC_settime_string = function (_, generator) {
+ var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
+ generator.definitions_['import_rtctime'] = "import rtctime";
+ var code = 'rtctime.settime(' + cnt + ')\n';
+ return code;
+}
+
+const onboard_RTC_get_time = function (_, generator) {
+ generator.definitions_['import_time'] = 'import time';
+ var code = 'time.localtime()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const onboard_RTC_get_timestamp = function (_, generator) {
+ generator.definitions_['import_time'] = 'import time';
+ var time = generator.valueToCode(this, 'LIST', generator.ORDER_ATOMIC);
+ var code = 'time.mktime(' + time + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const onboard_RTC_timestamp_totuple = function (_, generator) {
+ generator.definitions_['import_time'] = 'import time';
+ var ts = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = 'time.localtime(' + ts + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const onboard_RTC_get_time_str = function(_,generator){
+ generator.definitions_['import_rtctime'] = 'import rtctime';
+ var code = 'rtctime.strtime()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const onboard_RTC_get_timetuple_to_str = function(_,generator){
+ generator.definitions_['import_rtctime'] = 'import rtctime';
+ var ct = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
+ var code = 'rtctime.strtime('+ ct +')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//mixgo_cc onboard_sensor generators:
+
+const sensor_mixgo_cc_mmc5603_get_magnetic = function (_, generator) {
+ var key = this.getFieldValue('key');
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'mpython') {
+ generator.definitions_['import_mpython_magnetic'] = 'from mpython import magnetic';
+ if (key == 'all') {
+ var code = 'magnetic.getstrength()';
+ } else {
+ var code = 'magnetic.getdata()' + key;
+ }
+ } else if (version == 'mixgo_mini') {
+ generator.definitions_['import_mixgo_mini_onboard_i2c'] = 'from mixgo_mini import onboard_i2c';
+ generator.definitions_['import_mmc5603'] = 'import mmc5603';
+ generator.definitions_['import_onboard_mgs'] = 'onboard_mgs = mmc5603.MMC5603(onboard_i2c)';
+ if (key == 'all') {
+ var code = 'onboard_mgs.getstrength()';
+ } else {
+ var code = 'onboard_mgs.getdata()' + key;
+ }
+ } else {
+ generator.definitions_['import_' + version + '_onboard_mgs'] = "from " + version + " import onboard_mgs";
+ if (key == 'all') {
+ var code = 'onboard_mgs.getstrength()';
+ } else {
+ var code = 'onboard_mgs.getdata()' + key;
+ }
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_cc_mmc5603_get_angle = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'mpython') {
+ generator.definitions_['import_mpython_magnetic'] = 'from mpython import magnetic';
+ var code = 'magnetic.getangle()';
+ } else if (version == 'mixgo_mini') {
+ generator.definitions_['import_mixgo_mini_onboard_i2c'] = 'from mixgo_mini import onboard_i2c';
+ generator.definitions_['import_mmc5603'] = 'import mmc5603';
+ generator.definitions_['import_onboard_mgs'] = 'onboard_mgs = mmc5603.MMC5603(onboard_i2c)';
+ } else {
+ generator.definitions_['import_' + version + '_onboard_mgs'] = "from " + version + " import onboard_mgs";
+ }
+ var code = 'onboard_mgs.getangle()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgo_cc_mmc5603_calibrate_compass = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'mixgo_mini') {
+ generator.definitions_['import_mixgo_mini_onboard_i2c'] = 'from mixgo_mini import onboard_i2c';
+ generator.definitions_['import_mmc5603'] = 'import mmc5603';
+ generator.definitions_['import_onboard_mgs'] = 'onboard_mgs = mmc5603.MMC5603(onboard_i2c)';
+ } else {
+ generator.definitions_['import_' + version + '_onboard_mgs'] = "from " + version + " import onboard_mgs";
+ }
+ var code = 'onboard_mgs.calibrate()\n';
+ return code;
+}
+
+//mixgo_me onboard_sensor generators:
+
+const sensor_mixgome_temperature = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'mixgo_mini') {
+ generator.definitions_['import_mixgo_mini_onboard_temperature'] = 'from mixgo_mini import onboard_temperature';
+ var code = 'onboard_temperature()';
+ } else {
+ generator.definitions_['import_mixgo_me_onboard_acc'] = "from mixgo_me import onboard_acc";
+ var code = 'onboard_acc.temperature()';
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//mixgo_ce onboard_sensor generators:
+const sensor_mixgoce_temperature = function (_, generator) {
+ generator.definitions_['import_mixgo_ce'] = "import mixgo_ce";
+ var code = 'mixgo_ce.get_temperature()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//mpython onboard_sensor:
+
+const sensor_mpython_qmi8658_get_gyro = function (_, generator) {
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_mpython_motion'] = 'from mpython import motion';
+ var code = 'motion.gyroscope()' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mpython_qmi8658_temperature = function (_, generator) {
+ generator.definitions_['import_mpython_motion'] = 'from mpython import motion';
+ return ['motion.temperature()', generator.ORDER_ATOMIC];
+}
+
+const sensor_rm_pin_near_double = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ var direction = this.getFieldValue('direction');
+ generator.definitions_['import_' + version + '_adc' + direction] = 'from ' + version + ' import adc' + direction;
+ var code = 'adc' + direction + '.read()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_rm_battery_left = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == 'feiyi') {
+ generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';
+ var code = 'onboard_bot51.read_bat()';
+ return [code, generator.ORDER_ATOMIC];
+ }
+ generator.definitions_['import_' + version + '_battery'] = 'from ' + version + ' import battery';
+ var code = 'battery.voltage()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_rm_acc = function (_, generator) {
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_rm_e1_gyro'] = 'from rm_e1 import gyro';
+ var code = 'gyro.acceleration()' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//car4.2
+const sensor_mixgocar_pin_near_line = function (_, generator) {
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_mixgocar_c3_onboard_info'] = 'from mixgocar_c3 import onboard_info';
+ var code = 'onboard_info.patrol()' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgocar_pin_near = function (_, generator) {
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_mixgocar_c3_onboard_info'] = 'from mixgocar_c3 import onboard_info';
+ var code = 'onboard_info.obstacle()' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixgocar_pin_near_state_change = function (_, generator) {
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_mixgocar_c3_onboard_info'] = 'from mixgocar_c3 import onboard_info';
+ var code = 'onboard_info.ir_mode(onboard_info.' + key + ')\n';
+ return code;
+}
+
+const sensor_mixgocar_battery_left = function (_, generator) {
+ generator.definitions_['import_mixgocar_c3_onboard_info'] = 'from mixgocar_c3 import onboard_info';
+ var code = 'onboard_info.read_bat()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//mixbot onboard_sensor below:
+
+const sensor_mixbot_patrol_calibrate = function (_, generator) {
+ var key = this.getFieldValue('key');
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_patrol'] = 'from ' + version + ' import patrol';
+ var code = 'patrol.correct(patrol.CORRECTING_' + key + ')\n';
+ return code;
+}
+
+const sensor_mixbot_patrol_value = function (_, generator) {
+ var key = this.getFieldValue('key');
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_patrol'] = 'from ' + version + ' import patrol';
+ var code = 'patrol.getdata()' + key + '';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixbot_temperature = function (_, generator) {
+ generator.definitions_['import_mixbot_acc_gyr'] = "from mixbot import acc_gyr";
+ var code = 'acc_gyr.temperature()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_mixbot_get_gyro = function (_, generator) {
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_mixbot_acc_gyr'] = "from mixbot import acc_gyr";
+ var code = 'acc_gyr.gyroscope()' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_bitbot_ALS = function (_, generator) {
+ generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';
+ var mode = generator.valueToCode(this, 'mode', generator.ORDER_ATOMIC);
+ var code = 'onboard_bot51.' + 'read_als(' + mode + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const bitbot_als_num = function (_, generator) {
+ var code = this.getFieldValue('PIN');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_button_is_pressed = sensor_mixgo_button_is_pressed;
+const sensor_button_was_pressed = sensor_mixgo_button_was_pressed;
+const sensor_button_get_presses = sensor_mixgo_button_get_presses;
+const sensor_pin_pressed = sensor_mixgo_pin_pressed;
+const sensor_pin_near = sensor_mixgo_pin_near;
+const sensor_mixgo_light = sensor_LTR308;
+const sensor_light = sensor_mixgo_light;
+const dht11 = _sensor_extern_js__WEBPACK_IMPORTED_MODULE_1__.sensor_dht11;
+
+//educore onboard_sensor
+const educore_voice_sensor = function (_, generator) {
+ generator.definitions_['import_educore_sound'] = 'from educore import sound';
+ var code = "sound()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sensor_read = function (_, generator) {
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub+".read()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_light_sensor = function (_, generator) {
+ generator.definitions_['import_educore_light'] = 'from educore import light';
+ var code = "light()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_gyroscope_sensor = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_'+version+'_accelerometer'] = 'from '+version+' import accelerometer';
+ var code = "accelerometer()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_gyroscope_sensor_read = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_'+version+'_accelerometer'] = 'from '+version+' import accelerometer';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub+"."+key+"()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_gyroscope_sensor_shake = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_'+version+'_accelerometer'] = 'from '+version+' import accelerometer';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub+".shake()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_button_sensor = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_button'] = 'from ' + version + ' import button';
+ var btn = this.getFieldValue('btn');
+ var code = 'button(button.'+btn+')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_button_was_pressed = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_button'] = 'from ' + version + ' import button';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub + '.status()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_rfid_sensor = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_rfid'] = 'from ' + version + ' import rfid';
+ var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = 'rfid(' + pin + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_rfid_sensor_scan = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_rfid'] = 'from ' + version + ' import rfid';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var code = sub+'.scanning()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const educore_rfid_sensor_scan_data = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_rfid'] = 'from ' + version + ' import rfid';
+ var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = sub+'.'+key+'()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const CI130X_IDENTIFY_AND_SAVE_SANT = function(_,generator){
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
+ var code = 'onboard_asr.cmd_id()\n';
+ return code;
+}
+
+const CI130X_GET_WHETHER_IDENTIFY_SANT = function(_,generator){
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
+ var cmd = this.getFieldValue('cmd');
+ var code = 'onboard_asr.result('+cmd+')';
+ return [code,generator.ORDER_ATOMIC];
+}
+
+const CI130X_GET_THE_RECOGNIZED_CMD_SANT = function(_,generator){
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
+ var key = this.getFieldValue('key');
+ if(key == 'status1'){
+ var code = 'onboard_asr.status()[0]';
+ }else if(key == 'status2'){
+ var code = 'onboard_asr.status()[1]';
+ }else{
+ var code = 'onboard_asr.'+key +'()';
+ }
+ return [code,generator.ORDER_ATOMIC];
+}
+
+const CI130X_BROADCAST_SANT = function(_,generator){
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
+ var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
+ var star = this.getFieldValue('star');
+ var end = this.getFieldValue('end');
+ var code = 'onboard_asr.play('+star+','+num+','+end+')\n';
+ return code;
+}
+
+const CI130X_SET_SYSTEM_CMD_SANT = function(_,generator){
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';
+ var cmd = this.getFieldValue('cmd');
+ var code = 'onboard_asr.sys_cmd('+cmd+')\n';
+ return code;
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/serial.js":
+/*!*******************************************!*\
+ !*** ../micropython/generators/serial.js ***!
+ \*******************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ serial_any: () => (/* binding */ serial_any),
+/* harmony export */ serial_print: () => (/* binding */ serial_print),
+/* harmony export */ serial_print_byte: () => (/* binding */ serial_print_byte),
+/* harmony export */ serial_print_hex: () => (/* binding */ serial_print_hex),
+/* harmony export */ serial_println: () => (/* binding */ serial_println),
+/* harmony export */ serial_read_from_ai: () => (/* binding */ serial_read_from_ai),
+/* harmony export */ serial_readline: () => (/* binding */ serial_readline),
+/* harmony export */ serial_readstr: () => (/* binding */ serial_readstr),
+/* harmony export */ serial_send_to_ai: () => (/* binding */ serial_send_to_ai),
+/* harmony export */ serial_softserial: () => (/* binding */ serial_softserial),
+/* harmony export */ serial_softserial_new: () => (/* binding */ serial_softserial_new),
+/* harmony export */ system_input: () => (/* binding */ system_input),
+/* harmony export */ system_print: () => (/* binding */ system_print),
+/* harmony export */ system_print_end: () => (/* binding */ system_print_end),
+/* harmony export */ system_print_inline: () => (/* binding */ system_print_inline),
+/* harmony export */ system_print_many: () => (/* binding */ system_print_many)
+/* harmony export */ });
+const serial_print = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_uart = this.getFieldValue('mode');
+ var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '""'
+ var code = "uart" + dropdown_uart + ".write(str(" + content + "))\n";
+ return code;
+}
+
+const serial_print_byte = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_uart = this.getFieldValue('mode');
+ var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '""'
+ var code = "uart" + dropdown_uart + ".write(" + content + ")\n";
+ return code;
+}
+
+const serial_println = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_uart = this.getFieldValue('mode');
+ var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '""'
+ var code = "uart" + dropdown_uart + ".write(str(" + content + ")+'\\r\\n')\n";
+ return code;
+}
+
+const serial_print_hex = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_uart = this.getFieldValue('mode');
+ var dropdown_stat = this.getFieldValue('STAT');
+ var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '0';
+ var code = "uart" + dropdown_uart + ".write(str(" + dropdown_stat + "(" + content + "))+'\\r\\n')\n";
+ return code;
+}
+
+const serial_any = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_uart = this.getFieldValue('mode');
+ var code = "uart" + dropdown_uart + ".any()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const serial_readstr = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_uart = this.getFieldValue('mode');
+ var code = "uart" + dropdown_uart + ".read()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const serial_readline = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_uart = this.getFieldValue('mode');
+ var code = "uart" + dropdown_uart + ".readline()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const serial_softserial = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_uart = this.getFieldValue('mode')
+ var baudrate = this.getFieldValue('baudrate');
+ return "uart" + dropdown_uart + "=machine.UART(" + dropdown_uart + ", " + baudrate + ")\n";
+}
+
+const serial_softserial_new = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var rx = generator.valueToCode(this, 'RX', generator.ORDER_ATOMIC);
+ var tx = generator.valueToCode(this, 'TX', generator.ORDER_ATOMIC);
+ var dropdown_uart = this.getFieldValue('mode')
+ var baudrate = this.getFieldValue('baudrate');
+ return "uart" + dropdown_uart + "=machine.UART(" + dropdown_uart + ", tx=" + tx + ", rx=" + rx + ", baudrate=" + baudrate + ")\n";
+}
+
+const system_input = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
+ return ['input(' + str + ')', generator.ORDER_ATOMIC];
+}
+
+const system_print = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
+ var code = "print(" + str + ")\n";
+ return code;
+}
+
+const system_print_inline = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
+ var code = "print(" + str + ',end ="")\n';
+ return code;
+}
+
+const system_print_end = function (_, generator) {
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
+ var end = generator.valueToCode(this, 'END', generator.ORDER_ATOMIC) || '""';
+ var code = "print(" + str + ',end =' + end + ')\n';
+ return code;
+}
+
+const system_print_many = function (_, generator) {
+ var code = new Array(this.itemCount_);
+ var default_value = '0';
+
+ for (var n = 0; n < this.itemCount_; n++) {
+
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || default_value;
+ }
+
+ var code = 'print(' + code.join(', ') + ')\n';
+ return code;
+}
+
+const serial_send_to_ai = function (_, generator) {
+ generator.definitions_['import_uart_com'] = 'import uart_com';
+ var dropdown_uart = this.getFieldValue('mode');
+ var dropdown_stat = this.getFieldValue('STAT');
+ var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '0';
+ var code = "uart_com.send(uart" + dropdown_uart + ", " + content + ", repeat=" + dropdown_stat + ")\n";
+ return code;
+}
+
+const serial_read_from_ai = function (_, generator) {
+ generator.definitions_['import_uart_com'] = 'import uart_com';
+ var dropdown_uart = this.getFieldValue('mode');
+ var code = "uart_com.recv(uart" + dropdown_uart + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../micropython/generators/system.js":
+/*!*******************************************!*\
+ !*** ../micropython/generators/system.js ***!
+ \*******************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ Panic_with_status_code: () => (/* binding */ Panic_with_status_code),
+/* harmony export */ Timer_init: () => (/* binding */ Timer_init),
+/* harmony export */ base_delay: () => (/* binding */ base_delay),
+/* harmony export */ controls_delay: () => (/* binding */ controls_delay),
+/* harmony export */ controls_delay_new: () => (/* binding */ controls_delay_new),
+/* harmony export */ controls_end_program: () => (/* binding */ controls_end_program),
+/* harmony export */ controls_millis: () => (/* binding */ controls_millis),
+/* harmony export */ controls_uname: () => (/* binding */ controls_uname),
+/* harmony export */ reset: () => (/* binding */ reset),
+/* harmony export */ system_bitbot_shutdown: () => (/* binding */ system_bitbot_shutdown),
+/* harmony export */ system_device_name: () => (/* binding */ system_device_name),
+/* harmony export */ system_device_serial_number: () => (/* binding */ system_device_serial_number),
+/* harmony export */ system_event_bus_source: () => (/* binding */ system_event_bus_source),
+/* harmony export */ system_event_bus_value: () => (/* binding */ system_event_bus_value),
+/* harmony export */ system_machine_reset: () => (/* binding */ system_machine_reset),
+/* harmony export */ system_on_event: () => (/* binding */ system_on_event),
+/* harmony export */ system_raise_event: () => (/* binding */ system_raise_event),
+/* harmony export */ system_reset: () => (/* binding */ system_reset),
+/* harmony export */ system_run_in_background: () => (/* binding */ system_run_in_background),
+/* harmony export */ system_ticks_diff: () => (/* binding */ system_ticks_diff),
+/* harmony export */ system_timer: () => (/* binding */ system_timer),
+/* harmony export */ system_timer_init: () => (/* binding */ system_timer_init),
+/* harmony export */ system_timestamp: () => (/* binding */ system_timestamp),
+/* harmony export */ system_value: () => (/* binding */ system_value),
+/* harmony export */ system_wait: () => (/* binding */ system_wait),
+/* harmony export */ system_wdt_feed: () => (/* binding */ system_wdt_feed),
+/* harmony export */ system_wdt_init: () => (/* binding */ system_wdt_init),
+/* harmony export */ time_ticks_diff: () => (/* binding */ time_ticks_diff),
+/* harmony export */ timer: () => (/* binding */ timer),
+/* harmony export */ timer2: () => (/* binding */ timer2)
+/* harmony export */ });
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const system_run_in_background = function (_, generator) {
+ var branch = generator.statementToCode(this, 'do');
+ return 'control.inBackground(() => {\n' + branch + '})\n';
+}
+
+const system_reset = function () {
+ return 'control.reset()\n';
+}
+
+const system_wait = function (_, generator) {
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC) || mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.default.serial;
+ return 'control.waitMicros(' + data + ')\n';
+}
+
+const system_raise_event = function (_, generator) {
+ var source = generator.valueToCode(this, 'system_event_bus_source', generator.ORDER_ATOMIC) || mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.default.serial;
+ var value = generator.valueToCode(this, 'system_event_bus_value', generator.ORDER_ATOMIC) || mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.default.serial;
+ return 'control.raiseEvent(' + source + ', ' + value + ')\n';
+}
+
+const system_on_event = function (_, generator) {
+ var source = generator.valueToCode(this, 'system_event_bus_source', generator.ORDER_ATOMIC) || mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.default.serial;
+ var value = generator.valueToCode(this, 'system_event_bus_value', generator.ORDER_ATOMIC) || mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.default.serial;
+ var branch = generator.statementToCode(this, 'do');
+ return 'control.onEvent(' + source + ', ' + value + ', () => {\n' + branch + ')\n';
+}
+
+const system_timestamp = function (_, generator) {
+ return ['control.eventTimestamp()', generator.ORDER_ATOMIC];
+}
+
+const system_value = function (_, generator) {
+ return ['control.eventValue()', generator.ORDER_ATOMIC];
+}
+
+const system_event_bus_source = function (_, generator) {
+ return [this.getFieldValue('key'), generator.ORDER_ATOMIC];
+}
+
+const system_event_bus_value = function (_, generator) {
+ return [this.getFieldValue('key'), generator.ORDER_ATOMIC];
+}
+
+const system_device_name = function (_, generator) {
+ return ['control.deviceName()', generator.ORDER_ATOMIC];
+}
+
+const system_device_serial_number = function (_, generator) {
+ return ['control.deviceSerialNumber()', generator.ORDER_ATOMIC];
+}
+
+//ok
+const Panic_with_status_code = function (_, generator) {
+ var status_code = generator.valueToCode(this, 'STATUS_CODE', generator.ORDER_ATOMIC) || '1000'
+ var code = 'panic(' + status_code + ')\n';
+ return code;
+}
+
+//ok
+const controls_millis = function (_, generator) {
+ generator.definitions_['import_time'] = 'import time';
+ var dropdown_time = this.getFieldValue('Time');
+ switch (dropdown_time) {
+ case "ms":
+ var code = 'time.ticks_ms()';
+ return [code, generator.ORDER_ATOMIC];
+ case "us":
+ var code = 'time.ticks_us()';
+ return [code, generator.ORDER_ATOMIC];
+ }
+}
+
+//ok
+const controls_end_program = function () {
+ return 'while True:\n pass\n';
+}
+
+//ok
+const reset = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ return 'reset()\n';
+}
+
+const controls_uname = function (_, generator) {
+ generator.definitions_['import_os'] = 'import os';
+ return 'os.uname()';
+}
+
+const controls_delay = function (_, generator) {
+ // generator.definitions_.import_time = "import time";
+ generator.definitions_['import_time'] = 'import time';
+ var delay_time = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ATOMIC) || '1000'
+ var dropdown_time = this.getFieldValue('Time');
+ switch (dropdown_time) {
+ case "s":
+ var code = 'time.sleep(' + delay_time + ')\n';
+ return code;
+ case "ms":
+ var code = 'time.sleep_ms(' + delay_time + ')\n';
+ return code;
+ case "us":
+ var code = 'time.sleep_us(' + delay_time + ')\n';
+ return code;
+ }
+}
+
+const controls_delay_new = function (_, generator) {
+ // generator.definitions_.import_time = "import time";
+ generator.definitions_['import_time'] = 'import time';
+ var delay_time = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ATOMIC) || '1000'
+ var dropdown_time = this.getFieldValue('Time');
+ switch (dropdown_time) {
+ case "s":
+ var code = 'time.sleep(' + delay_time + ')\n';
+ return code;
+ case "ms":
+ var code = 'time.sleep_ms(' + delay_time + ')\n';
+ return code;
+ case "us":
+ var code = 'time.sleep_us(' + delay_time + ')\n';
+ return code;
+ }
+}
+
+const timer = function (_, generator) {
+ generator.definitions_['import_mixgo'] = 'import mixgo';
+ var v = generator.valueToCode(this, "VAR", generator.ORDER_NONE) || "None";
+ var period = generator.valueToCode(this, "period", generator.ORDER_NONE) || "0";
+ var mode = generator.valueToCode(this, "mode", generator.ORDER_NONE) || "None";
+ var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
+ // var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
+ var code = v + ".init(period = " + period + ", mode = Timer." + mode + ", callback = " + callback + ")\n";
+ return code;
+}
+
+const system_timer = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var v = generator.valueToCode(this, "VAR", generator.ORDER_NONE) || "None";
+ var period = generator.valueToCode(this, "period", generator.ORDER_NONE) || "0";
+ var mode = this.getFieldValue('mode');
+ //var branch = generator.statementToCode(this, 'callback') || generator.PASS;
+ var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
+ //var code = v + ".init(period = " + period + ", mode = machine.Timer." + mode + ", callback = " + v + "_callback_func)\n";
+ //generator.setups_['timer_callback_func'] = 'def ' + v + '_callback_func(t):\n' + branch + '\n';
+ var code = v + ".init(period = " + period + ", mode = machine.Timer." + mode + ", callback = " + callback + ")\n";
+ return code;
+}
+
+const system_ticks_diff = function (_, generator) {
+ generator.definitions_['import_time'] = 'import time';
+ var end = generator.valueToCode(this, "END", generator.ORDER_NONE) || "0";
+ var start = generator.valueToCode(this, "START", generator.ORDER_NONE) || "0";
+ var code = "time.ticks_diff(" + end + ", " + start + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const system_timer_init = function (_, generator) {
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ generator.definitions_['import_machine'] = 'import machine';
+ var code = v + ' = machine.Timer(0)\n';
+ return code;
+}
+
+const system_wdt_init = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var period = generator.valueToCode(this, "period", generator.ORDER_NONE) || "0";
+ var code = 'wdt = machine.WDT(timeout= ' + period + ')\n';
+ return code;
+}
+
+const system_wdt_feed = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var code = 'wdt.feed()\n';
+ return code;
+}
+
+const system_machine_reset = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var code = 'machine.reset()\n';
+ return code;
+}
+
+const system_bitbot_shutdown = function (_, generator) {
+ generator.definitions_['import_bitbot_onboard_bot51'] = 'from bitbot import onboard_bot51';
+ var code = 'onboard_bot51.shutdown()\n';
+ return code;
+}
+
+const Timer_init = system_timer_init;
+const timer2 = system_timer;
+const time_ticks_diff = system_ticks_diff;
+const base_delay = controls_delay;
+
+/***/ }),
+
+/***/ "../micropython/generators/weather.js":
+/*!********************************************!*\
+ !*** ../micropython/generators/weather.js ***!
+ \********************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ Air_daily_content: () => (/* binding */ Air_daily_content),
+/* harmony export */ Air_now_content: () => (/* binding */ Air_now_content),
+/* harmony export */ Geo_moon_content: () => (/* binding */ Geo_moon_content),
+/* harmony export */ Geo_sun_content: () => (/* binding */ Geo_sun_content),
+/* harmony export */ Life_suggestion_content: () => (/* binding */ Life_suggestion_content),
+/* harmony export */ Location_search_content: () => (/* binding */ Location_search_content),
+/* harmony export */ Tide_daily_content: () => (/* binding */ Tide_daily_content),
+/* harmony export */ WEATHER_DAILY: () => (/* binding */ WEATHER_DAILY),
+/* harmony export */ WEATHER_HOUR: () => (/* binding */ WEATHER_HOUR),
+/* harmony export */ WEATHER_NOW: () => (/* binding */ WEATHER_NOW),
+/* harmony export */ Weather_alarm_content: () => (/* binding */ Weather_alarm_content),
+/* harmony export */ Weather_daily: () => (/* binding */ Weather_daily),
+/* harmony export */ Weather_daily_content: () => (/* binding */ Weather_daily_content),
+/* harmony export */ Weather_now: () => (/* binding */ Weather_now),
+/* harmony export */ Weather_now_content: () => (/* binding */ Weather_now_content)
+/* harmony export */ });
+const WEATHER_NOW = function (_, generator) {
+ generator.definitions_['import_seniverse_api'] = "import seniverse_api";
+ var dropdown_mode = this.getFieldValue('mode');
+ var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);
+ var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
+ var code = 'seniverse_api.' + dropdown_mode + '(' + key + ',' + addr + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const WEATHER_DAILY = function (_, generator) {
+ generator.definitions_['import_seniverse_api'] = "import seniverse_api";
+ var dropdown_mode = this.getFieldValue('mode');
+ var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);
+ var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
+ var day = generator.valueToCode(this, 'day', generator.ORDER_ATOMIC);
+ var code = 'seniverse_api.' + dropdown_mode + '(' + key + ',' + addr + ',' + day + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const WEATHER_HOUR = function (_, generator) {
+ generator.definitions_['import_seniverse_api'] = "import seniverse_api";
+ var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);
+ var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
+ var hour = generator.valueToCode(this, 'hour', generator.ORDER_ATOMIC);
+ var code = 'seniverse_api.weather_hourly(' + key + ',' + addr + ',' + hour + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const Weather_now = function (_, generator) {
+ generator.definitions_['import_seniverse_api*'] = "from seniverse_api import *";
+ var dropdown_mode = this.getFieldValue('mode');
+ var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);
+ var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
+ var code = dropdown_mode + '.request(' + key + ',' + addr + ')\n';
+ return code;
+};
+
+const Weather_now_content = function (_, generator) {
+ generator.definitions_['import_seniverse_api*'] = "from seniverse_api import *";
+ var content = this.getFieldValue('content');
+ if (content == 'none') {
+ var code = 'Weather_now.analysis()';
+ }
+ else {
+ var code = 'Weather_now.analysis("' + content + '")';
+ }
+ return [code, generator.ORDER_ATOMIC];
+};
+
+const Air_now_content = function (_, generator) {
+ generator.definitions_['import_seniverse_api*'] = "from seniverse_api import *";
+ var content = this.getFieldValue('content');
+ if (content == 'none') {
+ var code = 'Air_now.analysis()';
+ }
+ else {
+ var code = 'Air_now.analysis("' + content + '")';
+ }
+ return [code, generator.ORDER_ATOMIC];
+};
+
+const Weather_alarm_content = function (_, generator) {
+ generator.definitions_['import_seniverse_api*'] = "from seniverse_api import *";
+ var content = this.getFieldValue('content');
+ if (content == 'none') {
+ var code = 'Weather_alarm.analysis()';
+ }
+ else {
+ var code = 'Weather_alarm.analysis("' + content + '")';
+ }
+ return [code, generator.ORDER_ATOMIC];
+};
+
+const Life_suggestion_content = function (_, generator) {
+ generator.definitions_['import_seniverse_api*'] = "from seniverse_api import *";
+ var content = this.getFieldValue('content');
+ if (content == 'none') {
+ var code = 'Life_suggestion.analysis()';
+ }
+ else {
+ var code = 'Life_suggestion.analysis("' + content + '")';
+ }
+ return [code, generator.ORDER_ATOMIC];
+};
+
+const Tide_daily_content = function (_, generator) {
+ generator.definitions_['import_seniverse_api*'] = "from seniverse_api import *";
+ var content = this.getFieldValue('content');
+ if (content == 'none') {
+ var code = 'Tide_daily.analysis()';
+ }
+ else {
+ var code = 'Tide_daily.analysis("' + content + '")';
+ }
+ return [code, generator.ORDER_ATOMIC];
+};
+
+const Location_search_content = function (_, generator) {
+ generator.definitions_['import_seniverse_api*'] = "from seniverse_api import *";
+ var content = this.getFieldValue('content');
+ if (content == 'none') {
+ var code = 'Location_search.analysis()';
+ }
+ else {
+ var code = 'Location_search.analysis("' + content + '")';
+ }
+ return [code, generator.ORDER_ATOMIC];
+};
+
+const Weather_daily = function (_, generator) {
+ generator.definitions_['import_seniverse_api*'] = "from seniverse_api import *";
+ var dropdown_mode = this.getFieldValue('mode');
+ var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);
+ var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
+ var day = generator.valueToCode(this, 'day', generator.ORDER_ATOMIC);
+ var code = dropdown_mode + '.request(' + key + ',' + addr + ',' + day + ')\n';
+ return code;
+};
+
+const Weather_daily_content = function (_, generator) {
+ generator.definitions_['import_seniverse_api*'] = "from seniverse_api import *";
+ var content = this.getFieldValue('content');
+ var day = generator.valueToCode(this, 'day', generator.ORDER_ATOMIC);
+ if (content == 'none') {
+ var code = 'Weather_daily.analysis('+day+')';
+ }
+ else {
+ var code = 'Weather_daily.analysis(' + day + ',"' + content + '")';
+ }
+ return [code, generator.ORDER_ATOMIC];
+};
+
+const Air_daily_content = function (_, generator) {
+ generator.definitions_['import_seniverse_api*'] = "from seniverse_api import *";
+ var content = this.getFieldValue('content');
+ var day = generator.valueToCode(this, 'day', generator.ORDER_ATOMIC);
+ if (content == 'none') {
+ var code = 'Air_daily.analysis('+day+')';
+ }
+ else {
+ var code = 'Air_daily.analysis(' + day + ',"' + content + '")';
+ }
+ return [code, generator.ORDER_ATOMIC];
+};
+
+const Geo_sun_content = function (_, generator) {
+ generator.definitions_['import_seniverse_api*'] = "from seniverse_api import *";
+ var content = this.getFieldValue('content');
+ var day = generator.valueToCode(this, 'day', generator.ORDER_ATOMIC);
+ if (content == 'none') {
+ var code = 'Geo_sun.analysis('+day+')';
+ }
+ else {
+ var code = 'Geo_sun.analysis(' + day + ',"' + content + '")';
+ }
+ return [code, generator.ORDER_ATOMIC];
+};
+
+const Geo_moon_content = function (_, generator) {
+ generator.definitions_['import_seniverse_api*'] = "from seniverse_api import *";
+ var content = this.getFieldValue('content');
+ var day = generator.valueToCode(this, 'day', generator.ORDER_ATOMIC);
+ if (content == 'none') {
+ var code = 'Geo_moon.analysis('+day+')';
+ }
+ else {
+ var code = 'Geo_moon.analysis(' + day + ',"' + content + '")';
+ }
+ return [code, generator.ORDER_ATOMIC];
+};
+
+/***/ }),
+
+/***/ "./blocks/esp32_profile.js":
+/*!*********************************!*\
+ !*** ./blocks/esp32_profile.js ***!
+ \*********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
+/* harmony export */ });
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const pins = {};
+
+pins["MixGo MINI"] = {
+ description: "MicroPython[ESP32C3 MixGo MINI]",
+ digital_pin: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-10', '18']),
+ input_pin: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-10', '18']),
+ output_pin: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-10', '18']),
+ pwm_input: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-10', '18'], 'pwm', 'pwm'),
+ analog_input: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-4'], 'adc', 'adc'),
+ pwm_output: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-10', '18'], 'pwm', 'pwm'),
+ analog_output: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-4'], 'adc', 'adc'),
+ espnow_channel: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['1-13']),
+ haskylens_model: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-4']),
+ digital: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-10', '18'], 'pin', 'pin'),
+ pwm_pin: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-10', '18']),
+ pwm: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-10', '18'], 'pwm', 'pwm'),
+ analog_pin: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-4']),
+ analog: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-4'], 'adc', 'adc'),
+ button: [["B1", "B1key"], ["B2", "B2key"], ["A1", "A1key"], ["A2", "A2key"], ["A3", "A3key"], ["A4", "A4key"]],
+ buttonB: [["B1", "B1key"], ["B2", "B2key"]],
+ axis: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-4']),
+ exlcdh: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-11']),
+ exlcdv: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-7']),
+ brightness: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-9']),
+ tts_voice: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-16']),
+ tts_builtin_music: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-47']),
+ tts_bgmusic: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-15']),
+ //builtinimg: [["HEART", "matrix.Image.HEART"],["HEART_SMALL", "matrix.Image.HEART_SMALL"],["HAPPY", "matrix.Image.HAPPY"],["SAD", "matrix.Image.SAD"],["SMILE", "matrix.Image.SMILE"],["SILLY", "matrix.Image.SILLY"],["FABULOUS", "matrix.Image.FABULOUS"],["SURPRISED", "matrix.Image.SURPRISED"],["ASLEEP", "matrix.Image.ASLEEP"],["ANGRY", "matrix.Image.ANGRY"],["CONFUSED", "matrix.Image.CONFUSED"],["NO", "matrix.Image.NO"],["YES", "matrix.Image.YES"],["LEFT_ARROW", "matrix.Image.LEFT_ARROW"],["RIGHT_ARROW", "matrix.Image.RIGHT_ARROW"],["DRESS", "matrix.Image.DRESS"],["TRANSFORMERS", "matrix.Image.TRANSFORMERS"],["SCISSORS", "matrix.Image.SCISSORS"],["EXIT", "matrix.Image.EXIT"],["TREE", "matrix.Image.TREE"],["PACMAN", "matrix.Image.PACMAN"],["TARGET", "matrix.Image.TARGET"],["TSHIRT", "matrix.Image.TSHIRT"],["ROLLERSKATE", "matrix.Image.ROLLERSKATE"],["DUCK", "matrix.Image.DUCK"],["HOUSE", "matrix.Image.HOUSE"],["TORTOISE", "matrix.Image.TORTOISE"],["BUTTERFLY", "matrix.Image.BUTTERFLY"],["STICKFIGURE", "matrix.Image.STICKFIGURE"],["GHOST", "matrix.Image.GHOST"],["PITCHFORK", "matrix.Image.PITCHFORK"],["MUSIC_QUAVERS", "matrix.Image.MUSIC_QUAVERS"],["MUSIC_QUAVER", "matrix.Image.MUSIC_QUAVER"],["MUSIC_CROTCHET", "matrix.Image.MUSIC_CROTCHET"],["COW", "matrix.Image.COW"],["RABBIT", "matrix.Image.RABBIT"],["SQUARE_SMALL", "matrix.Image.SQUARE_SMALL"],["SQUARE", "matrix.Image.SQUARE"],["DIAMOND_SMALL", "matrix.Image.DIAMOND_SMALL"],["DIAMOND", "matrix.Image.DIAMOND"],["CHESSBOARD", "matrix.Image.CHESSBOARD"],["TRIANGLE_LEFT", "matrix.Image.TRIANGLE_LEFT"],["TRIANGLE", "matrix.Image.TRIANGLE"],["SNAKE", "matrix.Image.SNAKE"],["UMBRELLA", "matrix.Image.UMBRELLA"],["SKULL", "matrix.Image.SKULL"],["GIRAFFE", "matrix.Image.GIRAFFE"],["SWORD", "matrix.Image.SWORD"]],
+ builtinimg: [["HEART", "onboard_matrix.HEART"], ["HEART_SMALL", "onboard_matrix.HEART_SMALL"], ["HAPPY", "onboard_matrix.HAPPY"], ["SAD", "onboard_matrix.SAD"], ["SMILE", "onboard_matrix.SMILE"], ["ANGRY", "onboard_matrix.ANGRY"], ["NO", "onboard_matrix.NO"], ["YES", "onboard_matrix.YES"], ["DOOR_OPEN", "onboard_matrix.DOOR_OPEN"], ["DOOR_OPENING", "onboard_matrix.DOOR_OPENING"], ["DOOR_CLOSE", "onboard_matrix.DOOR_CLOSE"]],
+ builtinimg_extern: [["HEART", "matrix32x12.Matrix.HEART"], ["HEART_SMALL", "matrix32x12.Matrix.HEART_SMALL"], ["HAPPY", "matrix32x12.Matrix.HAPPY"], ["SAD", "matrix32x12.Matrix.SAD"], ["SMILE", "matrix32x12.Matrix.SMILE"], ["SILLY", "matrix32x12.Matrix.SILLY"], ["FABULOUS", "matrix32x12.Matrix.FABULOUS"], ["SURPRISED", "matrix32x12.Matrix.SURPRISED"], ["ASLEEP", "matrix32x12.Matrix.ASLEEP"], ["ANGRY", "matrix32x12.Matrix.ANGRY"], ["CONFUSED", "matrix32x12.Matrix.CONFUSED"], ["NO", "matrix32x12.Matrix.NO"], ["YES", "matrix32x12.Matrix.YES"], ["LEFT_ARROW", "matrix32x12.Matrix.LEFT_ARROW"], ["RIGHT_ARROW", "matrix32x12.Matrix.RIGHT_ARROW"], ["DRESS", "matrix32x12.Matrix.DRESS"], ["TRANSFORMERS", "matrix32x12.Matrix.TRANSFORMERS"], ["SCISSORS", "matrix32x12.Matrix.SCISSORS"], ["EXIT", "matrix32x12.Matrix.EXIT"], ["TREE", "matrix32x12.Matrix.TREE"], ["PACMAN", "matrix32x12.Matrix.PACMAN"], ["TARGET", "matrix32x12.Matrix.TARGET"], ["TSHIRT", "matrix32x12.Matrix.TSHIRT"], ["ROLLERSKATE", "matrix32x12.Matrix.ROLLERSKATE"], ["DUCK", "matrix32x12.Matrix.DUCK"], ["HOUSE", "matrix32x12.Matrix.HOUSE"], ["TORTOISE", "matrix32x12.Matrix.TORTOISE"], ["BUTTERFLY", "matrix32x12.Matrix.BUTTERFLY"], ["STICKFIGURE", "matrix32x12.Matrix.STICKFIGURE"], ["GHOST", "matrix32x12.Matrix.GHOST"], ["PITCHFORK", "matrix32x12.Matrix.PITCHFORK"], ["onboard_music_QUAVERS", "matrix32x12.Matrix.onboard_music_QUAVERS"], ["onboard_music_QUAVER", "matrix32x12.Matrix.onboard_music_QUAVER"], ["onboard_music_CROTCHET", "matrix32x12.Matrix.onboard_music_CROTCHET"], ["COW", "matrix32x12.Matrix.COW"], ["RABBIT", "matrix32x12.Matrix.RABBIT"], ["SQUARE_SMALL", "matrix32x12.Matrix.SQUARE_SMALL"], ["SQUARE", "matrix32x12.Matrix.SQUARE"], ["DIAMOND_SMALL", "matrix32x12.Matrix.DIAMOND_SMALL"], ["DIAMOND", "matrix32x12.Matrix.DIAMOND"], ["CHESSBOARD", "matrix32x12.Matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "matrix32x12.Matrix.TRIANGLE_LEFT"], ["TRIANGLE", "matrix32x12.Matrix.TRIANGLE"], ["SNAKE", "matrix32x12.Matrix.SNAKE"], ["UMBRELLA", "matrix32x12.Matrix.UMBRELLA"], ["SKULL", "matrix32x12.Matrix.SKULL"], ["GIRAFFE", "matrix32x12.Matrix.GIRAFFE"], ["SWORD", "matrix32x12.Matrix.SWORD"]],
+ imglist: [["ALL_CLOCKS", "matrix.Image.ALL_CLOCKS"], ["ALL_ARROWS", "matrix.Image.ALL_ARROWS"]],
+ playlist: [["DADADADUM", "onboard_music.DADADADUM"], ["BIRTHDAY", "onboard_music.BIRTHDAY"], ["BA_DING", "onboard_music.BA_DING"], ["JUMP_UP", "onboard_music.JUMP_UP"], ["JUMP_DOWN", "onboard_music.JUMP_DOWN"], ["POWER_UP", "onboard_music.POWER_UP"], ["POWER_DOWN", "onboard_music.POWER_DOWN"]],
+ playlist_extern: [["DADADADUM", "DADADADUM"], ["ENTERTAINER", "ENTERTAINER"], ["PRELUDE", "PRELUDE"], ["ODE", "ODE"], ["NYAN", "NYAN"], ["RINGTONE", "RINGTONE"], ["FUNK", "FUNK"], ["BLUES", "BLUES"], ["BIRTHDAY", "BIRTHDAY"], ["WEDDING", "WEDDING"], ["FUNERAL", "FUNERAL"], ["PUNCHLINE", "PUNCHLINE"], ["PYTHON", "PYTHON"], ["BADDY", "BADDY"], ["CHASE", "CHASE"], ["BA_DING", "BA_DING"], ["WAWAWAWAA", "WAWAWAWAA"], ["JUMP_UP", "JUMP_UP"], ["JUMP_DOWN", "JUMP_DOWN"], ["POWER_UP", "POWER_UP"], ["POWER_DOWN", "POWER_DOWN"]],
+ tone_notes: [
+ ["NOTE_C3", "131"], ["NOTE_D3", "147"], ["NOTE_E3", "165"], ["NOTE_F3", "175"], ["NOTE_G3", "196"], ["NOTE_A3", "220"], ["NOTE_B3", "247"],
+ ["NOTE_C4", "262"], ["NOTE_D4", "294"], ["NOTE_E4", "330"], ["NOTE_F4", "349"], ["NOTE_G4", "392"], ["NOTE_A4", "440"], ["NOTE_B4", "494"],
+ ["NOTE_C5", "523"], ["NOTE_D5", "587"], ["NOTE_E5", "659"], ["NOTE_F5", "698"], ["NOTE_G5", "784"], ["NOTE_A5", "880"], ["NOTE_B5", "988"]
+ ],
+ serial_pin: [["pin0", "0"], ["pin1", "1"], ["pin2", "2"], ["pin8", "8"], ["pin12", "12"], ["pin13", "13"], ["pin14", "14"], ["pin15", "15"], ["pin16", "16"]],
+ radio_power: [['0', '0'], ['1', '1'], ['2', '2'], ['3', '3'], ['4', '4'], ['5', '5'], ['6', '6'], ['7', '7']],
+ radio_datarate: [["1Mbit", "RATE_1MBIT"], ["250Kbit", "RATE_250KBIT"], ["2Mbit", "RATE_2MBIT"]],
+ one_more: [["ONE_SHOT", "ONE_SHOT"], ["PERIODIC", "PERIODIC"]],
+ digital_dot: [["0", "0"], ["1", "1"], ["2", "2"]]
+};
+
+pins["ESP32C2 Generic(2M)"] = {
+ description: "MicroPython[ESP32C3 MixGo CC]",
+ digital_pin: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-11', '18-21']),
+ input_pin: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-11', '18-21']),
+ output_pin: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-11', '18-21']),
+ pwm_input: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-11', '18-21'], 'pwm', 'pwm'),
+ analog_input: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-5'], 'adc', 'adc'),
+ pwm_output: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-11', '18-21'], 'pwm', 'pwm'),
+ analog_output: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-5'], 'adc', 'adc'),
+ espnow_channel: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['1-13']),
+ haskylens_model: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-4']),
+ digital: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-11', '18-21'], 'pin', 'pin'),
+ pwm_pin: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-11', '18-21']),
+ pwm: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-11', '18-21'], 'pwm', 'pwm'),
+ analog_pin: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-5']),
+ analog: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-5'], 'adc', 'adc'),
+ button: [["B1", "B1key"], ["B2", "B2key"], ["A1", "A1key"], ["A2", "A2key"], ["A3", "A3key"], ["A4", "A4key"]],
+ buttonB: [["B1", "B1key"], ["B2", "B2key"]],
+ axis: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-4']),
+ exlcdh: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-31']),
+ exlcdv: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-11']),
+ brightness: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-9']),
+ tts_voice: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-16']),
+ tts_builtin_music: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-47']),
+ tts_bgmusic: mixly__WEBPACK_IMPORTED_MODULE_0__.Profile.generate(['0-15']),
+ //builtinimg: [["HEART", "matrix.Image.HEART"],["HEART_SMALL", "matrix.Image.HEART_SMALL"],["HAPPY", "matrix.Image.HAPPY"],["SAD", "matrix.Image.SAD"],["SMILE", "matrix.Image.SMILE"],["SILLY", "matrix.Image.SILLY"],["FABULOUS", "matrix.Image.FABULOUS"],["SURPRISED", "matrix.Image.SURPRISED"],["ASLEEP", "matrix.Image.ASLEEP"],["ANGRY", "matrix.Image.ANGRY"],["CONFUSED", "matrix.Image.CONFUSED"],["NO", "matrix.Image.NO"],["YES", "matrix.Image.YES"],["LEFT_ARROW", "matrix.Image.LEFT_ARROW"],["RIGHT_ARROW", "matrix.Image.RIGHT_ARROW"],["DRESS", "matrix.Image.DRESS"],["TRANSFORMERS", "matrix.Image.TRANSFORMERS"],["SCISSORS", "matrix.Image.SCISSORS"],["EXIT", "matrix.Image.EXIT"],["TREE", "matrix.Image.TREE"],["PACMAN", "matrix.Image.PACMAN"],["TARGET", "matrix.Image.TARGET"],["TSHIRT", "matrix.Image.TSHIRT"],["ROLLERSKATE", "matrix.Image.ROLLERSKATE"],["DUCK", "matrix.Image.DUCK"],["HOUSE", "matrix.Image.HOUSE"],["TORTOISE", "matrix.Image.TORTOISE"],["BUTTERFLY", "matrix.Image.BUTTERFLY"],["STICKFIGURE", "matrix.Image.STICKFIGURE"],["GHOST", "matrix.Image.GHOST"],["PITCHFORK", "matrix.Image.PITCHFORK"],["MUSIC_QUAVERS", "matrix.Image.MUSIC_QUAVERS"],["MUSIC_QUAVER", "matrix.Image.MUSIC_QUAVER"],["MUSIC_CROTCHET", "matrix.Image.MUSIC_CROTCHET"],["COW", "matrix.Image.COW"],["RABBIT", "matrix.Image.RABBIT"],["SQUARE_SMALL", "matrix.Image.SQUARE_SMALL"],["SQUARE", "matrix.Image.SQUARE"],["DIAMOND_SMALL", "matrix.Image.DIAMOND_SMALL"],["DIAMOND", "matrix.Image.DIAMOND"],["CHESSBOARD", "matrix.Image.CHESSBOARD"],["TRIANGLE_LEFT", "matrix.Image.TRIANGLE_LEFT"],["TRIANGLE", "matrix.Image.TRIANGLE"],["SNAKE", "matrix.Image.SNAKE"],["UMBRELLA", "matrix.Image.UMBRELLA"],["SKULL", "matrix.Image.SKULL"],["GIRAFFE", "matrix.Image.GIRAFFE"],["SWORD", "matrix.Image.SWORD"]],
+ builtinimg: [["HEART", "onboard_matrix.HEART"], ["HEART_SMALL", "onboard_matrix.HEART_SMALL"], ["HAPPY", "onboard_matrix.HAPPY"], ["SAD", "onboard_matrix.SAD"], ["SMILE", "onboard_matrix.SMILE"], ["SILLY", "onboard_matrix.SILLY"], ["FABULOUS", "onboard_matrix.FABULOUS"], ["SURPRISED", "onboard_matrix.SURPRISED"], ["ASLEEP", "onboard_matrix.ASLEEP"], ["ANGRY", "onboard_matrix.ANGRY"], ["CONFUSED", "onboard_matrix.CONFUSED"], ["NO", "onboard_matrix.NO"], ["YES", "onboard_matrix.YES"]],
+ builtinimg_extern: [["HEART", "matrix32x12.Matrix.HEART"], ["HEART_SMALL", "matrix32x12.Matrix.HEART_SMALL"], ["HAPPY", "matrix32x12.Matrix.HAPPY"], ["SAD", "matrix32x12.Matrix.SAD"], ["SMILE", "matrix32x12.Matrix.SMILE"], ["SILLY", "matrix32x12.Matrix.SILLY"], ["FABULOUS", "matrix32x12.Matrix.FABULOUS"], ["SURPRISED", "matrix32x12.Matrix.SURPRISED"], ["ASLEEP", "matrix32x12.Matrix.ASLEEP"], ["ANGRY", "matrix32x12.Matrix.ANGRY"], ["CONFUSED", "matrix32x12.Matrix.CONFUSED"], ["NO", "matrix32x12.Matrix.NO"], ["YES", "matrix32x12.Matrix.YES"], ["LEFT_ARROW", "matrix32x12.Matrix.LEFT_ARROW"], ["RIGHT_ARROW", "matrix32x12.Matrix.RIGHT_ARROW"], ["DRESS", "matrix32x12.Matrix.DRESS"], ["TRANSFORMERS", "matrix32x12.Matrix.TRANSFORMERS"], ["SCISSORS", "matrix32x12.Matrix.SCISSORS"], ["EXIT", "matrix32x12.Matrix.EXIT"], ["TREE", "matrix32x12.Matrix.TREE"], ["PACMAN", "matrix32x12.Matrix.PACMAN"], ["TARGET", "matrix32x12.Matrix.TARGET"], ["TSHIRT", "matrix32x12.Matrix.TSHIRT"], ["ROLLERSKATE", "matrix32x12.Matrix.ROLLERSKATE"], ["DUCK", "matrix32x12.Matrix.DUCK"], ["HOUSE", "matrix32x12.Matrix.HOUSE"], ["TORTOISE", "matrix32x12.Matrix.TORTOISE"], ["BUTTERFLY", "matrix32x12.Matrix.BUTTERFLY"], ["STICKFIGURE", "matrix32x12.Matrix.STICKFIGURE"], ["GHOST", "matrix32x12.Matrix.GHOST"], ["PITCHFORK", "matrix32x12.Matrix.PITCHFORK"], ["onboard_music_QUAVERS", "matrix32x12.Matrix.onboard_music_QUAVERS"], ["onboard_music_QUAVER", "matrix32x12.Matrix.onboard_music_QUAVER"], ["onboard_music_CROTCHET", "matrix32x12.Matrix.onboard_music_CROTCHET"], ["COW", "matrix32x12.Matrix.COW"], ["RABBIT", "matrix32x12.Matrix.RABBIT"], ["SQUARE_SMALL", "matrix32x12.Matrix.SQUARE_SMALL"], ["SQUARE", "matrix32x12.Matrix.SQUARE"], ["DIAMOND_SMALL", "matrix32x12.Matrix.DIAMOND_SMALL"], ["DIAMOND", "matrix32x12.Matrix.DIAMOND"], ["CHESSBOARD", "matrix32x12.Matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "matrix32x12.Matrix.TRIANGLE_LEFT"], ["TRIANGLE", "matrix32x12.Matrix.TRIANGLE"], ["SNAKE", "matrix32x12.Matrix.SNAKE"], ["UMBRELLA", "matrix32x12.Matrix.UMBRELLA"], ["SKULL", "matrix32x12.Matrix.SKULL"], ["GIRAFFE", "matrix32x12.Matrix.GIRAFFE"], ["SWORD", "matrix32x12.Matrix.SWORD"]],
+ imglist: [["ALL_CLOCKS", "matrix.Image.ALL_CLOCKS"], ["ALL_ARROWS", "matrix.Image.ALL_ARROWS"]],
+ playlist: [["DADADADUM", "onboard_music.DADADADUM"], ["ENTERTAINER", "onboard_music.ENTERTAINER"], ["PRELUDE", "onboard_music.PRELUDE"], ["ODE", "onboard_music.ODE"], ["NYAN", "onboard_music.NYAN"], ["RINGTONE", "onboard_music.RINGTONE"], ["FUNK", "onboard_music.FUNK"], ["BLUES", "onboard_music.BLUES"], ["BIRTHDAY", "onboard_music.BIRTHDAY"], ["WEDDING", "onboard_music.WEDDING"], ["FUNERAL", "onboard_music.FUNERAL"], ["PUNCHLINE", "onboard_music.PUNCHLINE"], ["PYTHON", "onboard_music.PYTHON"], ["BADDY", "onboard_music.BADDY"], ["CHASE", "onboard_music.CHASE"], ["BA_DING", "onboard_music.BA_DING"], ["WAWAWAWAA", "onboard_music.WAWAWAWAA"], ["JUMP_UP", "onboard_music.JUMP_UP"], ["JUMP_DOWN", "onboard_music.JUMP_DOWN"], ["POWER_UP", "onboard_music.POWER_UP"], ["POWER_DOWN", "onboard_music.POWER_DOWN"]],
+ playlist_extern: [["DADADADUM", "DADADADUM"], ["ENTERTAINER", "ENTERTAINER"], ["PRELUDE", "PRELUDE"], ["ODE", "ODE"], ["NYAN", "NYAN"], ["RINGTONE", "RINGTONE"], ["FUNK", "FUNK"], ["BLUES", "BLUES"], ["BIRTHDAY", "BIRTHDAY"], ["WEDDING", "WEDDING"], ["FUNERAL", "FUNERAL"], ["PUNCHLINE", "PUNCHLINE"], ["PYTHON", "PYTHON"], ["BADDY", "BADDY"], ["CHASE", "CHASE"], ["BA_DING", "BA_DING"], ["WAWAWAWAA", "WAWAWAWAA"], ["JUMP_UP", "JUMP_UP"], ["JUMP_DOWN", "JUMP_DOWN"], ["POWER_UP", "POWER_UP"], ["POWER_DOWN", "POWER_DOWN"]],
+ tone_notes: [
+ ["NOTE_C3", "131"], ["NOTE_D3", "147"], ["NOTE_E3", "165"], ["NOTE_F3", "175"], ["NOTE_G3", "196"], ["NOTE_A3", "220"], ["NOTE_B3", "247"],
+ ["NOTE_C4", "262"], ["NOTE_D4", "294"], ["NOTE_E4", "330"], ["NOTE_F4", "349"], ["NOTE_G4", "392"], ["NOTE_A4", "440"], ["NOTE_B4", "494"],
+ ["NOTE_C5", "523"], ["NOTE_D5", "587"], ["NOTE_E5", "659"], ["NOTE_F5", "698"], ["NOTE_G5", "784"], ["NOTE_A5", "880"], ["NOTE_B5", "988"]
+ ],
+ serial_pin: [["pin0", "0"], ["pin1", "1"], ["pin2", "2"], ["pin8", "8"], ["pin12", "12"], ["pin13", "13"], ["pin14", "14"], ["pin15", "15"], ["pin16", "16"]],
+ radio_power: [['0', '0'], ['1', '1'], ['2', '2'], ['3', '3'], ['4', '4'], ['5', '5'], ['6', '6'], ['7', '7']],
+ radio_datarate: [["1Mbit", "RATE_1MBIT"], ["250Kbit", "RATE_250KBIT"], ["2Mbit", "RATE_2MBIT"]],
+ one_more: [["ONE_SHOT", "ONE_SHOT"], ["PERIODIC", "PERIODIC"]],
+ digital_dot: [["0", "0"], ["1", "1"], ["2", "2"]],
+};
+
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (pins);
+
+/***/ }),
+
+/***/ "./blocks/inout.js":
+/*!*************************!*\
+ !*** ./blocks/inout.js ***!
+ \*************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ controls_pin_attachInterrupt: () => (/* binding */ controls_pin_attachInterrupt),
+/* harmony export */ inout_analog_atten: () => (/* binding */ inout_analog_atten),
+/* harmony export */ inout_analog_write: () => (/* binding */ inout_analog_write),
+/* harmony export */ inout_analog_write_init: () => (/* binding */ inout_analog_write_init),
+/* harmony export */ inout_analog_write_set: () => (/* binding */ inout_analog_write_set),
+/* harmony export */ inout_analog_write_set_freq: () => (/* binding */ inout_analog_write_set_freq),
+/* harmony export */ inout_digital_init: () => (/* binding */ inout_digital_init),
+/* harmony export */ inout_digital_read: () => (/* binding */ inout_digital_read),
+/* harmony export */ inout_digital_write: () => (/* binding */ inout_digital_write),
+/* harmony export */ inout_highlow: () => (/* binding */ inout_highlow),
+/* harmony export */ inout_pinMode: () => (/* binding */ inout_pinMode),
+/* harmony export */ inout_pin_attachInterrupt: () => (/* binding */ inout_pin_attachInterrupt),
+/* harmony export */ inout_pin_pressed: () => (/* binding */ inout_pin_pressed),
+/* harmony export */ inout_pin_pressed_init: () => (/* binding */ inout_pin_pressed_init),
+/* harmony export */ pin_pressed: () => (/* binding */ pin_pressed),
+/* harmony export */ pin_pressed_init: () => (/* binding */ pin_pressed_init)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const BASE_HUE = 20; //'#ae3838';//40;
+
+const inout_highlow = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_HIGH, "HIGH"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LOW, "LOW"]
+ ]), 'BOOL')
+ this.setOutput(true, Boolean);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_HIGHLOW_TOOLTIP);
+ }
+};
+
+const inout_digital_write = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Digital_PINMODEOUT)
+ .setCheck(Number);
+ this.appendValueInput("STAT")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STAT)
+ .setCheck([Number, Boolean]);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_DIGITAL_WRITE_TOOLTIP);
+ }
+};
+
+const inout_digital_read = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Digital_PINMODEIN)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MACHINE_VALUE)
+ this.setInputsInline(true);
+ this.setOutput(true, [Boolean, Number]);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_DIGITAL_READ_TOOLTIP);
+ }
+};
+
+const inout_analog_write = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField("DAC" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Analog_PINMODEOUT)
+ .setCheck(Number);
+ this.appendValueInput("NUM", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_VALUE2)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_TOOLTIP);
+ }
+};
+
+const inout_analog_write_set = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Analog_PINMODEOUT)
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_PERIOD_MIL)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_mSecond, "period"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_uSecond, "period_microseconds"]
+ ]), "key");
+ this.appendValueInput("NUM", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STAT)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_SET_TOOLTIP);
+ }
+};
+
+const inout_analog_atten = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Analog_PINMODEIN)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_REF_VOLTAGE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STAT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ ["3.3V", "machine.ADC.ATTN_11DB"],
+ ["2.2V", "machine.ADC.ATTN_6DB"],
+ ["1.5V", "machine.ADC.ATTN_2_5DB"],
+ ["1.2V", "machine.ADC.ATTN_0DB"]
+ ]), "atten");
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_ANALOG_ATTEN_TOOLTIP);
+ }
+};
+
+
+const inout_pin_pressed = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput('pin')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TOUCH_SENSOR);
+ // this.appendDummyInput()
+ // .appendField(Blockly.Msg.MIXLY_IS_TOUCHED);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MACHINE_VALUE)
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_TOOLTIP);
+ }
+};
+
+const inout_pin_attachInterrupt = {
+ init: function () {
+ this.setColour(20);
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ATTACHINTERRUPT_PIN)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RISING, "machine.Pin.IRQ_RISING"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FALLING, "machine.Pin.IRQ_FALLING"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CHANGE, "(machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING)"]
+ ]), "mode");
+ this.appendValueInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_PIN_ATTACHINTERRUPT_TOOLTIP);
+ }
+};
+
+const inout_digital_init = {
+ init: function () {
+ this.setColour(20);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('pin#'), 'PIN_OBJ');
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_AS)
+ // .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE+Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Digital_PINMODEOUT, "machine.Pin.OUT"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Digital_PINMODEIN, "machine.Pin.IN"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PINMODEPULLUP, "machine.Pin.IN, machine.Pin.PULL_UP"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PINMODEPULLDOWN, "machine.Pin.IN, machine.Pin.PULL_DOWN"]
+ ]), "MODE")
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_DIGITAL_INIT_TOOLTIP);
+ },
+ getVars: function () {
+ return [this.getFieldValue('PIN_OBJ') == 'pin#' ? null : this.getFieldValue('PIN_OBJ')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
+ this.setTitleValue(newName, 'PIN_OBJ');
+ }
+ }
+};
+
+const inout_analog_write_init = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ // this.appendValueInput("PIN", Number)
+ // .appendField(Blockly.Msg.MIXLY_SETUP)
+ // .appendField("PWM"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)
+ // .appendField('pwm')
+ // .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('dac#'), 'PIN_OBJ')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_AS)
+ this.appendDummyInput("")
+ .appendField("DAC" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Analog_PINMODEOUT)
+ // .appendField('dac')
+ // .appendField(new Blockly.FieldDropdown(profile.default.dac_pin),"PIN")
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_INIT_TOOLTIP);
+ },
+ getVars: function () {
+ return [this.getFieldValue('PIN_OBJ') == 'dac#' ? null : this.getFieldValue('PIN_OBJ')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
+ this.setTitleValue(newName, 'PIN_OBJ');
+ }
+ }
+};
+
+const inout_pin_pressed_init = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ // this.appendValueInput("PIN", Number)
+ // .appendField(Blockly.Msg.MIXLY_SETUP)
+ // .appendField("PWM"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)
+ // .appendField('pwm')
+ // .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('tc#'), 'PIN_OBJ')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_AS)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_TOUCH_SENSOR)
+ // .appendField('tc')
+ // .appendField(new Blockly.FieldDropdown(profile.default.tc_pin),"PIN")
+ this.appendValueInput("PIN", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PIN)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_INIT_TOOLTIP);
+ },
+ getVars: function () {
+ return [this.getFieldValue('PIN_OBJ') == 'tc#' ? null : this.getFieldValue('PIN_OBJ')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
+ this.setTitleValue(newName, 'PIN_OBJ');
+ }
+ }
+};
+
+const inout_analog_write_set_freq = {
+ init: function () {
+ this.setColour(BASE_HUE);
+ this.appendValueInput("PIN", Number)
+ .appendField("PWM" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Analog_PINMODEOUT)
+ .setCheck(Number);
+ this.appendValueInput("NUM", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_FREQUENCY + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STAT)
+ .setCheck(Number);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INOUT_PWM_ANALOG_WRITE_SET_FREQ_TOOLTIP);
+ }
+};
+
+const inout_pinMode = inout_digital_init;
+const pin_pressed_init = inout_pin_pressed_init;
+const pin_pressed = inout_pin_pressed;
+const controls_pin_attachInterrupt = inout_pin_attachInterrupt;
+
+
+/***/ }),
+
+/***/ "./blocks/me_go.js":
+/*!*************************!*\
+ !*** ./blocks/me_go.js ***!
+ \*************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ me_go_dc_motor: () => (/* binding */ me_go_dc_motor),
+/* harmony export */ me_go_get_led_bright: () => (/* binding */ me_go_get_led_bright),
+/* harmony export */ me_go_get_led_state: () => (/* binding */ me_go_get_led_state),
+/* harmony export */ me_go_hall_attachInterrupt: () => (/* binding */ me_go_hall_attachInterrupt),
+/* harmony export */ me_go_hall_data: () => (/* binding */ me_go_hall_data),
+/* harmony export */ me_go_hall_initialize: () => (/* binding */ me_go_hall_initialize),
+/* harmony export */ me_go_led_bright: () => (/* binding */ me_go_led_bright),
+/* harmony export */ me_go_led_brightness: () => (/* binding */ me_go_led_brightness),
+/* harmony export */ me_go_light_number: () => (/* binding */ me_go_light_number),
+/* harmony export */ me_go_pin_light: () => (/* binding */ me_go_pin_light),
+/* harmony export */ me_go_pin_near: () => (/* binding */ me_go_pin_near),
+/* harmony export */ me_go_pin_near_line: () => (/* binding */ me_go_pin_near_line),
+/* harmony export */ me_go_pin_near_state_change: () => (/* binding */ me_go_pin_near_state_change),
+/* harmony export */ me_go_stepper_keep: () => (/* binding */ me_go_stepper_keep),
+/* harmony export */ me_go_stepper_stop: () => (/* binding */ me_go_stepper_stop),
+/* harmony export */ sensor_mixgome_eulerangles: () => (/* binding */ sensor_mixgome_eulerangles)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const MEGO_HUE = 100;
+
+// LED
+const me_go_light_number = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_FRONT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "GLED[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_FRONT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "GLED[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_BACK + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "GLED[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_BACK + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_GREEN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "GLED[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_FRONT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "RLED[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_FRONT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "RLED[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_BACK + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "RLED[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_BACK + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.COLOUR_RGB_RED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EXTERN_LED, "RLED[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_LIGHT_HEADLIGHT, "WLED"]
+ ]), 'op')
+ this.setOutput(true);
+ }
+};
+
+const me_go_led_bright = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING);
+ this.appendValueInput('led')
+ .appendField('ME GO')
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_SETONOFF);
+ }
+};
+
+const me_go_get_led_bright = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
+ this.appendValueInput('led')
+ .appendField('ME GO')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_GETONOFF);
+ }
+};
+
+const me_go_get_led_state = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
+ this.appendValueInput('led')
+ .appendField('ME GO')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PULSEIN_STAT)
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_LED_GETONOFF);
+ }
+};
+
+const me_go_led_brightness = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING);
+ this.appendValueInput('led')
+ .appendField('ME GO')
+ this.appendValueInput('bright')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS)
+ this.appendDummyInput("")
+ .appendField("%")
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETTING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BUILDIN_LED + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BRIGHTNESS + '(0-10)');
+ }
+};
+
+const me_go_stepper_keep = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField("ME GO")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_forward, "F"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_backward, "B"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_left, "L"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_right, "R"]
+ ]), "VAR");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STEPPER_SET_SPEED);
+ this.appendDummyInput("")
+ .appendField("%")
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const me_go_stepper_stop = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField("ME GO")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_P, "P"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_N, "N"]
+ ]), "VAR");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const me_go_dc_motor = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField("ME GO")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_DC)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLYCAR_WHEEL_LEFT, "0"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLYCAR_WHEEL_RIGHT, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_MOTOR_EXTERN, "2"]
+ ]), "wheel");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_Direction)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ROTATION_FORWARD, "CW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ROTATION_BACKWARD, "CCW"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_P, "P"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MOTOR_N, "N"]
+ ]), "direction");
+ this.appendValueInput('speed')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STEPPER_SET_SPEED);
+ this.appendDummyInput("")
+ .appendField("%")
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+}
+
+const me_go_hall_attachInterrupt = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_INTERRUPT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_HALL_SENSOR)
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "A"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "B"]]), "mode");
+ this.appendValueInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+const me_go_hall_initialize = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_HALL_SENSOR)
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "A"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "B"]]), "mode");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP)
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['turns', "turns"], ['distance', "distance"], ['turns,distance', 'all']]), "args");
+ this.appendValueInput('num')
+ .setCheck(Number)
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+};
+
+const me_go_hall_data = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_HALL_SENSOR)
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "A"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "B"]]), "mode");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([['turns', "turns"], ['distance', "distance"], ['speed', 'speed']]), "args");
+ this.setOutput(true);
+ this.setInputsInline(true);
+ }
+};
+
+const me_go_pin_near_line = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_MID, "[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_MID, "[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL, ""]
+ ]), "key")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LINE_SENSOR_VAL);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(function () {
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR;
+ return mode0 + mode1
+ });
+ }
+};
+
+const me_go_pin_near = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_FRONT, "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_FRONT, "[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_BACK, "[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_BACK, "[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL, ""]
+ ]), "key")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_PROXIMITY_SENSOR);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(function () {
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_NEAR;
+ return mode0 + mode1
+ });
+ }
+};
+
+const me_go_pin_near_state_change = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_CAR_SENSOR_ONBOARD_CHANGE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ME_GO_CAR_SENSOR_ONBOARD_AUTO_CHANGE, "AS"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_CAR_USE_LINE_ONLY, "LP"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_CAR_USE_PROXIMITY_ONLY, "OA"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_ONLY, "LS"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_SENSOR_MODE_OFF, "CL"]
+ ]), "key");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ }
+};
+
+const sensor_mixgome_eulerangles = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_GESTURE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_PITCH, '[0]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_ROLL, '[1]'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_PITCH + ', ' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ME_GO_ROLL, '']
+ ]), 'angle');
+ // this.appendDummyInput("")
+ // .appendField(Blockly.Msg.BOARD_DIRECTION)
+ // .appendField(new Blockly.FieldDropdown([
+ // [Blockly.Msg.OLED_VER,'True'],
+ // [Blockly.Msg.OLED_HOR,'False'],
+ // ]),'dir');
+ this.appendDummyInput("")
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const me_go_pin_light = {
+ init: function () {
+ this.setColour(MEGO_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, "[0]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_LEFT_MID, "[1]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXGO_RIGHT_MID, "[2]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, "[3]"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ALL, ""]
+ ]), "key")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_SENSOR);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(function () {
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_SENSOR;
+ return mode0 + mode1
+ });
+ }
+};
+
+/***/ }),
+
+/***/ "./blocks/mini_g2.js":
+/*!***************************!*\
+ !*** ./blocks/mini_g2.js ***!
+ \***************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ mini_g2_aht11: () => (/* binding */ mini_g2_aht11),
+/* harmony export */ mini_g2_hp203: () => (/* binding */ mini_g2_hp203),
+/* harmony export */ mini_g2_rfid_readcontent: () => (/* binding */ mini_g2_rfid_readcontent),
+/* harmony export */ mini_g2_rfid_readid: () => (/* binding */ mini_g2_rfid_readid),
+/* harmony export */ mini_g2_rfid_status: () => (/* binding */ mini_g2_rfid_status),
+/* harmony export */ mini_g2_rfid_write: () => (/* binding */ mini_g2_rfid_write),
+/* harmony export */ mini_g2_rfid_write_outcome: () => (/* binding */ mini_g2_rfid_write_outcome),
+/* harmony export */ mini_g2_varistor: () => (/* binding */ mini_g2_varistor)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+const MEG1_HUE = 40;
+
+const mini_g2_aht11 = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me") { var name = 'ME G1' }
+ this.setColour(MEG1_HUE);
+ this.appendDummyInput("")
+ .appendField(name)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEM_HUM + " AHT21")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE, "temperature"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETHUMIDITY, "humidity"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('key');
+ var TOOLTIPS = {
+ "temperature": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,
+ "relative_humidity": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP
+ };
+ return TOOLTIPS[mode]
+ });
+ }
+};
+
+const mini_g2_hp203 = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me") { var name = 'ME G1' }
+ this.setColour(MEG1_HUE);
+ this.appendDummyInput("")
+ .appendField(name)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_Altitude + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MSG.catSensor + " HP203X")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETPRESSURE, "pressure()"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GETTEMPERATUE, "temperature()"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_ALTITUDE, "altitude()"],
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const mini_g2_varistor = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me") { var name = 'ME G1' }
+ this.setColour(MEG1_HUE);
+ this.appendDummyInput()
+ .appendField(name)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXGO_NOVA_POTENTIAL_NUM);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const mini_g2_rfid_readid = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me") { var name = 'ME G1' }
+ this.setColour(MEG1_HUE);
+ this.appendDummyInput()
+ .appendField(name)
+ .appendField("RFID" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_READ_CARD);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_READ_CARD_UID);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const mini_g2_rfid_readcontent = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me") { var name = 'ME G1' }
+ this.setColour(MEG1_HUE);
+ this.appendDummyInput()
+ .appendField(name)
+ .appendField("RFID" + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_READ_CARD);
+ this.appendValueInput('SECTOR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_INDEX)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+const mini_g2_rfid_write = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me") { var name = 'ME G1' }
+ this.setColour(MEG1_HUE);
+ this.appendDummyInput()
+ .appendField(name)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_RFID_WRITE);
+ this.appendValueInput('SECTOR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_INDEX)
+ this.appendValueInput('CONTENT')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_WRITE_NUM)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ }
+};
+
+const mini_g2_rfid_write_outcome = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me") { var name = 'ME G1' }
+ this.setColour(MEG1_HUE);
+ this.appendDummyInput()
+ .appendField(name)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_RFID_WRITE);
+ this.appendValueInput('SECTOR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_INDEX)
+ this.appendValueInput('CONTENT')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMMUNICATION_WRITE_NUM)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.RETURN_SUCCESS_OR_NOT)
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const mini_g2_rfid_status = {
+ init: function () {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ if (version == "mixgo_me") { var name = 'ME G1' }
+ this.setColour(MEG1_HUE);
+ this.appendDummyInput()
+ .appendField(name)
+ .appendField("RFID");
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_SCAN_OK, "True"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_SCAN_NOTAGERR, "None"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RFID_SCAN_ERROR, "False"]
+ ]), "key");
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ }
+};
+
+/***/ }),
+
+/***/ "./blocks/pins.js":
+/*!************************!*\
+ !*** ./blocks/pins.js ***!
+ \************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ analog_input: () => (/* binding */ analog_input),
+/* harmony export */ analog_output: () => (/* binding */ analog_output),
+/* harmony export */ espnow_channel: () => (/* binding */ espnow_channel),
+/* harmony export */ haskylens_model: () => (/* binding */ haskylens_model),
+/* harmony export */ i2c_A_pin: () => (/* binding */ i2c_A_pin),
+/* harmony export */ i2c_B_pin: () => (/* binding */ i2c_B_pin),
+/* harmony export */ pins_analog: () => (/* binding */ pins_analog),
+/* harmony export */ pins_analog_pin: () => (/* binding */ pins_analog_pin),
+/* harmony export */ pins_axis: () => (/* binding */ pins_axis),
+/* harmony export */ pins_brightness: () => (/* binding */ pins_brightness),
+/* harmony export */ pins_builtinimg: () => (/* binding */ pins_builtinimg),
+/* harmony export */ pins_builtinimg_extern: () => (/* binding */ pins_builtinimg_extern),
+/* harmony export */ pins_button: () => (/* binding */ pins_button),
+/* harmony export */ pins_buttonB: () => (/* binding */ pins_buttonB),
+/* harmony export */ pins_dac: () => (/* binding */ pins_dac),
+/* harmony export */ pins_dac_pin: () => (/* binding */ pins_dac_pin),
+/* harmony export */ pins_digital: () => (/* binding */ pins_digital),
+/* harmony export */ pins_digital_dot: () => (/* binding */ pins_digital_dot),
+/* harmony export */ pins_digital_pin: () => (/* binding */ pins_digital_pin),
+/* harmony export */ pins_exlcdh: () => (/* binding */ pins_exlcdh),
+/* harmony export */ pins_exlcdv: () => (/* binding */ pins_exlcdv),
+/* harmony export */ pins_imglist: () => (/* binding */ pins_imglist),
+/* harmony export */ pins_input_pin: () => (/* binding */ pins_input_pin),
+/* harmony export */ pins_one_more: () => (/* binding */ pins_one_more),
+/* harmony export */ pins_output_pin: () => (/* binding */ pins_output_pin),
+/* harmony export */ pins_playlist: () => (/* binding */ pins_playlist),
+/* harmony export */ pins_playlist_extern: () => (/* binding */ pins_playlist_extern),
+/* harmony export */ pins_pwm: () => (/* binding */ pins_pwm),
+/* harmony export */ pins_pwm_pin: () => (/* binding */ pins_pwm_pin),
+/* harmony export */ pins_radio_datarate: () => (/* binding */ pins_radio_datarate),
+/* harmony export */ pins_radio_power: () => (/* binding */ pins_radio_power),
+/* harmony export */ pins_serial: () => (/* binding */ pins_serial),
+/* harmony export */ pins_tone_notes: () => (/* binding */ pins_tone_notes),
+/* harmony export */ pins_touch: () => (/* binding */ pins_touch),
+/* harmony export */ pins_touch_pin: () => (/* binding */ pins_touch_pin),
+/* harmony export */ pins_tts_bgmusic: () => (/* binding */ pins_tts_bgmusic),
+/* harmony export */ pins_tts_builtin_music: () => (/* binding */ pins_tts_builtin_music),
+/* harmony export */ pins_tts_voice: () => (/* binding */ pins_tts_voice),
+/* harmony export */ pwm_input: () => (/* binding */ pwm_input),
+/* harmony export */ pwm_output: () => (/* binding */ pwm_output),
+/* harmony export */ spi_A_pin: () => (/* binding */ spi_A_pin),
+/* harmony export */ spi_B_pin: () => (/* binding */ spi_B_pin),
+/* harmony export */ spi_C_pin: () => (/* binding */ spi_C_pin),
+/* harmony export */ spi_D_pin: () => (/* binding */ spi_D_pin)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+const PINS_HUE = 230;
+
+const pins_digital = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.digital), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_digital_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.digital_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_input_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.input_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_output_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.output_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const espnow_channel = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.espnow_channel), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const haskylens_model = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.haskylens_model), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pwm_input = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.pwm_input), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const analog_input = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.analog_input), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pwm_output = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.pwm_output), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const analog_output = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.analog_output), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const i2c_A_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.i2c_A_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const i2c_B_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.i2c_B_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+
+const spi_A_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.spi_A_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const spi_B_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.spi_B_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const spi_C_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.spi_C_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const spi_D_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.spi_D_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_analog = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.analog), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_analog_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.analog_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_dac = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.dac), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_dac_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.dac_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_button = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.button), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_buttonB = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.buttonB), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_pwm = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.pwm), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_pwm_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.pwm_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_touch_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.touch_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_touch = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.touch), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_serial = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.serial_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_builtinimg = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.builtinimg), 'PIN');
+ this.setOutput(true, "esp32_image");
+ }
+};
+
+const pins_builtinimg_extern = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.builtinimg_extern), 'PIN');
+ this.setOutput(true, "esp32_image");
+ }
+};
+
+const pins_imglist = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.imglist), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_playlist = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.playlist), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_playlist_extern = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.playlist_extern), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_exlcdh = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.exlcdh), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_exlcdv = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.exlcdv), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_axis = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.axis), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_brightness = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.brightness), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_tts_voice = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.tts_voice), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_tts_builtin_music = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.tts_builtin_music), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_tts_bgmusic = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.tts_bgmusic), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_tone_notes = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.tone_notes), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_radio_power = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.radio_power), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_radio_datarate = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.radio_datarate), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+const pins_one_more = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.one_more), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+const pins_digital_dot = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default.digital_dot), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+/***/ }),
+
+/***/ "./export.js":
+/*!*******************!*\
+ !*** ./export.js ***!
+ \*******************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ MicropythonESP32C2InoutBlocks: () => (/* reexport module object */ _blocks_inout__WEBPACK_IMPORTED_MODULE_1__),
+/* harmony export */ MicropythonESP32C2InoutGenerators: () => (/* reexport module object */ _generators_inout__WEBPACK_IMPORTED_MODULE_5__),
+/* harmony export */ MicropythonESP32C2MEGOBlocks: () => (/* reexport module object */ _blocks_me_go__WEBPACK_IMPORTED_MODULE_3__),
+/* harmony export */ MicropythonESP32C2MEGOGenerators: () => (/* reexport module object */ _generators_me_go__WEBPACK_IMPORTED_MODULE_7__),
+/* harmony export */ MicropythonESP32C2MiniG2Blocks: () => (/* reexport module object */ _blocks_mini_g2__WEBPACK_IMPORTED_MODULE_2__),
+/* harmony export */ MicropythonESP32C2MiniG2Generators: () => (/* reexport module object */ _generators_mini_g2__WEBPACK_IMPORTED_MODULE_6__),
+/* harmony export */ MicropythonESP32C2Pins: () => (/* reexport safe */ _blocks_esp32_profile__WEBPACK_IMPORTED_MODULE_0__["default"]),
+/* harmony export */ MicropythonESP32C2PinsBlocks: () => (/* reexport module object */ _blocks_pins__WEBPACK_IMPORTED_MODULE_4__),
+/* harmony export */ MicropythonESP32C2PinsGenerators: () => (/* reexport module object */ _generators_pins__WEBPACK_IMPORTED_MODULE_8__)
+/* harmony export */ });
+/* harmony import */ var _blocks_esp32_profile__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./blocks/esp32_profile */ "./blocks/esp32_profile.js");
+/* harmony import */ var _blocks_inout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./blocks/inout */ "./blocks/inout.js");
+/* harmony import */ var _blocks_mini_g2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blocks/mini_g2 */ "./blocks/mini_g2.js");
+/* harmony import */ var _blocks_me_go__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./blocks/me_go */ "./blocks/me_go.js");
+/* harmony import */ var _blocks_pins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./blocks/pins */ "./blocks/pins.js");
+/* harmony import */ var _generators_inout__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./generators/inout */ "./generators/inout.js");
+/* harmony import */ var _generators_mini_g2__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./generators/mini_g2 */ "./generators/mini_g2.js");
+/* harmony import */ var _generators_me_go__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./generators/me_go */ "./generators/me_go.js");
+/* harmony import */ var _generators_pins__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./generators/pins */ "./generators/pins.js");
+
+
+
+
+
+
+
+
+
+
+
+
+/***/ }),
+
+/***/ "./generators/inout.js":
+/*!*****************************!*\
+ !*** ./generators/inout.js ***!
+ \*****************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ inout_analog_atten: () => (/* binding */ inout_analog_atten),
+/* harmony export */ inout_analog_write: () => (/* binding */ inout_analog_write),
+/* harmony export */ inout_analog_write_init: () => (/* binding */ inout_analog_write_init),
+/* harmony export */ inout_analog_write_set: () => (/* binding */ inout_analog_write_set),
+/* harmony export */ inout_digital_init: () => (/* binding */ inout_digital_init),
+/* harmony export */ inout_digital_read: () => (/* binding */ inout_digital_read),
+/* harmony export */ inout_digital_write: () => (/* binding */ inout_digital_write),
+/* harmony export */ inout_highlow: () => (/* binding */ inout_highlow),
+/* harmony export */ inout_pin_attachInterrupt: () => (/* binding */ inout_pin_attachInterrupt),
+/* harmony export */ inout_pin_pressed: () => (/* binding */ inout_pin_pressed),
+/* harmony export */ inout_pin_pressed_init: () => (/* binding */ inout_pin_pressed_init)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+// ok
+const inout_highlow = function (_, generator) {
+ // Boolean values HIGH and LOW.
+ var code = (this.getFieldValue('BOOL') == 'HIGH') ? '1' : '0';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+// ok
+const inout_digital_write = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
+ var code = "";
+ code += dropdown_pin + '.value(' + dropdown_stat + ')\n'
+ return code;
+}
+
+// ok
+const inout_digital_read = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var code = "";
+ code = dropdown_pin + '.value()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+//ok
+const inout_analog_write = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ //var dropdown_stat = this.getFieldValue('STAT');
+ var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
+ //generator.setups_['setup_output'+dropdown_pin] = 'pinMode('+dropdown_pin+', OUTPUT);';
+ var code = dropdown_pin + '.write(' + value_num + ')\n';
+ return code;
+}
+
+//ok
+const inout_analog_write_set = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
+ var key = this.getFieldValue('key');
+ var code = dropdown_pin + '.set_analog_' + key + '(' + value_num + ')\n';
+ //var code = 'pin' + dropdown_pin + '.set_analog_period(' + value_num + ')\n';
+ return code;
+}
+
+//ok
+const inout_pin_pressed = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var pin = generator.valueToCode(this, 'pin', generator.ORDER_ATOMIC);
+ var code = pin + '.read()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const inout_pin_attachInterrupt = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var dropdown_mode = this.getFieldValue('mode');
+ var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
+ var code = 'machine.Pin(' + dropdown_pin + ').irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\n'
+ //var funcName = 'attachInterrupt_func_' + dropdown_pin;
+ //var branch = generator.statementToCode(this, 'DO') || generator.PASS;
+ //var code2 = 'def' + ' ' + funcName + '(p):\n' + branch + '\n';
+ //generator.setups_[funcName] = code2;
+ return code;
+}
+
+const inout_digital_init = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var pin_obj = this.getFieldValue('PIN_OBJ') || 'pin#';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var dropdown_mode = this.getFieldValue('MODE');
+ var varName = (pin_obj == 'pin#') ? 'pin' + dropdown_pin : generator.variableDB_.getName(pin_obj, blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ var code = varName + ' = machine.Pin(' + dropdown_pin + ', ' + dropdown_mode + ')\n';
+ return code;
+}
+
+//ok
+const inout_analog_write_init = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var pin_obj = this.getFieldValue('PIN_OBJ') || 'dac#';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var varName = (pin_obj == 'dac#') ? 'dac' + dropdown_pin : generator.variableDB_.getName(pin_obj, blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ var code = varName + ' = machine.DAC(machine.Pin(' + dropdown_pin + '))\n';
+ return code;
+}
+
+const inout_analog_atten = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ //var dropdown_stat = this.getFieldValue('STAT');
+ var value_atten = this.getFieldValue('atten')
+ var code = dropdown_pin + '.atten(' + value_atten + ')\n';
+ return code;
+}
+
+//ok
+const inout_pin_pressed_init = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var pin_obj = this.getFieldValue('PIN_OBJ') || 'tc#';
+ var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
+ var varName = (pin_obj == 'tc#') ? 'tc' + dropdown_pin : generator.variableDB_.getName(pin_obj, blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ var code = varName + ' = machine.TouchPad(machine.Pin(' + dropdown_pin + '))\n';
+ return code;
+}
+
+/***/ }),
+
+/***/ "./generators/me_go.js":
+/*!*****************************!*\
+ !*** ./generators/me_go.js ***!
+ \*****************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ me_go_dc_motor: () => (/* binding */ me_go_dc_motor),
+/* harmony export */ me_go_get_led_bright: () => (/* binding */ me_go_get_led_bright),
+/* harmony export */ me_go_get_led_state: () => (/* binding */ me_go_get_led_state),
+/* harmony export */ me_go_hall_attachInterrupt: () => (/* binding */ me_go_hall_attachInterrupt),
+/* harmony export */ me_go_hall_data: () => (/* binding */ me_go_hall_data),
+/* harmony export */ me_go_hall_initialize: () => (/* binding */ me_go_hall_initialize),
+/* harmony export */ me_go_led_bright: () => (/* binding */ me_go_led_bright),
+/* harmony export */ me_go_led_brightness: () => (/* binding */ me_go_led_brightness),
+/* harmony export */ me_go_light_number: () => (/* binding */ me_go_light_number),
+/* harmony export */ me_go_pin_light: () => (/* binding */ me_go_pin_light),
+/* harmony export */ me_go_pin_near: () => (/* binding */ me_go_pin_near),
+/* harmony export */ me_go_pin_near_line: () => (/* binding */ me_go_pin_near_line),
+/* harmony export */ me_go_pin_near_state_change: () => (/* binding */ me_go_pin_near_state_change),
+/* harmony export */ me_go_stepper_keep: () => (/* binding */ me_go_stepper_keep),
+/* harmony export */ me_go_stepper_stop: () => (/* binding */ me_go_stepper_stop),
+/* harmony export */ sensor_mixgome_eulerangles: () => (/* binding */ sensor_mixgome_eulerangles)
+/* harmony export */ });
+const me_go_light_number = function (_, generator) {
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ var code = 'car.' + this.getFieldValue('op');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const me_go_led_bright = function (_, generator) {
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var code = "car.setonoff(" + op + "," + bright + ")\n";
+ return code;
+}
+
+const me_go_get_led_bright = function (_, generator) {
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ var code = "car.getrightness(" + op + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const me_go_get_led_state = function (_, generator) {
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ var code = "car.getonoff(" + op + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const me_go_led_brightness = function (_, generator) {
+ var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
+ var code = "car.setbrightness(" + op + "," + flag + ")\n";
+ return code;
+}
+
+const me_go_stepper_keep = function (_, generator) {
+ var v = this.getFieldValue('VAR');
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);
+ var code = 'car.move("' + v + '",' + speed + ")\n";
+ return code;
+}
+
+const me_go_stepper_stop = function (_, generator) {
+ var v = this.getFieldValue('VAR');
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ var code = 'car.move("' + v + '")\n';
+ return code;
+}
+
+const me_go_dc_motor = function (_, generator) {
+ var wheel = this.getFieldValue('wheel');
+ generator.definitions_['import_me_go_car'] = 'from me_go import car';
+ var v = this.getFieldValue('direction');
+ if (wheel == 0) {
+ if (v == 'CW') { v = 'CCW' }
+ else if (v == 'CCW') { v = 'CW' }
+ }
+ var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
+ var code = "car.motor(car.MOTO[" + wheel + '],"' + v + '",' + speed + ")\n";
+ return code;
+}
+
+const me_go_hall_attachInterrupt = function (_, generator) {
+ var dropdown_mode = this.getFieldValue('mode');
+ generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;
+ var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
+ var code = 'hall_' + dropdown_mode + '.irq_cb(' + atta + ')\n'
+ return code;
+}
+
+const me_go_hall_initialize = function (_, generator) {
+ var dropdown_mode = this.getFieldValue('mode');
+ var args = this.getFieldValue('args');
+ generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;
+ var num = generator.valueToCode(this, 'num', generator.ORDER_ATOMIC);
+ if (args == 'all') {
+ var code = 'hall_' + dropdown_mode + '.initial(' + 'turns' + '=' + num + ',distance=' + num + ')\n'
+ return code;
+ }
+ var code = 'hall_' + dropdown_mode + '.initial(' + args + '=' + num + ')\n'
+ return code;
+}
+
+const me_go_hall_data = function (_, generator) {
+ var dropdown_mode = this.getFieldValue('mode');
+ var args = this.getFieldValue('args');
+ generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;
+ var code = 'hall_' + dropdown_mode + '.' + args + '';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const me_go_pin_near_line = function (_, generator) {
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_me_go_hall'] = 'from me_go import car';
+ var code = 'car.patrol()' + key + '';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const me_go_pin_near = function (_, generator) {
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_me_go_hall'] = 'from me_go import car';
+ var code = 'car.obstacle()' + key + '';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const me_go_pin_near_state_change = function (_, generator) {
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_me_go_hall'] = 'from me_go import car';
+ var code = 'car.ir_mode(car.' + key + ')\n';
+ return code;
+}
+
+const sensor_mixgome_eulerangles = function (_, generator) {
+ generator.definitions_['import_mixgo_me_onboard_mxc6655xa'] = "from mixgo_me import onboard_mxc6655xa";
+ var angle = this.getFieldValue('angle');
+ var code = 'onboard_mxc6655xa.eulerangles(upright=True)' + angle;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const me_go_pin_light = function (_, generator) {
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_me_go_hall'] = 'from me_go import car';
+ var code = 'car.light()' + key + '';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "./generators/mini_g2.js":
+/*!*******************************!*\
+ !*** ./generators/mini_g2.js ***!
+ \*******************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ mini_g2_aht11: () => (/* binding */ mini_g2_aht11),
+/* harmony export */ mini_g2_hp203: () => (/* binding */ mini_g2_hp203),
+/* harmony export */ mini_g2_rfid_readcontent: () => (/* binding */ mini_g2_rfid_readcontent),
+/* harmony export */ mini_g2_rfid_readid: () => (/* binding */ mini_g2_rfid_readid),
+/* harmony export */ mini_g2_rfid_status: () => (/* binding */ mini_g2_rfid_status),
+/* harmony export */ mini_g2_rfid_write: () => (/* binding */ mini_g2_rfid_write),
+/* harmony export */ mini_g2_rfid_write_outcome: () => (/* binding */ mini_g2_rfid_write_outcome),
+/* harmony export */ mini_g2_varistor: () => (/* binding */ mini_g2_varistor)
+/* harmony export */ });
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const mini_g2_aht11 = function (_, generator) {
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_mini_g2'] = 'import mini_g2';
+ var code = 'mini_g2.ext_ahtx0.' + key + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const mini_g2_hp203 = function (_, generator) {
+ var key = this.getFieldValue('key');
+ generator.definitions_['import_mini_g2'] = 'import mini_g2';
+ var code = 'mini_g2.ext_hp203x.' + key;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const mini_g2_varistor = function (_, generator) {
+ generator.definitions_['import_mini_g2'] = 'import mini_g2';
+ var code = 'mini_g2.varistor()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const mini_g2_rfid_readid = function (_, generator) {
+ generator.definitions_['import_mini_g2'] = 'import mini_g2';
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ if (version == "mixgo_mini") {
+ generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';
+ var code = 'ext_rfid.read_card(0, x="id")';
+ } else {
+ generator.definitions_['import_mini_g2'] = 'import mini_g2';
+ var code = 'mini_g2.ext_rc522.read_card(0, x="id")';
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const mini_g2_rfid_readcontent = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
+ if (version == "mixgo_mini") {
+ generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';
+ var code = 'ext_rfid.read_card(' + sector + ')';
+ } else {
+ generator.definitions_['import_mini_g2'] = 'import mini_g2';
+ var code = 'mini_g2.ext_rc522.read_card(' + sector + ')';
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const mini_g2_rfid_write = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
+ var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
+ if (version == "mixgo_mini") {
+ generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';
+ var code = 'ext_rfid.write_card(' + cnt + ',' + sector + ')\n';
+ } else {
+ generator.definitions_['import_mini_g2'] = 'import mini_g2';
+ var code = 'mini_g2.ext_rc522.write_card(' + cnt + ',' + sector + ')\n';
+ }
+ return code;
+}
+
+const mini_g2_rfid_write_outcome = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
+ var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
+ if (version == "mixgo_mini") {
+ generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';
+ var code = 'ext_rfid.write_card(' + cnt + ',' + sector + ')';
+ } else {
+ generator.definitions_['import_mini_g2'] = 'import mini_g2';
+ var code = 'mini_g2.ext_rc522.write_card(' + cnt + ',' + sector + ')';
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const mini_g2_rfid_status = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_0__.Boards.getSelectedBoardKey().split(':')[2];
+ var key = this.getFieldValue('key');
+ if (version == "mixgo_mini") {
+ generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';
+ var code = 'ext_rfid.scan_card()==' + key;
+ } else {
+ generator.definitions_['import_mini_g2'] = 'import mini_g2';
+ var code = 'mini_g2.ext_rc522.scan_card()==' + key;
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "./generators/pins.js":
+/*!****************************!*\
+ !*** ./generators/pins.js ***!
+ \****************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ analog_input: () => (/* binding */ analog_input),
+/* harmony export */ analog_output: () => (/* binding */ analog_output),
+/* harmony export */ espnow_channel: () => (/* binding */ espnow_channel),
+/* harmony export */ haskylens_model: () => (/* binding */ haskylens_model),
+/* harmony export */ i2c_A_pin: () => (/* binding */ i2c_A_pin),
+/* harmony export */ i2c_B_pin: () => (/* binding */ i2c_B_pin),
+/* harmony export */ pins_analog: () => (/* binding */ pins_analog),
+/* harmony export */ pins_analog_pin: () => (/* binding */ pins_analog_pin),
+/* harmony export */ pins_axis: () => (/* binding */ pins_axis),
+/* harmony export */ pins_brightness: () => (/* binding */ pins_brightness),
+/* harmony export */ pins_builtinimg: () => (/* binding */ pins_builtinimg),
+/* harmony export */ pins_builtinimg_extern: () => (/* binding */ pins_builtinimg_extern),
+/* harmony export */ pins_button: () => (/* binding */ pins_button),
+/* harmony export */ pins_buttonB: () => (/* binding */ pins_buttonB),
+/* harmony export */ pins_dac: () => (/* binding */ pins_dac),
+/* harmony export */ pins_dac_pin: () => (/* binding */ pins_dac_pin),
+/* harmony export */ pins_digital: () => (/* binding */ pins_digital),
+/* harmony export */ pins_digital_dot: () => (/* binding */ pins_digital_dot),
+/* harmony export */ pins_digital_pin: () => (/* binding */ pins_digital_pin),
+/* harmony export */ pins_exlcdh: () => (/* binding */ pins_exlcdh),
+/* harmony export */ pins_exlcdv: () => (/* binding */ pins_exlcdv),
+/* harmony export */ pins_imglist: () => (/* binding */ pins_imglist),
+/* harmony export */ pins_input_pin: () => (/* binding */ pins_input_pin),
+/* harmony export */ pins_interrupt: () => (/* binding */ pins_interrupt),
+/* harmony export */ pins_one_more: () => (/* binding */ pins_one_more),
+/* harmony export */ pins_output_pin: () => (/* binding */ pins_output_pin),
+/* harmony export */ pins_playlist: () => (/* binding */ pins_playlist),
+/* harmony export */ pins_playlist_extern: () => (/* binding */ pins_playlist_extern),
+/* harmony export */ pins_pwm: () => (/* binding */ pins_pwm),
+/* harmony export */ pins_pwm_input: () => (/* binding */ pins_pwm_input),
+/* harmony export */ pins_pwm_pin: () => (/* binding */ pins_pwm_pin),
+/* harmony export */ pins_radio_datarate: () => (/* binding */ pins_radio_datarate),
+/* harmony export */ pins_radio_power: () => (/* binding */ pins_radio_power),
+/* harmony export */ pins_serial: () => (/* binding */ pins_serial),
+/* harmony export */ pins_tone_notes: () => (/* binding */ pins_tone_notes),
+/* harmony export */ pins_touch: () => (/* binding */ pins_touch),
+/* harmony export */ pins_touch_pin: () => (/* binding */ pins_touch_pin),
+/* harmony export */ pins_tts_bgmusic: () => (/* binding */ pins_tts_bgmusic),
+/* harmony export */ pins_tts_builtin_music: () => (/* binding */ pins_tts_builtin_music),
+/* harmony export */ pins_tts_voice: () => (/* binding */ pins_tts_voice),
+/* harmony export */ pwm_output: () => (/* binding */ pwm_output),
+/* harmony export */ spi_A_pin: () => (/* binding */ spi_A_pin),
+/* harmony export */ spi_B_pin: () => (/* binding */ spi_B_pin),
+/* harmony export */ spi_C_pin: () => (/* binding */ spi_C_pin),
+/* harmony export */ spi_D_pin: () => (/* binding */ spi_D_pin)
+/* harmony export */ });
+const pins_digital = function (_, generator) {
+ var code = this.getFieldValue('PIN');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const pins_button = pins_digital;
+const pins_buttonB = pins_digital;
+const pins_digital_pin = pins_digital;
+const pins_input_pin = pins_digital;
+const pins_output_pin = pins_digital;
+const pins_pwm_input = pins_digital;
+const espnow_channel = pins_digital;
+const haskylens_model = pins_digital;
+const analog_input = pins_digital;
+const pwm_output = pins_digital;
+const analog_output = pins_digital;
+const i2c_A_pin = pins_digital;
+const i2c_B_pin = pins_digital;
+const spi_A_pin = pins_digital;
+const spi_B_pin = pins_digital;
+const spi_C_pin = pins_digital;
+const spi_D_pin = pins_digital;
+const pins_analog_pin = pins_digital;
+const pins_analog = pins_digital;
+const pins_pwm_pin = pins_digital;
+const pins_pwm = pins_digital;
+const pins_dac_pin = pins_digital;
+const pins_dac = pins_digital;
+const pins_touch_pin = pins_digital;
+const pins_touch = pins_digital;
+const pins_interrupt = pins_digital;
+const pins_serial = pins_digital;
+const pins_builtinimg = pins_digital;
+const pins_builtinimg_extern = pins_digital;
+const pins_imglist = pins_digital;
+const pins_playlist = pins_digital;
+const pins_playlist_extern = pins_digital;
+const pins_axis = pins_digital;
+const pins_exlcdh = pins_digital;
+const pins_exlcdv = pins_digital;
+const pins_brightness = pins_digital;
+const pins_tts_voice = pins_digital;
+const pins_tts_builtin_music = pins_digital;
+const pins_tts_bgmusic = pins_digital;
+const pins_tone_notes = pins_digital;
+const pins_radio_power = pins_digital;
+const pins_radio_datarate = pins_digital;
+const pins_one_more = pins_digital;
+const pins_digital_dot = pins_digital;
+
+/***/ }),
+
+/***/ "../python/blocks/control.js":
+/*!***********************************!*\
+ !*** ../python/blocks/control.js ***!
+ \***********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ base_setup: () => (/* binding */ base_setup),
+/* harmony export */ controls_delay: () => (/* binding */ controls_delay),
+/* harmony export */ controls_end_program: () => (/* binding */ controls_end_program),
+/* harmony export */ controls_except: () => (/* binding */ controls_except),
+/* harmony export */ controls_finally: () => (/* binding */ controls_finally),
+/* harmony export */ controls_flow_statements: () => (/* binding */ controls_flow_statements),
+/* harmony export */ controls_for: () => (/* binding */ controls_for),
+/* harmony export */ controls_forEach: () => (/* binding */ controls_forEach),
+/* harmony export */ controls_for_range: () => (/* binding */ controls_for_range),
+/* harmony export */ controls_if: () => (/* binding */ controls_if),
+/* harmony export */ controls_if_else: () => (/* binding */ controls_if_else),
+/* harmony export */ controls_if_elseif: () => (/* binding */ controls_if_elseif),
+/* harmony export */ controls_if_if: () => (/* binding */ controls_if_if),
+/* harmony export */ controls_lambda: () => (/* binding */ controls_lambda),
+/* harmony export */ controls_main: () => (/* binding */ controls_main),
+/* harmony export */ controls_pass: () => (/* binding */ controls_pass),
+/* harmony export */ controls_range: () => (/* binding */ controls_range),
+/* harmony export */ controls_repeat_ext: () => (/* binding */ controls_repeat_ext),
+/* harmony export */ controls_thread: () => (/* binding */ controls_thread),
+/* harmony export */ controls_try: () => (/* binding */ controls_try),
+/* harmony export */ controls_try_finally: () => (/* binding */ controls_try_finally),
+/* harmony export */ controls_whileUntil: () => (/* binding */ controls_whileUntil),
+/* harmony export */ datetime_fromtimestamp: () => (/* binding */ datetime_fromtimestamp),
+/* harmony export */ do_while: () => (/* binding */ do_while),
+/* harmony export */ garbage_collection: () => (/* binding */ garbage_collection),
+/* harmony export */ gene_unique_identifier: () => (/* binding */ gene_unique_identifier),
+/* harmony export */ get_mem_alloc: () => (/* binding */ get_mem_alloc),
+/* harmony export */ get_mem_free: () => (/* binding */ get_mem_free),
+/* harmony export */ get_unique_identifier: () => (/* binding */ get_unique_identifier)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const LOOPS_HUE = 120;
+
+const controls_main = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_NAME_MAIN);
+ this.appendStatementInput('DO')
+ .appendField('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_CONTROL_SETUP);
+ }
+};
+
+const base_setup = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP);
+ this.appendStatementInput('DO')
+ .appendField('');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_CONTROL_SETUP);
+ }
+};
+
+const controls_delay = {
+ init: function () {
+ var UNIT = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_mSecond, 'delay'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_uSecond, 'delayMicroseconds']
+ ];
+ this.setColour(LOOPS_HUE);
+ this.appendValueInput("DELAY_TIME", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DELAY)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(UNIT), 'UNIT')
+ .setCheck(Number);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_CONTROL_DELAY);
+ this.setHelpUrl("https://mixly.readthedocs.io/zh_CN/latest/arduino/03.Control.html#id9");
+ this.wiki = {
+ 'zh-hans': {
+ page: ['Arduino AVR', '控制', '延时']
+ }
+ };
+ }
+};
+
+const controls_end_program = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CONTROL_END_PROGRAM);
+ this.setPreviousStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_CONTROL_END_TOOLTIP);
+ }
+};
+
+const controls_if = {
+ /**
+ * Block for if/elseif/else condition.
+ * @this Blockly.Block
+ */
+ init: function () {
+ //this.setHelpUrl(Blockly.Msg.CONTROLS_IF_HELPURL);
+ this.setColour(LOOPS_HUE);
+ this.appendValueInput('IF0')
+ .setCheck([Boolean, Number])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_MSG_IF);
+ this.appendStatementInput('DO0')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_MSG_THEN);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setHelpUrl("https://mixly.readthedocs.io/zh_CN/latest/arduino/03.Control.html#if");
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['controls_if_elseif',
+ 'controls_if_else'], this));
+ // Assign 'this' to a variable for use in the tooltip closure below.
+ var thisBlock = this;
+ this.setTooltip(function () {
+ if (!thisBlock.elseifCount_ && !thisBlock.elseCount_) {
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_TOOLTIP_1;
+ } else if (!thisBlock.elseifCount_ && thisBlock.elseCount_) {
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_TOOLTIP_2;
+ } else if (thisBlock.elseifCount_ && !thisBlock.elseCount_) {
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_TOOLTIP_3;
+ } else if (thisBlock.elseifCount_ && thisBlock.elseCount_) {
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_TOOLTIP_4;
+ }
+ return '';
+ });
+ this.elseifCount_ = 0;
+ this.elseCount_ = 0;
+ },
+ /**
+ * Create XML to represent the number of else-if and else inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ if (!this.elseifCount_ && !this.elseCount_) {
+ return null;
+ }
+ var container = document.createElement('mutation');
+ if (this.elseifCount_) {
+ container.setAttribute('elseif', this.elseifCount_);
+ }
+ if (this.elseCount_) {
+ container.setAttribute('else', 1);
+ }
+ return container;
+ },
+ /**
+ * Parse XML to restore the else-if and else inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ var containerBlock = this;
+ var valueConnections = [];
+ var statementConnections = [];
+ // var elseStatementConnection = null;
+ if (this.elseCount_) {
+ // if (containerBlock.getInputTargetBlock('ELSE') && containerBlock.getInputTargetBlock('ELSE').previousConnection)
+ // elseStatementConnection = containerBlock.getInputTargetBlock('ELSE').previousConnection;
+ this.removeInput('ELSE');
+ }
+ for (var i = this.elseifCount_; i > 0; i--) {
+ if (containerBlock.getInputTargetBlock('IF' + i) && containerBlock.getInputTargetBlock('IF' + i).previousConnection)
+ valueConnections[i] = (containerBlock.getInputTargetBlock('IF' + i).previousConnection);
+ else
+ valueConnections[i] = null;
+ this.removeInput('IF' + i);
+ if (containerBlock.getInputTargetBlock('DO' + i) && containerBlock.getInputTargetBlock('DO' + i).previousConnection)
+ statementConnections[i] = (containerBlock.getInputTargetBlock('DO' + i).previousConnection);
+ else
+ statementConnections[i] = null;
+ this.removeInput('DO' + i);
+ }
+ this.elseifCount_ = parseInt(xmlElement.getAttribute('elseif'), 10);
+ this.elseCount_ = parseInt(xmlElement.getAttribute('else'), 10);
+ //this.compose(containerBlock);
+ for (var i = 1; i <= this.elseifCount_; i++) {
+ this.appendValueInput('IF' + i)
+ .setCheck([Boolean, Number])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_MSG_ELSEIF);
+ this.appendStatementInput('DO' + i)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_MSG_THEN);
+ }
+ if (this.elseCount_) {
+ this.appendStatementInput('ELSE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_MSG_ELSE);
+ }
+ for (var i = valueConnections.length - 2; i > 0; i--) {
+ if (valueConnections[i])
+ valueConnections[i].reconnect(this, 'IF' + i);
+ }
+ for (var i = statementConnections.length - 2; i > 0; i--) {
+ if (statementConnections[i])
+ statementConnections[i].reconnect(this, 'DO' + i);
+ }
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock = workspace.newBlock('controls_if_if');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 1; i <= this.elseifCount_; i++) {
+ var elseifBlock = workspace.newBlock('controls_if_elseif');
+ elseifBlock.initSvg();
+ connection.connect(elseifBlock.previousConnection);
+ connection = elseifBlock.nextConnection;
+ }
+ if (this.elseCount_) {
+ var elseBlock = workspace.newBlock('controls_if_else');
+ elseBlock.initSvg();
+ connection.connect(elseBlock.previousConnection);
+ }
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ // Disconnect the else input blocks and remove the inputs.
+ if (this.elseCount_) {
+ this.removeInput('ELSE');
+ }
+ this.elseCount_ = 0;
+ // Disconnect all the elseif input blocks and remove the inputs.
+ for (var i = this.elseifCount_; i > 0; i--) {
+ this.removeInput('IF' + i);
+ this.removeInput('DO' + i);
+ }
+ this.elseifCount_ = 0;
+ // Rebuild the block's optional inputs.
+ var clauseBlock = containerBlock.getInputTargetBlock('STACK');
+ var valueConnections = [null];
+ var statementConnections = [null];
+ var elseStatementConnection = null;
+ while (clauseBlock) {
+ switch (clauseBlock.type) {
+ case 'controls_if_elseif':
+ this.elseifCount_++;
+ valueConnections.push(clauseBlock.valueConnection_);
+ statementConnections.push(clauseBlock.statementConnection_);
+ break;
+ case 'controls_if_else':
+ this.elseCount_++;
+ elseStatementConnection = clauseBlock.statementConnection_;
+ break;
+ default:
+ throw Error('Unknown block type: ' + clauseBlock.type);
+ }
+ clauseBlock = clauseBlock.nextConnection &&
+ clauseBlock.nextConnection.targetBlock();
+ }
+
+ this.updateShape_();
+ // Reconnect any child blocks.
+ this.reconnectChildBlocks_(valueConnections, statementConnections, elseStatementConnection);
+
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ var clauseBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 1;
+ while (clauseBlock) {
+ switch (clauseBlock.type) {
+ case 'controls_if_elseif':
+ var inputIf = this.getInput('IF' + i);
+ var inputDo = this.getInput('DO' + i);
+ clauseBlock.valueConnection_ =
+ inputIf && inputIf.connection.targetConnection;
+ clauseBlock.statementConnection_ =
+ inputDo && inputDo.connection.targetConnection;
+ i++;
+ break;
+ case 'controls_if_else':
+ var inputDo = this.getInput('ELSE');
+ clauseBlock.statementConnection_ =
+ inputDo && inputDo.connection.targetConnection;
+ break;
+ default:
+ throw 'Unknown block type.';
+ }
+ clauseBlock = clauseBlock.nextConnection &&
+ clauseBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Reconstructs the block with all child blocks attached.
+ */
+ rebuildShape_: function () {
+ var valueConnections = [null];
+ var statementConnections = [null];
+ var elseStatementConnection = null;
+
+ if (this.getInput('ELSE')) {
+ elseStatementConnection = this.getInput('ELSE').connection.targetConnection;
+ }
+ var i = 1;
+ while (this.getInput('IF' + i)) {
+ var inputIf = this.getInput('IF' + i);
+ var inputDo = this.getInput('DO' + i);
+ console.log(inputIf.connection.targetConnection);
+ valueConnections.push(inputIf.connection.targetConnection);
+ statementConnections.push(inputDo.connection.targetConnection);
+ i++;
+ }
+ this.updateShape_();
+ this.reconnectChildBlocks_(valueConnections, statementConnections, elseStatementConnection);
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @this Blockly.Block
+ * @private
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('ELSE')) {
+ this.removeInput('ELSE');
+ }
+ var i = 1;
+ while (this.getInput('IF' + i)) {
+ this.removeInput('IF' + i);
+ this.removeInput('DO' + i);
+ i++;
+ }
+ // Rebuild block.
+ for (var i = 1; i <= this.elseifCount_; i++) {
+ this.appendValueInput('IF' + i)
+ .setCheck([Number, Boolean])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['CONTROLS_IF_MSG_ELSEIF']);
+ this.appendStatementInput('DO' + i)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['CONTROLS_IF_MSG_THEN']);
+ }
+ if (this.elseCount_) {
+ this.appendStatementInput('ELSE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['CONTROLS_IF_MSG_ELSE']);
+ }
+ },
+ /**
+ * Reconnects child blocks.
+ * @param {!Array} valueConnections List of value
+ * connectsions for if input.
+ * @param {!Array} statementConnections List of
+ * statement connections for do input.
+ * @param {?Blockly.RenderedConnection} elseStatementConnection Statement
+ * connection for else input.
+ */
+ reconnectChildBlocks_: function (valueConnections, statementConnections,
+ elseStatementConnection) {
+ for (var i = 1; i <= this.elseifCount_; i++) {
+ valueConnections[i] && valueConnections[i].reconnect(this, 'IF' + i);
+ statementConnections[i] && statementConnections[i].reconnect(this, 'DO' + i);
+ }
+ elseStatementConnection && elseStatementConnection.reconnect(this, 'ELSE');
+ }
+};
+
+
+const controls_range = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendValueInput('FROM')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PYTHON_RANGE)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FOR_INPUT_FROM);
+ this.appendValueInput('TO')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FOR_INPUT_TO);
+ this.appendValueInput('STEP')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PYTHON_RANGE_STEP);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_CONTROLS_RANGE_TOOLTIP);
+ }
+};
+
+
+const controls_forEach = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendValueInput('LIST')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOREACH_INPUT);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOREACH_INPUT_ITEM)
+ // .appendField(new Blockly.FieldTextInput('i'), 'VAR');
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(function () {
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_TOOLTIP.replace('“%1”', '');
+ });
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+};
+
+const controls_whileUntil = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendValueInput('BOOL')
+ .setCheck([Boolean, Number])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_CURRENT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(this.OPERATORS), 'MODE')
+ // this.appendDummyInput()
+ // .appendField(Blockly.Msg.CONTROLS_WHILE_SHI);
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_WHILEUNTIL_TITLE_REPEAT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var op = thisBlock.getFieldValue('MODE');
+ var TOOLTIPS = {
+ 'WHILE': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_WHILE,
+ 'UNTIL': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL
+ };
+ return TOOLTIPS[op];
+ });
+ }
+};
+
+const controls_try_finally = {
+ /**
+ * Block for if/elseif/else condition.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TRY);
+ this.appendStatementInput('try');
+ this.appendValueInput('IF1')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_EXCEPT);
+ this.appendStatementInput('DO1')
+ .appendField('');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['controls_except', 'controls_finally'], this));
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_CONTROL_TRY_TOOLTIP);
+ this.elseifCount_ = 1;
+ this.elseCount_ = 0;
+ },
+ /**
+ * Create XML to represent the number of else-if and else inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ if (!this.elseifCount_ && !this.elseCount_) {
+ return null;
+ }
+ var container = document.createElement('mutation');
+ if (this.elseifCount_) {
+ container.setAttribute('elseif', this.elseifCount_);
+ }
+ if (this.elseCount_) {
+ container.setAttribute('else', 1);
+ }
+ return container;
+ },
+ /**
+ * Parse XML to restore the else-if and else inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ var containerBlock = this;
+ var valueConnections = [];
+ var statementConnections = [];
+ // var elseStatementConnection = null;
+ if (this.elseCount_) {
+ // if (containerBlock.getInputTargetBlock('ELSE') && containerBlock.getInputTargetBlock('ELSE').previousConnection)
+ // elseStatementConnection = containerBlock.getInputTargetBlock('ELSE').previousConnection;
+ this.removeInput('ELSE');
+ }
+ for (var i = this.elseifCount_; i > 0; i--) {
+ if (containerBlock.getInputTargetBlock('IF' + i) && containerBlock.getInputTargetBlock('IF' + i).previousConnection)
+ valueConnections[i] = (containerBlock.getInputTargetBlock('IF' + i).previousConnection);
+ else
+ valueConnections[i] = null;
+ this.removeInput('IF' + i);
+ if (containerBlock.getInputTargetBlock('DO' + i) && containerBlock.getInputTargetBlock('DO' + i).previousConnection)
+ statementConnections[i] = (containerBlock.getInputTargetBlock('DO' + i).previousConnection);
+ else
+ statementConnections[i] = null;
+ this.removeInput('DO' + i);
+ }
+ this.elseifCount_ = parseInt(xmlElement.getAttribute('elseif'), 10);
+ this.elseCount_ = parseInt(xmlElement.getAttribute('else'), 10);
+ //this.compose(containerBlock);
+ for (var i = 1; i <= this.elseifCount_; i++) {
+ this.appendValueInput('IF' + i)
+ .setCheck([Boolean, Number])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_EXCEPT);
+ this.appendStatementInput('DO' + i)
+ .appendField("");
+ }
+ if (this.elseCount_) {
+ this.appendStatementInput('ELSE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_FINALLY);
+ }
+ for (var i = valueConnections.length - 2; i > 0; i--) {
+ if (valueConnections[i])
+ valueConnections[i].reconnect(this, 'IF' + i);
+ }
+ for (var i = statementConnections.length - 2; i > 0; i--) {
+ if (statementConnections[i])
+ statementConnections[i].reconnect(this, 'DO' + i);
+ }
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock = workspace.newBlock('controls_try');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 1; i <= this.elseifCount_; i++) {
+ var elseifBlock = workspace.newBlock('controls_except');
+ elseifBlock.initSvg();
+ connection.connect(elseifBlock.previousConnection);
+ connection = elseifBlock.nextConnection;
+ }
+ if (this.elseCount_) {
+ var elseBlock = workspace.newBlock('controls_finally');
+ elseBlock.initSvg();
+ connection.connect(elseBlock.previousConnection);
+ }
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ // Disconnect the else input blocks and remove the inputs.
+ if (this.elseCount_) {
+ this.removeInput('ELSE');
+ }
+ this.elseCount_ = 0;
+ // Disconnect all the elseif input blocks and remove the inputs.
+ for (var i = this.elseifCount_; i > 0; i--) {
+ this.removeInput('IF' + i);
+ this.removeInput('DO' + i);
+ }
+ this.elseifCount_ = 0;
+ // Rebuild the block's optional inputs.
+ var clauseBlock = containerBlock.getInputTargetBlock('STACK');
+ var valueConnections = [null];
+ var statementConnections = [null];
+ var elseStatementConnection = null;
+ while (clauseBlock) {
+ switch (clauseBlock.type) {
+ case 'controls_except':
+ this.elseifCount_++;
+ valueConnections.push(clauseBlock.valueConnection_);
+ statementConnections.push(clauseBlock.statementConnection_);
+ break;
+ case 'controls_finally':
+ this.elseCount_++;
+ elseStatementConnection = clauseBlock.statementConnection_;
+ break;
+ default:
+ throw Error('Unknown block type: ' + clauseBlock.type);
+ }
+ clauseBlock = clauseBlock.nextConnection &&
+ clauseBlock.nextConnection.targetBlock();
+ }
+
+ this.updateShape_();
+ // Reconnect any child blocks.
+ this.reconnectChildBlocks_(valueConnections, statementConnections, elseStatementConnection);
+
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ var clauseBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 1;
+ while (clauseBlock) {
+ switch (clauseBlock.type) {
+ case 'controls_except':
+ var inputIf = this.getInput('IF' + i);
+ var inputDo = this.getInput('DO' + i);
+ clauseBlock.valueConnection_ =
+ inputIf && inputIf.connection.targetConnection;
+ clauseBlock.statementConnection_ =
+ inputDo && inputDo.connection.targetConnection;
+ i++;
+ break;
+ case 'controls_finally':
+ var inputDo = this.getInput('ELSE');
+ clauseBlock.statementConnection_ =
+ inputDo && inputDo.connection.targetConnection;
+ break;
+ default:
+ throw 'Unknown block type.';
+ }
+ clauseBlock = clauseBlock.nextConnection &&
+ clauseBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Reconstructs the block with all child blocks attached.
+ */
+ rebuildShape_: function () {
+ var valueConnections = [null];
+ var statementConnections = [null];
+ var elseStatementConnection = null;
+
+ if (this.getInput('ELSE')) {
+ elseStatementConnection = this.getInput('ELSE').connection.targetConnection;
+ }
+ var i = 1;
+ while (this.getInput('IF' + i)) {
+ var inputIf = this.getInput('IF' + i);
+ var inputDo = this.getInput('DO' + i);
+ console.log(inputIf.connection.targetConnection);
+ valueConnections.push(inputIf.connection.targetConnection);
+ statementConnections.push(inputDo.connection.targetConnection);
+ i++;
+ }
+ this.updateShape_();
+ this.reconnectChildBlocks_(valueConnections, statementConnections, elseStatementConnection);
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @this Blockly.Block
+ * @private
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('ELSE')) {
+ this.removeInput('ELSE');
+ }
+ var i = 1;
+ while (this.getInput('IF' + i)) {
+ this.removeInput('IF' + i);
+ this.removeInput('DO' + i);
+ i++;
+ }
+ // Rebuild block.
+ for (var i = 1; i <= this.elseifCount_; i++) {
+ this.appendValueInput('IF' + i)
+ .setCheck([Number, Boolean])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_EXCEPT);
+ this.appendStatementInput('DO' + i)
+ .appendField('');
+ }
+ if (this.elseCount_) {
+ this.appendStatementInput('ELSE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_FINALLY);
+ }
+ },
+ /**
+ * Reconnects child blocks.
+ * @param {!Array} valueConnections List of value
+ * connectsions for if input.
+ * @param {!Array} statementConnections List of
+ * statement connections for do input.
+ * @param {?Blockly.RenderedConnection} elseStatementConnection Statement
+ * connection for else input.
+ */
+ reconnectChildBlocks_: function (valueConnections, statementConnections,
+ elseStatementConnection) {
+ for (var i = 1; i <= this.elseifCount_; i++) {
+ valueConnections[i] && valueConnections[i].reconnect(this, 'IF' + i);
+ statementConnections[i] && statementConnections[i].reconnect(this, 'DO' + i);
+ }
+ elseStatementConnection && elseStatementConnection.reconnect(this, 'ELSE');
+ }
+};
+
+const controls_flow_statements = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ var dropdown = new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(this.OPERATORS);
+ this.appendDummyInput()
+ .appendField(dropdown, 'FLOW')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FLOW_STATEMENTS_INPUT_OFLOOP);
+ this.setPreviousStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_CONTROLS_FLOW_STATEMENTS_TOOLTIP);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var op = thisBlock.getFieldValue('FLOW');
+ var TOOLTIPS = {
+ 'BREAK': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK,
+ 'CONTINUE': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE
+ };
+ return TOOLTIPS[op];
+ });
+ },
+ onchange: function () {
+ if (!this.workspace) {
+ // Block has been deleted.
+ return;
+ }
+ var legal = false;
+ // Is the block nested in a control statement?
+ var block = this;
+ do {
+ if (block.type == 'controls_repeat' ||
+ block.type == 'controls_for' ||
+ block.type == 'controls_forEach' ||
+ block.type == 'controls_repeat_ext' ||
+ block.type == 'controls_whileUntil' ||
+ block.type == 'do_while') {
+ legal = true;
+ break;
+ }
+ block = block.getSurroundParent();
+ } while (block);
+ if (legal) {
+ this.setWarningText(null);
+ } else {
+ this.setWarningText(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FLOW_STATEMENTS_WARNING);
+ }
+ }
+};
+
+
+const controls_for = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FOR_INPUT_WITH)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('i'), 'VAR');
+ this.appendValueInput('FROM')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FOR_INPUT_FROM);
+ this.appendValueInput('TO')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FOR_INPUT_TO);
+ this.appendValueInput('STEP')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STEP);
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_TOOLTIP.replace('%1',
+ thisBlock.getFieldValue('VAR'));
+ });
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+};
+
+const controls_for_range = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FOR_INPUT_WITH)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('i'), 'VAR');
+ this.appendValueInput('FROM')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FOR_INPUT_FROM);
+ this.appendValueInput('TO')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FOR_INPUT_TO);
+ this.appendValueInput('STEP')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STEP);
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_CONTROLS_FOR_RANGE_TOOLTIP.replace('%1',
+ thisBlock.getFieldValue('VAR'));
+ });
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+};
+
+
+controls_whileUntil.OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_WHILE, 'WHILE'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_UNTIL, 'UNTIL']
+];
+
+
+
+controls_flow_statements.OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK, 'BREAK'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE, 'CONTINUE']
+];
+
+
+
+const controls_if_if = {
+ /**
+ * Mutator block for if container.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_IF_TITLE_IF);
+ this.appendStatementInput('STACK');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_IF_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const controls_if_elseif = {
+ /**
+ * Mutator bolck for else-if condition.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_ELSEIF_TITLE_ELSEIF);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_ELSEIF_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const controls_if_else = {
+ /**
+ * Mutator block for else condition.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_ELSE_TITLE_ELSE);
+ this.setPreviousStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_IF_ELSE_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+
+
+const controls_try = {
+ /**
+ * Mutator block for if container.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField('try');
+ this.appendStatementInput('STACK');
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.contextMenu = false;
+ }
+};
+
+const controls_except = {
+ /**
+ * Mutator bolck for else-if condition.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_EXCEPT);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.contextMenu = false;
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_CONTROL_EXCEPT_TOOLTIP);
+ }
+};
+
+const controls_finally = {
+ /**
+ * Mutator block for else condition.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_FINALLY);
+ this.setPreviousStatement(true);
+ this.contextMenu = false;
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_CONTROL_FINALLY_TOOLTIP);
+ }
+};
+
+
+
+const controls_repeat_ext = {
+ /**
+ * Block for repeat n times (external number).
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.jsonInit({
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_REPEAT_TITLE,
+ "args0": [
+ {
+ "type": "input_value",
+ "name": "TIMES",
+ // "check": "Number"
+ }
+ ],
+ "previousStatement": null,
+ "nextStatement": null,
+ "colour": LOOPS_HUE,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_REPEAT_TOOLTIP,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_REPEAT_HELPURL
+ });
+ this.appendStatementInput('DO');
+ }
+};
+
+
+
+const controls_lambda = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendValueInput('BOOL')
+ .appendField('lambda')
+ //.appendField(new Blockly.FieldDropdown(this.OPERATORS), 'MODE');
+ this.appendStatementInput('DO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STAT);
+ this.setOutput(true);
+ // this.setNextStatement(true);
+ }
+};
+
+const controls_pass = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_PASS);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_CONTROLS_PASS_TOOLTIP);
+ }
+};
+
+const controls_thread = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_CONTROLS_THREAD_START)
+ this.appendValueInput('callback')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_CONTROLS_THREAD_USE)
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PARAMS);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_CONTROLS_THREAD_TOOLTIP);
+ }
+};
+
+//do-while循环
+const do_while = {
+ init: function () {
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_REPEAT_TITLE_REPEAT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DO);
+ this.appendStatementInput("input_data")
+ .setCheck(null)
+ this.appendValueInput("select_data")
+ .setCheck(null)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_OPERATOR_UNTIL)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_WHILE, "true"], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_UNTIL, "false"]]), "type");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setColour(LOOPS_HUE);
+ this.setTooltip("do-while loop");
+ this.setHelpUrl("");
+ }
+};
+
+const garbage_collection = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_OP_GARBAGE_COLLECT);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+
+const get_mem_alloc = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_MEM_ALLOC);
+ this.setOutput(true)
+ }
+};
+
+const get_mem_free = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_MEM_FREE);
+ this.setOutput(true)
+ }
+};
+
+const get_unique_identifier = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DEVICE + 'ID');
+ this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_UNIQUE_IDEN);
+ }
+};
+
+// export const base_type = controls_type;
+// export const controls_TypeLists = controls_typeLists;
+
+const datetime_fromtimestamp = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RTC_TIMESTAMP);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TIMESTAMP_TO_DATA);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ }
+};
+
+
+const gene_unique_identifier = {
+ init: function () {
+ this.setColour(LOOPS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET_UNIQUE_IDEN);
+ this.setOutput(true)
+ }
+};
+
+/***/ }),
+
+/***/ "../python/blocks/dicts.js":
+/*!*********************************!*\
+ !*** ../python/blocks/dicts.js ***!
+ \*********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ dicts_add_change_del: () => (/* binding */ dicts_add_change_del),
+/* harmony export */ dicts_add_or_change: () => (/* binding */ dicts_add_or_change),
+/* harmony export */ dicts_clear: () => (/* binding */ dicts_clear),
+/* harmony export */ dicts_create_with: () => (/* binding */ dicts_create_with),
+/* harmony export */ dicts_create_with_container: () => (/* binding */ dicts_create_with_container),
+/* harmony export */ dicts_create_with_item: () => (/* binding */ dicts_create_with_item),
+/* harmony export */ dicts_create_with_noreturn: () => (/* binding */ dicts_create_with_noreturn),
+/* harmony export */ dicts_deldict: () => (/* binding */ dicts_deldict),
+/* harmony export */ dicts_delete: () => (/* binding */ dicts_delete),
+/* harmony export */ dicts_get: () => (/* binding */ dicts_get),
+/* harmony export */ dicts_get_default: () => (/* binding */ dicts_get_default),
+/* harmony export */ dicts_items: () => (/* binding */ dicts_items),
+/* harmony export */ dicts_keys: () => (/* binding */ dicts_keys),
+/* harmony export */ dicts_length: () => (/* binding */ dicts_length),
+/* harmony export */ dicts_pop: () => (/* binding */ dicts_pop),
+/* harmony export */ dicts_setdefault: () => (/* binding */ dicts_setdefault),
+/* harmony export */ dicts_to_json: () => (/* binding */ dicts_to_json),
+/* harmony export */ dicts_to_json2: () => (/* binding */ dicts_to_json2),
+/* harmony export */ dicts_to_to: () => (/* binding */ dicts_to_to),
+/* harmony export */ dicts_todict: () => (/* binding */ dicts_todict),
+/* harmony export */ dicts_update: () => (/* binding */ dicts_update),
+/* harmony export */ dicts_values: () => (/* binding */ dicts_values),
+/* harmony export */ json_to_dicts: () => (/* binding */ json_to_dicts)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
/**
* @license
* Visual Blocks Editor
@@ -18,4 +35450,11915 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-class Ct{constructor(t,e){if(this.variablePrefix_=e||"",this.reservedDict_=Object.create(null),t)for(var i=t.split(","),n=0;n0;s--)e.getInputTargetBlock("IF"+s)&&e.getInputTargetBlock("IF"+s).previousConnection?i[s]=e.getInputTargetBlock("IF"+s).previousConnection:i[s]=null,this.removeInput("IF"+s),e.getInputTargetBlock("DO"+s)&&e.getInputTargetBlock("DO"+s).previousConnection?n[s]=e.getInputTargetBlock("DO"+s).previousConnection:n[s]=null,this.removeInput("DO"+s);this.elseifCount_=parseInt(t.getAttribute("elseif"),10),this.elseCount_=parseInt(t.getAttribute("else"),10);for(s=1;s<=this.elseifCount_;s++)this.appendValueInput("IF"+s).setCheck([Boolean,Number]).appendField(Ot.Msg.CONTROLS_IF_MSG_ELSEIF),this.appendStatementInput("DO"+s).appendField(Ot.Msg.CONTROLS_IF_MSG_THEN);this.elseCount_&&this.appendStatementInput("ELSE").appendField(Ot.Msg.CONTROLS_IF_MSG_ELSE);for(s=i.length-2;s>0;s--)i[s]&&i[s].reconnect(this,"IF"+s);for(s=n.length-2;s>0;s--)n[s]&&n[s].reconnect(this,"DO"+s)},decompose:function(t){var e=t.newBlock("controls_if_if");e.initSvg();for(var i=e.getInput("STACK").connection,n=1;n<=this.elseifCount_;n++){var s=t.newBlock("controls_if_elseif");s.initSvg(),i.connect(s.previousConnection),i=s.nextConnection}if(this.elseCount_){var _=t.newBlock("controls_if_else");_.initSvg(),i.connect(_.previousConnection)}return e},compose:function(t){this.elseCount_&&this.removeInput("ELSE"),this.elseCount_=0;for(var e=this.elseifCount_;e>0;e--)this.removeInput("IF"+e),this.removeInput("DO"+e);this.elseifCount_=0;for(var i=t.getInputTargetBlock("STACK"),n=[null],s=[null],_=null;i;){switch(i.type){case"controls_if_elseif":this.elseifCount_++,n.push(i.valueConnection_),s.push(i.statementConnection_);break;case"controls_if_else":this.elseCount_++,_=i.statementConnection_;break;default:throw Error("Unknown block type: "+i.type)}i=i.nextConnection&&i.nextConnection.targetBlock()}this.updateShape_(),this.reconnectChildBlocks_(n,s,_)},saveConnections:function(t){for(var e=t.getInputTargetBlock("STACK"),i=1;e;){switch(e.type){case"controls_if_elseif":var n=this.getInput("IF"+i),s=this.getInput("DO"+i);e.valueConnection_=n&&n.connection.targetConnection,e.statementConnection_=s&&s.connection.targetConnection,i++;break;case"controls_if_else":s=this.getInput("ELSE");e.statementConnection_=s&&s.connection.targetConnection;break;default:throw"Unknown block type."}e=e.nextConnection&&e.nextConnection.targetBlock()}},rebuildShape_:function(){var t=[null],e=[null],i=null;this.getInput("ELSE")&&(i=this.getInput("ELSE").connection.targetConnection);for(var n=1;this.getInput("IF"+n);){var s=this.getInput("IF"+n),_=this.getInput("DO"+n);console.log(s.connection.targetConnection),t.push(s.connection.targetConnection),e.push(_.connection.targetConnection),n++}this.updateShape_(),this.reconnectChildBlocks_(t,e,i)},updateShape_:function(){this.getInput("ELSE")&&this.removeInput("ELSE");for(var t=1;this.getInput("IF"+t);)this.removeInput("IF"+t),this.removeInput("DO"+t),t++;for(t=1;t<=this.elseifCount_;t++)this.appendValueInput("IF"+t).setCheck([Number,Boolean]).appendField(Ot.Msg.CONTROLS_IF_MSG_ELSEIF),this.appendStatementInput("DO"+t).appendField(Ot.Msg.CONTROLS_IF_MSG_THEN);this.elseCount_&&this.appendStatementInput("ELSE").appendField(Ot.Msg.CONTROLS_IF_MSG_ELSE)},reconnectChildBlocks_:function(t,e,i){for(var n=1;n<=this.elseifCount_;n++)t[n]&&t[n].reconnect(this,"IF"+n),e[n]&&e[n].reconnect(this,"DO"+n);i&&i.reconnect(this,"ELSE")}},wt={init:function(){this.setColour(xt),this.appendValueInput("FROM").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.PYTHON_RANGE).appendField(Ot.Msg.LANG_CONTROLS_FOR_INPUT_FROM),this.appendValueInput("TO").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.LANG_CONTROLS_FOR_INPUT_TO),this.appendValueInput("STEP").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.PYTHON_RANGE_STEP),this.setInputsInline(!0),this.setOutput(!0),this.setTooltip(Ot.Msg.MIXLY_PYTHON_CONTROLS_RANGE_TOOLTIP)}},kt={init:function(){this.setColour(xt),this.appendValueInput("LIST").setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.CONTROLS_FOREACH_INPUT),this.appendValueInput("VAR").appendField(Ot.Msg.CONTROLS_FOREACH_INPUT_ITEM),this.appendStatementInput("DO").appendField(Ot.Msg.MIXLY_DO),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip((function(){return Ot.Msg.CONTROLS_FOR_TOOLTIP.replace("“%1”","")}))},getVars:function(){return[this.getFieldValue("VAR")]},renameVar:function(t,e){Ot.Names.equals(t,this.getFieldValue("VAR"))&&this.setTitleValue(e,"VAR")}},Ht={init:function(){this.setColour(xt),this.appendValueInput("BOOL").setCheck([Boolean,Number]).appendField(Ot.Msg.MIXLY_MICROBIT_JS_CURRENT).appendField(new Ot.FieldDropdown(this.OPERATORS),"MODE"),this.appendStatementInput("DO").appendField(Ot.Msg.LANG_CONTROLS_WHILEUNTIL_TITLE_REPEAT+Ot.Msg.MIXLY_DO),this.setPreviousStatement(!0),this.setNextStatement(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("MODE");return{WHILE:Ot.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_WHILE,UNTIL:Ot.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL}[e]}))}},Wt={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.MIXLY_PYTHON_TRY),this.appendStatementInput("try"),this.appendValueInput("IF1").appendField(Ot.Msg.MIXLY_PYTHON_EXCEPT),this.appendStatementInput("DO1").appendField(""),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setMutator(new Ot.icons.MutatorIcon(["controls_except","controls_finally"],this)),this.setTooltip(Ot.Msg.MIXLY_MIXPY_CONTROL_TRY_TOOLTIP),this.elseifCount_=1,this.elseCount_=0},mutationToDom:function(){if(!this.elseifCount_&&!this.elseCount_)return null;var t=document.createElement("mutation");return this.elseifCount_&&t.setAttribute("elseif",this.elseifCount_),this.elseCount_&&t.setAttribute("else",1),t},domToMutation:function(t){var e=this,i=[],n=[];this.elseCount_&&this.removeInput("ELSE");for(var s=this.elseifCount_;s>0;s--)e.getInputTargetBlock("IF"+s)&&e.getInputTargetBlock("IF"+s).previousConnection?i[s]=e.getInputTargetBlock("IF"+s).previousConnection:i[s]=null,this.removeInput("IF"+s),e.getInputTargetBlock("DO"+s)&&e.getInputTargetBlock("DO"+s).previousConnection?n[s]=e.getInputTargetBlock("DO"+s).previousConnection:n[s]=null,this.removeInput("DO"+s);this.elseifCount_=parseInt(t.getAttribute("elseif"),10),this.elseCount_=parseInt(t.getAttribute("else"),10);for(s=1;s<=this.elseifCount_;s++)this.appendValueInput("IF"+s).setCheck([Boolean,Number]).appendField(Ot.Msg.MIXLY_PYTHON_EXCEPT),this.appendStatementInput("DO"+s).appendField("");this.elseCount_&&this.appendStatementInput("ELSE").appendField(Ot.Msg.MIXLY_PYTHON_FINALLY);for(s=i.length-2;s>0;s--)i[s]&&i[s].reconnect(this,"IF"+s);for(s=n.length-2;s>0;s--)n[s]&&n[s].reconnect(this,"DO"+s)},decompose:function(t){var e=t.newBlock("controls_try");e.initSvg();for(var i=e.getInput("STACK").connection,n=1;n<=this.elseifCount_;n++){var s=t.newBlock("controls_except");s.initSvg(),i.connect(s.previousConnection),i=s.nextConnection}if(this.elseCount_){var _=t.newBlock("controls_finally");_.initSvg(),i.connect(_.previousConnection)}return e},compose:function(t){this.elseCount_&&this.removeInput("ELSE"),this.elseCount_=0;for(var e=this.elseifCount_;e>0;e--)this.removeInput("IF"+e),this.removeInput("DO"+e);this.elseifCount_=0;for(var i=t.getInputTargetBlock("STACK"),n=[null],s=[null],_=null;i;){switch(i.type){case"controls_except":this.elseifCount_++,n.push(i.valueConnection_),s.push(i.statementConnection_);break;case"controls_finally":this.elseCount_++,_=i.statementConnection_;break;default:throw Error("Unknown block type: "+i.type)}i=i.nextConnection&&i.nextConnection.targetBlock()}this.updateShape_(),this.reconnectChildBlocks_(n,s,_)},saveConnections:function(t){for(var e=t.getInputTargetBlock("STACK"),i=1;e;){switch(e.type){case"controls_except":var n=this.getInput("IF"+i),s=this.getInput("DO"+i);e.valueConnection_=n&&n.connection.targetConnection,e.statementConnection_=s&&s.connection.targetConnection,i++;break;case"controls_finally":s=this.getInput("ELSE");e.statementConnection_=s&&s.connection.targetConnection;break;default:throw"Unknown block type."}e=e.nextConnection&&e.nextConnection.targetBlock()}},rebuildShape_:function(){var t=[null],e=[null],i=null;this.getInput("ELSE")&&(i=this.getInput("ELSE").connection.targetConnection);for(var n=1;this.getInput("IF"+n);){var s=this.getInput("IF"+n),_=this.getInput("DO"+n);console.log(s.connection.targetConnection),t.push(s.connection.targetConnection),e.push(_.connection.targetConnection),n++}this.updateShape_(),this.reconnectChildBlocks_(t,e,i)},updateShape_:function(){this.getInput("ELSE")&&this.removeInput("ELSE");for(var t=1;this.getInput("IF"+t);)this.removeInput("IF"+t),this.removeInput("DO"+t),t++;for(t=1;t<=this.elseifCount_;t++)this.appendValueInput("IF"+t).setCheck([Number,Boolean]).appendField(Ot.Msg.MIXLY_PYTHON_EXCEPT),this.appendStatementInput("DO"+t).appendField("");this.elseCount_&&this.appendStatementInput("ELSE").appendField(Ot.Msg.MIXLY_PYTHON_FINALLY)},reconnectChildBlocks_:function(t,e,i){for(var n=1;n<=this.elseifCount_;n++)t[n]&&t[n].reconnect(this,"IF"+n),e[n]&&e[n].reconnect(this,"DO"+n);i&&i.reconnect(this,"ELSE")}},Kt={init:function(){this.setColour(xt);var t=new Ot.FieldDropdown(this.OPERATORS);this.appendDummyInput().appendField(t,"FLOW").appendField(Ot.Msg.LANG_CONTROLS_FLOW_STATEMENTS_INPUT_OFLOOP),this.setPreviousStatement(!0),this.setTooltip(Ot.Msg.MIXLY_PYTHON_CONTROLS_FLOW_STATEMENTS_TOOLTIP);var e=this;this.setTooltip((function(){var t=e.getFieldValue("FLOW");return{BREAK:Ot.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK,CONTINUE:Ot.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE}[t]}))},onchange:function(){if(this.workspace){var t=!1,e=this;do{if("controls_repeat"==e.type||"controls_for"==e.type||"controls_forEach"==e.type||"controls_repeat_ext"==e.type||"controls_whileUntil"==e.type||"do_while"==e.type){t=!0;break}e=e.getSurroundParent()}while(e);t?this.setWarningText(null):this.setWarningText(Ot.Msg.LANG_CONTROLS_FLOW_STATEMENTS_WARNING)}}},Jt={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.LANG_CONTROLS_FOR_INPUT_WITH).appendField(new Ot.FieldTextInput("i"),"VAR"),this.appendValueInput("FROM").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.LANG_CONTROLS_FOR_INPUT_FROM),this.appendValueInput("TO").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.LANG_CONTROLS_FOR_INPUT_TO),this.appendValueInput("STEP").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_STEP),this.appendStatementInput("DO").appendField(Ot.Msg.MIXLY_DO),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0);var t=this;this.setTooltip((function(){return Ot.Msg.CONTROLS_FOR_TOOLTIP.replace("%1",t.getFieldValue("VAR"))}))},getVars:function(){return[this.getFieldValue("VAR")]},renameVar:function(t,e){Ot.Names.equals(t,this.getFieldValue("VAR"))&&this.setTitleValue(e,"VAR")}},qt={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.LANG_CONTROLS_FOR_INPUT_WITH).appendField(new Ot.FieldTextInput("i"),"VAR"),this.appendValueInput("FROM").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.LANG_CONTROLS_FOR_INPUT_FROM),this.appendValueInput("TO").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.LANG_CONTROLS_FOR_INPUT_TO),this.appendValueInput("STEP").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_STEP),this.appendStatementInput("DO").appendField(Ot.Msg.MIXLY_DO),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0);var t=this;this.setTooltip((function(){return Ot.Msg.MIXLY_PYTHON_CONTROLS_FOR_RANGE_TOOLTIP.replace("%1",t.getFieldValue("VAR"))}))},getVars:function(){return[this.getFieldValue("VAR")]},renameVar:function(t,e){Ot.Names.equals(t,this.getFieldValue("VAR"))&&this.setTitleValue(e,"VAR")}};Ht.OPERATORS=[[Ot.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_WHILE,"WHILE"],[Ot.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_UNTIL,"UNTIL"]],Kt.OPERATORS=[[Ot.Msg.LANG_CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK,"BREAK"],[Ot.Msg.LANG_CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE,"CONTINUE"]];const Qt={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.CONTROLS_IF_IF_TITLE_IF),this.appendStatementInput("STACK"),this.setTooltip(Ot.Msg.CONTROLS_IF_IF_TOOLTIP),this.contextMenu=!1}},zt={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.CONTROLS_IF_ELSEIF_TITLE_ELSEIF),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.CONTROLS_IF_ELSEIF_TOOLTIP),this.contextMenu=!1}},jt={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.CONTROLS_IF_ELSE_TITLE_ELSE),this.setPreviousStatement(!0),this.setTooltip(Ot.Msg.CONTROLS_IF_ELSE_TOOLTIP),this.contextMenu=!1}},Zt={init:function(){this.setColour(xt),this.appendDummyInput().appendField("try"),this.appendStatementInput("STACK"),this.setPreviousStatement(!1),this.setNextStatement(!1),this.contextMenu=!1}},$t={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.MIXLY_PYTHON_EXCEPT),this.setPreviousStatement(!0),this.setNextStatement(!0),this.contextMenu=!1,this.setTooltip(Ot.Msg.MIXLY_MIXPY_CONTROL_EXCEPT_TOOLTIP)}},te={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.MIXLY_PYTHON_FINALLY),this.setPreviousStatement(!0),this.contextMenu=!1,this.setTooltip(Ot.Msg.MIXLY_MIXPY_CONTROL_FINALLY_TOOLTIP)}},ee={init:function(){this.jsonInit({message0:Ot.Msg.CONTROLS_REPEAT_TITLE,args0:[{type:"input_value",name:"TIMES"}],previousStatement:null,nextStatement:null,colour:xt,tooltip:Ot.Msg.CONTROLS_REPEAT_TOOLTIP,helpUrl:Ot.Msg.CONTROLS_REPEAT_HELPURL}),this.appendStatementInput("DO")}},ie={init:function(){this.setColour(xt),this.appendValueInput("BOOL").appendField("lambda"),this.appendStatementInput("DO").appendField(Ot.Msg.MIXLY_STAT),this.setOutput(!0)}},ne={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.MIXLY_PYTHON_PASS),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.MIXLY_PYTHON_CONTROLS_PASS_TOOLTIP)}},se={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.MIXLY_PYTHON_CONTROLS_THREAD_START),this.appendValueInput("callback").appendField(Ot.Msg.MIXLY_PYTHON_CONTROLS_THREAD_USE),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_PARAMS),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_PYTHON_CONTROLS_THREAD_TOOLTIP)}},_e={init:function(){this.appendDummyInput().appendField(Ot.Msg.CONTROLS_REPEAT_TITLE_REPEAT+Ot.Msg.MIXLY_DO),this.appendStatementInput("input_data").setCheck(null),this.appendValueInput("select_data").setCheck(null).appendField(Ot.Msg.CONTROLS_OPERATOR_UNTIL).appendField(new Ot.FieldDropdown([[Ot.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_WHILE,"true"],[Ot.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_UNTIL,"false"]]),"type"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setColour(xt),this.setTooltip("do-while loop"),this.setHelpUrl("")}},oe={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.MIXLY_OP_GARBAGE_COLLECT),this.setPreviousStatement(!0),this.setNextStatement(!0)}},pe={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET_MEM_ALLOC),this.setOutput(!0)}},ae={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET_MEM_FREE),this.setOutput(!0)}},ue={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET+Ot.Msg.MIXLY_DEVICE+"ID"),this.setInputsInline(!0),this.setOutput(!0),this.setTooltip(Ot.Msg.PROCEDURES_DEFRETURN_RETURN+Ot.Msg.MIXLY_GET_UNIQUE_IDEN)}},re={init:function(){this.setColour(xt),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_RTC_TIMESTAMP),this.appendDummyInput().appendField(Ot.Msg.MIXLY_TIMESTAMP_TO_DATA),this.setInputsInline(!0),this.setOutput(!0,Number)}},le={init:function(){this.setColour(xt),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET_UNIQUE_IDEN),this.setOutput(!0)}},de=230;Ot.FieldTextInput.math_number_validator=function(t){return String(t)},Ot.FieldTextInput.math_number_validator_include_blank=function(t){if(""===t)return"";return/^-?(0X|0x|0O|0o|0B|0b)?[a-fA-F0-9]{1,}(\.[a-fA-F0-9]+)?$/.test(t)?String(t):null};const Ie={init:function(){this.setColour(de),this.appendDummyInput().appendField(new Ot.FieldTextInput("0",Ot.FieldTextInput.math_number_validator),"NUM"),this.setOutput(!0,Number),this.setTooltip(Ot.Msg.MATH_NUMBER_TOOLTIP)}},Te={init:function(){this.setColour(de);this.appendDummyInput("").appendField(Ot.Msg.MIXLY_PYTHON_MATH_CONSTANT).appendField(new Ot.FieldDropdown([["π","pi"],["e","e"]]),"CONSTANT"),this.setOutput(!0,Number);var t=this;this.setTooltip((function(){var e=t.getFieldValue("CONSTANT");return{pi:Ot.Msg.MIXLY_PYTHON_MATH_CONSTANT_PI_TOOLTIP,e:Ot.Msg.MIXLY_PYTHON_MATH_CONSTANT_E_TOOLTIP}[e]}))}},Me={init:function(){this.setColour(de);this.appendDummyInput("").appendField(Ot.Msg.MIXLY_PYTHON_MATH_CONSTANT).appendField(new Ot.FieldDropdown([["π","pi"],["e","e"]]),"CONSTANT"),this.setOutput(!0,Number);var t=this;this.setTooltip((function(){var e=t.getFieldValue("CONSTANT");return{pi:Ot.Msg.MIXLY_PYTHON_MATH_CONSTANT_PI_MP_TOOLTIP,e:Ot.Msg.MIXLY_PYTHON_MATH_CONSTANT_E_MP_TOOLTIP}[e]}))}},he={init:function(){this.setColour(de),this.setOutput(!0),this.appendValueInput("A"),this.appendValueInput("B").appendField(new Ot.FieldDropdown([["+","ADD"],["-","MINUS"],["×","MULTIPLY"],["÷","DIVIDE"],["%","QUYU"],["//","ZHENGCHU"],["**","POWER"]]),"OP"),this.setInputsInline(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("OP");return{ADD:Ot.Msg.MATH_ARITHMETIC_TOOLTIP_ADD,MINUS:Ot.Msg.MATH_ARITHMETIC_TOOLTIP_MINUS,MULTIPLY:Ot.Msg.MATH_ARITHMETIC_TOOLTIP_MULTIPLY,DIVIDE:Ot.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,QUYU:Ot.Msg.MATH_MODULO_TOOLTIP,ZHENGCHU:Ot.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,POWER:Ot.Msg.MATH_ARITHMETIC_TOOLTIP_POWER}[e]}))}},me={init:function(){this.setColour(de),this.setPreviousStatement(!0),this.setNextStatement(!0),this.appendValueInput("A"),this.appendValueInput("B").appendField(new Ot.FieldDropdown([["+=","ADD"],["-=","MINUS"],["×=","MULTIPLY"],["÷=","DIVIDE"],["%=","QUYU"],["//=","ZHENGCHU"],["**=","POWER"]]),"OP"),this.setInputsInline(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("OP");return{ADD:Ot.Msg.MATH_ARITHMETIC_TOOLTIP_ADD,MINUS:Ot.Msg.MATH_ARITHMETIC_TOOLTIP_MINUS,MULTIPLY:Ot.Msg.MATH_ARITHMETIC_TOOLTIP_MULTIPLY,DIVIDE:Ot.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,QUYU:Ot.Msg.MATH_MODULO_TOOLTIP,ZHENGCHU:Ot.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,POWER:Ot.Msg.MATH_ARITHMETIC_TOOLTIP_POWER}[e]}))}},Ee={init:function(){this.setColour(de),this.setOutput(!0,Number),this.appendValueInput("A").setCheck(Number),this.appendValueInput("B").setCheck(Number).appendField(new Ot.FieldDropdown([["&","&"],["|","|"],[">>",">>"],["<<","<<"]]),"OP"),this.setInputsInline(!0),this.setTooltip("位运算")}},Oe={init:function(){this.setColour(de),this.setOutput(!0,Number),this.appendValueInput("NUM").setCheck(Number).appendField(new Ot.FieldDropdown([["sin","SIN"],["cos","COS"],["tan","TAN"],["asin","ASIN"],["acos","ACOS"],["atan","ATAN"],["-","-"],["ln","LN"],["log10","LOG10"],["e^","EXP"],["10^","POW10"]]),"OP");var t=this;this.setTooltip((function(){var e=t.getFieldValue("OP");return{SIN:Ot.Msg.MATH_TRIG_TOOLTIP_SIN,COS:Ot.Msg.MATH_TRIG_TOOLTIP_COS,TAN:Ot.Msg.MATH_TRIG_TOOLTIP_TAN,ASIN:Ot.Msg.MATH_TRIG_TOOLTIP_ASIN,ACOS:Ot.Msg.MATH_TRIG_TOOLTIP_ACOS,ATAN:Ot.Msg.MATH_TRIG_TOOLTIP_ATAN,LN:Ot.Msg.MATH_SINGLE_TOOLTIP_LN}[e]}))}},Re={init:function(){var t=[[Ot.Msg.MATH_BIN,"bin"],[Ot.Msg.MATH_OCT,"oct"],[Ot.Msg.MATH_HEX,"hex"]];this.setColour(de),this.setOutput(!0,String),this.appendValueInput("NUM").setCheck(Number).appendField(new Ot.FieldDropdown(t),"OP");var e=this;this.setTooltip((function(){var t=e.getFieldValue("OP");return{bin:Ot.Msg.MATH_DEC_TOOLTIP_BIN,oct:Ot.Msg.MATH_DEC_TOOLTIP_OCT,hex:Ot.Msg.MATH_DEC_TOOLTIP_HEX}[t]}))}},ce={init:function(){var t=[[Ot.Msg.LANG_MATH_TO_ROUND,"round"],[Ot.Msg.LANG_MATH_TO_CEIL,"ceil"],[Ot.Msg.LANG_MATH_TO_FLOOR,"floor"],[Ot.Msg.MATH_ABS,"fabs"],[Ot.Msg.MATH_SQRT,"sqrt"]];this.setColour(de),this.appendValueInput("A").setCheck(Number).appendField(new Ot.FieldDropdown(t),"OP"),this.setOutput(!0,Number);var e=this;this.setTooltip((function(){var t=e.getFieldValue("OP");return{sqrt:Ot.Msg.MATH_SINGLE_TOOLTIP_ROOT,fabs:Ot.Msg.MATH_SINGLE_TOOLTIP_ABS,sq:Ot.Msg.MATH_SINGLE_TOOLTIP_SQ,round:Ot.Msg.MATH_SINGLE_TOOLTIP_ROUND,ceil:Ot.Msg.MATH_SINGLE_TOOLTIP_CEIL,floor:Ot.Msg.MATH_SINGLE_TOOLTIP_FLOOR}[t]}))}},ge={init:function(){var t=[[Ot.Msg.MIXLY_MAX,"max"],[Ot.Msg.MIXLY_MIN,"min"]];this.setColour(de),this.appendValueInput("A").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(new Ot.FieldDropdown(t),"OP").appendField("("),this.appendValueInput("B").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(","),this.appendDummyInput("").setAlign(Ot.inputs.Align.RIGHT).appendField(")"),this.setInputsInline(!0),this.setOutput(!0,Number);var e=this;this.setTooltip((function(){var t=e.getFieldValue("OP");return{max:Ot.Msg.MIXLY_TOOLTIP_MATH_MAX,min:Ot.Msg.MIXLY_TOOLTIP_MATH_MIN}[t]}))}},Ce={init:function(){var t=[[Ot.Msg.MATH_TWO,"two"],[Ot.Msg.MATH_EIGHT,"eight"],[Ot.Msg.MATH_TEN,"ten"],[Ot.Msg.MATH_SIXTEEN,"sixteen"]];this.setColour(de),this.appendDummyInput("").appendField(Ot.Msg.MATH_BA),this.appendValueInput("NUM").appendField(new Ot.FieldDropdown(t),"OP").appendField(Ot.Msg.MATH_JinZhi).setCheck(Number),this.appendDummyInput("").appendField(Ot.Msg.MATH_ZHW).appendField(new Ot.FieldDropdown(t),"OP2").appendField(Ot.Msg.MATH_JinZhi),this.setFieldValue("ten","OP2"),this.setOutput(!0),this.setInputsInline(!0);var e=this;this.setTooltip((function(){var t=e.getFieldValue("OP"),i={two:Ot.Msg.MATH_Before_two,eight:Ot.Msg.MATH_Before_eight,ten:Ot.Msg.MATH_Before_ten,sixteen:Ot.Msg.MATH_Before_sixteen},n=e.getFieldValue("OP2"),s={two:Ot.Msg.MATH_Behind_two,eight:Ot.Msg.MATH_Behind_eight,ten:Ot.Msg.MATH_Behind_ten,sixteen:Ot.Msg.MATH_Behind_sixteen};return i[t]+s[n]}))}},Se={init:function(){var t=[[Ot.Msg.LANG_MATH_INT,"int"],[Ot.Msg.LANG_MATH_FLOAT,"float"]];this.setColour(de),this.setOutput(!0,Number),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_RANDOM).appendField(new Ot.FieldDropdown(t),"TYPE"),this.appendValueInput("FROM").setCheck(Number).appendField(Ot.Msg.LANG_CONTROLS_FOR_INPUT_FROM),this.appendValueInput("TO").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.LANG_MATH_RANDOM_INT_INPUT_TO),this.setInputsInline(!0);var e=this;this.setTooltip((function(){var t=e.getFieldValue("TYPE"),i={int:Ot.Msg.LANG_MATH_INT,float:Ot.Msg.LANG_MATH_FLOAT_RANDOM};return Ot.Msg.MATH_RANDOM_INT_TOOLTIP+i[t]}))}},Le={init:function(){this.setColour(de),this.setOutput(!0,Number),this.appendValueInput("VALUE").setCheck(Number).appendField(Ot.Msg.LANG_MATH_CONSTRAIN_INPUT_CONSTRAIN),this.appendValueInput("LOW").setCheck(Number).appendField(Ot.Msg.LANG_MATH_CONSTRAIN_INPUT_LOW),this.appendValueInput("HIGH").setCheck(Number).appendField(Ot.Msg.LANG_MATH_CONSTRAIN_INPUT_HIGH),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MATH_CONSTRAIN_TOOLTIP)}},Ae={init:function(){this.setColour(de),this.appendValueInput("NUM",Number).appendField(Ot.Msg.MIXLY_MAP).setCheck(Number),this.appendValueInput("fromLow",Number).appendField(Ot.Msg.MIXLY_MAP_FROM).setCheck(Number),this.appendValueInput("fromHigh",Number).appendField(",").setCheck(Number),this.appendValueInput("toLow",Number).appendField(Ot.Msg.MIXLY_MAP_TO).setCheck(Number),this.appendValueInput("toHigh",Number).appendField(",").setCheck(Number),this.appendDummyInput("").appendField("]"),this.setInputsInline(!0),this.setOutput(!0),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_MATH_MAP)}},Ne={init:function(){this.setColour(de),this.appendDummyInput().appendField(new Ot.FieldTextInput("0",Ot.FieldTextInput.math_number_validator_include_blank),"NUM"),this.setOutput(!0),this.setTooltip(Ot.Msg.MATH_NUMBER_TOOLTIP)}},De={init:function(){this.setColour(de),this.appendValueInput("NUM").setCheck(Number).appendField(Ot.Msg.LANG_MATH_RANDOM_SEED),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_MATH_RANDOM_SEED)}},fe={init:function(){this.setColour(de),this.setOutput(!0,Number),this.appendValueInput("VALUE").setCheck(Number),this.appendValueInput("VAR").setCheck(Number).appendField(Ot.Msg.MATH_ROUND).appendField(Ot.Msg.TEXT_KEEP),this.appendDummyInput().appendField(Ot.Msg.TEXT_DECIMAL),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MATH_ROUND_NEW_TOOLTIP)}},Fe={init:function(){var t=[[Ot.Msg.MIXLY_TO_INT,"int"],[Ot.Msg.MIXLY_TO_FLOAT,"float"],[Ot.Msg.MIXLY_TO_BITES,"b"],[Ot.Msg.LANG_MATH_BYTE+Ot.Msg.MIXLY_TO_INT,"bti"]];this.setColour(de),this.appendValueInput("VAR").appendField(new Ot.FieldDropdown(t),"TOWHAT"),this.setOutput(!0,Number);var e=this;this.setTooltip((function(){var t=e.getFieldValue("TOWHAT");return{int:Ot.Msg.MIXLY_PYTHON_TOOLTIP_TOINT,float:Ot.Msg.MIXLY_PYTHON_TOOLTIP_TOFLOAT,b:Ot.Msg.MIXLY_TOOLTIP_TEXT_TOBYTE}[t]}))}},Pe={init:function(){var t=[[Ot.Msg.MIXLY_TO_INT,"int"],[Ot.Msg.MIXLY_TO_FLOAT,"float"]];this.setColour(de),this.appendValueInput("VAR").appendField(new Ot.FieldDropdown(t),"TOWHAT"),this.setOutput(!0,Number);var e=this;this.setTooltip((function(){var t=e.getFieldValue("TOWHAT");return{int:Ot.Msg.MIXLY_TOOLTIP_TEXT_TOINT,float:Ot.Msg.MIXLY_TOOLTIP_TEXT_TOFLOAT}[t]}))}},Ye=Ae,ve={init:function(){this.setColour(de),this.appendValueInput("VAR").appendField(Ot.Msg.LANG_MATH_BYTE+Ot.Msg.MIXLY_TO_HEX),this.setOutput(!0,Number),this.setTooltip(Ot.Msg.MIXLY_PYTHON_TOOLTIP_TOHEX)}},Xe={init:function(){this.setColour(de),this.itemCount_=1,this.setMutator(new Ot.icons.MutatorIcon(["lists_create_with_item"],this)),this.appendDummyInput("DUMMY").appendField(Ot.Msg.MIXLY_PRODUCT+Ot.Msg.MIXLY_GENERATE_CARTESIAN_PRODUCT),this.appendValueInput("REPEAT").appendField(Ot.Msg.MIXLY_EVERY_PER_ELEPER_ELEMENT),this.appendDummyInput().appendField(Ot.Msg.CONTROLS_REPEAT_TITLE_TIMES),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0),this.setTooltip(Ot.Msg.LISTS_CREATE_WITH_PYTHON_TOOLTIP),this.updateShape_()},mutationToDom:function(){var t=document.createElement("mutation");return t.setAttribute("items",this.itemCount_),t},domToMutation:function(t){this.itemCount_=parseInt(t.getAttribute("items"),10),this.updateShape_()},decompose:function(t){var e=t.newBlock("lists_create_with_container");e.initSvg();for(var i=e.getInput("STACK").connection,n=0;n1&&"\\"===t.charAt(0)){var e=t.charAt(1);if("0"===e||"b"===e||"f"===e||"n"===e||"r"===e||"t"===e||"\\"===e||"'"===e)return String(t).substring(0,2);if("x"===e&&"0"===t.charAt(2)&&"B"===t.charAt(3))return String(t).substring(0,4)}return String(t).substring(0,1)};const Ve={init:function(){this.setColour(ye),this.appendDummyInput().appendField(this.newQuote_(!0)).appendField(new Ot.FieldTextInput("",Ot.FieldTextInput.char_validator),"TEXT").appendField(this.newQuote_(!1)),this.setOutput(!0,Number),this.setTooltip(Ot.Msg.TEXT_CHAR_TOOLTIP)},newQuote_:function(t){if(1==t)var e="../../media/quote2.png";else e="../../media/quote3.png";return new Ot.FieldImage(e,7,12,'"')}},Be={init:function(){this.setColour(ye),this.appendValueInput("A").setCheck([String,Number]),this.appendValueInput("B").setCheck([String,Number]).appendField(Ot.Msg.MIXLY_TEXT_JOIN),this.setInputsInline(!0),this.setOutput(!0,String),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_TEXT_JOIN)}},Ge={init:function(){this.setColour(ye),this.appendValueInput("VAR").setCheck(Number).appendField(Ot.Msg.MIXLY_TOCHAR),this.setOutput(!0,String),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_TEXT_TOCHAR)}},Ue={init:function(){this.setColour(ye),this.appendValueInput("VAR").setCheck(String).appendField(Ot.Msg.MIXLY_TOASCII),this.setOutput(!0,Number),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_TEXT_TOASCII)}},we={init:function(){this.setColour(ye),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_TOSTRING),this.setOutput(!0,String),this.setTooltip(Ot.Msg.MIXLY_PYTHON_TOOLTIP_TOTEXT)}},ke={init:function(){this.setColour(ye),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_LENGTH),this.setOutput(!0,Number),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_TEXT_LENGTH)}},He={init:function(){this.WHERE_OPTIONS=[[Ot.Msg.LISTS_GET_INDEX_FROM_START,"FROM_START"],[Ot.Msg.LISTS_GET_INDEX_FROM_END,"FROM_END"],[Ot.Msg.TEXT_GET_INDEX_RANDOM+1+Ot.Msg.TEXT_CHARAT2,"RANDOM"]],this.setHelpUrl(Ot.Msg.LISTS_GET_INDEX_HELPURL),this.setColour(ye),this.appendValueInput("VAR").setCheck(String),this.appendValueInput("AT").setCheck(Number),this.appendDummyInput().appendField(Ot.Msg.LISTS_GET_INDEX_GET,"MODE"),Ot.Msg.LISTS_GET_INDEX_TAIL&&this.appendDummyInput("TAIL").appendField(Ot.Msg.LISTS_GET_INDEX_TAIL),this.setInputsInline(!0),this.setOutput(!0),this.updateAt_(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("MODE"),i=t.getFieldValue("WHERE"),n="";switch(e+" "+i){case"GET FROM_START":case"GET FROM_END":n=Ot.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM;break;case"GET RANDOM":n=Ot.Msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM;break;case"GET_REMOVE FROM_START":case"GET_REMOVE FROM_END":n=Ot.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM;break;case"GET_REMOVE RANDOM":n=Ot.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM}return"FROM_START"!=i&&"FROM_END"!=i||(n+=" "+Ot.Msg.LISTS_INDEX_FROM_START_TOOLTIP.replace("%1",Ot.Msg.ONE_BASED_INDEXING?"#1":"#0")),n}));var e=this;this.setTooltip((function(){var t=e.getFieldValue("WHERE"),i={FROM_START:Ot.Msg.LISTS_GET_INDEX_FROM_START,FROM_END:Ot.Msg.LISTS_GET_INDEX_FROM_END,RANDOM:Ot.Msg.TEXT_GET_INDEX_RANDOM};return Ot.Msg.PROCEDURES_DEFRETURN_RETURN+Ot.Msg.MIXLY_MICROBIT_TYPE_STRING+i[t]+"n"+Ot.Msg.TEXT_CHARAT2}))},mutationToDom:function(){var t=document.createElement("mutation");t.setAttribute("statement",!this.outputConnection);var e=this.getInput("AT").type==Ot.INPUT_VALUE;return t.setAttribute("at",e),t},domToMutation:function(t){var e="true"==t.getAttribute("statement");this.updateStatement_(e),t="false"!=t.getAttribute("at"),this.updateAt_(t)},updateStatement_:function(t){t!=!this.outputConnection&&(this.unplug(!0,!0),t?(this.setOutput(!1),this.setPreviousStatement(!0),this.setNextStatement(!0)):(this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0)))},updateAt_:function(t){this.removeInput("AT"),this.removeInput("ORDINAL",!0),t?(this.appendValueInput("AT").setCheck(Number),Ot.Msg.TEXT_CHARAT2&&this.appendDummyInput("ORDINAL").appendField(Ot.Msg.TEXT_CHARAT2)):this.appendDummyInput("AT");var e=new Ot.FieldDropdown(this.WHERE_OPTIONS,(function(e){var i="FROM_START"==e||"FROM_END"==e;if(i!=t){var n=this.sourceBlock_;return n.updateAt_(i),n.setFieldValue(e,"WHERE"),null}}));this.getInput("AT").appendField(e,"WHERE"),Ot.Msg.LISTS_GET_INDEX_TAIL&&this.moveInputBefore("TAIL",null)}},We={init:function(){this.setHelpUrl(Ot.Msg.LISTS_GET_INDEX_HELPURL),this.setColour(ye),this.appendValueInput("VAR").setCheck(String),this.appendValueInput("AT").setCheck(Number).appendField(Ot.Msg.LISTS_GET_INDEX_GET+" "+Ot.Msg.LISTS_GET_INDEX_FROM_START),this.appendDummyInput().appendField(Ot.Msg.TEXT_CHARAT2),this.setOutput(!0),this.setTooltip(Ot.Msg.PROCEDURES_DEFRETURN_RETURN+Ot.Msg.MIXLY_MICROBIT_TYPE_STRING+Ot.Msg.LISTS_GET_INDEX_FROM_START+"n"+Ot.Msg.TEXT_CHARAT2)}},Ke={init:function(){this.setHelpUrl(Ot.Msg.LISTS_GET_INDEX_HELPURL),this.setColour(ye),this.appendValueInput("VAR").setCheck(String),this.appendDummyInput().appendField(Ot.Msg.TEXT_RANDOM_CHAR),this.setOutput(!0),this.setTooltip(Ot.Msg.TEXT_RANDOM_CHAR_TOOLTIP)}},Je={init:function(){this.WHERE_OPTIONS_1=[[Ot.Msg.LISTS_GET_INDEX_FROM_START,"FROM_START"],[Ot.Msg.LISTS_GET_INDEX_FROM_END,"FROM_END"],[Ot.Msg.LISTS_GET_SUBLIST_START_FIRST,"FIRST"]],this.WHERE_OPTIONS_2=[[Ot.Msg.LISTS_GET_SUBLIST_END_FROM_START,"FROM_START"],[Ot.Msg.LISTS_GET_SUBLIST_END_FROM_END,"FROM_END"],[Ot.Msg.LISTS_GET_SUBLIST_END_LAST,"LAST"]],this.setHelpUrl(Ot.Msg.LISTS_GET_SUBLIST_HELPURL),this.setColour(ye),this.appendValueInput("VAR").setCheck(String),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET),this.appendDummyInput("AT1"),this.appendDummyInput("AT2"),this.setInputsInline(!0),this.setOutput(!0,"List"),this.updateAt_(1,!0),this.updateAt_(2,!0),this.setTooltip(Ot.Msg._GET_TEXT_SUBLIST_TOOLTIP)},mutationToDom:function(){var t=document.createElement("mutation"),e=this.getInput("AT1").type==Ot.INPUT_VALUE;t.setAttribute("at1",e);var i=this.getInput("AT2").type==Ot.INPUT_VALUE;return t.setAttribute("at2",i),t},domToMutation:function(t){var e="true"==t.getAttribute("at1"),i="true"==t.getAttribute("at2");this.updateAt_(1,e),this.updateAt_(2,i)},updateAt_:function(t,e){this.removeInput("AT"+t),this.removeInput("ORDINAL"+t,!0),e?(this.appendValueInput("AT"+t).setCheck(Number),Ot.Msg.TEXT_CHARAT2&&this.appendDummyInput("ORDINAL"+t).appendField(Ot.Msg.TEXT_CHARAT2)):this.appendDummyInput("AT"+t);var i=new Ot.FieldDropdown(this["WHERE_OPTIONS_"+t],(function(i){var n="FROM_START"==i||"FROM_END"==i;if(n!=e){var s=this.sourceBlock_;return s.updateAt_(t,n),s.setFieldValue(i,"WHERE"+t),null}}));this.getInput("AT"+t).appendField(i,"WHERE"+t),1==t&&(this.moveInputBefore("AT1","AT2"),this.getInput("ORDINAL1")&&this.moveInputBefore("ORDINAL1","AT2"))}},qe={init:function(){this.setHelpUrl(Ot.Msg.LISTS_GET_SUBLIST_HELPURL),this.setColour(ye),this.appendValueInput("VAR").setCheck(String),this.appendValueInput("AT1").appendField(Ot.Msg.LISTS_GET_INDEX_GET+" "+Ot.Msg.LISTS_GET_INDEX_FROM_START),this.appendValueInput("AT2").appendField(Ot.Msg.LISTS_GET_SUBLIST_END_FROM_START),this.appendDummyInput().appendField(Ot.Msg.TEXT_CHARAT2),this.setInputsInline(!0),this.setOutput(!0,["List",String]),this.setTooltip(Ot.Msg._GET_TEXT_SUBLIST_TOOLTIP)}},Qe={init:function(){var t=[[Ot.Msg.MIXLY_EQUALS,"==="],[Ot.Msg.MIXLY_STARTSWITH,"startswith"],[Ot.Msg.MIXLY_ENDSWITH,"endswith"]];this.setColour(ye),this.appendValueInput("STR1").setCheck(String),this.appendValueInput("STR2").appendField(new Ot.FieldDropdown(t),"DOWHAT").setCheck(String),this.setOutput(!0,[Boolean,Number]),this.setInputsInline(!0)}},ze={init:function(){this.setColour(ye),this.appendValueInput("STR1").setCheck(String),this.appendValueInput("STR2").appendField(Ot.Msg.MIXLY_COMPARETO).setCheck(String),this.setOutput(!0,Number),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_COMPARETO_HELP)}},je={init:function(){var t=[[Ot.Msg.TEXT_UPPER,"upper"],[Ot.Msg.TEXT_TITLE,"title"],[Ot.Msg.TEXT_CAPITALIZE,"capitalize"],[Ot.Msg.TEXT_SWAPCASE,"swapcase"],[Ot.Msg.TEXT_LOWER,"lower"]];this.setColour(ye),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET).appendField(new Ot.FieldDropdown(t),"CAPITAL").setCheck(String),this.setOutput(!0,String);var e=this;this.setTooltip((function(){var t=e.getFieldValue("CAPITAL");return{upper:Ot.Msg.MIXLY_MIXPY_TEXT_UPPER_TOOLTIP,title:Ot.Msg.MIXLY_MIXPY_TEXT_TITLE_TOOLTIP,swapcase:Ot.Msg.MIXLY_MIXPY_TEXT_SWAPCASE_TOOLTIP,capitalize:Ot.Msg.MIXLY_MIXPY_TEXT_CAPITALIZE_TOOLTIP,lower:Ot.Msg.MIXLY_MIXPY_TEXT_LOWER_TOOLTIP}[t]}))}},Ze={init:function(){var t=[[Ot.Msg.TEXT_LJUST,"ljust"],[Ot.Msg.TEXT_CENTER,"center"],[Ot.Msg.TEXT_RJUST,"rjust"]];this.setColour(ye),this.appendValueInput("VAR").appendField(new Ot.FieldDropdown(t),"CENTER").setCheck(String),this.appendValueInput("WID").appendField(Ot.Msg.MIXLY_WIDTH).setCheck(Number),this.appendValueInput("Symbol").appendField(Ot.Msg.MIXLY_RECT_Fill).setCheck(String),this.setInputsInline(!0),this.setOutput(!0,String),this.setTooltip(Ot.Msg.MIXLY_MIXPY_TEXT_CENTER_TOOLTIP)}},$e={init:function(){this.setColour(ye),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET).setCheck(String),this.appendValueInput("STR").appendField(Ot.Msg.MIXLY_MID+Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER).setCheck(String),this.appendDummyInput().appendField(Ot.Msg.MIXLY_LIST_INDEX),this.setInputsInline(!0),this.setOutput(!0,String),this.setTooltip(Ot.Msg.MIXLY_MIXPY_TEXT_FIND_TOOLTIP)}},ti={init:function(){this.setColour(ye),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_PYTHON_TEXT_JOIN_SEQ_USE_STR).setCheck(String),this.appendValueInput("LIST").appendField(Ot.Msg.MIXLY_PYTHON_TEXT_JOIN_SEQ_SEQ).setCheck("List","Tuple","Set","Dict"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_PYTHON_TEXT_JOIN_SEQ_GET_STR),this.setInputsInline(!0),this.setOutput(!0,String),this.setTooltip(Ot.Msg.MIXLY_PYTHON_TEXT_JOIN_SEQ_TOOLTIP)}},ei={init:function(){this.setColour(ye),this.appendValueInput("VAR").setCheck(String),this.appendValueInput("STR1").appendField(Ot.Msg.MIXLY_MIXPY_REPLACE).setCheck(String),this.appendValueInput("STR2").appendField(Ot.Msg.LISTS_SET_INDEX_INPUT_TO).setCheck(String),this.setInputsInline(!0),this.setOutput(!0,String),this.setTooltip(Ot.Msg.MIXLY_MIXPY_TEXT_REPLACE_TOOLTIP)}},ii={init:function(){this.setColour(ye),this.appendValueInput("VAR"),this.appendValueInput("VAL").appendField(Ot.Msg.LIST_SPLIT_AS),this.appendDummyInput("").appendField(Ot.Msg.LIST_SPLIT),this.setOutput(!0,"List"),this.setTooltip(Ot.Msg.MIXLY_MIXPY_TEXT_SPLIT_TOOLTIP),this.setInputsInline(!0)}},ni={init:function(){var t=[[Ot.Msg.TEXT_TRIM_BOTH,"strip"],[Ot.Msg.TEXT_TRIM_LEFT,"lstrip"],[Ot.Msg.TEXT_TRIM_RIGHT,"rstrip"]];this.setColour(ye),this.appendValueInput("VAR"),this.appendDummyInput("").appendField(Ot.Msg.TEXT_STRIM),this.appendDummyInput("").appendField(new Ot.FieldDropdown(t),"TOWHAT"),this.appendDummyInput("").appendField(Ot.Msg.TEXT_BLANK),this.setOutput(!0,String),this.setInputsInline(!0);var e=this;this.setTooltip((function(){var t=e.getFieldValue("TOWHAT");return{strip:Ot.Msg.TEXT_TRIM_BOTH_TOOLTIP,lstrip:Ot.Msg.TEXT_TRIM_LEFT_TOOLTIP,rstrip:Ot.Msg.TEXT_TRIM_RIGHT_TOOLTIP}[t]}))}},si={init:function(){this.setColour(ye),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MICROPYTHON_FORMAT),this.appendDummyInput("").appendField(new Ot.FieldTextInput("str"),"VAR"),this.itemCount_=1,this.updateShape_(),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setInputsInline(!0),this.setMutator(new Ot.icons.MutatorIcon(["text_create_with_item"],this)),this.setOutput(!0),this.setTooltip(Ot.Msg.MIXLY_MIXPY_TEXT_FORMAT_TOOLTIP)},mutationToDom:function(){var t=document.createElement("mutation");return t.setAttribute("items",this.itemCount_),t},domToMutation:function(t){this.itemCount_=parseInt(t.getAttribute("items"),10),this.updateShape_()},decompose:function(t){var e=t.newBlock("text_create_with_container");e.initSvg();for(var i=e.getInput("STACK").connection,n=0;ne?t[e]:0==e?'"key"':'"key'+(e+1)+'"'),"KEY"+e).appendField(":")}},getVars:function(){return[this.getFieldValue("VAR")]},renameVar:function(t,e){Ot.Names.equals(t,this.getFieldValue("VAR"))&&this.setTitleValue(e,"VAR")}},tn={init:function(){this.setColour(Zi),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_TYPE_DICT),this.appendStatementInput("STACK"),this.setTooltip(Ot.Msg.DICTS_CREATE_WITH_CONTAINER_TOOLTIP),this.contextMenu=!1}},en={init:function(){this.setColour(Zi),this.appendDummyInput().appendField(Ot.Msg.DICTS_CREATE_WITH_ITEM_TITLE),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.DICTS_CREATE_WITH_ITEM_TOOLTIP),this.contextMenu=!1}},nn={init:function(){this.setColour(Zi),this.appendValueInput("DICT").setCheck("Dict"),this.appendDummyInput("").appendField(Ot.Msg.DICT_KEYS),this.setTooltip(Ot.Msg.DICTS_KEYS_TOOLTIP),this.setOutput(!0,"List")}},sn={init:function(){this.setColour(Zi),this.appendValueInput("DICT").setCheck("Dict"),this.appendValueInput("KEY").appendField(Ot.Msg.DICTS_GET_IN),this.appendDummyInput("").appendField(Ot.Msg.DICTS_ADD_VALUE),this.setOutput(!0),this.setTooltip(Ot.Msg.DICTS_GET_TOOLTIP)}},_n={init:function(){this.setColour(Zi),this.appendValueInput("DICT").setCheck("Dict"),this.appendValueInput("KEY").appendField(Ot.Msg.DICTS_GET_IN),this.appendDummyInput("").appendField(Ot.Msg.DICTS_ADD_VALUE),this.appendValueInput("VAR").appendField(Ot.Msg.DICTS_DEFAULT_VALUE),this.setOutput(!0),this.setTooltip(Ot.Msg.DICTS_GET_DEFAULT_TOOLTIP)}},on={init:function(){this.setColour(Zi),this.appendValueInput("DICT"),this.appendValueInput("KEY").appendField(Ot.Msg.DICTS_ADD),this.appendDummyInput(),this.appendValueInput("VAR").appendField(Ot.Msg.DICTS_ADD_VALUE),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.DICTS_ADD_OR_CHANGE_TOOLTIP)}},pn={init:function(){this.setColour(Zi),this.appendValueInput("DICT"),this.appendValueInput("KEY").appendField(Ot.Msg.DICTS_DELETE_IN),this.appendDummyInput("").appendField(Ot.Msg.DICTS_DELETE_VALUE),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.DICTS_DELETE_TOOLTIP)}},an={init:function(){this.setColour(Zi),this.appendValueInput("DICT2").setCheck("Dict").appendField(Ot.Msg.MAKE_DICT),this.appendValueInput("DICT").setCheck("Dict").appendField(Ot.Msg.DICT_UPDATE),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MID),this.setTooltip(Ot.Msg.DICTS_UPDATE_TOOLTIP),this.setPreviousStatement(!0),this.setNextStatement(!0)}},un={init:function(){this.setColour(Zi),this.appendValueInput("DICT").setCheck("Dict"),this.appendDummyInput("").appendField(Ot.Msg.DICT_CLEAR),this.setTooltip(Ot.Msg.DICTS_CLEAR_TOOLTIP),this.setPreviousStatement(!0),this.setNextStatement(!0)}},rn={init:function(){this.setColour(Zi),this.appendValueInput("DICT").setCheck("Dict"),this.appendDummyInput("").appendField(Ot.Msg.DICT_ITEMS),this.setTooltip(Ot.Msg.DICTS_ITEMS_TOOLTIP),this.setOutput(!0,"List")}},ln={init:function(){this.setColour(Zi),this.appendValueInput("DICT").setCheck("Dict"),this.appendDummyInput("").appendField(Ot.Msg.DICT_VALUES),this.setTooltip(Ot.Msg.DICTS_VALUES_TOOLTIP),this.setOutput(!0,"List")}},dn={init:function(){this.setColour(Zi),this.appendValueInput("DICT").setCheck("Dict"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_LENGTH),this.setTooltip(Ot.Msg.DICT_LENGTH_TOOLTIP),this.setOutput(!0,Number)}},In={init:function(){this.setColour(Zi),this.appendValueInput("DICT").setCheck("Dict"),this.appendDummyInput("").appendField(Ot.Msg.DICT_DELDICT),this.setTooltip(Ot.Msg.DICTS_DEL_TOOLTIP),this.setPreviousStatement(!0),this.setNextStatement(!0)}},Tn={init:function(){this.MODE=[[Ot.Msg.DICTS_ADD_OR_CHANGE,"INSERT"],[Ot.Msg.MIXLY_MICROBIT_JS_DELETE_VAR,"DELETE"]],this.setHelpUrl(Ot.Msg.LISTS_GET_SUBLIST_HELPURL),this.setColour(Zi),this.appendValueInput("DICT").setCheck("Dict"),this.appendDummyInput("AT2"),this.appendValueInput("KEY"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE).appendField(Ot.Msg.DICTS_ADD_VALUE),this.updateAt_(!0),this.setInputsInline(!0),this.setOutput(!1),this.setPreviousStatement(!0),this.setNextStatement(!0);var t=this;this.setTooltip((function(){var e="";switch(t.getFieldValue("WHERE")){case"INSERT":e=Ot.Msg.DICTS_ADD_TOOLTIP;break;case"DELETE":e=Ot.Msg.DICTS_DELETE_TOOLTIP}return e}))},mutationToDom:function(){var t=document.createElement("mutation"),e=this.getInput("AT2").type==Ot.INPUT_VALUE;return t.setAttribute("at2",e),t},domToMutation:function(t){var e="true"==t.getAttribute("at2");this.updateAt_(e)},updateAt_:function(t){this.removeInput("AT2"),this.removeInput("ORDINAL",!0),t?this.appendValueInput("AT2").setCheck(Number):this.appendDummyInput("AT2");var e=new Ot.FieldDropdown(this.MODE,(function(e){var i="INSERT"==e;if(i!=t){var n=this.sourceBlock_;return n.updateAt_(i),n.setFieldValue(e,"WHERE"),null}}));this.getInput("AT2").appendField(e,"WHERE")}},Mn={init:function(){this.setColour(Zi),this.appendValueInput("DICT").setCheck("Dict"),this.appendDummyInput("").appendField(Ot.Msg.blockpy_DICT_POP),this.appendValueInput("KEY"),this.appendDummyInput("").appendField(Ot.Msg.DICTS_ADD_VALUE),this.setTooltip(Ot.Msg.DICT_POP_TOOLTIP),this.setInputsInline(!0),this.setOutput(!0)}},hn={init:function(){this.setColour(Zi),this.appendValueInput("DICT").setCheck("Dict"),this.appendValueInput("KEY").appendField(Ot.Msg.DICTS_SET_DEFAULT),this.appendDummyInput("").appendField(Ot.Msg.DICTS_DEFAULT_VALUE),this.appendValueInput("VAR"),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.DICTS_SETDEFAULT_TOOLTIP)}},mn={init:function(){this.setColour(Zi),this.appendDummyInput("").appendField(new Ot.FieldLabel(Ot.Msg.MIXLY_MICROBIT_TYPE_DICT),"TIP").appendField(" "),this.itemCount_=3,this.updateShape_(),this.setOutput(!0,"Dict"),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setMutator(new Ot.icons.MutatorIcon(["dicts_create_with_item"],this)),this.setTooltip(Ot.Msg.DICTS_CREATE_WITH_TOOLTIP)},mutationToDom:function(){var t=document.createElement("mutation");return t.setAttribute("items",this.itemCount_),t},domToMutation:function(t){this.itemCount_=parseInt(t.getAttribute("items"),10),this.updateShape_()},decompose:function(t){var e=t.newBlock("dicts_create_with_container");e.initSvg();for(var i=e.getInput("STACK").connection,n=0;ne?t[e]:0==e?'"key"':'"key'+(e+1)+'"'),"KEY"+e).appendField(":")}},getVars:function(){return[this.getFieldValue("VAR")]},renameVar:function(t,e){Ot.Names.equals(t,this.getFieldValue("VAR"))&&this.setTitleValue(e,"VAR")}},En={init:function(){this.setColour(Zi),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_TODICT),this.setOutput(!0),this.setTooltip(Ot.Msg.MIXLY_PYTHON_TOOLTIP_TODICT)}},On={init:function(){this.setColour(Zi),this.appendValueInput("DICT").setCheck("Dict"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_TO_JSON),this.setTooltip(Ot.Msg.MIXLY_TO_JSON_TOOLTIP),this.setOutput(!0)}},Rn={init:function(){this.setColour(Zi),this.appendValueInput("VAR"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_CONVERT_TO_JSON),this.setTooltip(Ot.Msg.MIXLY_CONVERT_TO_JSON_TOOLTIP),this.setOutput(!0)}},cn={init:function(){this.setColour(Zi),this.appendValueInput("DICT").setCheck("Dict"),this.appendValueInput("VAR1").appendField("key1"),this.appendValueInput("VAR2").appendField("index"),this.appendValueInput("VAR3").appendField("key2"),this.appendValueInput("VAR4").appendField("key3"),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_CONVERT_TO_JSON_TOOLTIP),this.setOutput(!0)}},gn={init:function(){this.setColour(Zi),this.appendValueInput("DICT"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_TO_JSON),this.setTooltip(Ot.Msg.MIXLY_TO_JSON_TOOLTIP),this.setOutput(!0)}},Cn=210,Sn={init:function(){var t=Ot.RTL?[["=","EQ"],["≠","NEQ"],[">","LT"],["≥","LTE"],["<","GT"],["≤","GTE"]]:[["=","EQ"],["≠","NEQ"],["<","LT"],["≤","LTE"],[">","GT"],["≥","GTE"]];this.setColour(Cn),this.setOutput(!0,Boolean),this.appendValueInput("A"),this.appendValueInput("B").appendField(new Ot.FieldDropdown(t),"OP"),this.setInputsInline(!0);var e=this;this.setTooltip((function(){var t=e.getFieldValue("OP");return{EQ:Ot.Msg.LOGIC_COMPARE_TOOLTIP_EQ,NEQ:Ot.Msg.LOGIC_COMPARE_TOOLTIP_NEQ,LT:Ot.Msg.LOGIC_COMPARE_TOOLTIP_LT,LTE:Ot.Msg.LOGIC_COMPARE_TOOLTIP_LTE,GT:Ot.Msg.LOGIC_COMPARE_TOOLTIP_GT,GTE:Ot.Msg.LOGIC_COMPARE_TOOLTIP_GTE}[t]})),this.prevBlocks_=[null,null]}},Ln={init:function(){var t=Ot.RTL?[[">","LT"],["≥","LTE"],["<","GT"],["≤","GTE"]]:[["<","LT"],["≤","LTE"],[">","GT"],["≥","GTE"]],e=Ot.RTL?[[">","LT"],["≥","LTE"],["<","GT"],["≤","GTE"]]:[["<","LT"],["≤","LTE"],[">","GT"],["≥","GTE"]];this.setColour(Cn),this.setOutput(!0,Boolean),this.appendValueInput("A"),this.appendValueInput("B").appendField(new Ot.FieldDropdown(t),"OP1"),this.appendValueInput("C").appendField(new Ot.FieldDropdown(e),"OP2"),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_PYTHON_LOGIC_COMPARE_CONTINOUS_TOOLTIP)}},An={init:function(){var t=[[Ot.Msg.LOGIC_OPERATION_AND,"AND"],[Ot.Msg.LOGIC_OPERATION_OR,"OR"],[Ot.Msg.LOGIC_OPERATION_NOR,"NOR"],[Ot.Msg.LOGIC_OPERATION_XOR,"XOR"]];this.setColour(Cn),this.setOutput(!0,Boolean),this.appendValueInput("A").setCheck([Boolean,Number]),this.appendValueInput("B").setCheck([Boolean,Number]).appendField(new Ot.FieldDropdown(t),"OP"),this.setInputsInline(!0);var e=this;this.setTooltip((function(){var t=e.getFieldValue("OP");return{AND:Ot.Msg.LOGIC_OPERATION_TOOLTIP_AND,OR:Ot.Msg.LOGIC_OPERATION_TOOLTIP_OR,NOR:Ot.Msg.LOGIC_OPERATION_TOOLTIP_NOR,XOR:Ot.Msg.LOGIC_OPERATION_TOOLTIP_XOR}[t]}))}},Nn={init:function(){this.setColour(Cn),this.setOutput(!0,Boolean),this.appendValueInput("BOOL").setCheck([Number,Boolean]).appendField(Ot.Msg.LOGIC_NEGATE_TITLE),this.setTooltip(Ot.Msg.LOGIC_NEGATE_TOOLTIP)}},Dn={init:function(){var t=[[Ot.Msg.LOGIC_BOOLEAN_TRUE,"TRUE"],[Ot.Msg.LOGIC_BOOLEAN_FALSE,"FALSE"]];this.setColour(Cn),this.setOutput(!0,Boolean),this.appendDummyInput().appendField(new Ot.FieldDropdown(t),"BOOL"),this.setTooltip(Ot.Msg.LOGIC_BOOLEAN_TOOLTIP)}},fn={init:function(){this.setColour(Cn),this.setOutput(!0),this.appendDummyInput().appendField(Ot.Msg.LOGIC_NULL),this.setTooltip(Ot.Msg.LOGIC_NULL_TOOLTIP)}},Fn={init:function(){this.setColour(Cn),this.appendValueInput("A"),this.appendValueInput("B").appendField(Ot.Msg.LOGIC_TERNARY_IF_TRUE),this.appendValueInput("C").appendField(Ot.Msg.LOGIC_TERNARY_IF_FALSE),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_LOGIT_TRUEORFALSE)}},Pn={init:function(){var t=[[Ot.Msg.TEXT_APPEND_TO,"in"],[Ot.Msg.MIXLY_PYTHON_LOGIC_IS_NOT_IN,"not in"]];this.setColour(Cn),this.appendValueInput("A"),this.appendValueInput("B").setCheck([String,"List"]).appendField(new Ot.FieldDropdown(t),"BOOL"),this.appendDummyInput("").appendField(Ot.Msg.MICROBIT_LOGIC_IS_IN),this.setOutput(!0,Boolean),this.setInputsInline(!0),this.setTooltip(Ot.Msg.IN)}},Yn={init:function(){var t=[[Ot.Msg.MIXLY_PYTHON_LOGIC_IS,"is"],[Ot.Msg.MIXLY_PYTHON_LOGIC_IS_NOT,"is not"]];this.setColour(Cn),this.appendValueInput("A"),this.appendValueInput("B").appendField(new Ot.FieldDropdown(t),"BOOL"),this.setOutput(!0,Boolean),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_PYTHON_LOGIC_IS_TOOLTIP)}},vn={init:function(){this.setColour(Cn),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_TOBOOL),this.setOutput(!0,Boolean),this.setTooltip(Ot.Msg.MIXLY_PYTHON_TOOLTIP_TOBOOL)}},Xn={init:function(){this.setColour(0),this.appendValueInput("fn").setCheck(String).appendField(Ot.Msg.MIXLY_PYTHON_STORAGE_OPEN_FILE_WITH_OS+"(For Windows)"),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0)}},yn={init:function(){this.setColour(0),this.appendValueInput("FILENAME").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_READ,"r"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE,"w"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ,"rb"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE,"wb"]]),"MODE"),this.appendValueInput("FILE").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_AS),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("MODE"),i=Ot.Msg.MIXLY_USE,n=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE,s=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE,_=Ot.Msg.MIXLY_BELONG;return i+{r:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_READ,w:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE,rb:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ,wb:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE}[e]+_+n+s}))},getVars:function(){return[this.getFieldValue("VAR")]},renameVar:function(t,e){Ot.Names.equals(t,this.getFieldValue("VAR"))&&this.setTitleValue(e,"VAR")}},xn={init:function(){this.setColour(0),this.appendValueInput("FILENAME").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_READ,"r"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE,"w"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ,"rb"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE,"wb"]]),"MODE"),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setInputsInline(!0),this.setOutput(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("MODE"),i=Ot.Msg.MIXLY_USE,n=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE,s=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE,_=Ot.Msg.MIXLY_BELONG,o=Ot.Msg.PY_STORAGE_FILE_OBJECT;return i+{r:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_READ,w:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE,rb:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ,wb:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE}[e]+_+n+s+o}))}},bn={init:function(){this.setColour(0),this.appendValueInput("FILENAME").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE);this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_READ,"r"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE,"w"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ,"rb"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE,"wb"]]),"MODE"),this.appendDummyInput().appendField(Ot.Msg.MIXPY_TEXT_ENCODE).appendField(new Ot.FieldDropdown([["ANSI","ANSI"],["gbk","gbk"],["utf-8","utf-8"]]),"CODE"),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setInputsInline(!0),this.setOutput(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("MODE"),i=Ot.Msg.MIXLY_USE,n=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE,s=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE,_=Ot.Msg.MIXLY_BELONG,o=Ot.Msg.PY_STORAGE_FILE_OBJECT;return i+{r:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_READ,w:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE,rb:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ,wb:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE}[e]+_+n+s+o}))}},Vn={init:function(){this.setColour(0),this.appendValueInput("data").setCheck(String).appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE),this.appendValueInput("FILE").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_WRITE),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE+Ot.Msg.MIXLY_MICROBIT_TYPE_STRING+Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_WRITE)}},Bn={init:function(){this.setColour(0),this.appendValueInput("FILE").setCheck("Variable").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FROM_FILE),this.appendDummyInput().appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL,"read"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_ONE_LINE,"readline"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL_LINES,"readlines"]]),"MODE"),this.setInputsInline(!0),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0,String)}},Gn={init:function(){this.setColour(0),this.appendValueInput("FILE").setCheck("Variable").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FROM_FILE),this.appendDummyInput().appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_NO_MORE_THAN_SIZE,"read"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_ONE_LINE_NO_MORE_THAN_SIZE,"readline"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL_LINES_NO_MORE_THAN_SIZE,"readlines"]]),"MODE"),this.appendValueInput("SIZE").setCheck(Number),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER),this.setInputsInline(!0),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0,String);var t=this;this.setTooltip((function(){var e=t.getFieldValue("MODE"),i=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FROM_FILE,n=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER;return i+{read:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_NO_MORE_THAN_SIZE,readline:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_ONE_LINE_NO_MORE_THAN_SIZE,readlines:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL_LINES_NO_MORE_THAN_SIZE}[e]+"x"+n}))}},Un={init:function(){this.setColour(0),this.appendValueInput("FILE").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FROM_FILE),this.setNextStatement(!0),this.appendValueInput("SIZE").setCheck(Number).appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_ONE_LINE_NO_MORE_THAN_SIZE),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER),this.setInputsInline(!0),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0,String),this.setTooltip(Ot.Msg.MICROBIT_PYTHON_TYPE)}},wn={init:function(){this.setColour(0),this.appendValueInput("FILE").appendField(Ot.Msg.HTML_FILE),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_CAN_WRITE_ORNOT),this.setInputsInline(!0),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0,Boolean),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_CAN_WRITE_ORNOT1)}},kn={init:function(){this.setColour(0),this.appendValueInput("FILE").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FILENAME),this.setInputsInline(!0),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0,String),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_FILENAME)}},Hn={init:function(){this.setColour(0),this.appendValueInput("FILE").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_CLOSE_FILE),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setOutput(!1),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_CLOSE_FILE)}},Wn={init:function(){this.setColour(0),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_LIST_ALL_FILES),this.setInputsInline(!0),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0,"List"),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_LIST_ALL_FILES)}};Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_DELETE_FILE;const Kn={init:function(){this.setColour(0),this.appendDummyInput().appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_DELETE_FILE,"remove"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_DELETE_DIRS,"removedirs"]]),"MODE"),this.appendValueInput("FILE").setCheck(String),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setOutput(!1),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_DELETE_FILE)}},Jn={init:function(){this.setColour(0),this.appendValueInput("FILE").setCheck(String).appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_FILE_SIZE),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_SIZE),this.setInputsInline(!0),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0,Number),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_FILE_SIZE+Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_SIZE)}},qn={init:function(){this.setColour(0),this.appendValueInput("FILE").setCheck(String).appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_RETURN_FILE),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_PRESENT_LOCATION),this.setInputsInline(!0),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0,Number),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_TELL)}},Qn={init:function(){this.setColour(0),this.appendValueInput("FILE").setCheck("Variable").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_SET_FILE_POSITION),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_CURRENT_POSITION),this.appendDummyInput().appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_START,"start"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_CURRENT,"current"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_END,"end"]]),"MODE"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_OFFSET),this.appendValueInput("SIZE").setCheck(Number),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("MODE"),i=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_SET_FILE_POSITION+Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_CURRENT_POSITION,n=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER,s=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_OFFSET;return i+" "+{start:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_START,current:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_CURRENT,end:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_END}[e]+s+"x"+n}))}},zn={init:function(){this.setColour(0),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_CURRENT_DIR),this.setInputsInline(!0),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0,"List"),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_CURRENT_DIR)}},jn={init:function(){this.setColour(0),this.appendValueInput("PATH").setCheck(String).appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_PATH),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_SET),this.appendDummyInput().appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_MKDIR,"mkdir"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_MAKEDIRS,"makedirs"]]),"MODE"),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setOutput(!1);var t=this;this.setTooltip((function(){var e=t.getFieldValue("MODE");return Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_PATH+"x"+Ot.Msg.MIXLY_ESP32_SET+{mkdir:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_MKDIR,makedirs:Ot.Msg.MIXLY_MICROPYTHON_SOCKET_MAKEDIRS}[e]}))}},Zn={init:function(){this.setColour(0),this.appendValueInput("FILE").setCheck(String).appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_RENAME),this.appendValueInput("NEWFILE").setCheck(String).appendField(Ot.Msg.MIXLY_AS),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setOutput(!1),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_RENAME)}},$n={init:function(){this.setColour(0),this.appendValueInput("FILE").setCheck(String).appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_CHANGE_DIR),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setOutput(!1),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_CHANGE_DIR)}},ts={init:function(){this.setColour(0),this.appendValueInput("FILE").setCheck(String).appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_IS_OR_NOT),this.appendDummyInput().appendField(new Ot.FieldDropdown([[Ot.Msg.HTML_FILE,"isfile"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_IS_DIR,"isdir"]]),"MODE"),this.setInputsInline(!0),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0,Boolean);let t=this;this.setTooltip((function(){var e=t.getFieldValue("MODE");return Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH+"x"+Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_IS_OR_NOT+{isfile:Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_MKDIR,isdir:Ot.Msg.MIXLY_MICROPYTHON_SOCKET_MAKEDIRS}[e]}))}},es={init:function(){this.setColour(0),this.appendValueInput("SPISUB").appendField(Ot.Msg.CONTROLS_FOR_INPUT_WITH+"SPI").setCheck("var"),this.appendValueInput("PINSUB").appendField("CS"),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE).setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_SETUP+Ot.Msg.LISTS_SET_INDEX_INPUT_TO).appendField(Ot.Msg.MIXLY_SD_CARD),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null)}},is={init:function(){this.setColour(0),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_SD_CARD),this.appendValueInput("DIR").setCheck(String).appendField(Ot.Msg.MIXLY_SDCARD_MOUNT),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip()}},ns={};ns.NAME_TYPE=Ot.PROCEDURE_CATEGORY_NAME,ns.allProcedures=function(t){for(var e=t.getAllBlocks(!1),i=[],n=[],s=0;s"),this.appendValueInput("style").appendField(Ot.Msg.MIXLY_AIP_ATTR).setAlign(Ot.inputs.Align.RIGHT),this.appendStatementInput("DO").appendField(""),this.setInputsInline(!1),this.setPreviousStatement(!0),this.setNextStatement(!0)}},Zs={init:function(){this.setColour(Ks),this.appendDummyInput().appendField(Ot.Msg.HTML_STYLE),this.appendStatementInput("STYLE"),this.setOutput(!0)}},$s={init:function(){this.setColour(Ks),this.appendDummyInput().appendField(Ot.Msg.HTML_FORM_CONTENT).appendField(new Ot.FieldDropdown([[Ot.Msg.HTML_TEXT,"text"],[Ot.Msg.HTML_EMAIL,"email"],[Ot.Msg.HTML_NUMBER,"number"],[Ot.Msg.HTML_PASSWORD,"password"],[Ot.Msg.HTML_CHECKBOX,"checkbox"],[Ot.Msg.HTML_RADIOBUTTON,"radiobutton"],[Ot.Msg.HTML_BUTTON,"button"],[Ot.Msg.HTML_COLOUR,"colour"],[Ot.Msg.HTML_DATE,"date"],[Ot.Msg.HTML_LOCALTIME,"local time"],[Ot.Msg.HTML_FILE,"file"],[Ot.Msg.HTML_HIDDEN,"hidden"],[Ot.Msg.HTML_IMAGE,"image"],[Ot.Msg.HTML_MONTH,"month"],[Ot.Msg.HTML_RANGE,"range"],[Ot.Msg.HTML_RESET,"reset"],[Ot.Msg.HTML_SEARCH,"search"],[Ot.Msg.HTML_SUBMIT,"submit"],[Ot.Msg.HTML_TELEPHONENUMBER,"telephone number"],[Ot.Msg.HTML_TIME,"time"],[Ot.Msg.HTML_URL,"url"],[Ot.Msg.HTML_WEEK,"week"]]),"LEVEL"),this.appendDummyInput().appendField(Ot.Msg.HTML_NAME).appendField(new Ot.FieldTextInput("car"),"NAME"),this.appendDummyInput().appendField(Ot.Msg.HTML_VALUE).appendField(new Ot.FieldTextInput("go"),"VALUE"),this.appendValueInput("style").appendField(Ot.Msg.MIXLY_AIP_ATTR).setAlign(Ot.inputs.Align.RIGHT),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},t_={init:function(){this.setColour(Ks),this.appendDummyInput().appendField(new Ot.FieldTextInput("property"),"KEY").appendField(":").appendField(new Ot.FieldTextInput("value"),"VALUE"),this.setPreviousStatement(!0),this.setNextStatement(!0)}},e_={init:function(){this.setColour(Ks),this.appendDummyInput().appendField(new Ot.FieldTextInput("property"),"KEY").appendField(":").appendField(new Ot.FieldColour("#ff0000"),"RGB_LED_COLOR"),this.setPreviousStatement(!0),this.setNextStatement(!0)}},i_={init:function(){this.setColour(Ks),this.appendDummyInput().appendField(Ot.Msg.HTML_TEXT).appendField(new Ot.FieldTextInput("text"),"TEXT"),this.setPreviousStatement(!0),this.setNextStatement(!0)}},n_=160,s_={init:function(){this.setColour(n_),this.setPreviousStatement(!0),this.setNextStatement(!0),this.appendDummyInput().appendField("Tabular Abstraction:"),this.appendDummyInput().appendField(new Ot.FieldTable(""),"TEXT")}},__={init:function(){this.setColour(n_),this.setPreviousStatement(!0),this.setNextStatement(!0),this.appendDummyInput().appendField("Code Block:"),this.appendDummyInput().appendField(new Ot.FieldMultilineInput(""),"TEXT")}},o_={init:function(){this.setColour(n_),this.appendDummyInput().appendField("Code Expression:"),this.appendDummyInput().appendField(new Ot.FieldMultilineInput(""),"TEXT"),this.setOutput(!0)}},p_={init:function(){this.setColour(n_),this.setPreviousStatement(!0),this.setNextStatement(!0),this.appendValueInput("VALUE").appendField(""),this.setInputsInline(!1)}},a_={init:function(){this.setColour(n_),this.appendDummyInput().appendTitle("Comment:").appendTitle(new Ot.FieldTextInput(""),"TEXT"),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip("This comment will be ignored by Python")}},u_={init:function(){this.setColour(n_),this.appendValueInput("VALUE").appendField(Ot.Msg.TYPE_CHECK),this.setInputsInline(!1),this.setOutput(!0,"Type")}},r_={init:function(){this.setColour(n_),this.itemCount_=1,this.updateShape_(),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setMutator(new Ot.icons.MutatorIcon(["text_print_multiple_item"],this)),this.setTooltip(Ot.Msg.TEXT_PRINT_TOOLTIP)},mutationToDom:function(){var t=document.createElement("mutation");return t.setAttribute("items",this.itemCount_),t},domToMutation:function(t){this.itemCount_=parseInt(t.getAttribute("items"),10),this.updateShape_()},decompose:function(t){var e=Ot.Block.obtain(t,"text_print_multiple_container");e.initSvg();for(var i=e.getInput("STACK").connection,n=0;n= stop:"," yield start"," start -= abs(step)"])};if(t=function(t,e,i){return"("+t+" <= "+e+") and "+a()+"("+t+", "+e+", "+i+") or "+u()+"("+t+", "+e+", "+i+")"},Ot.isNumber(n)&&Ot.isNumber(s)&&Ot.isNumber(_))n=parseFloat(n),s=parseFloat(s),_=Math.abs(parseFloat(_)),0==n%1&&0==s%1&&0==_%1?(n<=s?(s++,t=0==n&&1==_?s:n+", "+s,1!=_&&(t+=", "+_)):t=n+", "+--s+", -"+_,t="range("+t+")"):(t=n",GTE:">="};const na=function(t,e){var i=this.getFieldValue("OP"),n="&&"==i?e.ORDER_LOGICAL_AND:e.ORDER_LOGICAL_OR,s=e.valueToCode(this,"A",n)||"False",_=e.valueToCode(this,"B",n)||"False";if("AND"==i)var o=s+" and "+_;else if("OR"==i)o=s+" or "+_;else if("NOR"==i)o="not("+s+"^"+_+")";else o=s+"^"+_;return[o,n]},sa=function(t,e){var i=e.ORDER_UNARY_PREFIX;return["not "+(e.valueToCode(this,"BOOL",i)||"False"),i]},_a=function(t,e){return["TRUE"==this.getFieldValue("BOOL")?"True":"False",e.ORDER_ATOMIC]},oa=function(t,e){return["None",e.ORDER_ATOMIC]},pa=function(t,e){var i=e.valueToCode(this,"A",e.ORDER_ATOMIC)||"False";return["("+(e.valueToCode(this,"B",e.ORDER_ATOMIC)||"False")+" if "+i+" else "+(e.valueToCode(this,"C",e.ORDER_ATOMIC)||"False")+")",e.ORDER_ATOMIC]},aa=function(t,e){var i=e.valueToCode(this,"A",e.ORDER_ATOMIC)||"''",n=e.valueToCode(this,"B",e.ORDER_ATOMIC)||"''";return[i+" "+this.getFieldValue("BOOL")+" "+n,e.ORDER_ATOMIC]},ua=function(t,e){var i=e.valueToCode(this,"A",e.ORDER_ATOMIC)||"''",n=e.valueToCode(this,"B",e.ORDER_ATOMIC)||"''";return[i+" "+this.getFieldValue("BOOL")+" "+n,e.ORDER_ATOMIC]},ra=function(t,e){return["bool("+(e.valueToCode(this,"VAR",e.ORDER_ATOMIC)||"0")+")",e.ORDER_ATOMIC]},la=function(t,e){return e.definitions_.import_os="import os","os.startfile("+e.valueToCode(this,"fn",e.ORDER_ATOMIC)+")\n"},da=function(t,e){return e.valueToCode(this,"FILE",e.ORDER_ATOMIC)+" = open("+e.valueToCode(this,"FILENAME",e.ORDER_ATOMIC)+", '"+this.getFieldValue("MODE")+"')\n"},Ia=function(t,e){return["open("+e.valueToCode(this,"FILENAME",e.ORDER_ATOMIC)+", '"+this.getFieldValue("MODE")+"')",e.ORDER_ATOMIC]},Ta=function(t,e){return["open("+e.valueToCode(this,"FILENAME",e.ORDER_ATOMIC)+", '"+this.getFieldValue("MODE")+"', encoding=\""+this.getFieldValue("CODE")+'")',e.ORDER_ATOMIC]},Ma=function(t,e){var i=e.valueToCode(this,"data",e.ORDER_ATOMIC);return e.valueToCode(this,"FILE",e.ORDER_ATOMIC)+".write("+i+")\n"},ha=function(t,e){var i=this.getFieldValue("MODE");return[e.valueToCode(this,"FILE",e.ORDER_ATOMIC)+"."+i+"()",e.ORDER_ATOMIC]},ma=function(t,e){var i=this.getFieldValue("MODE");return[e.valueToCode(this,"FILE",e.ORDER_ATOMIC)+"."+i+"("+e.valueToCode(this,"SIZE",e.ORDER_ATOMIC)+")",e.ORDER_ATOMIC]},Ea=function(t,e){return[e.valueToCode(this,"FILE",e.ORDER_ATOMIC)+".readline("+e.valueToCode(this,"SIZE",e.ORDER_ATOMIC)+")",e.ORDER_ATOMIC]},Oa=function(t,e){return[e.valueToCode(this,"FILE",e.ORDER_ATOMIC)+".writable()",e.ORDER_ATOMIC]},Ra=function(t,e){return[e.valueToCode(this,"FILE",e.ORDER_ATOMIC)+".name()",e.ORDER_ATOMIC]},ca=function(t,e){return e.valueToCode(this,"FILE",e.ORDER_ATOMIC)+".close()\n"},ga=function(t,e){e.definitions_.import_os="import os";return["os.listdir()",e.ORDER_ATOMIC]},Ca=function(t,e){return e.definitions_.import_os="import os","os."+this.getFieldValue("MODE")+"("+e.valueToCode(this,"FILE",e.ORDER_ATOMIC)+")\n"},Sa=function(t,e){return e.definitions_.import_os="import os",["os.path.getsize("+e.valueToCode(this,"FILE",e.ORDER_ATOMIC)+")",e.ORDER_ATOMIC]},La=function(t,e){return[e.valueToCode(this,"FILE",e.ORDER_ATOMIC)+".tell()",e.ORDER_ATOMIC]},Aa=function(t,e){var i=this.getFieldValue("MODE"),n=0;return n="start"==i?0:"current"==i?1:2,e.valueToCode(this,"FILE",e.ORDER_ATOMIC)+".seek("+e.valueToCode(this,"SIZE",e.ORDER_ATOMIC)+","+n+")\n"},Na=function(t,e){return e.definitions_.import_os="import os","os.chdir("+e.valueToCode(this,"FILE",e.ORDER_ATOMIC)+")\n"},Da=function(t,e){e.definitions_.import_os="import os";return["os.getcwd()",e.ORDER_ATOMIC]},fa=function(t,e){return e.definitions_.import_os="import os","os."+this.getFieldValue("MODE")+"("+e.valueToCode(this,"PATH",e.ORDER_ATOMIC)+")\n"},Fa=function(t,e){return e.definitions_.import_os="import os","os.rename("+e.valueToCode(this,"FILE",e.ORDER_ATOMIC)+","+e.valueToCode(this,"NEWFILE",e.ORDER_ATOMIC)+")\n"},Pa=function(t,e){e.definitions_.import_os="import os";var i=e.valueToCode(this,"FILE",e.ORDER_ATOMIC);return["os."+this.getFieldValue("MODE")+"("+i+")",e.ORDER_ATOMIC]},Ya=function(t,e){return e.definitions_.import_os="import os",e.definitions_.import_sdcard="import sdcard",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+" = sdcard.SDCard("+e.valueToCode(this,"SPISUB",e.ORDER_ATOMIC)+","+e.valueToCode(this,"PINSUB",e.ORDER_ATOMIC)+")\n"},va=function(t,e){return e.definitions_.import_os="import os",e.definitions_.import_sdcard="import sdcard","os.mount("+e.valueToCode(this,"VAR",e.ORDER_ATOMIC)+","+e.valueToCode(this,"DIR",e.ORDER_ATOMIC)+")\n"},Xa=function(t,e){var i=e.variableDB_.getName(this.getFieldValue("NAME"),Ot.Procedures.NAME_TYPE),n=(this.getInput("STACK")&&e.statementToCode(this,"STACK"))??" pass\n";e.INFINITE_LOOP_TRAP&&(n=e.INFINITE_LOOP_TRAP.replace(/%1/g,"'"+this.id+"'")+n);var s=e.valueToCode(this,"RETURN",e.ORDER_NONE)||"";s&&(s=" return "+s+"\n");for(var _=[],o=0;o\n\n\n\t\n"+e.statementToCode(this,"HEAD")+"\n\n"+e.statementToCode(this,"BODY")+"\n\n'''",e.ORDER_ATOMIC]},Tu=function(t,e){var i=e.statementToCode(this,"DO"),n=this.getFieldValue("LEVEL");return"\n"+i+"\n"},Mu=function(t,e){var i=e.statementToCode(this,"DO"),n=this.getFieldValue("LEVEL");if("head"==n)var s="<"+n+'>\n\t\n'+i+""+n+">\n";else s="<"+n+">\n"+i+""+n+">\n";return s},hu=function(t,e){var i=e.statementToCode(this,"DO"),n=this.getFieldValue("LEVEL");return"<"+n+">\n"+i+""+n+">\n"},mu=function(t,e){var i=e.statementToCode(this,"DO"),n=e.valueToCode(this,"style"),s=this.getFieldValue("LEVEL");return"<"+s+" "+n+" >\n"+i+""+s+">\n"},Eu=function(t,e){return['style="'+e.statementToCode(this,"STYLE")+'"',e.ORDER_ATOMIC]},Ou=function(t,e){return'"},Ru=function(){return this.getFieldValue("KEY")+":"+this.getFieldValue("VALUE")+";"},cu=function(){return this.getFieldValue("TEXT")+"\n"},gu=function(t){return t.getFieldValue("TEXT")+"\n"},Cu=function(t,e){return[t.getFieldValue("TEXT"),e.ORDER_ATOMIC]},Su=function(t,e){return(e.valueToCode(t,"VALUE",e.ORDER_ATOMIC)||"")+"\n"},Lu=function(){return""},Au=function(t,e){return["type("+(e.valueToCode(t,"VALUE",e.ORDER_MEMBER)||"___")+")",e.ORDER_ATOMIC]},Nu=function(t,e){for(var i=t.getFieldValue("NAME"),n=t.hasReturn_,s=new Array(t.itemCount_),_=0;_0?e.join("\n")+i.join("\n")+n.join("\n")+o.join("\n")+p.join("")+t+"while True:\n"+a.join("")+u.join("\n"):e.join("\n")+i.join("\n")+n.join("\n")+o.join("\n")+p.join("")+t+u.join("\n")},fu.scrubNakedValue=function(t){return t+"\n"},fu.quote_=function(t){var e="'";return-1!==(t=t.replace(/\\/g,"\\\\").replace(/\n/g,"\\\n")).indexOf("'")&&(-1===t.indexOf('"')?e='"':t=t.replace(/'/g,"\\'")),e+t+e},fu.multiline_quote_=function(t){return"'''"+(t=t.replace(/'''/g,"\\'\\'\\'"))+"'''"},fu.scrub_=function(t,e,i){var n="";if(!t.outputConnection||!t.outputConnection.targetConnection){(_=t.getCommentText())&&(_=Ot.utils.string.wrap(_,fu.COMMENT_WRAP-3),n+=fu.prefixLines(_+"\n","# "));for(var s=0;s0?"int("+p+" + "+s+")":s<0?"int("+p+" - "+-s+")":"int("+p+")",n&&(p="-"+p)),p};const Fu="#74A55B",Pu={init:function(){this.setColour(Fu),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MIDI),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_SETUP).setCheck("var"),this.appendValueInput("PIN",Number).setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_PIN),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip(Ot.Msg.MIXLY_RGB_PIN_COUNT)}},Yu={init:function(){this.setColour(Fu),this.appendValueInput("SUB"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_TONE),this.appendValueInput("pitch").setCheck(Number).appendField(Ot.Msg.MIXLY_FREQUENCY),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE)}},vu={init:function(){this.setColour(Fu),this.appendValueInput("SUB"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_TONE),this.appendValueInput("pitch").setCheck(Number).appendField(Ot.Msg.MIXLY_FREQUENCY),this.appendValueInput("time").setCheck(Number).appendField(Ot.Msg.MIXLY_DURATION),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE2)}},Xu={init:function(){this.setColour(Fu),this.appendValueInput("SUB"),this.appendValueInput("LIST").appendField(Ot.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)}},yu={init:function(){this.setColour(Fu),this.appendValueInput("SUB"),this.appendValueInput("TICKS").setCheck(Number).appendField(Ot.Msg.MIXLY_MICROBIT_JS_SET_TEMPO).appendField(Ot.Msg.MICROBIT_ACTUATOR_ticks),this.appendValueInput("BPM").setCheck(Number).appendField(Ot.Msg.MIXLY_SPEED),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_MUSIC_SET_TEMPO)}},xu={init:function(){this.setColour(Fu),this.appendValueInput("SUB"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_Get_current_tempo),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_MUSIC_GET_TEMPO)}},bu={init:function(){this.setColour(Fu),this.appendValueInput("SUB"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_Reset_music),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_MUSIC_RESET)}},Vu={init:function(){this.setColour(Fu),this.appendValueInput("SUB"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_NOTONE),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},Bu={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.MIXLY_SETTING).appendField(Ot.Msg.MIXLY_EXTERN_LED),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendValueInput("bright").appendField(Ot.Msg.MIXLY_PULSEIN_STAT),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_EXTERN_LED_SETONOFF)}},Gu={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET).appendField(Ot.Msg.MIXLY_EXTERN_LED),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendDummyInput().appendField(Ot.Msg.MIXLY_BRIGHTNESS),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_EXTERN_LED_GETONOFF)}},Uu={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET).appendField(Ot.Msg.MIXLY_EXTERN_LED),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendDummyInput().appendField(Ot.Msg.MIXLY_PULSEIN_STAT),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_EXTERN_LED_GETONOFF)}},wu={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.MIXLY_SETTING).appendField(Ot.Msg.MIXLY_EXTERN_LED),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendValueInput("bright").appendField(Ot.Msg.MIXLY_BRIGHTNESS),this.appendDummyInput().appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_EXTERN_LED_SETBRIGHT)}},ku={init:function(){this.setColour(Fu),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_SETUP+Ot.Msg.MIXLY_SERVO),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_PIN),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},Hu={init:function(){this.setColour(Fu),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_SERVO).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendValueInput("DEGREE",Number).setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_DEGREE_0_180),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_SERVO_MOVE)}},Wu={init:function(){this.setColour(Fu),this.appendValueInput("VAR").appendField("360°"+Ot.Msg.MIXLY_SERVO),this.appendValueInput("SPEED",Number).setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_SETTING+Ot.Msg.blockpy_turtle_rotate+Ot.Msg.MIXLY_SPEED+" (-10~10)"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_SERVO_360_TOOLTIP)}},Ku={init:function(){this.setColour(Fu),this.appendValueInput("PIN",Number).appendField("180°"+Ot.Msg.MIXLY_SERVO).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendValueInput("NUM",Number).setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_MICROBIT_JS_BY_ANGLE),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_SERVO_MOVE)}},Ju={init:function(){this.setColour(Fu),this.appendValueInput("PIN",Number).appendField("360°"+Ot.Msg.MIXLY_SERVO).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendValueInput("NUM",Number).setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_SPEED),this.appendDummyInput().appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_SERVO_SPEED_TOOLIPS)}},qu={init:function(){this.setColour(Fu),this.appendValueInput("PIN",Number).appendField("180°"+Ot.Msg.MIXLY_SERVO).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET+Ot.Msg.MIXLY_MICROBIT_JS_BY_ANGLE),this.setOutput(!0,Number),this.setInputsInline(!0)}},Qu={init:function(){this.setColour(Fu),this.appendValueInput("PIN",Number).appendField("360°"+Ot.Msg.MIXLY_SERVO).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET+Ot.Msg.MIXLY_SPEED),this.setOutput(!0,Number),this.setInputsInline(!0)}},zu={init:function(){this.setColour(Fu),this.appendValueInput("SUB").appendField("初始化").setCheck("var"),this.appendDummyInput().appendField("电机驱动"),this.appendDummyInput().appendField("地址").appendField(new Ot.FieldDropdown([["A","ms32006.ADDRESS_A"],["B","ms32006.ADDRESS_B"]]),"mode"),this.appendValueInput("SUB1").setCheck("var").setAlign(Ot.inputs.Align.RIGHT).appendField("通信"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip("初始化MS32006电机驱动,使用I2C通信")}},ju={init:function(){this.setColour(Fu),this.appendValueInput("SUB").appendField("直流电机").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_Direction).appendField(new Ot.FieldDropdown([[Ot.Msg.CLOCKWISE,"ms32006.MOT_CW"],[Ot.Msg.ANTI_CLOCKWISE,"ms32006.MOT_CCW"],[Ot.Msg.MOTOR_N,"ms32006.MOT_N"],[Ot.Msg.MOTOR_P,"ms32006.MOT_P"]]),"direction"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_STEPPER_SET_SPEED),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip("设置直流电机的状态及转速(0-100)")}},Zu={init:function(){this.setColour(Fu),this.appendValueInput("SUB").appendField("步进电机").setCheck("var"),this.appendDummyInput().appendField("选择").appendField(new Ot.FieldDropdown([["A","ms32006.MOT_A"],["B","ms32006.MOT_B"]]),"mode"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_Direction).appendField(new Ot.FieldDropdown([[Ot.Msg.CLOCKWISE,"ms32006.MOT_CW"],[Ot.Msg.ANTI_CLOCKWISE,"ms32006.MOT_CCW"]]),"direction"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField("转速"),this.appendValueInput("steps").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField("步数"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip("设置步进电机的状态、转速、步数(0-2047)")}},$u={init:function(){this.setColour(Fu),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RGB),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_SETUP).setCheck("var"),this.appendValueInput("PIN",Number).setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_PIN),this.appendValueInput("LEDCOUNT").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_COUNT),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip(Ot.Msg.MIXLY_RGB_PIN_COUNT)}},tr={init:function(){this.setColour(Fu),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RGB),this.appendValueInput("SUB").setCheck("var"),this.appendValueInput("_LED_").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_NUM),this.appendValueInput("RVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_R),this.appendValueInput("GVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_G),this.appendValueInput("BVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_B),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip(""),this.setTooltip(Ot.Msg.MIXLY_RGB_NUM_R_G_B_MP)}},er={init:function(){this.setColour(Fu),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RGB),this.appendValueInput("SUB").setCheck("var"),this.appendValueInput("RVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_R),this.appendValueInput("GVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_G),this.appendValueInput("BVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_B),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip(""),this.setTooltip(Ot.Msg.MIXLY_RGB_ALL_R_G_B_MIXGOCC)}},ir={init:function(){this.setColour(Fu),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RGB),this.appendValueInput("SUB").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_RGB_WRITE),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip(""),this.setTooltip(Ot.Msg.MIXLY_ESP32_MUSIC_WRI)}},nr={init:function(){this.setColour(Fu),this.appendDummyInput("").appendField(Ot.Msg.CONTROLS_FOR_INPUT_WITH+"uart").appendField(new Ot.FieldDropdown([["uart1","uart1"],["uart2","uart2"]]),"key"),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE).setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_SETUP+Ot.Msg.LISTS_SET_INDEX_INPUT_TO).appendField(new Ot.FieldDropdown([["SYN6288"+Ot.Msg.MIXLY_AipSpeech_synthesis,"SYN6288"],["NS9300"+Ot.Msg.MIXLY_MUSIC_PLAYER,"NS9300"]]),"key2"),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null)}},sr={init:function(){this.setColour(Fu),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_GET+Ot.Msg.MIXLY_MUSIC_PLAYER).setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_WHETHER).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_STOPPED,"0"],[Ot.Msg.MIXLY_PLAYING,"1"],[Ot.Msg.MIXLY_PAUSED,"2"]]),"key"),this.setInputsInline(!0),this.setOutput(!0)}},_r={init:function(){this.setColour(Fu),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_MUSIC_PLAYER).setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_STAT).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MP3_PLAY,"1"],[Ot.Msg.MIXLY_MP3_PAUSE,"2"],[Ot.Msg.MIXLY_STOP,"3"],[Ot.Msg.MIXLY_MP3_PREV,"4"],[Ot.Msg.MIXLY_MP3_NEXT,"5"]]),"key"),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},or={init:function(){this.setColour(Fu),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_MUSIC_PLAYER).setCheck("var"),this.appendValueInput("volume").appendField(Ot.Msg.MIXLY_MP3_VOL+Ot.Msg.MIXLY_STAT),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.MIXLY_PLAYER_SET_VOLUME_TOOLTIP)}},pr={init:function(){this.setColour(Fu),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_MUSIC_PLAYER).setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MODE+Ot.Msg.MIXLY_STAT).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MP3_LOOP_ALL,"0"],[Ot.Msg.MIXLY_MP3_LOOP_ONE,"1"],[Ot.Msg.MIXLY_PLAYER_DIRECTORY_LOOP,"2"],[Ot.Msg.MIXLY_MP3_LOOP_RAM,"3"],[Ot.Msg.MIXLY_PLAYER_SINGLE_STOP,"4"],[Ot.Msg.MIXLY_PLAYER_SEQUENTIAL_PLAY,"5"]]),"key"),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},ar={init:function(){this.setColour(Fu),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_MUSIC_PLAYER).setCheck("var"),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_JS_START_MELODY,"play"],[Ot.Msg.MIXLY_PLAYER_INSERT_MUSIC,"insert"]]),"key"),this.appendValueInput("song"),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.MIXLY_PLAYER_PLAY_MUSIC_TOOTIP)}},ur={},rr={init:function(){this.setColour(Fu),this.appendValueInput("SUB").appendField("SYN6288"),this.appendValueInput("VOICE").setCheck(Number).appendField(Ot.Msg.MIXLY_SET_VOLUME),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_SET_VOLUME_TOOLTIP)}},lr={init:function(){this.setColour(Fu),this.appendValueInput("SUB").appendField("SYN6288"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET_VOLUME),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_SET_VOLUME_TOOLTIP)}},dr={init:function(){this.setColour(Fu),this.appendValueInput("SUB").appendField("SYN6288"),this.appendValueInput("VOICE").setCheck(Number).appendField(Ot.Msg.MIXLY_PLAY_HINTS),this.appendDummyInput().appendField(Ot.Msg.MIXLY_PROGRAM_BLOCK).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE,"True"],[Ot.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE,"False"]]),"mode"),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_PLAY_HINTS_TOOLTIP)}},Ir={init:function(){this.setColour(Fu),this.appendValueInput("SUB").appendField("SYN6288"),this.appendValueInput("data").setCheck(String).appendField(Ot.Msg.MIXLY_AipSpeech_synthesis),this.appendValueInput("VOICE").setCheck(Number).appendField(Ot.Msg.MIXLY_BACKGROUND_MUSIC),this.appendDummyInput().appendField(Ot.Msg.MIXLY_PROGRAM_BLOCK).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE,"True"],[Ot.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE,"False"]]),"mode"),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_PLAY_TTS_TOOLTIP)}},Tr={init:function(){this.setColour(Fu),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.extern_addr),"PIN"),this.setOutput(!0,Number)}},Mr={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.ME_GO_MOTOR_EXTERN+Ot.Msg.MIXLY_MOTOR).appendField(Ot.Msg.PIN_NUMBERING).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_LEFT,"0"],[Ot.Msg.MIXLY_RIGHT,"1"]]),"mode"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_SPEED),this.appendDummyInput().appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_MIXBOT_MOTOR_EXTERN_TOOLTIP)}},hr={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.ME_GO_MOTOR_EXTERN+Ot.Msg.MIXLY_MOTOR).appendField(Ot.Msg.PIN_NUMBERING).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_LEFT,"0"],[Ot.Msg.MIXLY_RIGHT,"1"]]),"mode"),this.appendDummyInput().setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_GET+Ot.Msg.MIXLY_SPEED),this.setOutput(!0,Number),this.setInputsInline(!0)}},mr={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.ME_GO_MOTOR_EXTERN+Ot.Msg.MIXLY_TRAFFIC_LIGHT).appendField(Ot.Msg.PIN_NUMBERING).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_LEFT,"0"],[Ot.Msg.MIXLY_RIGHT,"1"]]),"mode"),this.appendDummyInput().setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.LISTS_SET_INDEX_SET).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_Turn_off_display,"0"],[Ot.Msg.MIXLY_TRAFFIC_LIGHT_RED_ON,"1"],[Ot.Msg.MIXLY_TRAFFIC_LIGHT_RED_BLINK,"2"],[Ot.Msg.MIXLY_TRAFFIC_LIGHT_YELLOW_ON,"3"],[Ot.Msg.MIXLY_TRAFFIC_LIGHT_YELLOW_BLINK,"4"],[Ot.Msg.MIXLY_TRAFFIC_LIGHT_GREEN_ON,"5"],[Ot.Msg.MIXLY_TRAFFIC_LIGHT_GREEN_BLINK,"6"]]),"light"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},Er={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.ME_GO_MOTOR_EXTERN).appendField(new Ot.FieldDropdown([[Ot.Msg.COLOUR_RGB_WHITE,"W"],[Ot.Msg.COLOUR_RGB_RED,"R"],[Ot.Msg.COLOUR_RGB_YELLOW,"Y"],[Ot.Msg.COLOUR_RGB_GREEN,"G"],[Ot.Msg.COLOUR_RGB_BLUE,"B"]]),"color").appendField("LED").appendField(Ot.Msg.PIN_NUMBERING).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_LEFT,"0"],[Ot.Msg.MIXLY_RIGHT,"1"]]),"mode"),this.appendValueInput("value").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.BRIGHTNESS),this.appendDummyInput().appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},Or={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.ME_GO_MOTOR_EXTERN).appendField(new Ot.FieldDropdown([[Ot.Msg.COLOUR_RGB_WHITE,"W"],[Ot.Msg.COLOUR_RGB_RED,"R"],[Ot.Msg.COLOUR_RGB_YELLOW,"Y"],[Ot.Msg.COLOUR_RGB_GREEN,"G"],[Ot.Msg.COLOUR_RGB_BLUE,"B"]]),"color").appendField("LED").appendField(Ot.Msg.PIN_NUMBERING).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_LEFT,"0"],[Ot.Msg.MIXLY_RIGHT,"1"]]),"mode"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET+Ot.Msg.BRIGHTNESS),this.setOutput(!0,Number),this.setInputsInline(!0)}},Rr={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.ME_GO_MOTOR_EXTERN+Ot.Msg.MIXLY_SERVO_MOTOR).appendField(Ot.Msg.PIN_NUMBERING).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_LEFT,"0"],[Ot.Msg.MIXLY_RIGHT,"1"]]),"mode"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_JS_BLE_POWER,"[0]"],[Ot.Msg.MIXLY_SPEED,"[1]"],[Ot.Msg.MATH_SINGLE_OP_ABSOLUTE+Ot.Msg.MIXLY_MICROBIT_JS_BY_ANGLE,"[2]"],[Ot.Msg.MIXLY_RELATIVE+Ot.Msg.MIXLY_MICROBIT_JS_BY_ANGLE,"[3]"],[Ot.Msg.MIXLY_MIXBOT_SERVO_BLOCK_OR_NOT,"[4]"],[Ot.Msg.MIXLY_MIXBOT_SERVO_FINISH_OR_NOT,"[5]"],[Ot.Msg.MIXLY_ALL,""]]),"status"),this.setOutput(!0,Number),this.setInputsInline(!0)}},cr={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.ME_GO_MOTOR_EXTERN+Ot.Msg.MIXLY_SERVO_MOTOR).appendField(Ot.Msg.PIN_NUMBERING).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_LEFT,"0"],[Ot.Msg.MIXLY_RIGHT,"1"]]),"mode"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MIXBOT_SERVO_SET_STOP_MODE).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MIXBOT_SERVO_STOP_MODE_KEEP,"0"],[Ot.Msg.MIXLY_MIXBOT_SERVO_STOP_MODE_COAST,"1"],[Ot.Msg.MIXLY_MIXBOT_SERVO_STOP_MODE_BRAKE,"2"]]),"status"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},gr={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.ME_GO_MOTOR_EXTERN+Ot.Msg.MIXLY_SERVO_MOTOR).appendField(Ot.Msg.PIN_NUMBERING).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_LEFT,"0"],[Ot.Msg.MIXLY_RIGHT,"1"]]),"mode"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_STOP),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},Cr={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.ME_GO_MOTOR_EXTERN+Ot.Msg.MIXLY_SERVO_MOTOR).appendField(Ot.Msg.MATH_SINGLE_OP_ABSOLUTE+Ot.Msg.MIXLY_MICROBIT_JS_BY_ANGLE+Ot.Msg.MSG.run).appendField(Ot.Msg.PIN_NUMBERING).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_LEFT,"0"],[Ot.Msg.MIXLY_RIGHT,"1"]]),"mode"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MODE).setAlign(Ot.inputs.Align.RIGHT).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_SPEED+Ot.Msg.MIXLY_MODE,"0"],[Ot.Msg.MIXLY_MICROBIT_JS_BLE_POWER+Ot.Msg.MIXLY_MODE,"1"]]),"status"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_PARAMS),this.appendDummyInput().setAlign(Ot.inputs.Align.RIGHT).appendField("%"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MIXBOT_SERVO_TURN_DIRECTION).setAlign(Ot.inputs.Align.RIGHT).appendField(new Ot.FieldDropdown([[Ot.Msg.CLOCKWISE,"0"],[Ot.Msg.MIXLY_MIXBOT_SERVO_NEAREST_PATH,"1"],[Ot.Msg.ANTI_CLOCKWISE,"2"]]),"direction"),this.appendValueInput("angle").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_DISPLAY_MATRIX_ROTATE+Ot.Msg.MIXLY_MICROBIT_JS_BY_ANGLE),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_MIXBOT_SERVO_ABSOLUTE_ANGLE_TOOLTIP)}},Sr={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.ME_GO_MOTOR_EXTERN+Ot.Msg.MIXLY_SERVO_MOTOR).appendField(Ot.Msg.MIXLY_RELATIVE+Ot.Msg.MIXLY_MICROBIT_JS_BY_ANGLE+Ot.Msg.MSG.run).appendField(Ot.Msg.PIN_NUMBERING).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_LEFT,"0"],[Ot.Msg.MIXLY_RIGHT,"1"]]),"mode"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MIXBOT_SERVO_RELATIVE_ORIGIN_PATH),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},Lr={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.ME_GO_MOTOR_EXTERN+Ot.Msg.MIXLY_SERVO_MOTOR).appendField(Ot.Msg.MIXLY_RELATIVE+Ot.Msg.MIXLY_MICROBIT_JS_BY_ANGLE+Ot.Msg.MSG.run).appendField("("+Ot.Msg.MIXLY_MIXBOT_SERVO_LIKE_ENCODING_MOTOR+")").appendField(Ot.Msg.PIN_NUMBERING).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_LEFT,"0"],[Ot.Msg.MIXLY_RIGHT,"1"]]),"mode"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MODE).setAlign(Ot.inputs.Align.RIGHT).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_SPEED+Ot.Msg.MIXLY_MODE,"0"],[Ot.Msg.MIXLY_MICROBIT_JS_BLE_POWER+Ot.Msg.MIXLY_MODE,"1"]]),"status"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_PARAMS),this.appendDummyInput().setAlign(Ot.inputs.Align.RIGHT).appendField("%"),this.appendValueInput("angle").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_DISPLAY_MATRIX_ROTATE+Ot.Msg.MIXLY_MICROBIT_JS_BY_ANGLE),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_MIXBOT_SERVO_RELATIVE_ANGLE_TOOLTIP)}},Ar={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.ME_GO_MOTOR_EXTERN+Ot.Msg.MIXLY_SERVO_MOTOR).appendField(Ot.Msg.MIXLY_RELATIVE+Ot.Msg.MIXLY_MICROBIT_JS_BY_ANGLE+Ot.Msg.MSG.run).appendField("("+Ot.Msg.MIXLY_MIXBOT_SERVO_LIKE_ORDINARY_MOTOR+")").appendField(Ot.Msg.PIN_NUMBERING).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_LEFT,"0"],[Ot.Msg.MIXLY_RIGHT,"1"]]),"mode"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MODE).setAlign(Ot.inputs.Align.RIGHT).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_SPEED+Ot.Msg.MIXLY_MODE,"0"],[Ot.Msg.MIXLY_MICROBIT_JS_BLE_POWER+Ot.Msg.MIXLY_MODE,"1"]]),"status"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_PARAMS),this.appendDummyInput().setAlign(Ot.inputs.Align.RIGHT).appendField("%"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MIXBOT_SERVO_TURN_DIRECTION).setAlign(Ot.inputs.Align.RIGHT).appendField(new Ot.FieldDropdown([[Ot.Msg.CLOCKWISE,"0"],[Ot.Msg.ANTI_CLOCKWISE,"2"]]),"direction"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},Nr={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.MIXBOT).appendField(Ot.Msg.ME_GO_MOTOR_EXTERN).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MOTOR,"ext_motor"],[Ot.Msg.MIXLY_TRAFFIC_LIGHT,"ext_traffic"],[Ot.Msg.COLOUR_RGB_WHITE+"LED","W_LED"],[Ot.Msg.COLOUR_RGB_RED+"LED","R_LED"],[Ot.Msg.COLOUR_RGB_YELLOW+"LED","Y_LED"],[Ot.Msg.COLOUR_RGB_GREEN+"LED","G_LED"],[Ot.Msg.COLOUR_RGB_BLUE+"LED","B_LED"],[Ot.Msg.MIXLY_SERVO_MOTOR,"ext_servo"]]),"name"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MIXBOT_EXTERN_GET_ADDR),this.setOutput(!0),this.setInputsInline(!0)}},Dr={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.MIXBOT).appendField(Ot.Msg.ME_GO_MOTOR_EXTERN).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MOTOR,"ext_motor"],[Ot.Msg.MIXLY_TRAFFIC_LIGHT,"ext_traffic"],[Ot.Msg.COLOUR_RGB_WHITE+"LED","W_LED"],[Ot.Msg.COLOUR_RGB_RED+"LED","R_LED"],[Ot.Msg.COLOUR_RGB_YELLOW+"LED","Y_LED"],[Ot.Msg.COLOUR_RGB_GREEN+"LED","G_LED"],[Ot.Msg.COLOUR_RGB_BLUE+"LED","B_LED"],[Ot.Msg.MIXLY_SERVO_MOTOR,"ext_servo"]]),"name"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MIXBOT_EXTERN_SET_ADDR),this.appendValueInput("old").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE),this.appendValueInput("new").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_UPDATE),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},fr={init:function(){this.setColour(Fu),this.appendValueInput("PIN",Number).setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_SETUP+Ot.Msg.MIXLY_AT).appendField(Ot.Msg.MIXLY_PIN),this.setInputsInline(!0),this.setOutput(!0)}},Fr={init:function(){this.setColour(Fu),this.appendDummyInput().appendField(Ot.Msg.MIXLY_SETTING),this.appendValueInput("pin").appendField("LED"),this.appendValueInput("bright").appendField(Ot.Msg.MIXLY_PULSEIN_STAT),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},Pr={init:function(){this.setColour(Fu),this.appendValueInput("PIN",Number).setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_SERVO+Ot.Msg.MIXLY_SETUP+Ot.Msg.MIXLY_AT).appendField(Ot.Msg.MIXLY_PIN),this.setInputsInline(!0),this.setOutput(!0)}},Yr={init:function(){this.setColour(Fu),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_SERVO),this.appendValueInput("angle").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_DISPLAY_MATRIX_ROTATE),this.appendDummyInput().appendField(Ot.Msg.DRAW_POINTER_ANGLE),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},vr={init:function(){this.setColour(Fu),this.appendValueInput("PIN",Number).setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_MOTOR+Ot.Msg.MIXLY_SETUP+Ot.Msg.MIXLY_AT).appendField(Ot.Msg.MIXLY_PIN),this.setInputsInline(!0),this.setOutput(!0)}},Xr={init:function(){this.setColour(Fu),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_MOTOR),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_DISPLAY_MATRIX_ROTATE+Ot.Msg.MIXLY_SPEED),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},yr="#6C9858",xr={init:function(){this.setColour(yr),this.appendDummyInput("").appendField(new Ot.FieldDropdown([["L1","1"],["L2","2"]]),"op"),this.setOutput(!0)}},br={init:function(){this.setColour(yr),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_ESP32_ON,"1"],[Ot.Msg.MIXLY_ESP32_OFF,"0"],[Ot.Msg.MIXLY_ESP32_TOGGLE,"-1"]]),"flag"),this.setOutput(!0),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW)}},Vr={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_SETTING),this.appendValueInput("led").appendField(Ot.Msg.MIXLY_BUILDIN_LED),this.appendValueInput("bright").appendField(Ot.Msg.MIXLY_PULSEIN_STAT),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_LED_SETONOFF)}},Br={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET),this.appendValueInput("led").appendField(Ot.Msg.MIXLY_BUILDIN_LED),this.appendDummyInput().appendField(Ot.Msg.MIXLY_BRIGHTNESS),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_LED_GETONOFF)}},Gr={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET),this.appendValueInput("led").appendField(Ot.Msg.MIXLY_BUILDIN_LED),this.appendDummyInput().appendField(Ot.Msg.MIXLY_PULSEIN_STAT),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_LED_GETONOFF)}},Ur={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_SETTING),this.appendValueInput("led").appendField(Ot.Msg.MIXLY_BUILDIN_LED),this.appendValueInput("bright").appendField(Ot.Msg.MIXLY_BRIGHTNESS),this.appendDummyInput("").appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_SETTING+Ot.Msg.MIXLY_BUILDIN_LED+Ot.Msg.MIXLY_BRIGHTNESS+"(0-100%)")}},wr={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_SETTING),this.appendValueInput("led").appendField(Ot.Msg.MIXLY_BUILDIN_LED),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_LCD_SETCOLOR).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_LIGHT_RED,"1"],[Ot.Msg.MIXLY_LIGHT_GREEN,"2"],[Ot.Msg.MIXLY_LIGHT_BLUE,"3"],[Ot.Msg.MIXLY_LIGHT_YELLOW,"4"],[Ot.Msg.MIXLY_LIGHT_CYAN,"5"],[Ot.Msg.MIXLY_LIGHT_PURPLE,"6"],[Ot.Msg.MIXLY_LIGHT_WHITE,"7"]]),"colorvalue"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip()}},kr={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_SETTING).appendField(Ot.Msg.MIXLY_BUILDIN_LED).appendField(new Ot.FieldDropdown([[Ot.Msg.COLOUR_RGB_RED,"r"],[Ot.Msg.COLOUR_RGB_GREEN,"g"]]),"color"),this.appendValueInput("bright").appendField(Ot.Msg.MIXLY_PULSEIN_STAT),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_LED_SETONOFF)}},Hr={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET).appendField(Ot.Msg.MIXLY_BUILDIN_LED).appendField(new Ot.FieldDropdown([[Ot.Msg.COLOUR_RGB_RED,"r"],[Ot.Msg.COLOUR_RGB_GREEN,"g"]]),"color"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_BRIGHTNESS),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_LED_GETONOFF)}},Wr={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET).appendField(Ot.Msg.MIXLY_BUILDIN_LED).appendField(new Ot.FieldDropdown([[Ot.Msg.COLOUR_RGB_RED,"r"],[Ot.Msg.COLOUR_RGB_GREEN,"g"]]),"color"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_PULSEIN_STAT),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_LED_GETONOFF)}},Kr={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_SETTING).appendField(Ot.Msg.MIXLY_BUILDIN_LED).appendField(new Ot.FieldDropdown([[Ot.Msg.COLOUR_RGB_RED,"r"],[Ot.Msg.COLOUR_RGB_GREEN,"g"]]),"color"),this.appendValueInput("bright").appendField(Ot.Msg.MIXLY_BRIGHTNESS),this.appendDummyInput("").appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_SETTING+Ot.Msg.MIXLY_BUILDIN_LED+Ot.Msg.MIXLY_BRIGHTNESS+"(0-10)")}},Jr={init:function(){this.setColour(yr),this.appendDummyInput("").appendField(new Ot.FieldDropdown([["L1","20"],["L2","21"]]),"op"),this.setOutput(!0)}},qr={init:function(){this.setColour(yr),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RGB),this.appendValueInput("_LED_").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_NUM),this.appendValueInput("RVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_R),this.appendValueInput("GVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_G),this.appendValueInput("BVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_B),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null);switch(Rt.Boards.getSelectedBoardKey()){case"micropython:esp32c3:mixgo_cc":case"micropython:esp32s2:mixgo_ce":this.setTooltip(Ot.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOCC);break;case"micropython:esp32c3:mixgo_me":default:this.setTooltip(Ot.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOME);break;case"micropython:esp32:mPython":this.setTooltip(Ot.Msg.MIXLY_RGB_NUM_R_G_B_MPYTHON)}}},Qr={init:function(){this.setColour(yr),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RGB),this.appendValueInput("RVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_R),this.appendValueInput("GVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_G),this.appendValueInput("BVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_B),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip(""),this.setTooltip(Ot.Msg.MIXLY_RGB_ALL_R_G_B_MIXGOCC)}},zr={init:function(){this.setColour(yr),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RGB),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RAINBOW),this.appendValueInput("time").setCheck(Number).appendField(Ot.Msg.MIXLY_DURATION).appendField(Ot.Msg.MIXLY_MILLIS),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip("")}},jr={init:function(){this.setColour(yr),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RGB),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_CHASE),this.appendValueInput("RVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_R),this.appendValueInput("GVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_G),this.appendValueInput("BVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_B),this.appendValueInput("time").setCheck(Number).appendField(Ot.Msg.PYTHON_RANGE_STEP).appendField(Ot.Msg.MIXLY_MILLIS),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip("")}},Zr={init:function(){this.setColour(yr),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RGB),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_RGB_WRITE),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip(""),this.setTooltip(Ot.Msg.MIXLY_ESP32_MUSIC_WRI)}},$r={init:function(){this.setColour(yr),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RGB),this.appendValueInput("_LED_").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_NUM),this.appendValueInput("RVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_R),this.appendValueInput("GVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_G),this.appendValueInput("BVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_B),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null);switch(Rt.Boards.getSelectedBoardKey()){case"micropython:esp32c3:mixgocc":this.setTooltip(Ot.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOCC);break;case"micropython:esp32c3:mixgome":default:this.setTooltip(Ot.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOME);break;case"micropython:esp32:mPython":this.setTooltip(Ot.Msg.MIXLY_RGB_NUM_R_G_B_MPYTHON)}}},tl={init:function(){this.setColour(yr),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RGB),this.appendValueInput("RVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_R),this.appendValueInput("GVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_G),this.appendValueInput("BVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_B),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip(""),this.setTooltip(Ot.Msg.MIXLY_RGB_ALL_R_G_B_MIXGOCC)}},el={init:function(){this.setColour(yr),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RGB),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_CHASE),this.appendValueInput("RVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_R),this.appendValueInput("GVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_G),this.appendValueInput("BVALUE").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_RGB_B),this.appendValueInput("time").setCheck(Number).appendField(Ot.Msg.PYTHON_RANGE_STEP).appendField(Ot.Msg.MIXLY_MILLIS),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip("")}},il={init:function(){this.setColour(yr),this.appendValueInput("TICKS").setCheck(Number).appendField(Ot.Msg.MIXLY_MICROBIT_JS_SET_TEMPO).appendField(Ot.Msg.MICROBIT_ACTUATOR_ticks),this.appendValueInput("BPM").setCheck(Number).appendField(Ot.Msg.MIXLY_SPEED),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_MUSIC_SET_TEMPO)}},nl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_Get_current_tempo),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_MUSIC_GET_TEMPO)}},sl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_Reset_music),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_MUSIC_RESET)}},_l={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_TONE),this.appendValueInput("pitch").setCheck(Number).appendField(Ot.Msg.MIXLY_FREQUENCY),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE)}},ol={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_TONE),this.appendValueInput("pitch").setCheck(Number).appendField(Ot.Msg.MIXLY_FREQUENCY),this.appendValueInput("time").setCheck(Number).appendField(Ot.Msg.MIXLY_DURATION),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE2)}},pl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_NOTONE),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},al={init:function(){this.setColour(yr),this.appendValueInput("LIST").appendField(Ot.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)}},ul={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MOTOR_DC).appendField(new Ot.FieldDropdown([["1","1"],["2","2"],["3","3"]]),"wheel"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_Direction).appendField(new Ot.FieldDropdown([[Ot.Msg.CLOCKWISE,"CW"],[Ot.Msg.ANTI_CLOCKWISE,"CCW"],[Ot.Msg.MOTOR_P,"P"],[Ot.Msg.MOTOR_N,"N"]]),"direction"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_STEPPER_SET_SPEED),this.appendDummyInput("").appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},rl={init:function(){this.setColour(yr),this.appendDummyInput().appendField("MixGo Car").appendField(new Ot.FieldDropdown([[Ot.Msg.blockpy_forward,"F"],[Ot.Msg.blockpy_backward,"B"],[Ot.Msg.blockpy_left,"L"],[Ot.Msg.blockpy_right,"R"]]),"VAR"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_STEPPER_SET_SPEED),this.appendDummyInput().appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},ll={init:function(){this.setColour(yr),this.appendDummyInput("").appendField("MixGo Car").appendField(new Ot.FieldDropdown([[Ot.Msg.MOTOR_P,"P"],[Ot.Msg.MOTOR_N,"N"]]),"VAR"),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip("")}},dl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MOTOR_DC).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLYCAR_WHEEL_LEFT,"L"],[Ot.Msg.MIXLYCAR_WHEEL_RIGHT,"R"]]),"wheel"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_Direction).appendField(new Ot.FieldDropdown([[Ot.Msg.CLOCKWISE,"CW"],[Ot.Msg.ANTI_CLOCKWISE,"CCW"]]),"direction"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_STEPPER_SET_SPEED),this.appendDummyInput().appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},Il={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MOTOR_DC).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLYCAR_WHEEL_LEFT,"L"],[Ot.Msg.MIXLYCAR_WHEEL_RIGHT,"R"]]),"wheel"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_STOP).appendField(new Ot.FieldDropdown([[Ot.Msg.MOTOR_P,"P"],[Ot.Msg.MOTOR_N,"N"]]),"direction"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},Tl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MIXBOT_MOTOR_STATUS),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_MIXBOT_MOTOR_STATUS_TOOLTIP)}},Ml={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXBOT).appendField(new Ot.FieldDropdown([[Ot.Msg.blockpy_forward,"F"],[Ot.Msg.blockpy_backward,"B"],[Ot.Msg.blockpy_left,"L"],[Ot.Msg.blockpy_right,"R"]]),"VAR"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_JS_BLE_POWER,"PWR"],[Ot.Msg.MIXLY_SPEED,"SPEED"],[Ot.Msg.MIXLY_MIXBOT_MOTOR_TURNS,"TURNS"]]),"mode"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_PARAMS),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_MIXBOT_MOVE_TOOLTIP)}},hl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXBOT).appendField(new Ot.FieldDropdown([[Ot.Msg.MOTOR_P,"P"],[Ot.Msg.MOTOR_N,"N"]]),"VAR"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},ml={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXBOT).appendField(Ot.Msg.MIXLY_MOTOR).appendField(new Ot.FieldDropdown([[Ot.Msg.TEXT_TRIM_LEFT,"1"],[Ot.Msg.TEXT_TRIM_RIGHT,"2"],[Ot.Msg.TEXT_TRIM_BOTH,"0"]]),"wheel"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_JS_BLE_POWER,"PWR"],[Ot.Msg.MIXLY_SPEED,"SPEED"],[Ot.Msg.MIXLY_MIXBOT_MOTOR_TURNS,"TURNS"]]),"mode"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_PARAMS),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_MIXBOT_MOVE_TOOLTIP)}},El={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MIXBOT_BUZZER),this.appendDummyInput().appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_ON,"0"],[Ot.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_OFF,"1"]]),"on_off"),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0)}},Ol={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.BITBOT).appendField(new Ot.FieldDropdown([[Ot.Msg.blockpy_forward,"F"],[Ot.Msg.blockpy_backward,"B"],[Ot.Msg.blockpy_left,"L"],[Ot.Msg.blockpy_right,"R"]]),"VAR"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_SPEED),this.appendDummyInput("").appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},Rl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.BITBOT).appendField(new Ot.FieldDropdown([[Ot.Msg.MOTOR_P,"P"],[Ot.Msg.MOTOR_N,"N"]]),"VAR"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},cl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.BITBOT).appendField(Ot.Msg.MIXLY_MOTOR).appendField(new Ot.FieldDropdown([[Ot.Msg.TEXT_TRIM_LEFT,"0"],[Ot.Msg.TEXT_TRIM_RIGHT,"1"]]),"wheel"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_Direction).appendField(new Ot.FieldDropdown([[Ot.Msg.CLOCKWISE,"CW"],[Ot.Msg.ANTI_CLOCKWISE,"CCW"],[Ot.Msg.MOTOR_P,"P"],[Ot.Msg.MOTOR_N,"N"]]),"direction"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_SPEED),this.appendDummyInput("").appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},gl={init:function(){this.setColour(yr),this.appendValueInput("bright").appendField(Ot.Msg.MIXLY_MIXBOT_SOUND_SET_LOUDNESS),this.appendDummyInput().appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_LED_SETONOFF)}},Cl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MIXBOT_SOUND_LOUDNESS+"(%)"),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_LED_GETONOFF)}},Sl={init:function(){this.setColour(yr),this.appendValueInput("bright").appendField(Ot.Msg.MIXLY_SETTING+Ot.Msg.MIXLY_MIXBOT_BUZZER+Ot.Msg.MIXLY_MP3_VOL),this.appendDummyInput().appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_LED_SETONOFF)}},Ll={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET+Ot.Msg.MIXLY_MIXBOT_BUZZER+Ot.Msg.MIXLY_MP3_VOL+"(%)"),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_LED_GETONOFF)}},Al={init:function(){this.setColour(yr),this.appendValueInput("PATH").appendField(Ot.Msg.MIXLY_RECORD_AUDIO).appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH),this.appendValueInput("TIME").setCheck(Number).appendField(Ot.Msg.MIXLY_GET_PRESSES_TIME),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0)}},Nl={init:function(){this.setColour(yr),this.appendValueInput("PATH").appendField(Ot.Msg.MIXLY_PLAY_AUDIO).appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0)}},Dl={init:function(){this.setColour(yr),this.appendValueInput("PATH").appendField(Ot.Msg.MIXLY_PLAY_ONLINE_AUDIO).appendField("URL"),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0)}},fl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_TONE),this.appendValueInput("pitch").setCheck(Number).appendField(Ot.Msg.MIXLY_FREQUENCY),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE)}},Fl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_NOTONE),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},Pl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.LISTS_SET_INDEX_SET+Ot.Msg.ME_GO_MOTOR_EXTERN).appendField(Ot.Msg.PIN_NUMBERING).appendField(new Ot.FieldDropdown([["1","1"],["2","2"],["3","3"]]),"index"),this.appendValueInput("duty").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.blynk_IOT_IR_POWER+Ot.Msg.MIXLY_PINMODEOUT),this.appendDummyInput().appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip()}},Yl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET+Ot.Msg.ME_GO_MOTOR_EXTERN).appendField(Ot.Msg.PIN_NUMBERING).appendField(new Ot.FieldDropdown([["1","1"],["2","2"]]),"index"),this.appendDummyInput().setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.blynk_IOT_IR_POWER+Ot.Msg.MIXLY_PINMODEOUT+Ot.Msg.MIXLY_DUTY_RATIO),this.setOutput(!0,Number),this.setInputsInline(!0)}},vl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.LISTS_SET_INDEX_SET+Ot.Msg.ME_GO_MOTOR_EXTERN).appendField(Ot.Msg.MIXLY_ALL+Ot.Msg.PIN_NUMBERING),this.appendValueInput("duty").setCheck(Number).setAlign(Ot.ALIGN_RIGHT).appendField(Ot.Msg.blynk_IOT_IR_POWER+Ot.Msg.MIXLY_PINMODEOUT+Ot.Msg.MIXLY_FREQUENCY),this.appendDummyInput().appendField("Hz"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_MIXBOT_MOTOR_EXTERN_TOOLTIP)}},Xl={init:function(){this.setColour(yr),this.appendDummyInput().appendField(Ot.Msg.ANALOG+Ot.Msg.MIXLY_KEYBOARD_INPUT),this.appendValueInput("special"),this.appendValueInput("general"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_RELEASE).appendField(new Ot.FieldDropdown([[Ot.Msg.MICROPYTHON_DISPLAY_YES,"True"],[Ot.Msg.MICROPYTHON_DISPLAY_NO,"False"]]),"release"),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.ANALOG+Ot.Msg.MIXLY_KEYBOARD_INPUT)}},yl={init:function(){this.setColour(yr),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_SPECIAL_KEY).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_SPECIAL_KEY0,"0x00"],[Ot.Msg.MIXLY_SPECIAL_KEY1,"0x01"],[Ot.Msg.MIXLY_SPECIAL_KEY2,"0x02"],[Ot.Msg.MIXLY_SPECIAL_KEY1,"0x04"],[Ot.Msg.MIXLY_SPECIAL_KEY8,"0x08"],[Ot.Msg.MIXLY_SPECIAL_KEY16,"0x10"],[Ot.Msg.MIXLY_SPECIAL_KEY32,"0x20"],[Ot.Msg.MIXLY_SPECIAL_KEY64,"0x40"],[Ot.Msg.MIXLY_SPECIAL_KEY128,"0x80"]]),"op"),this.setOutput(!0)}},xl={init:function(){this.setColour(yr),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_GENERAL_KEY).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_SPECIAL_KEY0,"0x00"],["A","0x04"],["B","0x05"],["C","0x06"],["D","0x07"],["E","0x08"],["F","0x09"],["G","0x0A"],["H","0x0B"],["I","0x0C"],["J","0x0D"],["K","0x0E"],["L","0x0F"],["M","0x10"],["N","0x11"],["O","0x12"],["P","0x13"],["Q","0x14"],["R","0x15"],["S","0x16"],["T","0x17"],["U","0x18"],["V","0x19"],["W","0x1A"],["X","0x1B"],["Y","0x1C"],["Z","0x1D"],["1 !","0x1E"],["2 @","0x1F"],["3 #","0x20"],["4 $","0x21"],["5 %","0x22"],["6 ^","0x23"],["7 &","0x24"],["8 *","0x25"],["9 (","0x26"],["0 )","0x27"],["ENTER","0x28"],["ESC","0x29"],["BACKSPACE","0x2A"],["TAB","0x2B"],["SPACE","0x2C"],["- _","0x2D"],["= +","0x2E"],["[ {","0x2F"],["] }","0x30"],["\\ |","0x31"],["; :","0x33"],["' \"","0x34"],["` ~","0x35"],[", <","0x36"],[". >","0x37"],["/ ?","0x38"],["CAPS_LOCK","0x39"],["F1","0x3A"],["F2","0x3B"],["F3","0x3C"],["F4","0x3D"],["F5","0x3E"],["F6","0x3F"],["F7","0x40"],["F8","0x41"],["F9","0x42"],["F10","0x43"],["F11","0x44"],["F12","0x45"],["PRINTSCREEN","0x46"],["SCROLL_LOCK","0x47"],["PAUSE","0x48"],["INSERT","0x49"],["HOME","0x4A"],["PAGE_UP","0x4B"],["DELETE","0x4C"],["END","0x4D"],["PAGE_DOWN","0x4E"],["RIGHT","0x4F"],["LEFT","0x50"],["DOWN","0x51"],["UP","0x52"],["NUM_LOCK","0x53"],["/","0x54"],["*","0x55"],["-","0x56"],["+","0x57"],["ENTER","0x58"],["1","0x59"],["2","0x5A"],["3","0x5B"],["4","0x5C"],["5","0x5D"],["6","0x5E"],["7","0x5F"],["8","0x60"],["9","0x61"],["0","0x62"],[".","0x63"]]),"op"),this.setOutput(!0)}},bl={init:function(){this.setColour(yr),this.itemCount_=2,this.updateShape_(),this.setOutput(!0),this.setMutator(new Ot.icons.MutatorIcon(["generalkey_create_with_item"],this)),this.setTooltip(Ot.Msg.GENERALKEY_TUPLE_CREATE_TOOLTIP)},mutationToDom:function(){var t=document.createElement("mutation");return t.setAttribute("items",this.itemCount_),t},domToMutation:function(t){this.itemCount_=parseInt(t.getAttribute("items"),10),this.updateShape_()},decompose:function(t){var e=t.newBlock("generalkey_container");e.initSvg();for(var i=e.getInput("STACK").connection,n=0;ne?t[e]:'"key'+(e+1)+'"'),"KEY"+e).appendField(":")}},getVars:function(){return[this.getFieldValue("VAR")]},renameVar:function(t,e){Ot.Names.equals(t,this.getFieldValue("VAR"))&&this.setTitleValue(e,"VAR")}},xE={init:function(){this.setColour(fE),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_TYPE_DICT),this.appendStatementInput("STACK"),this.setTooltip(Ot.Msg.DICTS_CREATE_WITH_CONTAINER_TOOLTIP),this.contextMenu=!1}},bE={init:function(){this.setColour(fE),this.appendDummyInput().appendField(Ot.Msg.DICTS_CREATE_WITH_ITEM_TITLE),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.DICTS_CREATE_WITH_ITEM_TOOLTIP),this.contextMenu=!1}},VE={init:function(){this.setColour(fE),this.appendDummyInput().appendField(Ot.Msg.DICTS_CREATE_WITH_ITEM_TITLE),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.DICTS_CREATE_WITH_ITEM_TOOLTIP),this.contextMenu=!1}},BE={init:function(){this.setColour(fE),this.appendDummyInput().appendField(Ot.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT),this.appendValueInput("SERVER").setCheck(String).appendField(Ot.Msg.MIXLY_EMQX_SERVER).setAlign(Ot.inputs.Align.RIGHT),this.appendValueInput("USERNAME").setCheck(String).appendField(Ot.Msg.MIXLY_WIFI_USERNAME).setAlign(Ot.inputs.Align.RIGHT),this.appendValueInput("PASSWORD").setCheck(String).appendField(Ot.Msg.MIXLY_IOT_PASSWORD).setAlign(Ot.inputs.Align.RIGHT),this.appendValueInput("PROJECT").setCheck(String).appendField(Ot.Msg.MIXLY_EMQX_PROJECT).setAlign(Ot.inputs.Align.RIGHT),this.setPreviousStatement(!0),this.setNextStatement(!0)}},GE={init:function(){this.setColour(fE),this.appendDummyInput().appendField("MixIO"),this.appendValueInput("TOPIC").appendField(Ot.Msg.MIXLY_EMQX_PUBLISH_NEW).appendField(Ot.Msg.MIXLY_EMQX_PUBLISH_TOPIC),this.appendValueInput("MSG").appendField(Ot.Msg.HTML_BODY),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_IOT_EMQX_PUBLISH_TOOLTIP)}},UE={init:function(){this.setColour(fE),this.appendDummyInput().appendField("MixIO"),this.appendValueInput("TOPIC").appendField(Ot.Msg.MIXLY_EMQX_SUBSCRIBE+Ot.Msg.MIXLY_MICROBIT_MSG).appendField(Ot.Msg.MIXLY_EMQX_PUBLISH_TOPIC),this.appendValueInput("METHOD").appendField(Ot.Msg.MIXLY_EMQX_SET_METHOD),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_IOT_EMQX_SUBSCRIBE_TOOLTIP)}},wE={init:function(){this.setColour(fE),this.appendDummyInput().appendField("MixIO"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_DISCONNECT_ONENET),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},kE={init:function(){this.setColour(fE),this.appendDummyInput().appendField("MixIO"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_EMQX_CONNECT),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},HE={init:function(){this.setColour(fE),this.appendDummyInput().appendField("MixIO"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_CHECK_ONENET),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},WE={init:function(){this.setColour(fE),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROPYTHON_FORMAT).appendField(Ot.Msg.MQTT_Topic),this.setInputsInline(!0),this.setOutput(!0)}},KE={init:function(){this.setColour(fE),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROPYTHON_FORMAT).appendField(Ot.Msg.MIXLY_EMQX_PUBLISH_MSG),this.setInputsInline(!0),this.setOutput(!0)}},JE={init:function(){this.setColour(fE),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_ESP32_IOT_MAP_FORMATING),this.setOutput(!0)}},qE={init:function(){this.setColour(fE),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_MICROPYTHON_FORMAT+"(Json)"),this.setOutput(!0)}},QE={init:function(){this.setColour(fE),this.appendDummyInput().appendField("MixIO"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_EMQX_PING),this.setInputsInline(!0),this.setOutput(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_IOT_EMQX_PING_TOOLTIP)}},zE={init:function(){this.setColour(fE),this.appendDummyInput().appendField("MixIO").appendField(Ot.Msg.MIXLY_GET_NTP),this.appendValueInput("addr").appendField(Ot.Msg.blynk_SERVER_ADD),this.setInputsInline(!0),this.setOutput(!0)}},jE={init:function(){this.setColour(fE),this.appendDummyInput().appendField(Ot.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT),this.appendValueInput("SERVER").appendField(Ot.Msg.MIXLY_EMQX_SERVER).setAlign(Ot.inputs.Align.RIGHT),this.appendValueInput("KEY").appendField(Ot.Msg.CONTROLS_FOR_INPUT_WITH+Ot.Msg.MIXLY_MIXIO_SHARE_KEY).setAlign(Ot.inputs.Align.RIGHT),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},ZE={init:function(){this.setColour(fE),this.appendDummyInput().appendField(Ot.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT),this.appendValueInput("SERVER").appendField(Ot.Msg.MIXLY_EMQX_SERVER).setAlign(Ot.inputs.Align.RIGHT),this.appendValueInput("KEY").appendField(Ot.Msg.CONTROLS_FOR_INPUT_WITH+"Mixly Key").setAlign(Ot.inputs.Align.RIGHT),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},$E={init:function(){this.VISITOR_ID=Rt.Config.BOARD.visitorId.str32.substring(0,8).toUpperCase(),this.setColour(fE),this.appendDummyInput("").appendField(new Ot.FieldTextInput(this.visitorId),"VISITOR_ID"),this.setOutput(!0,null)},onchange:function(){const t=this.getFieldValue("VISITOR_ID");this.VISITOR_ID!==t&&this.setFieldValue(this.VISITOR_ID,"VISITOR_ID")}},tO={init:function(){this.setColour(fE),this.appendDummyInput().appendField("MixIO").appendField(Ot.Msg.MSG.catEthernet_clinet),this.setOutput(!0),this.setInputsInline(!0)}},eO={init:function(){this.setColour(fE),this.appendDummyInput().appendField("HTTP"+Ot.Msg.MIXLY_Client),this.appendValueInput("addr").appendField(Ot.Msg.DISPLAY_IMAGE_LET2),this.appendDummyInput().appendField(Ot.Msg.MIXLY_REQUESTS_GET).appendField(Ot.Msg.MIXLY_GET_CURRENT_TIME).appendField(Ot.Msg.MIXLY_OPEN_DEBUG).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE,"True"],[Ot.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE,"False"]]),"key"),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},iO={init:function(){this.setColour(fE),this.appendDummyInput().appendField("HTTP"+Ot.Msg.MIXLY_Client).appendField(Ot.Msg.MIXLY_GET).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_REQUESTS_LEN,"client_len"],[Ot.Msg.MIXLY_REQUESTS_GET_LEN,"server_len"],[Ot.Msg.MIXLY_REQUESTS_MESSAGE,"text"]]),"key"),this.setOutput(!0),this.setInputsInline(!0)}},nO={init:function(){this.setColour(fE),this.appendDummyInput().appendField("MQTT"+Ot.Msg.MIXLY_Client),this.appendValueInput("addr").appendField(Ot.Msg.MIXLY_CONNECTTO),this.appendDummyInput().appendField(Ot.Msg.MIXLY_INIT_SUBSCRIBE).appendField(Ot.Msg.MQTT_Topic).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_GET_CURRENT_TIME,""]]),"key").appendField(Ot.Msg.MIXLY_OPEN_DEBUG).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE,"True"],[Ot.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE,"False"]]),"key2"),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},sO={init:function(){this.setColour(fE),this.appendDummyInput().appendField("MQTT"+Ot.Msg.MIXLY_Client).appendField(Ot.Msg.MIXLY_GET).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_REQUESTS_LEN,"client_len"],[Ot.Msg.MIXLY_REQUESTS_GET_LEN,"server_len"],[Ot.Msg.MIXLY_REQUESTS_MESSAGE,"time_msg()"]]),"key"),this.setOutput(!0),this.setInputsInline(!0)}},_O=FE,oO=PE,pO=YE,aO=vE,uO=yE,rO=225,lO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_NETWORK_INIT),this.appendDummyInput().appendField(Ot.Msg.MIXLY_NETWORK_MODE).appendField(new Ot.FieldDropdown([["STA","STA"],["AP","AP"]]),"mode"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_INIT_TOOLTIP)}},dO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var"),this.appendDummyInput().appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_NETWORK_WIFI_OPEN,"True"],[Ot.Msg.MIXLY_NETWORK_WIFI_CLOSE,"False"]]),"op"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_NETWORK_WIFI_FLAG),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("op"),i=Ot.Msg.MIXLY_ESP32_NETWORK_OPEN_TOOLTIP;return{True:Ot.Msg.MIXLY_NETWORK_WIFI_OPEN,False:Ot.Msg.MIXLY_NETWORK_WIFI_CLOSE}[e]+i}))}},IO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_NETWORK_WIFI_IS_ACTIVE),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_NETWORK_WIFI_IS_ACTIVE)}},TO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_NETWORK_WIFI_SCAN),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip((function(){return Ot.Msg.MIXLY_ESP32_NETWORK_SCAN_TOOLTIP+{0:"ssid",1:"bssid",2:"channel",3:"RSSI",4:"authmode",5:"hidden",all:Ot.Msg.MIXLY_NETWORK_WIFI_SCAN_ATTRIBUTE}.all}))}},MO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_ESP32_NETWORK_CONNECT),this.appendValueInput("id").setCheck(String).appendField(Ot.Msg.HTML_NAME),this.appendValueInput("password").setCheck(String).appendField(Ot.Msg.HTML_PASSWORD),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_CONNECT_TOOLTIP)}},hO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_NETWORK_WIFI_CONNECT+Ot.Msg.MIXLY_SYMBOL_QUESTION),this.setOutput(!0,Boolean),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_WIFI_CONNECT_TOOLTIP)}},mO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_ESP32_NETWORK_GET_WIFI),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_ESP32_NETWORK_IP,"0"],[Ot.Msg.MIXLY_ESP32_NETWORK_MASK,"1"],[Ot.Msg.MIXLY_ESP32_NETWORK_GATEWAY,"2"],["DNS","3"]]),"mode"),this.setOutput(!0),this.setInputsInline(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("mode");return Ot.Msg.MIXLY_ESP32_NETWORK_GET_WIFI_TOOLTIP+{0:Ot.Msg.MIXLY_ESP32_NETWORK_IP,1:Ot.Msg.MIXLY_ESP32_NETWORK_MASK,2:Ot.Msg.MIXLY_ESP32_NETWORK_GATEWAY,3:"DNS"}[e]}))}},EO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_ESP32_NETWORK_STOP_CONNECT),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_STOP_TOOLTIP)}},OO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_ESP32_NETWORK_GET_WIFI),this.appendDummyInput().appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_NETWORK_WIFI_ESSID,"essid"],[Ot.Msg.MIXLY_NETWORK_WIFI_CHANNEL,"channel"]]),"op"),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_GET_WIFI_TOOLTIP)}},RO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.LISTS_SET_INDEX_SET),this.appendValueInput("essid").setCheck(String).appendField(Ot.Msg.MIXLY_NETWORK_WIFI_ESSID),this.appendValueInput("channel").setCheck(Number).appendField(Ot.Msg.MIXLY_NETWORK_WIFI_CHANNEL),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_AP_CONNECT_TOOLTIP)}},cO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_ESP32_NETWORK_SERVER1),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_ESP32_NETWORK_SERVER2),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_SOCKET_CLOSE_TOOLTIP)}},gO={init:function(){this.setColour(rO),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_INIT).setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_TYPE).appendField(new Ot.FieldDropdown([["TCP","TCP"],["UDP","UDP"]]),"mode"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("mode");return Ot.Msg.MIXLY_ESP32_NETWORK_SOCKET_INIT_TOOLTIP+{TCP:"TCP",UDP:"UDP"}[e]}))}},CO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var").appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_LET_SOCKET),this.appendValueInput("address").appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_BIND_TO_ADDRESS),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_SOCKET_BIND_TOOLTIP)}},SO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var").appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_LET_SOCKET),this.appendValueInput("address").appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_CONNECT_TO_ADDRESS),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_SOCKET_CONNECT_TOOLTIP)}},LO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var"),this.appendValueInput("queue").setCheck(Number).appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_LISTEN).appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_QUEUE),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_SOCKET_LISTEN_TOOLTIP)}},AO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_ACCEPT),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_SOCKET_ACCEPT_TOOLTIP)}},NO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var").appendField("TCP"),this.appendValueInput("size").setCheck(Number).appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_RECEIVE),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_SOCKET_RECEIVE_TOOLTIP)}},DO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var").appendField("TCP"),this.appendValueInput("content").appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_SEND),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_SOCKET_SEND_TOOLTIP)}},fO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var").appendField("UDP"),this.appendValueInput("size").setCheck(Number).appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_RECEIVE),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_SOCKET_RECEIVE_FROM_TOOLTIP)}},FO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var").appendField("UDP"),this.appendValueInput("content").appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_SEND),this.appendValueInput("address").appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_TO),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_SOCKET_SEND_TO_TOOLTIP)}},PO={init:function(){this.setColour(rO),this.appendValueInput("VAR").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_CLOSE),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_NETWORK_SOCKET_CLOSE_TOOLTIP)}},YO={init:function(){this.setColour(rO),this.appendValueInput("DOMAIN").appendField(Ot.Msg.DISPLAY_IMAGE_LET2).setCheck(String),this.appendDummyInput("").appendField(Ot.Msg.blockpy_REQUESTS_GET).appendField(new Ot.FieldTextInput("response"),"VAR"),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.blockpy_REQUESTS_GET_TOOLTIP)},getVars:function(){return[this.getFieldValue("VAR")]},renameVar:function(t,e){Ot.Names.equals(t,this.getFieldValue("VAR"))&&this.setTitleValue(e,"VAR")}},vO={init:function(){this.appendValueInput("VAL");var t=[[Ot.Msg.blockpy_REQUESTS_GET_ATTR_STATUS_CODE,"status_code"],[Ot.Msg.blockpy_REQUESTS_GET_ATTR_TEXT,"text"],[Ot.Msg.blockpy_REQUESTS_GET_ATTR_COOKIES,"cookies"],[Ot.Msg.blockpy_REQUESTS_GET_ATTR_CONTENT,"content"]];this.setColour(rO),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MICROBIT_JS_GET).appendField(new Ot.FieldDropdown(t),"ATTR"),this.setInputsInline(!0),this.setOutput(!0,String);var e=this;this.setTooltip((function(){var t=e.getFieldValue("DIR");return{clear:Ot.Msg.MIXLY_TOOLTIP_TURTEL_CLEAR,reset:Ot.Msg.MIXLY_TOOLTIP_TURTEL_RESET,home:Ot.Msg.MIXLY_TOOLTIP_TURTEL_HOME}[t]}))}},XO={init:function(){this.appendValueInput("VAR").appendField(Ot.Msg.DISPLAY_IMAGE_LET2).setCheck(String);this.setColour(rO),this.appendDummyInput("").appendField(Ot.Msg.blockpy_CONDUCT).appendField(new Ot.FieldDropdown([["post","post"],["put","put"],["delete","delete"],["head","head"],["option","option"]]),"DIR"),this.appendDummyInput("").appendField(Ot.Msg.blockpy_REQUESTS),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("DIR");return{forward:Ot.Msg.MIXLY_TOOLTIP_TURTEL_FORWARD,backward:Ot.Msg.MIXLY_TOOLTIP_TURTEL_BACKWARD}[e]}))}},yO={init:function(){this.setColour(rO),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_GET_NTP+"(NTP)"),this.appendValueInput("data").appendField(Ot.Msg.blynk_SERVER_ADD),this.setOutput(!0,"Tuple"),this.setInputsInline(!0)}},xO={init:function(){this.setColour(rO),this.appendDummyInput("").appendField(new Ot.FieldDropdown([["ntp.aliyun.com","ntp.aliyun.com"],["ntp1.aliyun.com","ntp1.aliyun.com"],["ntp2.aliyun.com","ntp2.aliyun.com"],["ntp3.aliyun.com","ntp3.aliyun.com"],["ntp4.aliyun.com","ntp4.aliyun.com"],["ntp5.aliyun.com","ntp5.aliyun.com"],["ntp6.aliyun.com","ntp6.aliyun.com"],["ntp7.aliyun.com","ntp7.aliyun.com"],["time1.cloud.tencent.com","time1.cloud.tencent.com"],["time2.cloud.tencent.com","time2.cloud.tencent.com"],["time3.cloud.tencent.com","time3.cloud.tencent.com"],["time4.cloud.tencent.com","time4.cloud.tencent.com"],["time5.cloud.tencent.com","time5.cloud.tencent.com"]]),"op"),this.setOutput(!0)}},bO="#3288dd",VO={init:function(){this.setColour(bO),this.appendValueInput("URL").appendField(Ot.Msg.DISPLAY_IMAGE_LET2).setCheck(String),this.appendDummyInput("").appendField(Ot.Msg.blockpy_CONDUCT).appendField(new Ot.FieldDropdown([["get","get"],["head","head"],["delete","delete"]]),"TYPE").appendField(Ot.Msg.blockpy_REQUESTS).appendField(Ot.Msg.MIXPY_REQUESTS_GET_RESULT),this.setInputsInline(!0),this.setOutput(!0),this.setTooltip("")}},BO={init:function(){this.setColour(bO),this.appendValueInput("URL").appendField(Ot.Msg.DISPLAY_IMAGE_LET2).setCheck(String),this.appendDummyInput("").appendField(Ot.Msg.blockpy_CONDUCT).appendField(new Ot.FieldDropdown([["post","post"],["put","put"],["patch","patch"]]),"TYPE").appendField(Ot.Msg.blockpy_REQUESTS),this.appendValueInput("data").appendField(Ot.Msg.blockpy_REQUESTS+Ot.Msg.OLED_STRING),this.appendDummyInput("").appendField(Ot.Msg.MIXPY_REQUESTS_GET_RESULT),this.setInputsInline(!0),this.setOutput(!0),this.setTooltip("")}},GO={init:function(){this.appendValueInput("VAL");var t=[[Ot.Msg.blockpy_REQUESTS_GET_ATTR_TEXT,"text"],[Ot.Msg.blockpy_REQUESTS_GET_ATTR_JSON,"json()"],[Ot.Msg.blockpy_REQUESTS_GET_ATTR_STATUS_CODE,"status_code"],[Ot.Msg.blockpy_REQUESTS_GET_ATTR_CONTENT,"content"],[Ot.Msg.MIXPY_TEXT_ENCODE,"encoding"]];this.setColour(bO),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MICROBIT_JS_GET).appendField(new Ot.FieldDropdown(t),"ATTR"),this.setInputsInline(!0),this.setOutput(!0,String)}},UO={init:function(){this.setColour(bO),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_IOT_CONNECT_WIFI),this.appendValueInput("WIFINAME").setCheck(String).appendField(Ot.Msg.HTML_NAME),this.appendValueInput("PASSWORD").setCheck(String).appendField(Ot.Msg.HTML_PASSWORD),this.appendValueInput("TIMEOUT").setCheck(Number).appendField(Ot.Msg.MIXLY_IR_TIMEOUT),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MILLIS),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_IOT_WIFI_CONNECT_TOOLTIP)}},wO={init:function(){this.setColour(bO),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_IOT_EMQX_CONNECT_TOOLTIP),this.appendValueInput("SERVER").setCheck(String).appendField(Ot.Msg.MIXLY_EMQX_SERVER).setAlign(Ot.inputs.Align.RIGHT),this.appendValueInput("PORT").setCheck(Number).appendField(Ot.Msg.MIXLY_EMQX_PORT).setAlign(Ot.inputs.Align.RIGHT),this.appendValueInput("CLIENT_ID").setCheck(String).appendField(Ot.Msg.MIXLY_EMQX_CLIENT_ID).setAlign(Ot.inputs.Align.RIGHT),this.appendValueInput("USERNAME").setCheck(String).appendField(Ot.Msg.MIXLY_WIFI_USERNAME).setAlign(Ot.inputs.Align.RIGHT),this.appendValueInput("PASSWORD").setCheck(String).appendField(Ot.Msg.MIXLY_IOT_PASSWORD).setAlign(Ot.inputs.Align.RIGHT),this.setPreviousStatement(!0),this.setNextStatement(!0)}},kO={init:function(){this.setColour(bO),this.appendValueInput("TOPIC").appendField(Ot.Msg.MIXLY_EMQX_SUBSCRIBE+Ot.Msg.MIXLY_MICROBIT_MSG).appendField(Ot.Msg.MIXLY_EMQX_PUBLISH_TOPIC),this.appendValueInput("MESSAGE").appendField(Ot.Msg.blockpy_set_of),this.setInputsInline(!0),this.setOutput(!0)}},HO={init:function(){this.setColour(bO),this.appendDummyInput().appendField("mqtt"),this.appendValueInput("TOPIC").appendField(Ot.Msg.MIXLY_EMQX_SUBSCRIBE+Ot.Msg.MIXLY_MICROBIT_MSG).appendField(Ot.Msg.MIXLY_EMQX_PUBLISH_TOPIC),this.appendValueInput("METHOD").appendField(Ot.Msg.MIXLY_EMQX_SET_METHOD),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},WO={init:function(){this.setColour(bO),this.appendDummyInput().appendField("mqtt"),this.appendValueInput("TOPIC").appendField(Ot.Msg.MIXLY_EMQX_PUBLISH_NEW).appendField(Ot.Msg.MIXLY_EMQX_PUBLISH_TOPIC),this.appendValueInput("MSG").appendField(Ot.Msg.HTML_BODY),this.setInputsInline(!0),this.setPreviousStatement(!0),this.setNextStatement(!0)}},KO={init:function(){this.setColour(bO),this.appendDummyInput().appendField("mqtt"+Ot.Msg.MIXLY_EMQX_IS_CONNECT),this.setInputsInline(!0),this.setOutput(!0)}},JO="#A58C5B",qO={init:function(){this.setColour(JO),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_BUTTON).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendDummyInput().appendField(Ot.Msg.MIXLY_IS_PRESSED),this.appendValueInput("STAT").appendField(Ot.Msg.MIXLY_ELECLEVEL),this.setOutput(!0,Boolean),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_SENOR_IS_PRESSED)}},QO={init:function(){this.setColour(JO),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_BUTTON).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendDummyInput().appendField(Ot.Msg.MIXLY_WAS_PRESSED),this.appendValueInput("STAT").appendField(Ot.Msg.MIXLY_ELECLEVEL),this.setOutput(!0,Boolean),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_SENOR_WAS_PRESSED)}},zO={init:function(){this.setColour(JO),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_BUTTON).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET_PRESSES),this.appendValueInput("VAR").setCheck(Number).appendField(Ot.Msg.MIXLY_GET_PRESSES_TIME),this.setOutput(!0,Number),this.setInputsInline(!0),this.setTooltip(Ot.Msg.PROCEDURES_DEFRETURN_RETURN+Ot.Msg.MIXLY_BUTTON+Ot.Msg.MIXLY_GET_PRESSES)}},jO={init:function(){this.setColour(JO),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_BUTTON).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MODE).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_RISING,"machine.Pin.IRQ_RISING"],[Ot.Msg.MIXLY_FALLING,"machine.Pin.IRQ_FALLING"],[Ot.Msg.MIXLY_CHANGE,"(machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING)"]]),"mode"),this.appendValueInput("DO").appendField(Ot.Msg.MIXLY_DO),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT)}},ZO={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField("MPU9250").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_shake,"shake"],[Ot.Msg.MIXLY_UP,"up"],[Ot.Msg.MIXLY_DOWN,"down"],[Ot.Msg.MIXLY_LEFT,"left"],[Ot.Msg.MIXLY_RIGHT,"right"],[Ot.Msg.MIXLY_MICROBIT_face_up,"face up"],[Ot.Msg.MIXLY_MICROBIT_face_down,"face down"],[Ot.Msg.MIXLY_MICROBIT_freefall,"freefall"],["3g","3g"],["6g","6g"],["8g","8g"]]),"gesture"),this.appendStatementInput("DO").appendField(Ot.Msg.MIXLY_DO),this.setPreviousStatement(!0),this.setNextStatement(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("gesture"),i=Ot.Msg.MIXLY_MICROBIT_JS_CURRENT,n=Ot.Msg.MSG.catSensor,s=Ot.Msg.MIXLY_MICROBIT_JS_STATE,_=Ot.Msg.MIXLY_MICROBIT_PERFORMANCE;return i+n+s+{shake:Ot.Msg.MIXLY_MICROBIT_shake,up:Ot.Msg.MIXLY_UP,down:Ot.Msg.MIXLY_DOWN,left:Ot.Msg.MIXLY_LEFT,right:Ot.Msg.MIXLY_RIGHT,"face up":Ot.Msg.MIXLY_MICROBIT_face_up,"face down":Ot.Msg.MIXLY_MICROBIT_face_down,freefall:Ot.Msg.MIXLY_MICROBIT_freefall,"3g":"3g","6g":"6g","8g":"8g"}[e]+_}))}},$O={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_ADXL345).setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_JS_ACCELERATION).appendField(new Ot.FieldDropdown([["x","x"],["y","y"],["z","z"],["(x,y,z)","values"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_JS_ACCELERATION);var t=this;this.setTooltip((function(){var e=t.getFieldValue("key"),i=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET,n=Ot.Msg.MIXLY_MICROBIT_Direction,s=Ot.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;return i+{x:"x",y:"y",z:"z","(x,y,z)":Ot.Msg.MIXLY_MICROBIT_Shiliang_Direction}[e]+n+s}))}},tR={init:function(){this.setColour(JO),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_JS_LIGHT_LEVEL),this.setOutput(!0,Number),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_SENSOR_LIGHT_LEVEL_TOOLTIP)}},eR={init:function(){var t=[[Ot.Msg.MIXLY_GETTEMPERATUE,"temperature"],[Ot.Msg.MIXLY_GETHUMIDITY,"humidity"]];this.setColour(JO),this.appendValueInput("PIN",Number).appendField(new Ot.FieldDropdown([["DHT11","DHT11"],["DHT22","DHT22"]]),"TYPE").appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendDummyInput("").appendField(new Ot.FieldDropdown(t),"WHAT"),this.setOutput(!0,Number);var e=this;this.setTooltip((function(){var t=e.getFieldValue("WHAT");return{temperature:Ot.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_TEM,relative_humidity:Ot.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_HUM,tempandhum:Ot.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_TEM_HUM}[t]}))}},iR={init:function(){this.setColour(JO),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_EXTERN_LIGHT),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_EXTERN_VALUE),this.setOutput(!0,Number),this.setInputsInline(!0),this.setTooltip(Ot.Msg.ESP32_SENSOR_NIXGO_LIGHT_TOOLTIP)}},nR={init:function(){this.setColour(JO),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_EXTERN_SOUND),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_EXTERN_VALUE),this.setOutput(!0,Number),this.setInputsInline(!0),this.setTooltip(Ot.Msg.ESP32_SENSOR_NIXGO_SOUND_TOOLTIP)}},sR={init:function(){this.setColour(JO),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET).appendField(new Ot.FieldDropdown([[Ot.Msg.TEXT_TRIM_LEFT,"left"],[Ot.Msg.TEXT_TRIM_RIGHT,"right"]]),"direction").appendField(Ot.Msg.MIXLY_ESP32_NEAR),this.setOutput(!0,Number),this.setInputsInline(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("direction"),i=Ot.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP,n=Ot.Msg.MIXLY_ESP32_NEAR;return i+{left:Ot.Msg.TEXT_TRIM_LEFT,right:Ot.Msg.TEXT_TRIM_RIGHT}[e]+n}))}},_R={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_ALTITUDE_SENSOR+" BMP280").setCheck("var"),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_GETTEMPERATUE,"get_BMP_temperature()"],[Ot.Msg.MIXLY_GETPRESSURE,"get_BMP_pressure()"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("key");return{"get_BMP_temperature()":Ot.Msg.MIXLY_MICROBIT_SENSOR_BMP_temperature_TOOLTIP,"get_BMP_pressure()":Ot.Msg.MIXLY_MICROBIT_SENSOR_BMP_press_TOOLTIP}[e]}))}},oR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_TEMP_AND_HUMIDITY_SENSOR+" SHT20").setCheck("var"),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_GETTEMPERATUE,"get_SHT_temperature()"],[Ot.Msg.MIXLY_GETHUMIDITY,"get_SHT_relative_humidity()"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("key");return{"get_SHT_temperature()":Ot.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,"get_SHT_relative_humidity()":Ot.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP}[e]}))}},pR={init:function(){this.setColour(JO),this.appendValueInput("PIN",Number).appendField("DS18X20 "+Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_GETTEMPERATUE),this.setInputsInline(!0),this.setOutput(!0,Number),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_SENSOR_DS18X20_TOOLTIP)}},aR={init:function(){this.setColour(JO),this.appendDummyInput("").appendField("LM35"+Ot.Msg.MIXLY_TEMP),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_GETTEMPERATUE),this.setInputsInline(!0),this.setOutput(!0,Number),this.setTooltip(Ot.Msg.MIXLY_TOOLTIP_LM35)}},uR={init:function(){this.setColour(JO),this.appendValueInput("I2CSUB").appendField(Ot.Msg.CONTROLS_FOR_INPUT_WITH+"I2C").setCheck("var"),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE).setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_SETUP+Ot.Msg.LISTS_SET_INDEX_INPUT_TO).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_ESP32_EXTERN_LIGHT+"(LTR308ALS)","LTR308"],[Ot.Msg.MIXLY_COLOR_SENSOR+"(LTR381RGB)","LTR381RGB"],[Ot.Msg.MIXLY_COLOR_SENSOR+"(UCS12071)","UCS12071"],[Ot.Msg.MIXLY_EXTERN_LIGHTUV+"(LTR390UV)","LTR390UV"],[Ot.Msg.MIXLY_ALTITUDE_SENSOR+"(HP203X)","HP203X"],[Ot.Msg.MIXLY_ALTITUDE_SENSOR+"(SPL06_001)","SPL06_001"],[Ot.Msg.MIXLY_ALTITUDE_SENSOR+"(BMP280)","BMP280"],[Ot.Msg.MIXLY_TEMP_AND_HUMIDITY_SENSOR+"(SHTC3)","SHTC3"],[Ot.Msg.MIXLY_TEMP_AND_HUMIDITY_SENSOR+"(AHT21)","AHT21"],[Ot.Msg.MIXLY_TEMP_AND_HUMIDITY_SENSOR+"(SHT20)","SHT20"],[Ot.Msg.MIXLY_LASER_RANGE_SENSOR+"(VL53L0X)","VL53L0X"],[Ot.Msg.MIXLY_GEOMAGNETIC_SENSOR+"(QMC5883L)","QMC5883L"],[Ot.Msg.MIXLY_ESP32_MAX30102+"(MAX30102)","MAX30102"],[Ot.Msg.HTML_COLOUR+"、"+Ot.Msg.MIXLY_ENVIRONMENT_LIGHT+"、"+Ot.Msg.MIXLY_NEXT+"、"+Ot.Msg.MIXLY_ESP32_APDS9960+"(APDS9960)","APDS9960"],[Ot.Msg.MIXLY_NINE_AXIS_SENSOR+"(MPU9250)","MPU9250"],[Ot.Msg.MixGo_MPU9250+"(ADXL345)","ADXL345"],["RFID","RFID"],[Ot.Msg.MIXLY_RADAR_SENSOR+"(CBR817)","CBR817"],[Ot.Msg.MIXLY_AipSpeech_asr+"(CI130X)","CI130X"]]),"key"),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setFieldValue("LTR308","key")}},rR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_RADAR+"CBR817").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.LISTS_SET_INDEX_SET+Ot.Msg.MIXlY_INTERACTION),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_DETECTION_THRESHOLD),this.appendValueInput("VAR2").appendField(Ot.Msg.MIXLY_DELAY_TIME),this.appendDummyInput().appendField("ms"),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_THRESHOLD_TOOLTIP+" ; "+Ot.Msg.MIXLY_DELAY_TIME_RANGE)}},lR={init:function(){this.setColour(JO),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RADAR).appendField(Ot.Msg.LISTS_SET_INDEX_SET+Ot.Msg.MIXlY_INTERACTION),this.appendValueInput("VAR").appendField(Ot.Msg.MIXLY_DETECTION_THRESHOLD),this.appendValueInput("VAR2").appendField(Ot.Msg.MIXLY_DELAY_TIME),this.appendDummyInput().appendField("ms"),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_THRESHOLD_TOOLTIP+" ; "+Ot.Msg.MIXLY_DELAY_TIME_RANGE)}},dR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_RADAR+"CBR817").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_GET_TO_INTERACTION),this.setOutput(!0),this.setInputsInline(!0)}},IR={init:function(){this.setColour(JO),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RADAR).appendField(Ot.Msg.MIXLY_GET_TO_INTERACTION),this.setOutput(!0),this.setInputsInline(!0)}},TR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_AipSpeech_asr+"CI130X").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_IDENTIFY_ONCE_AND_SAVE),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0)}},MR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_AipSpeech_asr+"CI130X").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_GET).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_HELLO_XIAOZHI,"1"],[Ot.Msg.MIXLY_XIAOZHIXIAOZHI,"2"],[Ot.Msg.MIXLY_THE_FIRST,"3"],[Ot.Msg.MIXLY_THE_SECOND,"4"],[Ot.Msg.MIXLY_THE_THIRD,"5"],[Ot.Msg.MIXLY_THE_FOURTH,"6"],[Ot.Msg.MIXLY_THE_FIFTH,"7"],[Ot.Msg.MIXLY_THE_SIXTH,"8"],[Ot.Msg.MIXLY_THE_SEVENTH,"9"],[Ot.Msg.MIXLY_THE_EIGHTH,"10"],[Ot.Msg.MIXLY_THE_NINTH,"11"],[Ot.Msg.MIXLY_THE_TENTH,"12"],[Ot.Msg.MIXLY_THE_ELEVENTH,"13"],[Ot.Msg.MIXLY_THE_TWELFTH,"14"],[Ot.Msg.MIXLY_THE_13TH,"15"],[Ot.Msg.MIXLY_THE_14TH,"16"],[Ot.Msg.MIXLY_THE_15TH,"17"],[Ot.Msg.MIXLY_THE_16TH,"18"],[Ot.Msg.MIXLY_THE_17TH,"19"],[Ot.Msg.MIXLY_THE_18TH,"20"],[Ot.Msg.MIXLY_THE_19TH,"21"],[Ot.Msg.MIXLY_THE_20TH,"22"],[Ot.Msg.MIXLY_Turn_on_the_lights,"23"],[Ot.Msg.MIXLY_Turn_off_the_lights,"24"],[Ot.Msg.MIXLY_Turn_up_the_brightness,"25"],[Ot.Msg.MIXLY_Turn_down_the_brightness,"26"],[Ot.Msg.MIXLY_Set_it_to_red,"27"],[Ot.Msg.MIXLY_Set_it_to_orange,"28"],[Ot.Msg.MIXLY_Set_it_to_yellow,"29"],[Ot.Msg.MIXLY_Set_it_to_green,"30"],[Ot.Msg.MIXLY_Set_it_to_cyan,"31"],[Ot.Msg.MIXLY_Set_it_to_blue,"32"],[Ot.Msg.MIXLY_Set_it_to_purple,"33"],[Ot.Msg.MIXLY_Set_it_to_white,"34"],[Ot.Msg.MIXLY_Turn_on_the_fan,"35"],[Ot.Msg.MIXLY_Turn_off_the_fan,"36"],[Ot.Msg.MIXLY_First_gear,"37"],[Ot.Msg.MIXLY_Wind_speed_second,"38"],[Ot.Msg.MIXLY_Third_gear,"39"],[Ot.Msg.MIXLY_Previous,"40"],[Ot.Msg.MIXLY_Next_page,"41"],[Ot.Msg.MIXLY_Show_smiley_face,"42"],[Ot.Msg.MIXLY_Show_crying_face,"43"],[Ot.Msg.MIXLY_Show_love,"44"],[Ot.Msg.MIXLY_Close_display,"45"],[Ot.Msg.MIXLY_Start_execution,"46"],[Ot.Msg.MIXLY_FORWARD,"47"],[Ot.Msg.MIXLY_BACKWARD,"48"],[Ot.Msg.MIXLY_TURNLEFT,"49"],[Ot.Msg.MIXLY_TURNRIGHT,"50"],[Ot.Msg.MIXLY_STOP,"51"],[Ot.Msg.MIXLY_Accelerate,"52"],[Ot.Msg.MIXLY_retard,"53"],[Ot.Msg.ROTATION_FORWARD,"54"],[Ot.Msg.ROTATION_BACKWARD,"55"],[Ot.Msg.MIXLY_Query_temperature,"56"],[Ot.Msg.MIXLY_Query_humidity,"57"],[Ot.Msg.MIXLY_Query_brightness,"58"],[Ot.Msg.MIXLY_Query_sound,"59"],[Ot.Msg.MIXLY_Query_time,"60"],[Ot.Msg.MIXLY_Query_distance,"61"],[Ot.Msg.MIXLY_Query_pressure,"62"],[Ot.Msg.MIXLY_Query_key,"63"],[Ot.Msg.MIXLY_Query_touch,"64"],[Ot.Msg.MIXLY_Query_color,"65"]]),"cmd").appendField(Ot.Msg.MIXLY_WHETHER+Ot.Msg.MIXLY_BE_IDENTIFIED),this.setOutput(!0),this.setInputsInline(!0)}},hR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_AipSpeech_asr+"CI130X").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_GET).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_RECOGNIZED_STATE,"status1"],[Ot.Msg.MIXLY_WHETHER_BROADCAST,"status2"],[Ot.Msg.MIXLY_THE_RECOGNIZED_CMD,"result"]]),"key"),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_CI130X_GET_THE_RECOGNIZED_STATE_TOOLTIP)}},mR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_AipSpeech_asr+"CI130X").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MP3_PLAY).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_JS_INOUT_PULL_NONE,"None"],[Ot.Msg.MIXLY_WIND_SPEED,"154"],[Ot.Msg.MIXLY_HYETAL,"155"],[Ot.Msg.MIXLY_TEMPERATURE,"156"],[Ot.Msg.MIXLY_Humidity,"157"],[Ot.Msg.MIXLY_Altitude,"158"],[Ot.Msg.MIXLY_SOUND,"159"],[Ot.Msg.MIXLY_BRIGHTNESS,"160"],[Ot.Msg.ME_GO_HALL_SENSOR_DISTANCE,"161"],[Ot.Msg.MIXLY_SERVO,"162"],[Ot.Msg.MIXLY_MICROBIT_JS_BY_ANGLE,"163"],[Ot.Msg.MIXLY_BUTTON2,"164"],[Ot.Msg.MIXLY_ESP32_TOUCH,"165"],[Ot.Msg.MIXLY_PAY,"166"],[Ot.Msg.MIXLY_CARSH_CHANGE,"167"],[Ot.Msg.MIXLY_COUNTDOWN,"168"],[Ot.Msg.MIXLY_TIMING,"169"],[Ot.Msg.MIXLY_AT_THE_MOMENT,"170"],[Ot.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE,"171"],[Ot.Msg.MIXLY_FORWARD,"172"],[Ot.Msg.MIXLY_BACKWARD,"173"],[Ot.Msg.MIXLY_TURNLEFT,"174"],[Ot.Msg.MIXLY_TURNRIGHT,"175"],[Ot.Msg.MIXLY_STOP,"176"],[Ot.Msg.MIXLY_Accelerate,"177"],[Ot.Msg.MIXLY_retard,"178"],[Ot.Msg.ROTATION_FORWARD,"179"],[Ot.Msg.ROTATION_BACKWARD,"180"],[Ot.Msg.TUPLE_JOIN,"181"],[Ot.Msg.MIXLY_SHOW,"182"],[Ot.Msg.MIXLY_LAMPLIGHT,"183"],[Ot.Msg.MIXLY_ACCELERATION,"184"]]),"star"),this.appendValueInput("NUM").appendField(Ot.Msg.MIXLY_NUMBER),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_UNIT).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_JS_INOUT_PULL_NONE,"None"],[Ot.Msg.MIXLY_YEAR,"117"],[Ot.Msg.MIXLY_MONTH,"118"],[Ot.Msg.MIXLY_DAY,"119"],[Ot.Msg.MIXLY_HOUR,"120"],[Ot.Msg.MIXLY_MINUTE,"121"],[Ot.Msg.MIXLY_SECOND,"122"],[Ot.Msg.MIXLY_WEEK2,"123"],[Ot.Msg.MIXLY_RMB_UNIT,"124"],[Ot.Msg.blockpy_setheading_degree,"125"],[Ot.Msg.MIXLY_GEAR,"126"],[Ot.Msg.MIXLY_LAYER,"127"],[Ot.Msg.MIXLY_GRAM,"128"],[Ot.Msg.MIXLY_METER,"129"],[Ot.Msg.MIXLY_CENTIMETER,"130"],[Ot.Msg.MIXLY_MILLIMETER,"131"],[Ot.Msg.MIXLY_LUMEN,"132"],[Ot.Msg.MIXLY_DECIBEL,"133"],[Ot.Msg.MIXLY_hectopascal,"134"],[Ot.Msg.MIXLY_PERCENT,"135"],[Ot.Msg.MIXLY_CELSIUS,"136"],[Ot.Msg.MIXLY_METER_PER_SEC,"137"],[Ot.Msg.MIXLY_MICROBIT_Turn_on_display,"138"],[Ot.Msg.MIXLY_MICROBIT_Turn_off_display,"139"],[Ot.Msg.MIXLY_SUCCESS,"140"],[Ot.Msg.MIXLY_FAILED,"141"],[Ot.Msg.MIXLY_WRONG,"142"],[Ot.Msg.MIXLY_GOOD,"143"],[Ot.Msg.MIXLY_blockpy_set_add,"144"],[Ot.Msg.MIXLY_DECREASE,"145"],[Ot.Msg.COLOUR_RGB_RED,"146"],[Ot.Msg.COLOUR_RGB_ORANGE,"147"],[Ot.Msg.COLOUR_YELLOW,"148"],[Ot.Msg.COLOUR_RGB_GREEN,"149"],[Ot.Msg.COLOUR_CYAN,"150"],[Ot.Msg.COLOUR_RGB_BLUE,"151"],[Ot.Msg.COLOUR_RGB_PURPLE,"152"],[Ot.Msg.COLOUR_RGB_WHITE,"153"]]),"end"),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0)}},ER={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_AipSpeech_asr+"CI130X").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.LISTS_SET_INDEX_SET+Ot.Msg.MIXLY_SYSTEM+Ot.Msg.MIXLY_CMD).appendField(new Ot.FieldDropdown([[Ot.Msg.MILXY_ENTER_WAKE_UP,"1"],[Ot.Msg.MIXLY_INCREASE_VOLUME,"202"],[Ot.Msg.MIXLY_REDUCE_VOLUME,"203"],[Ot.Msg.MIXLY_MAX_VOLUME,"204"],[Ot.Msg.MIXLY_MINIMUM,"205"],[Ot.Msg.MIXLY_OPEN_RESPONSE,"206"],[Ot.Msg.MIXLY_CLOSE_RESPONSE,"207"],[Ot.Msg.MIXLY_QUIT_WAKE_UP,"208"]]),"cmd"),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0)}},OR={init:function(){this.setColour(JO),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_MAX30102+" MAX30102"),this.appendValueInput("SUB").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_ESP32_MAX30102_IR,"[0]"],[Ot.Msg.MIXLY_ESP32_MAX30102_RED,"[1]"],[Ot.Msg.MIXLY_ESP32_MAX30102_IR+","+Ot.Msg.MIXLY_ESP32_MAX30102_RED,""]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0)}},RR={init:function(){this.setColour(JO),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_APDS9960+" APDS9960"),this.appendValueInput("SUB").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_ESP32_APDS9960_COLOR,"color"],[Ot.Msg.MIXLY_ESP32_APDS9960_GESTURE,"gesture"],[Ot.Msg.MIXLY_ESP32_APDS9960_APPROACH,"proximity"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0)}},cR={init:function(){this.setColour(JO),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_EXTERN_LIGHT+" LTR308ALS"),this.appendValueInput("SUB").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET_LIGHT_INTENSITY),this.setOutput(!0,Number),this.setInputsInline(!0)}},gR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.HTML_COLOUR+Ot.Msg.MSG.catSensor+" LTR381RGB").setCheck("var"),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_GET+Ot.Msg.HTML_COLOUR,"[2]"],[Ot.Msg.MIXLY_GET+Ot.Msg.MIXLY_IR_STRENGTH,"[1]"],[Ot.Msg.MIXLY_GET+Ot.Msg.MIXLY_LIGHT_STRENGTH,"[0]"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0)}},CR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.HTML_COLOUR+Ot.Msg.MSG.catSensor+" UCS12071").setCheck("var"),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_GET+"RGB"+Ot.Msg.HTML_COLOUR,"0"],[Ot.Msg.MIXLY_GET+Ot.Msg.MIXLY_RGB_RAW,"1"],[Ot.Msg.MIXLY_GET_ENV_LIGHT+Ot.Msg.MIXLY_BRIGHTNESS,"2"],[Ot.Msg.GET_IR_STRENGTH+Ot.Msg.MIXLY_BRIGHTNESS,"3"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0)}},SR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_EXTERN_LIGHTUV+" LTR390UV").setCheck("var"),this.appendDummyInput().appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_GET_ENV_LIGHT,"E"],[Ot.Msg.MIXLY_GET_ULTRAVIOLET,"U"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0)}},LR={init:function(){this.setColour(JO),this.appendDummyInput().appendField(Ot.Msg.MIXLY_LASER_RANGE+" VL53L0X"),this.appendValueInput("SUB").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GET_DISTANCE+"(mm)"),this.setOutput(!0,Number),this.setInputsInline(!0)}},AR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_TEM_HUM+" SHTC3").setCheck("var"),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_GETTEMPERATUE,"temperature"],[Ot.Msg.MIXLY_GETHUMIDITY,"humidity"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("key");return{temperature:Ot.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,humidity:Ot.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP}[e]}))}},NR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_TEM_HUM+" AHT21").setCheck("var"),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_GETTEMPERATUE,"temperature"],[Ot.Msg.MIXLY_GETHUMIDITY,"humidity"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("key");return{temperature:Ot.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,relative_humidity:Ot.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP}[e]}))}},DR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_Altitude+Ot.Msg.MSG.catSensor+" HP203X").setCheck("var"),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_GETPRESSURE,"pressure()"],[Ot.Msg.MIXLY_GETTEMPERATUE,"temperature()"],[Ot.Msg.MIXLY_GET_ALTITUDE,"altitude()"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0)}},fR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_Altitude+Ot.Msg.MSG.catSensor+" SPL06_001").setCheck("var"),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_GETPRESSURE,"pressure()"],[Ot.Msg.MIXLY_GETTEMPERATUE,"temperature()"],[Ot.Msg.MIXLY_GET_ALTITUDE,"altitude()"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0)}},FR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_MIXGOPE_FIELD+Ot.Msg.MSG.catSensor+" QMC5883L").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MICROBIT_JS_GET).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_JS_BY_ANGLE,"get_bearing()"],[Ot.Msg.MIXLY_TEMPERATURE,"get_temp()"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0)}},PR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField("MPU9250").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_shake,"shake"],[Ot.Msg.MIXLY_UP,"up"],[Ot.Msg.MIXLY_DOWN,"down"],[Ot.Msg.MIXLY_LEFT,"left"],[Ot.Msg.MIXLY_RIGHT,"right"],[Ot.Msg.MIXLY_MICROBIT_face_up,"face up"],[Ot.Msg.MIXLY_MICROBIT_face_down,"face down"]]),"gesture"),this.setOutput(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("gesture"),i=Ot.Msg.MIXLY_MICROBIT_JS_CURRENT,n=Ot.Msg.MSG.catSensor,s=Ot.Msg.MIXLY_MICROBIT_JS_STATE,_=Ot.Msg.MIXLY_MICROBIT_PERFORMANCE;return i+n+s+{shake:Ot.Msg.MIXLY_MICROBIT_shake,up:Ot.Msg.MIXLY_UP,down:Ot.Msg.MIXLY_DOWN,left:Ot.Msg.MIXLY_LEFT,right:Ot.Msg.MIXLY_RIGHT,"face up":Ot.Msg.MIXLY_MICROBIT_face_up,"face down":Ot.Msg.MIXLY_MICROBIT_face_down}[e]+_}))}},YR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_NINE_AXIS_SENSOR+" MPU9250").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_JS_ACCELERATION).appendField(new Ot.FieldDropdown([["x","x"],["y","y"],["z","z"],["(x,y,z)","values"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_JS_ACCELERATION);var t=this;this.setTooltip((function(){var e=t.getFieldValue("key"),i=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET,n=Ot.Msg.MIXLY_MICROBIT_Direction,s=Ot.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;return i+{x:"x",y:"y",z:"z","(x,y,z)":Ot.Msg.MIXLY_MICROBIT_Shiliang_Direction}[e]+n+s}))}},vR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_NINE_AXIS_SENSOR+" MPU9250").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_JS_GET+Ot.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH).appendField(new Ot.FieldDropdown([["x","x"],["y","y"],["z","z"],["(x,y,z)","values"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("key"),i=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET,n=Ot.Msg.MIXLY_MICROBIT_Direction,s=Ot.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH;return i+{x:"x",y:"y",z:"z","(x,y,z)":Ot.Msg.MIXLY_MICROBIT_Shiliang_Direction}[e]+n+s}))}},XR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_NINE_AXIS_SENSOR+" MPU9250").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET+Ot.Msg.MIXLY_ESP32_SENOR_GYRO).appendField(new Ot.FieldDropdown([["x","x"],["y","y"],["z","z"],["(x,y,z)","values"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("key"),i=Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET,n=Ot.Msg.MIXLY_MICROBIT_Direction,s=Ot.Msg.MIXLY_ESP32_SENOR_GYRO;return i+{x:"x",y:"y",z:"z","(x,y,z)":Ot.Msg.MIXLY_MICROBIT_Shiliang_Direction}[e]+n+s}))}},yR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_NINE_AXIS_SENSOR+" MPU9250").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS)}},xR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_NINE_AXIS_SENSOR+" MPU9250").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_GETTEMPERATUE),this.setOutput(!0,Number),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_GETTEMPERATUE)}},bR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField("MPU9250").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_JS_GET_COMPASS).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH,"strength"],[Ot.Msg.MIXLY_MICROBIT_JS_BY_ANGLE,"heading"]]),"compass"),this.setOutput(!0,Number),this.setInputsInline(!0);var t=this;this.setTooltip((function(){var e=t.getFieldValue("compass");return Ot.Msg.MIXLY_MICROBIT_JS_GET_COMPASS+{strength:Ot.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH,heading:Ot.Msg.MIXLY_MICROBIT_JS_BY_ANGLE}[e]}))}},VR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField("MPU9250").setCheck("var"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_Reset_COMPASS),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_MICROBIT_Reset_COMPASS)}},BR={init:function(){this.setColour(JO),this.appendValueInput("SPISUB").appendField(Ot.Msg.CONTROLS_FOR_INPUT_WITH+"SPI").setCheck("var"),this.appendValueInput("PINSUB").appendField("CS"),this.appendValueInput("SUB").appendField(Ot.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE).setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_SETUP+Ot.Msg.LISTS_SET_INDEX_INPUT_TO).appendField(new Ot.FieldDropdown([["RFID","RFID"],["WS-LoRa","Weather"]]),"key"),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setFieldValue("RFID","key")}},GR={init:function(){this.setColour(JO),this.appendDummyInput().appendField("RFID"+Ot.Msg.MIXLY_RFID_READ_CARD),this.appendValueInput("SUB").setCheck("var"),this.appendValueInput("SECTOR").appendField(Ot.Msg.MIXLY_LIST_INDEX),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_RFID_READ_CARD_UID,"id"],[Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL,"content"],[Ot.Msg.MIXLY_ALL,"ALL"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0)}},UR={init:function(){this.setColour(JO),this.appendDummyInput().appendField("RFID"+Ot.Msg.MIXLY_RFID_READ_CARD),this.appendValueInput("SUB").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RFID_READ_CARD_UID),this.setOutput(!0,Number),this.setInputsInline(!0)}},wR={init:function(){this.setColour(JO),this.appendDummyInput().appendField("RFID"+Ot.Msg.MIXLY_RFID_READ_CARD),this.appendValueInput("SUB").setCheck("var"),this.appendValueInput("SECTOR").appendField(Ot.Msg.MIXLY_LIST_INDEX),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL),this.setOutput(!0,"Tuple"),this.setInputsInline(!0)}},kR={init:function(){this.setColour(JO),this.appendDummyInput().appendField(Ot.Msg.MIXLY_COMMUNICATION_RFID_WRITE),this.appendValueInput("SUB").setCheck("var"),this.appendValueInput("SECTOR").appendField(Ot.Msg.MIXLY_LIST_INDEX),this.appendValueInput("CONTENT").appendField(Ot.Msg.MIXLY_COMMUNICATION_WRITE_NUM),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null)}},HR={init:function(){this.setColour(JO),this.appendDummyInput().appendField(Ot.Msg.MIXLY_COMMUNICATION_RFID_WRITE),this.appendValueInput("SUB").setCheck("var"),this.appendValueInput("SECTOR").appendField(Ot.Msg.MIXLY_LIST_INDEX),this.appendValueInput("CONTENT").appendField(Ot.Msg.MIXLY_COMMUNICATION_WRITE_NUM),this.appendDummyInput().appendField(Ot.Msg.RETURN_SUCCESS_OR_NOT),this.setInputsInline(!0),this.setOutput(!0,Boolean)}},WR={init:function(){this.setColour(JO),this.appendDummyInput().appendField("RFID"),this.appendValueInput("SUB").setCheck("var"),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_RFID_SCAN_OK,"0"],[Ot.Msg.MIXLY_RFID_SCAN_NOTAGERR,"1"],[Ot.Msg.MIXLY_RFID_SCAN_ERROR,"2"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0)}},KR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField("无线气象站 WS-LoRa").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MICROBIT_JS_GET).appendField(new Ot.FieldDropdown([["全部(元组)","data()[0]"],["全部(json)","data()[1]"],["全部(json,附带位置信息)","data()[2]"],["编号","data()[0][0]"],["电量","data()[0][1]"],["风速","data()[0][2]"],["阵风","data()[0][3]"],["风向","data()[0][4]"],["雨量","data()[0][5]"],["温度","data()[0][6]"],["湿度","data()[0][7]"],["光照","data()[0][8]"],["紫外线","data()[0][9]"],["大气压","data()[0][10]"],["信号强度","data()[0][11]"],["信噪比","data()[0][12]"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0),this.setTooltip("返回气象数据元组 data= (设备id,电池状态,风速m/s,阵风m/s,风向°,雨量mm,温度℃,湿度%,光照Lux,UVI,大气压Pa,信号强度dB,信噪比dB)")}},JR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField("无线气象站 WS-LoRa").setCheck("var"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_SERIAL_AVAILABLE),this.setOutput(!0,Number),this.setInputsInline(!0)}},qR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField("无线气象站 WS-LoRa").setCheck("var"),this.appendValueInput("BASE").appendField("以主题"),this.appendDummyInput("").appendField("串口发送至MixIO"),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null)}},QR={init:function(){this.setColour(JO),this.appendValueInput("SUB").appendField("无线气象站 WS-LoRa").setCheck("var"),this.itemCount_=2,this.updateShape_(),this.setPreviousStatement(!1),this.setNextStatement(!1),this.setInputsInline(!0),this.setMutator(new Ot.icons.MutatorIcon(["weather_set_label_item"],this)),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip()},mutationToDom:function(){var t=document.createElement("mutation");return t.setAttribute("items",this.itemCount_),t},domToMutation:function(t){this.itemCount_=parseInt(t.getAttribute("items"),10),this.updateShape_()},decompose:function(t){var e=t.newBlock("weather_set_label_container");e.initSvg();for(var i=e.getInput("STACK").connection,n=0;n>6),i.push(128|63&_)):(2048<=_&&_<=55295||57344<=_&&_<=65535)&&(n+=3,i.push(224|15&_>>12),i.push(128|63&_>>6),i.push(128|63&_))}for(s=0;s>8,255&n].concat(i)}(t,!0),i="",n=0;n=0?"0x700000":["mixgo_sant"].indexOf(n)>=0?"0xE00000":"0x3A0000","32x12 Matrix"==o?(e.definitions_.import_matrix32x12="import matrix32x12",i=s+" = matrix32x12.Matrix("+_+",font_address="+p+")\n"):"16x8 Matrix"==o&&(e.definitions_.import_matrix16x8="import matrix16x8",i=s+" = matrix16x8.Matrix("+_+")\n"),i},IF=function(t,e){return e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".shows("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+")\n"},TF=function(t,e){return e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".shows("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+",space = "+e.valueToCode(this,"space",e.ORDER_ASSIGNMENT)+",center = "+this.getFieldValue("center")+")\n"},MF=function(t,e){return e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".frame("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+")\n"},hF=function(t,e){return e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".frame("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+",delay = "+e.valueToCode(this,"time",e.ORDER_ASSIGNMENT)+")\n"},mF=function(t,e){return e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".scroll("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+")\n"},EF=function(t,e){return e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".scroll("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+",speed ="+e.valueToCode(this,"time",e.ORDER_ASSIGNMENT)+",space = "+e.valueToCode(this,"space",e.ORDER_ASSIGNMENT)+")\n"},OF=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC);return i+".fill(0)\n"+i+".show()\n"},RF=function(t,e){return e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+"."+t.getFieldValue("OP")+"("+e.valueToCode(t,"val",e.ORDER_ATOMIC)+")\n"},cF=function(t,e){return[e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".pixel(int("+e.valueToCode(t,"x",e.ORDER_ATOMIC)+"), int("+e.valueToCode(t,"y",e.ORDER_ATOMIC)+"))",e.ORDER_ATOMIC]},gF=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC);return i+".pixel(int("+e.valueToCode(this,"x",e.ORDER_ASSIGNMENT)+"), int("+e.valueToCode(this,"y",e.ORDER_ASSIGNMENT)+"), "+e.valueToCode(this,"STAT",e.ORDER_ATOMIC)+")\n"+i+".show()\n"},CF=function(t,e){return[e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".get_brightness()",e.ORDER_ATOMIC]},SF=function(t,e){return e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".set_brightness("+e.valueToCode(this,"x",e.ORDER_ASSIGNMENT)+")\n"},LF=function(t,e){return[e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+"."+t.getFieldValue("image"),e.ORDER_ATOMIC]},AF=function(t,e){return[e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".map_"+t.getFieldValue("OP")+"("+e.valueToCode(t,"A",e.ORDER_ATOMIC)+","+e.valueToCode(t,"B",e.ORDER_ATOMIC)+")",e.ORDER_ATOMIC]},NF=function(t,e){return[e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".map_invert("+e.valueToCode(t,"A",e.ORDER_ATOMIC)+")",e.ORDER_ATOMIC]},DF=function(t,e){e.definitions_.import_machine="import machine",e.definitions_.import_ssd1306="import ssd1306";var i=e.valueToCode(this,"I2CSUB",e.ORDER_ATOMIC);return e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+" = ssd1306.SSD1306_I2C("+e.valueToCode(this,"row",e.ORDER_ATOMIC)+","+e.valueToCode(this,"column",e.ORDER_ATOMIC)+","+i+")\n"},fF=function(t,e){return e.definitions_.import_machine="import machine",e.definitions_.import_ssd1306="import ssd1306",e.valueToCode(this,"VAR",e.ORDER_ATOMIC)+".show_str("+(e.valueToCode(this,"Text_line1",e.ORDER_ASSIGNMENT)||"''")+","+(e.valueToCode(this,"Text_line2",e.ORDER_ASSIGNMENT)||"''")+","+(e.valueToCode(this,"Text_line3",e.ORDER_ASSIGNMENT)||"''")+","+(e.valueToCode(this,"Text_line4",e.ORDER_ASSIGNMENT)||"''")+")\n"},FF=function(t,e){return e.definitions_.import_machine="import machine",e.definitions_.import_ssd1306="import ssd1306",e.valueToCode(this,"VAR",e.ORDER_ATOMIC)+".show_line("+e.valueToCode(this,"x1",e.ORDER_ATOMIC)+", "+e.valueToCode(this,"y1",e.ORDER_ATOMIC)+", "+e.valueToCode(this,"x2",e.ORDER_ATOMIC)+", "+e.valueToCode(this,"y2",e.ORDER_ATOMIC)+", 1)\n"},PF=function(t,e){e.definitions_.import_machine="import machine",e.definitions_.import_ssd1306="import ssd1306";var i=e.valueToCode(this,"VAR",e.ORDER_ATOMIC),n=e.valueToCode(this,"x",e.ORDER_ATOMIC),s=e.valueToCode(this,"y",e.ORDER_ATOMIC),_=e.valueToCode(this,"width",e.ORDER_ATOMIC),o=e.valueToCode(this,"height",e.ORDER_ATOMIC),p="TRUE"==this.getFieldValue("fill")?"True":"False",a=this.getFieldValue("OP");switch(p){case"True":return i+".show_fill_rect("+n+", "+s+", "+_+", "+o+","+a+")\n";case"False":return i+".show_rect("+n+", "+s+", "+_+", "+o+","+a+")\n"}},YF=function(t,e){e.definitions_.import_machine="import machine",e.definitions_.import_ssd1306="import ssd1306";var i=e.valueToCode(this,"VAR",e.ORDER_ATOMIC),n=e.valueToCode(this,"x",e.ORDER_ATOMIC),s=e.valueToCode(this,"y",e.ORDER_ATOMIC),_=e.valueToCode(this,"length",e.ORDER_ATOMIC);return i+".show_"+this.getFieldValue("direction")+"("+n+", "+s+", "+_+", 1)\n"},vF=function(t,e){return["ON"==this.getFieldValue("ONOFF")?"1":"0",e.ORDER_ATOMIC]},XF=function(t,e){e.definitions_.import_matrix="import matrix";var i=t.getFieldValue("OP");return[e.valueToCode(t,"img",e.ORDER_ATOMIC)+".shift_"+i+"("+e.valueToCode(t,"val",e.ORDER_ATOMIC)+")",e.ORDER_ATOMIC]},yF=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC);return e.definitions_.import_ssd1306="import ssd1306",e.definitions_.import_machine="import machine",i+".show_fill("+this.getFieldValue("key")+")\n"},xF=function(t,e){return["matrix.Image."+this.getFieldValue("ANIMATION"),e.ORDER_ATOMIC]},bF=function(t,e){var i=e.valueToCode(this,"VAR",e.ORDER_ATOMIC);e.definitions_.import_machine="import machine",e.definitions_.import_ssd1306="import ssd1306";var n=e.valueToCode(this,"x",e.ORDER_ATOMIC),s=e.valueToCode(this,"y",e.ORDER_ATOMIC),_=e.valueToCode(this,"r",e.ORDER_ATOMIC),o="TRUE"==this.getFieldValue("fill")?"True":"False",p=this.getFieldValue("OP");switch(o){case"True":return i+".show_fill_circle("+n+", "+s+", "+_+", "+p+")\n";case"False":return i+".show_circle("+n+", "+s+", "+_+", "+p+")\n"}},VF=function(t,e){var i=e.valueToCode(this,"VAR",e.ORDER_ATOMIC);e.definitions_.import_machine="import machine",e.definitions_.import_ssd1306="import ssd1306";var n=e.valueToCode(this,"x0",e.ORDER_ATOMIC),s=e.valueToCode(this,"y0",e.ORDER_ATOMIC),_=e.valueToCode(this,"x1",e.ORDER_ATOMIC),o=e.valueToCode(this,"y1",e.ORDER_ATOMIC),p=e.valueToCode(this,"x2",e.ORDER_ATOMIC),a=e.valueToCode(this,"y2",e.ORDER_ATOMIC),u="TRUE"==this.getFieldValue("fill")?"True":"False",r=this.getFieldValue("OP");switch(u){case"True":return i+".show_fill_triangle("+n+", "+s+", "+_+", "+o+", "+p+", "+a+", "+r+")\n";case"False":return i+".show_triangle("+n+", "+s+", "+_+", "+o+", "+p+", "+a+", "+r+")\n"}},BF=function(t,e){return e.definitions_.import_machine="import machine",e.definitions_.import_ssd1306="import ssd1306",e.valueToCode(this,"VAR",e.ORDER_ATOMIC)+".show_bitmap("+e.valueToCode(this,"START_X",e.ORDER_ATOMIC)+", "+e.valueToCode(this,"START_Y",e.ORDER_ATOMIC)+", "+e.valueToCode(this,"bitmap_name",e.ORDER_ATOMIC)+","+e.valueToCode(this,"WIDTH",e.ORDER_ATOMIC)+","+e.valueToCode(this,"HEIGHT",e.ORDER_ATOMIC)+")\n"},GF=function(t,e){return e.definitions_.import_machine="import machine",e.definitions_.import_ssd1306="import ssd1306",e.valueToCode(this,"VAR",e.ORDER_ATOMIC)+".show_pixel("+e.valueToCode(this,"POS_X",e.ORDER_ATOMIC)+", "+e.valueToCode(this,"POS_Y",e.ORDER_ATOMIC)+")\n"},UF=function(t,e){var i,n=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),s=e.valueToCode(this,"I2CSUB",e.ORDER_ATOMIC),_=this.getFieldValue("key");return"TM1650"==_?(e.definitions_.import_tm1650="import tm1650",i=n+" = tm1650."+_+"("+s+")\n"):"TM1637"==_&&(e.definitions_.import_tm1637="import tm1637",i=n+" = tm1637."+_+"("+s+")\n"),i},wF=function(t,e){return e.valueToCode(this,"VAR",e.ORDER_ATOMIC)+"."+this.getFieldValue("STAT")+"()\n"},kF=function(t,e){return e.valueToCode(this,"VAR",e.ORDER_ATOMIC)+".shownum("+e.valueToCode(this,"VALUE",e.ORDER_ATOMIC)+")\n"},HF=function(t,e){return e.valueToCode(this,"VAR",e.ORDER_ATOMIC)+".showDP("+e.valueToCode(this,"NO",e.ORDER_ATOMIC)+", "+e.valueToCode(this,"STAT",e.ORDER_ATOMIC)+")\n"},WF=function(t,e){return e.valueToCode(this,"VAR",e.ORDER_ATOMIC)+".intensity("+e.valueToCode(this,"VALUE",e.ORDER_ATOMIC)+")\n"},KF=function(t,e){e.definitions_.import_st7789="import st7789";var i=Rt.Boards.getSelectedBoardKey().split(":")[2],n="";n=["mpython","mixgo_pe","mixgo_nova"].indexOf(i)>=0?"0x700000":["mixgo_sant"].indexOf(i)>=0?"0xE00000":"0x3A0000";var s=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),_=e.valueToCode(this,"SPISUB",e.ORDER_ATOMIC),o=e.valueToCode(this,"PINCS",e.ORDER_ATOMIC),p=e.valueToCode(this,"PINDC",e.ORDER_ATOMIC);return s+" = st7789.ST7789("+_+","+e.valueToCode(this,"WIDTH",e.ORDER_ATOMIC)+","+e.valueToCode(this,"HEIGHT",e.ORDER_ATOMIC)+",dc_pin="+p+",cs_pin="+o+",rotation="+this.getFieldValue("rotate")+",font_address="+n+")\n"},JF=function(t,e){e.definitions_.import_st7789="import st7789";var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(this,"data",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"x",e.ORDER_ASSIGNMENT),_=e.valueToCode(this,"y",e.ORDER_ASSIGNMENT),o=e.valueToCode(this,"size",e.ORDER_ASSIGNMENT),p=e.valueToCode(this,"VAR",e.ORDER_ATOMIC);if("0x"==p.slice(0,2))var a=i+".image("+n+",x = "+s+",y = "+_+",size = "+o+",color="+p+")\n";else{const t=p.match(/\d+/g);var u="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");a=i+".image("+n+",x = "+s+",y = "+_+",size = "+o+",color=0x"+((16252928&u)>>8|(64512&u)>>5|(255&u)>>3).toString(16)+")\n"}return a},qF=function(t,e){var i="0x"+this.getFieldValue("COLOR").slice(1);return["0x"+((16252928&i)>>8|(64512&i)>>5|(255&i)>>3).toString(16),e.ORDER_ATOMIC]},QF=function(t,e){e.definitions_.import_st7789="import st7789";var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(this,"data",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"x",e.ORDER_ASSIGNMENT),_=e.valueToCode(this,"y",e.ORDER_ASSIGNMENT),o=e.valueToCode(this,"size",e.ORDER_ASSIGNMENT),p=e.valueToCode(this,"space",e.ORDER_ASSIGNMENT),a=e.valueToCode(this,"VAR",e.ORDER_ATOMIC),u=this.getFieldValue("center");if("0x"==a.slice(0,2))var r=i+".shows("+n+",x = "+s+",y = "+_+",size = "+o+",space = "+p+",center = "+u+",color="+a+")\n";else{const t=a.match(/\d+/g);var l="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");r=i+".shows("+n+",x = "+s+",y = "+_+",size = "+o+",space = "+p+",center = "+u+",color=0x"+((16252928&l)>>8|(64512&l)>>5|(255&l)>>3).toString(16)+")\n"}return r},zF=function(t,e){e.definitions_.import_st7789="import st7789";var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(this,"data",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"size",e.ORDER_ASSIGNMENT),_=e.valueToCode(this,"time",e.ORDER_ASSIGNMENT),o=e.valueToCode(this,"VAR",e.ORDER_ATOMIC);if("0x"==o.slice(0,2))var p=i+".frame("+n+",size = "+s+",delay = "+_+",color="+o+")\n";else{const t=o.match(/\d+/g);var a="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");p=i+".frame("+n+",size = "+s+",delay = "+_+",color=0x"+((16252928&a)>>8|(64512&a)>>5|(255&a)>>3).toString(16)+")\n"}return p},jF=function(t,e){e.definitions_.import_st7789="import st7789";var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(this,"data",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"y",e.ORDER_ASSIGNMENT),_=e.valueToCode(this,"size",e.ORDER_ASSIGNMENT),o=e.valueToCode(this,"time",e.ORDER_ASSIGNMENT),p=e.valueToCode(this,"space",e.ORDER_ASSIGNMENT),a=e.valueToCode(this,"VAR",e.ORDER_ATOMIC);if("0x"==a.slice(0,2))var u=i+".scroll("+n+",y = "+s+",size = "+_+",speed ="+o+",space = "+p+",color="+a+")\n";else{const t=a.match(/\d+/g);var r="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");u=i+".scroll("+n+",y = "+s+",size = "+_+",speed ="+o+",space = "+p+",color=0x"+((16252928&r)>>8|(64512&r)>>5|(255&r)>>3).toString(16)+")\n"}return u},ZF=function(t,e){return e.definitions_.import_st7789="import st7789",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".fill(st7789."+this.getFieldValue("key")+")\n"},$F=function(t,e){e.definitions_.import_st7789="import st7789";var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(this,"x1",e.ORDER_ATOMIC),s=e.valueToCode(this,"y1",e.ORDER_ATOMIC),_=e.valueToCode(this,"x2",e.ORDER_ATOMIC),o=e.valueToCode(this,"y2",e.ORDER_ATOMIC),p=e.valueToCode(this,"VAR",e.ORDER_ATOMIC);if("0x"==p.slice(0,2))var a=i+".line("+n+", "+s+", "+_+", "+o+", color="+p+")\n";else{const t=p.match(/\d+/g);var u="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");a=i+".line("+n+", "+s+", "+_+", "+o+", color=0x"+((16252928&u)>>8|(64512&u)>>5|(255&u)>>3).toString(16)+")\n"}return a},tP=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(this,"I2CSUB",e.ORDER_ATOMIC),s=this.getFieldValue("key"),_=e.valueToCode(this,"ADDR",e.ORDER_ATOMIC);return e.definitions_.import_i2clcd="import i2clcd",i+" = i2clcd.LCD("+n+",lcd_width="+s+",i2c_addr="+_+")\n"},eP=function(t,e){return e.definitions_.import_i2clcd="import i2clcd",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".shows("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+",column = "+e.valueToCode(this,"x",e.ORDER_ASSIGNMENT)+",line = "+e.valueToCode(this,"y",e.ORDER_ASSIGNMENT)+",center = "+this.getFieldValue("center")+")\n"},iP=function(t,e){return e.definitions_.import_i2clcd="import i2clcd",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".print("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+",column = "+e.valueToCode(this,"x",e.ORDER_ASSIGNMENT)+",line = "+e.valueToCode(this,"y",e.ORDER_ASSIGNMENT)+",delay="+e.valueToCode(this,"time",e.ORDER_ASSIGNMENT)+")\n"},nP=function(t,e){return e.definitions_.import_i2clcd="import i2clcd",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".backlight("+this.getFieldValue("key")+")\n"},sP=function(t,e){return e.definitions_.import_i2clcd="import i2clcd",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".clear()\n"},_P=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(this,"I2CSUB",e.ORDER_ATOMIC),s=e.valueToCode(this,"ADDR",e.ORDER_ATOMIC),_=this.getFieldValue("driver"),o=Rt.Boards.getSelectedBoardKey().split(":")[2],p="";return p=["mpython","mixgo_pe","mixgo_nova"].indexOf(o)>=0?"0x700000":["mixgo_sant"].indexOf(o)>=0?"0xE00000":"0x3A0000",e.definitions_.import_oled128x64="import oled128x64",i+" = oled128x64.OLED("+n+",address="+s+",font_address="+p+",types="+_+")\n"},oP=function(t,e){return e.definitions_.import_oled128x64="import oled128x64",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".image("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+")\n"},pP=function(t,e){return e.definitions_.import_oled128x64="import oled128x64",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".image("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+",x = "+e.valueToCode(this,"x",e.ORDER_ASSIGNMENT)+",y = "+e.valueToCode(this,"y",e.ORDER_ASSIGNMENT)+",size = "+e.valueToCode(this,"size",e.ORDER_ASSIGNMENT)+")\n"},aP=function(t,e){return e.definitions_.import_oled128x64="import oled128x64",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".shows("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+")\n"},uP=function(t,e){return e.definitions_.import_oled128x64="import oled128x64",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".shows("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+",x = "+e.valueToCode(this,"x",e.ORDER_ASSIGNMENT)+",y = "+e.valueToCode(this,"y",e.ORDER_ASSIGNMENT)+",size = "+e.valueToCode(this,"size",e.ORDER_ASSIGNMENT)+",space = "+e.valueToCode(this,"space",e.ORDER_ASSIGNMENT)+",center = "+this.getFieldValue("center")+")\n"},rP=function(t,e){return e.definitions_.import_oled128x64="import oled128x64",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".frame("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+")\n"},lP=function(t,e){return e.definitions_.import_oled128x64="import oled128x64",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".frame("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+",size = "+e.valueToCode(this,"size",e.ORDER_ASSIGNMENT)+",delay = "+e.valueToCode(this,"time",e.ORDER_ASSIGNMENT)+")\n"},dP=function(t,e){return e.definitions_.import_oled128x64="import oled128x64",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".scroll("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+")\n"},IP=function(t,e){return e.definitions_.import_oled128x64="import oled128x64",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".scroll("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+",y = "+e.valueToCode(this,"y",e.ORDER_ASSIGNMENT)+",size = "+e.valueToCode(this,"size",e.ORDER_ASSIGNMENT)+",speed ="+e.valueToCode(this,"time",e.ORDER_ASSIGNMENT)+",space = "+e.valueToCode(this,"space",e.ORDER_ASSIGNMENT)+")\n"},TP=function(t,e){e.definitions_.import_oled128x64="import oled128x64";var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC);return i+".fill(0)\n"+i+".show()\n"},MP=function(t,e){return e.definitions_.import_oled128x64="import oled128x64",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+"."+t.getFieldValue("OP")+"("+e.valueToCode(t,"val",e.ORDER_ATOMIC)+")\n"},hP=function(t,e){return e.definitions_.import_oled128x64="import oled128x64",[e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".pixel(int("+e.valueToCode(t,"x",e.ORDER_ATOMIC)+"), int("+e.valueToCode(t,"y",e.ORDER_ATOMIC)+"))",e.ORDER_ATOMIC]},mP=function(t,e){e.definitions_.import_oled128x64="import oled128x64";var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC);return i+".pixel(int("+e.valueToCode(this,"x",e.ORDER_ASSIGNMENT)+"), int("+e.valueToCode(this,"y",e.ORDER_ASSIGNMENT)+"), "+e.valueToCode(this,"STAT",e.ORDER_ATOMIC)+")\n"+i+".show()\n"},EP=function(t,e){e.definitions_.import_oled128x64="import oled128x64";var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(t,"x",e.ORDER_ATOMIC),s=e.valueToCode(t,"y",e.ORDER_ATOMIC),_=e.valueToCode(t,"w",e.ORDER_ATOMIC),o=e.valueToCode(t,"h",e.ORDER_ATOMIC),p=t.getFieldValue("state");return i+"."+t.getFieldValue("shape")+"("+n+", "+s+", "+_+", "+o+", "+p+")\n"+i+".show()\n"},OP=function(t,e){e.definitions_.import_oled128x64="import oled128x64";var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(t,"x",e.ORDER_ATOMIC),s=e.valueToCode(t,"y",e.ORDER_ATOMIC),_=e.valueToCode(t,"length",e.ORDER_ATOMIC),o=t.getFieldValue("state");return i+"."+("0"==t.getFieldValue("dir_h_v")?"v":"h")+"line("+n+", "+s+", "+_+", "+o+")\n"+i+".show()\n"},RP=function(t,e){e.definitions_.import_oled128x64="import oled128x64";var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC);return i+".line("+e.valueToCode(t,"x1",e.ORDER_ATOMIC)+", "+e.valueToCode(t,"y1",e.ORDER_ATOMIC)+", "+e.valueToCode(t,"x2",e.ORDER_ATOMIC)+", "+e.valueToCode(t,"y2",e.ORDER_ATOMIC)+", "+t.getFieldValue("state")+")\n"+i+".show()\n"},cP=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2],n=e.valueToCode(this,"data",e.ORDER_ASSIGNMENT);if("educore"==i){e.definitions_["import_"+i+"oled"]="from "+i+" import oled";var s="oled.print("+n+")\n"}else{e.definitions_["import_"+i+"_onboard_matrix"]="from "+i+" import onboard_matrix";s="onboard_matrix.shows("+n+")\n"}return s},gP=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2],n=e.valueToCode(this,"data",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"space",e.ORDER_ASSIGNMENT),_=this.getFieldValue("center");if("mixgo_sant"==i||"mixgo_nova"==i)return e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft","onboard_tft.shows("+n+",space = "+s+",center = "+_+")\n";if("educore"==i){e.definitions_["import_"+i+"oled"]="from "+i+" import oled"}return e.definitions_["import_"+i+"_onboard_matrix"]="from "+i+" import onboard_matrix","onboard_matrix.shows("+n+",space = "+s+",center = "+_+")\n"},CP=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];if("mpython"==i||"educore"==i){e.definitions_["import_"+i+"_onboard_oled"]="from "+i+" import onboard_oled";var n="onboard_oled.frame("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+")\n"}else{e.definitions_["import_"+i+"_onboard_matrix"]="from "+i+" import onboard_matrix";n="onboard_matrix.frame("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+")\n"}return n},SP=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2],n=e.valueToCode(this,"data",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"time",e.ORDER_ASSIGNMENT);if("mpython"==i||"educore"==i){e.definitions_["import_"+i+"_onboard_oled"]="from "+i+" import onboard_oled";var _="onboard_oled.frame("+(n=e.valueToCode(this,"data",e.ORDER_ASSIGNMENT))+",delay = "+s+")\n"}else{e.definitions_["import_"+i+"_onboard_matrix"]="from "+i+" import onboard_matrix";_="onboard_matrix.frame("+n+",delay = "+s+")\n"}return _},LP=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];if("mpython"==i||"educore"==i){e.definitions_["import_"+i+"_onboard_oled"]="from "+i+" import onboard_oled";var n="onboard_oled.scroll("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+")\n"}else{e.definitions_["import_"+i+"_onboard_matrix"]="from "+i+" import onboard_matrix";n="onboard_matrix.scroll("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+")\n"}return n},AP=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2],n=e.valueToCode(this,"data",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"time",e.ORDER_ASSIGNMENT),_=e.valueToCode(this,"space",e.ORDER_ASSIGNMENT);if("mpython"==i||"educore"==i){e.definitions_["import_"+i+"_onboard_oled"]="from "+i+" import onboard_oled";var o="onboard_oled.scroll("+n+",speed ="+s+",space = "+_+")\n"}else{e.definitions_["import_"+i+"_onboard_matrix"]="from "+i+" import onboard_matrix";o="onboard_matrix.scroll("+n+",speed ="+s+",space = "+_+")\n"}return o},NP=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];return e.definitions_["import_"+i+"_onboard_matrix"]="from "+i+" import onboard_matrix",["onboard_matrix."+t.getFieldValue("image"),e.ORDER_ATOMIC]},DP=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];return e.definitions_["import_"+i+"_onboard_matrix"]="from "+i+" import onboard_matrix",["onboard_matrix."+t.getFieldValue("image"),e.ORDER_ATOMIC]},fP=function(t,e){var i={"#000000":"0","#ff0000":"1"};function n(t){let e="";if(t.length%2==1&&(t="0"+t),t.length<8){let e=8-t.length;for(let i=1;i<=e;i++)t="0"+t}for(let i=1;i<=t.length;i++)i%2==0&&i!==t.length?e=e+t[i-1]+",0x":e+=t[i-1];return"0x"+e}let s=[];for(let e=0;e<12;e++){let _="",o=0,p=0;for(let n=0;n<32;n++)n<8?p=7-n:n<16?p=23-n:n<24?p=39-n:n<32&&(p=55-n),o+=Number(i[t.getFieldValue(e+"-"+n)])*Math.pow(2,31-p);_+=n(o.toString(16)),s.unshift(_)}let _=[];for(let t=0;t>8|(64512&u)>>5|(255&u)>>3).toString(16)+")\n"}return a},pY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft";var n=e.valueToCode(this,"data",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"x",e.ORDER_ASSIGNMENT),_=e.valueToCode(this,"y",e.ORDER_ASSIGNMENT),o=e.valueToCode(this,"size",e.ORDER_ASSIGNMENT),p=e.valueToCode(this,"space",e.ORDER_ASSIGNMENT),a=this.getFieldValue("center"),u=e.valueToCode(this,"VAR",e.ORDER_ATOMIC);if("0x"==u.slice(0,2))var r="onboard_tft.shows("+n+",x = "+s+",y = "+_+",size = "+o+",space = "+p+",center = "+a+",color="+u+")\n";else{const t=u.match(/\d+/g);var l="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");r="onboard_tft.shows("+n+",x = "+s+",y = "+_+",size = "+o+",space = "+p+",center = "+a+",color=0x"+((16252928&l)>>8|(64512&l)>>5|(255&l)>>3).toString(16)+")\n"}return r},aY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];return e.definitions_["import_"+i+"_onboard_oled"]="from "+i+" import onboard_tft","onboard_tft.frame("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+",color=0xffff)\n"},uY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft";var n=e.valueToCode(this,"data",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"size",e.ORDER_ASSIGNMENT),_=e.valueToCode(this,"time",e.ORDER_ASSIGNMENT),o=e.valueToCode(this,"VAR",e.ORDER_ATOMIC);if("0x"==o.slice(0,2))var p="onboard_tft.frame("+n+",size = "+s+",delay = "+_+",color="+o+")\n";else{const t=o.match(/\d+/g);var a="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");p="onboard_tft.frame("+n+",size = "+s+",delay = "+_+",color=0x"+((16252928&a)>>8|(64512&a)>>5|(255&a)>>3).toString(16)+")\n"}return p},rY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];return e.definitions_["import_"+i+"_onboard_oled"]="from "+i+" import onboard_tft","onboard_tft.scroll("+e.valueToCode(this,"data",e.ORDER_ASSIGNMENT)+",color=0xffff)\n"},lY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft";var n=e.valueToCode(this,"data",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"y",e.ORDER_ASSIGNMENT),_=e.valueToCode(this,"size",e.ORDER_ASSIGNMENT),o=e.valueToCode(this,"time",e.ORDER_ASSIGNMENT),p=e.valueToCode(this,"space",e.ORDER_ASSIGNMENT),a=e.valueToCode(this,"VAR",e.ORDER_ATOMIC);if("0x"==a.slice(0,2))var u="onboard_tft.scroll("+n+",y = "+s+",size = "+_+",speed ="+o+",space = "+p+",color="+a+")\n";else{const t=a.match(/\d+/g);var r="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");u="onboard_tft.scroll("+n+",y = "+s+",size = "+_+",speed ="+o+",space = "+p+",color=0x"+((16252928&r)>>8|(64512&r)>>5|(255&r)>>3).toString(16)+")\n"}return u},dY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft";var n=e.valueToCode(t,"x",e.ORDER_ATOMIC),s=e.valueToCode(t,"y",e.ORDER_ATOMIC),_=e.valueToCode(t,"w",e.ORDER_ATOMIC),o=e.valueToCode(t,"h",e.ORDER_ATOMIC),p=e.valueToCode(this,"VAR",e.ORDER_ATOMIC),a=t.getFieldValue("shape");if("0x"==p.slice(0,2))var u="onboard_tft."+a+"("+n+", "+s+", "+_+", "+o+", "+p+")\nonboard_tft.show()\n";else{const t=p.match(/\d+/g);var r="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");u="onboard_tft."+a+"("+n+", "+s+", "+_+", "+o+", 0x"+((16252928&r)>>8|(64512&r)>>5|(255&r)>>3).toString(16)+")\nonboard_tft.show()\n"}return u},IY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft";var n=e.valueToCode(t,"x",e.ORDER_ATOMIC),s=e.valueToCode(t,"y",e.ORDER_ATOMIC),_=e.valueToCode(t,"length",e.ORDER_ATOMIC),o=e.valueToCode(this,"VAR",e.ORDER_ATOMIC),p=t.getFieldValue("dir_h_v");if("0x"==o.slice(0,2))var a="onboard_tft."+("0"==p?"v":"h")+"line("+n+", "+s+", "+_+", "+o+")\nonboard_tft.show()\n";else{const t=o.match(/\d+/g);var u="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");a="onboard_tft."+("0"==p?"v":"h")+"line("+n+", "+s+", "+_+", 0x"+((16252928&u)>>8|(64512&u)>>5|(255&u)>>3).toString(16)+")\nonboard_tft.show()\n"}return a},TY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft";var n=e.valueToCode(t,"x1",e.ORDER_ATOMIC),s=e.valueToCode(t,"y1",e.ORDER_ATOMIC),_=e.valueToCode(t,"x2",e.ORDER_ATOMIC),o=e.valueToCode(t,"y2",e.ORDER_ATOMIC),p=e.valueToCode(this,"VAR",e.ORDER_ATOMIC);if("0x"==p.slice(0,2))var a="onboard_tft.line("+n+", "+s+", "+_+", "+o+", "+p+")\nonboard_tft.show()\n";else{const t=p.match(/\d+/g);var u="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");a="onboard_tft.line("+n+", "+s+", "+_+", "+o+", 0x"+((16252928&u)>>8|(64512&u)>>5|(255&u)>>3).toString(16)+")\nonboard_tft.show()\n"}return a},MY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft";return"onboard_tft.fill(0)\nonboard_tft.show()\n"},hY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];return e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft","onboard_tft."+t.getFieldValue("OP")+"("+e.valueToCode(t,"val",e.ORDER_ATOMIC)+")\n"},mY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];return e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft",["hex(onboard_tft.pixel(int("+e.valueToCode(t,"x",e.ORDER_ATOMIC)+"), int("+e.valueToCode(t,"y",e.ORDER_ATOMIC)+")))",e.ORDER_ATOMIC]},EY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft";var n=e.valueToCode(this,"x",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"y",e.ORDER_ASSIGNMENT),_=e.valueToCode(this,"VAR",e.ORDER_ATOMIC);if("0x"==_.slice(0,2))var o="onboard_tft.pixel(int("+n+"), int("+s+"), "+_+")\nonboard_tft.show()\n";else{const t=_.match(/\d+/g);var p="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");o="onboard_tft.pixel(int("+n+"), int("+s+"), 0x"+((16252928&p)>>8|(64512&p)>>5|(255&p)>>3).toString(16)+")\nonboard_tft.show()\n"}return o},OY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft";return["onboard_tft.get_brightness()",e.ORDER_ATOMIC]},RY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];return e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft","onboard_tft.set_brightness("+e.valueToCode(this,"x",e.ORDER_ASSIGNMENT)+")\n"},cY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft";var n=e.valueToCode(this,"VAR",e.ORDER_ASSIGNMENT);if("0x"==n.slice(0,2))var s="onboard_tft.fill("+n+")\nonboard_tft.show()\n";else{const t=n.match(/\d+/g);var _="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");s="onboard_tft.fill(0x"+((16252928&_)>>8|(64512&_)>>5|(255&_)>>3).toString(16)+")\nonboard_tft.show()\n"}return s},gY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];e.definitions_["import_"+i+"_Clock"]="from "+i+" import Clock";var n=e.valueToCode(this,"x",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"y",e.ORDER_ASSIGNMENT),_=e.valueToCode(this,"size",e.ORDER_ASSIGNMENT),o=e.valueToCode(this,"SUB",e.ORDER_ASSIGNMENT),p=e.valueToCode(this,"VAR",e.ORDER_ATOMIC);if("0x"==p.slice(0,2))var a=o+"=Clock("+n+","+s+","+_+","+p+")\n";else{const t=p.match(/\d+/g);var u="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");a=o+"=Clock("+n+","+s+","+_+",0x"+((16252928&u)>>8|(64512&u)>>5|(255&u)>>3).toString(16)+")\n"}return a},CY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];return e.definitions_["import_"+i+"_Clock"]="from "+i+" import Clock",e.valueToCode(this,"SUB",e.ORDER_ASSIGNMENT)+".set_rtctime()\n"},SY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];return e.definitions_["import_"+i+"_Clock"]="from "+i+" import Clock",e.valueToCode(this,"SUB",e.ORDER_ASSIGNMENT)+".set_time("+e.valueToCode(this,"h",e.ORDER_ASSIGNMENT)+","+e.valueToCode(this,"m",e.ORDER_ASSIGNMENT)+","+e.valueToCode(this,"s",e.ORDER_ASSIGNMENT)+")\n"},LY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];return e.definitions_["import_"+i+"_Clock"]="from "+i+" import Clock",e.valueToCode(this,"SUB",e.ORDER_ASSIGNMENT)+".draw_clock()\n"},AY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];e.definitions_["import_"+i+"_Clock"]="from "+i+" import Clock";var n=e.valueToCode(this,"SUB",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"VAR",e.ORDER_ATOMIC);if("0x"==s.slice(0,2))var _=n+".clear("+s+")\n";else{const t=s.match(/\d+/g);var o="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");_=n+".clear(0x"+((16252928&o)>>8|(64512&o)>>5|(255&o)>>3).toString(16)+")\n"}return _},NY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];e.definitions_["import_"+i+"_onboard_tft"]="from "+i+" import onboard_tft";var n=e.valueToCode(t,"x",e.ORDER_ATOMIC),s=e.valueToCode(t,"y",e.ORDER_ATOMIC),_=e.valueToCode(t,"r",e.ORDER_ATOMIC),o=e.valueToCode(this,"VAR",e.ORDER_ATOMIC),p=t.getFieldValue("shape");if("0x"==o.slice(0,2))var a="onboard_tft.ellipse("+n+", "+s+", "+_+", "+_+", "+o+","+p+")\nonboard_tft.show()\n";else{const t=o.match(/\d+/g);var u="0x"+((parseInt(t[0])<<16)+(parseInt(t[1])<<8)+parseInt(t[2])).toString(16).padStart(4,"0");a="onboard_tft.ellipse("+n+", "+s+", "+_+", "+_+", 0x"+((16252928&u)>>8|(64512&u)>>5|(255&u)>>3).toString(16)+","+p+")\nonboard_tft.show()\n"}return a},DY=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2];return e.definitions_["import_"+i+"_onboard_matrix"]="from "+i+" import onboard_matrix","onboard_matrix.pointern(angle="+e.valueToCode(this,"angle",e.ORDER_ASSIGNMENT)+")\n"},fY=function(t,e){var i=this.getFieldValue("path"),n=this.getFieldValue("module");return e.definitions_["import_"+i+"_"+n]="from "+i+" import "+n,""},FY=function(t,e){var i=this.getFieldValue("module");return e.definitions_["import_"+i]="import "+i,""},PY=function(t,e){for(var i=this.getFieldValue("NAME"),n=new Array(this.itemCount_),s=0;s 0:\n pre = bin(value).count("1")\n # find first non full high value afterwards\n try:\n k, value = next((ind, v)\n for ind, v in enumerate(resp[i:length - 2]) if resp[i + ind + 1] == 0)\n post = bin(value).count("1") if k else 0\n k = k + i\n except StopIteration:\n i = -1\n dist= -1 if i < 0 else round((pre + (k - i) * 8. + post) * 8 * 0.172)\n return dist\n\nsonar=HCSR04()\n',["sonar.distance_mm()/10.0",e.ORDER_ATOMIC]},hX=function(t,e){e.definitions_.import_mixgo="import mixgo";var i=e.valueToCode(this,"hour",e.ORDER_ASSIGNMENT),n=e.valueToCode(this,"minute",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"second",e.ORDER_ASSIGNMENT);return e.setups_.class_DS1307=e.CLASS_DS1307_INIT,"str(ds.Hour("+i+"))+ str(ds.Minute("+n+")) +str(ds.Second("+s+"))\n"},mX=function(t,e){e.definitions_.import_mixgo="import mixgo";var i=e.valueToCode(this,"year",e.ORDER_ASSIGNMENT),n=e.valueToCode(this,"month",e.ORDER_ASSIGNMENT),s=e.valueToCode(this,"day",e.ORDER_ASSIGNMENT);return e.setups_.class_DS1307=e.CLASS_DS1307_INIT,"str(ds.Year("+i+"))+ str(ds.Month("+n+")) +str(ds.Day("+s+"))\n"},EX=function(t,e){return e.definitions_.import_mixgo="import mixgo",["mixgo.get_brightness("+e.valueToCode(this,"PIN",e.ORDER_ATOMIC)+")",e.ORDER_ATOMIC]},OX=function(t,e){return e.definitions_.import_mixgo="import mixgo",["mixgo.get_soundlevel("+e.valueToCode(this,"PIN",e.ORDER_ATOMIC)+")",e.ORDER_ATOMIC]},RX=function(t,e){return e.definitions_.import_mixgo="import mixgo",["mixgo.infrared_"+this.getFieldValue("direction")+".near()",e.ORDER_ATOMIC]},cX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC);return e.definitions_.import_machine="import machine",i+" = machine.RTC()\n"},gX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=this.getFieldValue("key");return e.definitions_.import_machine="import machine",e.definitions_.import_bmp280="import bmp280",[i+"."+n,e.ORDER_ATOMIC]},CX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=this.getFieldValue("key");return e.definitions_.import_machine="import machine",e.definitions_.import_sht20="import sht20",[i+"."+n,e.ORDER_ATOMIC]},SX=function(t,e){var i,n=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),s=e.valueToCode(this,"I2CSUB",e.ORDER_ATOMIC),_=this.getFieldValue("key");return"MPU9250"==_?(e.definitions_.import_mpu9250="import mpu9250",i=n+" = mpu9250."+_+"("+s+")\n"):"BMP280"==_?(e.definitions_.import_bmp280="import bmp280",i=n+" = bmp280."+_+"("+s+")\n"):"SHT20"==_?(e.definitions_.import_sht20="import sht20",i=n+" = sht20."+_+"("+s+")\n"):"ADXL345"==_?(e.definitions_.import_adxl345="import adxl345",i=n+" = adxl345."+_+"("+s+")\n"):"LTR308"==_?(e.definitions_.import_ltr308al="import ltr308al",i=n+" = ltr308al.LTR_308ALS("+s+")\n"):"LTR381RGB"==_?(e.definitions_.import_ltr381rgb="import ltr381rgb",i=n+" = ltr381rgb.LTR_381RGB("+s+")\n"):"UCS12071"==_?(e.definitions_.import_ucs12071="import ucs12071",i=n+" = ucs12071.UCS12071("+s+")\n"):"LTR390UV"==_?(e.definitions_.import_ltr390uv="import ltr390uv",i=n+" = ltr390uv.ALS_UVS("+s+")\n"):"HP203X"==_?(e.definitions_.import_hp203x="import hp203x",i=n+" = hp203x.HP203X("+s+")\n"):"SPL06_001"==_?(e.definitions_.import_spl06_001="import spl06_001",i=n+" = spl06_001.SPL06("+s+")\n"):"SHTC3"==_?(e.definitions_.import_shtc3="import shtc3",i=n+" = shtc3."+_+"("+s+")\n"):"AHT21"==_?(e.definitions_.import_ahtx0="import ahtx0",i=n+" = ahtx0.AHTx0("+s+")\n"):"VL53L0X"==_?(e.definitions_.import_vl53l0x="import vl53l0x",i=n+" = vl53l0x."+_+"("+s+")\n"):"QMC5883L"==_?(e.definitions_.import_qmc5883l="import qmc5883l",i=n+" = qmc5883l.Compass("+s+")\n"):"MAX30102"==_?(e.definitions_.import_max30102="import max30102",i=n+" = max30102.MAX30102("+s+")\n"):"APDS9960"==_?(e.definitions_.import_apds9960="import apds9960",i=n+" = apds9960.APDS9960("+s+")\n"):"RFID"==_?(e.definitions_.import_rc522="import rc522",i=n+" = rc522.RC522("+s+")\n"):"CBR817"==_?(e.definitions_.import_cbr817="import cbr817",i=n+" = cbr817."+_+"("+s+")\n"):"CI130X"==_&&(e.definitions_.import_ci130x="import ci130x",i=n+" = ci130x."+_+"("+s+")\n"),i},LX=function(t,e){e.definitions_.import_cbr817="import cbr817";var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC);return i+".threshold("+e.valueToCode(this,"VAR",e.ORDER_ATOMIC)+")\n"+i+".delay_ms("+e.valueToCode(this,"VAR2",e.ORDER_ATOMIC)+")\n"},AX=function(t,e){return e.definitions_.import_sant_g2_ext_mmw="from sant_g2 import ext_mmw","ext_mmw.threshold("+e.valueToCode(this,"VAR",e.ORDER_ATOMIC)+")\next_mmw.delay_ms("+e.valueToCode(this,"VAR2",e.ORDER_ATOMIC)+")\n"},NX=function(t,e){return e.definitions_.import_cbr817="import cbr817",[e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".result()",e.ORDER_ATOMIC]},DX=function(t,e){e.definitions_.import_sant_g2_ext_mmw="from sant_g2 import ext_mmw";return["ext_mmw.result()",e.ORDER_ATOMIC]},fX=function(t,e){return e.definitions_.import_ci130x="import ci130x",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".cmd_id()\n"},FX=function(t,e){return e.definitions_.import_ci130x="import ci130x",[e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".result("+this.getFieldValue("cmd")+")",e.ORDER_ATOMIC]},PX=function(t,e){e.definitions_.import_ci130x="import ci130x";var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=this.getFieldValue("key");if("status1"==n)var s=i+".status()[0]";else if("status2"==n)s=i+".status()[1]";else s=i+"."+n+"()";return[s,e.ORDER_ATOMIC]},YX=function(t,e){e.definitions_.import_ci130x="import ci130x";var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(this,"NUM",e.ORDER_ATOMIC);return i+".play("+this.getFieldValue("star")+","+n+","+this.getFieldValue("end")+")\n"},vX=function(t,e){return e.definitions_.import_ci130x="import ci130x",e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".sys_cmd("+this.getFieldValue("cmd")+")\n"},XX=function(t,e){e.definitions_.import_max30102="import max30102";var i=this.getFieldValue("key");return[e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".heartrate()"+i,e.ORDER_ATOMIC]},yX=function(t,e){e.definitions_.import_apds9960="import apds9960";var i=this.getFieldValue("key");return[e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+"."+i+"()",e.ORDER_ATOMIC]},xX=function(t,e){return e.definitions_.import_ltr308al="import ltr308al",[e.valueToCode(this,"SUB",e.ORDER_ATOMIC)+".getdata()",e.ORDER_ATOMIC]},bX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=this.getFieldValue("key");return e.definitions_.import_hp203x="import hp203x",[i+"."+n,e.ORDER_ATOMIC]},VX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=this.getFieldValue("key");return e.definitions_.import_spl06_001="import spl06_001",[i+"."+n,e.ORDER_ATOMIC]},BX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=this.getFieldValue("key");return e.definitions_.import_ltr381rgb="import ltr381rgb",[i+".getdata()"+n,e.ORDER_ATOMIC]},GX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=this.getFieldValue("key");if(e.definitions_.import_ucs12071="import ucs12071","0"==n)var s=i+".color()";else if("1"==n)s=i+".color_raw()";else if("2"==n)s=i+".als()";else s=i+".ir()";return[s,e.ORDER_ATOMIC]},UX=function(t,e){e.definitions_.import_machine="import machine",e.definitions_.import_time="import time",e.definitions_.import_ltr390uv="import ltr390uv";var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC);if("E"==this.getFieldValue("key"))var n=i+".ambient_light()";else n=i+".ultraviolet()";return[n,e.ORDER_ATOMIC]},wX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=this.getFieldValue("key");return e.definitions_.import_qmc5883l="import qmc5883l",[i+"."+n,e.ORDER_ATOMIC]},kX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=this.getFieldValue("key");return e.definitions_.import_shtc3="import shtc3",[i+"."+n+"()",e.ORDER_ATOMIC]},HX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=this.getFieldValue("key");return e.definitions_.import_ahtx0="import ahtx0",[i+"."+n+"()",e.ORDER_ATOMIC]},WX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC);return e.definitions_.import_vl53l0x="import vl53l0x",[i+".read()",e.ORDER_ATOMIC]},KX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(this,"SPISUB",e.ORDER_ATOMIC),s=e.valueToCode(this,"PINSUB",e.ORDER_ATOMIC),_=this.getFieldValue("key");if("RFID"==_){e.definitions_.import_rc522="import rc522";var o=i+" = rc522.RC522("+n+","+s+")\n"}else if("Weather"==_){var p=Rt.Boards.getSelectedBoardKey().split(":")[2];if(e.definitions_["import_"+p]="import "+p,e.definitions_.import_ws_lora="import ws_lora","mixgo_pe"==p)o=i+" = ws_lora.Weather("+n+","+s+")\n";else if("mixgo_nova"==p)o=i+" = ws_lora.Weather("+n+","+s+","+p+".onboard_i2c_soft)\n";else o=i+" = ws_lora.Weather("+n+","+s+","+p+".onboard_i2c)\n"}return o},JX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(this,"SECTOR",e.ORDER_ATOMIC),s=this.getFieldValue("key");return e.definitions_.import_rc522="import rc522",[i+".read_card("+n+',"'+s+'")',e.ORDER_ATOMIC]},qX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC);return e.definitions_.import_rc522="import rc522",[i+'.read_card(0, x="id")',e.ORDER_ATOMIC]},QX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(this,"SECTOR",e.ORDER_ATOMIC);return e.definitions_.import_rc522="import rc522",[i+".read_card("+n+")",e.ORDER_ATOMIC]},zX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(this,"SECTOR",e.ORDER_ATOMIC),s=e.valueToCode(this,"CONTENT",e.ORDER_ATOMIC);return e.definitions_.import_rc522="import rc522",i+".write_card("+s+","+n+")\n"},jX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(this,"SECTOR",e.ORDER_ATOMIC),s=e.valueToCode(this,"CONTENT",e.ORDER_ATOMIC);return e.definitions_.import_rc522="import rc522",[i+".write_card("+s+","+n+")",e.ORDER_ATOMIC]},ZX=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=this.getFieldValue("key");return e.definitions_.import_rc522="import rc522",[i+".scan_card()=="+n,e.ORDER_ATOMIC]},$X=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=this.getFieldValue("key");return e.definitions_.import_ws_lora="import ws_lora",[i+"."+n,e.ORDER_ATOMIC]},ty=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC);return e.definitions_.import_ws_lora="import ws_lora",[i+".any()",e.ORDER_ATOMIC]},ey=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC),n=e.valueToCode(this,"BASE",e.ORDER_ATOMIC);return e.definitions_.import_ws_lora="import ws_lora",i+".uart_mixio(topic="+n+")\n"},iy=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC);e.definitions_.import_ws_lora="import ws_lora";for(var n=new Array(this.itemCount_),s=0;s {\n"+e.statementToCode(this,"do")+"})\n"},EV=function(){return"control.reset()\n"},OV=function(t,e){return"control.waitMicros("+(e.valueToCode(this,"data",e.ORDER_ATOMIC)||Rt.Profile.default.serial)+")\n"},RV=function(t,e){return"control.raiseEvent("+(e.valueToCode(this,"system_event_bus_source",e.ORDER_ATOMIC)||Rt.Profile.default.serial)+", "+(e.valueToCode(this,"system_event_bus_value",e.ORDER_ATOMIC)||Rt.Profile.default.serial)+")\n"},cV=function(t,e){return"control.onEvent("+(e.valueToCode(this,"system_event_bus_source",e.ORDER_ATOMIC)||Rt.Profile.default.serial)+", "+(e.valueToCode(this,"system_event_bus_value",e.ORDER_ATOMIC)||Rt.Profile.default.serial)+", () => {\n"+e.statementToCode(this,"do")+")\n"},gV=function(t,e){return["control.eventTimestamp()",e.ORDER_ATOMIC]},CV=function(t,e){return["control.eventValue()",e.ORDER_ATOMIC]},SV=function(t,e){return[this.getFieldValue("key"),e.ORDER_ATOMIC]},LV=function(t,e){return[this.getFieldValue("key"),e.ORDER_ATOMIC]},AV=function(t,e){return["control.deviceName()",e.ORDER_ATOMIC]},NV=function(t,e){return["control.deviceSerialNumber()",e.ORDER_ATOMIC]},DV=function(t,e){return"panic("+(e.valueToCode(this,"STATUS_CODE",e.ORDER_ATOMIC)||"1000")+")\n"},fV=function(t,e){switch(e.definitions_.import_time="import time",this.getFieldValue("Time")){case"ms":return["time.ticks_ms()",e.ORDER_ATOMIC];case"us":return["time.ticks_us()",e.ORDER_ATOMIC]}},FV=function(){return"while True:\n pass\n"},PV=function(t,e){return e.definitions_.import_mixgo="import mixgo","reset()\n"},YV=function(t,e){return e.definitions_.import_os="import os","os.uname()"},vV=function(t,e){e.definitions_.import_time="import time";var i=e.valueToCode(this,"DELAY_TIME",e.ORDER_ATOMIC)||"1000";switch(this.getFieldValue("Time")){case"s":return"time.sleep("+i+")\n";case"ms":return"time.sleep_ms("+i+")\n";case"us":return"time.sleep_us("+i+")\n"}},XV=function(t,e){e.definitions_.import_time="import time";var i=e.valueToCode(this,"DELAY_TIME",e.ORDER_ATOMIC)||"1000";switch(this.getFieldValue("Time")){case"s":return"time.sleep("+i+")\n";case"ms":return"time.sleep_ms("+i+")\n";case"us":return"time.sleep_us("+i+")\n"}},yV=function(t,e){return e.definitions_.import_mixgo="import mixgo",(e.valueToCode(this,"VAR",e.ORDER_NONE)||"None")+".init(period = "+(e.valueToCode(this,"period",e.ORDER_NONE)||"0")+", mode = Timer."+(e.valueToCode(this,"mode",e.ORDER_NONE)||"None")+", callback = "+(e.valueToCode(this,"callback",e.ORDER_NONE)||"None")+")\n"},xV=function(t,e){return e.definitions_.import_machine="import machine",(e.valueToCode(this,"VAR",e.ORDER_NONE)||"None")+".init(period = "+(e.valueToCode(this,"period",e.ORDER_NONE)||"0")+", mode = machine.Timer."+this.getFieldValue("mode")+", callback = "+(e.valueToCode(this,"callback",e.ORDER_NONE)||"None")+")\n"},bV=function(t,e){return e.definitions_.import_time="import time",["time.ticks_diff("+(e.valueToCode(this,"END",e.ORDER_NONE)||"0")+", "+(e.valueToCode(this,"START",e.ORDER_NONE)||"0")+")",e.ORDER_ATOMIC]},VV=function(t,e){var i=e.valueToCode(this,"SUB",e.ORDER_ATOMIC);return e.definitions_.import_machine="import machine",i+" = machine.Timer(0)\n"},BV=function(t,e){return e.definitions_.import_machine="import machine","wdt = machine.WDT(timeout= "+(e.valueToCode(this,"period",e.ORDER_NONE)||"0")+")\n"},GV=function(t,e){e.definitions_.import_machine="import machine";return"wdt.feed()\n"},UV=function(t,e){e.definitions_.import_machine="import machine";return"machine.reset()\n"},wV=function(t,e){e.definitions_.import_bitbot_onboard_bot51="from bitbot import onboard_bot51";return"onboard_bot51.shutdown()\n"},kV=VV,HV=xV,WV=bV,KV=vV,JV=function(t,e){return e.definitions_.import_seniverse_api="import seniverse_api",["seniverse_api."+this.getFieldValue("mode")+"("+e.valueToCode(this,"key",e.ORDER_ATOMIC)+","+e.valueToCode(this,"addr",e.ORDER_ATOMIC)+")",e.ORDER_ATOMIC]},qV=function(t,e){return e.definitions_.import_seniverse_api="import seniverse_api",["seniverse_api."+this.getFieldValue("mode")+"("+e.valueToCode(this,"key",e.ORDER_ATOMIC)+","+e.valueToCode(this,"addr",e.ORDER_ATOMIC)+","+e.valueToCode(this,"day",e.ORDER_ATOMIC)+")",e.ORDER_ATOMIC]},QV=function(t,e){return e.definitions_.import_seniverse_api="import seniverse_api",["seniverse_api.weather_hourly("+e.valueToCode(this,"key",e.ORDER_ATOMIC)+","+e.valueToCode(this,"addr",e.ORDER_ATOMIC)+","+e.valueToCode(this,"hour",e.ORDER_ATOMIC)+")",e.ORDER_ATOMIC]},zV=function(t,e){return e.definitions_["import_seniverse_api*"]="from seniverse_api import *",this.getFieldValue("mode")+".request("+e.valueToCode(this,"key",e.ORDER_ATOMIC)+","+e.valueToCode(this,"addr",e.ORDER_ATOMIC)+")\n"},jV=function(t,e){e.definitions_["import_seniverse_api*"]="from seniverse_api import *";var i=this.getFieldValue("content");if("none"==i)var n="Weather_now.analysis()";else n='Weather_now.analysis("'+i+'")';return[n,e.ORDER_ATOMIC]},ZV=function(t,e){e.definitions_["import_seniverse_api*"]="from seniverse_api import *";var i=this.getFieldValue("content");if("none"==i)var n="Air_now.analysis()";else n='Air_now.analysis("'+i+'")';return[n,e.ORDER_ATOMIC]},$V=function(t,e){e.definitions_["import_seniverse_api*"]="from seniverse_api import *";var i=this.getFieldValue("content");if("none"==i)var n="Weather_alarm.analysis()";else n='Weather_alarm.analysis("'+i+'")';return[n,e.ORDER_ATOMIC]},tB=function(t,e){e.definitions_["import_seniverse_api*"]="from seniverse_api import *";var i=this.getFieldValue("content");if("none"==i)var n="Life_suggestion.analysis()";else n='Life_suggestion.analysis("'+i+'")';return[n,e.ORDER_ATOMIC]},eB=function(t,e){e.definitions_["import_seniverse_api*"]="from seniverse_api import *";var i=this.getFieldValue("content");if("none"==i)var n="Tide_daily.analysis()";else n='Tide_daily.analysis("'+i+'")';return[n,e.ORDER_ATOMIC]},iB=function(t,e){e.definitions_["import_seniverse_api*"]="from seniverse_api import *";var i=this.getFieldValue("content");if("none"==i)var n="Location_search.analysis()";else n='Location_search.analysis("'+i+'")';return[n,e.ORDER_ATOMIC]},nB=function(t,e){return e.definitions_["import_seniverse_api*"]="from seniverse_api import *",this.getFieldValue("mode")+".request("+e.valueToCode(this,"key",e.ORDER_ATOMIC)+","+e.valueToCode(this,"addr",e.ORDER_ATOMIC)+","+e.valueToCode(this,"day",e.ORDER_ATOMIC)+")\n"},sB=function(t,e){e.definitions_["import_seniverse_api*"]="from seniverse_api import *";var i=this.getFieldValue("content"),n=e.valueToCode(this,"day",e.ORDER_ATOMIC);if("none"==i)var s="Weather_daily.analysis("+n+")";else s="Weather_daily.analysis("+n+',"'+i+'")';return[s,e.ORDER_ATOMIC]},_B=function(t,e){e.definitions_["import_seniverse_api*"]="from seniverse_api import *";var i=this.getFieldValue("content"),n=e.valueToCode(this,"day",e.ORDER_ATOMIC);if("none"==i)var s="Air_daily.analysis("+n+")";else s="Air_daily.analysis("+n+',"'+i+'")';return[s,e.ORDER_ATOMIC]},oB=function(t,e){e.definitions_["import_seniverse_api*"]="from seniverse_api import *";var i=this.getFieldValue("content"),n=e.valueToCode(this,"day",e.ORDER_ATOMIC);if("none"==i)var s="Geo_sun.analysis("+n+")";else s="Geo_sun.analysis("+n+',"'+i+'")';return[s,e.ORDER_ATOMIC]},pB=function(t,e){e.definitions_["import_seniverse_api*"]="from seniverse_api import *";var i=this.getFieldValue("content"),n=e.valueToCode(this,"day",e.ORDER_ATOMIC);if("none"==i)var s="Geo_moon.analysis("+n+")";else s="Geo_moon.analysis("+n+',"'+i+'")';return[s,e.ORDER_ATOMIC]},aB={};aB["MixGo MINI"]={description:"MicroPython[ESP32C3 MixGo MINI]",digital_pin:Rt.Profile.generate(["0-10","18"]),input_pin:Rt.Profile.generate(["0-10","18"]),output_pin:Rt.Profile.generate(["0-10","18"]),pwm_input:Rt.Profile.generate(["0-10","18"],"pwm","pwm"),analog_input:Rt.Profile.generate(["0-4"],"adc","adc"),pwm_output:Rt.Profile.generate(["0-10","18"],"pwm","pwm"),analog_output:Rt.Profile.generate(["0-4"],"adc","adc"),espnow_channel:Rt.Profile.generate(["1-13"]),haskylens_model:Rt.Profile.generate(["0-4"]),digital:Rt.Profile.generate(["0-10","18"],"pin","pin"),pwm_pin:Rt.Profile.generate(["0-10","18"]),pwm:Rt.Profile.generate(["0-10","18"],"pwm","pwm"),analog_pin:Rt.Profile.generate(["0-4"]),analog:Rt.Profile.generate(["0-4"],"adc","adc"),button:[["B1","B1key"],["B2","B2key"],["A1","A1key"],["A2","A2key"],["A3","A3key"],["A4","A4key"]],buttonB:[["B1","B1key"],["B2","B2key"]],axis:Rt.Profile.generate(["0-4"]),exlcdh:Rt.Profile.generate(["0-11"]),exlcdv:Rt.Profile.generate(["0-7"]),brightness:Rt.Profile.generate(["0-9"]),tts_voice:Rt.Profile.generate(["0-16"]),tts_builtin_music:Rt.Profile.generate(["0-47"]),tts_bgmusic:Rt.Profile.generate(["0-15"]),builtinimg:[["HEART","onboard_matrix.HEART"],["HEART_SMALL","onboard_matrix.HEART_SMALL"],["HAPPY","onboard_matrix.HAPPY"],["SAD","onboard_matrix.SAD"],["SMILE","onboard_matrix.SMILE"],["ANGRY","onboard_matrix.ANGRY"],["NO","onboard_matrix.NO"],["YES","onboard_matrix.YES"],["DOOR_OPEN","onboard_matrix.DOOR_OPEN"],["DOOR_OPENING","onboard_matrix.DOOR_OPENING"],["DOOR_CLOSE","onboard_matrix.DOOR_CLOSE"]],builtinimg_extern:[["HEART","matrix32x12.Matrix.HEART"],["HEART_SMALL","matrix32x12.Matrix.HEART_SMALL"],["HAPPY","matrix32x12.Matrix.HAPPY"],["SAD","matrix32x12.Matrix.SAD"],["SMILE","matrix32x12.Matrix.SMILE"],["SILLY","matrix32x12.Matrix.SILLY"],["FABULOUS","matrix32x12.Matrix.FABULOUS"],["SURPRISED","matrix32x12.Matrix.SURPRISED"],["ASLEEP","matrix32x12.Matrix.ASLEEP"],["ANGRY","matrix32x12.Matrix.ANGRY"],["CONFUSED","matrix32x12.Matrix.CONFUSED"],["NO","matrix32x12.Matrix.NO"],["YES","matrix32x12.Matrix.YES"],["LEFT_ARROW","matrix32x12.Matrix.LEFT_ARROW"],["RIGHT_ARROW","matrix32x12.Matrix.RIGHT_ARROW"],["DRESS","matrix32x12.Matrix.DRESS"],["TRANSFORMERS","matrix32x12.Matrix.TRANSFORMERS"],["SCISSORS","matrix32x12.Matrix.SCISSORS"],["EXIT","matrix32x12.Matrix.EXIT"],["TREE","matrix32x12.Matrix.TREE"],["PACMAN","matrix32x12.Matrix.PACMAN"],["TARGET","matrix32x12.Matrix.TARGET"],["TSHIRT","matrix32x12.Matrix.TSHIRT"],["ROLLERSKATE","matrix32x12.Matrix.ROLLERSKATE"],["DUCK","matrix32x12.Matrix.DUCK"],["HOUSE","matrix32x12.Matrix.HOUSE"],["TORTOISE","matrix32x12.Matrix.TORTOISE"],["BUTTERFLY","matrix32x12.Matrix.BUTTERFLY"],["STICKFIGURE","matrix32x12.Matrix.STICKFIGURE"],["GHOST","matrix32x12.Matrix.GHOST"],["PITCHFORK","matrix32x12.Matrix.PITCHFORK"],["onboard_music_QUAVERS","matrix32x12.Matrix.onboard_music_QUAVERS"],["onboard_music_QUAVER","matrix32x12.Matrix.onboard_music_QUAVER"],["onboard_music_CROTCHET","matrix32x12.Matrix.onboard_music_CROTCHET"],["COW","matrix32x12.Matrix.COW"],["RABBIT","matrix32x12.Matrix.RABBIT"],["SQUARE_SMALL","matrix32x12.Matrix.SQUARE_SMALL"],["SQUARE","matrix32x12.Matrix.SQUARE"],["DIAMOND_SMALL","matrix32x12.Matrix.DIAMOND_SMALL"],["DIAMOND","matrix32x12.Matrix.DIAMOND"],["CHESSBOARD","matrix32x12.Matrix.CHESSBOARD"],["TRIANGLE_LEFT","matrix32x12.Matrix.TRIANGLE_LEFT"],["TRIANGLE","matrix32x12.Matrix.TRIANGLE"],["SNAKE","matrix32x12.Matrix.SNAKE"],["UMBRELLA","matrix32x12.Matrix.UMBRELLA"],["SKULL","matrix32x12.Matrix.SKULL"],["GIRAFFE","matrix32x12.Matrix.GIRAFFE"],["SWORD","matrix32x12.Matrix.SWORD"]],imglist:[["ALL_CLOCKS","matrix.Image.ALL_CLOCKS"],["ALL_ARROWS","matrix.Image.ALL_ARROWS"]],playlist:[["DADADADUM","onboard_music.DADADADUM"],["BIRTHDAY","onboard_music.BIRTHDAY"],["BA_DING","onboard_music.BA_DING"],["JUMP_UP","onboard_music.JUMP_UP"],["JUMP_DOWN","onboard_music.JUMP_DOWN"],["POWER_UP","onboard_music.POWER_UP"],["POWER_DOWN","onboard_music.POWER_DOWN"]],playlist_extern:[["DADADADUM","DADADADUM"],["ENTERTAINER","ENTERTAINER"],["PRELUDE","PRELUDE"],["ODE","ODE"],["NYAN","NYAN"],["RINGTONE","RINGTONE"],["FUNK","FUNK"],["BLUES","BLUES"],["BIRTHDAY","BIRTHDAY"],["WEDDING","WEDDING"],["FUNERAL","FUNERAL"],["PUNCHLINE","PUNCHLINE"],["PYTHON","PYTHON"],["BADDY","BADDY"],["CHASE","CHASE"],["BA_DING","BA_DING"],["WAWAWAWAA","WAWAWAWAA"],["JUMP_UP","JUMP_UP"],["JUMP_DOWN","JUMP_DOWN"],["POWER_UP","POWER_UP"],["POWER_DOWN","POWER_DOWN"]],tone_notes:[["NOTE_C3","131"],["NOTE_D3","147"],["NOTE_E3","165"],["NOTE_F3","175"],["NOTE_G3","196"],["NOTE_A3","220"],["NOTE_B3","247"],["NOTE_C4","262"],["NOTE_D4","294"],["NOTE_E4","330"],["NOTE_F4","349"],["NOTE_G4","392"],["NOTE_A4","440"],["NOTE_B4","494"],["NOTE_C5","523"],["NOTE_D5","587"],["NOTE_E5","659"],["NOTE_F5","698"],["NOTE_G5","784"],["NOTE_A5","880"],["NOTE_B5","988"]],serial_pin:[["pin0","0"],["pin1","1"],["pin2","2"],["pin8","8"],["pin12","12"],["pin13","13"],["pin14","14"],["pin15","15"],["pin16","16"]],radio_power:[["0","0"],["1","1"],["2","2"],["3","3"],["4","4"],["5","5"],["6","6"],["7","7"]],radio_datarate:[["1Mbit","RATE_1MBIT"],["250Kbit","RATE_250KBIT"],["2Mbit","RATE_2MBIT"]],one_more:[["ONE_SHOT","ONE_SHOT"],["PERIODIC","PERIODIC"]],digital_dot:[["0","0"],["1","1"],["2","2"]]},aB["ESP32C2 Generic(2M)"]={description:"MicroPython[ESP32C3 MixGo CC]",digital_pin:Rt.Profile.generate(["0-11","18-21"]),input_pin:Rt.Profile.generate(["0-11","18-21"]),output_pin:Rt.Profile.generate(["0-11","18-21"]),pwm_input:Rt.Profile.generate(["0-11","18-21"],"pwm","pwm"),analog_input:Rt.Profile.generate(["0-5"],"adc","adc"),pwm_output:Rt.Profile.generate(["0-11","18-21"],"pwm","pwm"),analog_output:Rt.Profile.generate(["0-5"],"adc","adc"),espnow_channel:Rt.Profile.generate(["1-13"]),haskylens_model:Rt.Profile.generate(["0-4"]),digital:Rt.Profile.generate(["0-11","18-21"],"pin","pin"),pwm_pin:Rt.Profile.generate(["0-11","18-21"]),pwm:Rt.Profile.generate(["0-11","18-21"],"pwm","pwm"),analog_pin:Rt.Profile.generate(["0-5"]),analog:Rt.Profile.generate(["0-5"],"adc","adc"),button:[["B1","B1key"],["B2","B2key"],["A1","A1key"],["A2","A2key"],["A3","A3key"],["A4","A4key"]],buttonB:[["B1","B1key"],["B2","B2key"]],axis:Rt.Profile.generate(["0-4"]),exlcdh:Rt.Profile.generate(["0-31"]),exlcdv:Rt.Profile.generate(["0-11"]),brightness:Rt.Profile.generate(["0-9"]),tts_voice:Rt.Profile.generate(["0-16"]),tts_builtin_music:Rt.Profile.generate(["0-47"]),tts_bgmusic:Rt.Profile.generate(["0-15"]),builtinimg:[["HEART","onboard_matrix.HEART"],["HEART_SMALL","onboard_matrix.HEART_SMALL"],["HAPPY","onboard_matrix.HAPPY"],["SAD","onboard_matrix.SAD"],["SMILE","onboard_matrix.SMILE"],["SILLY","onboard_matrix.SILLY"],["FABULOUS","onboard_matrix.FABULOUS"],["SURPRISED","onboard_matrix.SURPRISED"],["ASLEEP","onboard_matrix.ASLEEP"],["ANGRY","onboard_matrix.ANGRY"],["CONFUSED","onboard_matrix.CONFUSED"],["NO","onboard_matrix.NO"],["YES","onboard_matrix.YES"]],builtinimg_extern:[["HEART","matrix32x12.Matrix.HEART"],["HEART_SMALL","matrix32x12.Matrix.HEART_SMALL"],["HAPPY","matrix32x12.Matrix.HAPPY"],["SAD","matrix32x12.Matrix.SAD"],["SMILE","matrix32x12.Matrix.SMILE"],["SILLY","matrix32x12.Matrix.SILLY"],["FABULOUS","matrix32x12.Matrix.FABULOUS"],["SURPRISED","matrix32x12.Matrix.SURPRISED"],["ASLEEP","matrix32x12.Matrix.ASLEEP"],["ANGRY","matrix32x12.Matrix.ANGRY"],["CONFUSED","matrix32x12.Matrix.CONFUSED"],["NO","matrix32x12.Matrix.NO"],["YES","matrix32x12.Matrix.YES"],["LEFT_ARROW","matrix32x12.Matrix.LEFT_ARROW"],["RIGHT_ARROW","matrix32x12.Matrix.RIGHT_ARROW"],["DRESS","matrix32x12.Matrix.DRESS"],["TRANSFORMERS","matrix32x12.Matrix.TRANSFORMERS"],["SCISSORS","matrix32x12.Matrix.SCISSORS"],["EXIT","matrix32x12.Matrix.EXIT"],["TREE","matrix32x12.Matrix.TREE"],["PACMAN","matrix32x12.Matrix.PACMAN"],["TARGET","matrix32x12.Matrix.TARGET"],["TSHIRT","matrix32x12.Matrix.TSHIRT"],["ROLLERSKATE","matrix32x12.Matrix.ROLLERSKATE"],["DUCK","matrix32x12.Matrix.DUCK"],["HOUSE","matrix32x12.Matrix.HOUSE"],["TORTOISE","matrix32x12.Matrix.TORTOISE"],["BUTTERFLY","matrix32x12.Matrix.BUTTERFLY"],["STICKFIGURE","matrix32x12.Matrix.STICKFIGURE"],["GHOST","matrix32x12.Matrix.GHOST"],["PITCHFORK","matrix32x12.Matrix.PITCHFORK"],["onboard_music_QUAVERS","matrix32x12.Matrix.onboard_music_QUAVERS"],["onboard_music_QUAVER","matrix32x12.Matrix.onboard_music_QUAVER"],["onboard_music_CROTCHET","matrix32x12.Matrix.onboard_music_CROTCHET"],["COW","matrix32x12.Matrix.COW"],["RABBIT","matrix32x12.Matrix.RABBIT"],["SQUARE_SMALL","matrix32x12.Matrix.SQUARE_SMALL"],["SQUARE","matrix32x12.Matrix.SQUARE"],["DIAMOND_SMALL","matrix32x12.Matrix.DIAMOND_SMALL"],["DIAMOND","matrix32x12.Matrix.DIAMOND"],["CHESSBOARD","matrix32x12.Matrix.CHESSBOARD"],["TRIANGLE_LEFT","matrix32x12.Matrix.TRIANGLE_LEFT"],["TRIANGLE","matrix32x12.Matrix.TRIANGLE"],["SNAKE","matrix32x12.Matrix.SNAKE"],["UMBRELLA","matrix32x12.Matrix.UMBRELLA"],["SKULL","matrix32x12.Matrix.SKULL"],["GIRAFFE","matrix32x12.Matrix.GIRAFFE"],["SWORD","matrix32x12.Matrix.SWORD"]],imglist:[["ALL_CLOCKS","matrix.Image.ALL_CLOCKS"],["ALL_ARROWS","matrix.Image.ALL_ARROWS"]],playlist:[["DADADADUM","onboard_music.DADADADUM"],["ENTERTAINER","onboard_music.ENTERTAINER"],["PRELUDE","onboard_music.PRELUDE"],["ODE","onboard_music.ODE"],["NYAN","onboard_music.NYAN"],["RINGTONE","onboard_music.RINGTONE"],["FUNK","onboard_music.FUNK"],["BLUES","onboard_music.BLUES"],["BIRTHDAY","onboard_music.BIRTHDAY"],["WEDDING","onboard_music.WEDDING"],["FUNERAL","onboard_music.FUNERAL"],["PUNCHLINE","onboard_music.PUNCHLINE"],["PYTHON","onboard_music.PYTHON"],["BADDY","onboard_music.BADDY"],["CHASE","onboard_music.CHASE"],["BA_DING","onboard_music.BA_DING"],["WAWAWAWAA","onboard_music.WAWAWAWAA"],["JUMP_UP","onboard_music.JUMP_UP"],["JUMP_DOWN","onboard_music.JUMP_DOWN"],["POWER_UP","onboard_music.POWER_UP"],["POWER_DOWN","onboard_music.POWER_DOWN"]],playlist_extern:[["DADADADUM","DADADADUM"],["ENTERTAINER","ENTERTAINER"],["PRELUDE","PRELUDE"],["ODE","ODE"],["NYAN","NYAN"],["RINGTONE","RINGTONE"],["FUNK","FUNK"],["BLUES","BLUES"],["BIRTHDAY","BIRTHDAY"],["WEDDING","WEDDING"],["FUNERAL","FUNERAL"],["PUNCHLINE","PUNCHLINE"],["PYTHON","PYTHON"],["BADDY","BADDY"],["CHASE","CHASE"],["BA_DING","BA_DING"],["WAWAWAWAA","WAWAWAWAA"],["JUMP_UP","JUMP_UP"],["JUMP_DOWN","JUMP_DOWN"],["POWER_UP","POWER_UP"],["POWER_DOWN","POWER_DOWN"]],tone_notes:[["NOTE_C3","131"],["NOTE_D3","147"],["NOTE_E3","165"],["NOTE_F3","175"],["NOTE_G3","196"],["NOTE_A3","220"],["NOTE_B3","247"],["NOTE_C4","262"],["NOTE_D4","294"],["NOTE_E4","330"],["NOTE_F4","349"],["NOTE_G4","392"],["NOTE_A4","440"],["NOTE_B4","494"],["NOTE_C5","523"],["NOTE_D5","587"],["NOTE_E5","659"],["NOTE_F5","698"],["NOTE_G5","784"],["NOTE_A5","880"],["NOTE_B5","988"]],serial_pin:[["pin0","0"],["pin1","1"],["pin2","2"],["pin8","8"],["pin12","12"],["pin13","13"],["pin14","14"],["pin15","15"],["pin16","16"]],radio_power:[["0","0"],["1","1"],["2","2"],["3","3"],["4","4"],["5","5"],["6","6"],["7","7"]],radio_datarate:[["1Mbit","RATE_1MBIT"],["250Kbit","RATE_250KBIT"],["2Mbit","RATE_2MBIT"]],one_more:[["ONE_SHOT","ONE_SHOT"],["PERIODIC","PERIODIC"]],digital_dot:[["0","0"],["1","1"],["2","2"]]};const uB=aB,rB=20,lB={init:function(){this.setColour(rB),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_HIGH,"HIGH"],[Ot.Msg.MIXLY_LOW,"LOW"]]),"BOOL"),this.setOutput(!0,Boolean),this.setTooltip(Ot.Msg.MIXLY_ESP32_INOUT_HIGHLOW_TOOLTIP)}},dB={init:function(){this.setColour(rB),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_Digital_PINMODEOUT).setCheck(Number),this.appendValueInput("STAT").appendField(Ot.Msg.MIXLY_STAT).setCheck([Number,Boolean]),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_INOUT_DIGITAL_WRITE_TOOLTIP)}},IB={init:function(){this.setColour(rB),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET).appendField(Ot.Msg.MIXLY_Digital_PINMODEIN).setCheck(Number),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_MACHINE_VALUE),this.setInputsInline(!0),this.setOutput(!0,[Boolean,Number]),this.setTooltip(Ot.Msg.MIXLY_ESP32_INOUT_DIGITAL_READ_TOOLTIP)}},TB={init:function(){this.setColour(rB),this.appendValueInput("PIN",Number).appendField("DAC"+Ot.Msg.MIXLY_Analog_PINMODEOUT).setCheck(Number),this.appendValueInput("NUM",Number).appendField(Ot.Msg.MIXLY_VALUE2).setCheck(Number),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip(Ot.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_TOOLTIP)}},MB={init:function(){this.setColour(rB),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_Analog_PINMODEOUT).setCheck(Number),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_JS_PERIOD_MIL).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_mSecond,"period"],[Ot.Msg.MIXLY_uSecond,"period_microseconds"]]),"key"),this.appendValueInput("NUM",Number).appendField(Ot.Msg.MIXLY_STAT).setCheck(Number),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip(Ot.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_SET_TOOLTIP)}},hB={init:function(){this.setColour(rB),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_Analog_PINMODEIN).setCheck(Number),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_ESP32_REF_VOLTAGE+Ot.Msg.MIXLY_STAT).appendField(new Ot.FieldDropdown([["3.3V","machine.ADC.ATTN_11DB"],["2.2V","machine.ADC.ATTN_6DB"],["1.5V","machine.ADC.ATTN_2_5DB"],["1.2V","machine.ADC.ATTN_0DB"]]),"atten"),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip(Ot.Msg.MIXLY_ESP32_INOUT_ANALOG_ATTEN_TOOLTIP)}},mB={init:function(){this.setColour(rB),this.appendValueInput("pin").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET).appendField(Ot.Msg.MIXLY_ESP32_TOUCH_SENSOR),this.appendDummyInput().appendField(Ot.Msg.MIXLY_ESP32_MACHINE_VALUE),this.setOutput(!0,Number),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_TOOLTIP)}},EB={init:function(){this.setColour(20),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_ATTACHINTERRUPT_PIN).setCheck(Number),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MODE).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_RISING,"machine.Pin.IRQ_RISING"],[Ot.Msg.MIXLY_FALLING,"machine.Pin.IRQ_FALLING"],[Ot.Msg.MIXLY_CHANGE,"(machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING)"]]),"mode"),this.appendValueInput("DO").appendField(Ot.Msg.MIXLY_DO),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_INOUT_PIN_ATTACHINTERRUPT_TOOLTIP)}},OB={init:function(){this.setColour(20),this.appendDummyInput().appendField(Ot.Msg.MIXLY_SETUP).appendField(new Ot.FieldTextInput("pin#"),"PIN_OBJ"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MICROPYTHON_AS).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_Digital_PINMODEOUT,"machine.Pin.OUT"],[Ot.Msg.MIXLY_Digital_PINMODEIN,"machine.Pin.IN"],[Ot.Msg.MIXLY_PINMODEPULLUP,"machine.Pin.IN, machine.Pin.PULL_UP"],[Ot.Msg.MIXLY_PINMODEPULLDOWN,"machine.Pin.IN, machine.Pin.PULL_DOWN"]]),"MODE"),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_INOUT_DIGITAL_INIT_TOOLTIP)},getVars:function(){return["pin#"==this.getFieldValue("PIN_OBJ")?null:this.getFieldValue("PIN_OBJ")]},renameVar:function(t,e){Ot.Names.equals(t,this.getFieldValue("PIN_OBJ"))&&this.setTitleValue(e,"PIN_OBJ")}},RB={init:function(){this.setColour(rB),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_SETUP).appendField(new Ot.FieldTextInput("dac#"),"PIN_OBJ").appendField(Ot.Msg.MIXLY_MICROPYTHON_AS),this.appendDummyInput("").appendField("DAC"+Ot.Msg.MIXLY_Analog_PINMODEOUT),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip(Ot.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_INIT_TOOLTIP)},getVars:function(){return["dac#"==this.getFieldValue("PIN_OBJ")?null:this.getFieldValue("PIN_OBJ")]},renameVar:function(t,e){Ot.Names.equals(t,this.getFieldValue("PIN_OBJ"))&&this.setTitleValue(e,"PIN_OBJ")}},cB={init:function(){this.setColour(rB),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_SETUP).appendField(new Ot.FieldTextInput("tc#"),"PIN_OBJ").appendField(Ot.Msg.MIXLY_MICROPYTHON_AS),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_ESP32_TOUCH_SENSOR),this.appendValueInput("PIN",Number).appendField(Ot.Msg.MIXLY_PIN).setCheck(Number),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip(Ot.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_INIT_TOOLTIP)},getVars:function(){return["tc#"==this.getFieldValue("PIN_OBJ")?null:this.getFieldValue("PIN_OBJ")]},renameVar:function(t,e){Ot.Names.equals(t,this.getFieldValue("PIN_OBJ"))&&this.setTitleValue(e,"PIN_OBJ")}},gB={init:function(){this.setColour(rB),this.appendValueInput("PIN",Number).appendField("PWM"+Ot.Msg.MIXLY_Analog_PINMODEOUT).setCheck(Number),this.appendValueInput("NUM",Number).appendField(Ot.Msg.MIXLY_FREQUENCY+Ot.Msg.MIXLY_STAT).setCheck(Number),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setTooltip(Ot.Msg.MIXLY_ESP32_INOUT_PWM_ANALOG_WRITE_SET_FREQ_TOOLTIP)}},CB=OB,SB=cB,LB=mB,AB=EB,NB=40,DB={init:function(){if("mixgo_me"==Rt.Boards.getSelectedBoardKey().split(":")[2])var t="ME G1";this.setColour(NB),this.appendDummyInput("").appendField(t).appendField(Ot.Msg.MIXLY_TEM_HUM+" AHT21").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_GETTEMPERATUE,"temperature"],[Ot.Msg.MIXLY_GETHUMIDITY,"humidity"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0);var e=this;this.setTooltip((function(){var t=e.getFieldValue("key");return{temperature:Ot.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,relative_humidity:Ot.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP}[t]}))}},fB={init:function(){if("mixgo_me"==Rt.Boards.getSelectedBoardKey().split(":")[2])var t="ME G1";this.setColour(NB),this.appendDummyInput("").appendField(t).appendField(Ot.Msg.MIXLY_Altitude+Ot.Msg.MSG.catSensor+" HP203X").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_GETPRESSURE,"pressure()"],[Ot.Msg.MIXLY_GETTEMPERATUE,"temperature()"],[Ot.Msg.MIXLY_GET_ALTITUDE,"altitude()"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0)}},FB={init:function(){if("mixgo_me"==Rt.Boards.getSelectedBoardKey().split(":")[2])var t="ME G1";this.setColour(NB),this.appendDummyInput().appendField(t).appendField(Ot.Msg.MIXLY_MIXGO_NOVA_POTENTIAL_NUM),this.setOutput(!0,Number),this.setInputsInline(!0)}},PB={init:function(){if("mixgo_me"==Rt.Boards.getSelectedBoardKey().split(":")[2])var t="ME G1";this.setColour(NB),this.appendDummyInput().appendField(t).appendField("RFID"+Ot.Msg.MIXLY_RFID_READ_CARD),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_RFID_READ_CARD_UID),this.setOutput(!0,Number),this.setInputsInline(!0)}},YB={init:function(){if("mixgo_me"==Rt.Boards.getSelectedBoardKey().split(":")[2])var t="ME G1";this.setColour(NB),this.appendDummyInput().appendField(t).appendField("RFID"+Ot.Msg.MIXLY_RFID_READ_CARD),this.appendValueInput("SECTOR").appendField(Ot.Msg.MIXLY_LIST_INDEX),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL),this.setOutput(!0,Number),this.setInputsInline(!0)}},vB={init:function(){if("mixgo_me"==Rt.Boards.getSelectedBoardKey().split(":")[2])var t="ME G1";this.setColour(NB),this.appendDummyInput().appendField(t).appendField(Ot.Msg.MIXLY_COMMUNICATION_RFID_WRITE),this.appendValueInput("SECTOR").appendField(Ot.Msg.MIXLY_LIST_INDEX),this.appendValueInput("CONTENT").appendField(Ot.Msg.MIXLY_COMMUNICATION_WRITE_NUM),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null)}},XB={init:function(){if("mixgo_me"==Rt.Boards.getSelectedBoardKey().split(":")[2])var t="ME G1";this.setColour(NB),this.appendDummyInput().appendField(t).appendField(Ot.Msg.MIXLY_COMMUNICATION_RFID_WRITE),this.appendValueInput("SECTOR").appendField(Ot.Msg.MIXLY_LIST_INDEX),this.appendValueInput("CONTENT").appendField(Ot.Msg.MIXLY_COMMUNICATION_WRITE_NUM),this.appendDummyInput().appendField(Ot.Msg.RETURN_SUCCESS_OR_NOT),this.setInputsInline(!0),this.setOutput(!0)}},yB={init:function(){if("mixgo_me"==Rt.Boards.getSelectedBoardKey().split(":")[2])var t="ME G1";this.setColour(NB),this.appendDummyInput().appendField(t).appendField("RFID"),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_RFID_SCAN_OK,"True"],[Ot.Msg.MIXLY_RFID_SCAN_NOTAGERR,"None"],[Ot.Msg.MIXLY_RFID_SCAN_ERROR,"False"]]),"key"),this.setOutput(!0,Number),this.setInputsInline(!0)}},xB=100,bB={init:function(){this.setColour(xB),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.MIXGO_LEFT_FRONT+Ot.Msg.COLOUR_RGB_GREEN+Ot.Msg.MIXLY_EXTERN_LED,"GLED[0]"],[Ot.Msg.MIXGO_RIGHT_FRONT+Ot.Msg.COLOUR_RGB_GREEN+Ot.Msg.MIXLY_EXTERN_LED,"GLED[1]"],[Ot.Msg.MIXGO_LEFT_BACK+Ot.Msg.COLOUR_RGB_GREEN+Ot.Msg.MIXLY_EXTERN_LED,"GLED[3]"],[Ot.Msg.MIXGO_RIGHT_BACK+Ot.Msg.COLOUR_RGB_GREEN+Ot.Msg.MIXLY_EXTERN_LED,"GLED[2]"],[Ot.Msg.MIXGO_LEFT_FRONT+Ot.Msg.COLOUR_RGB_RED+Ot.Msg.MIXLY_EXTERN_LED,"RLED[0]"],[Ot.Msg.MIXGO_RIGHT_FRONT+Ot.Msg.COLOUR_RGB_RED+Ot.Msg.MIXLY_EXTERN_LED,"RLED[1]"],[Ot.Msg.MIXGO_LEFT_BACK+Ot.Msg.COLOUR_RGB_RED+Ot.Msg.MIXLY_EXTERN_LED,"RLED[3]"],[Ot.Msg.MIXGO_RIGHT_BACK+Ot.Msg.COLOUR_RGB_RED+Ot.Msg.MIXLY_EXTERN_LED,"RLED[2]"],[Ot.Msg.ME_GO_LIGHT_HEADLIGHT,"WLED"]]),"op"),this.setOutput(!0)}},VB={init:function(){this.setColour(xB),this.appendDummyInput().appendField(Ot.Msg.MIXLY_SETTING),this.appendValueInput("led").appendField("ME GO"),this.appendValueInput("bright").appendField(Ot.Msg.MIXLY_PULSEIN_STAT),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_LED_SETONOFF)}},BB={init:function(){this.setColour(xB),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET),this.appendValueInput("led").appendField("ME GO"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_BRIGHTNESS),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_LED_GETONOFF)}},GB={init:function(){this.setColour(xB),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET),this.appendValueInput("led").appendField("ME GO"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_PULSEIN_STAT),this.setOutput(!0),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_ESP32_LED_GETONOFF)}},UB={init:function(){this.setColour(xB),this.appendDummyInput().appendField(Ot.Msg.MIXLY_SETTING),this.appendValueInput("led").appendField("ME GO"),this.appendValueInput("bright").appendField(Ot.Msg.MIXLY_BRIGHTNESS),this.appendDummyInput("").appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0),this.setTooltip(Ot.Msg.MIXLY_SETTING+Ot.Msg.MIXLY_BUILDIN_LED+Ot.Msg.MIXLY_BRIGHTNESS+"(0-10)")}},wB={init:function(){this.setColour(xB),this.appendDummyInput().appendField("ME GO").appendField(new Ot.FieldDropdown([[Ot.Msg.blockpy_forward,"F"],[Ot.Msg.blockpy_backward,"B"],[Ot.Msg.blockpy_left,"L"],[Ot.Msg.blockpy_right,"R"]]),"VAR"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_STEPPER_SET_SPEED),this.appendDummyInput("").appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},kB={init:function(){this.setColour(xB),this.appendDummyInput().appendField("ME GO").appendField(new Ot.FieldDropdown([[Ot.Msg.MOTOR_P,"P"],[Ot.Msg.MOTOR_N,"N"]]),"VAR"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},HB={init:function(){this.setColour(xB),this.appendDummyInput().appendField("ME GO").appendField(Ot.Msg.MOTOR_DC).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLYCAR_WHEEL_LEFT,"0"],[Ot.Msg.MIXLYCAR_WHEEL_RIGHT,"1"],[Ot.Msg.ME_GO_MOTOR_EXTERN,"2"]]),"wheel"),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_Direction).appendField(new Ot.FieldDropdown([[Ot.Msg.ROTATION_FORWARD,"CW"],[Ot.Msg.ROTATION_BACKWARD,"CCW"],[Ot.Msg.MOTOR_P,"P"],[Ot.Msg.MOTOR_N,"N"]]),"direction"),this.appendValueInput("speed").setCheck(Number).setAlign(Ot.inputs.Align.RIGHT).appendField(Ot.Msg.MIXLY_STEPPER_SET_SPEED),this.appendDummyInput("").appendField("%"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},WB={init:function(){this.setColour(xB),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_ESP32_INTERRUPT).appendField(Ot.Msg.ME_GO_HALL_SENSOR),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.TEXT_TRIM_LEFT,"A"],[Ot.Msg.TEXT_TRIM_RIGHT,"B"]]),"mode"),this.appendValueInput("DO").appendField(Ot.Msg.MIXLY_DO),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0)}},KB={init:function(){this.setColour(xB),this.appendDummyInput("").appendField(Ot.Msg.ME_GO_HALL_SENSOR),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.TEXT_TRIM_LEFT,"A"],[Ot.Msg.TEXT_TRIM_RIGHT,"B"]]),"mode"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_SETUP),this.appendDummyInput("").appendField(new Ot.FieldDropdown([["turns","turns"],["distance","distance"],["turns,distance","all"]]),"args"),this.appendValueInput("num").setCheck(Number),this.setPreviousStatement(!0),this.setNextStatement(!0),this.setInputsInline(!0)}},JB={init:function(){this.setColour(xB),this.appendDummyInput("").appendField(Ot.Msg.ME_GO_HALL_SENSOR),this.appendDummyInput("").appendField(new Ot.FieldDropdown([[Ot.Msg.TEXT_TRIM_LEFT,"A"],[Ot.Msg.TEXT_TRIM_RIGHT,"B"]]),"mode"),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET),this.appendDummyInput("").appendField(new Ot.FieldDropdown([["turns","turns"],["distance","distance"],["speed","speed"]]),"args"),this.setOutput(!0),this.setInputsInline(!0)}},qB={init:function(){this.setColour(xB),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET).appendField(new Ot.FieldDropdown([[Ot.Msg.TEXT_TRIM_LEFT,"[0]"],[Ot.Msg.MIXGO_LEFT_MID,"[1]"],[Ot.Msg.MIXGO_RIGHT_MID,"[2]"],[Ot.Msg.TEXT_TRIM_RIGHT,"[3]"],[Ot.Msg.MIXLY_ALL,""]]),"key").appendField(Ot.Msg.MIXGO_LINE_SENSOR_VAL),this.setOutput(!0,Number),this.setInputsInline(!0),this.setTooltip((function(){return Ot.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP+Ot.Msg.MIXLY_ESP32_NEAR}))}},QB={init:function(){this.setColour(xB),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXGO_LEFT_FRONT,"[0]"],[Ot.Msg.MIXGO_RIGHT_FRONT,"[1]"],[Ot.Msg.MIXGO_LEFT_BACK,"[3]"],[Ot.Msg.MIXGO_RIGHT_BACK,"[2]"],[Ot.Msg.MIXLY_ALL,""]]),"key").appendField(Ot.Msg.MIXGO_PROXIMITY_SENSOR),this.setOutput(!0,Number),this.setInputsInline(!0),this.setTooltip((function(){return Ot.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP+Ot.Msg.MIXLY_ESP32_NEAR}))}},zB={init:function(){this.setColour(xB),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MIXGO_CAR_SENSOR_ONBOARD_CHANGE).appendField(new Ot.FieldDropdown([[Ot.Msg.MIXLY_ME_GO_CAR_SENSOR_ONBOARD_AUTO_CHANGE,"AS"],[Ot.Msg.MIXLY_MIXGO_CAR_USE_LINE_ONLY,"LP"],[Ot.Msg.MIXLY_MIXGO_CAR_USE_PROXIMITY_ONLY,"OA"],[Ot.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_ONLY,"LS"],[Ot.Msg.ME_GO_SENSOR_MODE_OFF,"CL"]]),"key"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setInputsInline(!0)}},jB={init:function(){this.setColour(xB),this.appendDummyInput("").appendField(Ot.Msg.MIXLY_GET_GESTURE).appendField(new Ot.FieldDropdown([[Ot.Msg.ME_GO_PITCH,"[0]"],[Ot.Msg.ME_GO_ROLL,"[1]"],[Ot.Msg.ME_GO_PITCH+", "+Ot.Msg.ME_GO_ROLL,""]]),"angle"),this.appendDummyInput(""),this.setOutput(!0,Number),this.setInputsInline(!0)}},ZB={init:function(){this.setColour(xB),this.appendDummyInput().appendField(Ot.Msg.MIXLY_MICROBIT_PY_STORAGE_GET).appendField(new Ot.FieldDropdown([[Ot.Msg.TEXT_TRIM_LEFT,"[0]"],[Ot.Msg.MIXGO_LEFT_MID,"[1]"],[Ot.Msg.MIXGO_RIGHT_MID,"[2]"],[Ot.Msg.TEXT_TRIM_RIGHT,"[3]"],[Ot.Msg.MIXLY_ALL,""]]),"key").appendField(Ot.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_SENSOR),this.setOutput(!0,Number),this.setInputsInline(!0),this.setTooltip((function(){return Ot.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP+Ot.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_SENSOR}))}},$B=230,tG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.digital),"PIN"),this.setOutput(!0)}},eG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.digital_pin),"PIN"),this.setOutput(!0,Number)}},iG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.input_pin),"PIN"),this.setOutput(!0,Number)}},nG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.output_pin),"PIN"),this.setOutput(!0,Number)}},sG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.espnow_channel),"PIN"),this.setOutput(!0,Number)}},_G={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.haskylens_model),"PIN"),this.setOutput(!0,Number)}},oG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.pwm_input),"PIN"),this.setOutput(!0)}},pG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.analog_input),"PIN"),this.setOutput(!0)}},aG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.pwm_output),"PIN"),this.setOutput(!0)}},uG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.analog_output),"PIN"),this.setOutput(!0)}},rG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.i2c_A_pin),"PIN"),this.setOutput(!0,Number)}},lG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.i2c_B_pin),"PIN"),this.setOutput(!0,Number)}},dG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.spi_A_pin),"PIN"),this.setOutput(!0,Number)}},IG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.spi_B_pin),"PIN"),this.setOutput(!0,Number)}},TG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.spi_C_pin),"PIN"),this.setOutput(!0,Number)}},MG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.spi_D_pin),"PIN"),this.setOutput(!0,Number)}},hG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.analog),"PIN"),this.setOutput(!0)}},mG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.analog_pin),"PIN"),this.setOutput(!0,Number)}},EG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.dac),"PIN"),this.setOutput(!0)}},OG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.dac_pin),"PIN"),this.setOutput(!0,Number)}},RG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.button),"PIN"),this.setOutput(!0,Number)}},cG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.buttonB),"PIN"),this.setOutput(!0,Number)}},gG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.pwm),"PIN"),this.setOutput(!0)}},CG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.pwm_pin),"PIN"),this.setOutput(!0,Number)}},SG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.touch_pin),"PIN"),this.setOutput(!0,Number)}},LG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.touch),"PIN"),this.setOutput(!0)}},AG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.serial_pin),"PIN"),this.setOutput(!0,Number)}},NG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.builtinimg),"PIN"),this.setOutput(!0,"esp32_image")}},DG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.builtinimg_extern),"PIN"),this.setOutput(!0,"esp32_image")}},fG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.imglist),"PIN"),this.setOutput(!0)}},FG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.playlist),"PIN"),this.setOutput(!0)}},PG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.playlist_extern),"PIN"),this.setOutput(!0)}},YG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.exlcdh),"PIN"),this.setOutput(!0,Number)}},vG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.exlcdv),"PIN"),this.setOutput(!0,Number)}},XG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.axis),"PIN"),this.setOutput(!0,Number)}},yG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.brightness),"PIN"),this.setOutput(!0,Number)}},xG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.tts_voice),"PIN"),this.setOutput(!0,Number)}},bG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.tts_builtin_music),"PIN"),this.setOutput(!0,Number)}},VG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.tts_bgmusic),"PIN"),this.setOutput(!0,Number)}},BG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.tone_notes),"PIN"),this.setOutput(!0,Number)}},GG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.radio_power),"PIN"),this.setOutput(!0,Number)}},UG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.radio_datarate),"PIN"),this.setOutput(!0,Number)}},wG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.one_more),"PIN"),this.setOutput(!0)}},kG={init:function(){this.setColour($B),this.appendDummyInput("").appendField(new Ot.FieldDropdown(Rt.Profile.default.digital_dot),"PIN"),this.setOutput(!0,Number)}},HG=function(t,e){return["HIGH"==this.getFieldValue("BOOL")?"1":"0",e.ORDER_ATOMIC]},WG=function(t,e){e.definitions_.import_machine="import machine";var i="";return i+=e.valueToCode(this,"PIN",e.ORDER_ATOMIC)+".value("+e.valueToCode(this,"STAT",e.ORDER_ATOMIC)+")\n"},KG=function(t,e){e.definitions_.import_machine="import machine";return[e.valueToCode(this,"PIN",e.ORDER_ATOMIC)+".value()",e.ORDER_ATOMIC]},JG=function(t,e){return e.definitions_.import_machine="import machine",e.valueToCode(this,"PIN",e.ORDER_ATOMIC)+".write("+e.valueToCode(this,"NUM",e.ORDER_ATOMIC)+")\n"},qG=function(t,e){e.definitions_.import_machine="import machine";var i=e.valueToCode(this,"PIN",e.ORDER_ATOMIC),n=e.valueToCode(this,"NUM",e.ORDER_ATOMIC);return i+".set_analog_"+this.getFieldValue("key")+"("+n+")\n"},QG=function(t,e){return e.definitions_.import_machine="import machine",[e.valueToCode(this,"pin",e.ORDER_ATOMIC)+".read()",e.ORDER_ATOMIC]},zG=function(t,e){e.definitions_.import_machine="import machine";var i=e.valueToCode(this,"PIN",e.ORDER_ATOMIC),n=this.getFieldValue("mode");return"machine.Pin("+i+").irq(handler = "+e.valueToCode(this,"DO",e.ORDER_ATOMIC)+", trigger = "+n+")\n"},jG=function(t,e){e.definitions_.import_machine="import machine";var i=this.getFieldValue("PIN_OBJ")||"pin#",n=e.valueToCode(this,"PIN",e.ORDER_ATOMIC),s=this.getFieldValue("MODE");return("pin#"==i?"pin"+n:e.variableDB_.getName(i,Ot.Variables.NAME_TYPE))+" = machine.Pin("+n+", "+s+")\n"},ZG=function(t,e){e.definitions_.import_machine="import machine";var i=this.getFieldValue("PIN_OBJ")||"dac#",n=e.valueToCode(this,"PIN",e.ORDER_ATOMIC);return("dac#"==i?"dac"+n:e.variableDB_.getName(i,Ot.Variables.NAME_TYPE))+" = machine.DAC(machine.Pin("+n+"))\n"},$G=function(t,e){return e.definitions_.import_machine="import machine",e.valueToCode(this,"PIN",e.ORDER_ATOMIC)+".atten("+this.getFieldValue("atten")+")\n"},tU=function(t,e){e.definitions_.import_machine="import machine";var i=this.getFieldValue("PIN_OBJ")||"tc#",n=e.valueToCode(this,"PIN",e.ORDER_ATOMIC);return("tc#"==i?"tc"+n:e.variableDB_.getName(i,Ot.Variables.NAME_TYPE))+" = machine.TouchPad(machine.Pin("+n+"))\n"},eU=function(t,e){var i=this.getFieldValue("key");return e.definitions_.import_mini_g2="import mini_g2",["mini_g2.ext_ahtx0."+i+"()",e.ORDER_ATOMIC]},iU=function(t,e){var i=this.getFieldValue("key");return e.definitions_.import_mini_g2="import mini_g2",["mini_g2.ext_hp203x."+i,e.ORDER_ATOMIC]},nU=function(t,e){e.definitions_.import_mini_g2="import mini_g2";return["mini_g2.varistor()",e.ORDER_ATOMIC]},sU=function(t,e){if(e.definitions_.import_mini_g2="import mini_g2","mixgo_mini"==Rt.Boards.getSelectedBoardKey().split(":")[2]){e.definitions_.import_mini_g2_ext_rfid="from mini_g2 import ext_rfid";var i='ext_rfid.read_card(0, x="id")'}else{e.definitions_.import_mini_g2="import mini_g2";i='mini_g2.ext_rc522.read_card(0, x="id")'}return[i,e.ORDER_ATOMIC]},_U=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2],n=e.valueToCode(this,"SECTOR",e.ORDER_ATOMIC);if("mixgo_mini"==i){e.definitions_.import_mini_g2_ext_rfid="from mini_g2 import ext_rfid";var s="ext_rfid.read_card("+n+")"}else{e.definitions_.import_mini_g2="import mini_g2";s="mini_g2.ext_rc522.read_card("+n+")"}return[s,e.ORDER_ATOMIC]},oU=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2],n=e.valueToCode(this,"SECTOR",e.ORDER_ATOMIC),s=e.valueToCode(this,"CONTENT",e.ORDER_ATOMIC);if("mixgo_mini"==i){e.definitions_.import_mini_g2_ext_rfid="from mini_g2 import ext_rfid";var _="ext_rfid.write_card("+s+","+n+")\n"}else{e.definitions_.import_mini_g2="import mini_g2";_="mini_g2.ext_rc522.write_card("+s+","+n+")\n"}return _},pU=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2],n=e.valueToCode(this,"SECTOR",e.ORDER_ATOMIC),s=e.valueToCode(this,"CONTENT",e.ORDER_ATOMIC);if("mixgo_mini"==i){e.definitions_.import_mini_g2_ext_rfid="from mini_g2 import ext_rfid";var _="ext_rfid.write_card("+s+","+n+")"}else{e.definitions_.import_mini_g2="import mini_g2";_="mini_g2.ext_rc522.write_card("+s+","+n+")"}return[_,e.ORDER_ATOMIC]},aU=function(t,e){var i=Rt.Boards.getSelectedBoardKey().split(":")[2],n=this.getFieldValue("key");if("mixgo_mini"==i){e.definitions_.import_mini_g2_ext_rfid="from mini_g2 import ext_rfid";var s="ext_rfid.scan_card()=="+n}else{e.definitions_.import_mini_g2="import mini_g2";s="mini_g2.ext_rc522.scan_card()=="+n}return[s,e.ORDER_ATOMIC]},uU=function(t,e){return e.definitions_.import_me_go_car="from me_go import car",["car."+this.getFieldValue("op"),e.ORDER_ATOMIC]},rU=function(t,e){var i=e.valueToCode(this,"led",e.ORDER_ATOMIC);return e.definitions_.import_me_go_car="from me_go import car","car.setonoff("+i+","+e.valueToCode(this,"bright",e.ORDER_ATOMIC)+")\n"},lU=function(t,e){var i=e.valueToCode(this,"led",e.ORDER_ATOMIC);return e.definitions_.import_me_go_car="from me_go import car",["car.getrightness("+i+")",e.ORDER_ATOMIC]},dU=function(t,e){var i=e.valueToCode(this,"led",e.ORDER_ATOMIC);return e.definitions_.import_me_go_car="from me_go import car",["car.getonoff("+i+")",e.ORDER_ATOMIC]},IU=function(t,e){var i=e.valueToCode(this,"led",e.ORDER_ATOMIC);return e.definitions_.import_me_go_car="from me_go import car","car.setbrightness("+i+","+e.valueToCode(this,"bright",e.ORDER_ATOMIC)+")\n"},TU=function(t,e){var i=this.getFieldValue("VAR");return e.definitions_.import_me_go_car="from me_go import car",'car.move("'+i+'",'+e.valueToCode(this,"speed",e.ORDER_ASSIGNMENT)+")\n"},MU=function(t,e){var i=this.getFieldValue("VAR");return e.definitions_.import_me_go_car="from me_go import car",'car.move("'+i+'")\n'},hU=function(t,e){var i=this.getFieldValue("wheel");e.definitions_.import_me_go_car="from me_go import car";var n=this.getFieldValue("direction");return 0==i&&("CW"==n?n="CCW":"CCW"==n&&(n="CW")),"car.motor(car.MOTO["+i+'],"'+n+'",'+e.valueToCode(this,"speed",e.ORDER_ATOMIC)+")\n"},mU=function(t,e){var i=this.getFieldValue("mode");return e.definitions_["import_me_go_hall_"+i]="from me_go import hall_"+i,"hall_"+i+".irq_cb("+e.valueToCode(this,"DO",e.ORDER_ATOMIC)+")\n"},EU=function(t,e){var i=this.getFieldValue("mode"),n=this.getFieldValue("args");e.definitions_["import_me_go_hall_"+i]="from me_go import hall_"+i;var s=e.valueToCode(this,"num",e.ORDER_ATOMIC);return"all"==n?"hall_"+i+".initial(turns="+s+",distance="+s+")\n":"hall_"+i+".initial("+n+"="+s+")\n"},OU=function(t,e){var i=this.getFieldValue("mode"),n=this.getFieldValue("args");return e.definitions_["import_me_go_hall_"+i]="from me_go import hall_"+i,["hall_"+i+"."+n,e.ORDER_ATOMIC]},RU=function(t,e){var i=this.getFieldValue("key");return e.definitions_.import_me_go_hall="from me_go import car",["car.patrol()"+i,e.ORDER_ATOMIC]},cU=function(t,e){var i=this.getFieldValue("key");return e.definitions_.import_me_go_hall="from me_go import car",["car.obstacle()"+i,e.ORDER_ATOMIC]},gU=function(t,e){var i=this.getFieldValue("key");return e.definitions_.import_me_go_hall="from me_go import car","car.ir_mode(car."+i+")\n"},CU=function(t,e){return e.definitions_.import_mixgo_me_onboard_mxc6655xa="from mixgo_me import onboard_mxc6655xa",["onboard_mxc6655xa.eulerangles(upright=True)"+this.getFieldValue("angle"),e.ORDER_ATOMIC]},SU=function(t,e){var i=this.getFieldValue("key");return e.definitions_.import_me_go_hall="from me_go import car",["car.light()"+i,e.ORDER_ATOMIC]},LU=function(t,e){return[this.getFieldValue("PIN"),e.ORDER_ATOMIC]},AU=LU,NU=LU,DU=LU,fU=LU,FU=LU,PU=LU,YU=LU,vU=LU,XU=LU,yU=LU,xU=LU,bU=LU,VU=LU,BU=LU,GU=LU,UU=LU,wU=LU,kU=LU,HU=LU,WU=LU,KU=LU,JU=LU,qU=LU,QU=LU,zU=LU,jU=LU,ZU=LU,$U=LU,tw=LU,ew=LU,iw=LU,nw=LU,sw=LU,_w=LU,ow=LU,pw=LU,aw=LU,uw=LU,rw=LU,lw=LU,dw=LU,Iw=LU,Tw=LU,Mw=LU;Object.assign(Ot.Variables,gt),Object.assign(Ot.Procedures,ss),Ot.Python=fu,Ot.generator=fu,Rt.Profile.default={},Object.assign(Rt.Profile,uB),Object.assign(Rt.Profile.default,uB["MixGo CC"]),Object.assign(Ot.Blocks,e,i,n,s,_,o,p,a,u,r,l,d,I,V,H,k,X,B,W,f,w,U,G,F,D,N,x,y,b,P,Y,v,lt,dt,It,Tt),Object.assign(Ot.Python.forBlock,T,M,h,m,E,O,R,c,g,C,S,L,A,nt,ut,at,$,st,rt,q,pt,ot,_t,Q,J,K,et,tt,it,z,j,Z,Mt,ht,mt,Et)})();
\ No newline at end of file
+
+/**
+ * @fileoverview Dictionary blocks for Blockly.
+ * @author acbart@vt.edu (Austin Cory Bart)
+ */
+
+
+const DICTS_HUE = 345;
+
+const dicts_create_with = {
+
+ /**
+ * Block for creating a list with any number of elements of any type.
+ * @this Blockly.Block
+ */
+
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('mydict'), 'VAR')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldLabel(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_CREATE_WITH_INPUT_WITH), 'TIP')
+ this.itemCount_ = 3;
+ this.updateShape_();
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['dicts_create_with_item'], this));
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_CREATE_WITH_TOOLTIP);
+ },
+
+ /**
+ * Create XML to represent list inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+
+ /**
+ * Parse XML to restore the list inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('dicts_create_with_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('dicts_create_with_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @private
+ * @this Blockly.Block
+ */
+
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ }
+
+ var keyNames = [];
+ for (var i = 0; this.getInput('ADD' + i); i++) {
+ //this.getInput('VALUE' + i).removeField("KEY"+i);
+ keyNames.push(this.getFieldValue("KEY" + i))
+ this.removeInput('ADD' + i);
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.getField('TIP').setValue(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_CREATE_EMPTY_TITLE);
+ } else {
+ this.getField('TIP').setValue(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_CREATE_WITH_INPUT_WITH);
+ for (var i = 0; i < this.itemCount_; i++) {
+ this.appendValueInput('ADD' + i)
+ .setCheck(null)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(
+ new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput(
+ keyNames.length > i
+ ? keyNames[i]
+ : (i == 0 ? '"key"' : '"key' + (i + 1) + '"')),
+ 'KEY' + i)
+ .appendField(":")
+ }
+ }
+ }, getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+};
+
+
+
+const dicts_create_with_container = {
+
+ /**
+ * Mutator block for list container.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_DICT);
+ this.appendStatementInput('STACK');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_CREATE_WITH_CONTAINER_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const dicts_create_with_item = {
+ /**
+ * Mutator bolck for adding items.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_CREATE_WITH_ITEM_TITLE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_CREATE_WITH_ITEM_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const dicts_keys = {
+ /**
+ * Block for list length.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT')
+ .setCheck('Dict')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICT_KEYS);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_KEYS_TOOLTIP);
+ this.setOutput(true, 'List');
+ }
+};
+
+const dicts_get = {
+ init: function () {
+ this.setColour(DICTS_HUE);
+ // this.appendDummyInput("")
+
+ // .appendField(Blockly.Msg.DICTS_GET_FROM_DICTS)
+
+ this.appendValueInput('DICT')
+ .setCheck('Dict')
+ this.appendValueInput('KEY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_GET_IN)
+ this.appendDummyInput("")
+ // .appendField(new Blockly.FieldTextInput('"key"'), 'KEY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_ADD_VALUE);
+
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_GET_TOOLTIP);
+ }
+};
+
+const dicts_get_default = {
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT')
+ .setCheck('Dict')
+ this.appendValueInput('KEY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_GET_IN)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_ADD_VALUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_DEFAULT_VALUE);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_GET_DEFAULT_TOOLTIP);
+ }
+};
+
+const dicts_add_or_change = {
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT')
+ this.appendValueInput('KEY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_ADD)
+ // .appendField(new Blockly.FieldTextInput('"key"'), 'KEY')
+ this.appendDummyInput()
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_ADD_VALUE);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_ADD_OR_CHANGE_TOOLTIP);
+ }
+};
+
+
+const dicts_delete = {
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT')
+ this.appendValueInput('KEY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_DELETE_IN)
+ this.appendDummyInput("")
+ // .appendField(new Blockly.FieldTextInput('"key"'), 'KEY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_DELETE_VALUE);
+
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_DELETE_TOOLTIP);
+ }
+};
+
+
+const dicts_update = {
+ /**
+ * Block for list length.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT2')
+ .setCheck('Dict')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MAKE_DICT)
+ this.appendValueInput('DICT')
+ .setCheck('Dict')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICT_UPDATE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MID);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_UPDATE_TOOLTIP);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const dicts_clear = {
+ /**
+ * Block for list length.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT')
+ .setCheck('Dict')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICT_CLEAR);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_CLEAR_TOOLTIP);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const dicts_items = {
+ /**
+ * Block for list length.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT')
+ .setCheck('Dict')
+ this.appendDummyInput("")
+
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICT_ITEMS);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_ITEMS_TOOLTIP);
+ this.setOutput(true, 'List');
+ }
+};
+
+const dicts_values = {
+ /**
+ * Block for list length.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT')
+ .setCheck('Dict')
+ this.appendDummyInput("")
+
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICT_VALUES);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_VALUES_TOOLTIP);
+ this.setOutput(true, 'List');
+ }
+};
+
+const dicts_length = {
+ /**
+ * Block for list length.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT')
+ .setCheck('Dict')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LENGTH)
+
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICT_LENGTH_TOOLTIP);
+ this.setOutput(true, Number);
+ }
+};
+
+const dicts_deldict = {
+ /**
+ * Block for list length.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT')
+ .setCheck('Dict')
+ this.appendDummyInput("")
+
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICT_DELDICT);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_DEL_TOOLTIP);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const dicts_add_change_del = {
+ /**
+ * Block for getting sublist.
+ * @this Blockly.Block
+ */
+ init: function () {
+
+ this['MODE'] = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_ADD_OR_CHANGE, 'INSERT'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_DELETE_VAR, 'DELETE']
+ ];
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_HELPURL);
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT')
+ .setCheck('Dict')
+ this.appendDummyInput('AT2')
+ this.appendValueInput('KEY')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ // .appendField(new Blockly.FieldTextInput('"key"'), 'KEY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_ADD_VALUE);
+ this.updateAt_(true);
+ this.setInputsInline(true);
+ this.setOutput(false);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ var b = this;
+ this.setTooltip(function () {
+ var e = b.getFieldValue("WHERE"),
+ d = "";
+ switch (e) {
+ case "INSERT":
+ d = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_ADD_TOOLTIP;
+ break;
+ case "DELETE":
+ d = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_DELETE_TOOLTIP;
+ break;
+ }
+ //if ("FROM_START" == e || "FROM_END" == e) d += " " + Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP.replace("%1", ONE_BASED_INDEXING ? "#1": "#0");
+ return d
+ })
+
+ },
+ /**
+ * Create XML to represent whether there are 'AT' inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ var isAt = this.getInput('AT2').type == blockly_core__WEBPACK_IMPORTED_MODULE_0__.INPUT_VALUE;
+ container.setAttribute('at2', isAt);
+ return container;
+ },
+ /**
+ * Parse XML to restore the 'AT' inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ var isAt = (xmlElement.getAttribute('at2') == 'true');
+ this.updateAt_(isAt);
+ },
+ /**
+ * Create or delete an input for a numeric index.
+ * This block has two such inputs, independant of each other.
+ * @param {number} n Specify first or second input (1 or 2).
+ * @param {boolean} isAt True if the input should exist.
+ * @private
+ * @this Blockly.Block
+ */
+ updateAt_: function (isAt) {
+ // Create or delete an input for the numeric index.
+ // Destroy old 'AT' and 'ORDINAL' inputs.
+ this.removeInput('AT2');
+ this.removeInput('ORDINAL', true);
+ // Create either a value 'AT' input or a dummy input.
+ if (isAt) {
+ this.appendValueInput('AT2').setCheck(Number);
+ } else {
+ this.appendDummyInput('AT2');
+ }
+ var menu = new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(this['MODE'],
+ function (value) {
+ var newAt = (value == 'INSERT');
+ // The 'isAt' variable is available due to this function being a
+ // closure.
+ if (newAt != isAt) {
+ var block = this.sourceBlock_;
+ block.updateAt_(newAt);
+ // This menu has been destroyed and replaced.
+ // Update the replacement.
+ block.setFieldValue(value, 'WHERE');
+ return null;
+ }
+ return undefined;
+ });
+
+ this.getInput('AT2')
+ .appendField(menu, 'WHERE');
+
+ // this.moveInputBefore('AT2','LIST');
+ }
+};
+
+const dicts_pop = {
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT')
+ .setCheck('Dict')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_DICT_POP)
+ this.appendValueInput('KEY')
+ this.appendDummyInput("")
+ // .appendField(new Blockly.FieldTextInput('"key"'), 'KEY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_ADD_VALUE);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICT_POP_TOOLTIP);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const dicts_setdefault = {
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT')
+ .setCheck('Dict');
+ this.appendValueInput('KEY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_SET_DEFAULT)
+ this.appendDummyInput("")
+ // .appendField(new Blockly.FieldTextInput('"key"'), 'KEY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_DEFAULT_VALUE);
+ this.appendValueInput('VAR')
+
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_SETDEFAULT_TOOLTIP);
+ }
+};
+
+const dicts_create_with_noreturn = {
+ /**
+ * Block for creating a list with any number of elements of any type.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendDummyInput("")
+ // .appendField(new Blockly.FieldTextInput('mydict'), 'VAR')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldLabel(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_DICT), 'TIP')
+ .appendField(' ')
+ this.itemCount_ = 3;
+ this.updateShape_();
+ this.setOutput(true, "Dict")
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['dicts_create_with_item'], this));
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_CREATE_WITH_TOOLTIP);
+ },
+
+ /**
+ * Create XML to represent list inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+
+ /**
+ * Parse XML to restore the list inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('dicts_create_with_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('dicts_create_with_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @private
+ * @this Blockly.Block
+ */
+
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ }
+
+ var keyNames = [];
+ for (var i = 0; this.getInput('ADD' + i); i++) {
+ //this.getInput('VALUE' + i).removeField("KEY"+i);
+ keyNames.push(this.getFieldValue("KEY" + i))
+ this.removeInput('ADD' + i);
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.getField('TIP').setValue(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_NULL + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_DICT);
+ } else {
+ this.getField('TIP').setValue(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_DICT);
+ for (var i = 0; i < this.itemCount_; i++) {
+ this.appendValueInput('ADD' + i)
+ .setCheck(null)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(
+ new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput(
+ keyNames.length > i
+ ? keyNames[i]
+ : (i == 0 ? '"key"' : '"key' + (i + 1) + '"')),
+ 'KEY' + i)
+ .appendField(":")
+ }
+
+ }
+ }, getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+};
+
+const dicts_todict = {
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TODICT);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TOOLTIP_TODICT);
+ }
+};
+
+const dicts_to_json = {
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT')
+ .setCheck('Dict');
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TO_JSON);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TO_JSON_TOOLTIP);
+ this.setOutput(true);
+ }
+};
+
+const json_to_dicts = {
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('VAR');
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CONVERT_TO_JSON);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CONVERT_TO_JSON_TOOLTIP);
+ this.setOutput(true);
+ }
+};
+
+const dicts_to_to ={
+ init:function(){
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT')
+ .setCheck('Dict');
+ this.appendValueInput('VAR1')
+ .appendField('key1');
+ this.appendValueInput('VAR2')
+ .appendField('index');
+ this.appendValueInput('VAR3')
+ .appendField('key2');
+ this.appendValueInput('VAR4')
+ .appendField('key3');
+ this.setInputsInline(true)
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_CONVERT_TO_JSON_TOOLTIP);
+ this.setOutput(true);
+ }
+}
+
+const dicts_to_json2 = {
+ init: function () {
+ this.setColour(DICTS_HUE);
+ this.appendValueInput('DICT');
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TO_JSON);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TO_JSON_TOOLTIP);
+ this.setOutput(true);
+ }
+};
+
+/***/ }),
+
+/***/ "../python/blocks/html.js":
+/*!********************************!*\
+ !*** ../python/blocks/html.js ***!
+ \********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ html_content: () => (/* binding */ html_content),
+/* harmony export */ html_content_more: () => (/* binding */ html_content_more),
+/* harmony export */ html_document: () => (/* binding */ html_document),
+/* harmony export */ html_form: () => (/* binding */ html_form),
+/* harmony export */ html_head_body: () => (/* binding */ html_head_body),
+/* harmony export */ html_style: () => (/* binding */ html_style),
+/* harmony export */ html_style_color: () => (/* binding */ html_style_color),
+/* harmony export */ html_style_content: () => (/* binding */ html_style_content),
+/* harmony export */ html_text: () => (/* binding */ html_text),
+/* harmony export */ html_title: () => (/* binding */ html_title)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const HTML_HUE = '#1ec1e4';
+
+const html_document = {
+ init: function () {
+ this.setColour(HTML_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_DOCUMENT);
+ this.appendStatementInput('HEAD')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_HEAD);
+ this.appendStatementInput('BODY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_BODY);
+ this.setOutput(true);
+ }
+};
+
+const html_title = {
+ init: function () {
+ this.setColour(HTML_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_LEVEL)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"]]), 'LEVEL');
+ this.appendStatementInput('DO')
+ .appendField('');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const html_head_body = {
+ init: function () {
+ this.setColour(HTML_HUE);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_HEAD, "head"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_BODY, "body"]
+ ]), 'LEVEL');
+ this.appendStatementInput('DO')
+ .appendField('');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const html_content = {
+ init: function () {
+ this.setColour(HTML_HUE);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_P, "p"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_SPAN, "span"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_FORM, "form"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_TABLE, "table"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_LINE, "tr"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_CELL, "td"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_OL, "ol"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_UL, "ul"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_LI, "li"]
+ ]), 'LEVEL')
+ // this.appendValueInput('style')
+ // .appendField(Blockly.Msg.MIXLY_AIP_ATTR)
+ // .setAlign(Blockly.inputs.Align.RIGHT);
+ this.appendStatementInput('DO')
+ .appendField('');
+ this.setInputsInline(false);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const html_content_more = {
+ init: function () {
+ this.setColour(HTML_HUE);
+ this.appendDummyInput()
+ .appendField('<')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('tag'), "LEVEL")
+ .appendField('>')
+ this.appendValueInput('style')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIP_ATTR)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.appendStatementInput('DO')
+ .appendField('');
+ this.setInputsInline(false);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const html_style = {
+ init: function () {
+ this.setColour(HTML_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_STYLE)
+ this.appendStatementInput('STYLE');
+ this.setOutput(true);
+ }
+};
+
+const html_form = {
+ init: function () {
+ this.setColour(HTML_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_FORM_CONTENT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_TEXT, "text"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_EMAIL, "email"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_NUMBER, "number"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_PASSWORD, "password"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_CHECKBOX, "checkbox"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_RADIOBUTTON, "radiobutton"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_BUTTON, "button"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_COLOUR, "colour"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_DATE, "date"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_LOCALTIME, "local time"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_FILE, "file"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_HIDDEN, "hidden"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_IMAGE, "image"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_MONTH, "month"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_RANGE, "range"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_RESET, "reset"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_SEARCH, "search"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_SUBMIT, "submit"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_TELEPHONENUMBER, "telephone number"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_TIME, "time"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_URL, "url"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_WEEK, "week"]
+ ]), 'LEVEL')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_NAME)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('car'), "NAME")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_VALUE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('go'), "VALUE")
+ this.appendValueInput('style')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AIP_ATTR)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const html_style_content = {
+ init: function () {
+ this.setColour(HTML_HUE);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('property'), "KEY")
+ .appendField(':')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('value'), "VALUE")
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const html_style_color = {
+ init: function () {
+ this.setColour(HTML_HUE);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('property'), "KEY")
+ .appendField(':')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldColour("#ff0000"), "RGB_LED_COLOR");
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const html_text = {
+ init: function () {
+ this.setColour(HTML_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_TEXT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('text'), "TEXT");
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+/***/ }),
+
+/***/ "../python/blocks/lists.js":
+/*!*********************************!*\
+ !*** ../python/blocks/lists.js ***!
+ \*********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ ENUMERATE: () => (/* binding */ ENUMERATE),
+/* harmony export */ content_in_lists: () => (/* binding */ content_in_lists),
+/* harmony export */ enumerate: () => (/* binding */ enumerate),
+/* harmony export */ list_many_input: () => (/* binding */ list_many_input),
+/* harmony export */ list_tolist: () => (/* binding */ list_tolist),
+/* harmony export */ list_tolist2: () => (/* binding */ list_tolist2),
+/* harmony export */ list_trig: () => (/* binding */ list_trig),
+/* harmony export */ lists_2d_get_col_row_data: () => (/* binding */ lists_2d_get_col_row_data),
+/* harmony export */ lists_2d_get_data_with_col_row: () => (/* binding */ lists_2d_get_data_with_col_row),
+/* harmony export */ lists_append_extend: () => (/* binding */ lists_append_extend),
+/* harmony export */ lists_change_to: () => (/* binding */ lists_change_to),
+/* harmony export */ lists_change_to_general: () => (/* binding */ lists_change_to_general),
+/* harmony export */ lists_clear: () => (/* binding */ lists_clear),
+/* harmony export */ lists_create_with: () => (/* binding */ lists_create_with),
+/* harmony export */ lists_create_with2: () => (/* binding */ lists_create_with2),
+/* harmony export */ lists_create_with_container: () => (/* binding */ lists_create_with_container),
+/* harmony export */ lists_create_with_item: () => (/* binding */ lists_create_with_item),
+/* harmony export */ lists_create_with_noreturn: () => (/* binding */ lists_create_with_noreturn),
+/* harmony export */ lists_create_with_text: () => (/* binding */ lists_create_with_text),
+/* harmony export */ lists_create_with_text2: () => (/* binding */ lists_create_with_text2),
+/* harmony export */ lists_del_general: () => (/* binding */ lists_del_general),
+/* harmony export */ lists_find: () => (/* binding */ lists_find),
+/* harmony export */ lists_getIndex3: () => (/* binding */ lists_getIndex3),
+/* harmony export */ lists_getSublist3: () => (/* binding */ lists_getSublist3),
+/* harmony export */ lists_get_index: () => (/* binding */ lists_get_index),
+/* harmony export */ lists_get_random_item: () => (/* binding */ lists_get_random_item),
+/* harmony export */ lists_get_random_sublist: () => (/* binding */ lists_get_random_sublist),
+/* harmony export */ lists_get_sublist: () => (/* binding */ lists_get_sublist),
+/* harmony export */ lists_insert_value: () => (/* binding */ lists_insert_value),
+/* harmony export */ lists_insert_value2: () => (/* binding */ lists_insert_value2),
+/* harmony export */ lists_pop: () => (/* binding */ lists_pop),
+/* harmony export */ lists_remove_at: () => (/* binding */ lists_remove_at),
+/* harmony export */ lists_remove_at2: () => (/* binding */ lists_remove_at2),
+/* harmony export */ lists_reverse: () => (/* binding */ lists_reverse),
+/* harmony export */ lists_setIndex3: () => (/* binding */ lists_setIndex3),
+/* harmony export */ lists_set_index: () => (/* binding */ lists_set_index),
+/* harmony export */ lists_sort: () => (/* binding */ lists_sort)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const LISTS_HUE = 260; //'#70b234'//260;
+
+const lists_get_index = {
+ init: function () {
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_HELPURL);
+ this.setColour(LISTS_HUE);
+ this.appendValueInput("LIST")
+ this.appendValueInput("AT")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + " " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_START)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT_TAIL);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM);
+ }
+}
+
+
+const lists_get_sublist = {
+ /**
+ * Block for getting sublist.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_HELPURL);
+ this.setColour(LISTS_HUE);
+ this.appendValueInput('LIST')
+ this.appendDummyInput('')
+ this.appendValueInput('AT1')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + " " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_START);
+ this.appendValueInput('AT2')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT_TAIL + " " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_END_FROM_START);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT_TAIL);
+ this.setInputsInline(true);
+ this.setOutput(true, 'List');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PYTHON_LISTS_GET_SUBLIST_TOOLTIP);
+ }
+}
+
+const lists_2d_get_data_with_col_row = {
+ init: function () {
+ this.appendValueInput("LIST")
+ .setCheck(null);
+ this.appendValueInput("row")
+ .setCheck(null)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + " " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DATAFRAME_RAW);
+ this.appendValueInput("col")
+ .setCheck(null)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DATAFRAME_COLUMN);
+ this.setInputsInline(true);
+ this.setOutput(true, null);
+ this.setColour(LISTS_HUE);
+ this.setTooltip("");
+ this.setHelpUrl("");
+ }
+};
+
+const lists_2d_get_col_row_data = {
+ init: function () {
+ this.appendValueInput("LIST")
+ .setCheck(null);
+ this.appendValueInput("row_start")
+ .setCheck(null)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GET + " " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DATAFRAME_RAW + " [");
+ this.appendValueInput("row_end")
+ .setCheck(null)
+ .appendField(",");
+ this.appendValueInput("col_start")
+ .setCheck(null)
+ .appendField(") " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DATAFRAME_COLUMN + " [");
+ this.appendValueInput("col_end")
+ .setCheck(null)
+ .appendField(",");
+ this.appendDummyInput()
+ .appendField(") " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.DICTS_ADD_VALUE);
+ this.setInputsInline(true);
+ this.setOutput(true, 'List');
+ this.setColour(LISTS_HUE);
+ this.setTooltip("");
+ this.setHelpUrl("");
+ }
+};
+
+const lists_create_with = {
+ /**
+ * Block for creating a list with any number of elements of any type.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendDummyInput("")
+ //don't need to specify the data type in Python
+ // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'Array'], [Blockly.Msg.LANG_MATH_STRING, 'Array'], [Blockly.Msg.LANG_MATH_BOOLEAN, 'Array']]), 'TYPE')
+ // .appendField(' ')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('mylist'), 'VAR')
+ .appendField('[')
+ //.appendField(new Blockly.FieldTextInput('3',Blockly.FieldTextInput.math_number_validator), 'SIZE')
+ .appendField(']');
+ this.itemCount_ = 3;
+ this.updateShape_();
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['lists_create_with_item'], this));
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_CREATE_WITH_PYTHON_TOOLTIP);
+ },
+ /**
+ * Create XML to represent list inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+ /**
+ * Parse XML to restore the list inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('lists_create_with_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('lists_create_with_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @private
+ * @this Blockly.Block
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ var i = 0;
+ while (this.getInput('ADD' + i)) {
+ this.removeInput('ADD' + i);
+ i++;
+ }
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.appendDummyInput('EMPTY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_CREATE_PYTHON_EMPTY_TITLE);
+ } else {
+ for (var i = 0; i < this.itemCount_; i++) {
+ var input = this.appendValueInput('ADD' + i);
+ if (i == 0) {
+ input.appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_LISTS_CREATE_WITH_INPUT_WITH);
+ }
+ }
+ }
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+};
+
+
+const lists_create_with_text = {
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendDummyInput("")
+ //don't need to specify the data type in Python
+ // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'Array']]), 'TYPE')
+ // .appendField(' ')
+ // .appendField(Blockly.Msg.blockpy_MIXLY_SPLITBYDOU)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('mylist'), 'VAR')
+ //.appendField(new Blockly.FieldTextInput('3',Blockly.FieldTextInput.math_number_validator), 'SIZE')
+ // .appendField(Blockly.Msg.MIXLY_MAKELISTFROM)
+ // .appendField(this.newQuote_(true))
+ .appendField(' = [')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('0,0,0'), 'TEXT')
+ .appendField(']');
+ // .appendField(this.newQuote_(false))
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_LISTS_CREATE_WITH_TEXT2);
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+}
+
+
+const lists_create_with_container = {
+ /**
+ * Mutator block for list container.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_LIST);
+ this.appendStatementInput('STACK');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_CREATE_WITH_CONTAINER_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const lists_create_with_item = {
+ /**
+ * Mutator bolck for adding items.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_CREATE_WITH_ITEM_TITLE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_CREATE_WITH_ITEM_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+
+const lists_set_index = {
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendValueInput('LIST');
+ this.appendValueInput('AT')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_LIST_ASSIGN_AT);
+ this.appendValueInput('TO')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_LIST_VALUE);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_LISTS_SET_INDEX_TOOLTIP);
+ }
+};
+
+const lists_append_extend = {
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this['TYPE'] = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_blockpy_set_add, 'append'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_LIST_EXTEND, 'extend']
+ ];
+
+ this.appendValueInput('LIST')
+ .setCheck('List')
+ this.appendValueInput('DATA')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(this['TYPE']), 'OP')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_LIST_A_ITEM)
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_LIST_TO_END);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'append': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_LIST_APPEND,
+ 'extend': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_EXTEND_TOOLTIP
+
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+
+};
+
+const lists_get_random_item = {
+ /**
+ * Block for get a random item from list.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendValueInput("LIST");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + " " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_RANDOM)
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM);
+ this.setOutput(true);
+ }
+};
+
+const lists_get_random_sublist = {
+ /**
+ * Block for get a random item from list.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendValueInput("LIST");
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_RANDOM)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_LISTS_GET_INDEX2 + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_RANDOM_SUBLIST)
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_RANDOM_SUBLIST_TOOLTIP);
+ this.setOutput(true, 'List');
+ }
+};
+
+const lists_insert_value = {
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendValueInput('LIST');
+ this.appendValueInput('AT')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_LIST_INSERT_AT);
+ this.appendValueInput('VALUE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_LIST_VALUE);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_LISTS_SET_INDEX_TOOLTIP);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT);
+ }
+};
+
+const lists_reverse = {
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('List') //this.appendDummyInput("")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_LIST_REVERSE)
+ //.appendField(new Blockly.FieldTextInput('mylist'), 'VAR');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_LISTS_CLEAR_TOOLTIP);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+const lists_clear = {
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendValueInput('VAR')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_CLEAR)
+ //.appendField(new Blockly.FieldTextInput('mylist'), 'VAR');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_LISTS_REVERSE_TOOLTIP);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+
+const lists_remove_at = {
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this['TYPE'] = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.SERIES_INDEX, 'del'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_I2C_VALUE, 'remove']
+ ];
+ this.appendValueInput('LIST')
+ .setCheck('List')
+ this.appendValueInput('DATA')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_LISTS_REMOVE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(this['TYPE']), 'OP')
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'del': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_TOOLTIP_DELETE,
+ 'remove': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_LIST_REMOVE
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+const lists_pop = {
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendValueInput('LIST');
+ this.appendValueInput('VALUE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_LIST_POP);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT_TAIL);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM);
+ }
+};
+
+const lists_find = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_INDEX, 'INDEX'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_COUNT, 'COUNT']
+ ];
+ this.setColour(LISTS_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('List')
+ this.appendValueInput('data')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_VALUE)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ //.appendField(new Blockly.FieldTextInput('mylist'), 'VAR')
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'INDEX': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_LIST_FIND_INDEX,
+ 'COUNT': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_LIST_FIND_COUNT
+
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+const list_trig = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_LEN, 'LEN'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_SUM, 'SUM'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_MAX, 'MAX'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_MIN, 'MIN'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_AVERAGE, 'AVERAGE'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_MEDIAN, 'MEDIAN'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_MODE, 'MODE'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_STD_DEV, 'STD_DEV'],
+ ];
+ //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);
+ this.setColour(LISTS_HUE);
+ this.setOutput(true, Number);
+ this.appendValueInput('data')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setInputsInline(true);
+ // Assign 'this' to a variable for use in the tooltip closure below.
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'LEN': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_LENGTH_TOOLTIP,
+ 'SUM': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_TOOLTIP_SUM,
+ 'MAX': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_TOOLTIP_MAX,
+ 'MIN': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_TOOLTIP_MIN,
+ 'AVERAGE': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_TOOLTIP_AVERAGE,
+ 'MEDIAN': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_TOOLTIP_MEDIAN,
+ 'MODE': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_TOOLTIP_MODE,
+ 'STD_DEV': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_TOOLTIP_STD_DEV
+
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const lists_sort = {
+ /**
+ * Block for sorting a list.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.jsonInit({
+ "args0": [
+ {
+ "type": "input_value",
+ "name": "LIST",
+ "check": "List"
+ },
+ {
+ "type": "field_dropdown",
+ "name": "TYPE",
+ "options": [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SORT_TYPE_NUMERIC, "NUMERIC"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SORT_TYPE_TEXT, "TEXT"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SORT_TYPE_IGNORECASE, "IGNORE_CASE"]
+ ]
+ },
+ {
+ "type": "field_dropdown",
+ "name": "DIRECTION",
+ "options": [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SORT_ORDER_ASCENDING, "1"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SORT_ORDER_DESCENDING, "-1"]
+ ]
+ },
+ ],
+ "message0": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SORT_TITLE,
+ "inputsInline": true,
+ "output": "List",
+ "colour": LISTS_HUE,
+ "tooltip": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SORT_TOOLTIP,
+ "helpUrl": blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SORT_HELPURL
+ });
+ }
+};
+
+const lists_change_to = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_TUPLE, 'tuple'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD, 'set'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_CREATE_WITH_CONTAINER_TITLE_ADD, 'array']
+ ];
+ this.setColour(LISTS_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("List")
+ // .appendField(Blockly.Msg.blockpy_USE_LIST);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.A_TO_B)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'tuple': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_CONVERT_LIST_TO_TUPLE,
+ 'set': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_CONVERT_LIST_TO_SET,
+ 'array': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_CONVERT_LIST_TO_ARRAY
+ };
+ return TOOLTIPS[mode];
+ });
+
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const list_many_input = {
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendDummyInput("")
+ .appendField('[')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('0,0,0'), "CONTENT")
+ .appendField(']');
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const lists_create_with_noreturn = {
+ /**
+ * Block for creating a list with any number of elements of any type.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.itemCount_ = 3;
+ this.updateShape_();
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setOutput(true, "List")
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['lists_create_with_item'], this));
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_CREATE_WITH_PYTHON_TOOLTIP);
+ },
+ /**
+ * Create XML to represent list inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+ /**
+ * Parse XML to restore the list inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('lists_create_with_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('lists_create_with_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @private
+ * @this Blockly.Block
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ var i = 0;
+ while (this.getInput('ADD' + i)) {
+ this.removeInput('ADD' + i);
+ i++;
+ }
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.appendDummyInput('EMPTY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_CREATE_PYTHON_EMPTY_TITLE);
+ } else {
+ for (var i = 0; i < this.itemCount_; i++) {
+ var input = this.appendValueInput('ADD' + i);
+ if (i == 0) {
+ input.appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_LISTS_CREATE_WITH_INPUT_WITH);
+ }
+ }
+ }
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+}
+
+const lists_change_to_general = {
+ init: function () {
+ var OPERATORS =
+ [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_LIST, 'list'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_TUPLE, 'tuple'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD, 'set']
+ ];
+ this.setColour(LISTS_HUE);
+ this.appendValueInput('VAR');
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.A_TO_B)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const lists_del_general = {
+ /**
+ * Block for list length.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendValueInput('TUP')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.OBJECT_DELETE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const list_tolist = {
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOLIST);
+ this.setOutput(true, 'List');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TOOLTIP_TOLIST);
+ }
+};
+
+const lists_create_with2 = lists_create_with
+const lists_create_with_text2 = lists_create_with_text
+const lists_getIndex3 = lists_get_index
+const lists_getSublist3 = lists_get_sublist
+const lists_setIndex3 = lists_set_index
+const lists_insert_value2 = lists_insert_value
+const lists_remove_at2 = lists_remove_at
+const list_tolist2 = list_tolist;
+
+
+const ENUMERATE ={
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_USE_LIST);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TO_INDEX_SEQUENCE);
+ // this.appendValueInput('VAR_N')
+ // .appendField(Blockly.Msg.MIXLY_INDEX+Blockly.Msg.MIXLY_STARTSWITH);
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOTO_INDEX_SEQUENC_TOOLTIP);
+ }
+};
+
+const enumerate = {
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_USE_LIST);
+ this.appendValueInput('LIST');
+ this.appendValueInput('VALUE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TO_INDEX_SEQUENCE)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_INDEX+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STARTSWITH);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOTO_INDEX_SEQUENC_TOOLTIP);
+ }
+};
+
+const content_in_lists = {
+ init: function () {
+ this.setColour(LISTS_HUE);
+ this.appendValueInput("CON")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_MIXGO_MUSIC_SHOW_IN);
+ this.appendValueInput("LIST")
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MID);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+}
+
+/***/ }),
+
+/***/ "../python/blocks/logic.js":
+/*!*********************************!*\
+ !*** ../python/blocks/logic.js ***!
+ \*********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ logic_boolean: () => (/* binding */ logic_boolean),
+/* harmony export */ logic_compare: () => (/* binding */ logic_compare),
+/* harmony export */ logic_compare_continous: () => (/* binding */ logic_compare_continous),
+/* harmony export */ logic_is: () => (/* binding */ logic_is),
+/* harmony export */ logic_is_in: () => (/* binding */ logic_is_in),
+/* harmony export */ logic_negate: () => (/* binding */ logic_negate),
+/* harmony export */ logic_null: () => (/* binding */ logic_null),
+/* harmony export */ logic_operation: () => (/* binding */ logic_operation),
+/* harmony export */ logic_tobool: () => (/* binding */ logic_tobool),
+/* harmony export */ logic_true_or_false: () => (/* binding */ logic_true_or_false)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const LOGIC_HUE = 210;
+
+const logic_compare = {
+ /**
+ * Block for comparison operator.
+ * @this Blockly.Block
+ */
+ init: function () {
+ var OPERATORS = blockly_core__WEBPACK_IMPORTED_MODULE_0__.RTL ? [
+ ['=', 'EQ'],
+ ['\u2260', 'NEQ'],
+ ['>', 'LT'],
+ ['\u2265', 'LTE'],
+ ['<', 'GT'],
+ ['\u2264', 'GTE']
+ ] : [
+ ['=', 'EQ'],
+ ['\u2260', 'NEQ'],
+ ['<', 'LT'],
+ ['\u2264', 'LTE'],
+ ['>', 'GT'],
+ ['\u2265', 'GTE']
+ ];
+ //this.setHelpUrl(Blockly.Msg.LOGIC_COMPARE_HELPURL);
+ this.setColour(LOGIC_HUE);
+ this.setOutput(true, Boolean);
+ this.appendValueInput('A');
+ this.appendValueInput('B')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setInputsInline(true);
+ // Assign 'this' to a variable for use in the tooltip closure below.
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var op = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'EQ': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_COMPARE_TOOLTIP_EQ,
+ 'NEQ': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_COMPARE_TOOLTIP_NEQ,
+ 'LT': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_COMPARE_TOOLTIP_LT,
+ 'LTE': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_COMPARE_TOOLTIP_LTE,
+ 'GT': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_COMPARE_TOOLTIP_GT,
+ 'GTE': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_COMPARE_TOOLTIP_GTE
+ };
+ return TOOLTIPS[op];
+ });
+ this.prevBlocks_ = [null, null];
+ },
+ /**
+ * Called whenever anything on the workspace changes.
+ * Prevent mismatched types from being compared.
+ * @this Blockly.Block
+ */
+ /*onchange: function(e) {
+ var blockA = this.getInputTargetBlock('A');
+ var blockB = this.getInputTargetBlock('B');
+ // Disconnect blocks that existed prior to this change if they don't match.
+ if (blockA && blockB &&
+ !blockA.outputConnection.checkType_(blockB.outputConnection)) {
+ // Mismatch between two inputs. Disconnect previous and bump it away.
+ // Ensure that any disconnections are grouped with the causing event.
+ Blockly.Events.setGroup(e.group);
+ for (var i = 0; i < this.prevBlocks_.length; i++) {
+ var block = this.prevBlocks_[i];
+ if (block === blockA || block === blockB) {
+ block.unplug();
+ block.bumpNeighbours_();
+ }
+ }
+ Blockly.Events.setGroup(false);
+ }
+ this.prevBlocks_[0] = blockA;
+ this.prevBlocks_[1] = blockB;
+ }*/
+};
+
+const logic_compare_continous = {
+
+ init: function () {
+ var OPERATORS1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.RTL ? [
+ ['>', 'LT'],
+ ['\u2265', 'LTE'],
+ ['<', 'GT'],
+ ['\u2264', 'GTE']
+ ] : [
+ ['<', 'LT'],
+ ['\u2264', 'LTE'],
+ ['>', 'GT'],
+ ['\u2265', 'GTE']
+ ];
+ var OPERATORS2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.RTL ? [
+ ['>', 'LT'],
+ ['\u2265', 'LTE'],
+ ['<', 'GT'],
+ ['\u2264', 'GTE']
+ ] : [
+ ['<', 'LT'],
+ ['\u2264', 'LTE'],
+ ['>', 'GT'],
+ ['\u2265', 'GTE']
+ ];
+ //this.setHelpUrl(Blockly.Msg.LOGIC_COMPARE_HELPURL);
+ this.setColour(LOGIC_HUE);
+ this.setOutput(true, Boolean);
+ this.appendValueInput('A');
+ this.appendValueInput('B')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS1), 'OP1');
+ this.appendValueInput('C')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS2), 'OP2');
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_LOGIC_COMPARE_CONTINOUS_TOOLTIP);
+
+ }
+};
+
+const logic_operation = {
+ /**
+ * Block for logical operations: 'and', 'or'.
+ * @this Blockly.Block
+ */
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_OPERATION_AND, 'AND'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_OPERATION_OR, 'OR'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_OPERATION_NOR, 'NOR'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_OPERATION_XOR, 'XOR']
+ ];
+ //this.setHelpUrl(Blockly.Msg.LOGIC_OPERATION_HELPURL);
+ this.setColour(LOGIC_HUE);
+ this.setOutput(true, Boolean);
+ this.appendValueInput('A')
+ .setCheck([Boolean, Number]);
+ this.appendValueInput('B')
+ .setCheck([Boolean, Number])
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setInputsInline(true);
+ // Assign 'this' to a variable for use in the tooltip closure below.
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var op = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'AND': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_OPERATION_TOOLTIP_AND,
+ 'OR': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_OPERATION_TOOLTIP_OR,
+ 'NOR': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_OPERATION_TOOLTIP_NOR,
+ 'XOR': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_OPERATION_TOOLTIP_XOR
+ };
+ return TOOLTIPS[op];
+ });
+ }
+};
+
+const logic_negate = {
+ /**
+ * Block for negation.
+ * @this Blockly.Block
+ */
+ init: function () {
+ //this.setHelpUrl(Blockly.Msg.LOGIC_NEGATE_HELPURL);
+ this.setColour(LOGIC_HUE);
+ this.setOutput(true, Boolean);
+ this.appendValueInput('BOOL')
+ .setCheck([Number, Boolean])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_NEGATE_TITLE);
+ //this.interpolateMsg(Blockly.Msg.LOGIC_NEGATE_TITLE,
+ // ['BOOL', Boolean, Blockly.inputs.Align.RIGHT],
+ // Blockly.inputs.Align.RIGHT);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_NEGATE_TOOLTIP);
+ }
+};
+
+const logic_boolean = {
+ /**
+ * Block for boolean data type: true and false.
+ * @this Blockly.Block
+ */
+ init: function () {
+ var BOOLEANS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_BOOLEAN_TRUE, 'TRUE'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_BOOLEAN_FALSE, 'FALSE']
+ ];
+ //this.setHelpUrl(Blockly.Msg.LOGIC_BOOLEAN_HELPURL);
+ this.setColour(LOGIC_HUE);
+ this.setOutput(true, Boolean);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(BOOLEANS), 'BOOL');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_BOOLEAN_TOOLTIP);
+ }
+};
+
+const logic_null = {
+ /**
+ * Block for null data type.
+ * @this Blockly.Block
+ */
+ init: function () {
+ //this.setHelpUrl(Blockly.Msg.LOGIC_NULL_HELPURL);
+ this.setColour(LOGIC_HUE);
+ this.setOutput(true);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_NULL);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_NULL_TOOLTIP);
+ }
+};
+
+const logic_true_or_false = {
+ init: function () {
+ this.setColour(LOGIC_HUE);
+ this.appendValueInput('A');
+ this.appendValueInput('B')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_TERNARY_IF_TRUE);
+ this.appendValueInput('C')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_TERNARY_IF_FALSE);
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_LOGIT_TRUEORFALSE);
+ }
+};
+
+const logic_is_in = {
+ init: function () {
+ var BOOLEANS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_APPEND_TO, 'in'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_LOGIC_IS_NOT_IN, 'not in']
+ ];
+ this.setColour(LOGIC_HUE);
+ this.appendValueInput('A');
+ this.appendValueInput('B')
+ .setCheck([String, 'List'])
+ //.appendField(Blockly.Msg.TEXT_APPEND_TO)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(BOOLEANS), 'BOOL');
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_LOGIC_IS_IN);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.IN);
+ }
+};
+
+const logic_is = {
+ init: function () {
+ var BOOLEANS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_LOGIC_IS, 'is'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_LOGIC_IS_NOT, 'is not']
+ ];
+ this.setColour(LOGIC_HUE);
+ this.appendValueInput('A');
+ this.appendValueInput('B')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(BOOLEANS), 'BOOL');
+ //.appendField(Blockly.Msg.MIXLY_PYTHON_LOGIC_IS);
+ this.setOutput(true, Boolean);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_LOGIC_IS_TOOLTIP);
+ }
+};
+
+const logic_tobool = {
+ init: function () {
+ this.setColour(LOGIC_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOBOOL);
+ this.setOutput(true, Boolean);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TOOLTIP_TOBOOL);
+ }
+};
+
+/***/ }),
+
+/***/ "../python/blocks/math.js":
+/*!********************************!*\
+ !*** ../python/blocks/math.js ***!
+ \********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ base_map: () => (/* binding */ base_map),
+/* harmony export */ generate_cartesian_product: () => (/* binding */ generate_cartesian_product),
+/* harmony export */ math_arithmetic: () => (/* binding */ math_arithmetic),
+/* harmony export */ math_bit: () => (/* binding */ math_bit),
+/* harmony export */ math_constant: () => (/* binding */ math_constant),
+/* harmony export */ math_constant_mp: () => (/* binding */ math_constant_mp),
+/* harmony export */ math_constrain: () => (/* binding */ math_constrain),
+/* harmony export */ math_dec: () => (/* binding */ math_dec),
+/* harmony export */ math_indexer_number: () => (/* binding */ math_indexer_number),
+/* harmony export */ math_map: () => (/* binding */ math_map),
+/* harmony export */ math_max_min: () => (/* binding */ math_max_min),
+/* harmony export */ math_number: () => (/* binding */ math_number),
+/* harmony export */ math_number_base_conversion: () => (/* binding */ math_number_base_conversion),
+/* harmony export */ math_random: () => (/* binding */ math_random),
+/* harmony export */ math_random_seed: () => (/* binding */ math_random_seed),
+/* harmony export */ math_round: () => (/* binding */ math_round),
+/* harmony export */ math_selfcalcu: () => (/* binding */ math_selfcalcu),
+/* harmony export */ math_to_int: () => (/* binding */ math_to_int),
+/* harmony export */ math_trig: () => (/* binding */ math_trig),
+/* harmony export */ text_to_number: () => (/* binding */ text_to_number),
+/* harmony export */ text_to_number_skulpt: () => (/* binding */ text_to_number_skulpt),
+/* harmony export */ turn_to_int: () => (/* binding */ turn_to_int)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const MATH_HUE = 230; //'#e49f16';
+
+blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput.math_number_validator = function (text) {
+ //return window.isNaN(text) ? null : String(text);
+ // var pattern = /^-?(0X|0x|0O|0o|0B|0b)?[a-fA-F0-9]{1,}(\.[a-fA-F0-9]+)?$/;
+ // return pattern.test(text) ? String(text) : null;//校验,二 八 十 十六进制匹配
+ return String(text);//不再校验
+};
+
+blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput.math_number_validator_include_blank = function (text) {
+ if (text === "") {
+ return "";
+ }
+ var pattern = /^-?(0X|0x|0O|0o|0B|0b)?[a-fA-F0-9]{1,}(\.[a-fA-F0-9]+)?$/;
+ return pattern.test(text) ? String(text) : null;//校验,二 八 十 十六进制匹配
+};
+
+const math_number = {
+ /**
+ * Block for numeric value.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(MATH_HUE);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('0',
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput.math_number_validator), 'NUM');
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_NUMBER_TOOLTIP);
+ }
+};
+
+const math_constant = {
+ init: function () {
+ this.setColour(MATH_HUE);
+ var constant =
+ [['π', 'pi'], ['e', 'e']];
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_MATH_CONSTANT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(constant), 'CONSTANT')
+
+ this.setOutput(true, Number);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('CONSTANT');
+ var TOOLTIPS = {
+ 'pi': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_MATH_CONSTANT_PI_TOOLTIP,
+ 'e': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_MATH_CONSTANT_E_TOOLTIP
+ };
+ return TOOLTIPS[mode];
+ });
+
+ }
+};
+
+const math_constant_mp = {
+ init: function () {
+ this.setColour(MATH_HUE);
+ var constant =
+ [['π', 'pi'], ['e', 'e']];
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_MATH_CONSTANT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(constant), 'CONSTANT')
+
+ this.setOutput(true, Number);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('CONSTANT');
+ var TOOLTIPS = {
+ 'pi': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_MATH_CONSTANT_PI_MP_TOOLTIP,
+ 'e': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_MATH_CONSTANT_E_MP_TOOLTIP
+ };
+ return TOOLTIPS[mode];
+ });
+
+ }
+};
+
+const math_arithmetic = {
+ /**
+ * Block for basic arithmetic operator.
+ * @this Blockly.Block
+ */
+ init: function () {
+ var OPERATORS = [
+ ['+', 'ADD'],
+ ['-', 'MINUS'],
+ ['×', 'MULTIPLY'],
+ ['÷', 'DIVIDE'],
+ ['%', 'QUYU'],
+ ['//', 'ZHENGCHU'],
+ ['**', 'POWER']
+ ];
+ //this.setHelpUrl(Blockly.Msg.MATH_ARITHMETIC_HELPURL);
+ this.setColour(MATH_HUE);
+ this.setOutput(true);
+ this.appendValueInput('A')
+ this.appendValueInput('B')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setInputsInline(true);
+ // Assign 'this' to a variable for use in the tooltip closure below.
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'ADD': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ARITHMETIC_TOOLTIP_ADD,
+ 'MINUS': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ARITHMETIC_TOOLTIP_MINUS,
+ 'MULTIPLY': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ARITHMETIC_TOOLTIP_MULTIPLY,
+ 'DIVIDE': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,
+ 'QUYU': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_MODULO_TOOLTIP,
+ 'ZHENGCHU': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,
+ 'POWER': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ARITHMETIC_TOOLTIP_POWER
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const math_selfcalcu = {
+ /**
+ * Block for basic arithmetic operator.
+ * @this Blockly.Block
+ */
+ init: function () {
+ var OPERATORS = [
+ ['+=', 'ADD'],
+ ['-=', 'MINUS'],
+ ['×=', 'MULTIPLY'],
+ ['÷=', 'DIVIDE'],
+ ['%=', 'QUYU'],
+ ['//=', 'ZHENGCHU'],
+ ['**=', 'POWER']
+ ];
+
+ this.setColour(MATH_HUE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.appendValueInput('A')
+ this.appendValueInput('B')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'ADD': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ARITHMETIC_TOOLTIP_ADD,
+ 'MINUS': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ARITHMETIC_TOOLTIP_MINUS,
+ 'MULTIPLY': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ARITHMETIC_TOOLTIP_MULTIPLY,
+ 'DIVIDE': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,
+ 'QUYU': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_MODULO_TOOLTIP,
+ 'ZHENGCHU': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,
+ 'POWER': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ARITHMETIC_TOOLTIP_POWER
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const math_bit = {
+ init: function () {
+ var OPERATORS = [
+ ['&', '&'],
+ ['|', '|'],
+ ['>>', '>>'],
+ ['<<', '<<']
+ ];
+ this.setColour(MATH_HUE);
+ this.setOutput(true, Number);
+ this.appendValueInput('A')
+ .setCheck(Number);
+ this.appendValueInput('B')
+ .setCheck(Number)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setInputsInline(true);
+ this.setTooltip("位运算");
+ }
+};
+
+const math_trig = {
+ /**
+ * Block for trigonometry operators.
+ * @this Blockly.Block
+ */
+ init: function () {
+ var OPERATORS = [
+ ['sin', 'SIN'],
+ ['cos', 'COS'],
+ ['tan', 'TAN'],
+ ['asin', 'ASIN'],
+ ['acos', 'ACOS'],
+ ['atan', 'ATAN'],
+ ['-', '-'],
+ ['ln', 'LN'],
+ ['log10', 'LOG10'],
+ ['e^', 'EXP'],
+ ['10^', 'POW10']
+ ];
+ //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);
+ this.setColour(MATH_HUE);
+ this.setOutput(true, Number);
+ this.appendValueInput('NUM')
+ .setCheck(Number)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ // Assign 'this' to a variable for use in the tooltip closure below.
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'SIN': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_TRIG_TOOLTIP_SIN,
+ 'COS': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_TRIG_TOOLTIP_COS,
+ 'TAN': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_TRIG_TOOLTIP_TAN,
+ 'ASIN': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_TRIG_TOOLTIP_ASIN,
+ 'ACOS': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_TRIG_TOOLTIP_ACOS,
+ 'ATAN': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_TRIG_TOOLTIP_ATAN,
+ 'LN': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_SINGLE_TOOLTIP_LN
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const math_dec = {
+ /**
+ * Block for trigonometry operators.
+ * @this Blockly.Block
+ */
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_BIN, 'bin'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_OCT, 'oct'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_HEX, 'hex'],
+ ];
+ //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);
+ this.setColour(MATH_HUE);
+ this.setOutput(true, String);
+ this.appendValueInput('NUM')
+ .setCheck(Number)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ // Assign 'this' to a variable for use in the tooltip closure below.
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'bin': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_DEC_TOOLTIP_BIN,
+ 'oct': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_DEC_TOOLTIP_OCT,
+ 'hex': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_DEC_TOOLTIP_HEX,
+
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+//取整等
+const math_to_int = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_TO_ROUND, 'round'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_TO_CEIL, 'ceil'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_TO_FLOOR, 'floor'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ABS, 'fabs'],
+ // [Blockly.Msg.MATH_SQ, 'pow'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_SQRT, 'sqrt']
+ ];
+ this.setColour(MATH_HUE);
+ this.appendValueInput('A')
+ .setCheck(Number)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setOutput(true, Number);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'sqrt': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_SINGLE_TOOLTIP_ROOT,
+ 'fabs': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_SINGLE_TOOLTIP_ABS,
+ 'sq': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_SINGLE_TOOLTIP_SQ,
+ 'round': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_SINGLE_TOOLTIP_ROUND,
+ 'ceil': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_SINGLE_TOOLTIP_CEIL,
+ 'floor': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_SINGLE_TOOLTIP_FLOOR
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+//最大最小值
+const math_max_min = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MAX, 'max'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIN, 'min'],
+ ];
+
+ this.setColour(MATH_HUE);
+ this.appendValueInput('A')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP')
+ .appendField('(');
+ this.appendValueInput('B')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(',');
+ this.appendDummyInput('')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(')');
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'max': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_MATH_MAX,
+ 'min': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_MATH_MIN
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const math_number_base_conversion = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_TWO, 'two'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_EIGHT, 'eight'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_TEN, 'ten'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_SIXTEEN, 'sixteen']
+ ];
+ this.setColour(MATH_HUE);
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_BA)
+ this.appendValueInput("NUM")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_JinZhi)
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ZHW)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP2')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_JinZhi);
+ this.setFieldValue('ten', 'OP2')
+ // this.setPreviousStatement(true, null);
+ // this.setNextStatement(true, null);
+ this.setOutput(true)
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'two': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_Before_two,
+ 'eight': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_Before_eight,
+ 'ten': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_Before_ten,
+ 'sixteen': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_Before_sixteen,
+ };
+ var mode2 = thisBlock.getFieldValue('OP2');
+ var TOOLTIPS2 = {
+ 'two': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_Behind_two,
+ 'eight': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_Behind_eight,
+ 'ten': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_Behind_ten,
+ 'sixteen': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_Behind_sixteen,
+ };
+ return TOOLTIPS[mode] + TOOLTIPS2[mode2];
+ });
+ }
+};
+
+
+const math_random = {
+ init: function () {
+ var INT_FLOAT = [[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_INT, 'int'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_FLOAT, 'float']];
+ this.setColour(MATH_HUE);
+ this.setOutput(true, Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_RANDOM)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(INT_FLOAT), 'TYPE');
+ this.appendValueInput('FROM')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_CONTROLS_FOR_INPUT_FROM);
+ this.appendValueInput('TO')
+ .setCheck(Number)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_RANDOM_INT_INPUT_TO);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('TYPE');
+ var TOOLTIPS = {
+ 'int': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_INT,
+ 'float': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_FLOAT_RANDOM
+ };
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_RANDOM_INT_TOOLTIP + TOOLTIPS[mode];
+ });
+ }
+};
+
+
+const math_constrain = {
+ /**
+ * Block for constraining a number between two limits.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(MATH_HUE);
+ this.setOutput(true, Number);
+ this.appendValueInput('VALUE')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_CONSTRAIN_INPUT_CONSTRAIN);
+ this.appendValueInput('LOW')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_CONSTRAIN_INPUT_LOW);
+ this.appendValueInput('HIGH')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_CONSTRAIN_INPUT_HIGH);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_CONSTRAIN_TOOLTIP);
+ }
+};
+
+const math_map = {
+ init: function () {
+ this.setColour(MATH_HUE);
+ this.appendValueInput("NUM", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MAP)
+ .setCheck(Number);
+ this.appendValueInput("fromLow", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MAP_FROM)
+ .setCheck(Number);
+ this.appendValueInput("fromHigh", Number)
+ .appendField(",")
+ .setCheck(Number);
+ this.appendValueInput("toLow", Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MAP_TO)
+ .setCheck(Number);
+ this.appendValueInput("toHigh", Number)
+ .appendField(",")
+ .setCheck(Number);
+ this.appendDummyInput("")
+ .appendField("]");
+ this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_MATH_MAP);
+ }
+};
+
+const math_indexer_number = {
+ /**
+ * Block for numeric value.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(MATH_HUE);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('0', blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput.math_number_validator_include_blank), 'NUM');
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_NUMBER_TOOLTIP);
+ }
+};
+
+const math_random_seed = {
+ init: function () {
+ this.setColour(MATH_HUE);
+ this.appendValueInput('NUM')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_RANDOM_SEED);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_MATH_RANDOM_SEED);
+ }
+};
+
+const math_round = {
+
+ init: function () {
+ this.setColour(MATH_HUE);
+ this.setOutput(true, Number);
+ this.appendValueInput('VALUE')
+ .setCheck(Number)
+ this.appendValueInput('VAR')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ROUND)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_KEEP);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_DECIMAL);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ROUND_NEW_TOOLTIP);
+ }
+};
+
+const text_to_number = {
+ init: function () {
+ var TO_INT_FLOAT =
+ [[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TO_INT, 'int'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TO_FLOAT, 'float'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TO_BITES, 'b'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_BYTE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TO_INT, 'bti']];
+ this.setColour(MATH_HUE);
+ this.appendValueInput('VAR')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(TO_INT_FLOAT), 'TOWHAT');
+ this.setOutput(true, Number);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('TOWHAT');
+ var TOOLTIPS = {
+ 'int': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TOOLTIP_TOINT,
+ 'float': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TOOLTIP_TOFLOAT,
+ 'b': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TEXT_TOBYTE
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const text_to_number_skulpt = {
+ init: function () {
+ var TO_INT_FLOAT =
+ [[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TO_INT, 'int'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TO_FLOAT, 'float']];
+ this.setColour(MATH_HUE);
+ this.appendValueInput('VAR')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(TO_INT_FLOAT), 'TOWHAT');
+ this.setOutput(true, Number);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('TOWHAT');
+ var TOOLTIPS = {
+ 'int': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TEXT_TOINT,
+ 'float': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TEXT_TOFLOAT
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const base_map = math_map
+
+const turn_to_int = {
+ init: function () {
+ this.setColour(MATH_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_BYTE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TO_HEX);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TOOLTIP_TOHEX)
+ }
+};
+
+const generate_cartesian_product = {
+ /**
+ * Block for creating a list with any number of elements of any type.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(MATH_HUE);
+ this.itemCount_ = 1;
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['lists_create_with_item'], this));
+ this.appendDummyInput('DUMMY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PRODUCT + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_GENERATE_CARTESIAN_PRODUCT);
+ this.appendValueInput('REPEAT')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EVERY_PER_ELEPER_ELEMENT);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_REPEAT_TITLE_TIMES);
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_CREATE_WITH_PYTHON_TOOLTIP);
+ this.updateShape_();
+ },
+ /**
+ * Create XML to represent list inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+ /**
+ * Parse XML to restore the list inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('lists_create_with_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('lists_create_with_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput(`ADD${i}`).connection.connect(connections[i]);
+ }
+ }
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput(`ADD${i}`);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @private
+ * @this Blockly.Block
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ let i = 0;
+ while (this.getInput(`ADD${i}`)) {
+ this.removeInput(`ADD${i}`);
+ i++;
+ }
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.appendDummyInput('EMPTY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EMPTY_REMINDER);
+ } else {
+ for (let i = 0; i < this.itemCount_; i++) {
+ this.appendValueInput(`ADD${i}`);
+ this.moveInputBefore(`ADD${i}`, 'REPEAT');
+ }
+ }
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+}
+
+/***/ }),
+
+/***/ "../python/blocks/procedures.js":
+/*!**************************************!*\
+ !*** ../python/blocks/procedures.js ***!
+ \**************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ procedures_callnoreturn: () => (/* binding */ procedures_callnoreturn),
+/* harmony export */ procedures_callreturn: () => (/* binding */ procedures_callreturn),
+/* harmony export */ procedures_defnoreturn: () => (/* binding */ procedures_defnoreturn),
+/* harmony export */ procedures_defreturn: () => (/* binding */ procedures_defreturn),
+/* harmony export */ procedures_ifreturn: () => (/* binding */ procedures_ifreturn),
+/* harmony export */ procedures_mutatorarg: () => (/* binding */ procedures_mutatorarg),
+/* harmony export */ procedures_mutatorcontainer: () => (/* binding */ procedures_mutatorcontainer),
+/* harmony export */ procedures_return: () => (/* binding */ procedures_return)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _others_procedures__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../others/procedures */ "../python/others/procedures.js");
+/**
+ * @license
+ * Copyright 2012 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @fileoverview Procedure blocks for Blockly.
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+
+
+const procedures_defnoreturn = {
+ /**
+ * Block for defining a procedure with no return value.
+ * @this {Blockly.Block}
+ */
+ init: function () {
+ var initName = _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].findLegalName('', this);
+ var nameField = new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput(initName,
+ _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].rename);
+ nameField.setSpellcheck(false);
+ this.appendDummyInput()
+ // .appendField(Blockly.Msg['PROCEDURES_DEFNORETURN_TITLE'])
+ .appendField(nameField, 'NAME')
+ .appendField('', 'PARAMS');
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['procedures_mutatorarg'], this));
+ if ((this.workspace.options.comments ||
+ (this.workspace.options.parentWorkspace &&
+ this.workspace.options.parentWorkspace.options.comments)) &&
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFNORETURN_COMMENT']) {
+ this.setCommentText(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFNORETURN_COMMENT']);
+ }
+ this.setStyle('procedure_blocks');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFNORETURN_TOOLTIP']);
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFNORETURN_HELPURL']);
+ this.arguments_ = [];
+ this.argumentVarModels_ = [];
+ this.setStatements_(true);
+ this.statementConnection_ = null;
+ },
+ /**
+ * Add or remove the statement block from this function definition.
+ * @param {boolean} hasStatements True if a statement block is needed.
+ * @this {Blockly.Block}
+ */
+ setStatements_: function (hasStatements) {
+ if (this.hasStatements_ === hasStatements) {
+ return;
+ }
+ if (hasStatements) {
+ this.appendStatementInput('STACK')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFNORETURN_DO']);
+ if (this.getInput('RETURN')) {
+ this.moveInputBefore('STACK', 'RETURN');
+ }
+ } else {
+ this.removeInput('STACK', true);
+ }
+ this.hasStatements_ = hasStatements;
+ },
+ /**
+ * Update the display of parameters for this procedure definition block.
+ * @private
+ * @this {Blockly.Block}
+ */
+ updateParams_: function () {
+
+ // Merge the arguments into a human-readable list.
+ var paramString = '';
+ if (this.arguments_.length) {
+ paramString = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_BEFORE_PARAMS'] +
+ ' ' + this.arguments_.join(', ');
+ }
+ // The params field is deterministic based on the mutation,
+ // no need to fire a change event.
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.disable();
+ try {
+ this.setFieldValue(paramString, 'PARAMS');
+ } finally {
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.enable();
+ }
+ },
+ /**
+ * Create XML to represent the argument inputs.
+ * @param {boolean=} opt_paramIds If true include the IDs of the parameter
+ * quarks. Used by Procedures.mutateCallers for reconnection.
+ * @return {!Element} XML storage element.
+ * @this {Blockly.Block}
+ */
+ mutationToDom: function (opt_paramIds) {
+ var container = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('mutation');
+ if (opt_paramIds) {
+ container.setAttribute('name', this.getFieldValue('NAME'));
+ }
+ for (var i = 0; i < this.argumentVarModels_.length; i++) {
+ var parameter = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('arg');
+ var argModel = this.argumentVarModels_[i];
+ parameter.setAttribute('name', argModel.name);
+ parameter.setAttribute('varid', argModel.getId());
+ if (opt_paramIds && this.paramIds_) {
+ parameter.setAttribute('paramId', this.paramIds_[i]);
+ }
+ container.appendChild(parameter);
+ }
+
+ // Save whether the statement input is visible.
+ if (!this.hasStatements_) {
+ container.setAttribute('statements', 'false');
+ }
+ return container;
+ },
+ /**
+ * Parse XML to restore the argument inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this {Blockly.Block}
+ */
+ domToMutation: function (xmlElement) {
+ this.arguments_ = [];
+ this.argumentVarModels_ = [];
+ for (var i = 0, childNode; (childNode = xmlElement.childNodes[i]); i++) {
+ if (childNode.nodeName.toLowerCase() == 'arg') {
+ var varName = childNode.getAttribute('name');
+ var varId = childNode.getAttribute('varid') || childNode.getAttribute('varId');
+ this.arguments_.push(varName);
+ var variable = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.getOrCreateVariablePackage(
+ this.workspace, varId, varName, '');
+ if (variable != null) {
+ this.argumentVarModels_.push(variable);
+ } else {
+ console.log('Failed to create a variable with name ' + varName + ', ignoring.');
+ }
+ }
+ }
+ this.updateParams_();
+ _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].mutateCallers(this);
+
+ // Show or hide the statement input.
+ this.setStatements_(xmlElement.getAttribute('statements') !== 'false');
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this {Blockly.Block}
+ */
+ decompose: function (workspace) {
+ /*
+ * Creates the following XML:
+ *
+ *
+ *
+ * arg1_name
+ * etc...
+ *
+ *
+ *
+ */
+
+ var containerBlockNode = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ containerBlockNode.setAttribute('type', 'procedures_mutatorcontainer');
+ var statementNode = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('statement');
+ statementNode.setAttribute('name', 'STACK');
+ containerBlockNode.appendChild(statementNode);
+
+ var node = statementNode;
+ for (var i = 0; i < this.arguments_.length; i++) {
+ var argBlockNode = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ argBlockNode.setAttribute('type', 'procedures_mutatorarg');
+ var fieldNode = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('field');
+ fieldNode.setAttribute('name', 'NAME');
+ var argumentName = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createTextNode(this.arguments_[i]);
+ fieldNode.appendChild(argumentName);
+ argBlockNode.appendChild(fieldNode);
+ var nextNode = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('next');
+ argBlockNode.appendChild(nextNode);
+
+ node.appendChild(argBlockNode);
+ node = nextNode;
+ }
+
+ var containerBlock = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Xml.domToBlock(containerBlockNode, workspace);
+
+ if (this.type == 'procedures_defreturn') {
+ containerBlock.setFieldValue(this.hasStatements_, 'STATEMENTS');
+ } else {
+ containerBlock.removeInput('STATEMENT_INPUT');
+ }
+
+ // Initialize procedure's callers with blank IDs.
+ _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].mutateCallers(this);
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this {Blockly.Block}
+ */
+ compose: function (containerBlock) {
+ // Parameter list.
+ this.arguments_ = [];
+ this.paramIds_ = [];
+ this.argumentVarModels_ = [];
+ var paramBlock = containerBlock.getInputTargetBlock('STACK');
+ while (paramBlock && !paramBlock.isInsertionMarker()) {
+ var varName = paramBlock.getFieldValue('NAME');
+ this.arguments_.push(varName);
+ var variable = this.workspace.getVariable(varName, '');
+ this.argumentVarModels_.push(variable);
+
+ this.paramIds_.push(paramBlock.id);
+ paramBlock = paramBlock.nextConnection &&
+ paramBlock.nextConnection.targetBlock();
+ }
+ this.updateParams_();
+ _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].mutateCallers(this);
+
+ // Show/hide the statement input.
+ var hasStatements = containerBlock.getFieldValue('STATEMENTS');
+ if (hasStatements !== null) {
+ hasStatements = hasStatements == 'TRUE';
+ if (this.hasStatements_ != hasStatements) {
+ if (hasStatements) {
+ this.setStatements_(true);
+ // Restore the stack, if one was saved.
+ this.statementConnection_ && this.statementConnection_.reconnect(this, 'STACK');
+ this.statementConnection_ = null;
+ } else {
+ // Save the stack, then disconnect it.
+ var stackConnection = this.getInput('STACK').connection;
+ this.statementConnection_ = stackConnection.targetConnection;
+ if (this.statementConnection_) {
+ var stackBlock = stackConnection.targetBlock();
+ stackBlock.unplug();
+ stackBlock.bumpNeighbours();
+ }
+ this.setStatements_(false);
+ }
+ }
+ }
+ },
+ /**
+ * Return the signature of this procedure definition.
+ * @return {!Array} Tuple containing three elements:
+ * - the name of the defined procedure,
+ * - a list of all its arguments,
+ * - that it DOES NOT have a return value.
+ * @this {Blockly.Block}
+ */
+ getProcedureDef: function () {
+ return [this.getFieldValue('NAME'), this.arguments_, false];
+ },
+ /**
+ * Return all variables referenced by this block.
+ * @return {!Array} List of variable names.
+ * @this {Blockly.Block}
+ */
+ getVars: function () {
+ return this.arguments_;
+ },
+ /**
+ * Return all variables referenced by this block.
+ * @return {!Array} List of variable models.
+ * @this {Blockly.Block}
+ */
+ getVarModels: function () {
+ return this.argumentVarModels_;
+ },
+ /**
+ * Notification that a variable is renaming.
+ * If the ID matches one of this block's variables, rename it.
+ * @param {string} oldId ID of variable to rename.
+ * @param {string} newId ID of new variable. May be the same as oldId, but
+ * with an updated name. Guaranteed to be the same type as the old
+ * variable.
+ * @override
+ * @this {Blockly.Block}
+ */
+ renameVarById: function (oldId, newId) {
+ var oldVariable = this.workspace.getVariableById(oldId);
+ if (oldVariable.type != '') {
+ // Procedure arguments always have the empty type.
+ return;
+ }
+ var oldName = oldVariable.name;
+ var newVar = this.workspace.getVariableById(newId);
+
+ var change = false;
+ for (var i = 0; i < this.argumentVarModels_.length; i++) {
+ if (this.argumentVarModels_[i].getId() == oldId) {
+ this.arguments_[i] = newVar.name;
+ this.argumentVarModels_[i] = newVar;
+ change = true;
+ }
+ }
+ if (change) {
+ this.displayRenamedVar_(oldName, newVar.name);
+ _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].mutateCallers(this);
+ }
+ },
+ /**
+ * Notification that a variable is renaming but keeping the same ID. If the
+ * variable is in use on this block, rerender to show the new name.
+ * @param {!Blockly.VariableModel} variable The variable being renamed.
+ * @package
+ * @override
+ * @this {Blockly.Block}
+ */
+ updateVarName: function (variable) {
+ var newName = variable.name;
+ var change = false;
+ for (var i = 0; i < this.argumentVarModels_.length; i++) {
+ if (this.argumentVarModels_[i].getId() == variable.getId()) {
+ var oldName = this.arguments_[i];
+ this.arguments_[i] = newName;
+ change = true;
+ }
+ }
+ if (change) {
+ this.displayRenamedVar_(oldName, newName);
+ _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].mutateCallers(this);
+ }
+ },
+ /**
+ * Update the display to reflect a newly renamed argument.
+ * @param {string} oldName The old display name of the argument.
+ * @param {string} newName The new display name of the argument.
+ * @private
+ * @this {Blockly.Block}
+ */
+ displayRenamedVar_: function (oldName, newName) {
+ this.updateParams_();
+ const mutator = this.getIcon(blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon.TYPE);
+ // Update the mutator's variables if the mutator is open.
+ if (mutator && mutator.bubbleIsVisible()) {
+ var blocks = mutator.getWorkspace().getAllBlocks(false);
+ for (var i = 0, block; (block = blocks[i]); i++) {
+ if (block.type == 'procedures_mutatorarg' &&
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, block.getFieldValue('NAME'))) {
+ block.setFieldValue(newName, 'NAME');
+ }
+ }
+ }
+ },
+ /**
+ * Add custom menu options to this block's context menu.
+ * @param {!Array} options List of menu options to add to.
+ * @this {Blockly.Block}
+ */
+ customContextMenu: function (options) {
+ if (this.isInFlyout) {
+ return;
+ }
+ // Add option to create caller.
+ var option = { enabled: true };
+ var name = this.getFieldValue('NAME');
+ option.text = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_CREATE_DO'].replace('%1', name);
+ var xmlMutation = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('mutation');
+ xmlMutation.setAttribute('name', name);
+ for (var i = 0; i < this.arguments_.length; i++) {
+ var xmlArg = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('arg');
+ xmlArg.setAttribute('name', this.arguments_[i]);
+ xmlMutation.appendChild(xmlArg);
+ }
+ var xmlBlock = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ xmlBlock.setAttribute('type', this.callType_);
+ xmlBlock.appendChild(xmlMutation);
+ option.callback = blockly_core__WEBPACK_IMPORTED_MODULE_0__.ContextMenu.callbackFactory(this, xmlBlock);
+ options.push(option);
+
+ // Add options to create getters for each parameter.
+ if (!this.isCollapsed()) {
+ for (var i = 0; i < this.argumentVarModels_.length; i++) {
+ var argOption = { enabled: true };
+ var argVar = this.argumentVarModels_[i];
+ argOption.text = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['VARIABLES_SET_CREATE_GET']
+ .replace('%1', argVar.name);
+
+ var argXmlField = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.generateVariableFieldDom(argVar);
+ var argXmlBlock = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ argXmlBlock.setAttribute('type', 'variables_get');
+ argXmlBlock.appendChild(argXmlField);
+ argOption.callback =
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.ContextMenu.callbackFactory(this, argXmlBlock);
+ options.push(argOption);
+ }
+ }
+ },
+ callType_: 'procedures_callnoreturn'
+};
+
+const procedures_defreturn = {
+ /**
+ * Block for defining a procedure with a return value.
+ * @this {Blockly.Block}
+ */
+ init: function () {
+ var initName = _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].findLegalName('', this);
+ var nameField = new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput(initName,
+ _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].rename);
+ nameField.setSpellcheck(false);
+ this.appendDummyInput()
+ // .appendField(Blockly.Msg['PROCEDURES_DEFRETURN_TITLE'])
+ .appendField(nameField, 'NAME')
+ .appendField('', 'PARAMS');
+ this.appendValueInput('RETURN')
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFRETURN_RETURN']);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['procedures_mutatorarg'], this));
+ if ((this.workspace.options.comments ||
+ (this.workspace.options.parentWorkspace &&
+ this.workspace.options.parentWorkspace.options.comments)) &&
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFRETURN_COMMENT']) {
+ this.setCommentText(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFRETURN_COMMENT']);
+ }
+ this.setStyle('procedure_blocks');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFRETURN_TOOLTIP']);
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFRETURN_HELPURL']);
+ this.arguments_ = [];
+ this.argumentVarModels_ = [];
+ this.setStatements_(true);
+ this.statementConnection_ = null;
+ },
+ setStatements_: procedures_defnoreturn.setStatements_,
+ updateParams_: procedures_defnoreturn.updateParams_,
+ mutationToDom: procedures_defnoreturn.mutationToDom,
+ domToMutation: procedures_defnoreturn.domToMutation,
+ decompose: procedures_defnoreturn.decompose,
+ compose: procedures_defnoreturn.compose,
+ /**
+ * Return the signature of this procedure definition.
+ * @return {!Array} Tuple containing three elements:
+ * - the name of the defined procedure,
+ * - a list of all its arguments,
+ * - that it DOES have a return value.
+ * @this {Blockly.Block}
+ */
+ getProcedureDef: function () {
+ return [this.getFieldValue('NAME'), this.arguments_, true];
+ },
+ getVars: procedures_defnoreturn.getVars,
+ getVarModels: procedures_defnoreturn.getVarModels,
+ renameVarById: procedures_defnoreturn.renameVarById,
+ updateVarName: procedures_defnoreturn.updateVarName,
+ displayRenamedVar_: procedures_defnoreturn.displayRenamedVar_,
+ customContextMenu: procedures_defnoreturn.customContextMenu,
+ callType_: 'procedures_callreturn'
+};
+
+const procedures_mutatorcontainer = {
+ /**
+ * Mutator block for procedure container.
+ * @this {Blockly.Block}
+ */
+ init: function () {
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_MUTATORCONTAINER_TITLE']);
+ this.appendStatementInput('STACK');
+ this.appendDummyInput('STATEMENT_INPUT')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_ALLOW_STATEMENTS'])
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldCheckbox('TRUE'), 'STATEMENTS');
+ this.setStyle('procedure_blocks');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_MUTATORCONTAINER_TOOLTIP']);
+ this.contextMenu = false;
+ },
+};
+
+const procedures_mutatorarg = {
+ /**
+ * Mutator block for procedure argument.
+ * @this {Blockly.Block}
+ */
+ init: function () {
+ var field = new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput(
+ _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].DEFAULT_ARG, this.validator_);
+ // Hack: override showEditor to do just a little bit more work.
+ // We don't have a good place to hook into the start of a text edit.
+ field.oldShowEditorFn_ = field.showEditor_;
+ var newShowEditorFn = function () {
+ this.createdVariables_ = [];
+ this.oldShowEditorFn_();
+ };
+ field.showEditor_ = newShowEditorFn;
+
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_BEFORE_PARAMS)
+ .appendField(field, 'NAME');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setStyle('procedure_blocks');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_MUTATORARG_TOOLTIP']);
+ this.contextMenu = false;
+
+ // Create the default variable when we drag the block in from the flyout.
+ // Have to do this after installing the field on the block.
+ field.onFinishEditing_ = this.deleteIntermediateVars_;
+ // Create an empty list so onFinishEditing_ has something to look at, even
+ // though the editor was never opened.
+ field.createdVariables_ = [];
+ field.onFinishEditing_('x');
+ },
+ /**
+ * Obtain a valid name for the procedure argument. Create a variable if
+ * necessary.
+ * Merge runs of whitespace. Strip leading and trailing whitespace.
+ * Beyond this, all names are legal.
+ * @param {string} varName User-supplied name.
+ * @return {?string} Valid name, or null if a name was not specified.
+ * @private
+ * @this Blockly.FieldTextInput
+ */
+ validator_: function (varName) {
+ var sourceBlock = this.getSourceBlock();
+
+ var outerWs = sourceBlock.workspace.getRootWorkspace();
+ varName = varName.replace(/[\s\xa0]+/g, ' ').replace(/^ | $/g, '');
+ if (!varName) {
+ return null;
+ }
+
+ // Prevents duplicate parameter names in functions
+ var workspace = sourceBlock.workspace.targetWorkspace ||
+ sourceBlock.workspace;
+ var blocks = workspace.getAllBlocks(false);
+ var caselessName = varName.toLowerCase();
+ for (var i = 0; i < blocks.length; i++) {
+ if (blocks[i].id == this.getSourceBlock().id) {
+ continue;
+ }
+ // Other blocks values may not be set yet when this is loaded.
+ var otherVar = blocks[i].getFieldValue('NAME');
+ if (otherVar && otherVar.toLowerCase() == caselessName) {
+ return null;
+ }
+ }
+
+ // Don't create variables for arg blocks that
+ // only exist in the mutator's flyout.
+ if (sourceBlock.isInFlyout) {
+ return varName;
+ }
+
+ var model = outerWs.getVariable(varName, '');
+ if (model && model.name != varName) {
+ // Rename the variable (case change)
+ outerWs.renameVariableById(model.getId(), varName);
+ }
+ if (!model) {
+ model = outerWs.createVariable(varName, '');
+ if (model && this.createdVariables_) {
+ this.createdVariables_.push(model);
+ }
+ }
+ return varName;
+ },
+
+ /**
+ * Called when focusing away from the text field.
+ * Deletes all variables that were created as the user typed their intended
+ * variable name.
+ * @param {string} newText The new variable name.
+ * @private
+ * @this Blockly.FieldTextInput
+ */
+ deleteIntermediateVars_: function (newText) {
+ var outerWs = this.getSourceBlock().workspace.getRootWorkspace();
+ if (!outerWs) {
+ return;
+ }
+ for (var i = 0; i < this.createdVariables_.length; i++) {
+ var model = this.createdVariables_[i];
+ if (model.name != newText) {
+ outerWs.deleteVariableById(model.getId());
+ }
+ }
+ }
+};
+
+const procedures_callnoreturn = {
+ /**
+ * Block for calling a procedure with no return value.
+ * @this {Blockly.Block}
+ */
+ init: function () {
+ this.appendDummyInput('TOPROW')
+ .appendField('', 'NAME');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setStyle('procedure_blocks');
+ // Tooltip is set in renameProcedure.
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_CALLNORETURN_HELPURL']);
+ this.arguments_ = [];
+ this.argumentVarModels_ = [];
+ this.quarkConnections_ = {};
+ this.quarkIds_ = null;
+ this.previousEnabledState_ = true;
+ },
+
+ /**
+ * Returns the name of the procedure this block calls.
+ * @return {string} Procedure name.
+ * @this {Blockly.Block}
+ */
+ getProcedureCall: function () {
+ // The NAME field is guaranteed to exist, null will never be returned.
+ return /** @type {string} */ (this.getFieldValue('NAME'));
+ },
+ /**
+ * Notification that a procedure is renaming.
+ * If the name matches this block's procedure, rename it.
+ * @param {string} oldName Previous name of procedure.
+ * @param {string} newName Renamed procedure.
+ * @this {Blockly.Block}
+ */
+ renameProcedure: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getProcedureCall())) {
+ this.setFieldValue(newName, 'NAME');
+ var baseMsg = this.outputConnection ?
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_CALLRETURN_TOOLTIP'] :
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_CALLNORETURN_TOOLTIP'];
+ this.setTooltip(baseMsg.replace('%1', newName));
+ }
+ },
+ /**
+ * Notification that the procedure's parameters have changed.
+ * @param {!Array} paramNames New param names, e.g. ['x', 'y', 'z'].
+ * @param {!Array} paramIds IDs of params (consistent for each
+ * parameter through the life of a mutator, regardless of param renaming),
+ * e.g. ['piua', 'f8b_', 'oi.o'].
+ * @private
+ * @this {Blockly.Block}
+ */
+ setProcedureParameters_: function (paramNames, paramIds) {
+ // Data structures:
+ // this.arguments = ['x', 'y']
+ // Existing param names.
+ // this.quarkConnections_ {piua: null, f8b_: Blockly.Connection}
+ // Look-up of paramIds to connections plugged into the call block.
+ // this.quarkIds_ = ['piua', 'f8b_']
+ // Existing param IDs.
+ // Note that quarkConnections_ may include IDs that no longer exist, but
+ // which might reappear if a param is reattached in the mutator.
+ var defBlock = _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].getDefinition(this.getProcedureCall(),
+ this.workspace);
+ const mutatorIcon = defBlock && defBlock.getIcon(blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon.TYPE);
+ const mutatorOpen =
+ mutatorIcon && mutatorIcon.bubbleIsVisible();
+ if (!mutatorOpen) {
+ this.quarkConnections_ = {};
+ this.quarkIds_ = null;
+ }
+ if (!paramIds) {
+ // Reset the quarks (a mutator is about to open).
+ return;
+ }
+ // Test arguments (arrays of strings) for changes. '\n' is not a valid
+ // argument name character, so it is a valid delimiter here.
+ if (paramNames.join('\n') == this.arguments_.join('\n')) {
+ // No change.
+ this.quarkIds_ = paramIds;
+ return;
+ }
+ if (paramIds.length != paramNames.length) {
+ throw Error('paramNames and paramIds must be the same length.');
+ }
+ this.setCollapsed(false);
+ if (!this.quarkIds_) {
+ // Initialize tracking for this block.
+ this.quarkConnections_ = {};
+ this.quarkIds_ = [];
+ }
+ // Switch off rendering while the block is rebuilt.
+ var savedRendered = this.rendered;
+ this.rendered = false;
+ // Update the quarkConnections_ with existing connections.
+ for (var i = 0; i < this.arguments_.length; i++) {
+ var input = this.getInput('ARG' + i);
+ if (input) {
+ var connection = input.connection.targetConnection;
+ this.quarkConnections_[this.quarkIds_[i]] = connection;
+ if (mutatorOpen && connection &&
+ paramIds.indexOf(this.quarkIds_[i]) == -1) {
+ // This connection should no longer be attached to this block.
+ connection.disconnect();
+ connection.getSourceBlock().bumpNeighbours();
+ }
+ }
+ }
+ // Rebuild the block's arguments.
+ this.arguments_ = [].concat(paramNames);
+ // And rebuild the argument model list.
+ this.argumentVarModels_ = [];
+ for (var i = 0; i < this.arguments_.length; i++) {
+ var variable = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.getOrCreateVariablePackage(
+ this.workspace, null, this.arguments_[i], '');
+ this.argumentVarModels_.push(variable);
+ }
+
+ this.updateShape_();
+ this.quarkIds_ = paramIds;
+ // Reconnect any child blocks.
+ if (this.quarkIds_) {
+ for (var i = 0; i < this.arguments_.length; i++) {
+ var quarkId = this.quarkIds_[i];
+ if (quarkId in this.quarkConnections_) {
+ var connection = this.quarkConnections_[quarkId];
+ if (connection && !connection.reconnect(this, 'ARG' + i)) {
+ // Block no longer exists or has been attached elsewhere.
+ delete this.quarkConnections_[quarkId];
+ }
+ }
+ }
+ }
+ // Restore rendering and show the changes.
+ this.rendered = savedRendered;
+ if (this.rendered) {
+ this.render();
+ }
+ },
+ /**
+ * Modify this block to have the correct number of arguments.
+ * @private
+ * @this {Blockly.Block}
+ */
+ updateShape_: function () {
+ for (var i = 0; i < this.arguments_.length; i++) {
+ var field = this.getField('ARGNAME' + i);
+ if (field) {
+ // Ensure argument name is up to date.
+ // The argument name field is deterministic based on the mutation,
+ // no need to fire a change event.
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.disable();
+ try {
+ field.setValue(this.arguments_[i]);
+ } finally {
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.enable();
+ }
+ } else {
+ // Add new input.
+ field = new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldLabel(this.arguments_[i]);
+ var input = this.appendValueInput('ARG' + i)
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField(field, 'ARGNAME' + i);
+ input.init();
+ }
+ }
+ // Remove deleted inputs.
+ while (this.getInput('ARG' + i)) {
+ this.removeInput('ARG' + i);
+ i++;
+ }
+ // Add 'with:' if there are parameters, remove otherwise.
+ var topRow = this.getInput('TOPROW');
+ if (topRow) {
+ if (this.arguments_.length) {
+ if (!this.getField('WITH')) {
+ topRow.appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_CALL_BEFORE_PARAMS'], 'WITH');
+ topRow.init();
+ }
+ } else {
+ if (this.getField('WITH')) {
+ topRow.removeField('WITH');
+ }
+ }
+ }
+ },
+ /**
+ * Create XML to represent the (non-editable) name and arguments.
+ * @return {!Element} XML storage element.
+ * @this {Blockly.Block}
+ */
+ mutationToDom: function () {
+ var container = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('mutation');
+ container.setAttribute('name', this.getProcedureCall());
+ for (var i = 0; i < this.arguments_.length; i++) {
+ var parameter = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('arg');
+ parameter.setAttribute('name', this.arguments_[i]);
+ container.appendChild(parameter);
+ }
+ return container;
+ },
+ /**
+ * Parse XML to restore the (non-editable) name and parameters.
+ * @param {!Element} xmlElement XML storage element.
+ * @this {Blockly.Block}
+ */
+ domToMutation: function (xmlElement) {
+ var name = xmlElement.getAttribute('name');
+ this.renameProcedure(this.getProcedureCall(), name);
+ var args = [];
+ var paramIds = [];
+ for (var i = 0, childNode; (childNode = xmlElement.childNodes[i]); i++) {
+ if (childNode.nodeName.toLowerCase() == 'arg') {
+ args.push(childNode.getAttribute('name'));
+ paramIds.push(childNode.getAttribute('paramId'));
+ }
+ }
+ this.setProcedureParameters_(args, paramIds);
+ },
+ /**
+ * Return all variables referenced by this block.
+ * @return {!Array} List of variable names.
+ * @this {Blockly.Block}
+ */
+ getVars: function () {
+ return this.arguments_;
+ },
+ /**
+ * Return all variables referenced by this block.
+ * @return {!Array} List of variable models.
+ * @this {Blockly.Block}
+ */
+ getVarModels: function () {
+ return this.argumentVarModels_;
+ },
+ /**
+ * Procedure calls cannot exist without the corresponding procedure
+ * definition. Enforce this link whenever an event is fired.
+ * @param {!Blockly.Events.Abstract} event Change event.
+ * @this {Blockly.Block}
+ */
+ onchange: function (event) {
+ if (!this.workspace || this.workspace.isFlyout) {
+ // Block is deleted or is in a flyout.
+ return;
+ }
+ if (!event.recordUndo) {
+ // Events not generated by user. Skip handling.
+ return;
+ }
+ if (event.type == blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.BLOCK_CREATE &&
+ event.ids.indexOf(this.id) != -1) {
+ // Look for the case where a procedure call was created (usually through
+ // paste) and there is no matching definition. In this case, create
+ // an empty definition block with the correct signature.
+ var name = this.getProcedureCall();
+ var def = _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].getDefinition(name, this.workspace);
+ if (def && (def.type != this.defType_)) {
+ // The signatures don't match.
+ def = null;
+ }
+ if (!def) {
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.setGroup(event.group);
+ /**
+ * Create matching definition block.
+ *
+ *
+ *
+ *
+ *
+ * test
+ *
+ *
+ */
+ var xml = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('xml');
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', this.defType_);
+ var xy = this.getRelativeToSurfaceXY();
+ var x = xy.x + blockly_core__WEBPACK_IMPORTED_MODULE_0__.SNAP_RADIUS * (this.RTL ? -1 : 1);
+ var y = xy.y + blockly_core__WEBPACK_IMPORTED_MODULE_0__.SNAP_RADIUS * 2;
+ block.setAttribute('x', x);
+ block.setAttribute('y', y);
+ var mutation = this.mutationToDom();
+ block.appendChild(mutation);
+ var field = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('field');
+ field.setAttribute('name', 'NAME');
+ var callName = this.getProcedureCall();
+ if (!callName) {
+ // Rename if name is empty string.
+ callName = _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].findLegalName('', this);
+ this.renameProcedure('', callName);
+ }
+ field.appendChild(blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createTextNode(callName));
+ block.appendChild(field);
+ xml.appendChild(block);
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Xml.domToWorkspace(xml, this.workspace);
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.setGroup(false);
+ } else {
+ if (JSON.stringify(def.getVars()) != JSON.stringify(this.arguments_)) {
+ let paramNames = def.arguments_;
+ let paramIds = [];
+ for (var i = 0; i < this.arguments_.length; i++) {
+ var input = this.getInput('ARG' + i);
+ if (!input) {
+ continue;
+ }
+ var connection = input.connection.targetConnection;
+ if (!connection) {
+ paramIds.push(null);
+ continue;
+ }
+ paramIds.push(connection.sourceBlock_.id);
+ }
+ this.setProcedureParameters_(paramNames, paramIds);
+ }
+ }
+ } else if (event.type == blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.BLOCK_DELETE) {
+ // Look for the case where a procedure definition has been deleted,
+ // leaving this block (a procedure call) orphaned. In this case, delete
+ // the orphan.
+ var name = this.getProcedureCall();
+ var def = _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].getDefinition(name, this.workspace);
+ if (!def) {
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.setGroup(event.group);
+ this.dispose(true);
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.setGroup(false);
+ }
+ } else if (event.type == blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.CHANGE && event.element == 'disabled') {
+ var name = this.getProcedureCall();
+ var def = _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].getDefinition(name, this.workspace);
+ if (def && def.id == event.blockId) {
+ // in most cases the old group should be ''
+ var oldGroup = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.getGroup();
+ if (oldGroup) {
+ // This should only be possible programmatically and may indicate a problem
+ // with event grouping. If you see this message please investigate. If the
+ // use ends up being valid we may need to reorder events in the undo stack.
+ console.log('Saw an existing group while responding to a definition change');
+ }
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.setGroup(event.group);
+ if (event.newValue) {
+ this.previousEnabledState_ = this.isEnabled();
+ this.setEnabled(false);
+ } else {
+ this.setEnabled(this.previousEnabledState_);
+ }
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.setGroup(oldGroup);
+ }
+ }
+ },
+ /**
+ * Add menu option to find the definition block for this call.
+ * @param {!Array} options List of menu options to add to.
+ * @this {Blockly.Block}
+ */
+ customContextMenu: function (options) {
+ if (!this.workspace.isMovable()) {
+ // If we center on the block and the workspace isn't movable we could
+ // loose blocks at the edges of the workspace.
+ return;
+ }
+
+ var option = { enabled: true };
+ option.text = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_HIGHLIGHT_DEF'];
+ var name = this.getProcedureCall();
+ var workspace = this.workspace;
+ option.callback = function () {
+ var def = _others_procedures__WEBPACK_IMPORTED_MODULE_1__["default"].getDefinition(name, workspace);
+ if (def) {
+ workspace.centerOnBlock(def.id);
+ def.select();
+ }
+ };
+ options.push(option);
+ },
+ defType_: 'procedures_defnoreturn'
+};
+
+const procedures_callreturn = {
+ /**
+ * Block for calling a procedure with a return value.
+ * @this {Blockly.Block}
+ */
+ init: function () {
+ this.appendDummyInput('TOPROW')
+ .appendField('', 'NAME');
+ this.setOutput(true);
+ this.setStyle('procedure_blocks');
+ // Tooltip is set in domToMutation.
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_CALLRETURN_HELPURL']);
+ this.arguments_ = [];
+ this.argumentVarModels_ = [];
+ this.quarkConnections_ = {};
+ this.quarkIds_ = null;
+ this.previousEnabledState_ = true;
+ },
+
+ getProcedureCall: procedures_callnoreturn.getProcedureCall,
+ renameProcedure: procedures_callnoreturn.renameProcedure,
+ setProcedureParameters_:
+ procedures_callnoreturn.setProcedureParameters_,
+ updateShape_: procedures_callnoreturn.updateShape_,
+ mutationToDom: procedures_callnoreturn.mutationToDom,
+ domToMutation: procedures_callnoreturn.domToMutation,
+ getVars: procedures_callnoreturn.getVars,
+ getVarModels: procedures_callnoreturn.getVarModels,
+ onchange: procedures_callnoreturn.onchange,
+ customContextMenu:
+ procedures_callnoreturn.customContextMenu,
+ defType_: 'procedures_defreturn'
+};
+
+const procedures_ifreturn = {
+ /**
+ * Block for conditionally returning a value from a procedure.
+ * @this {Blockly.Block}
+ */
+ init: function () {
+ this.appendValueInput('CONDITION')
+ .setCheck('Boolean')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['CONTROLS_IF_MSG_IF']);
+ this.appendValueInput('VALUE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFRETURN_RETURN']);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setStyle('procedure_blocks');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_IFRETURN_TOOLTIP']);
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_IFRETURN_HELPURL']);
+ this.hasReturnValue_ = true;
+ },
+ /**
+ * Create XML to represent whether this block has a return value.
+ * @return {!Element} XML storage element.
+ * @this {Blockly.Block}
+ */
+ mutationToDom: function () {
+ var container = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('mutation');
+ container.setAttribute('value', Number(this.hasReturnValue_));
+ return container;
+ },
+ /**
+ * Parse XML to restore whether this block has a return value.
+ * @param {!Element} xmlElement XML storage element.
+ * @this {Blockly.Block}
+ */
+ domToMutation: function (xmlElement) {
+ var value = xmlElement.getAttribute('value');
+ this.hasReturnValue_ = (value == 1);
+ if (!this.hasReturnValue_) {
+ this.removeInput('VALUE');
+ this.appendDummyInput('VALUE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFRETURN_RETURN']);
+ }
+ },
+ /**
+ * Called whenever anything on the workspace changes.
+ * Add warning if this flow block is not nested inside a loop.
+ * @param {!Blockly.Events.Abstract} _e Change event.
+ * @this {Blockly.Block}
+ */
+ onchange: function () {
+ if (!this.workspace.isDragging || this.workspace.isDragging()) {
+ return; // Don't change state at the start of a drag.
+ }
+ var legal = false;
+ // Is the block nested in a procedure?
+ var block = this;
+ do {
+ if (this.FUNCTION_TYPES.indexOf(block.type) != -1) {
+ legal = true;
+ break;
+ }
+ block = block.getSurroundParent();
+ } while (block);
+ if (legal) {
+ // If needed, toggle whether this block has a return value.
+ if (block.type == 'procedures_defnoreturn' && this.hasReturnValue_) {
+ this.removeInput('VALUE');
+ this.appendDummyInput('VALUE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFRETURN_RETURN']);
+ this.hasReturnValue_ = false;
+ } else if (block.type == 'procedures_defreturn' &&
+ !this.hasReturnValue_) {
+ this.removeInput('VALUE');
+ this.appendValueInput('VALUE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFRETURN_RETURN']);
+ this.hasReturnValue_ = true;
+ }
+ this.setWarningText(null);
+ if (!this.isInFlyout) {
+ this.setEnabled(true);
+ }
+ } else {
+ this.setWarningText(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_IFRETURN_WARNING']);
+ if (!this.isInFlyout && !this.getInheritedDisabled()) {
+ this.setEnabled(false);
+ }
+ }
+ },
+ /**
+ * List of block types that are functions and thus do not need warnings.
+ * To add a new function type add this to your code:
+ * procedures_ifreturn.FUNCTION_TYPES.push('custom_func');
+ */
+ FUNCTION_TYPES: ['procedures_defnoreturn', 'procedures_defreturn']
+};
+
+const procedures_return = {
+ /**
+ * Block for conditionally returning a value from a procedure.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setStyle('procedure_blocks');
+ // this.appendValueInput('CONDITION')
+ // .setCheck(Boolean)
+ // .appendField(Blockly.Msg.CONTROLS_IF_MSG_IF);
+ this.appendValueInput('VALUE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_IFRETURN_TOOLTIP);
+ this.hasReturnValue_ = true;
+ },
+ /**
+ * Create XML to represent whether this block has a return value.
+ * @return {!Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('value', Number(this.hasReturnValue_));
+ return container;
+ },
+ /**
+ * Parse XML to restore whether this block has a return value.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ var value = xmlElement.getAttribute('value');
+ this.hasReturnValue_ = (value == 1);
+ if (!this.hasReturnValue_) {
+ this.removeInput('VALUE');
+ this.appendDummyInput('VALUE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN);
+ }
+ },
+ /**
+ * Called whenever anything on the workspace changes.
+ * Add warning if this flow block is not nested inside a loop.
+ * @param {!Blockly.Events.Abstract} e Change event.
+ * @this Blockly.Block
+ */
+ onchange: function () {
+ var legal = false;
+ // Is the block nested in a procedure?
+ var block = this;
+ do {
+ if (this.FUNCTION_TYPES.indexOf(block.type) != -1) {
+ legal = true;
+ break;
+ }
+ block = block.getSurroundParent();
+ } while (block);
+ if (legal) {
+ // If needed, toggle whether this block has a return value.
+ if (block.type == 'procedures_defnoreturn' && this.hasReturnValue_) {
+ this.removeInput('VALUE');
+ this.appendDummyInput('VALUE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN);
+ this.hasReturnValue_ = false;
+ } else if (block.type == 'procedures_defreturn' &&
+ !this.hasReturnValue_) {
+ this.removeInput('VALUE');
+ this.appendValueInput('VALUE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN);
+ this.hasReturnValue_ = true;
+ }
+ this.setWarningText(null);
+ } else {
+ this.setWarningText(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_IFRETURN_WARNING);
+ }
+ },
+ /**
+ * List of block types that are functions and thus do not need warnings.
+ * To add a new function type add this to your code:
+ * procedures_ifreturn.FUNCTION_TYPES.push('custom_func');
+ */
+ FUNCTION_TYPES: ['procedures_defnoreturn', 'procedures_defreturn', 'method_procedures_defnoreturn', 'method_procedures_defreturn']
+};
+
+/***/ }),
+
+/***/ "../python/blocks/set.js":
+/*!*******************************!*\
+ !*** ../python/blocks/set.js ***!
+ \*******************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ set_add_discard: () => (/* binding */ set_add_discard),
+/* harmony export */ set_clear: () => (/* binding */ set_clear),
+/* harmony export */ set_create_with: () => (/* binding */ set_create_with),
+/* harmony export */ set_create_with_container: () => (/* binding */ set_create_with_container),
+/* harmony export */ set_create_with_item: () => (/* binding */ set_create_with_item),
+/* harmony export */ set_create_with_text_return: () => (/* binding */ set_create_with_text_return),
+/* harmony export */ set_length: () => (/* binding */ set_length),
+/* harmony export */ set_operate: () => (/* binding */ set_operate),
+/* harmony export */ set_operate_update: () => (/* binding */ set_operate_update),
+/* harmony export */ set_pop: () => (/* binding */ set_pop),
+/* harmony export */ set_sub: () => (/* binding */ set_sub),
+/* harmony export */ set_toset: () => (/* binding */ set_toset),
+/* harmony export */ set_update: () => (/* binding */ set_update)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const SET_HUE = 100;
+
+const set_create_with = {
+ /**
+ * Block for creating a list with any number of elements of any type.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(SET_HUE);
+ this.appendDummyInput("")
+ //don't need to specify the data type in Python
+ // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'Array'], [Blockly.Msg.LANG_MATH_STRING, 'Array'], [Blockly.Msg.LANG_MATH_BOOLEAN, 'Array']]), 'TYPE')
+ // .appendField(' ')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('s1'), 'VAR')
+
+ this.itemCount_ = 3;
+ this.updateShape_();
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['set_create_with_item'], this));
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_CREATE_WITH_TOOLTIP);
+ },
+ /**
+ * Create XML to represent list inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+ /**
+ * Parse XML to restore the list inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('set_create_with_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('set_create_with_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @private
+ * @this Blockly.Block
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ var i = 0;
+ while (this.getInput('ADD' + i)) {
+ this.removeInput('ADD' + i);
+ i++;
+ }
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.appendDummyInput('EMPTY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_CREATE_EMPTY_TITLE);
+ } else {
+ for (var i = 0; i < this.itemCount_; i++) {
+ var input = this.appendValueInput('ADD' + i);
+ if (i == 0) {
+ input.appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_CREATE_WITH_INPUT_WITH);
+ }
+ }
+ }
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+};
+
+const set_create_with_container = {
+ /**
+ * Mutator block for list container.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(SET_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD);
+ this.appendStatementInput('STACK');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const set_create_with_item = {
+ /**
+ * Mutator bolck for adding items.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(SET_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_VARIABLES_NAME);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_CREATE_WITH_ITEM_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const set_length = {
+
+ init: function () {
+ this.setColour(SET_HUE);
+ this.appendValueInput('SET');
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LENGTH);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.SET_LENGTH_TOOLTIP);
+ this.setOutput(true, Number);
+ }
+};
+
+const set_pop = {
+ init: function () {
+ this.setColour(SET_HUE);
+ this.appendValueInput('SET')
+ .setCheck('Set')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_GET_AND_REMOVE_LAST);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.SET_POP_TOOLTIP);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ }
+};
+
+const set_clear = {
+ /**
+ * Block for list length.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(SET_HUE);
+ this.appendValueInput('SET')
+ .setCheck('Set')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.SET_CLEAR);
+
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ }
+};
+
+const set_operate = {
+ init: function () {
+
+
+ this.appendValueInput('SET1')
+ .setCheck('Set')
+ var operate = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_union, 'union'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_intersection, 'intersection'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_difference, 'difference']
+ ];
+ this.setColour(SET_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_and_set)
+ this.appendValueInput('SET2')
+ .setCheck('Set')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_get_operate)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(operate), 'OPERATE')
+
+ this.setInputsInline(true);
+ this.setOutput(true, "set");
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OPERATE');
+ var TOOLTIPS = {
+ 'union': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_SET_UNION,
+ 'intersection': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_SET_INTERSECTION,
+ 'difference': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_SET_DIFFERENCE
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const set_operate_update = {
+ init: function () {
+
+ this.appendValueInput('SET1')
+ .setCheck('Set')
+ var operate_update = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_union, 'update'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_intersection, 'intersection_update'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_difference, 'difference_update']
+ ];
+ this.setColour(SET_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_and_set)
+ this.appendValueInput('SET2')
+ .setCheck('Set')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_get_operate)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(operate_update), 'OPERATE')
+
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_update)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OPERATE');
+ var TOOLTIPS = {
+ 'update': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_SET_UPDATE,
+ 'intersection_update': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_SET_INTERSECTION_UPDATE,
+ 'difference_update': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_SET_DIFFERENCE_UPDATE
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const set_add_discard = {
+ init: function () {
+ this.appendValueInput('SET')
+ .setCheck('Set')
+ var changenum =
+ [[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_blockpy_set_add, 'add'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_blockpy_set_discard, 'discard']];
+ this.setColour(SET_HUE);
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(changenum), 'OPERATE')
+ this.appendValueInput('data')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_VARIABLES_NAME)
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OPERATE');
+ var TOOLTIPS = {
+ 'add': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.SET_ADD_TOOLTIP,
+ 'discard': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.SET_DISCARD_TOOLTIP,
+
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const set_sub = {
+ init: function () {
+
+ this.appendValueInput('SET1')
+ .setCheck('Set')
+ var sub_super = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_sub, 'issubset'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_super, 'issuperset']
+ ];
+ this.setColour(SET_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_is_set)
+ this.appendValueInput('SET2')
+ .setCheck('Set')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_of)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(sub_super), 'OPERATE')
+
+
+ this.setInputsInline(true);
+ this.setOutput(true, Boolean);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OPERATE');
+ var TOOLTIPS = {
+ 'issubset': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_SET_SUB,
+ 'issuperset': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_SET_SUPER
+
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const set_update = {
+ init: function () {
+ this.appendValueInput('SET')
+ .setCheck('Set')
+ this.setColour(SET_HUE);
+ this.appendValueInput('VAR')
+ .setCheck([String, 'List'])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_set_add_update);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.SET_UPDATE_TOOLTIP);
+ }
+};
+
+// export const set_change_to = {
+// init: function() {
+// var OPERATORS =
+// [[Blockly.Msg.MIXLY_MICROBIT_TYPE_LIST, 'list'],
+// [Blockly.Msg.MIXLY_MICROBIT_TYPE_TUPLE, 'tuple']
+// ];
+// this.setColour(SET_HUE);
+// this.appendValueInput('VAR')
+// .setCheck("Set")
+// // .appendField(Blockly.Msg.blockpy_USE_LIST);
+// this.appendDummyInput("")
+// .appendField(Blockly.Msg.A_TO_B)
+// .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');
+// this.setInputsInline(true);
+// this.setOutput(true);
+// var thisBlock = this;
+// this.setTooltip(function() {
+// var mode = thisBlock.getFieldValue('OP');
+// var TOOLTIPS = {
+// 'list': Blockly.Msg.SET_TO_LISTS,
+// 'tuple': Blockly.Msg.SET_TO_TUPLE,
+// };
+// return TOOLTIPS[mode];
+// });
+// }
+// };
+
+const set_create_with_text_return = {
+ init: function () {
+ this.setColour(SET_HUE);
+ this.appendDummyInput("")
+ .appendField('{')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('0,0,0'), 'TEXT')
+ .appendField('}');
+ // .appendField(this.newQuote_(false))
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_TOOLTIP_SET_CREATE_WITH_TEXT);
+ }
+}
+
+const set_toset = {
+ init: function () {
+ this.setColour(SET_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOSET);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TOOLTIP_TOSET);
+ }
+};
+
+/***/ }),
+
+/***/ "../python/blocks/storage.js":
+/*!***********************************!*\
+ !*** ../python/blocks/storage.js ***!
+ \***********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ sdcard_mount: () => (/* binding */ sdcard_mount),
+/* harmony export */ sdcard_use_spi_init: () => (/* binding */ sdcard_use_spi_init),
+/* harmony export */ storage_can_write_ornot: () => (/* binding */ storage_can_write_ornot),
+/* harmony export */ storage_change_dir: () => (/* binding */ storage_change_dir),
+/* harmony export */ storage_close_file: () => (/* binding */ storage_close_file),
+/* harmony export */ storage_delete_file: () => (/* binding */ storage_delete_file),
+/* harmony export */ storage_file_seek: () => (/* binding */ storage_file_seek),
+/* harmony export */ storage_file_tell: () => (/* binding */ storage_file_tell),
+/* harmony export */ storage_file_write: () => (/* binding */ storage_file_write),
+/* harmony export */ storage_fileopen: () => (/* binding */ storage_fileopen),
+/* harmony export */ storage_fileopen_new: () => (/* binding */ storage_fileopen_new),
+/* harmony export */ storage_fileopen_new_encoding: () => (/* binding */ storage_fileopen_new_encoding),
+/* harmony export */ storage_get_a_line: () => (/* binding */ storage_get_a_line),
+/* harmony export */ storage_get_contents: () => (/* binding */ storage_get_contents),
+/* harmony export */ storage_get_contents_without_para: () => (/* binding */ storage_get_contents_without_para),
+/* harmony export */ storage_get_current_dir: () => (/* binding */ storage_get_current_dir),
+/* harmony export */ storage_get_file_size: () => (/* binding */ storage_get_file_size),
+/* harmony export */ storage_get_filename: () => (/* binding */ storage_get_filename),
+/* harmony export */ storage_is_file: () => (/* binding */ storage_is_file),
+/* harmony export */ storage_list_all_files: () => (/* binding */ storage_list_all_files),
+/* harmony export */ storage_make_dir: () => (/* binding */ storage_make_dir),
+/* harmony export */ storage_open_file_with_os: () => (/* binding */ storage_open_file_with_os),
+/* harmony export */ storage_rename: () => (/* binding */ storage_rename)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const STORAGE_HUE = 0; //'#5d69c5'//0;
+
+const storage_open_file_with_os = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput('fn')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_STORAGE_OPEN_FILE_WITH_OS + "(For Windows)");
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ }
+}
+
+const storage_fileopen = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILENAME")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE);
+ //.appendField(new Blockly.FieldTextInput('filename.txt'), 'FILENAME');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_READ, 'r'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE, 'w'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ, 'rb'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE, 'wb']
+ ]), 'MODE');
+ this.appendValueInput("FILE")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_AS);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('MODE');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_USE;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE;
+ var mode3 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG;
+ var TOOLTIPS = {
+ 'r': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_READ,
+ 'w': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE,
+ 'rb': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ,
+ 'wb': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE
+ };
+ return mode0 + TOOLTIPS[mode] + mode3 + mode1 + mode2;
+ });
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+};
+
+
+const storage_fileopen_new = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILENAME")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE);
+ //.appendField(new Blockly.FieldTextInput('filename.txt'), 'FILENAME');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_READ, 'r'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE, 'w'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ, 'rb'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE, 'wb']
+ ]), 'MODE');
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('MODE');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_USE;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE;
+ var mode3 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG;
+ var mode4 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PY_STORAGE_FILE_OBJECT;
+ var TOOLTIPS = {
+ 'r': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_READ,
+ 'w': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE,
+ 'rb': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ,
+ 'wb': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE
+ };
+ return mode0 + TOOLTIPS[mode] + mode3 + mode1 + mode2 + mode4;
+ });
+ }
+};
+
+const storage_fileopen_new_encoding = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILENAME")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE);
+ //.appendField(new Blockly.FieldTextInput('filename.txt'), 'FILENAME');
+ var code =
+ [['ANSI', 'ANSI'], ['gbk', 'gbk'], ['utf-8', 'utf-8']];
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_READ, 'r'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE, 'w'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ, 'rb'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE, 'wb']
+ ]), 'MODE');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_TEXT_ENCODE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(code), 'CODE')
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('MODE');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_USE;
+ var mode1 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE;
+ var mode3 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_BELONG;
+ var mode4 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PY_STORAGE_FILE_OBJECT;
+ var TOOLTIPS = {
+ 'r': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_READ,
+ 'w': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE,
+ 'rb': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ,
+ 'wb': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE
+ };
+ return mode0 + TOOLTIPS[mode] + mode3 + mode1 + mode2 + mode4;
+ });
+ }
+};
+
+const storage_file_write = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput('data')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE);
+ this.appendValueInput("FILE")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_WRITE);
+ // .appendField(new Blockly.FieldTextInput('f'), 'FILE');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_STRING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_WRITE);
+ }
+}
+
+const storage_get_contents_without_para = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILE")
+ .setCheck('Variable')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FROM_FILE);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL, 'read'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_ONE_LINE, 'readline'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL_LINES, 'readlines']]), 'MODE');
+ this.setInputsInline(true);
+ this.setPreviousStatement(false); //in front of the block has something
+ this.setNextStatement(false); //beyond the ... has something
+ this.setOutput(true, String);
+ }
+};
+
+const storage_get_contents = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILE")
+ .setCheck('Variable')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FROM_FILE);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_NO_MORE_THAN_SIZE, 'read'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_ONE_LINE_NO_MORE_THAN_SIZE, 'readline'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL_LINES_NO_MORE_THAN_SIZE, 'readlines']
+ ]), 'MODE');
+ this.appendValueInput("SIZE")
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER);
+ this.setInputsInline(true);
+ this.setPreviousStatement(false); //in front of the block has something
+ this.setNextStatement(false); //beyond the ... has something
+ this.setOutput(true, String);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('MODE');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FROM_FILE;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER;
+ var TOOLTIPS = {
+ 'read': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_NO_MORE_THAN_SIZE,
+ 'readline': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_ONE_LINE_NO_MORE_THAN_SIZE,
+ 'readlines': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL_LINES_NO_MORE_THAN_SIZE
+ };
+ return mode0 + TOOLTIPS[mode] + 'x' + mode2;
+ });
+ }
+};
+
+const storage_get_a_line = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILE")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FROM_FILE);
+ this.setNextStatement(true);
+ this.appendValueInput("SIZE")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_ONE_LINE_NO_MORE_THAN_SIZE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER);
+ this.setInputsInline(true);
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setOutput(true, String);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_PYTHON_TYPE);
+ }
+};
+
+const storage_can_write_ornot = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILE")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_FILE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_CAN_WRITE_ORNOT);
+ this.setInputsInline(true);
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setOutput(true, Boolean);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_CAN_WRITE_ORNOT1);
+ }
+};
+
+const storage_get_filename = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILE")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FILENAME);
+ this.setInputsInline(true);
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setOutput(true, String);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_FILENAME);
+ }
+};
+
+const storage_close_file = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILE")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_CLOSE_FILE);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setOutput(false);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_CLOSE_FILE);
+ }
+};
+
+const storage_list_all_files = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_LIST_ALL_FILES);
+ this.setInputsInline(true);
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setOutput(true, 'List');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_LIST_ALL_FILES);
+ }
+};
+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_DELETE_FILE
+const storage_delete_file = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_DELETE_FILE, 'remove'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_DELETE_DIRS, 'removedirs']
+ ]), 'MODE');
+ this.appendValueInput("FILE")
+ .setCheck(String);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setOutput(false);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_DELETE_FILE);
+ }
+};
+
+const storage_get_file_size = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILE")
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_FILE_SIZE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_SIZE);
+ this.setInputsInline(true);
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_FILE_SIZE + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_SIZE);
+ }
+};
+
+const storage_file_tell = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILE")
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_RETURN_FILE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_PRESENT_LOCATION);
+ this.setInputsInline(true);
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_TELL);
+ }
+};
+
+const storage_file_seek = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILE")
+ .setCheck('Variable')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_SET_FILE_POSITION);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_CURRENT_POSITION);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_START, 'start'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_CURRENT, 'current'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_END, 'end']
+ ]), 'MODE');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_OFFSET);
+ this.appendValueInput("SIZE")
+ .setCheck(Number);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true); //in front of the block has something
+ this.setNextStatement(true); //beyond the ... has something
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('MODE');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_SET_FILE_POSITION + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_CURRENT_POSITION;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER;
+ var mode3 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_OFFSET;
+ var TOOLTIPS = {
+ 'start': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_START,
+ 'current': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_CURRENT,
+ 'end': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_END
+ };
+ return mode0 + " " + TOOLTIPS[mode] + mode3 + 'x' + mode2;
+ });
+ }
+};
+
+const storage_get_current_dir = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_CURRENT_DIR);
+ this.setInputsInline(true);
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setOutput(true, 'List');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_CURRENT_DIR);
+ }
+};
+
+const storage_make_dir = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("PATH")
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_PATH);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SET);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_MKDIR, 'mkdir'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_MAKEDIRS, 'makedirs']
+ ]), 'MODE');
+ this.setInputsInline(true);
+ this.setPreviousStatement(true); //in front of the block has something
+ this.setNextStatement(true); //beyond the ... has something
+ this.setOutput(false);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('MODE');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_PATH;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ESP32_SET;
+ var TOOLTIPS = {
+ 'mkdir': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_MKDIR,
+ 'makedirs': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKEDIRS
+ };
+ return mode0 + 'x' + mode2 + TOOLTIPS[mode];
+ });
+ }
+};
+
+const storage_rename = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILE")
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_RENAME);
+ this.appendValueInput("NEWFILE")
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_AS);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setOutput(false);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_RENAME);
+ }
+};
+
+const storage_change_dir = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILE")
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_CHANGE_DIR);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setOutput(false);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_CHANGE_DIR);
+ }
+};
+
+const storage_is_file = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput("FILE")
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_IS_OR_NOT);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_FILE, 'isfile'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_IS_DIR, 'isdir']
+ ]), 'MODE');
+ this.setInputsInline(true);
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setOutput(true, Boolean);
+ let thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('MODE');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH;
+ var mode2 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_IS_OR_NOT;
+ var TOOLTIPS = {
+ 'isfile': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_MKDIR,
+ 'isdir': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKEDIRS
+ };
+ return mode0 + 'x' + mode2 + TOOLTIPS[mode];
+ });
+ }
+};
+
+const sdcard_use_spi_init = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput('SPISUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.CONTROLS_FOR_INPUT_WITH + "SPI")
+ .setCheck("var");
+ this.appendValueInput('PINSUB')
+ .appendField("CS")
+ this.appendValueInput('SUB')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
+ .setCheck("var");
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SETUP + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SD_CARD);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ }
+};
+
+const sdcard_mount = {
+ init: function () {
+ this.setColour(STORAGE_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SD_CARD);
+ this.appendValueInput("DIR")
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_SDCARD_MOUNT);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setInputsInline(true);
+ this.setTooltip();
+ }
+}
+
+/***/ }),
+
+/***/ "../python/blocks/text.js":
+/*!********************************!*\
+ !*** ../python/blocks/text.js ***!
+ \********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ ascii_to_char: () => (/* binding */ ascii_to_char),
+/* harmony export */ char_to_ascii: () => (/* binding */ char_to_ascii),
+/* harmony export */ number_to_text: () => (/* binding */ number_to_text),
+/* harmony export */ os_system: () => (/* binding */ os_system),
+/* harmony export */ text: () => (/* binding */ text),
+/* harmony export */ text_capital: () => (/* binding */ text_capital),
+/* harmony export */ text_center: () => (/* binding */ text_center),
+/* harmony export */ text_char: () => (/* binding */ text_char),
+/* harmony export */ text_char_at: () => (/* binding */ text_char_at),
+/* harmony export */ text_char_at2: () => (/* binding */ text_char_at2),
+/* harmony export */ text_char_at3: () => (/* binding */ text_char_at3),
+/* harmony export */ text_compareTo: () => (/* binding */ text_compareTo),
+/* harmony export */ text_compare_to: () => (/* binding */ text_compare_to),
+/* harmony export */ text_create_with_container: () => (/* binding */ text_create_with_container),
+/* harmony export */ text_create_with_item: () => (/* binding */ text_create_with_item),
+/* harmony export */ text_encode: () => (/* binding */ text_encode),
+/* harmony export */ text_equals_starts_ends: () => (/* binding */ text_equals_starts_ends),
+/* harmony export */ text_eval: () => (/* binding */ text_eval),
+/* harmony export */ text_find: () => (/* binding */ text_find),
+/* harmony export */ text_format: () => (/* binding */ text_format),
+/* harmony export */ text_format_noreturn: () => (/* binding */ text_format_noreturn),
+/* harmony export */ text_join: () => (/* binding */ text_join),
+/* harmony export */ text_join_seq: () => (/* binding */ text_join_seq),
+/* harmony export */ text_length: () => (/* binding */ text_length),
+/* harmony export */ text_random_char: () => (/* binding */ text_random_char),
+/* harmony export */ text_replace: () => (/* binding */ text_replace),
+/* harmony export */ text_split: () => (/* binding */ text_split),
+/* harmony export */ text_strip: () => (/* binding */ text_strip),
+/* harmony export */ text_substring: () => (/* binding */ text_substring),
+/* harmony export */ text_substring2: () => (/* binding */ text_substring2),
+/* harmony export */ text_substring3: () => (/* binding */ text_substring3),
+/* harmony export */ text_textarea: () => (/* binding */ text_textarea)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const TEXTS_HUE = 160//'#9ec440'//160;
+
+const text = {
+ /**
+ * Block for text value.
+ * @this Blockly.Block
+ */
+ init: function () {
+ //this.setHelpUrl(Blockly.Msg.TEXT_TEXT_HELPURL);
+ this.setColour(TEXTS_HUE);
+ this.appendDummyInput()
+ .appendField(this.newQuote_(true))
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput(''), 'TEXT')
+ .appendField(this.newQuote_(false));
+ this.setOutput(true, String);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TEXT_TOOLTIP);
+ },
+ /**
+ * Create an image of an open or closed quote.
+ * @param {boolean} open True if open quote, false if closed.
+ * @return {!Blockly.FieldImage} The field image of the quote.
+ * @private
+ */
+ newQuote_: function (open) {
+ if (open == this.RTL) {
+ var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==';
+ } else {
+ var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC';
+ }
+ return new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldImage(file, 12, 12, '"');
+ }
+};
+
+const text_textarea = {
+ /**
+ * Block for text value.
+ * @this Blockly.Block
+ */
+ init: function () {
+ //this.setHelpUrl(Blockly.Msg.TEXT_TEXT_HELPURL);
+ this.setColour(TEXTS_HUE);
+ this.appendDummyInput()
+ .appendField(this.newQuote_(true))
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldMultilineInput('Hello\nMixly'), 'VALUE')
+ // .appendField(new Blockly.FieldTextInput(''), 'TEXT')
+ .appendField(this.newQuote_(false));
+ this.setOutput(true, String);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_LINES_TOOLTIP);
+ },
+ /**
+ * Create an image of an open or closed quote.
+ * @param {boolean} open True if open quote, false if closed.
+ * @return {!Blockly.FieldImage} The field image of the quote.
+ * @private
+ */
+ newQuote_: function (open) {
+ if (open == this.RTL) {
+ var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==';
+ } else {
+ var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC';
+ }
+ return new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldImage(file, 12, 12, '"');
+ }
+};
+
+blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput.char_validator = function (text) {
+ if (text.length > 1) {
+ if (text.charAt(0) === "\\") {
+ var charAtOne = text.charAt(1);
+ if (charAtOne === "0" ||
+ charAtOne === "b" ||
+ charAtOne === "f" ||
+ charAtOne === "n" ||
+ charAtOne === "r" ||
+ charAtOne === "t" ||
+ charAtOne === "\\" ||
+ charAtOne === "'") {
+ return String(text).substring(0, 2);
+ } else if (charAtOne === "x" && text.charAt(2) === "0" && text.charAt(3) === "B") {
+ return String(text).substring(0, 4);
+ }
+ }
+ }
+ return String(text).substring(0, 1);
+};
+
+const text_char = {
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendDummyInput()
+ .appendField(this.newQuote_(true))
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('', blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput.char_validator), 'TEXT')
+ .appendField(this.newQuote_(false));
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHAR_TOOLTIP);
+ },
+ newQuote_: function (open) {
+ if (open == true) {
+ var file = '../../media/quote2.png';
+ } else {
+ var file = '../../media/quote3.png';
+ }
+ return new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldImage(file, 7, 12, '"');
+ }
+};
+
+
+const text_join = {
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput('A')
+ .setCheck([String, Number]);
+ this.appendValueInput('B')
+ .setCheck([String, Number])
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TEXT_JOIN);
+ this.setInputsInline(true);
+ this.setOutput(true, String);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TEXT_JOIN);
+ }
+};
+
+const ascii_to_char = {
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput('VAR')
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOCHAR);
+ this.setOutput(true, String);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TEXT_TOCHAR);
+ }
+};
+
+const char_to_ascii = {
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput('VAR')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOASCII);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TEXT_TOASCII);
+ }
+};
+
+const number_to_text = {
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOSTRING);
+ this.setOutput(true, String);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TOOLTIP_TOTEXT);
+ }
+};
+
+const text_length = {
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput("VAR")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LENGTH);
+ this.setOutput(true, Number);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TEXT_LENGTH);
+ }
+}
+
+
+
+const text_char_at2 = {
+ init: function () {
+ this.WHERE_OPTIONS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_START, "FROM_START"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_END, "FROM_END"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_GET_INDEX_RANDOM + 1 + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT2, "RANDOM"]
+ ];
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_HELPURL);
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput("VAR")
+ .setCheck(String)
+ // .appendField(Blockly.Msg.MIXLY_MICROBIT_TYPE_LIST)
+ this.appendValueInput("AT")
+ .setCheck(Number)
+ this.appendDummyInput()
+ //.appendField(Blockly.Msg.MIXLY_MID)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_GET, "MODE");
+ // .appendField("", "SPACE");
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_TAIL && this.appendDummyInput("TAIL").appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_TAIL);
+ // this.appendDummyInput().appendField(Blockly.Msg.MIXLY_DE);
+ this.setInputsInline(!0);
+ this.setOutput(!0);
+ this.updateAt_(!0);
+ var b = this;
+ this.setTooltip(function () {
+ var a = b.getFieldValue("MODE"),
+ e = b.getFieldValue("WHERE"),
+ d = "";
+ switch (a + " " + e) {
+ case "GET FROM_START":
+ case "GET FROM_END":
+ d = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM;
+ break;
+ case "GET RANDOM":
+ d = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM;
+ break;
+ case "GET_REMOVE FROM_START":
+ case "GET_REMOVE FROM_END":
+ d = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM;
+ break;
+ case "GET_REMOVE RANDOM":
+ d = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM;
+ break;
+ }
+ if ("FROM_START" == e || "FROM_END" == e) d += " " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_INDEX_FROM_START_TOOLTIP.replace("%1", blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.ONE_BASED_INDEXING ? "#1" : "#0");
+ return d
+ })
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('WHERE');
+ var TOOLTIPS = {
+ 'FROM_START': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_START,
+ 'FROM_END': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_END,
+ 'RANDOM': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_GET_INDEX_RANDOM
+ };
+ return blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_STRING + TOOLTIPS[mode] + 'n' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT2;
+ });
+ },
+ mutationToDom: function () {
+ var a = document.createElement("mutation");
+ a.setAttribute("statement", !this.outputConnection);
+ var b = this.getInput("AT").type == blockly_core__WEBPACK_IMPORTED_MODULE_0__.INPUT_VALUE;
+ a.setAttribute("at", b);
+ return a
+ },
+ domToMutation: function (a) {
+ var b = "true" == a.getAttribute("statement");
+ this.updateStatement_(b);
+ a = "false" != a.getAttribute("at");
+ this.updateAt_(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), blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT2 && this.appendDummyInput("ORDINAL").appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT2)) : this.appendDummyInput("AT");
+ var b = new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(this.WHERE_OPTIONS,
+ function (b) {
+ var e = "FROM_START" == b || "FROM_END" == b;
+ if (e != a) {
+ var d = this.sourceBlock_;
+ d.updateAt_(e);
+ d.setFieldValue(b, "WHERE");
+ return null
+ }
+ });
+ this.getInput("AT").appendField(b, "WHERE");
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_TAIL && this.moveInputBefore("TAIL", null)
+ }
+};
+
+
+const text_char_at = {
+ init: function () {
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_HELPURL);
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput("VAR")
+ .setCheck(String);
+ this.appendValueInput("AT")
+ .setCheck(Number)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_GET + " " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_START);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT2);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_DEFRETURN_RETURN + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_STRING + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_START + 'n' + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT2);
+ }
+}
+
+
+const text_random_char = {
+ init: function () {
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_HELPURL);
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput("VAR")
+ .setCheck(String);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_RANDOM_CHAR);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_RANDOM_CHAR_TOOLTIP);
+ }
+}
+
+
+const text_substring2 = {
+ /**
+ * Block for getting sublist.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this['WHERE_OPTIONS_1'] = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_START, 'FROM_START'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_END, 'FROM_END'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_START_FIRST, 'FIRST']
+ ];
+ this['WHERE_OPTIONS_2'] = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_END_FROM_START, 'FROM_START'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_END_FROM_END, 'FROM_END'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_END_LAST, 'LAST']
+ ];
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_HELPURL);
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput("VAR")
+ .setCheck(String)
+ //.appendField(Blockly.Msg.LISTS_GET_SUBLIST_TAIL)
+ // if (Blockly.Msg.LISTS_GET_SUBLIST_TAIL) {
+ // this.appendDummyInput('TAIL')
+ // .appendField(Blockly.Msg.LISTS_GET_SUBLIST_TAIL);
+ // }
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
+ this.appendDummyInput('AT1');
+ this.appendDummyInput('AT2');
+ this.setInputsInline(true);
+ this.setOutput(true, 'List');
+ this.updateAt_(1, true);
+ this.updateAt_(2, true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg._GET_TEXT_SUBLIST_TOOLTIP);
+ },
+ /**
+ * Create XML to represent whether there are 'AT' inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ var isAt1 = this.getInput('AT1').type == blockly_core__WEBPACK_IMPORTED_MODULE_0__.INPUT_VALUE;
+ container.setAttribute('at1', isAt1);
+ var isAt2 = this.getInput('AT2').type == blockly_core__WEBPACK_IMPORTED_MODULE_0__.INPUT_VALUE;
+ container.setAttribute('at2', isAt2);
+ return container;
+ },
+ /**
+ * Parse XML to restore the 'AT' inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ var isAt1 = (xmlElement.getAttribute('at1') == 'true');
+ var isAt2 = (xmlElement.getAttribute('at2') == 'true');
+ this.updateAt_(1, isAt1);
+ this.updateAt_(2, isAt2);
+ },
+ /**
+ * Create or delete an input for a numeric index.
+ * This block has two such inputs, independant of each other.
+ * @param {number} n Specify first or second input (1 or 2).
+ * @param {boolean} isAt True if the input should exist.
+ * @private
+ * @this Blockly.Block
+ */
+ updateAt_: function (n, isAt) {
+ // Create or delete an input for the numeric index.
+ // Destroy old 'AT' and 'ORDINAL' inputs.
+ this.removeInput('AT' + n);
+ this.removeInput('ORDINAL' + n, true);
+ // Create either a value 'AT' input or a dummy input.
+ if (isAt) {
+ this.appendValueInput('AT' + n).setCheck(Number);
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT2) {
+ this.appendDummyInput('ORDINAL' + n)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT2);
+ }
+ } else {
+ this.appendDummyInput('AT' + n);
+ }
+ var menu = new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(this['WHERE_OPTIONS_' + n],
+ function (value) {
+ var newAt = (value == 'FROM_START') || (value == 'FROM_END');
+ // The 'isAt' variable is available due to this function being a
+ // closure.
+ if (newAt != isAt) {
+ var block = this.sourceBlock_;
+ block.updateAt_(n, newAt);
+ // This menu has been destroyed and replaced.
+ // Update the replacement.
+ block.setFieldValue(value, 'WHERE' + n);
+ return null;
+ }
+ return undefined;
+ });
+ this.getInput('AT' + n)
+ .appendField(menu, 'WHERE' + n);
+ if (n == 1) {
+ this.moveInputBefore('AT1', 'AT2');
+ if (this.getInput('ORDINAL1')) {
+ this.moveInputBefore('ORDINAL1', 'AT2');
+ }
+ }
+ // if (Blockly.Msg.LISTS_GET_SUBLIST_TAIL) {
+ // this.moveInputBefore('TAIL', null);
+ // }
+ }
+};
+
+const text_substring = {
+ /**
+ * Block for getting sublist.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_HELPURL);
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput("VAR")
+ .setCheck(String)
+ this.appendValueInput('AT1')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_GET + " " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_START);
+ this.appendValueInput('AT2')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_END_FROM_START);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT2);
+ this.setInputsInline(true);
+ this.setOutput(true, ['List', String]);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg._GET_TEXT_SUBLIST_TOOLTIP);
+ }
+}
+
+const text_equals_starts_ends = {
+ init: function () {
+ var TEXT_DOWHAT = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_EQUALS, '==='],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_STARTSWITH, 'startswith'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_ENDSWITH, 'endswith']
+ ];
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput("STR1")
+ .setCheck(String);
+ this.appendValueInput("STR2")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(TEXT_DOWHAT), 'DOWHAT')
+ .setCheck(String);
+ this.setOutput(true, [Boolean, Number]);
+ this.setInputsInline(true);
+ }
+}
+
+const text_compare_to = {
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput("STR1")
+ .setCheck(String);
+ this.appendValueInput("STR2")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMPARETO)
+ .setCheck(String);
+ this.setOutput(true, Number);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_COMPARETO_HELP);
+ }
+}
+
+const text_capital = {
+ init: function () {
+ var TEXT_CAPITAL = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_UPPER, 'upper'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TITLE, 'title'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CAPITALIZE, 'capitalize'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_SWAPCASE, 'swapcase'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_LOWER, 'lower']
+ ];
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput("VAR")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(TEXT_CAPITAL), 'CAPITAL')
+ .setCheck(String);
+ this.setOutput(true, String);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('CAPITAL');
+ var TOOLTIPS = {
+ 'upper': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TEXT_UPPER_TOOLTIP,
+ 'title': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TEXT_TITLE_TOOLTIP,
+ 'swapcase': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TEXT_SWAPCASE_TOOLTIP,
+ 'capitalize': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TEXT_CAPITALIZE_TOOLTIP,
+ 'lower': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TEXT_LOWER_TOOLTIP
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+}
+
+const text_center = {
+ init: function () {
+ var TEXT_CENTER = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_LJUST, 'ljust'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CENTER, 'center'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_RJUST, 'rjust']
+ ];
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput("VAR")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(TEXT_CENTER), 'CENTER')
+ .setCheck(String);
+ this.appendValueInput("WID")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_WIDTH)
+ .setCheck(Number);
+ this.appendValueInput("Symbol")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_RECT_Fill)
+ .setCheck(String);
+ this.setInputsInline(true);
+ this.setOutput(true, String);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TEXT_CENTER_TOOLTIP);
+ }
+}
+
+const text_find = {
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput("VAR")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .setCheck(String);
+ this.appendValueInput("STR")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MID + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER)
+ .setCheck(String);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_INDEX);
+ this.setInputsInline(true);
+ this.setOutput(true, String);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TEXT_FIND_TOOLTIP);
+ }
+}
+
+const text_join_seq = {
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput("VAR")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TEXT_JOIN_SEQ_USE_STR)
+ .setCheck(String);
+ this.appendValueInput('LIST')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TEXT_JOIN_SEQ_SEQ)
+ .setCheck('List', 'Tuple', 'Set', 'Dict');
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TEXT_JOIN_SEQ_GET_STR);
+ this.setInputsInline(true);
+ this.setOutput(true, String);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TEXT_JOIN_SEQ_TOOLTIP);
+ }
+}
+
+const text_replace = {
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput("VAR")
+ .setCheck(String);
+ this.appendValueInput("STR1")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_REPLACE)
+ .setCheck(String);
+ this.appendValueInput("STR2")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_SET_INDEX_INPUT_TO)
+ .setCheck(String);
+ this.setInputsInline(true);
+ this.setOutput(true, String);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TEXT_REPLACE_TOOLTIP);
+ }
+}
+
+const text_split = {
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput("VAR");
+ this.appendValueInput("VAL")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LIST_SPLIT_AS);
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LIST_SPLIT);
+ this.setOutput(true, "List");
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TEXT_SPLIT_TOOLTIP);
+ this.setInputsInline(true);
+ }
+}
+
+const text_strip = {
+ init: function () {
+ var STRIP =
+ [[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_BOTH, 'strip'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT, 'lstrip'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT, 'rstrip']];
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput('VAR')
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_STRIM);
+ this.appendDummyInput('')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(STRIP), 'TOWHAT');
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_BLANK);
+ this.setOutput(true, String);
+ this.setInputsInline(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('TOWHAT');
+ var TOOLTIPS = {
+ 'strip': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_BOTH_TOOLTIP,
+ 'lstrip': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_LEFT_TOOLTIP,
+ 'rstrip': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_TRIM_RIGHT_TOOLTIP
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const text_format = {
+ /**
+ * Block for creating a list with any number of elements of any type.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_FORMAT)
+ //don't need to specify the data type in Python
+ // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'Array'], [Blockly.Msg.LANG_MATH_STRING, 'Array'], [Blockly.Msg.LANG_MATH_BOOLEAN, 'Array']]), 'TYPE')
+ // .appendField(' ')
+ this.appendDummyInput("")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('str'), 'VAR');
+ this.itemCount_ = 1;
+ this.updateShape_();
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setInputsInline(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['text_create_with_item'], this));
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TEXT_FORMAT_TOOLTIP);
+ },
+ /**
+ * Create XML to represent list inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+ /**
+ * Parse XML to restore the list inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('text_create_with_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('text_create_with_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @private
+ * @this Blockly.Block
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ var i = 0;
+ while (this.getInput('ADD' + i)) {
+ this.removeInput('ADD' + i);
+ i++;
+ }
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.appendDummyInput('EMPTY')
+ .appendField();
+ } else {
+ for (var i = 0; i < this.itemCount_; i++) {
+ var input = this.appendValueInput('ADD' + i);
+ if (i == 0) {
+ input.appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_BEFORE_PARAMS);
+ }
+ }
+ }
+ },
+ getVars: function () {
+ if (this.getFieldValue('VAR') != null) {
+ if ((this.getFieldValue('VAR').indexOf("'") == -1) && (this.getFieldValue('VAR').indexOf('"') == -1)) {
+ return [this.getFieldValue('VAR')];
+ }
+ return [];
+ }
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+
+ }
+};
+
+const text_create_with_container = {
+ /**
+ * Mutator block for list container.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_MUTATORCONTAINER_TITLE);
+ this.appendStatementInput('STACK');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_CREATE_WITH_CONTAINER_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const text_create_with_item = {
+ /**
+ * Mutator bolck for adding items.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_VARIABLES_NAME);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_CREATE_WITH_ITEM_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const text_substring3 = text_substring
+const text_compareTo = text_compare_to
+const text_char_at3 = text_char_at
+
+const text_format_noreturn = {
+ /**
+ * Block for creating a list with any number of elements of any type.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROPYTHON_FORMAT)
+ //don't need to specify the data type in Python
+ // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'Array'], [Blockly.Msg.LANG_MATH_STRING, 'Array'], [Blockly.Msg.LANG_MATH_BOOLEAN, 'Array']]), 'TYPE')
+ // .appendField(' ')
+ this.appendValueInput("VAR")
+ .setCheck(String);
+ this.itemCount_ = 1;
+ this.updateShape_();
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setInputsInline(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['text_create_with_item'], this));
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_TEXT_FORMAT_TOOLTIP);
+ },
+ /**
+ * Create XML to represent list inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+ /**
+ * Parse XML to restore the list inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('text_create_with_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('text_create_with_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @private
+ * @this Blockly.Block
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ var i = 0;
+ while (this.getInput('ADD' + i)) {
+ this.removeInput('ADD' + i);
+ i++;
+ }
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.appendDummyInput('EMPTY')
+ .appendField();
+ } else {
+ for (var i = 0; i < this.itemCount_; i++) {
+ var input = this.appendValueInput('ADD' + i);
+ if (i == 0) {
+ input.appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PROCEDURES_BEFORE_PARAMS);
+ }
+ }
+ }
+ }
+};
+
+
+
+const text_encode = {
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ var encode_decode =
+ [[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_TEXT_ENCODE, 'encode'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_TEXT_DECODE, 'decode']];
+ var code =
+ [['ASCII', 'ASCII'], ['gb2312', 'gb2312'], ['gbk', 'gbk'], ['utf-8', 'utf-8'], ['utf-16', 'utf-16'], ['utf-32', 'utf-32']];
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(code), 'CODE')
+ .appendField(' ')
+ this.appendValueInput("VAR")
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(encode_decode), 'DIR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_STRING);
+ this.setOutput(true, String);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_TEXT_ENCODE_DECODE_TOOLTIP);
+
+ }
+};
+
+
+const text_eval = {
+ init: function () {
+
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput('VAR')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TEXT_EVAL);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TEXT_EVAL_RESULT);
+ this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TEXT_EVAL_TOOLTIP);
+ }
+};
+
+const os_system = {
+ init: function () {
+ this.setColour(TEXTS_HUE);
+ this.appendValueInput('VAR')
+ .setCheck(String)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_OS_SYSTEM);
+ this.setInputsInline(true);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_OS_SYSTEM_TOOLTIP);
+ }
+};
+
+/***/ }),
+
+/***/ "../python/blocks/tuple.js":
+/*!*********************************!*\
+ !*** ../python/blocks/tuple.js ***!
+ \*********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ tuple_change_to: () => (/* binding */ tuple_change_to),
+/* harmony export */ tuple_create_with: () => (/* binding */ tuple_create_with),
+/* harmony export */ tuple_create_with_container: () => (/* binding */ tuple_create_with_container),
+/* harmony export */ tuple_create_with_item: () => (/* binding */ tuple_create_with_item),
+/* harmony export */ tuple_create_with_noreturn: () => (/* binding */ tuple_create_with_noreturn),
+/* harmony export */ tuple_create_with_text2: () => (/* binding */ tuple_create_with_text2),
+/* harmony export */ tuple_create_with_text_return: () => (/* binding */ tuple_create_with_text_return),
+/* harmony export */ tuple_del: () => (/* binding */ tuple_del),
+/* harmony export */ tuple_find: () => (/* binding */ tuple_find),
+/* harmony export */ tuple_getIndex: () => (/* binding */ tuple_getIndex),
+/* harmony export */ tuple_getSublist: () => (/* binding */ tuple_getSublist),
+/* harmony export */ tuple_get_random_item: () => (/* binding */ tuple_get_random_item),
+/* harmony export */ tuple_get_sublist: () => (/* binding */ tuple_get_sublist),
+/* harmony export */ tuple_input: () => (/* binding */ tuple_input),
+/* harmony export */ tuple_join: () => (/* binding */ tuple_join),
+/* harmony export */ tuple_length: () => (/* binding */ tuple_length),
+/* harmony export */ tuple_max: () => (/* binding */ tuple_max),
+/* harmony export */ tuple_totuple: () => (/* binding */ tuple_totuple),
+/* harmony export */ tuple_trig: () => (/* binding */ tuple_trig)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const TUPLE_HUE = 195; //'#5ec73d'//195;
+
+const tuple_create_with = {
+ /**
+ * Block for creating a list with any number of elements of any type.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(TUPLE_HUE);
+ this.appendDummyInput("")
+ //don't need to specify the data type in Python
+ // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'Array'], [Blockly.Msg.LANG_MATH_STRING, 'Array'], [Blockly.Msg.LANG_MATH_BOOLEAN, 'Array']]), 'TYPE')
+ // .appendField(' ')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('mytup'), 'VAR');
+ this.itemCount_ = 3;
+ this.updateShape_();
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['tuple_create_with_item'], this));
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_CREATE_WITH_TOOLTIP);
+ },
+ /**
+ * Create XML to represent list inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+ /**
+ * Parse XML to restore the list inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('tuple_create_with_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('tuple_create_with_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @private
+ * @this Blockly.Block
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ var i = 0;
+ while (this.getInput('ADD' + i)) {
+ this.removeInput('ADD' + i);
+ i++;
+ }
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.appendDummyInput('EMPTY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_CREATE_EMPTY_TITLE);
+ } else {
+ for (var i = 0; i < this.itemCount_; i++) {
+ var input = this.appendValueInput('ADD' + i);
+ if (i == 0) {
+ input.appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_CREATE_WITH_INPUT_WITH);
+ }
+ }
+ }
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+};
+
+const tuple_create_with_container = {
+ /**
+ * Mutator block for list container.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(TUPLE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_CREATE_WITH_CONTAINER_TITLE_ADD);
+ this.appendStatementInput('STACK');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_CREATE_WITH_CONTAINER_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const tuple_create_with_item = {
+ /**
+ * Mutator bolck for adding items.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(TUPLE_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_VARIABLES_NAME);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_CREATE_WITH_ITEM_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const tuple_create_with_text2 = {
+ init: function () {
+ this.setColour(TUPLE_HUE);
+ this.appendDummyInput("")
+ //don't need to specify the data type in Python
+ // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'Array']]), 'TYPE')
+ // .appendField(' ')
+ // .appendField(Blockly.Msg.blockpy_MIXLY_TUPLE_CREATE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('mytup'), 'VAR')
+ //.appendField(new Blockly.FieldTextInput('3',Blockly.FieldTextInput.math_number_validator), 'SIZE')
+ // .appendField(Blockly.Msg.MIXLY_MAKELISTFROM)
+ // .appendField(this.newQuote_(true))
+ .appendField(' = (')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('0,0,0'), 'TEXT')
+ .appendField(')');
+ // .appendField(this.newQuote_(false))
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_TOOLTIP_TUPLE_CREATE_WITH_TEXT);
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+ // newQuote_: function(open) {
+ // if (open == this.RTL) {
+ // var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==';
+ // } else {
+ // var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC';
+ // }
+ // return new Blockly.FieldImage(file, 12, 12, '"');
+ // }
+}
+
+const tuple_create_with_text_return = {
+ init: function () {
+ this.setColour(TUPLE_HUE);
+ this.appendDummyInput("")
+ .appendField('(')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('0,0,0'), 'TEXT')
+ .appendField(')');
+ // .appendField(this.newQuote_(false))
+ this.setOutput(true);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXPY_TOOLTIP_TUPLE_CREATE_WITH_TEXT);
+ // },
+ // getVars: function() {
+ // return [this.getFieldValue('VAR')];
+ // },
+ // renameVar: function(oldName, newName) {
+ // if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ // this.setTitleValue(newName, 'VAR');
+ // }
+ }
+ // newQuote_: function(open) {
+ // if (open == this.RTL) {
+ // var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==';
+ // } else {
+ // var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC';
+ // }
+ // return new Blockly.FieldImage(file, 12, 12, '"');
+ // }
+}
+
+const tuple_getIndex = {
+ init: function () {
+ this.setColour(TUPLE_HUE);
+ this.setOutput(true);
+ this.appendValueInput('TUP')
+ .setCheck('Tuple')
+ this.appendValueInput('AT')
+ .setCheck(Number)
+
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_LISTS_GET_INDEX1);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_LISTS_GET_INDEX2);
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_GET_INDEX_TOOLTIP);
+ }
+};
+
+const tuple_length = {
+ /**
+ * Block for list length.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(TUPLE_HUE);
+ this.appendValueInput('TUP');
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LENGTH);
+
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_LENGTH_TOOLTIP);
+ this.setOutput(true, Number);
+ }
+};
+
+const tuple_del = {
+ /**
+ * Block for list length.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(TUPLE_HUE);
+ this.appendValueInput('TUP')
+ .setCheck('Tuple')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_DEL);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_DEL_TOOLTIP);
+ }
+};
+
+const tuple_join = {
+ /**
+ * Block for list length.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(TUPLE_HUE);
+ this.appendValueInput('TUP1')
+ .setCheck('Tuple')
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_JOIN)
+ this.appendValueInput('TUP2')
+ .setCheck('Tuple')
+ this.setInputsInline(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_JOIN_TOOLTIP);
+ this.setOutput(true, "Tuple");
+ }
+};
+
+
+const tuple_max = {
+ init: function () {
+ this.appendValueInput('TUP')
+ .setCheck('Tuple')
+ var max_min =
+ [[blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_TUPLE_MAX, 'max'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_TUPLE_MIN, 'min'], [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_SUM, 'sum']];
+ this.setColour(TUPLE_HUE);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_JS_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(max_min), 'DIR')
+
+
+ this.setInputsInline(true);
+ this.setOutput(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('DIR');
+ var TOOLTIPS = {
+ 'max': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TUPLE_MAX,
+ 'min': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TUPLE_MIN,
+ 'sum': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TUPLE_SUM
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const tuple_change_to = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_LIST, 'list'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD, 'set']
+ ];
+ this.setColour(TUPLE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck("Tuple")
+ // .appendField(Blockly.Msg.blockpy_USE_LIST);
+ this.appendDummyInput("")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.A_TO_B)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setInputsInline(true);
+ this.setOutput(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'list': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_TO_LISTS,
+ 'set': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_TO_SET,
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const tuple_find = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_INDEX, 'INDEX'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_COUNT, 'COUNT']
+ ];
+ this.setColour(TUPLE_HUE);
+ this.appendValueInput('VAR')
+ .setCheck('List')
+ this.appendValueInput('data')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.HTML_VALUE)
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_DE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ //.appendField(new Blockly.FieldTextInput('mylist'), 'VAR')
+ this.setInputsInline(true);
+ this.setOutput(true, Number);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'INDEX': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TUPLE_FIND_INDEX,
+ 'COUNT': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOOLTIP_TUPLE_FIND_COUNT
+
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const tuple_trig = {
+ init: function () {
+ var OPERATORS = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_LIST_LEN, 'LEN'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_SUM, 'SUM'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_MAX, 'MAX'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_MIN, 'MIN'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_AVERAGE, 'AVERAGE'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_MEDIAN, 'MEDIAN'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_MODE, 'MODE'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_OPERATOR_STD_DEV, 'STD_DEV'],
+ ];
+ //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);
+ this.setColour(TUPLE_HUE);
+ this.setOutput(true, Number);
+ this.appendValueInput('data')
+ .setCheck('List')
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(OPERATORS), 'OP');
+ this.setInputsInline(true);
+ // Assign 'this' to a variable for use in the tooltip closure below.
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('OP');
+ var TOOLTIPS = {
+ 'LEN': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_LENGTH_TOOLTIP,
+ 'SUM': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_TOOLTIP_TUPLE_SUM,
+ 'MAX': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_TOOLTIP_TUPLE_MAX,
+ 'MIN': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_TOOLTIP_TUPLE_MIN,
+ 'AVERAGE': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_TOOLTIP_TUPLE_AVERAGE,
+ 'MEDIAN': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_TOOLTIP_TUPLE_MEDIAN,
+ 'MODE': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_TOOLTIP_TUPLE_MODE,
+ 'STD_DEV': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MATH_ONLIST_TOOLTIP_TUPLE_STD_DEV
+
+ };
+ return TOOLTIPS[mode];
+ });
+ }
+};
+
+const tuple_getSublist = {
+ /**
+ * Block for getting sublist.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this['WHERE_OPTIONS_1'] = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_START, 'FROM_START'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_END, 'FROM_END'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_START_FIRST, 'FIRST']
+ ];
+ this['WHERE_OPTIONS_2'] = [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_END_FROM_START, 'FROM_START'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_END_FROM_END, 'FROM_END'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_END_LAST, 'LAST']
+ ];
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_HELPURL);
+ this.setColour(TUPLE_HUE);
+ this.appendValueInput('LIST')
+ .setCheck('List')
+ //.appendField(Blockly.Msg.LISTS_GET_SUBLIST_TAIL)
+ // if (Blockly.Msg.LISTS_GET_SUBLIST_TAIL) {
+ // this.appendDummyInput('TAIL')
+ // .appendField(Blockly.Msg.LISTS_GET_SUBLIST_TAIL);
+ // }
+ this.appendDummyInput('')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
+ this.appendDummyInput('AT1');
+ this.appendDummyInput('AT2');
+ this.setInputsInline(true);
+ this.setOutput(true, 'List');
+ this.updateAt_(1, true);
+ this.updateAt_(2, true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PYTHON_TUPLE_GET_SUBLIST_TOOLTIP);
+ },
+ /**
+ * Create XML to represent whether there are 'AT' inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ var isAt1 = this.getInput('AT1').type == blockly_core__WEBPACK_IMPORTED_MODULE_0__.INPUT_VALUE;
+ container.setAttribute('at1', isAt1);
+ var isAt2 = this.getInput('AT2').type == blockly_core__WEBPACK_IMPORTED_MODULE_0__.INPUT_VALUE;
+ container.setAttribute('at2', isAt2);
+ return container;
+ },
+ /**
+ * Parse XML to restore the 'AT' inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ var isAt1 = (xmlElement.getAttribute('at1') == 'true');
+ var isAt2 = (xmlElement.getAttribute('at2') == 'true');
+ this.updateAt_(1, isAt1);
+ this.updateAt_(2, isAt2);
+ },
+ /**
+ * Create or delete an input for a numeric index.
+ * This block has two such inputs, independant of each other.
+ * @param {number} n Specify first or second input (1 or 2).
+ * @param {boolean} isAt True if the input should exist.
+ * @private
+ * @this Blockly.Block
+ */
+ updateAt_: function (n, isAt) {
+ // Create or delete an input for the numeric index.
+ // Destroy old 'AT' and 'ORDINAL' inputs.
+ this.removeInput('AT' + n);
+ this.removeInput('ORDINAL' + n, true);
+ // Create either a value 'AT' input or a dummy input.
+ if (isAt) {
+ this.appendValueInput('AT' + n).setCheck(Number);
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT_TAIL) {
+ this.appendDummyInput('ORDINAL' + n)
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT_TAIL);
+ }
+ } else {
+ this.appendDummyInput('AT' + n);
+ }
+ var menu = new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(this['WHERE_OPTIONS_' + n],
+ function (value) {
+ var newAt = (value == 'FROM_START') || (value == 'FROM_END');
+ // The 'isAt' variable is available due to this function being a
+ // closure.
+ if (newAt != isAt) {
+ var block = this.sourceBlock_;
+ block.updateAt_(n, newAt);
+ // This menu has been destroyed and replaced.
+ // Update the replacement.
+ block.setFieldValue(value, 'WHERE' + n);
+ return null;
+ }
+ return undefined;
+ });
+ this.getInput('AT' + n)
+ .appendField(menu, 'WHERE' + n);
+ if (n == 1) {
+ this.moveInputBefore('AT1', 'AT2');
+ if (this.getInput('ORDINAL1')) {
+ this.moveInputBefore('ORDINAL1', 'AT2');
+ }
+ }
+ // if (Blockly.Msg.LISTS_GET_SUBLIST_TAIL) {
+ // this.moveInputBefore('TAIL', null);
+ // }
+ }
+};
+
+const tuple_create_with_noreturn = {
+ /**
+ * Block for creating a list with any number of elements of any type.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(TUPLE_HUE);
+ this.itemCount_ = 3;
+ this.updateShape_();
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setOutput(true, "Tuple")
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['tuple_create_with_item'], this));
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_CREATE_WITH_TOOLTIP);
+ },
+ /**
+ * Create XML to represent list inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+ /**
+ * Parse XML to restore the list inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('tuple_create_with_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('tuple_create_with_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @private
+ * @this Blockly.Block
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ var i = 0;
+ while (this.getInput('ADD' + i)) {
+ this.removeInput('ADD' + i);
+ i++;
+ }
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.appendDummyInput('EMPTY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_CREATE_EMPTY_TITLE);
+ } else {
+ for (var i = 0; i < this.itemCount_; i++) {
+ var input = this.appendValueInput('ADD' + i);
+ if (i == 0) {
+ input.appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TUPLE_CREATE_WITH_INPUT_WITH);
+ }
+ }
+ }
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(oldName, this.getFieldValue('VAR'))) {
+ this.setTitleValue(newName, 'VAR');
+ }
+ }
+};
+
+const tuple_get_sublist = {
+ /**
+ * Block for getting sublist.
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setHelpUrl(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_HELPURL);
+ this.setColour(TUPLE_HUE);
+ this.appendValueInput('LIST')
+ this.appendDummyInput('')
+ this.appendValueInput('AT1')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + " " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_FROM_START);
+ this.appendValueInput('AT2')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT_TAIL + " " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_SUBLIST_END_FROM_START);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_CHARAT_TAIL);
+ this.setInputsInline(true);
+ this.setOutput(true, 'Tuple');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.PYTHON_TUPLE_GET_SUBLIST_TOOLTIP);
+ }
+}
+
+const tuple_get_random_item = {
+ init: function () {
+ this.setColour(TUPLE_HUE);
+ this.appendValueInput("TUP");
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + " " + blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_RANDOM)
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM);
+ this.setOutput(true);
+ }
+};
+
+const tuple_totuple = {
+ init: function () {
+ this.setColour(TUPLE_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_TOTUPLE);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_TOOLTIP_TOTUPLE);
+ }
+};
+
+const tuple_input = {
+ init: function () {
+ this.setColour(TUPLE_HUE);
+ this.appendDummyInput("")
+ .appendField('(')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput('0,0,0'),"CONTENT")
+ .appendField(')');
+ this.setOutput(true);
+ }
+};
+
+/***/ }),
+
+/***/ "../python/blocks/utility.js":
+/*!***********************************!*\
+ !*** ../python/blocks/utility.js ***!
+ \***********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ attribute_access: () => (/* binding */ attribute_access),
+/* harmony export */ function_call: () => (/* binding */ function_call),
+/* harmony export */ function_call_container: () => (/* binding */ function_call_container),
+/* harmony export */ function_call_item: () => (/* binding */ function_call_item),
+/* harmony export */ raw_block: () => (/* binding */ raw_block),
+/* harmony export */ raw_empty: () => (/* binding */ raw_empty),
+/* harmony export */ raw_expression: () => (/* binding */ raw_expression),
+/* harmony export */ raw_table: () => (/* binding */ raw_table),
+/* harmony export */ text_comment: () => (/* binding */ text_comment),
+/* harmony export */ text_print_multiple: () => (/* binding */ text_print_multiple),
+/* harmony export */ text_print_multiple_container: () => (/* binding */ text_print_multiple_container),
+/* harmony export */ text_print_multiple_item: () => (/* binding */ text_print_multiple_item),
+/* harmony export */ type_check: () => (/* binding */ type_check)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/**
+ * @license
+ * Visual Blocks Editor
+ *
+ * Copyright 2012 Google Inc.
+ * https://developers.google.com/blockly/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview Utility blocks for Blockly.
+ * @author acbart@vt.edu (Austin Cory Bart)
+ */
+
+
+const UTILITY_HUE = 160;
+
+const raw_table = {
+ // Container.
+ init: function () {
+ this.setColour(UTILITY_HUE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.appendDummyInput()
+ .appendField('Tabular Abstraction:');
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTable(''), 'TEXT');
+ }
+};
+
+const raw_block = {
+ // Container.
+ init: function () {
+ this.setColour(UTILITY_HUE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.appendDummyInput()
+ .appendField('Code Block:');
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldMultilineInput(''), 'TEXT');
+ }
+};
+
+const raw_expression = {
+ // Container.
+ init: function () {
+ this.setColour(UTILITY_HUE);
+ this.appendDummyInput()
+ .appendField('Code Expression:');
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldMultilineInput(''), 'TEXT');
+ this.setOutput(true);
+ }
+};
+
+const raw_empty = {
+ // Container.
+ init: function () {
+ this.setColour(UTILITY_HUE);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.appendValueInput('VALUE')
+ .appendField('');
+ this.setInputsInline(false);
+ }
+};
+
+const text_comment = {
+ // Text value.
+ init: function () {
+ this.setColour(UTILITY_HUE);
+ this.appendDummyInput()
+ .appendTitle('Comment:')
+ .appendTitle(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput(''), 'TEXT');
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip('This comment will be ignored by Python');
+ }
+};
+
+const type_check = {
+ // Set element at index.
+ init: function () {
+ this.setColour(UTILITY_HUE);
+ this.appendValueInput('VALUE')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TYPE_CHECK);
+ this.setInputsInline(false);
+ this.setOutput(true, 'Type');
+ //this.setPreviousStatement(true);
+ //this.setNextStatement(true);
+ }
+};
+
+
+const text_print_multiple = {
+ /**
+ * Block for printing multiple things (including nothing)
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(UTILITY_HUE);
+ this.itemCount_ = 1;
+ this.updateShape_();
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['text_print_multiple_item'], this));
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_PRINT_TOOLTIP);
+ },
+ /**
+ * Create XML to represent print inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+ /**
+ * Parse XML to restore the list inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Block.obtain(workspace,
+ 'text_print_multiple_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var x = 0; x < this.itemCount_; x++) {
+ var itemBlock = workspace.newBlock('text_print_multiple_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('PRINT' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ // Store a pointer to any connected child blocks.
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var x = 0;
+ while (itemBlock) {
+ var input = this.getInput('PRINT' + x);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ x++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @private
+ * @this Blockly.Block
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ var i = 0;
+ while (this.getInput('PRINT' + i)) {
+ this.removeInput('PRINT' + i);
+ i++;
+ }
+ }
+
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.appendDummyInput('EMPTY')
+ .appendField("print");
+ } else {
+ for (var i = 0; i < this.itemCount_; i++) {
+ var input = this.appendValueInput('PRINT' + i);
+ if (i == 0) {
+ input.appendField("print");
+ }
+ }
+ }
+ }
+};
+
+const text_print_multiple_container = {
+ // Container.
+ init: function () {
+ this.setColour(UTILITY_HUE);
+ this.appendDummyInput()
+ .appendField('print');
+ this.appendStatementInput('STACK');
+ this.setTooltip('');
+ this.contextMenu = false;
+ }
+};
+const text_print_multiple_item = {
+ // Add items.
+ init: function () {
+ this.setColour(UTILITY_HUE);
+ this.appendDummyInput()
+ .appendField('item');
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip('');
+ this.contextMenu = false;
+ }
+};
+
+const function_call = {
+ /**
+ * Block for printing multiple things (including nothing)
+ * @this Blockly.Block
+ */
+ init: function () {
+ this.setColour(UTILITY_HUE);
+ this.itemCount_ = 1;
+ this.hasReturn_ = false;
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput("str"), 'NAME');
+ this.updateShape_();
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['function_call_item'], this));
+ this.setTooltip("Can be used to call any function");
+ },
+ /**
+ * Create XML to represent print inputs.
+ * @return {Element} XML storage element.
+ * @this Blockly.Block
+ */
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ container.setAttribute('hasReturn', this.hasReturn_ ? "TRUE" : "FALSE");
+ return container;
+ },
+ /**
+ * Parse XML to restore the list inputs.
+ * @param {!Element} xmlElement XML storage element.
+ * @this Blockly.Block
+ */
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.hasReturn_ = xmlElement.getAttribute('hasReturn') === "TRUE";
+ this.updateShape_();
+ },
+ /**
+ * Populate the mutator's dialog with this block's components.
+ * @param {!Blockly.Workspace} workspace Mutator's workspace.
+ * @return {!Blockly.Block} Root block in mutator.
+ * @this Blockly.Block
+ */
+ decompose: function (workspace) {
+ var containerBlock = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Block.obtain(workspace,
+ 'function_call_container');
+ containerBlock.initSvg();
+
+ containerBlock.setFieldValue(this.hasStatements_ ? 'TRUE' : 'FALSE',
+ 'RETURN');
+
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var x = 0; x < this.itemCount_; x++) {
+ var itemBlock = workspace.newBlock('function_call_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+ /**
+ * Notification that the procedure's return state has changed.
+ * @param {boolean} returnState New return state
+ * @this Blockly.Block
+ */
+ setReturn: function (returnState) {
+ this.unplug(true, true);
+ this.setOutput(returnState);
+ this.setPreviousStatement(!returnState);
+ this.setNextStatement(!returnState);
+ if (this.rendered) {
+ this.render();
+ }
+ },
+ /**
+ * Reconfigure this block based on the mutator dialog's components.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+
+ this.hasReturn_ = containerBlock.getFieldValue("RETURN") === "TRUE";
+
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ARGUMENT' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+ /**
+ * Store pointers to any connected child blocks.
+ * @param {!Blockly.Block} containerBlock Root block in mutator.
+ * @this Blockly.Block
+ */
+ saveConnections: function (containerBlock) {
+ // Store a pointer to any connected child blocks.
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var x = 0;
+ while (itemBlock) {
+ var input = this.getInput('ARGUMENT' + x);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ x++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+ /**
+ * Modify this block to have the correct number of inputs.
+ * @private
+ * @this Blockly.Block
+ */
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ var i = 0;
+ while (this.getInput('ARGUMENT' + i)) {
+ this.removeInput('ARGUMENT' + i);
+ i++;
+ }
+ }
+
+ // Rebuild block.
+ for (var i = 0; i < this.itemCount_; i++) {
+ this.appendValueInput('ARGUMENT' + i);
+ }
+
+ // Set whether returns anything
+ this.setReturn(this.hasReturn_);
+ }
+};
+
+const function_call_container = {
+ // Container.
+ init: function () {
+ this.setColour(UTILITY_HUE);
+ this.appendDummyInput()
+ .appendField('Arguments');
+ this.appendStatementInput('STACK');
+ this.appendDummyInput()
+ .setAlign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.inputs.Align.RIGHT)
+ .appendField('has return')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldCheckbox('TRUE'),
+ 'RETURN');
+ this.setTooltip('');
+ this.contextMenu = false;
+ }
+};
+const function_call_item = {
+ // Add items.
+ init: function () {
+ this.setColour(UTILITY_HUE);
+ this.appendDummyInput()
+ .appendField('argument');
+ this.setInputsInline(true);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip('');
+ this.contextMenu = false;
+ }
+};
+
+const attribute_access = {
+ init: function () {
+ this.appendValueInput("MODULE")
+ .setCheck(null);
+ this.appendValueInput("NAME")
+ .setCheck(null)
+ .appendField(".");
+ this.setInputsInline(true);
+ this.setOutput(true, null);
+ this.setColour(230);
+ this.setTooltip('');
+ this.setHelpUrl('');
+ }
+};
+
+
+/***/ }),
+
+/***/ "../python/blocks/variables.js":
+/*!*************************************!*\
+ !*** ../python/blocks/variables.js ***!
+ \*************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ controls_type: () => (/* binding */ controls_type),
+/* harmony export */ controls_typeLists: () => (/* binding */ controls_typeLists),
+/* harmony export */ lists_zip: () => (/* binding */ lists_zip),
+/* harmony export */ lists_zip_container: () => (/* binding */ lists_zip_container),
+/* harmony export */ lists_zip_item: () => (/* binding */ lists_zip_item),
+/* harmony export */ unpack_iterable_object: () => (/* binding */ unpack_iterable_object),
+/* harmony export */ variables_change: () => (/* binding */ variables_change),
+/* harmony export */ variables_get: () => (/* binding */ variables_get),
+/* harmony export */ variables_global: () => (/* binding */ variables_global),
+/* harmony export */ variables_set: () => (/* binding */ variables_set)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _others_names__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../others/names */ "../python/others/names.js");
+
+
+
+const VARIABLES_HUE = 330//'#af5180'//330;
+
+// ************************************************************************
+// THIS SECTION IS INSERTED INTO BLOCKLY BY BLOCKLYDUINO.
+// export const variables_declare = {
+// // Variable setter.
+// init: function() {
+// this.setColour(VARIABLES_HUE);
+// this.appendValueInput('VALUE', null)
+// .appendField(Blockly.Msg.MIXLY_DECLARE)
+// .appendField(new Blockly.FieldTextInput(''), 'VAR')
+// //.appendField(Blockly.Msg.MIXLY_AS)
+// //.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'number'], [Blockly.Msg.LANG_MATH_STRING, 'string'], [Blockly.Msg.LANG_MATH_BOOLEAN, 'boolean']]), 'TYPE')
+// .appendField(Blockly.Msg.MIXLY_VALUE);
+// this.setPreviousStatement(true);
+// this.setNextStatement(true);
+// this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_VARIABLES_DECLARE);
+// },
+// getVars: function() {
+// return [this.getFieldValue('VAR')];
+// },
+// renameVar: function(oldName, newName) {
+// if (Names.equals(oldName, this.getFieldValue('VAR'))) {
+// this.setTitleValue(newName, 'VAR');
+// }
+// }
+// };
+// ************************************************************************
+
+const variables_get = {
+ init: function () {
+ this.setColour(VARIABLES_HUE);
+ this.appendDummyInput()
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput(''), 'VAR')
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.VARIABLES_GET_TOOLTIP);
+ },
+ getVars: function () {
+ return [this.getFieldValue('VAR')];
+ },
+ renameVar: function (oldName, newName) {
+ if (_others_names__WEBPACK_IMPORTED_MODULE_1__["default"].equals(oldName, this.getFieldValue('VAR'))) {
+ this.setFieldValue(newName, 'VAR');
+ }
+ }/*,
+ onchange: function() {
+ var varName = Blockly.Arduino.variableDB_.getName(this.getFieldValue('VAR'),Blockly.Variables.NAME_TYPE);
+ if(Blockly.Arduino.definitions_['var_declare'+varName]){
+ this.setWarningText(null);
+ }else{
+ this.setWarningText(Blockly.Msg.MIXLY_WARNING_NOT_DECLARE);
+ }
+ }*/
+};
+
+// export const variables_set = {
+// init: function() {
+// this.setColour(VARIABLES_HUE);
+// this.appendValueInput('VALUE')
+// .appendField(new Blockly.FieldTextInput(''), 'VAR')
+// .appendField(Blockly.Msg.MIXLY_VALUE2);
+// this.setPreviousStatement(true);
+// this.setNextStatement(true);
+// this.setTooltip(Blockly.Msg.VARIABLES_SET_TOOLTIP);
+// },
+// getVars: function() {
+// return [this.getFieldValue('VAR')];
+// },
+// renameVar: function(oldName, newName) {
+// if (Names.equals(oldName, this.getFieldValue('VAR'))) {
+// this.setFieldValue(newName, 'VAR');
+// }
+// }/*,
+// onchange: function() {
+// var varName = Blockly.Arduino.variableDB_.getName(this.getFieldValue('VAR'),Blockly.Variables.NAME_TYPE);
+// if(Blockly.Arduino.definitions_['var_declare'+varName]){
+// this.setWarningText(null);
+// }else{
+// this.setWarningText(Blockly.Msg.MIXLY_WARNING_NOT_DECLARE);
+// }
+// }*/
+// };
+const variables_set = {
+ init: function () {
+ this.setColour(VARIABLES_HUE);
+ this.appendValueInput('VALUE')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldTextInput(''), 'VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_VALUE2);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.VARIABLES_SET_TOOLTIP);
+ },
+ getVars: function () {
+ var varValue = this.getFieldValue('VAR');
+ if (varValue == null) {
+ return [];
+ }
+ return varValue.split(",");
+ },
+ renameVar: function (oldName, newName) {
+ if (_others_names__WEBPACK_IMPORTED_MODULE_1__["default"].equals(oldName, this.getFieldValue('VAR'))) {
+ this.setFieldValue(newName, 'VAR');
+ }
+ }
+};
+/**
+ * Block for basic data type change.
+ * @this Blockly.Block
+ */
+const variables_change = {
+ init: function () {
+ this.setColour(VARIABLES_HUE);
+ var DATATYPES =
+ [
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_INT, "int"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_FLOAT, "float"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_BOOLEAN, "bool"],
+ // [Blockly.Msg.MIXLY_MICROPYTHON_TYPE_COMPLEX, "complex"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_STRING, "str"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_LIST, "list"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_TUPLE, "tuple"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_DICT, "dict"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD, "set"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_BYTE, "bytes"]
+ ];
+ this.appendValueInput('MYVALUE')
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown(DATATYPES), 'OP');
+ // Assign 'this' to a variable for use in the tooltip closure below.
+ this.setOutput(true);
+ // this.setInputsInline(true);
+
+ }
+};
+
+
+const variables_global = {
+ init: function () {
+ this.setColour(VARIABLES_HUE);
+ this.appendValueInput("VAR")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_GLOBAL)
+ .setCheck("var");
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.TEXT_PRINT_TOOLTIP);
+ }
+};
+
+
+const controls_type = {
+ init: function () {
+ this.setColour(VARIABLES_HUE);
+ this.appendValueInput("DATA")
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_PYTHON_TYPE);
+ // this.setInputsInline(true);
+ this.setOutput(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_PYTHON_TYPE);
+ }
+};
+
+
+const controls_typeLists = {
+ init: function () {
+ this.setColour(VARIABLES_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_PY_CONTORL_GET_TYPE)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_INT, "int"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_FLOAT, "float"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_STRING, "str"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_LIST, "list"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_TUPLE, "tuple"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_DICT, "dict"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD, "set"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_BYTE, "bytes"],
+ // [Blockly.Msg.MIXLY_MICROBIT_IMAGE,"image"],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_NULL, "type(None)"]]), "type");
+ //整数、浮点数、字符串、列表、元组、字典、集合、图像不太对, unfinished
+ this.setInputsInline(true);
+ this.setOutput(true);
+ var thisBlock = this;
+ this.setTooltip(function () {
+ var mode = thisBlock.getFieldValue('type');
+ var mode0 = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MICROBIT_controls_TypeLists;
+ var TOOLTIPS = {
+ 'int': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_INT,
+ 'float': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_FLOAT,
+ 'str': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_STRING,
+ 'list': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_LIST,
+ 'tuple': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_TUPLE,
+ 'dict': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_DICT,
+ 'set': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD,
+ 'image': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_IMAGE,
+ 'bytes': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LANG_MATH_BYTE,
+ 'NoneType': blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.LOGIC_NULL
+ };
+ return mode0 + TOOLTIPS[mode];
+ });
+ }
+};
+
+const lists_zip = {
+ init: function () {
+ this.setColour(VARIABLES_HUE);
+
+ this.itemCount_ = 2;
+ this.updateShape_();
+ this.setInputsInline(true);
+ this.setPreviousStatement(false);
+ this.setNextStatement(false);
+ this.setOutput(true, "List")
+ this.setMutator(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.icons.MutatorIcon(['lists_zip_item'], this));
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_LISTS_ZIP_TOOLTIP);
+ },
+
+ mutationToDom: function () {
+ var container = document.createElement('mutation');
+ container.setAttribute('items', this.itemCount_);
+ return container;
+ },
+
+ domToMutation: function (xmlElement) {
+ this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
+ this.updateShape_();
+ },
+
+ decompose: function (workspace) {
+ var containerBlock =
+ workspace.newBlock('lists_zip_container');
+ containerBlock.initSvg();
+ var connection = containerBlock.getInput('STACK').connection;
+ for (var i = 0; i < this.itemCount_; i++) {
+ var itemBlock = workspace.newBlock('lists_zip_item');
+ itemBlock.initSvg();
+ connection.connect(itemBlock.previousConnection);
+ connection = itemBlock.nextConnection;
+ }
+ return containerBlock;
+ },
+
+ compose: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ // Count number of inputs.
+ var connections = [];
+ var i = 0;
+ while (itemBlock) {
+ connections[i] = itemBlock.valueConnection_;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ i++;
+ }
+ this.itemCount_ = i;
+ this.updateShape_();
+ // Reconnect any child blocks.
+ for (var i = 0; i < this.itemCount_; i++) {
+ if (connections[i]) {
+ this.getInput('ADD' + i).connection.connect(connections[i]);
+ }
+ }
+ },
+
+ saveConnections: function (containerBlock) {
+ var itemBlock = containerBlock.getInputTargetBlock('STACK');
+ var i = 0;
+ while (itemBlock) {
+ var input = this.getInput('ADD' + i);
+ itemBlock.valueConnection_ = input && input.connection.targetConnection;
+ i++;
+ itemBlock = itemBlock.nextConnection &&
+ itemBlock.nextConnection.targetBlock();
+ }
+ },
+
+ updateShape_: function () {
+ // Delete everything.
+ if (this.getInput('EMPTY')) {
+ this.removeInput('EMPTY');
+ } else {
+ var i = 0;
+ while (this.getInput('ADD' + i)) {
+ this.removeInput('ADD' + i);
+ i++;
+ }
+ }
+ // Rebuild block.
+ if (this.itemCount_ == 0) {
+ this.appendDummyInput('EMPTY')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_LISTS_ZIP);
+ } else {
+ for (var i = 0; i < this.itemCount_; i++) {
+ var input = this.appendValueInput('ADD' + i);
+ if (i == 0) {
+ input.appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_LISTS_ZIP);
+ }
+ }
+ }
+ }
+};
+const lists_zip_container = {
+ init: function () {
+ this.setColour(VARIABLES_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_LISTS_ZIP)
+ .appendField('[]');
+ this.appendStatementInput('STACK');
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_CONTAINER_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const lists_zip_item = {
+ init: function () {
+ this.setColour(VARIABLES_HUE);
+ this.appendDummyInput()
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_LISTS_ZIP_ITEM);
+ this.setPreviousStatement(true);
+ this.setNextStatement(true);
+ this.setTooltip(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_LISTS_ZIP_ITEM_TOOLTIP);
+ this.contextMenu = false;
+ }
+};
+
+const unpack_iterable_object = {
+ init: function () {
+ this.setColour(VARIABLES_HUE);
+ this.appendValueInput('VAR')
+ .appendField(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_VARIABLE_UNPACK)
+ .appendField(new blockly_core__WEBPACK_IMPORTED_MODULE_0__.FieldDropdown([
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_PYTHON_LISTS_ZIP_ITEM, '*'],
+ [blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg.MIXLY_MICROBIT_TYPE_DICT, '**']
+ ]), 'TYPE');
+ this.setTooltip('');
+ this.setOutput(true);
+ }
+};
+
+/***/ }),
+
+/***/ "../python/export.js":
+/*!***************************!*\
+ !*** ../python/export.js ***!
+ \***************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ Names: () => (/* reexport safe */ _others_names__WEBPACK_IMPORTED_MODULE_26__["default"]),
+/* harmony export */ Procedures: () => (/* reexport safe */ _others_procedures__WEBPACK_IMPORTED_MODULE_27__["default"]),
+/* harmony export */ Python: () => (/* reexport safe */ _python_generator__WEBPACK_IMPORTED_MODULE_29__.Python),
+/* harmony export */ PythonControlBlocks: () => (/* reexport module object */ _blocks_control__WEBPACK_IMPORTED_MODULE_1__),
+/* harmony export */ PythonControlGenerators: () => (/* reexport module object */ _generators_control__WEBPACK_IMPORTED_MODULE_14__),
+/* harmony export */ PythonDictsBlocks: () => (/* reexport module object */ _blocks_dicts__WEBPACK_IMPORTED_MODULE_5__),
+/* harmony export */ PythonDictsGenerators: () => (/* reexport module object */ _generators_dicts__WEBPACK_IMPORTED_MODULE_18__),
+/* harmony export */ PythonHtmlBlocks: () => (/* reexport module object */ _blocks_html__WEBPACK_IMPORTED_MODULE_11__),
+/* harmony export */ PythonHtmlGenerators: () => (/* reexport module object */ _generators_html__WEBPACK_IMPORTED_MODULE_24__),
+/* harmony export */ PythonListsBlocks: () => (/* reexport module object */ _blocks_lists__WEBPACK_IMPORTED_MODULE_4__),
+/* harmony export */ PythonListsGenerators: () => (/* reexport module object */ _generators_lists__WEBPACK_IMPORTED_MODULE_17__),
+/* harmony export */ PythonLogicBlocks: () => (/* reexport module object */ _blocks_logic__WEBPACK_IMPORTED_MODULE_6__),
+/* harmony export */ PythonLogicGenerators: () => (/* reexport module object */ _generators_logic__WEBPACK_IMPORTED_MODULE_19__),
+/* harmony export */ PythonMathBlocks: () => (/* reexport module object */ _blocks_math__WEBPACK_IMPORTED_MODULE_2__),
+/* harmony export */ PythonMathGenerators: () => (/* reexport module object */ _generators_math__WEBPACK_IMPORTED_MODULE_15__),
+/* harmony export */ PythonProceduresBlocks: () => (/* reexport module object */ _blocks_procedures__WEBPACK_IMPORTED_MODULE_8__),
+/* harmony export */ PythonProceduresGenerators: () => (/* reexport module object */ _generators_procedures__WEBPACK_IMPORTED_MODULE_21__),
+/* harmony export */ PythonSetBlocks: () => (/* reexport module object */ _blocks_set__WEBPACK_IMPORTED_MODULE_10__),
+/* harmony export */ PythonSetGenerators: () => (/* reexport module object */ _generators_set__WEBPACK_IMPORTED_MODULE_23__),
+/* harmony export */ PythonStorageBlocks: () => (/* reexport module object */ _blocks_storage__WEBPACK_IMPORTED_MODULE_7__),
+/* harmony export */ PythonStorageGenerators: () => (/* reexport module object */ _generators_storage__WEBPACK_IMPORTED_MODULE_20__),
+/* harmony export */ PythonTextBlocks: () => (/* reexport module object */ _blocks_text__WEBPACK_IMPORTED_MODULE_3__),
+/* harmony export */ PythonTextGenerators: () => (/* reexport module object */ _generators_text__WEBPACK_IMPORTED_MODULE_16__),
+/* harmony export */ PythonTupleBlocks: () => (/* reexport module object */ _blocks_tuple__WEBPACK_IMPORTED_MODULE_9__),
+/* harmony export */ PythonTupleGenerators: () => (/* reexport module object */ _generators_tuple__WEBPACK_IMPORTED_MODULE_22__),
+/* harmony export */ PythonUtilityBlocks: () => (/* reexport module object */ _blocks_utility__WEBPACK_IMPORTED_MODULE_12__),
+/* harmony export */ PythonUtilityGenerators: () => (/* reexport module object */ _generators_utility__WEBPACK_IMPORTED_MODULE_25__),
+/* harmony export */ PythonVariablesBlocks: () => (/* reexport module object */ _blocks_variables__WEBPACK_IMPORTED_MODULE_0__),
+/* harmony export */ PythonVariablesGenerators: () => (/* reexport module object */ _generators_variables__WEBPACK_IMPORTED_MODULE_13__),
+/* harmony export */ Variables: () => (/* reexport safe */ _others_variables__WEBPACK_IMPORTED_MODULE_28__["default"])
+/* harmony export */ });
+/* harmony import */ var _blocks_variables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./blocks/variables */ "../python/blocks/variables.js");
+/* harmony import */ var _blocks_control__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./blocks/control */ "../python/blocks/control.js");
+/* harmony import */ var _blocks_math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blocks/math */ "../python/blocks/math.js");
+/* harmony import */ var _blocks_text__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./blocks/text */ "../python/blocks/text.js");
+/* harmony import */ var _blocks_lists__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./blocks/lists */ "../python/blocks/lists.js");
+/* harmony import */ var _blocks_dicts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./blocks/dicts */ "../python/blocks/dicts.js");
+/* harmony import */ var _blocks_logic__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./blocks/logic */ "../python/blocks/logic.js");
+/* harmony import */ var _blocks_storage__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./blocks/storage */ "../python/blocks/storage.js");
+/* harmony import */ var _blocks_procedures__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./blocks/procedures */ "../python/blocks/procedures.js");
+/* harmony import */ var _blocks_tuple__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./blocks/tuple */ "../python/blocks/tuple.js");
+/* harmony import */ var _blocks_set__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./blocks/set */ "../python/blocks/set.js");
+/* harmony import */ var _blocks_html__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./blocks/html */ "../python/blocks/html.js");
+/* harmony import */ var _blocks_utility__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./blocks/utility */ "../python/blocks/utility.js");
+/* harmony import */ var _generators_variables__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./generators/variables */ "../python/generators/variables.js");
+/* harmony import */ var _generators_control__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./generators/control */ "../python/generators/control.js");
+/* harmony import */ var _generators_math__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./generators/math */ "../python/generators/math.js");
+/* harmony import */ var _generators_text__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./generators/text */ "../python/generators/text.js");
+/* harmony import */ var _generators_lists__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./generators/lists */ "../python/generators/lists.js");
+/* harmony import */ var _generators_dicts__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./generators/dicts */ "../python/generators/dicts.js");
+/* harmony import */ var _generators_logic__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./generators/logic */ "../python/generators/logic.js");
+/* harmony import */ var _generators_storage__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./generators/storage */ "../python/generators/storage.js");
+/* harmony import */ var _generators_procedures__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./generators/procedures */ "../python/generators/procedures.js");
+/* harmony import */ var _generators_tuple__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./generators/tuple */ "../python/generators/tuple.js");
+/* harmony import */ var _generators_set__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./generators/set */ "../python/generators/set.js");
+/* harmony import */ var _generators_html__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./generators/html */ "../python/generators/html.js");
+/* harmony import */ var _generators_utility__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./generators/utility */ "../python/generators/utility.js");
+/* harmony import */ var _others_names__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./others/names */ "../python/others/names.js");
+/* harmony import */ var _others_procedures__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./others/procedures */ "../python/others/procedures.js");
+/* harmony import */ var _others_variables__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./others/variables */ "../python/others/variables.js");
+/* harmony import */ var _python_generator__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./python_generator */ "../python/python_generator.js");
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/***/ }),
+
+/***/ "../python/generators/control.js":
+/*!***************************************!*\
+ !*** ../python/generators/control.js ***!
+ \***************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ Panic_with_status_code: () => (/* binding */ Panic_with_status_code),
+/* harmony export */ base_setup: () => (/* binding */ base_setup),
+/* harmony export */ controls_delay: () => (/* binding */ controls_delay),
+/* harmony export */ controls_flow_statements: () => (/* binding */ controls_flow_statements),
+/* harmony export */ controls_for: () => (/* binding */ controls_for),
+/* harmony export */ controls_forEach: () => (/* binding */ controls_forEach),
+/* harmony export */ controls_for_range: () => (/* binding */ controls_for_range),
+/* harmony export */ controls_if: () => (/* binding */ controls_if),
+/* harmony export */ controls_interrupts: () => (/* binding */ controls_interrupts),
+/* harmony export */ controls_lambda: () => (/* binding */ controls_lambda),
+/* harmony export */ controls_main: () => (/* binding */ controls_main),
+/* harmony export */ controls_millis: () => (/* binding */ controls_millis),
+/* harmony export */ controls_nointerrupts: () => (/* binding */ controls_nointerrupts),
+/* harmony export */ controls_pass: () => (/* binding */ controls_pass),
+/* harmony export */ controls_range: () => (/* binding */ controls_range),
+/* harmony export */ controls_repeat: () => (/* binding */ controls_repeat),
+/* harmony export */ controls_repeat_ext: () => (/* binding */ controls_repeat_ext),
+/* harmony export */ controls_thread: () => (/* binding */ controls_thread),
+/* harmony export */ controls_try_finally: () => (/* binding */ controls_try_finally),
+/* harmony export */ controls_whileUntil: () => (/* binding */ controls_whileUntil),
+/* harmony export */ datetime_fromtimestamp: () => (/* binding */ datetime_fromtimestamp),
+/* harmony export */ do_while: () => (/* binding */ do_while),
+/* harmony export */ garbage_collection: () => (/* binding */ garbage_collection),
+/* harmony export */ gene_unique_identifier: () => (/* binding */ gene_unique_identifier),
+/* harmony export */ get_mem_alloc: () => (/* binding */ get_mem_alloc),
+/* harmony export */ get_mem_free: () => (/* binding */ get_mem_free),
+/* harmony export */ get_unique_identifier: () => (/* binding */ get_unique_identifier),
+/* harmony export */ reset: () => (/* binding */ reset),
+/* harmony export */ time_sleep: () => (/* binding */ time_sleep)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+const controls_main = function (a, generator) {
+ var d = generator.statementToCode(a, "DO"),
+ d = generator.addLoopTrap(d, a.id) || generator.PASS;
+ return "if __name__ == '__main__':\n" + d;
+}
+
+const base_setup = function (_, generator) {
+ var branch = generator.statementToCode(this, 'DO');
+ branch = branch.replace(/(^\s*)|(\s*$)/g, "").replace(/\n {4}/g, '\n');//去除两端空格
+ if (branch.endsWith('\n')) {
+ generator.setups_['setup_setup'] = branch;
+ }
+ else {
+ generator.setups_['setup_setup'] = branch + '\n';
+ }
+ return '';
+}
+
+// ok
+const controls_if = function (a, generator) {
+ var b = 0,
+ c = "",
+ d,
+ e;
+ do
+ e = generator.valueToCode(a, "IF" + b, generator.ORDER_NONE) || "False", d = generator.statementToCode(a, "DO" + b) || generator.PASS, c += (0 == b ? "if " : "elif ") + e + ":\n" + d, ++b;
+ while (a.getInput("IF" + b));
+ a.getInput("ELSE") && (d = generator.statementToCode(a, "ELSE") || generator.PASS, c += "else:\n" + d);
+ return c
+}
+
+const controls_try_finally = function (_, generator) {
+ var n = 1;
+ var argument = generator.valueToCode(this, 'IF' + n,
+ generator.ORDER_NONE) || 'null';
+ var branch = '';
+ var t = generator.statementToCode(this, 'try') || ' pass\n';
+ var code = 'try:\n' + t;
+ for (n = 1; n <= this.elseifCount_; n++) {
+ argument = generator.valueToCode(this, 'IF' + n,
+ generator.ORDER_NONE) || '';
+ if (argument !== '')
+ argument = ' ' + argument
+ branch = generator.statementToCode(this, 'DO' + n) || ' pass\n';
+ code += 'except' + argument + ': \n' + branch;
+ }
+ if (this.elseCount_) {
+ branch = generator.statementToCode(this, 'ELSE') || ' pass\n';
+ code += 'finally:\n' + branch;
+ }
+ // code += '}';
+ return code;
+}
+
+// ok
+const controls_for = function (a, generator) {
+ var b = generator.variableDB_.getName(a.getFieldValue("VAR"), blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE),
+ //var b = generator.valueToCode(a, "VAR", generator.ORDER_MEMBER) || "''",
+ c = generator.valueToCode(a, "FROM", generator.ORDER_NONE) || "0",
+ d = generator.valueToCode(a, "TO", generator.ORDER_NONE) || "0",
+ e = generator.valueToCode(a, "STEP", generator.ORDER_NONE) || "1",
+ f = generator.statementToCode(a, "DO"),
+ f = generator.addLoopTrap(f, a.id) || generator.PASS,
+ g = "",
+ h = function (_, generator) {
+ return generator.provideFunction_("upRange",
+ ["def " + generator.FUNCTION_NAME_PLACEHOLDER_ + "(start, stop, step):", " while start <= stop:", " yield start", " start += abs(step)"])
+ },
+ k = function (_, generator) {
+ return generator.provideFunction_("downRange", ["def " + generator.FUNCTION_NAME_PLACEHOLDER_ + "(start, stop, step):", " while start >= stop:", " yield start", " start -= abs(step)"])
+ }
+ a = function (a, b, c) {
+ return "(" + a + " <= " + b + ") and " + h() + "(" + a + ", " + b + ", " + c + ") or " + k() + "(" + a + ", " + b + ", " + c + ")"
+ }
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.isNumber(c) && blockly_core__WEBPACK_IMPORTED_MODULE_0__.isNumber(d) &&
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.isNumber(e))
+ c = parseFloat(c), d = parseFloat(d), e = Math.abs(parseFloat(e)), 0 === c % 1 && 0 === d % 1 && 0 === e % 1 ? (c <= d ? (d++, a = 0 == c && 1 == e ? d : c + ", " + d, 1 != e && (a += ", " + e)) : (d--, a = c + ", " + d + ", -" + e), a = "range(" + a + ")") : (a = c < d ? h() : k(), a += "(" + c + ", " + d + ", " + e + ")");
+ else {
+ var l = function (a, c) {
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.isNumber(a))
+ a = parseFloat(a);
+ else {
+ var d = generator.variableDB_.getDistinctName(b + c, blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ g += d + " = " + a + "\n";
+ a = d
+ }
+ return a
+ },
+ c = l(c, "_start"),
+ d = l(d, "_end");
+ l(e, "_inc");
+ a = "number" == typeof c && "number" == typeof d ? c < d ? h(c, d, e) : k(c, d, e) : a(c, d, e)
+ }
+ return g += "for " + b + " in " + a + ":\n" + f
+}
+
+const controls_for_range = function (block, generator) {
+ var iter = generator.variableDB_.getName(block.getFieldValue("VAR"), blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE),
+ from = generator.valueToCode(block, "FROM", generator.ORDER_NONE) || "0",
+ end = generator.valueToCode(block, "TO", generator.ORDER_NONE) || "0",
+ step = generator.valueToCode(block, "STEP", generator.ORDER_NONE) || "1",
+ dostatement = generator.statementToCode(block, "DO"),
+ pass = generator.addLoopTrap(dostatement, block.id) || generator.PASS;
+ generator.setups_["mixly_range"] = "def mixly_range(start, stop, step):\n" +
+ " for i in range(start, stop + 1, step):\n" +
+ " yield i\n\n";
+ return "for " + iter + " in mixly_range(" + from + ", " + end + ", " + step + "):\n" + pass;
+}
+
+const controls_whileUntil = function (a, generator) {
+ var b = "UNTIL" == a.getFieldValue("MODE"),
+ c = generator.valueToCode(a, "BOOL", generator.ORDER_NONE) || "False",
+ d = generator.statementToCode(a, "DO"),
+ d = generator.addLoopTrap(d, a.id) || generator.PASS;
+ b && (c = "not " + c);
+ return "while " + c + ":\n" + d
+}
+
+// export const controls_flow_statements = function (_, generator) {
+// // Flow statements: continue, break.
+// switch (this.getFieldValue('FLOW')) {
+// case 'BREAK':
+// return 'break;\n';
+// case 'CONTINUE':
+// return 'continue;\n';
+// }
+// throw 'Unknown flow statement.';
+// }
+
+//ok
+const controls_flow_statements = function (a) {
+ switch (a.getFieldValue("FLOW")) {
+ case "BREAK":
+ return "break\n";
+ case "CONTINUE":
+ return "continue\n"
+ }
+ throw "Unknown flow statement.";
+}
+
+// ok
+const controls_delay = function (_, generator) {
+ var delay_time = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ATOMIC) || '1000'
+ var code = 'sleep(' + delay_time + ')\n';
+ return code;
+}
+
+// ok
+const Panic_with_status_code = function (_, generator) {
+ var status_code = generator.valueToCode(this, 'STATUS_CODE', generator.ORDER_ATOMIC) || '1000'
+ var code = 'panic(' + status_code + ')\n';
+ return code;
+}
+
+// ok
+const controls_millis = function (_, generator) {
+ generator.definitions_.import_time = "import time";
+ var code = 'time.time()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+// ok
+const reset = function (_, generator) {
+ generator.definitions_['import_microbit'] = 'from microbit import *'
+ return 'reset()\n';
+}
+const controls_interrupts = function () {
+ return 'interrupts();\n';
+}
+
+const controls_nointerrupts = function () {
+ return 'noInterrupts();\n';
+}
+
+
+const controls_forEach = function (block, generator) {
+ // For each loop.
+ var variable0 = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '\'\'';
+ var argument0 = generator.valueToCode(block, 'LIST',
+ generator.ORDER_RELATIONAL) || '[]';
+ var branch = generator.statementToCode(block, 'DO');
+ branch = generator.addLoopTrap(branch, block.id) ||
+ generator.PASS;
+ var code = 'for ' + variable0 + ' in ' + argument0 + ':\n' + branch;
+ return code;
+}
+
+const controls_range = function (_, generator) {
+ var from = generator.valueToCode(this, "FROM", generator.ORDER_NONE) || "0";
+ var end = generator.valueToCode(this, "TO", generator.ORDER_NONE) || "0";
+ var step = generator.valueToCode(this, "STEP", generator.ORDER_NONE) || "1";
+ var code = "range(" + from + ", " + end + ", " + step + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const controls_lambda = function (a, generator) {
+ var c = generator.valueToCode(a, "BOOL", generator.ORDER_NONE) || "None",
+ d = generator.statementToCode(a, "DO") || "pass";
+ var code = "lambda " + c + ": " + d;
+ code = code.replace('\n', '').replace(' ', '')
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const time_sleep = function (_, generator) {
+ generator.definitions_['import_time'] = 'import time';
+ var delay_time = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ATOMIC) || '1000'
+ var code = 'time.sleep(' + delay_time + ')\n';
+ return code;
+}
+
+const controls_pass = function () {
+ return 'pass\n';
+}
+
+const controls_thread = function (_, generator) {
+ generator.definitions_['import__thread'] = 'import _thread';
+ var v = generator.valueToCode(this, "VAR", generator.ORDER_NONE) || "None";
+ var callback = generator.variableDB_.getName(
+ generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None",
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Procedures.NAME_TYPE
+ );
+ var code = "_thread.start_new_thread(" + callback + ", " + v + ")\n";
+ return code;
+}
+
+// do-while循环
+const do_while = function (_, generator) {
+ var value_select_data = generator.valueToCode(this, 'select_data', generator.ORDER_NONE) || "False";
+ var statements_input_data = generator.statementToCode(this, 'input_data')
+ var dropdown_type = this.getFieldValue('type');
+ if (dropdown_type == 'true') {
+ statements_input_data = statements_input_data + ' if (' + value_select_data + '):\n' + ' break\n';
+ }
+ else {
+ statements_input_data = statements_input_data + ' if not (' + value_select_data + '):\n' + ' break\n';
+ }
+ statements_input_data = generator.addLoopTrap(statements_input_data, this.id) || generator.PASS;
+ //var dropdown_type = this.getFieldValue('type');
+ var code = 'while True:\n' + statements_input_data;
+ return code;
+}
+
+// export const base_type = controls_type;
+// export const controls_TypeLists = controls_typeLists;
+
+const controls_repeat_ext = function (a, generator) {
+ var times = generator.valueToCode(this, 'TIMES', generator.ORDER_ATOMIC);
+ var d = generator.statementToCode(a, "DO"),
+ d = generator.addLoopTrap(d, a.id) || generator.PASS;
+ return 'for _my_variable in range(' + times + '):\n' + d;
+}
+
+
+const garbage_collection = function (_, generator) {
+ generator.definitions_['import_gc'] = 'import gc';
+ var code = 'gc.collect()\n'
+ return code;
+}
+
+const get_mem_alloc = function (_, generator) {
+ generator.definitions_['import_gc'] = 'import gc';
+ var code = 'gc.mem_alloc()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const get_mem_free = function (_, generator) {
+ generator.definitions_['import_gc'] = 'import gc';
+ var code = 'gc.mem_free()';
+ return [code, generator.ORDER_ATOMIC]
+}
+
+const get_unique_identifier = function (_, generator) {
+ generator.definitions_['import_machine'] = 'import machine';
+ var code = 'machine.unique_id()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+// ok
+const controls_repeat = controls_repeat_ext;
+
+const datetime_fromtimestamp = function(_,generator){
+ generator.definitions_['import_datatime'] = 'import datatime';
+ var ts = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = 'datatime.datatime.fromtimestamp(' + ts + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const gene_unique_identifier = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ generator.definitions_['import_' + version + 'uuid'] = 'from ' + version + ' import uuid';
+ var code = 'uuid()';
+ return [code, generator.ORDER_ATOMIC]
+}
+
+/***/ }),
+
+/***/ "../python/generators/dicts.js":
+/*!*************************************!*\
+ !*** ../python/generators/dicts.js ***!
+ \*************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ dicts_add_change_del: () => (/* binding */ dicts_add_change_del),
+/* harmony export */ dicts_add_or_change: () => (/* binding */ dicts_add_or_change),
+/* harmony export */ dicts_clear: () => (/* binding */ dicts_clear),
+/* harmony export */ dicts_create_with: () => (/* binding */ dicts_create_with),
+/* harmony export */ dicts_create_with_noreturn: () => (/* binding */ dicts_create_with_noreturn),
+/* harmony export */ dicts_deldict: () => (/* binding */ dicts_deldict),
+/* harmony export */ dicts_delete: () => (/* binding */ dicts_delete),
+/* harmony export */ dicts_get: () => (/* binding */ dicts_get),
+/* harmony export */ dicts_get_default: () => (/* binding */ dicts_get_default),
+/* harmony export */ dicts_items: () => (/* binding */ dicts_items),
+/* harmony export */ dicts_keys: () => (/* binding */ dicts_keys),
+/* harmony export */ dicts_length: () => (/* binding */ dicts_length),
+/* harmony export */ dicts_pop: () => (/* binding */ dicts_pop),
+/* harmony export */ dicts_setdefault: () => (/* binding */ dicts_setdefault),
+/* harmony export */ dicts_to_json: () => (/* binding */ dicts_to_json),
+/* harmony export */ dicts_to_json2: () => (/* binding */ dicts_to_json2),
+/* harmony export */ dicts_to_to: () => (/* binding */ dicts_to_to),
+/* harmony export */ dicts_todict: () => (/* binding */ dicts_todict),
+/* harmony export */ dicts_update: () => (/* binding */ dicts_update),
+/* harmony export */ dicts_values: () => (/* binding */ dicts_values),
+/* harmony export */ json_to_dicts: () => (/* binding */ json_to_dicts)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+/**
+ * @license
+ * Visual Blocks Language
+ *
+ * Copyright 2012 Google Inc.
+ * https://developers.google.com/blockly/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview Generating Python for dictionary blocks.
+ * @author acbart@vt.edu (Austin Cory Bart)
+ */
+
+
+
+const dicts_create_with = function (_, generator) {
+ // Create a list with any number of elements of any type.
+ //var dropdown_type = this.getFieldValue('TYPE');
+ var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ //var size=window.parseFloat(this.getFieldValue('SIZE'));
+ var code = new Array(this.itemCount_);
+ var default_value = '0';
+ for (var n = 0; n < this.itemCount_; n++) {
+ var keyName = this.getFieldValue('KEY' + n);
+ code[n] = keyName + ":" + (generator.valueToCode(this, 'ADD' + n, generator.ORDER_NONE) || default_value);
+ }
+ var code = varName + '= ' + '{' + code.join(', ') + '}\n';
+ //var code =''+varName+'['+size+"]"+'='+ '{' + code.join(', ') + '}\n';
+ //generator.setups_['setup_lists'+varName] = code;
+ return code;
+}
+
+const dicts_keys = function (_, generator) {
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName + '.keys()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const dicts_get = function (_, generator) {
+ var version = mixly__WEBPACK_IMPORTED_MODULE_1__.Boards.getSelectedBoardKey().split(':')[2]
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
+ //var size=window.parseFloat(this.getFieldValue('SIZE'));
+ var text = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);
+ // var text=this.getFieldValue('KEY');
+ if (version=='educore'){
+ var code = varName+'.get('+text+')';
+ }else{
+ var code = varName + "[" + text + "]";
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const dicts_get_default = function (_, generator) {
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
+ //var size=window.parseFloat(this.getFieldValue('SIZE'));
+ var text = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);
+ var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ // var text=this.getFieldValue('KEY');
+ var code = varName + ".get(" + text + ',' + argument + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const dicts_add_or_change = function (_, generator) {
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || 'mydict';
+ var text = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);
+ // var text=this.getFieldValue('KEY');
+ var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName + "[" + text + "] = " + argument + '\n';
+ return code;
+}
+
+const dicts_delete = function (_, generator) {
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || 'mydict';
+ var text = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);
+ // var text=this.getFieldValue('KEY');
+ var code = "del " + varName + "[" + text + "]\n";
+ return code;
+}
+
+const dicts_update = function (_, generator) {
+ var varName2 = generator.valueToCode(this, 'DICT2', generator.ORDER_ASSIGNMENT) || '0';
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName + '.update(' + varName2 + ')\n';
+ return code;
+}
+
+const dicts_clear = function (_, generator) {
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName + '.clear()\n';
+ return code;
+}
+
+const dicts_items = function (_, generator) {
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName + '.items()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const dicts_values = function (_, generator) {
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName + '.values()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const dicts_length = function (_, generator) {
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
+ var code = 'len(' + varName + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const dicts_deldict = function (_, generator) {
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
+ var code = 'del ' + varName + '\n';
+ return code;
+}
+
+const dicts_add_change_del = function (block, generator) {
+ var dict = generator.valueToCode(block, 'DICT',
+ generator.ORDER_MEMBER) || '[]';
+ var mode = block.getFieldValue('WHERE');
+ var KEY = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);
+ // var text=this.getFieldValue('KEY');
+
+ switch (mode) {
+ case 'INSERT':
+ //var at2 = block.getFieldValue('AT2');
+ var at2 = generator.valueToCode(this, 'AT2', generator.ORDER_ASSIGNMENT) || '0';
+ var code = dict + "[" + KEY + "] = " + at2 + '\n'
+ break;
+ case 'DELETE':
+ var code = 'del ' + dict + "[" + KEY + "]\n"
+ break;
+ default:
+ throw 'Unhandled option (lists_setIndex2)';
+ }
+ return code;
+}
+
+const dicts_pop = function (_, generator) {
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
+ var text = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);
+ // var text=this.getFieldValue('KEY');
+ var code = varName + ".pop(" + text + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const dicts_setdefault = function (_, generator) {
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || 'mydict';
+ var text = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);
+ // var text=this.getFieldValue('KEY');
+ var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName + ".setdefault" + "(" + text + "," + argument + ")\n";
+ return code;
+}
+
+const dicts_create_with_noreturn = function (_, generator) {
+ // Create a list with any number of elements of any type.
+ // var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
+ // Blockly.Variables.NAME_TYPE);
+ //var size=window.parseFloat(this.getFieldValue('SIZE'));
+ var code = new Array(this.itemCount_);
+ var default_value = '0';
+
+ for (var n = 0; n < this.itemCount_; n++) {
+ var keyName = this.getFieldValue('KEY' + n);
+ code[n] = keyName + ":" + (generator.valueToCode(this, 'ADD' + n, generator.ORDER_NONE) || default_value);
+ }
+ // if (this.itemCount_!=1){
+ // generator.definitions_['var_declare'+varName] = varName+'= '+ '(' + code.join(', ') + ')\n';}
+ // else {
+ // generator.definitions_['var_declare'+varName] = varName+'= '+ '(' + code.join(', ') + ',)\n';}
+ if (this.itemCount_ != 1) {
+ var code = '{' + code.join(', ') + '}';
+ }
+ else {
+ var code = '{' + code.join(', ') + ',}';
+ }
+
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const dicts_todict = function (_, generator) {
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'
+ return ['dict(' + str + ')', generator.ORDER_ATOMIC];
+}
+
+const dicts_to_json = function (_, generator) {
+ generator.definitions_['import_json'] = 'import json';
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
+ var code = 'json.dumps(' + varName + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const json_to_dicts = function (_, generator) {
+ generator.definitions_['import_json'] = 'import json';
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || 'null';
+ var code = 'json.loads(' + varName + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const dicts_to_to = function (_, generator) {
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
+ var R = generator.valueToCode(this, 'VAR1', generator.ORDER_ASSIGNMENT) || 'null';
+ var I = generator.valueToCode(this, 'VAR2', generator.ORDER_ASSIGNMENT) || 'null';
+ var L = generator.valueToCode(this, 'VAR3', generator.ORDER_ASSIGNMENT) || 'null';
+ var N = generator.valueToCode(this, 'VAR4', generator.ORDER_ASSIGNMENT) || 'null';
+ var code = varName + '['+R+']'+'['+I+']'+'['+L+']'+'['+N+']';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const dicts_to_json2 = function (_, generator) {
+ generator.definitions_['import_json'] = 'import json';
+ generator.definitions_['import_ujson'] = 'import ujson';
+ var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';
+ var code = 'ujson.loads(' + varName + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../python/generators/html.js":
+/*!************************************!*\
+ !*** ../python/generators/html.js ***!
+ \************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ html_content: () => (/* binding */ html_content),
+/* harmony export */ html_content_more: () => (/* binding */ html_content_more),
+/* harmony export */ html_document: () => (/* binding */ html_document),
+/* harmony export */ html_form: () => (/* binding */ html_form),
+/* harmony export */ html_head_body: () => (/* binding */ html_head_body),
+/* harmony export */ html_style: () => (/* binding */ html_style),
+/* harmony export */ html_style_content: () => (/* binding */ html_style_content),
+/* harmony export */ html_text: () => (/* binding */ html_text),
+/* harmony export */ html_title: () => (/* binding */ html_title)
+/* harmony export */ });
+const html_document = function (_, generator) {
+ var head = generator.statementToCode(this, 'HEAD');
+ var body = generator.statementToCode(this, 'BODY');
+ var code = "'''\n\n\n" + '\t\n' + head + "\n\n" + body + "\n\n'''";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const html_title = function (_, generator) {
+ var t = generator.statementToCode(this, 'DO');
+ var l = this.getFieldValue('LEVEL');
+ var code = "\n" + t + "\n";
+ return code;
+}
+
+const html_head_body = function (_, generator) {
+ var t = generator.statementToCode(this, 'DO');
+ var l = this.getFieldValue('LEVEL');
+ if (l == 'head') {
+ var code = "<" + l + '>\n\t\n' + t + "" + l + ">\n";
+ }
+ else {
+ var code = "<" + l + ">\n" + t + "" + l + ">\n";
+ }
+ return code;
+}
+
+const html_content = function (_, generator) {
+ var t = generator.statementToCode(this, 'DO');
+ // var s = generator.valueToCode(this, 'style');
+ var l = this.getFieldValue('LEVEL');
+ // var code = "<" + l + " " + s + " >\n" + t + "" + l + ">\n";
+ var code = "<" + l + ">\n" + t + "" + l + ">\n";
+ return code;
+}
+
+const html_content_more = function (_, generator) {
+ var t = generator.statementToCode(this, 'DO');
+ var s = generator.valueToCode(this, 'style');
+ var l = this.getFieldValue('LEVEL');
+ var code = "<" + l + " " + s + " >\n" + t + "" + l + ">\n";
+ return code;
+}
+
+const html_style = function (_, generator) {
+ var style = generator.statementToCode(this, 'STYLE');
+ var code = 'style="' + style + '"';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const html_form = function (_, generator) {
+ var tag = this.getFieldValue('LEVEL');
+ var name = this.getFieldValue('NAME');
+ var value = this.getFieldValue('VALUE');
+ var s = generator.valueToCode(this, 'style') || "";
+ var code = '';
+ return code;
+}
+
+const html_style_content = function () {
+ var key = this.getFieldValue('KEY');
+ var value = this.getFieldValue('VALUE');
+ var code = key + ':' + value + ";";
+ return code;
+}
+
+const html_text = function () {
+ var text = this.getFieldValue('TEXT');
+ var code = text + "\n";
+ return code;
+}
+
+/***/ }),
+
+/***/ "../python/generators/lists.js":
+/*!*************************************!*\
+ !*** ../python/generators/lists.js ***!
+ \*************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ content_in_lists: () => (/* binding */ content_in_lists),
+/* harmony export */ enumerate: () => (/* binding */ enumerate),
+/* harmony export */ list_many_input: () => (/* binding */ list_many_input),
+/* harmony export */ list_tolist: () => (/* binding */ list_tolist),
+/* harmony export */ list_tolist2: () => (/* binding */ list_tolist2),
+/* harmony export */ list_trig: () => (/* binding */ list_trig),
+/* harmony export */ lists_2d_get_col_row_data: () => (/* binding */ lists_2d_get_col_row_data),
+/* harmony export */ lists_2d_get_data_with_col_row: () => (/* binding */ lists_2d_get_data_with_col_row),
+/* harmony export */ lists_append_extend: () => (/* binding */ lists_append_extend),
+/* harmony export */ lists_change_to: () => (/* binding */ lists_change_to),
+/* harmony export */ lists_change_to_general: () => (/* binding */ lists_change_to_general),
+/* harmony export */ lists_clear: () => (/* binding */ lists_clear),
+/* harmony export */ lists_create_with: () => (/* binding */ lists_create_with),
+/* harmony export */ lists_create_with2: () => (/* binding */ lists_create_with2),
+/* harmony export */ lists_create_with_noreturn: () => (/* binding */ lists_create_with_noreturn),
+/* harmony export */ lists_create_with_text: () => (/* binding */ lists_create_with_text),
+/* harmony export */ lists_create_with_text2: () => (/* binding */ lists_create_with_text2),
+/* harmony export */ lists_del_general: () => (/* binding */ lists_del_general),
+/* harmony export */ lists_find: () => (/* binding */ lists_find),
+/* harmony export */ lists_getIndex3: () => (/* binding */ lists_getIndex3),
+/* harmony export */ lists_getSublist3: () => (/* binding */ lists_getSublist3),
+/* harmony export */ lists_get_index: () => (/* binding */ lists_get_index),
+/* harmony export */ lists_get_random_item: () => (/* binding */ lists_get_random_item),
+/* harmony export */ lists_get_random_sublist: () => (/* binding */ lists_get_random_sublist),
+/* harmony export */ lists_get_sublist: () => (/* binding */ lists_get_sublist),
+/* harmony export */ lists_insert_value: () => (/* binding */ lists_insert_value),
+/* harmony export */ lists_insert_value2: () => (/* binding */ lists_insert_value2),
+/* harmony export */ lists_pop: () => (/* binding */ lists_pop),
+/* harmony export */ lists_remove_at: () => (/* binding */ lists_remove_at),
+/* harmony export */ lists_remove_at2: () => (/* binding */ lists_remove_at2),
+/* harmony export */ lists_reverse: () => (/* binding */ lists_reverse),
+/* harmony export */ lists_setIndex3: () => (/* binding */ lists_setIndex3),
+/* harmony export */ lists_set_index: () => (/* binding */ lists_set_index),
+/* harmony export */ lists_sort: () => (/* binding */ lists_sort)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const lists_get_sublist = function (_, generator) {
+ // Get sublist.
+ var list = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';
+ var at1 = generator.valueToCode(this, 'AT1', generator.ORDER_ADDITIVE);
+ var at2 = generator.valueToCode(this, 'AT2', generator.ORDER_ADDITIVE);
+ var code = list + '[' + at1 + ' : ' + at2 + ']';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const lists_2d_get_data_with_col_row = function (_, generator) {
+ var value_LIST = generator.valueToCode(this, 'LIST', generator.ORDER_ATOMIC) || 'mylist';
+ var value_row = generator.valueToCode(this, 'row', generator.ORDER_ATOMIC) || 0;
+ var value_col = generator.valueToCode(this, 'col', generator.ORDER_ATOMIC) || 0;
+ var code = value_LIST + '[' + value_row + ',' + value_col + ']';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const lists_2d_get_col_row_data = function (_, generator) {
+ var value_LIST = generator.valueToCode(this, 'LIST', generator.ORDER_ATOMIC) || 'mylist';
+ var value_row_start = generator.valueToCode(this, 'row_start', generator.ORDER_ATOMIC) || 0;
+ var value_row_end = generator.valueToCode(this, 'row_end', generator.ORDER_ATOMIC) || 1;
+ var value_col_start = generator.valueToCode(this, 'col_start', generator.ORDER_ATOMIC) || 0;
+ var value_col_end = generator.valueToCode(this, 'col_end', generator.ORDER_ATOMIC) || 1;
+ var code = value_LIST + '[' + value_row_start + ' : ' + value_row_end + ',' + value_col_start + ' : ' + value_col_end + ']';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const lists_create_with = function (_, generator) {
+ // Create a list with any number of elements of any type.
+ var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ //var size=window.parseFloat(this.getFieldValue('SIZE'));
+ var code = new Array(this.itemCount_);
+ var default_value = '0';
+ for (var n = 0; n < this.itemCount_; n++) {
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || default_value;
+ }
+ //generator.setups_['var_declare'+varName] = varName+' = '+ '[' + code.join(', ') + ']\n';
+ var code = varName + ' = ' + '[' + code.join(', ') + ']\n';
+ return code;
+}
+
+const lists_create_with_text = function (_, generator) {
+ var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ //var size=window.parseFloat(this.getFieldValue('SIZE'));
+ var text = this.getFieldValue('TEXT');
+ // generator.setups_['var_declare'+varName] = varName+' = '+ '[' + text + ']\n';
+ var code = varName + ' = ' + '[' + text + ']\n';
+ return code;
+}
+
+const lists_get_index = function (_, generator) {
+ // Indexing into a list is the same as indexing into a string.
+ var list = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';
+ var argument0 = generator.valueToCode(this, 'AT', generator.ORDER_ADDITIVE) || 0;
+ var code = list + '[' + argument0 + ']';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const lists_set_index = function (_, generator) {
+ // Set element at index.
+ var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';
+ var argument0 = generator.valueToCode(this, 'AT',
+ generator.ORDER_ADDITIVE) || '0';
+ var argument2 = generator.valueToCode(this, 'TO',
+ generator.ORDER_ASSIGNMENT) || '0';
+ // Blockly uses one-based indicies.
+ return varName + '[' + argument0 + '] = ' + argument2 + '\n';
+}
+
+const lists_append_extend = function (_, generator) {
+ var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT) || '0';
+ var argument = generator.valueToCode(this, 'DATA', generator.ORDER_ASSIGNMENT) || '0';
+ var op = this.getFieldValue('OP');
+ var code = varName + '.' + op + '(' + argument + ')\n';
+ return code;
+}
+
+const lists_get_random_item = function (_, generator) {
+ generator.definitions_['import_random'] = 'import random';
+ var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';
+ var code = 'random.choice(' + varName + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const lists_get_random_sublist = function (_, generator) {
+ generator.definitions_['import_random'] = 'import random';
+ var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';
+ var VALUE = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ var code = 'random.sample(' + varName + ',' + VALUE + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const lists_insert_value = function (_, generator) {
+ var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT) || '0';
+ var at = generator.valueToCode(this, 'AT', generator.ORDER_ADDITIVE) || '0';
+ var VALUE = generator.valueToCode(this, 'VALUE', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName + '.insert(' + at + ', ' + VALUE + ')\n';
+ return code;
+}
+
+const lists_reverse = function (_, generator) {
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName + '.reverse()\n';
+ return code;
+}
+const lists_clear = function (_, generator) {
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName + '.clear()\n';
+ return code;
+}
+
+const lists_find = function (_, generator) {
+ var op = this.getFieldValue('OP');
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
+ if (op == 'INDEX')
+ var code = varName + '.index(' + argument + ')';
+ else if (op == 'COUNT')
+ var code = varName + '.count(' + argument + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const lists_remove_at = function (_, generator) {
+ var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT) || '0';
+ var argument = generator.valueToCode(this, 'DATA', generator.ORDER_ASSIGNMENT) || '0';
+ var op = this.getFieldValue('OP');
+ var code = "";
+ if (op == "del") {
+ code = 'del ' + varName + '[' + argument + ']\n';
+ } else {
+ code = varName + '.remove' + '(' + argument + ')\n';
+ }
+ return code;
+}
+
+const lists_pop = function (_, generator) {
+ var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';
+ var argument = generator.valueToCode(this, 'VALUE', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName + '.pop(' + argument + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const list_trig = function (a, generator) {
+ var b = a.getFieldValue("OP"), c;
+ generator.definitions_['import_math'] = "import math";
+ a = generator.valueToCode(a, 'data', generator.ORDER_NONE)
+ switch (b) {
+ case "LEN":
+ c = "len(" + a + ")";
+ break;
+ case "SUM":
+ c = "sum(" + a + ")";
+ break;
+ case "MIN":
+ c = "min(" + a + ")";
+ break;
+ case "MAX":
+ c = "max(" + a + ")";
+ break;
+ case 'AVERAGE':
+ generator.definitions_['import_mixpy_math_mean'] = "from mixpy import math_mean";
+ c = 'math_mean(' + a + ')';
+ break;
+ case 'MEDIAN':
+ generator.definitions_['import_mixpy_math_median'] = "from mixpy import math_median";
+ c = 'math_median(' + a + ')';
+ break;
+ case 'MODE':
+ generator.definitions_['import_mixpy_math_modes'] = "from mixpy import math_modes";
+ c = 'math_modes(' + a + ')';
+ break;
+ case 'STD_DEV':
+ generator.definitions_['import_mixpy_math_standard_deviation'] = "from mixpy import math_standard_deviation";
+ c = 'math_standard_deviation(' + a + ')';
+ break;
+ default:
+ throw 'Unknown operator: ' + b;
+ }
+ if (c)
+ return [c, generator.ORDER_ATOMIC];
+
+}
+
+const lists_sort = function (block, generator) {
+ // Block for sorting a list.
+ generator.definitions_['import_mixpy_lists_sort'] = "from mixpy import lists_sort";
+ var list = (generator.valueToCode(block, 'LIST',
+ generator.ORDER_NONE) || '[]');
+ var type = block.getFieldValue('TYPE');
+ var reverse = block.getFieldValue('DIRECTION') === '1' ? 'False' : 'True';
+ var code = 'lists_sort(' + list + ', "' + type + '", ' + reverse + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const lists_change_to = function (_, generator) {
+ var op = this.getFieldValue('OP');
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ var code = '';
+ if (op == 'array') {
+ generator.definitions_['import_numpy'] = 'import numpy';
+ code = 'numpy.array(' + varName + ')';
+ }
+ else {
+ code = op + '(' + varName + ')';
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const list_many_input = function (_, generator) {
+ var text = this.getFieldValue('CONTENT');
+ var code = '[' + text + ']'
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const lists_create_with_noreturn = function (_, generator) {
+ // Create a list with any number of elements of any type.
+ var code = new Array(this.itemCount_);
+ var default_value = '0';
+ for (var n = 0; n < this.itemCount_; n++) {
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || default_value;
+ }
+ var code = '[' + code.join(', ') + ']';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const lists_change_to_general = lists_change_to;
+
+const lists_del_general = function (_, generator) {
+ var varName = generator.valueToCode(this, 'TUP', generator.ORDER_ASSIGNMENT) || '0';
+ var code = 'del ' + varName + '\n';
+ return code;
+}
+
+const lists_create_with2 = lists_create_with
+const lists_create_with_text2 = lists_create_with_text
+const lists_getIndex3 = lists_get_index
+const lists_getSublist3 = lists_get_sublist
+const lists_setIndex3 = lists_set_index
+const lists_insert_value2 = lists_insert_value
+const lists_remove_at2 = lists_remove_at
+
+const list_tolist = function (_, generator) {
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'
+ return ['list(' + str + ')', generator.ORDER_ATOMIC];
+}
+
+const list_tolist2 = function (_, generator) {
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'
+ return [str + '.tolist()', generator.ORDER_ATOMIC];
+}
+
+const enumerate = function (_, generator) {
+ var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';
+ var argument = generator.valueToCode(this, 'VALUE', generator.ORDER_ASSIGNMENT) || '0';
+ var code = 'enumerate(' +varName+',start='+ argument + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const content_in_lists = function (_, generator) {
+ var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';
+ var con = generator.valueToCode(this, 'CON', generator.ORDER_ASSIGNMENT) || '0';
+ var code = con +' in '+varName;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../python/generators/logic.js":
+/*!*************************************!*\
+ !*** ../python/generators/logic.js ***!
+ \*************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ logic_boolean: () => (/* binding */ logic_boolean),
+/* harmony export */ logic_compare: () => (/* binding */ logic_compare),
+/* harmony export */ logic_compare_continous: () => (/* binding */ logic_compare_continous),
+/* harmony export */ logic_is: () => (/* binding */ logic_is),
+/* harmony export */ logic_is_in: () => (/* binding */ logic_is_in),
+/* harmony export */ logic_negate: () => (/* binding */ logic_negate),
+/* harmony export */ logic_null: () => (/* binding */ logic_null),
+/* harmony export */ logic_operation: () => (/* binding */ logic_operation),
+/* harmony export */ logic_tobool: () => (/* binding */ logic_tobool),
+/* harmony export */ logic_true_or_false: () => (/* binding */ logic_true_or_false)
+/* harmony export */ });
+const logic_compare = function (_, generator) {
+ // Comparison operator.
+ var mode = this.getFieldValue('OP');
+ var operator = logic_compare.OPERATORS[mode];
+ var order = (operator == '==' || operator == '!=') ?
+ generator.ORDER_EQUALITY : generator.ORDER_RELATIONAL;
+ var argument0 = generator.valueToCode(this, 'A', order) || '0';
+ var argument1 = generator.valueToCode(this, 'B', order) || '0';
+ var code = argument0 + ' ' + operator + ' ' + argument1;
+ return [code, order];
+}
+
+const logic_compare_continous = function (_, generator) {
+ // Comparison operator.
+ var mode1 = this.getFieldValue('OP1');
+ var operator1 = logic_compare.OPERATORS[mode1];
+ var mode2 = this.getFieldValue('OP2');
+ var operator2 = logic_compare.OPERATORS[mode2];
+ var argument0 = generator.valueToCode(this, 'A', generator.ORDER_RELATIONAL) || '0';
+ var argument1 = generator.valueToCode(this, 'B', generator.ORDER_RELATIONAL) || '0';
+ var argument2 = generator.valueToCode(this, 'C', generator.ORDER_RELATIONAL) || '0';
+ var code = argument0 + ' ' + operator1 + ' ' + argument1 + ' ' + operator2 + ' ' + argument2;
+ return [code, generator.ORDER_RELATIONAL];
+}
+
+logic_compare.OPERATORS = {
+ EQ: '==',
+ NEQ: '!=',
+ LT: '<',
+ LTE: '<=',
+ GT: '>',
+ GTE: '>='
+};
+
+const logic_operation = function (_, generator) {
+ // Operations 'and', 'or'.
+ var operator = this.getFieldValue('OP');
+ var order = (operator == '&&') ? generator.ORDER_LOGICAL_AND :
+ generator.ORDER_LOGICAL_OR;
+ var argument0 = generator.valueToCode(this, 'A', order) || 'False';
+ var argument1 = generator.valueToCode(this, 'B', order) || 'False';
+ if (operator == 'AND') {
+ var code = argument0 + ' and ' + argument1;
+ } else if (operator == 'OR') {
+ var code = argument0 + ' or ' + argument1;
+ } else if (operator == 'NOR') {
+ // var code = '('+argument0+' and '+argument1+' ) or ((not '+argument0+') and (not '+argument1+'))';
+ var code = 'not(' + argument0 + '^' + argument1 + ')';
+ } else {
+ // var code = '((not '+argument0+') and '+argument1+' ) or ( '+argument0+' and (not '+argument1+'))';
+ var code = argument0 + '^' + argument1;
+ }
+ return [code, order];
+}
+
+const logic_negate = function (_, generator) {
+ // Negation.
+ var order = generator.ORDER_UNARY_PREFIX;
+ var argument0 = generator.valueToCode(this, 'BOOL', order) || 'False';
+ var code = 'not ' + argument0;
+ return [code, order];
+}
+
+const logic_boolean = function (_, generator) {
+ // Boolean values true and false.
+ var code = (this.getFieldValue('BOOL') == 'TRUE') ? 'True' : 'False';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const logic_null = function (_, generator) {
+ var code = 'None';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const logic_true_or_false = function (_, generator) {
+ var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || 'False';
+ var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || 'False';
+ var c = generator.valueToCode(this, 'C', generator.ORDER_ATOMIC) || 'False';
+ var code = '(' + b + ' if ' + a + ' else ' + c + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const logic_is_in = function (_, generator) {
+ var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
+ var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
+ var bool = this.getFieldValue('BOOL');
+ var code = a + ' ' + bool + ' ' + b;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const logic_is = function (_, generator) {
+ var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\'\'';
+ var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\'\'';
+ var bool = this.getFieldValue('BOOL');
+ var code = a + ' ' + bool + ' ' + b;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const logic_tobool = function (_, generator) {
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'
+ return ['bool(' + str + ')', generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../python/generators/math.js":
+/*!************************************!*\
+ !*** ../python/generators/math.js ***!
+ \************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ base_map: () => (/* binding */ base_map),
+/* harmony export */ generate_cartesian_product: () => (/* binding */ generate_cartesian_product),
+/* harmony export */ math_arithmetic: () => (/* binding */ math_arithmetic),
+/* harmony export */ math_bit: () => (/* binding */ math_bit),
+/* harmony export */ math_constant: () => (/* binding */ math_constant),
+/* harmony export */ math_constant_mp: () => (/* binding */ math_constant_mp),
+/* harmony export */ math_constrain: () => (/* binding */ math_constrain),
+/* harmony export */ math_dec: () => (/* binding */ math_dec),
+/* harmony export */ math_indexer_number: () => (/* binding */ math_indexer_number),
+/* harmony export */ math_map: () => (/* binding */ math_map),
+/* harmony export */ math_max_min: () => (/* binding */ math_max_min),
+/* harmony export */ math_number: () => (/* binding */ math_number),
+/* harmony export */ math_number_base_conversion: () => (/* binding */ math_number_base_conversion),
+/* harmony export */ math_random: () => (/* binding */ math_random),
+/* harmony export */ math_random_seed: () => (/* binding */ math_random_seed),
+/* harmony export */ math_round: () => (/* binding */ math_round),
+/* harmony export */ math_selfcalcu: () => (/* binding */ math_selfcalcu),
+/* harmony export */ math_single: () => (/* binding */ math_single),
+/* harmony export */ math_to_int: () => (/* binding */ math_to_int),
+/* harmony export */ math_trig: () => (/* binding */ math_trig),
+/* harmony export */ text_to_number: () => (/* binding */ text_to_number),
+/* harmony export */ text_to_number_skulpt: () => (/* binding */ text_to_number_skulpt),
+/* harmony export */ turn_to_int: () => (/* binding */ turn_to_int)
+/* harmony export */ });
+// export const math_number = function() {
+// // Numeric value.
+// var code = (this.getFieldValue('NUM'));
+// // -4.abs() returns -4 in Dart due to strange order of operation choices.
+// // -4 is actually an operator and a number. Reflect this in the order.
+// var order = code < 0 ?
+// generator.ORDER_UNARY_PREFIX : generator.ORDER_ATOMIC;
+// return [code, order];
+// }
+
+// generator.math = {}
+// generator.addReservedWords("math,random,Number");
+
+const math_number = function (_, generator) {
+ // a = parseFloat(a.getFieldValue("NUM"));
+ // var b;
+ // Infinity == a ? (a = 'float("inf")', b = generator.ORDER_FUNCTION_CALL) : -Infinity == a ? (a = '-float("inf")', b = generator.ORDER_UNARY_SIGN) : b = 0 > a ? generator.ORDER_UNARY_SIGN : generator.ORDER_ATOMIC;
+ // return [a, b]
+
+ var code = this.getFieldValue('NUM');
+ // -4.abs() returns -4 in Dart due to strange order of operation choices.
+ // -4 is actually an operator and a number. Reflect this in the order.
+ var order = code < 0 ?
+ generator.ORDER_UNARY_PREFIX : generator.ORDER_ATOMIC;
+ return [code, order];
+}
+
+const math_constant = function (_, generator) {
+ generator.definitions_.import_math = "import math";
+ var name = this.getFieldValue('CONSTANT');
+ var code = 'math.' + name;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const math_constant_mp = function (_, generator) {
+ generator.definitions_.import_math = "import math";
+ var name = this.getFieldValue('CONSTANT');
+ var code = 'math.' + name;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const math_bit = function (_, generator) {
+ var operator = this.getFieldValue('OP');
+ var order = generator.ORDER_ATOMIC;
+ var argument0 = generator.valueToCode(this, 'A', order) || '0';
+ var argument1 = generator.valueToCode(this, 'B', order) || '0';
+ var code = '(' + argument0 + operator + argument1 + ')';
+ return [code, order];
+}
+
+const math_arithmetic = function (a, generator) {
+ var b = {
+ ADD: [" + ", generator.ORDER_ADDITIVE],
+ MINUS: [" - ", generator.ORDER_ADDITIVE],
+ MULTIPLY: [" * ", generator.ORDER_MULTIPLICATIVE],
+ DIVIDE: [" / ", generator.ORDER_MULTIPLICATIVE],
+ QUYU: [' % ', generator.ORDER_MULTIPLICATIVE],//增加取余操作
+ ZHENGCHU: [' // ', generator.ORDER_MULTIPLICATIVE],//增加整除操作
+ POWER: [" ** ", generator.ORDER_EXPONENTIATION]
+ }[a.getFieldValue("OP")];
+ var c = b[0],
+ b = b[1],
+ d = generator.valueToCode(a, "A", b) || "0";
+ a = generator.valueToCode(a, "B", b) || "0";
+ return [d + c + a, b]
+}
+
+const math_selfcalcu = function (_, generator) {
+ var argument0 = generator.valueToCode(this, 'A', generator.ORDER_RELATIONAL) || '0';
+ var argument1 = generator.valueToCode(this, 'B', generator.ORDER_RELATIONAL) || '0';
+ var operator = this.getFieldValue('OP');
+ switch (operator) {
+ case 'ADD': var op = '+='; break;
+ case 'MINUS': var op = '-='; break;
+ case 'MULTIPLY': var op = '*='; break;
+ case 'DIVIDE': var op = '/='; break;
+ case 'QUYU': var op = '%='; break;
+ case 'ZHENGCHU': var op = '//='; break;
+ case 'POWER': var op = '**='; break;
+ }
+ var code = argument0 + ' ' + op + ' ' + argument1 + '\n';
+ return code;
+}
+
+const math_single = function (a, generator) {
+ var b = a.getFieldValue("OP"),
+ c;
+ if ("NEG" == b)
+ return c = generator.valueToCode(a, "NUM", generator.ORDER_UNARY_SIGN) || "0", ["-" + c, generator.ORDER_UNARY_SIGN];
+ generator.definitions_['import_math'] = "import math";
+ a = "SIN" == b || "COS" == b || "TAN" == b ? generator.valueToCode(a, "NUM", generator.ORDER_MULTIPLICATIVE) || "0" : generator.valueToCode(a, "NUM", generator.ORDER_NONE) || "0";
+ switch (b) {
+ case "ABS":
+ c = "math.fabs(" + a + ")";
+ break;
+ case "ROOT":
+ c = "math.sqrt(" +
+ a + ")";
+ break;
+ case "LN":
+ c = "math.log(" + a + ")";
+ break;
+ case "LOG10":
+ c = "math.log10(" + a + ")";
+ break;
+ case "EXP":
+ c = "math.exp(" + a + ")";
+ break;
+ case "POW10":
+ c = "math.pow(10," + a + ")";
+ break;
+ case "ROUND":
+ c = "round(" + a + ")";
+ break;
+ case "ROUNDUP":
+ c = "math.ceil(" + a + ")";
+ break;
+ case "ROUNDDOWN":
+ c = "math.floor(" + a + ")";
+ break;
+ case "SIN":
+ c = "math.sin(" + a + ")";
+ break;
+ case "COS":
+ c = "math.cos(" + a + ")";
+ break;
+ case "TAN":
+ c = "math.tan(" + a + ")";
+ break;
+ case "++":
+ c = "++(" + a + ")";
+ break;
+ case "--":
+ c = "--(" + a + ")";
+ break;
+ case "-":
+ c = "-(" + a + ")";
+ break;
+ default:
+ }
+ if (c)
+ return [c, generator.ORDER_EXPONENTIATION];
+ switch (b) {
+ case "ASIN":
+ c = "math.degrees(math.asin(" + a + "))";
+ break;
+ case "ACOS":
+ c = "math.degrees(math.acos(" + a + "))";
+ break;
+ case "ATAN":
+ c = "math.degrees(math.atan(" + a + "))";
+ break;
+ }
+ return [c, generator.ORDER_MULTIPLICATIVE]
+}
+
+const math_trig = math_single;
+
+const math_dec = function (_, generator) {
+ var argument0 = generator.valueToCode(this, 'NUM', generator.ORDER_NONE) || '0';
+ var operator = this.getFieldValue('OP');
+ var code = operator + '(' + argument0 + ')';
+ return [code, generator.ORDER_ATOMIC];
+
+}
+
+const math_to_int = function (_, generator) {
+ var argument0 = generator.valueToCode(this, 'A', generator.ORDER_NONE) || '0';
+ var operator = this.getFieldValue('OP');
+ var code = "";
+ if (operator === "round") {
+ code = operator + '(' + argument0 + ')';
+ } else {
+ code = "math." + operator + '(' + argument0 + ')';
+ generator.definitions_.import_math = "import math";
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const math_max_min = function (_, generator) {
+ var a = generator.valueToCode(this, 'A', generator.ORDER_NONE) || '0';
+ var b = generator.valueToCode(this, 'B', generator.ORDER_NONE) || '0';
+ var operator = this.getFieldValue('OP');
+ var code = operator + '(' + a + ', ' + b + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const math_random = function (_, generator) {
+ generator.definitions_.import_random = "import random";
+ // Random integer between [X] and [Y].
+ var type = this.getFieldValue('TYPE');
+ var argument0 = generator.valueToCode(this, 'FROM',
+ generator.ORDER_NONE) || '0';
+ var argument1 = generator.valueToCode(this, 'TO',
+ generator.ORDER_NONE) || '0';
+ if (type == 'int') {
+ var code = 'random.randint(' + argument0 + ', ' + argument1 + ')';
+ } else if (type == 'float') {
+ var code = 'random.uniform(' + argument0 + ', ' + argument1 + ')';
+ }
+ return [code, generator.ORDER_UNARY_POSTFIX];
+}
+
+const math_map = function (_, generator) {
+ var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_NONE);
+ var value_fl = generator.valueToCode(this, 'fromLow', generator.ORDER_ATOMIC);
+ var value_fh = generator.valueToCode(this, 'fromHigh', generator.ORDER_ATOMIC);
+ var value_tl = generator.valueToCode(this, 'toLow', generator.ORDER_ATOMIC);
+ var value_th = generator.valueToCode(this, 'toHigh', generator.ORDER_ATOMIC);
+ generator.definitions_['import_mixpy_math_map'] = "from mixpy import math_map";
+ var code = 'math_map(' + value_num + ', ' + value_fl + ', ' + value_fh + ', ' + value_tl + ', ' + value_th + ')';
+ return [code, generator.ORDER_NONE];
+}
+
+const math_constrain = function (_, generator) {
+ // Constrain a number between two limits.
+ var argument0 = generator.valueToCode(this, 'VALUE',
+ generator.ORDER_NONE) || '0';
+ var argument1 = generator.valueToCode(this, 'LOW',
+ generator.ORDER_NONE) || '0';
+ var argument2 = generator.valueToCode(this, 'HIGH',
+ generator.ORDER_NONE) || '0';
+ var code = 'min(max(' + argument0 + ', ' + argument1 + '), ' + argument2 + ')';
+ return [code, generator.ORDER_UNARY_POSTFIX];
+}
+
+const math_number_base_conversion = function (a, generator) {
+ var c1 = a.getFieldValue("OP");
+ var d = generator.valueToCode(this, 'NUM', generator.ORDER_NONE) || '0';
+ var c2 = a.getFieldValue("OP2");
+ generator.definitions_['import_math'] = "import math";
+ var param1 = "";
+ var param2 = "10";
+ if (c1 == "two") {
+ param2 = '2';
+ } else if (c1 == "eight") {
+ param2 = '8'
+ } else if (c1 == "ten") {
+ param2 = '10'
+ } else if (c1 == "sixteen") {
+ param2 = '16'
+ }
+
+ if (c2 == "two") {
+ param1 = 'bin';
+ } else if (c2 == "eight") {
+ param1 = 'oct'
+ } else if (c2 == "ten") {
+ param1 = ''
+ } else if (c2 == "sixteen") {
+ param1 = 'hex'
+ }
+ if (param1 == "") {
+ var code = "int(str(" + d + "), " + param2 + ")";
+ } else {
+ var code = param1 + "(int(str(" + d + "), " + param2 + "))";
+
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const math_random_seed = function (_, generator) {
+ // Random integer between [X] and [Y].
+ generator.definitions_.import_random = "import random";
+ var a = generator.valueToCode(this, 'NUM', generator.ORDER_NONE) || '0';
+ var code = 'random.seed(' + a + ');' + '\n';
+ return code;
+}
+
+const math_indexer_number = function (_, generator) {
+ var code = this.getFieldValue('NUM');
+ // -4.abs() returns -4 in Dart due to strange order of operation choices.
+ // -4 is actually an operator and a number. Reflect this in the order.
+ var order = code < 0 ?
+ generator.ORDER_UNARY_PREFIX : generator.ORDER_ATOMIC;
+ return [code, order];
+}
+
+const math_round = function (_, generator) {
+ var argument0 = generator.valueToCode(this, 'VALUE',
+ generator.ORDER_NONE) || '0';
+ var argument1 = generator.valueToCode(this, 'VAR',
+ generator.ORDER_NONE) || '0';
+
+ var code = 'round(' + argument0 + ', ' + argument1 + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const text_to_number = function (_, generator) {
+ var towhat = this.getFieldValue('TOWHAT');
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ if (towhat == 'b') return ['' + str + '.encode("utf-8")', generator.ORDER_ATOMIC];
+ else if (towhat == 'bti') return ['int.from_bytes(' + str + ',"big")', generator.ORDER_ATOMIC];
+ return [towhat + "(" + str + ')', generator.ORDER_ATOMIC];
+}
+
+const text_to_number_skulpt = function (_, generator) {
+ var towhat = this.getFieldValue('TOWHAT');
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ if (towhat == 'b') return ['' + str + '.encode("utf-8")', generator.ORDER_ATOMIC];
+ return [towhat + "(" + str + ')', generator.ORDER_ATOMIC];
+}
+
+const base_map = math_map;
+
+const turn_to_int = function (_, generator) {
+ generator.definitions_.import_hexlify = "from ubinascii import hexlify";
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ return ["hexlify(" + str + ').decode()', generator.ORDER_ATOMIC];
+}
+
+const generate_cartesian_product = function (_, generator) {
+ generator.definitions_.import_itertools = 'import itertools';
+ let re = generator.valueToCode(this, 'REPEAT', generator.ORDER_ATOMIC);
+ let items = new Array(this.itemCount_);
+ for (let n = 0; n < this.itemCount_; n++) {
+ items[n] = generator.valueToCode(this, `ADD${n}`, generator.ORDER_NONE) || '0';
+ }
+ let code = '';
+ if (this.itemCount_) {
+ code = `itertools.product(${items.join(', ')}, repeat=${re})`;
+ }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../python/generators/procedures.js":
+/*!******************************************!*\
+ !*** ../python/generators/procedures.js ***!
+ \******************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ procedures_callnoreturn: () => (/* binding */ procedures_callnoreturn),
+/* harmony export */ procedures_callreturn: () => (/* binding */ procedures_callreturn),
+/* harmony export */ procedures_defnoreturn: () => (/* binding */ procedures_defnoreturn),
+/* harmony export */ procedures_defreturn: () => (/* binding */ procedures_defreturn),
+/* harmony export */ procedures_ifreturn: () => (/* binding */ procedures_ifreturn),
+/* harmony export */ procedures_return: () => (/* binding */ procedures_return)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const procedures_defreturn = function (_, generator) {
+ // Define a procedure with a return value.
+ var funcName = generator.variableDB_.getName(this.getFieldValue('NAME'),
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Procedures.NAME_TYPE);
+ var branch = (this.getInput('STACK') && generator.statementToCode(this, 'STACK')) ?? ' pass\n';
+ if (generator.INFINITE_LOOP_TRAP) {
+ branch = generator.INFINITE_LOOP_TRAP.replace(/%1/g,
+ '\'' + this.id + '\'') + branch;
+ }
+ var returnValue = generator.valueToCode(this, 'RETURN',
+ generator.ORDER_NONE) || '';
+ //var type=this.getFieldValue('TYPE');
+ if (returnValue) {
+ returnValue = ' return ' + returnValue + '\n';
+ }
+ //var returnType = returnValue ? type : 'void';
+ var args = [];
+ for (var x = 0; x < this.arguments_.length; x++) {
+ var varName = generator.variableDB_.getName(this.arguments_[x], blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ args[x] = varName;
+ }
+ var code = 'def ' + funcName + '(' + args.join(', ') + '):\n' +
+ branch + returnValue + '\n';
+ code = generator.scrub_(this, code);
+ generator.setups_[funcName] = code;
+ return null;
+}
+
+const procedures_defnoreturn = function (_, generator) {
+ // Define a procedure with a return value.
+ var funcName = generator.variableDB_.getName(this.getFieldValue('NAME'),
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Procedures.NAME_TYPE);
+ var branch = (this.getInput('STACK') && generator.statementToCode(this, 'STACK')) ?? ' pass\n';
+ if (generator.INFINITE_LOOP_TRAP) {
+ branch = generator.INFINITE_LOOP_TRAP.replace(/%1/g,
+ '\'' + this.id + '\'') + branch;
+ }
+ //var returnType = returnValue ? type : 'void';
+ var args = [];
+ for (var x = 0; x < this.arguments_.length; x++) {
+ var varName = generator.variableDB_.getName(this.arguments_[x], blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ args[x] = varName;
+ }
+ var code = 'def ' + funcName + '(' + args.join(', ') + '):\n' +
+ branch + '\n';
+ code = generator.scrub_(this, code);
+ generator.setups_[funcName] = code;
+ return null;
+}
+
+const procedures_callreturn = function (_, generator) {
+ // Call a procedure with a return value.
+ var funcName = generator.variableDB_.getName(this.getFieldValue('NAME'),
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Procedures.NAME_TYPE);
+ var args = [];
+ for (var x = 0; x < this.arguments_.length; x++) {
+ args[x] = generator.valueToCode(this, 'ARG' + x,
+ generator.ORDER_NONE) || 'null';
+ }
+ var code = funcName + '(' + args.join(', ') + ')';
+ return [code, generator.ORDER_UNARY_POSTFIX];
+}
+
+const procedures_callnoreturn = function (_, generator) {
+ // Call a procedure with no return value.
+ var funcName = generator.variableDB_.getName(this.getFieldValue('NAME'),
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Procedures.NAME_TYPE);
+ var args = [];
+ for (var x = 0; x < this.arguments_.length; x++) {
+ args[x] = generator.valueToCode(this, 'ARG' + x,
+ generator.ORDER_NONE) || 'null';
+ }
+ var code = funcName + '(' + args.join(', ') + ')\n';
+ return code;
+}
+
+const procedures_ifreturn = function (_, generator) {
+ // Conditionally return value from a procedure.
+ var condition = generator.valueToCode(this, 'CONDITION',
+ generator.ORDER_NONE) || 'False';
+ var code = 'if (' + condition + ') :\n';
+ if (this.hasReturnValue_) {
+ var value = generator.valueToCode(this, 'VALUE',
+ generator.ORDER_NONE) || 'None';
+ code += ' return ' + value;
+ } else {
+ code += ' return None';
+ }
+ code += '\n';
+ return code;
+}
+
+const procedures_return = function (_, generator) {
+ // Conditionally return value from a procedure.
+ var code = ""
+ if (this.hasReturnValue_) {
+ var value = generator.valueToCode(this, 'VALUE',
+ generator.ORDER_NONE) || 'None';
+ code += 'return ' + value;
+ } else {
+ code += 'return None';
+ }
+ code += '\n';
+ return code;
+}
+
+/***/ }),
+
+/***/ "../python/generators/set.js":
+/*!***********************************!*\
+ !*** ../python/generators/set.js ***!
+ \***********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ set_add_discard: () => (/* binding */ set_add_discard),
+/* harmony export */ set_clear: () => (/* binding */ set_clear),
+/* harmony export */ set_create_with: () => (/* binding */ set_create_with),
+/* harmony export */ set_create_with_text_return: () => (/* binding */ set_create_with_text_return),
+/* harmony export */ set_length: () => (/* binding */ set_length),
+/* harmony export */ set_operate: () => (/* binding */ set_operate),
+/* harmony export */ set_operate_update: () => (/* binding */ set_operate_update),
+/* harmony export */ set_pop: () => (/* binding */ set_pop),
+/* harmony export */ set_sub: () => (/* binding */ set_sub),
+/* harmony export */ set_toset: () => (/* binding */ set_toset),
+/* harmony export */ set_update: () => (/* binding */ set_update)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const set_create_with = function (_, generator) {
+ var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ var code = new Array(this.itemCount_);
+ var default_value = '0';
+ for (var n = 0; n < this.itemCount_; n++) {
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || default_value;
+ }
+ //generator.definitions_['var_declare'+varName] = varName+'= '+ '{' + code.join(', ') + '}\n';
+ code = varName + '= ' + '{' + code.join(', ') + '}\n';
+ if (this.itemCount_ == 0) { code = varName + ' = ' + 'set()\n' }
+ return code;
+}
+
+const set_length = function (_, generator) {
+ var varName = generator.valueToCode(this, 'SET', generator.ORDER_ASSIGNMENT) || '0';
+ var code = 'len(' + varName + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const set_pop = function (_, generator) {
+ var varName = generator.valueToCode(this, 'SET', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName + '.pop()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const set_clear = function (_, generator) {
+ var varName = generator.valueToCode(this, 'SET', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName + '.clear()\n';
+ return code;
+}
+
+const set_operate = function (_, generator) {
+ var vars1 = generator.valueToCode(this, 'SET1', generator.ORDER_ASSIGNMENT) || '0';
+ var vars2 = generator.valueToCode(this, 'SET2', generator.ORDER_ASSIGNMENT) || '0';
+ var operate = this.getFieldValue('OPERATE');
+ //var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = vars1 + "." + operate + "(" + vars2 + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const set_operate_update = function (_, generator) {
+ var vars1 = generator.valueToCode(this, 'SET1', generator.ORDER_ASSIGNMENT) || '0';
+ var vars2 = generator.valueToCode(this, 'SET2', generator.ORDER_ASSIGNMENT) || '0';
+ var operate = this.getFieldValue('OPERATE');
+ //var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = vars1 + "." + operate + "(" + vars2 + ')\n';
+ return code;
+}
+
+const set_add_discard = function (_, generator) {
+ var vars1 = generator.valueToCode(this, 'SET', generator.ORDER_ASSIGNMENT) || '0';
+ var operate = this.getFieldValue('OPERATE');
+ var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
+ var code = vars1 + "." + operate + "(" + argument + ')\n';
+ return code;
+}
+
+const set_sub = function (_, generator) {
+ var vars1 = generator.valueToCode(this, 'SET1', generator.ORDER_ASSIGNMENT) || '0';
+ var vars2 = generator.valueToCode(this, 'SET2', generator.ORDER_ASSIGNMENT) || '0';
+ var operate = this.getFieldValue('OPERATE');
+ //var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = vars1 + "." + operate + "(" + vars2 + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const set_update = function (_, generator) {
+ var varName = generator.valueToCode(this, 'SET', generator.ORDER_ASSIGNMENT) || '0';
+ var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ //var color = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName + "." + 'update' + '(' + color + ')\n';
+ return code;
+}
+
+// export const set_change_to = function(){
+// var op = this.getFieldValue('OP');
+// var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+// var code = op + '(' + varName + ')\n';
+// return [code, generator.ORDER_ATOMIC];
+// }
+
+const set_create_with_text_return = function (_, generator) {
+ var text = this.getFieldValue('TEXT');
+ var code = '{' + text + '}';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const set_toset = function (_, generator) {
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'
+ return ['set(' + str + ')', generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../python/generators/storage.js":
+/*!***************************************!*\
+ !*** ../python/generators/storage.js ***!
+ \***************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ sdcard_mount: () => (/* binding */ sdcard_mount),
+/* harmony export */ sdcard_use_spi_init: () => (/* binding */ sdcard_use_spi_init),
+/* harmony export */ storage_can_write_ornot: () => (/* binding */ storage_can_write_ornot),
+/* harmony export */ storage_change_dir: () => (/* binding */ storage_change_dir),
+/* harmony export */ storage_close_file: () => (/* binding */ storage_close_file),
+/* harmony export */ storage_delete_file: () => (/* binding */ storage_delete_file),
+/* harmony export */ storage_file_seek: () => (/* binding */ storage_file_seek),
+/* harmony export */ storage_file_tell: () => (/* binding */ storage_file_tell),
+/* harmony export */ storage_file_write: () => (/* binding */ storage_file_write),
+/* harmony export */ storage_fileopen: () => (/* binding */ storage_fileopen),
+/* harmony export */ storage_fileopen_new: () => (/* binding */ storage_fileopen_new),
+/* harmony export */ storage_fileopen_new_encoding: () => (/* binding */ storage_fileopen_new_encoding),
+/* harmony export */ storage_get_a_line: () => (/* binding */ storage_get_a_line),
+/* harmony export */ storage_get_contents: () => (/* binding */ storage_get_contents),
+/* harmony export */ storage_get_contents_without_para: () => (/* binding */ storage_get_contents_without_para),
+/* harmony export */ storage_get_current_dir: () => (/* binding */ storage_get_current_dir),
+/* harmony export */ storage_get_file_size: () => (/* binding */ storage_get_file_size),
+/* harmony export */ storage_get_filename: () => (/* binding */ storage_get_filename),
+/* harmony export */ storage_is_file: () => (/* binding */ storage_is_file),
+/* harmony export */ storage_list_all_files: () => (/* binding */ storage_list_all_files),
+/* harmony export */ storage_make_dir: () => (/* binding */ storage_make_dir),
+/* harmony export */ storage_open_file_with_os: () => (/* binding */ storage_open_file_with_os),
+/* harmony export */ storage_rename: () => (/* binding */ storage_rename)
+/* harmony export */ });
+const storage_open_file_with_os = function (_, generator) {
+ generator.definitions_['import_os'] = 'import os';
+ var fn = generator.valueToCode(this, 'fn', generator.ORDER_ATOMIC);
+ return "os.startfile(" + fn + ")\n";
+}
+
+const storage_fileopen = function (_, generator) {
+ // For each loop.
+ var variable0 = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ var fn = generator.valueToCode(this, 'FILENAME', generator.ORDER_ATOMIC);
+ var mode = this.getFieldValue('MODE');
+ var code = variable0 + ' = open(' + fn + ', \'' + mode + '\')\n';
+ return code;
+}
+
+const storage_fileopen_new = function (_, generator) { // For each loop.
+ var fn = generator.valueToCode(this, 'FILENAME', generator.ORDER_ATOMIC);
+ var mode = this.getFieldValue('MODE');
+ var code = 'open(' + fn + ', \'' + mode + '\')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const storage_fileopen_new_encoding = function (_, generator) { // For each loop.
+ var fn = generator.valueToCode(this, 'FILENAME', generator.ORDER_ATOMIC);
+ var mode = this.getFieldValue('MODE');
+ var encode = this.getFieldValue('CODE');
+ var code = 'open(' + fn + ', \'' + mode + '\', encoding="' + encode + '")';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const storage_file_write = function (_, generator) {
+ var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
+ var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ return file + ".write(" + data + ")\n";
+}
+
+const storage_get_contents_without_para = function (_, generator) {
+ var mode = this.getFieldValue('MODE');
+ var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ var code = file + '.' + mode + '()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const storage_get_contents = function (_, generator) {
+ var mode = this.getFieldValue('MODE');
+ var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ var size = generator.valueToCode(this, 'SIZE', generator.ORDER_ATOMIC);
+ var code = file + '.' + mode + '(' + size + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const storage_get_a_line = function (_, generator) {
+ var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ var size = generator.valueToCode(this, 'SIZE', generator.ORDER_ATOMIC);
+ var code = file + ".readline(" + size + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const storage_can_write_ornot = function (_, generator) {
+ var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ var code = file + ".writable()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const storage_get_filename = function (_, generator) {
+ var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ var code = file + ".name()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const storage_close_file = function (_, generator) {
+ var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ var code = file + ".close()\n";
+ return code;
+}
+
+const storage_list_all_files = function (_, generator) {
+ generator.definitions_['import_os'] = 'import os';
+ var code = 'os.listdir()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const storage_delete_file = function (_, generator) {
+ generator.definitions_['import_os'] = 'import os';
+ var mode = this.getFieldValue('MODE');
+ var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ var code = "os." + mode + "(" + file + ")\n";
+ return code;
+}
+
+const storage_get_file_size = function (_, generator) {
+ generator.definitions_['import_os'] = 'import os';
+ var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ var code = "os.path.getsize(" + file + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const storage_file_tell = function (_, generator) {
+ var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ var code = file + ".tell()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const storage_file_seek = function (_, generator) {
+ var mode = this.getFieldValue('MODE');
+ var mode_num = 0;
+ if (mode == 'start') {
+ mode_num = 0;
+ }
+ else if (mode == 'current') {
+ mode_num = 1;
+ }
+ else {
+ mode_num = 2;
+ }
+ var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ var size = generator.valueToCode(this, 'SIZE', generator.ORDER_ATOMIC);
+ var code = file + '.seek(' + size + ',' + mode_num + ')\n';
+ return code;
+}
+
+const storage_change_dir = function (_, generator) {
+ generator.definitions_['import_os'] = 'import os';
+ var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ var code = "os.chdir(" + file + ")\n";
+ return code;
+}
+
+const storage_get_current_dir = function (_, generator) {
+ generator.definitions_['import_os'] = 'import os';
+ var code = 'os.getcwd()';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const storage_make_dir = function (_, generator) {
+ generator.definitions_['import_os'] = 'import os';
+ var mode = this.getFieldValue('MODE');
+ var path = generator.valueToCode(this, 'PATH', generator.ORDER_ATOMIC);
+ var code = 'os.' + mode + '(' + path + ')\n';
+ return code;
+}
+
+const storage_rename = function (_, generator) {
+ generator.definitions_['import_os'] = 'import os';
+ var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ var file1 = generator.valueToCode(this, 'NEWFILE', generator.ORDER_ATOMIC);
+ var code = "os.rename(" + file + "," + file1 + ")\n";
+ return code;
+}
+
+const storage_is_file = function (_, generator) {
+ generator.definitions_['import_os'] = 'import os';
+ var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);
+ var mode = this.getFieldValue('MODE');
+ var code = "os." + mode + "(" + file + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const sdcard_use_spi_init = function (_, generator) {
+ generator.definitions_['import_os'] = 'import os';
+ generator.definitions_['import_sdcard'] = 'import sdcard';
+ var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
+ var sv = generator.valueToCode(this, 'SPISUB', generator.ORDER_ATOMIC);
+ var pv = generator.valueToCode(this, 'PINSUB', generator.ORDER_ATOMIC);
+ var code = v + ' = sdcard.SDCard(' + sv + ',' + pv + ')\n';
+ return code;
+}
+
+const sdcard_mount = function (_, generator) {
+ generator.definitions_['import_os'] = 'import os';
+ generator.definitions_['import_sdcard'] = 'import sdcard';
+ var sd = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var dir = generator.valueToCode(this, 'DIR', generator.ORDER_ATOMIC);
+ return "os.mount(" + sd + ',' + dir + ")\n";
+}
+
+/***/ }),
+
+/***/ "../python/generators/text.js":
+/*!************************************!*\
+ !*** ../python/generators/text.js ***!
+ \************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ ascii_to_char: () => (/* binding */ ascii_to_char),
+/* harmony export */ char_to_ascii: () => (/* binding */ char_to_ascii),
+/* harmony export */ number_to_text: () => (/* binding */ number_to_text),
+/* harmony export */ os_system: () => (/* binding */ os_system),
+/* harmony export */ text: () => (/* binding */ text),
+/* harmony export */ text_capital: () => (/* binding */ text_capital),
+/* harmony export */ text_center: () => (/* binding */ text_center),
+/* harmony export */ text_char: () => (/* binding */ text_char),
+/* harmony export */ text_char_at: () => (/* binding */ text_char_at),
+/* harmony export */ text_char_at2: () => (/* binding */ text_char_at2),
+/* harmony export */ text_char_at3: () => (/* binding */ text_char_at3),
+/* harmony export */ text_compareTo: () => (/* binding */ text_compareTo),
+/* harmony export */ text_compare_to: () => (/* binding */ text_compare_to),
+/* harmony export */ text_encode: () => (/* binding */ text_encode),
+/* harmony export */ text_equals_starts_ends: () => (/* binding */ text_equals_starts_ends),
+/* harmony export */ text_eval: () => (/* binding */ text_eval),
+/* harmony export */ text_find: () => (/* binding */ text_find),
+/* harmony export */ text_format: () => (/* binding */ text_format),
+/* harmony export */ text_format_noreturn: () => (/* binding */ text_format_noreturn),
+/* harmony export */ text_join: () => (/* binding */ text_join),
+/* harmony export */ text_join_seq: () => (/* binding */ text_join_seq),
+/* harmony export */ text_length: () => (/* binding */ text_length),
+/* harmony export */ text_random_char: () => (/* binding */ text_random_char),
+/* harmony export */ text_replace: () => (/* binding */ text_replace),
+/* harmony export */ text_split: () => (/* binding */ text_split),
+/* harmony export */ text_strip: () => (/* binding */ text_strip),
+/* harmony export */ text_substring: () => (/* binding */ text_substring),
+/* harmony export */ text_substring2: () => (/* binding */ text_substring2),
+/* harmony export */ text_substring3: () => (/* binding */ text_substring3),
+/* harmony export */ text_textarea: () => (/* binding */ text_textarea)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const text = function (_, generator) {
+ // Text value.
+ //var code = 'String('+generator.quote_(this.getFieldValue('TEXT'))+')';
+ var code = generator.quote_(this.getFieldValue('TEXT'));
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const text_textarea = function (_, generator) {
+ // Text value.
+ //var code = 'String('+generator.quote_(this.getFieldValue('TEXT'))+')';
+ var code = '"""' + (this.getFieldValue('VALUE')) + '"""';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const text_char = function (_, generator) {
+ var code = '\'' + this.getFieldValue('TEXT') + '\'';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const text_join = function (_, generator) {
+ // Text value.
+ var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC);
+ var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC);
+ return [a + ' + ' + b, generator.ORDER_ADDITIVE];
+}
+
+const ascii_to_char = function (_, generator) {
+ var asciivalue = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'
+ return ['chr(' + asciivalue + ')', generator.ORDER_ATOMIC];
+}
+
+const char_to_ascii = function (_, generator) {
+ var charvalue = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || 'a';
+ return ['ord(' + charvalue + ')', generator.ORDER_ATOMIC];
+}
+
+const number_to_text = function (_, generator) {
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0';
+ return ['str(' + str + ')', generator.ORDER_ATOMIC];
+}
+
+const text_length = function (_, generator) {
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
+ return ['len(' + str + ')', generator.ORDER_ATOMIC];
+}
+
+const text_char_at2 = function (a, generator) {
+ var c = a.getFieldValue("WHERE") || "FROM_START",
+ str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
+ switch (c) {
+ case "FROM_START":
+ a = generator.getAdjustedInt(a, "AT");
+ return [str + "[" + a + "]", generator.ORDER_ATOMIC];
+ case "FROM_END":
+ a = generator.getAdjustedInt(a, "AT", 1, !0);
+ return [str + "[" + a + "]", generator.ORDER_ATOMIC];
+ case "RANDOM":
+ generator.definitions_.import_random = "import random";
+ return ["random.choice(" + str + ")", generator.ORDER_FUNCTION_CALL];
+ }
+ throw "Unhandled combination (lists_getIndex).";
+}
+
+const text_char_at = function (_, generator) {
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
+ var at = generator.valueToCode(this, 'AT', generator.ORDER_ATOMIC) || 0;
+ return [str + "[" + at + "]", generator.ORDER_ATOMIC];
+}
+
+const text_random_char = function (_, generator) {
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
+ generator.definitions_.import_random = "import random";
+ return ["random.choice(" + str + ")", generator.ORDER_FUNCTION_CALL];
+}
+
+const text_equals_starts_ends = function (_, generator) {
+ var str1 = (generator.valueToCode(this, 'STR1', generator.ORDER_ATOMIC) || '""');
+ var str2 = (generator.valueToCode(this, 'STR2', generator.ORDER_ATOMIC) || '""');
+ var dowhat = this.getFieldValue('DOWHAT');
+ if (dowhat === '===')
+ return [str1 + ' == ' + str2, generator.ORDER_ATOMIC];
+ return [str1 + '.' + dowhat + '(' + str2 + ')', generator.ORDER_ATOMIC];
+}
+
+const text_compare_to = function (_, generator) {
+ var str1 = (generator.valueToCode(this, 'STR1', generator.ORDER_ATOMIC) || '""');
+ var str2 = (generator.valueToCode(this, 'STR2', generator.ORDER_ATOMIC) || '""');
+ return ['cmp(' + str1 + ',' + str2 + ')', generator.ORDER_ATOMIC];
+}
+
+const text_substring2 = function (block, generator) {
+ // Get sublist.
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
+ var where1 = block.getFieldValue('WHERE1');
+ var where2 = block.getFieldValue('WHERE2');
+ switch (where1) {
+ case 'FROM_START':
+ var at1 = generator.getAdjustedInt(block, 'AT1');
+ if (at1 == '0') {
+ at1 = '';
+ }
+ break;
+ case 'FROM_END':
+ var at1 = generator.getAdjustedInt(block, 'AT1', 0, true);
+ break;
+ case 'FIRST':
+ var at1 = '0';
+ break;
+ default:
+ throw 'Unhandled option (lists_getSublist)';
+ }
+ switch (where2) {
+ case 'FROM_START':
+ var at2 = generator.getAdjustedInt(block, 'AT2');
+ break;
+ case 'FROM_END':
+ var at2 = generator.getAdjustedInt(block, 'AT2', 0, true);
+ // Ensure that if the result calculated is 0 that sub-sequence will
+ // include all elements as expected.
+ if (!blockly_core__WEBPACK_IMPORTED_MODULE_0__.isNumber(String(at2))) {
+ generator.definitions_['import_sys'] = 'import sys';
+ at2 += ' or sys.maxsize';
+ } else if (at2 == '0') {
+ at2 = '';
+ }
+ break;
+ case 'LAST':
+ var at2 = '-1';
+ break;
+ default:
+ throw 'Unhandled option (lists_getSublist)';
+ }
+ var code = str + '[' + at1 + ' : ' + at2 + ']';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const text_substring = function (_, generator) {
+ // Get sublist.
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
+ var at1 = generator.valueToCode(this, 'AT1', generator.ORDER_ATOMIC);
+ var at2 = generator.valueToCode(this, 'AT2', generator.ORDER_ATOMIC);
+ var code = str + '[' + at1 + ' : ' + at2 + ']';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const text_capital = function (_, generator) {
+ var capital = this.getFieldValue('CAPITAL');
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ return ['' + str + '.' + capital + '()', generator.ORDER_ATOMIC];
+}
+
+const text_center = function (_, generator) {
+ var center = this.getFieldValue('CENTER');
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var width = generator.valueToCode(this, 'WID', generator.ORDER_ATOMIC);
+ var symbol = generator.valueToCode(this, 'Symbol', generator.ORDER_ATOMIC);
+ return ['' + str + '.' + center + '(' + width + ',' + symbol + ')', generator.ORDER_ATOMIC];
+}
+
+const text_find = function (_, generator) {
+ var sentence = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var str = generator.valueToCode(this, 'STR', generator.ORDER_ATOMIC);
+ return ['' + sentence + '.find(' + str + ')', generator.ORDER_ATOMIC];
+}
+
+const text_join_seq = function (_, generator) {
+ var sentence = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT) || '0';
+ return [sentence + '.join(' + varName + ')', generator.ORDER_ATOMIC];
+}
+
+const text_replace = function (_, generator) {
+ var sentence = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var str1 = generator.valueToCode(this, 'STR1', generator.ORDER_ATOMIC);
+ var str2 = generator.valueToCode(this, 'STR2', generator.ORDER_ATOMIC);
+ return ['' + sentence + '.replace(' + str1 + ',' + str2 + ')', generator.ORDER_ATOMIC];
+}
+
+const text_split = function (_, generator) {
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
+ var argument = generator.valueToCode(this, 'VAL', generator.ORDER_ATOMIC) || '""';
+ var code = str + ".split(" + argument + ")";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const text_strip = function (_, generator) {
+ var towhat = this.getFieldValue('TOWHAT');
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = str + "." + towhat + "()";
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const text_format = function (_, generator) {
+ // Create a list with any number of elements of any type.
+ var s = this.getFieldValue('VAR');
+ var code = new Array(this.itemCount_);
+ var default_value = '0';
+ for (var n = 0; n < this.itemCount_; n++) {
+
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || default_value;
+ }
+ var code = s + '.format(' + code.join(', ') + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const text_format_noreturn = function (_, generator) {
+ // Create a list with any number of elements of any type.
+ var s = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = new Array(this.itemCount_);
+ var default_value = '0';
+ for (var n = 0; n < this.itemCount_; n++) {
+
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || default_value;
+ }
+ var code = s + '.format(' + code.join(', ') + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const text_substring3 = text_substring
+const text_compareTo = text_compare_to
+const text_char_at3 = text_char_at
+
+const text_encode = function (_, generator) {
+ var code = this.getFieldValue('DIR');
+ var varName = this.getFieldValue('CODE')
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
+ return [str + '.' + code + '("' + varName + '")', generator.ORDER_ATOMIC];
+}
+
+const text_eval = function (_, generator) {
+ var codestr = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = "eval" + '(' + codestr + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const os_system = function (_, generator) {
+ generator.definitions_['import_os'] = 'import os';
+ var codestr = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
+ var code = "os.system" + '(' + codestr + ')\n';
+ return code;
+}
+
+/***/ }),
+
+/***/ "../python/generators/tuple.js":
+/*!*************************************!*\
+ !*** ../python/generators/tuple.js ***!
+ \*************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ tuple_change_to: () => (/* binding */ tuple_change_to),
+/* harmony export */ tuple_create_with: () => (/* binding */ tuple_create_with),
+/* harmony export */ tuple_create_with_noreturn: () => (/* binding */ tuple_create_with_noreturn),
+/* harmony export */ tuple_create_with_text2: () => (/* binding */ tuple_create_with_text2),
+/* harmony export */ tuple_create_with_text_return: () => (/* binding */ tuple_create_with_text_return),
+/* harmony export */ tuple_del: () => (/* binding */ tuple_del),
+/* harmony export */ tuple_find: () => (/* binding */ tuple_find),
+/* harmony export */ tuple_getIndex: () => (/* binding */ tuple_getIndex),
+/* harmony export */ tuple_getSublist: () => (/* binding */ tuple_getSublist),
+/* harmony export */ tuple_get_random_item: () => (/* binding */ tuple_get_random_item),
+/* harmony export */ tuple_get_sublist: () => (/* binding */ tuple_get_sublist),
+/* harmony export */ tuple_input: () => (/* binding */ tuple_input),
+/* harmony export */ tuple_join: () => (/* binding */ tuple_join),
+/* harmony export */ tuple_length: () => (/* binding */ tuple_length),
+/* harmony export */ tuple_max: () => (/* binding */ tuple_max),
+/* harmony export */ tuple_totuple: () => (/* binding */ tuple_totuple),
+/* harmony export */ tuple_trig: () => (/* binding */ tuple_trig)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const tuple_create_with = function (_, generator) {
+ // Create a list with any number of elements of any type.
+ var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ //var size=window.parseFloat(this.getFieldValue('SIZE'));
+ var code = new Array(this.itemCount_);
+ var default_value = '0';
+ for (var n = 0; n < this.itemCount_; n++) {
+
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || default_value;
+ }
+ // if (this.itemCount_!=1){
+ // generator.definitions_['var_declare'+varName] = varName+'= '+ '(' + code.join(', ') + ')\n';}
+ // else {
+ // generator.definitions_['var_declare'+varName] = varName+'= '+ '(' + code.join(', ') + ',)\n';}
+ if (this.itemCount_ != 1) {
+ var code = varName + '= ' + '(' + code.join(', ') + ')\n';
+ }
+ else {
+ var code = varName + '= ' + '(' + code.join(', ') + ',)\n';
+ }
+ return code;
+}
+
+const tuple_create_with_text2 = function (_, generator) {
+ var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ //var size=window.parseFloat(this.getFieldValue('SIZE'));
+ var text = this.getFieldValue('TEXT');
+ //generator.definitions_['var_declare'+varName] = varName+'= '+ '(' + text + ')\n';
+ var code = varName + '= ' + '(' + text + ')\n';
+ return code;
+}
+
+const tuple_create_with_text_return = function (_, generator) {
+ var text = this.getFieldValue('TEXT');
+ var code = '(' + text + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const tuple_getIndex = function (_, generator) {
+ // Indexing into a list is the same as indexing into a string.
+ var varName = generator.valueToCode(this, 'TUP', generator.ORDER_ASSIGNMENT) || '0';
+ var argument0 = generator.valueToCode(this, 'AT',
+ generator.ORDER_ADDITIVE) || '1';
+ if (argument0.match(/^\d+$/)) {
+ // If the index is a naked number, decrement it right now.
+ argument0 = parseInt(argument0, 10);
+ }
+ // else {
+ // If the index is dynamic, decrement it in code.
+ // argument0;
+ // }
+ var code = varName + '[' + argument0 + ']';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const tuple_length = function (_, generator) {
+ var varName = generator.valueToCode(this, 'TUP', generator.ORDER_ASSIGNMENT) || '0';
+ var code = 'len(' + varName + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const tuple_del = function (_, generator) {
+ var varName = generator.valueToCode(this, 'TUP', generator.ORDER_ASSIGNMENT) || '0';
+ var code = 'del ' + varName + '\n';
+ return code;
+}
+
+const tuple_join = function (_, generator) {
+ var varName1 = generator.valueToCode(this, 'TUP1', generator.ORDER_ASSIGNMENT) || '0';
+ var varName2 = generator.valueToCode(this, 'TUP2', generator.ORDER_ASSIGNMENT) || '0';
+ var code = varName1 + " + " + varName2;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const tuple_max = function (_, generator) {
+ var varname = generator.valueToCode(this, 'TUP', generator.ORDER_ASSIGNMENT) || '0';
+ var maxmin = this.getFieldValue('DIR');
+ var code = maxmin + "(" + varname + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const tuple_change_to = function (_, generator) {
+ var op = this.getFieldValue('OP');
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ var code = op + '(' + varName + ')\n';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const tuple_find = function (_, generator) {
+ var op = this.getFieldValue('OP');
+ var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
+ var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';
+ if (op == 'INDEX')
+ var code = varName + '.index(' + argument + ')';
+ else if (op == 'COUNT')
+ var code = varName + '.count(' + argument + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const tuple_trig = function (a, generator) {
+ var b = a.getFieldValue("OP"), c;
+ generator.definitions_['import_math'] = "import math";
+ a = generator.valueToCode(a, 'data', generator.ORDER_NONE)
+ switch (b) {
+ case "LEN":
+ c = "len(" + a + ")";
+ break;
+ case "SUM":
+ c = "sum(" + a + ")";
+ break;
+ case "MIN":
+ c = "min(" + a + ")";
+ break;
+ case "MAX":
+ c = "max(" + a + ")";
+ break;
+ case 'AVERAGE':
+ // generator.definitions_['from_numbers_import_Number'] =
+ // 'from numbers import Number';
+ var functionName = generator.provideFunction_(
+ 'math_mean',
+ // This operation excludes null and values that aren't int or float:',
+ // math_mean([null, null, "aString", 1, 9]) == 5.0.',
+ ['def ' + generator.FUNCTION_NAME_PLACEHOLDER_ + '(myList):',
+ ' localList = [e for e in myList if type(e) == int or type(e) == float]',
+ ' if not localList: return',
+ ' return float(sum(localList)) / len(localList)']);
+ c = functionName + '(' + a + ')';
+ break;
+ case 'MEDIAN':
+ // generator.definitions_['from_numbers_import_Number'] =
+ // 'from numbers import Numberd';
+ var functionName = generator.provideFunction_(
+ 'math_median',
+ // This operation excludes null values:
+ // math_median([null, null, 1, 3]) == 2.0.
+ ['def ' + generator.FUNCTION_NAME_PLACEHOLDER_ + '(myList):',
+ ' localList = sorted([e for e in myList if type(e) == int or type(e) == float])',
+ ' if not localList: return',
+ ' if len(localList) % 2 == 0:',
+ ' return (localList[len(localList) // 2 - 1] + ' +
+ 'localList[len(localList) // 2]) / 2.0',
+ ' else:',
+ ' return localList[(len(localList) - 1) // 2]']);
+ c = functionName + '(' + a + ')';
+ break;
+ case 'MODE':
+ var functionName = generator.provideFunction_(
+ 'math_modes',
+ // As a list of numbers can contain more than one mode,
+ // the returned result is provided as an array.
+ // Mode of [3, 'x', 'x', 1, 1, 2, '3'] -> ['x', 1].
+ ['def ' + generator.FUNCTION_NAME_PLACEHOLDER_ + '(some_list):',
+ ' modes = []',
+ ' # Using a lists of [item, count] to keep count rather than dict',
+ ' # to avoid "unhashable" errors when the counted item is ' +
+ 'itself a list or dict.',
+ ' counts = []',
+ ' maxCount = 1',
+ ' for item in some_list:',
+ ' found = False',
+ ' for count in counts:',
+ ' if count[0] == item:',
+ ' count[1] += 1',
+ ' maxCount = max(maxCount, count[1])',
+ ' found = True',
+ ' if not found:',
+ ' counts.append([item, 1])',
+ ' for counted_item, item_count in counts:',
+ ' if item_count == maxCount:',
+ ' modes.append(counted_item)',
+ ' return modes']);
+ c = functionName + '(' + a + ')';
+ break;
+ case 'STD_DEV':
+ generator.definitions_['import_math'] = 'import math';
+ var functionName = generator.provideFunction_(
+ 'math_standard_deviation',
+ ['def ' + generator.FUNCTION_NAME_PLACEHOLDER_ + '(numbers):',
+ ' n = len(numbers)',
+ ' if n == 0: return',
+ ' mean = float(sum(numbers)) / n',
+ ' variance = sum((x - mean) ** 2 for x in numbers) / n',
+ ' return math.sqrt(variance)']);
+ c = functionName + '(' + a + ')';
+ break;
+ default:
+ throw 'Unknown operator: ' + b;
+ }
+ if (c)
+ return [c, generator.ORDER_FUNCTION_CALL];
+
+}
+
+const tuple_getSublist = function (block, generator) {
+ // Get sublist.
+ var list = generator.valueToCode(block, 'LIST',
+ generator.ORDER_MEMBER) || '[]';
+ var where1 = block.getFieldValue('WHERE1');
+ var where2 = block.getFieldValue('WHERE2');
+ switch (where1) {
+ case 'FROM_START':
+ var at1 = generator.getAdjustedInt(block, 'AT1');
+ if (at1 == '0') {
+ at1 = '';
+ }
+ break;
+ case 'FROM_END':
+ var at1 = generator.getAdjustedInt(block, 'AT1', 1, true);
+ break;
+ case 'FIRST':
+ var at1 = '0';
+ break;
+ default:
+ throw 'Unhandled option (lists_getSublist)';
+ }
+ switch (where2) {
+ case 'FROM_START':
+ var at2 = generator.getAdjustedInt(block, 'AT2', 1);
+ at2 = at2 - 1;
+ break;
+ case 'FROM_END':
+ var at2 = generator.getAdjustedInt(block, 'AT2', 1, true);
+ // Ensure that if the result calculated is 0 that sub-sequence will
+ // include all elements as expected.
+ if (!blockly_core__WEBPACK_IMPORTED_MODULE_0__.isNumber(String(at2))) {
+ generator.definitions_['import_sys'] = 'import sys';
+ at2 += ' or sys.maxsize';
+ } else if (at2 == '0') {
+ at2 = '';
+ }
+ break;
+ case 'LAST':
+ var at2 = '-1';
+ break;
+ default:
+ throw 'Unhandled option (lists_getSublist)';
+ }
+ var code = list + '[' + at1 + ' : ' + at2 + ']';
+ return [code, generator.ORDER_MEMBER];
+}
+
+const tuple_create_with_noreturn = function (_, generator) {
+ // Create a list with any number of elements of any type.
+ var code = new Array(this.itemCount_);
+ var default_value = '0';
+
+
+ for (var n = 0; n < this.itemCount_; n++) {
+
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || default_value;
+ }
+ // if (this.itemCount_!=1){
+ // generator.definitions_['var_declare'+varName] = varName+'= '+ '(' + code.join(', ') + ')\n';}
+ // else {
+ // generator.definitions_['var_declare'+varName] = varName+'= '+ '(' + code.join(', ') + ',)\n';}
+ if (this.itemCount_ != 1) {
+ var code = '(' + code.join(', ') + ')';
+ }
+ else {
+ var code = '(' + code.join(', ') + ',)';
+ }
+
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const tuple_get_sublist = function (_, generator) {
+ // Get sublist.
+ var list = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || '0';
+ var at1 = generator.valueToCode(this, 'AT1', generator.ORDER_ADDITIVE) || '0';
+ var at2 = generator.valueToCode(this, 'AT2', generator.ORDER_ADDITIVE) || '0';
+ var code = list + '[' + at1 + ' : ' + at2 + ']';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const tuple_get_random_item = function (_, generator) {
+ generator.definitions_['import_random'] = 'import random';
+ var varName = generator.valueToCode(this, 'TUP', generator.ORDER_ADDITIVE) || 'mytup';
+ var code = 'random.choice(' + varName + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const tuple_totuple = function (_, generator) {
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'
+ return ['tuple(' + str + ')', generator.ORDER_ATOMIC];
+}
+
+const tuple_input = function (_, generator) {
+ var text = generator.getFieldValue('CONTENT');
+ var code = '(' + text + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../python/generators/utility.js":
+/*!***************************************!*\
+ !*** ../python/generators/utility.js ***!
+ \***************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ attribute_access: () => (/* binding */ attribute_access),
+/* harmony export */ function_call: () => (/* binding */ function_call),
+/* harmony export */ raw_block: () => (/* binding */ raw_block),
+/* harmony export */ raw_empty: () => (/* binding */ raw_empty),
+/* harmony export */ raw_expression: () => (/* binding */ raw_expression),
+/* harmony export */ raw_table: () => (/* binding */ raw_table),
+/* harmony export */ type_check: () => (/* binding */ type_check)
+/* harmony export */ });
+/**
+ * @license
+ * Visual Blocks Language
+ *
+ * Copyright 2012 Google Inc.
+ * https://developers.google.com/blockly/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview Generating Python for utility blocks.
+ * @author acbart@vt.edu (Austin Cory Bart)
+ */
+
+const raw_block = function (block) {
+ var code = block.getFieldValue('TEXT') + "\n";
+ return code;
+}
+
+const raw_expression = function (block, generator) {
+ var code = block.getFieldValue('TEXT');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const raw_empty = function (block, generator) {
+ var code = generator.valueToCode(block, 'VALUE',
+ generator.ORDER_ATOMIC) || '';
+ return code + "\n";
+}
+
+const raw_table = function () {
+ //var code = block.getFieldValue('TEXT')+"\n";
+ return '';//code;
+}
+
+const type_check = function (block, generator) {
+ var value = generator.valueToCode(block, 'VALUE',
+ generator.ORDER_MEMBER) || '___';
+ var code = 'type(' + value + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const function_call = function (block, generator) {
+ var name = block.getFieldValue('NAME');
+ var hasReturn = block.hasReturn_;
+ var args = new Array(block.itemCount_);
+ for (var n = 0; n < block.itemCount_; n++) {
+ args[n] = generator.valueToCode(block, 'ARGUMENT' + n,
+ generator.ORDER_NONE) || '___';
+ }
+ var code = name + '(' + args.join(', ') + ')';
+ if (hasReturn) {
+ return [code, generator.ORDER_ATOMIC];
+ }
+ return code + '\n';
+}
+
+const attribute_access = function (block, generator) {
+ var value_module = generator.valueToCode(block, 'MODULE', generator.ORDER_ATOMIC);
+ var value_name = generator.valueToCode(block, 'NAME', generator.ORDER_ATOMIC);
+ //去除掉两端的括号,如(val()) --> val()
+ value_name = value_name.substring(1, value_name.length - 1);
+ // TODO: Assemble JavaScript into code variable.
+ var code = value_module + '.' + value_name;
+ // TODO: Change ORDER_NONE to the correct strength.
+ return [code, generator.ORDER_NONE];
+}
+
+/***/ }),
+
+/***/ "../python/generators/variables.js":
+/*!*****************************************!*\
+ !*** ../python/generators/variables.js ***!
+ \*****************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ controls_type: () => (/* binding */ controls_type),
+/* harmony export */ controls_typeLists: () => (/* binding */ controls_typeLists),
+/* harmony export */ lists_zip: () => (/* binding */ lists_zip),
+/* harmony export */ unpack_iterable_object: () => (/* binding */ unpack_iterable_object),
+/* harmony export */ variables_change: () => (/* binding */ variables_change),
+/* harmony export */ variables_get: () => (/* binding */ variables_get),
+/* harmony export */ variables_global: () => (/* binding */ variables_global),
+/* harmony export */ variables_set: () => (/* binding */ variables_set)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const variables_get = function (_, generator) {
+ // Variable getter.
+ var code = generator.variableDB_.getName(this.getFieldValue('VAR'),
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ return [code, generator.ORDER_ATOMIC];
+}
+
+// export const variables_declare = function() {
+// var dropdown_type = this.getFieldValue('TYPE');
+// var argument0;
+// //TODO: settype to variable
+// argument0 = generator.valueToCode(this, 'VALUE',generator.ORDER_ASSIGNMENT) || 'None';
+// var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
+// Blockly.Variables.NAME_TYPE);
+
+// if (dropdown_type === 'number')
+// generator.definitions_['var_declare' + varName] = 'let ' + ' ' + varName + ' = 0;';
+// else if(dropdown_type === 'string')
+// generator.definitions_['var_declare' + varName] = 'let ' + ' ' + varName + ' = \'\';';
+// else if(dropdown_type === 'boolean')
+// generator.definitions_['var_declare' + varName] = 'let ' + ' ' + varName + ' = true;';
+// else if(dropdown_type.startsWith('Array'))
+// generator.definitions_['var_declare' + varName] = 'let ' + varName + ':' + dropdown_type + ' = [];';
+
+// if(generator.setups_['var_declare' + varName] === undefined) {
+// generator.setups_['var_declare' + varName] = varName + ' = ' + argument0 + '\n';
+// }else {
+// }
+// return '';
+// }
+
+const variables_set = function (_, generator) {
+ // Variable setter.
+ if (this.getFieldValue('VAR') == "") {
+ return " = None\n";
+ }
+ var argument0 = generator.valueToCode(this, 'VALUE',
+ generator.ORDER_ASSIGNMENT) || 'None';
+ var varName = generator.variableDB_.getName(this.getFieldValue('VAR'), blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables.NAME_TYPE);
+ return varName + ' = ' + argument0 + '\n';
+}
+
+const variables_change = function (_, generator) {
+ // Variable setter.
+ var operator = this.getFieldValue('OP');
+ var varName = generator.valueToCode(this, 'MYVALUE', generator.ORDER_ATOMIC) || 'None';
+ if (operator == 'bytes') { var code = operator + '(' + varName + ',"UTF-8")'; }
+ else { var code = operator + '(' + varName + ')'; }
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const variables_global = function (_, generator) {
+ var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || 'None';
+ var code = "global " + str + '\n';
+ return code;
+}
+
+// ok
+const controls_type = function (_, generator) {
+ var data = generator.valueToCode(this, 'DATA', generator.ORDER_ATOMIC) || 'None'
+ var code = 'type(' + data + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const controls_typeLists = function (_, generator) {
+ //generator.definitions_['import_microbit_*'] = 'from microbit import *';
+ var type = this.getFieldValue('type');
+ // generator.definitions_['func_type' + type] = code;
+ return [type, generator.ORDER_ATOMIC];
+}
+
+const lists_zip = function (_, generator) {
+ var code = new Array(this.itemCount_);
+ var default_value = '[]';
+ for (var n = 0; n < this.itemCount_; n++) {
+ code[n] = generator.valueToCode(this, 'ADD' + n,
+ generator.ORDER_NONE) || default_value;
+ }
+ var code = 'zip(' + code.join(', ') + ')';
+ return [code, generator.ORDER_ATOMIC];
+}
+
+const unpack_iterable_object = function (_, generator) {
+ const varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '[]';
+ const type = this.getFieldValue('TYPE');
+ const code = `${type}(${varName})`;
+ return [code, generator.ORDER_ATOMIC];
+}
+
+/***/ }),
+
+/***/ "../python/others/names.js":
+/*!*********************************!*\
+ !*** ../python/others/names.js ***!
+ \*********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
+/* harmony export */ });
+/* harmony import */ var _variables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./variables */ "../python/others/variables.js");
+/**
+ * @license
+ * Visual Blocks Editor
+ *
+ * Copyright 2012 Google Inc.
+ * https://developers.google.com/blockly/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview Utility functions for handling variables and procedure names.
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+
+/**
+ * Class for a database of entity names (variables, functions, etc).
+ * @param {string} reservedWords A comma-separated string of words that are
+ * illegal for use as names in a language (e.g. 'new,if,this,...').
+ * @param {string=} opt_variablePrefix Some languages need a '$' or a namespace
+ * before all variable names.
+ * @constructor
+ */
+class Names {
+ constructor(reservedWords, opt_variablePrefix) {
+ this.variablePrefix_ = opt_variablePrefix || '';
+ this.reservedDict_ = Object.create(null);
+ if (reservedWords) {
+ var splitWords = reservedWords.split(',');
+ for (var i = 0; i < splitWords.length; i++) {
+ this.reservedDict_[splitWords[i]] = true;
+ }
+ }
+ this.reset();
+ }
+ /**
+ * Do the given two entity names refer to the same entity?
+ * Blockly names are case-insensitive.
+ * @param {string} name1 First name.
+ * @param {string} name2 Second name.
+ * @return {boolean} True if names are the same.
+ */
+ static equals(name1, name2) {
+ return name1.toLowerCase() == name2.toLowerCase();
+ }
+ /**
+ * When JavaScript (or most other languages) is generated, variable 'foo' and
+ * procedure 'foo' would collide. However, Blockly has no such problems since
+ * variable get 'foo' and procedure call 'foo' are unambiguous.
+ * Therefore, Blockly keeps a separate type name to disambiguate.
+ * getName('foo', 'variable') -> 'foo'
+ * getName('foo', 'procedure') -> 'foo2'
+ */
+ /**
+ * Empty the database and start from scratch. The reserved words are kept.
+ */
+ reset() {
+ this.db_ = Object.create(null);
+ this.dbReverse_ = Object.create(null);
+ this.variableMap_ = null;
+ }
+ /**
+ * Set the variable map that maps from variable name to variable object.
+ * @param {!Blockly.VariableMap} map The map to track.
+ * @package
+ */
+ setVariableMap(map) {
+ this.variableMap_ = map;
+ }
+ /**
+ * Get the name for a user-defined variable, based on its ID.
+ * This should only be used for variables of type Variables.NAME_TYPE.
+ * @param {string} id The ID to look up in the variable map.
+ * @return {?string} The name of the referenced variable, or null if there was
+ * no variable map or the variable was not found in the map.
+ * @private
+ */
+ getNameForUserVariable_(id) {
+ if (!this.variableMap_) {
+ /*
+ console.log('Deprecated call to Names.prototype.getName without ' +
+ 'defining a variable map. To fix, add the folowing code in your ' +
+ 'generator\'s init() function:\n' +
+ 'Blockly.YourGeneratorName.variableDB_.setVariableMap(' +
+ 'workspace.getVariableMap());');
+ */
+ return null;
+ }
+ var variable = this.variableMap_.getVariableById(id);
+ if (variable) {
+ return variable.name;
+ }
+ return null;
+ }
+ /**
+ * Convert a Blockly entity name to a legal exportable entity name.
+ * @param {string} name The Blockly entity name (no constraints).
+ * @param {string} type The type of entity in Blockly
+ * ('VARIABLE', 'PROCEDURE', 'BUILTIN', etc...).
+ * @return {string} An entity name that is legal in the exported language.
+ */
+ getName(name, type) {
+ if (type == _variables__WEBPACK_IMPORTED_MODULE_0__["default"].NAME_TYPE) {
+ var varName = this.getNameForUserVariable_(name);
+ if (varName) {
+ name = varName;
+ }
+ }
+ var normalized = name.toLowerCase() + '_' + type;
+
+ var isVarType = type == _variables__WEBPACK_IMPORTED_MODULE_0__["default"].NAME_TYPE ||
+ type == Names.DEVELOPER_VARIABLE_TYPE;
+
+ var prefix = isVarType ? this.variablePrefix_ : '';
+ if (normalized in this.db_) {
+ return prefix + this.db_[normalized];
+ }
+ var safeName = this.getDistinctName(name, type);
+ this.db_[normalized] = safeName.substr(prefix.length);
+ return safeName;
+ }
+ /**
+ * Convert a Blockly entity name to a legal exportable entity name.
+ * Ensure that this is a new name not overlapping any previously defined name.
+ * Also check against list of reserved words for the current language and
+ * ensure name doesn't collide.
+ * @param {string} name The Blockly entity name (no constraints).
+ * @param {string} type The type of entity in Blockly
+ * ('VARIABLE', 'PROCEDURE', 'BUILTIN', etc...).
+ * @return {string} An entity name that is legal in the exported language.
+ */
+ getDistinctName(name, type) {
+ var safeName = this.safeName_(name);
+ var i = '';
+ while (this.dbReverse_[safeName + i] ||
+ (safeName + i) in this.reservedDict_) {
+ // Collision with existing name. Create a unique name.
+ i = i ? i + 1 : 2;
+ }
+ safeName += i;
+ this.dbReverse_[safeName] = true;
+ var isVarType = type == _variables__WEBPACK_IMPORTED_MODULE_0__["default"].NAME_TYPE ||
+ type == Names.DEVELOPER_VARIABLE_TYPE;
+ var prefix = isVarType ? this.variablePrefix_ : '';
+ return prefix + safeName;
+ }
+ /**
+ * Given a proposed entity name, generate a name that conforms to the
+ * [_A-Za-z][_A-Za-z0-9]* format that most languages consider legal for
+ * variables.
+ * @param {string} name Potentially illegal entity name.
+ * @return {string} Safe entity name.
+ * @private
+ */
+ safeName_(name) {
+ if (!name) {
+ name = 'unnamed';
+ } else {
+ // Unfortunately names in non-latin characters will look like
+ // _E9_9F_B3_E4_B9_90 which is pretty meaningless.
+ // https://github.com/google/blockly/issues/1654
+ name = encodeURI(name.replace(/ /g, '_')).replace(/[^,\w]/g, '_');
+ // Most languages don't allow names with leading numbers.
+ if ('0123456789'.indexOf(name[0]) != -1) {
+ name = 'my_' + name;
+ }
+ }
+ return name;
+ }
+}
+
+/**
+ * Constant to separate developer variable names from user-defined variable
+ * names when running generators.
+ * A developer variable will be declared as a global in the generated code, but
+ * will never be shown to the user in the workspace or stored in the variable
+ * map.
+ */
+Names.DEVELOPER_VARIABLE_TYPE = 'DEVELOPER_VARIABLE';
+
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Names);
+
+/***/ }),
+
+/***/ "../python/others/procedures.js":
+/*!**************************************!*\
+ !*** ../python/others/procedures.js ***!
+ \**************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/**
+ * @license
+ * Copyright 2012 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview Utility functions for handling procedures.
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+
+const Procedures = {};
+
+/**
+ * Constant to separate procedure names from variables and generated functions
+ * when running generators.
+ * @deprecated Use Blockly.PROCEDURE_CATEGORY_NAME
+ */
+Procedures.NAME_TYPE = blockly_core__WEBPACK_IMPORTED_MODULE_0__.PROCEDURE_CATEGORY_NAME;
+
+/**
+ * Find all user-created procedure definitions in a workspace.
+ * @param {!Blockly.Workspace} root Root workspace.
+ * @return {!Array.>} Pair of arrays, the
+ * first contains procedures without return variables, the second with.
+ * Each procedure is defined by a three-element list of name, parameter
+ * list, and return value boolean.
+ */
+Procedures.allProcedures = function (root) {
+ var blocks = root.getAllBlocks(false);
+ var proceduresReturn = [];
+ var proceduresNoReturn = [];
+ for (var i = 0; i < blocks.length; i++) {
+ if (blocks[i].getProcedureDef) {
+ var tuple = blocks[i].getProcedureDef();
+ if (tuple) {
+ if (tuple[2]) {
+ proceduresReturn.push(tuple);
+ } else {
+ proceduresNoReturn.push(tuple);
+ }
+ }
+ }
+ }
+ proceduresNoReturn.sort(Procedures.procTupleComparator_);
+ proceduresReturn.sort(Procedures.procTupleComparator_);
+ return [proceduresNoReturn, proceduresReturn];
+};
+
+/**
+ * Comparison function for case-insensitive sorting of the first element of
+ * a tuple.
+ * @param {!Array} ta First tuple.
+ * @param {!Array} tb Second tuple.
+ * @return {number} -1, 0, or 1 to signify greater than, equality, or less than.
+ * @private
+ */
+Procedures.procTupleComparator_ = function (ta, tb) {
+ return ta[0].toLowerCase().localeCompare(tb[0].toLowerCase());
+};
+
+/**
+ * Ensure two identically-named procedures don't exist.
+ * Take the proposed procedure name, and return a legal name i.e. one that
+ * is not empty and doesn't collide with other procedures.
+ * @param {string} name Proposed procedure name.
+ * @param {!Blockly.Block} block Block to disambiguate.
+ * @return {string} Non-colliding name.
+ */
+Procedures.findLegalName = function (name, block) {
+ if (block.isInFlyout) {
+ // Flyouts can have multiple procedures called 'do something'.
+ return name;
+ }
+ name = name || blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['UNNAMED_KEY'] || 'unnamed';
+ while (!Procedures.isLegalName_(name, block.workspace, block)) {
+ // Collision with another procedure.
+ var r = name.match(/^(.*?)(\d+)$/);
+ if (!r) {
+ name += '2';
+ } else {
+ name = r[1] + (parseInt(r[2], 10) + 1);
+ }
+ }
+ return name;
+};
+
+/**
+ * Does this procedure have a legal name? Illegal names include names of
+ * procedures already defined.
+ * @param {string} name The questionable name.
+ * @param {!Blockly.Workspace} workspace The workspace to scan for collisions.
+ * @param {Blockly.Block=} opt_exclude Optional block to exclude from
+ * comparisons (one doesn't want to collide with oneself).
+ * @return {boolean} True if the name is legal.
+ * @private
+ */
+Procedures.isLegalName_ = function (name, workspace, opt_exclude) {
+ return !Procedures.isNameUsed(name, workspace, opt_exclude);
+};
+
+/**
+ * Return if the given name is already a procedure name.
+ * @param {string} name The questionable name.
+ * @param {!Blockly.Workspace} workspace The workspace to scan for collisions.
+ * @param {Blockly.Block=} opt_exclude Optional block to exclude from
+ * comparisons (one doesn't want to collide with oneself).
+ * @return {boolean} True if the name is used, otherwise return false.
+ */
+Procedures.isNameUsed = function (name, workspace, opt_exclude) {
+ var blocks = workspace.getAllBlocks(false);
+ // Iterate through every block and check the name.
+ for (var i = 0; i < blocks.length; i++) {
+ if (blocks[i] == opt_exclude) {
+ continue;
+ }
+ if (blocks[i].getProcedureDef) {
+ var procName = blocks[i].getProcedureDef();
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(procName[0], name)) {
+ return true;
+ }
+ }
+ }
+ return false;
+};
+
+/**
+ * Rename a procedure. Called by the editable field.
+ * @param {string} name The proposed new name.
+ * @return {string} The accepted name.
+ * @this {Blockly.Field}
+ */
+Procedures.rename = function (name) {
+ // Strip leading and trailing whitespace. Beyond this, all names are legal.
+ name = name.trim();
+
+ var legalName = Procedures.findLegalName(name, this.getSourceBlock());
+ var oldName = this.getValue();
+ if (oldName != name && oldName != legalName) {
+ // Rename any callers.
+ var blocks = this.getSourceBlock().workspace.getAllBlocks(false);
+ for (var i = 0; i < blocks.length; i++) {
+ if (blocks[i].renameProcedure) {
+ blocks[i].renameProcedure(oldName, legalName);
+ }
+ }
+ }
+ return legalName;
+};
+
+/**
+ * Construct the blocks required by the flyout for the procedure category.
+ * @param {!Blockly.Workspace} workspace The workspace containing procedures.
+ * @return {!Array.} Array of XML block elements.
+ */
+Procedures.flyoutCategory = function (workspace) {
+ var xmlList = [];
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks['procedures_defnoreturn']) {
+ //
+ // do something
+ //
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', 'procedures_defnoreturn');
+ block.setAttribute('gap', 16);
+ var nameField = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('field');
+ nameField.setAttribute('name', 'NAME');
+ nameField.appendChild(blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createTextNode(
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFNORETURN_PROCEDURE']));
+ block.appendChild(nameField);
+ xmlList.push(block);
+ }
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks['procedures_defreturn']) {
+ //
+ // do something
+ //
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', 'procedures_defreturn');
+ block.setAttribute('gap', 16);
+ var nameField = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('field');
+ nameField.setAttribute('name', 'NAME');
+ nameField.appendChild(blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createTextNode(
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Msg['PROCEDURES_DEFRETURN_PROCEDURE']));
+ block.appendChild(nameField);
+ xmlList.push(block);
+ }
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks['procedures_return']) {
+ //
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', 'procedures_return');
+ block.setAttribute('gap', 16);
+ xmlList.push(block);
+ }
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks['procedures_ifreturn']) {
+ //
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', 'procedures_ifreturn');
+ block.setAttribute('gap', 16);
+ xmlList.push(block);
+ }
+ if (xmlList.length) {
+ // Add slightly larger gap between system blocks and user calls.
+ xmlList[xmlList.length - 1].setAttribute('gap', 24);
+ }
+
+ function populateProcedures(procedureList, templateName) {
+ for (var i = 0; i < procedureList.length; i++) {
+ var name = procedureList[i][0];
+ var args = procedureList[i][1];
+ //
+ //
+ //
+ //
+ //
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', templateName);
+ block.setAttribute('gap', 16);
+ var mutation = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('mutation');
+ mutation.setAttribute('name', name);
+ block.appendChild(mutation);
+ for (var j = 0; j < args.length; j++) {
+ var arg = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('arg');
+ arg.setAttribute('name', args[j]);
+ mutation.appendChild(arg);
+ }
+ xmlList.push(block);
+ }
+ }
+
+ var tuple = Procedures.allProcedures(workspace);
+ populateProcedures(tuple[0], 'procedures_callnoreturn');
+ populateProcedures(tuple[1], 'procedures_callreturn');
+ return xmlList;
+};
+
+/**
+ * Find all the callers of a named procedure.
+ * @param {string} name Name of procedure.
+ * @param {!Blockly.Workspace} workspace The workspace to find callers in.
+ * @return {!Array.} Array of caller blocks.
+ */
+Procedures.getCallers = function (name, workspace) {
+ var callers = [];
+ var blocks = workspace.getAllBlocks(false);
+ // Iterate through every block and check the name.
+ for (var i = 0; i < blocks.length; i++) {
+ if (blocks[i].getProcedureCall) {
+ var procName = blocks[i].getProcedureCall();
+ // Procedure name may be null if the block is only half-built.
+ if (procName && blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(procName, name)) {
+ callers.push(blocks[i]);
+ }
+ }
+ }
+ return callers;
+};
+
+/**
+ * When a procedure definition changes its parameters, find and edit all its
+ * callers.
+ * @param {!Blockly.Block} defBlock Procedure definition block.
+ */
+Procedures.mutateCallers = function (defBlock) {
+ const oldRecordUndo = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.getRecordUndo();
+ const procedureBlock = defBlock;
+ const name = procedureBlock.getProcedureDef()[0];
+ const xmlElement = defBlock.mutationToDom(true);
+ const callers = blockly_core__WEBPACK_IMPORTED_MODULE_0__.Procedures.getCallers(name, defBlock.workspace);
+ for (let i = 0, caller; (caller = callers[i]); i++) {
+ const oldMutationDom = caller.mutationToDom();
+ const oldMutation = oldMutationDom && blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.domToText(oldMutationDom);
+ if (caller.domToMutation) {
+ caller.domToMutation(xmlElement);
+ }
+ const newMutationDom = caller.mutationToDom();
+ const newMutation = newMutationDom && blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.domToText(newMutationDom);
+ if (oldMutation !== newMutation) {
+ // Fire a mutation on every caller block. But don't record this as an
+ // undo action since it is deterministically tied to the procedure's
+ // definition mutation.
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.setRecordUndo(false);
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.fire(
+ new (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.get(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.BLOCK_CHANGE))(
+ caller,
+ 'mutation',
+ null,
+ oldMutation,
+ newMutation,
+ ),
+ );
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.setRecordUndo(oldRecordUndo);
+ }
+ }
+};
+
+/**
+ * Find the definition block for the named procedure.
+ * @param {string} name Name of procedure.
+ * @param {!Blockly.Workspace} workspace The workspace to search.
+ * @return {Blockly.Block} The procedure definition block, or null not found.
+ */
+Procedures.getDefinition = function (name, workspace) {
+ // Assume that a procedure definition is a top block.
+ var blocks = workspace.getTopBlocks(false);
+ for (var i = 0; i < blocks.length; i++) {
+ if (blocks[i].getProcedureDef) {
+ var tuple = blocks[i].getProcedureDef();
+ if (tuple && blockly_core__WEBPACK_IMPORTED_MODULE_0__.Names.equals(tuple[0], name)) {
+ return blocks[i];
+ }
+ }
+ }
+ return null;
+};
+
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Procedures);
+
+/***/ }),
+
+/***/ "../python/others/variables.js":
+/*!*************************************!*\
+ !*** ../python/others/variables.js ***!
+ \*************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/**
+ * @license
+ * Visual Blocks Editor
+ *
+ * Copyright 2012 Google Inc.
+ * https://developers.google.com/blockly/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview Utility functions for handling variables.
+ * @author fraser@google.com (Neil Fraser)
+ */
+
+
+
+const Variables = {};
+
+/**
+ * Category to separate variable names from procedures and generated functions.
+ */
+Variables.NAME_TYPE = 'VARIABLE';
+
+/**
+ * Find all user-created variables.
+ * @param {!Blockly.Block|!Blockly.Workspace} root Root block or workspace.
+ * @return {!Array.} Array of variable names.
+ */
+Variables.allVariables = function (root) {
+ var blocks;
+ if (root.getDescendants) {
+ // Root is Block.
+ blocks = root.getDescendants();
+ } else if (root.getAllBlocks) {
+ // Root is Workspace.
+ blocks = root.getAllBlocks();
+ } else {
+ throw 'Not Block or Workspace: ' + root;
+ }
+ var variableHash = Object.create(null);
+ // Iterate through every block and add each variable to the hash.
+ for (var x = 0; x < blocks.length; x++) {
+ var blockVariables = blocks[x].getVars();
+ for (var y = 0; y < blockVariables.length; y++) {
+ var varName = blockVariables[y];
+ // Variable name may be null if the block is only half-built.
+ if (varName) {
+ variableHash[varName.toLowerCase()] = varName;
+ }
+ }
+ }
+ // Flatten the hash into a list.
+ var variableList = [];
+ for (var name in variableHash) {
+ variableList.push(variableHash[name]);
+ }
+ return variableList;
+};
+
+/**
+ * Find all instances of the specified variable and rename them.
+ * @param {string} oldName Variable to rename.
+ * @param {string} newName New variable name.
+ * @param {!Blockly.Workspace} workspace Workspace rename variables in.
+ */
+Variables.renameVariable = function (oldName, newName, workspace) {
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.setGroup(true);
+ var blocks = workspace.getAllBlocks();
+ // Iterate through every block.
+ for (var i = 0; i < blocks.length; i++) {
+ blocks[i].renameVar(oldName, newName);
+ }
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Events.setGroup(false);
+};
+
+/**
+ * Construct the blocks required by the flyout for the variable category.
+ * @param {!Blockly.Workspace} workspace The workspace contianing variables.
+ * @return {!Array.} Array of XML block elements.
+ */
+Variables.flyoutCategory = function (workspace) {
+ var variableList = Variables.allVariables(workspace);
+ //variableList.sort(goog.string.caseInsensitiveCompare);
+ // In addition to the user's variables, we also want to display the default
+ // variable name at the top. We also don't want this duplicated if the
+ // user has created a variable of the same name.
+ // alert(variableList)
+ // goog.array.remove(variableList, Blockly.Msg.VARIABLES_DEFAULT_NAME);
+ // variableList.unshift(Blockly.Msg.VARIABLES_DEFAULT_NAME);
+
+ var xmlList = [];
+
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', 'variables_global');
+ xmlList.push(block);
+
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks['variables_set']) {
+ //增加variables_declare模块
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', 'variables_set');
+ xmlList.push(block);
+ }//change tyep
+ /*
+ if (Blockly.Blocks['variables_change']) {
+ //增加variables_declare模块
+ var block = Blockly.utils.xml.createElement('block');
+ block.setAttribute('type', 'variables_change');
+ xmlList.push(block);
+ }*/
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks['variables_change']) {
+ //增加variables_declare模块
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', 'variables_change');
+ xmlList.push(block);
+ }
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks['controls_type']) {
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', 'controls_type');
+ xmlList.push(block);
+ }
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks['controls_typeLists']) {
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', 'controls_typeLists');
+ xmlList.push(block);
+ }
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks['lists_zip']) {
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', 'lists_zip');
+ block.setAttribute('inline', 'false');
+ var mutation = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('mutation');
+ mutation.setAttribute('items', 2);
+ block.appendChild(mutation);
+ for (let i = 0; i < 2; i++) {
+ let add = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('value');
+ add.setAttribute('name', `ADD${i}`);
+ // let childBlock = Blockly.utils.xml.createElement('block');
+ // childBlock.setAttribute('type', 'list_many_input');
+ // let field = Blockly.utils.xml.createElement('field');
+ // let value = Blockly.utils.xml.createTextNode('0,1,2,3');
+ // field.setAttribute('name', 'CONTENT');
+ // field.appendChild(value);
+ // childBlock.appendChild(field);
+ // add.appendChild(childBlock);
+ block.appendChild(add);
+ }
+ xmlList.push(block);
+ }
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks['unpack_iterable_object']) {
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', 'unpack_iterable_object');
+ xmlList.push(block);
+ }
+ for (var i = 0; i < variableList.length; i++) {
+ // alert(variableList)
+ // if(i==0&& !(Blockly.Python.setups_['variables_set'+''])){
+ // continue;
+ // }
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks['variables_set']) {
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', 'variables_set');
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks['variables_get']) {
+ block.setAttribute('gap', 8);
+ }
+ var field = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('field', null, variableList[i]);
+ field.setAttribute('name', 'VAR');
+ var name = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createTextNode(variableList[i]);
+ field.appendChild(name);
+ block.appendChild(field);
+ xmlList.push(block);
+ }
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks['variables_get']) {
+ var block = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('block');
+ block.setAttribute('type', 'variables_get');
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks['variables_set']) {
+ block.setAttribute('gap', 24);
+ }
+ var field = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createElement('field', null, variableList[i]);
+ field.setAttribute('name', 'VAR');
+ var name = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.xml.createTextNode(variableList[i]);
+ field.appendChild(name);
+ block.appendChild(field);
+ xmlList.push(block);
+ }
+ }
+ return xmlList;
+};
+
+/**
+* Return a new variable name that is not yet being used. This will try to
+* generate single letter variable names in the range 'i' to 'z' to start with.
+* If no unique name is located it will try 'i' to 'z', 'a' to 'h',
+* then 'i2' to 'z2' etc. Skip 'l'.
+ * @param {!Blockly.Workspace} workspace The workspace to be unique in.
+* @return {string} New variable name.
+*/
+Variables.generateUniqueName = function (workspace) {
+ var variableList = Variables.allVariables(workspace);
+ var newName = '';
+ if (variableList.length) {
+ var nameSuffix = 1;
+ var letters = 'ijkmnopqrstuvwxyzabcdefgh'; // No 'l'.
+ var letterIndex = 0;
+ var potName = letters.charAt(letterIndex);
+ while (!newName) {
+ var inUse = false;
+ for (var i = 0; i < variableList.length; i++) {
+ if (variableList[i].toLowerCase() == potName) {
+ // This potential name is already used.
+ inUse = true;
+ break;
+ }
+ }
+ if (inUse) {
+ // Try the next potential name.
+ letterIndex++;
+ if (letterIndex == letters.length) {
+ // Reached the end of the character sequence so back to 'i'.
+ // a new suffix.
+ letterIndex = 0;
+ nameSuffix++;
+ }
+ potName = letters.charAt(letterIndex);
+ if (nameSuffix > 1) {
+ potName += nameSuffix;
+ }
+ } else {
+ // We can use the current potential name.
+ newName = potName;
+ }
+ }
+ } else {
+ newName = 'i';
+ }
+ return newName;
+};
+
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Variables);
+
+/***/ }),
+
+/***/ "../python/python_generator.js":
+/*!*************************************!*\
+ !*** ../python/python_generator.js ***!
+ \*************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ Python: () => (/* binding */ Python)
+/* harmony export */ });
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _others_names__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./others/names */ "../python/others/names.js");
+/*
+Overrides for generic Python code generation.
+*/
+
+
+
+/**
+ * Python code generator.
+ * @type {!Blockly.Generator}
+ */
+const Python = new blockly_core__WEBPACK_IMPORTED_MODULE_0__.Generator('Python');
+Python.INDENT = " ";
+
+/**
+ * List of illegal variable names.
+ * This is not intended to be a security feature. Blockly is 100% client-side,
+ * so bypassing this list is trivial. This is intended to prevent users from
+ * accidentally clobbering a built-in object or function.
+ * @private
+ */
+Python.addReservedWords(
+ // import keyword
+ // print(','.join(sorted(keyword.kwlist)))
+ // https://docs.python.org/3/reference/lexical_analysis.html#keywords
+ // https://docs.python.org/2/reference/lexical_analysis.html#keywords
+ 'False,None,True,and,as,assert,break,class,continue,def,del,elif,else,' +
+ 'except,exec,finally,for,from,global,if,import,in,is,lambda,nonlocal,not,' +
+ 'or,pass,print,raise,return,try,while,with,yield,' +
+ // https://docs.python.org/3/library/constants.html
+ // https://docs.python.org/2/library/constants.html
+ 'NotImplemented,Ellipsis,__debug__,quit,exit,copyright,license,credits,' +
+ // >>> print(','.join(sorted(dir(__builtins__))))
+ // https://docs.python.org/3/library/functions.html
+ // https://docs.python.org/2/library/functions.html
+ 'ArithmeticError,AssertionError,AttributeError,BaseException,' +
+ 'BlockingIOError,BrokenPipeError,BufferError,BytesWarning,' +
+ 'ChildProcessError,ConnectionAbortedError,ConnectionError,' +
+ 'ConnectionRefusedError,ConnectionResetError,DeprecationWarning,EOFError,' +
+ 'Ellipsis,EnvironmentError,Exception,FileExistsError,FileNotFoundError,' +
+ 'FloatingPointError,FutureWarning,GeneratorExit,IOError,ImportError,' +
+ 'ImportWarning,IndentationError,IndexError,InterruptedError,' +
+ 'IsADirectoryError,KeyError,KeyboardInterrupt,LookupError,MemoryError,' +
+ 'ModuleNotFoundError,NameError,NotADirectoryError,NotImplemented,' +
+ 'NotImplementedError,OSError,OverflowError,PendingDeprecationWarning,' +
+ 'PermissionError,ProcessLookupError,RecursionError,ReferenceError,' +
+ 'ResourceWarning,RuntimeError,RuntimeWarning,StandardError,' +
+ 'StopAsyncIteration,StopIteration,SyntaxError,SyntaxWarning,SystemError,' +
+ 'SystemExit,TabError,TimeoutError,TypeError,UnboundLocalError,' +
+ 'UnicodeDecodeError,UnicodeEncodeError,UnicodeError,' +
+ 'UnicodeTranslateError,UnicodeWarning,UserWarning,ValueError,Warning,' +
+ 'ZeroDivisionError,_,__build_class__,__debug__,__doc__,__import__,' +
+ '__loader__,__name__,__package__,__spec__,abs,all,any,apply,ascii,' +
+ 'basestring,bin,bool,buffer,bytearray,bytes,callable,chr,classmethod,cmp,' +
+ 'coerce,compile,complex,copyright,credits,delattr,dict,dir,divmod,' +
+ 'enumerate,eval,exec,execfile,exit,file,filter,float,format,frozenset,' +
+ 'getattr,globals,hasattr,hash,help,hex,id,input,int,intern,isinstance,' +
+ 'issubclass,iter,len,license,list,locals,long,map,max,memoryview,min,' +
+ 'next,object,oct,open,ord,pow,print,property,quit,range,raw_input,reduce,' +
+ 'reload,repr,reversed,round,set,setattr,slice,sorted,staticmethod,str,' +
+ 'sum,super,tuple,type,unichr,unicode,vars,xrange,zip'
+);
+
+/**
+ * Order of operation ENUMs.
+ * http://docs.python.org/reference/expressions.html#summary
+ */
+Python.ORDER_ATOMIC = 0; // 0 "" ...
+Python.ORDER_COLLECTION = 1; // tuples, lists, dictionaries
+Python.ORDER_STRING_CONVERSION = 1; // `expression...`
+Python.ORDER_UNARY_POSTFIX = 1; // expr++ expr-- () [] .
+Python.ORDER_UNARY_PREFIX = 2; // -expr !expr ~expr ++expr --expr
+Python.ORDER_MEMBER = 2.1; // . []
+Python.ORDER_FUNCTION_CALL = 2.2; // ()
+Python.ORDER_EXPONENTIATION = 3; // **
+Python.ORDER_UNARY_SIGN = 4; // + -
+Python.ORDER_BITWISE_NOT = 4; // ~
+Python.ORDER_MULTIPLICATIVE = 5; // * / // %
+Python.ORDER_ADDITIVE = 6; // + -
+Python.ORDER_BITWISE_SHIFT = 7; // << >>
+Python.ORDER_BITWISE_AND = 8; // &
+Python.ORDER_BITWISE_XOR = 9; // ^
+Python.ORDER_BITWISE_OR = 10; // |
+Python.ORDER_RELATIONAL = 11; // in, not in, is, is not,
+// <, <=, >, >=, <>, !=, ==
+Python.ORDER_EQUALITY = 11; // == != === !==
+Python.ORDER_LOGICAL_NOT = 12; // not
+Python.ORDER_LOGICAL_AND = 13; // and
+Python.ORDER_LOGICAL_OR = 14; // or
+Python.ORDER_ASSIGNMENT = 14; // = *= /= ~/= %= += -= <<= >>= &= ^= |=
+Python.ORDER_CONDITIONAL = 15; // if else
+Python.ORDER_LAMBDA = 16; // lambda
+Python.ORDER_NONE = 99; // (...)
+
+/**
+ * List of outer-inner pairings that do NOT require parentheses.
+ * @type {!Array.>}
+ */
+Python.ORDER_OVERRIDES = [
+ // (foo()).bar -> foo().bar
+ // (foo())[0] -> foo()[0]
+ [Python.ORDER_FUNCTION_CALL, Python.ORDER_MEMBER],
+ // (foo())() -> foo()()
+ [Python.ORDER_FUNCTION_CALL, Python.ORDER_FUNCTION_CALL],
+ // (foo.bar).baz -> foo.bar.baz
+ // (foo.bar)[0] -> foo.bar[0]
+ // (foo[0]).bar -> foo[0].bar
+ // (foo[0])[1] -> foo[0][1]
+ [Python.ORDER_MEMBER, Python.ORDER_MEMBER],
+ // (foo.bar)() -> foo.bar()
+ // (foo[0])() -> foo[0]()
+ [Python.ORDER_MEMBER, Python.ORDER_FUNCTION_CALL],
+
+ // not (not foo) -> not not foo
+ // [Python.ORDER_LOGICAL_NOT, Python.ORDER_LOGICAL_NOT],
+ // a and (b and c) -> a and b and c
+ // [Python.ORDER_LOGICAL_AND, Python.ORDER_LOGICAL_AND],
+ // a or (b or c) -> a or b or c
+ // [Python.ORDER_LOGICAL_OR, Python.ORDER_LOGICAL_OR]
+];
+
+Python.init = function () {
+ /**
+ * Empty loops or conditionals are not allowed in Python.
+ */
+ Python.PASS = this.INDENT + 'pass\n';
+ // Create a dictionary of definitions to be printed before the code.
+ Python.definitions_ = Object.create(null);
+ // Create a dictionary mapping desired function names in definitions_
+ // to actual function names (to avoid collisions with user functions).
+ Python.functionNames_ = Object.create(null);
+ Python.setups_ = Object.create(null);
+ Python.loops_ = Object.create(null);
+ Python.codeEnd_ = Object.create(null);
+
+ if (!Python.variableDB_) {
+ Python.variableDB_ = new _others_names__WEBPACK_IMPORTED_MODULE_1__["default"](Python.RESERVED_WORDS_);
+ } else {
+ Python.variableDB_.reset();
+ }
+}
+
+Python.finish = function (code) {
+ // Convert the definitions dictionary into a list.
+ if (code !== "") {
+ code = code.replace(/\n/g, '\n');
+ code = code.replace(/\n\s+$/, '\n');
+ }
+ var imports = [];
+ var definitions_var = []; //变量定义
+ var definitions_fun = []; //函数定义
+ for (var name in this.definitions_) {
+ var def = this.definitions_[name];
+ if (name.indexOf('import') === 0) {
+ imports.push(def);
+ } else if (name.indexOf('var_declare') === 0) {
+ definitions_var.push(def);
+ } else {
+ definitions_fun.push(def);
+ }
+ }
+ if (imports.length) {
+ imports.push('\n\n');
+ }
+ if (definitions_var.length) {
+ definitions_var.push('\n\n');
+ }
+ if (definitions_fun.length) {
+ definitions_fun.push('\n\n');
+ }
+ var functions = [];
+ for (var name in Python.functions_) {
+ functions.push(Python.functions_[name]);
+ }
+ if (functions.length) {
+ functions.push('\n\n');
+ }
+ var setups = [];
+ for (var name in Python.setups_) {
+ setups.push(Python.setups_[name]);
+ }
+ if (setups.length) {
+ setups.push('\n\n');
+ }
+ var loops = [];
+ for (var name in Python.loops_) {
+ loops.push(Python.loops_[name]);
+ }
+ var codeEnd = [];
+ for (var name in Python.codeEnd_) {
+ codeEnd.push(Python.codeEnd_[name]);
+ }
+ if (codeEnd.length !== 0) {
+ codeEnd.push('\n');
+ }
+ if (loops.length > 0) {
+ return imports.join('\n') + definitions_var.join('\n') + definitions_fun.join('\n')
+ + functions.join('\n') + setups.join('') + code + 'while True:\n' + loops.join('') + codeEnd.join('\n');
+ }
+ return imports.join('\n') + definitions_var.join('\n') + definitions_fun.join('\n')
+ + functions.join('\n') + setups.join('') + code + codeEnd.join('\n');
+}
+
+
+/**
+ * Naked values are top-level blocks with outputs that aren't plugged into
+ * anything.
+ * @param {string} line Line of generated code.
+ * @return {string} Legal line of code.
+ */
+Python.scrubNakedValue = function (line) {
+ return line + '\n';
+}
+
+/**
+ * Encode a string as a properly escaped Python string, complete with quotes.
+ * @param {string} string Text to encode.
+ * @return {string} Python string.
+ * @private
+ */
+Python.quote_ = function (string) {
+ // Can't use goog.string.quote since % must also be escaped.
+ string = string.replace(/\\/g, '\\\\')
+ .replace(/\n/g, '\\\n');
+
+ // Follow the CPython behaviour of repr() for a non-byte string.
+ var quote = '\'';
+ if (string.indexOf('\'') !== -1) {
+ if (string.indexOf('"') === -1) {
+ quote = '"';
+ } else {
+ string = string.replace(/'/g, '\\\'');
+ }
+ }
+ return quote + string + quote;
+}
+
+/**
+ * Encode a string as a properly escaped multiline Python string, complete
+ * with quotes.
+ * @param {string} string Text to encode.
+ * @return {string} Python string.
+ * @private
+ */
+Python.multiline_quote_ = function (string) {
+ // Can't use goog.string.quote since % must also be escaped.
+ string = string.replace(/'''/g, '\\\'\\\'\\\'');
+ return '\'\'\'' + string + '\'\'\'';
+}
+
+/**
+ * Common tasks for generating Python from blocks.
+ * Handles comments for the specified block and any connected value blocks.
+ * Calls any statements following this block.
+ * @param {!Blockly.Block} block The current block.
+ * @param {string} code The Python code created for this block.
+ * @param {boolean=} opt_thisOnly True to generate code for only this statement.
+ * @return {string} Python code with comments and subsequent blocks added.
+ * @private
+ */
+Python.scrub_ = function (block, code, opt_thisOnly) {
+ var commentCode = '';
+ // Only collect comments for blocks that aren't inline.
+ if (!block.outputConnection || !block.outputConnection.targetConnection) {
+ // Collect comment for this block.
+ var comment = block.getCommentText();
+ if (comment) {
+ comment = blockly_core__WEBPACK_IMPORTED_MODULE_0__.utils.string.wrap(comment,
+ Python.COMMENT_WRAP - 3);
+ commentCode += Python.prefixLines(comment + '\n', '# ');
+ }
+ // Collect comments for all value arguments.
+ // Don't collect comments for nested statements.
+ for (var i = 0; i < block.inputList.length; i++) {
+ if (block.inputList[i].type == blockly_core__WEBPACK_IMPORTED_MODULE_0__.INPUT_VALUE) {
+ var childBlock = block.inputList[i].connection.targetBlock();
+ if (childBlock) {
+ var comment = Python.allNestedComments(childBlock);
+ if (comment) {
+ commentCode += Python.prefixLines(comment, '# ');
+ }
+ }
+ }
+ }
+ }
+ var nextBlock = block.nextConnection && block.nextConnection.targetBlock();
+ var nextCode = opt_thisOnly ? '' : Python.blockToCode(nextBlock);
+ return commentCode + code + nextCode;
+}
+
+/**
+ * Gets a property and adjusts the value, taking into account indexing, and
+ * casts to an integer.
+ * @param {!Blockly.Block} block The block.
+ * @param {string} atId The property ID of the element to get.
+ * @param {number=} opt_delta Value to add.
+ * @param {boolean=} opt_negate Whether to negate the value.
+ * @return {string|number}
+ */
+Python.getAdjustedInt = function (block, atId, opt_delta, opt_negate) {
+ var delta = opt_delta || 0;
+ if (block.workspace.options.oneBasedIndex) {
+ delta--;
+ }
+ var defaultAtIndex = block.workspace.options.oneBasedIndex ? '1' : '0';
+ var atOrder = delta ? Python.ORDER_ADDITIVE :
+ Python.ORDER_NONE;
+ var at = Python.valueToCode(block, atId, atOrder) || defaultAtIndex;
+
+ if (blockly_core__WEBPACK_IMPORTED_MODULE_0__.isNumber(at)) {
+ // If the index is a naked number, adjust it right now.
+ at = parseInt(at, 10) + delta;
+ if (opt_negate) {
+ at = -at;
+ }
+ } else {
+ // If the index is dynamic, adjust it in code.
+ if (delta > 0) {
+ at = 'int(' + at + ' + ' + delta + ')';
+ } else if (delta < 0) {
+ at = 'int(' + at + ' - ' + -delta + ')';
+ } else {
+ at = 'int(' + at + ')';
+ }
+ if (opt_negate) {
+ at = '-' + at;
+ }
+ }
+ return at;
+}
+
+/***/ }),
+
+/***/ "./css/color_esp32c3_mixgocc.css":
+/*!***************************************!*\
+ !*** ./css/color_esp32c3_mixgocc.css ***!
+ \***************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+// extracted by mini-css-extract-plugin
+
+
+/***/ }),
+
+/***/ "blockly/core":
+/*!**************************!*\
+ !*** external "Blockly" ***!
+ \**************************/
+/***/ ((module) => {
+
+module.exports = Blockly;
+
+/***/ }),
+
+/***/ "mixly":
+/*!************************!*\
+ !*** external "Mixly" ***!
+ \************************/
+/***/ ((module) => {
+
+module.exports = Mixly;
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // 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](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/compat get default export */
+/******/ (() => {
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = (module) => {
+/******/ var getter = module && module.__esModule ?
+/******/ () => (module['default']) :
+/******/ () => (module);
+/******/ __webpack_require__.d(getter, { a: getter });
+/******/ return getter;
+/******/ };
+/******/ })();
+/******/
+/******/ /* 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/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 });
+/******/ };
+/******/ })();
+/******/
+/************************************************************************/
+var __webpack_exports__ = {};
+/*!******************!*\
+ !*** ./index.js ***!
+ \******************/
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blockly/core */ "blockly/core");
+/* harmony import */ var blockly_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(blockly_core__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mixly */ "mixly");
+/* harmony import */ var mixly__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mixly__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _mixly_python__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mixly/python */ "../python/export.js");
+/* harmony import */ var _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mixly/micropython */ "../micropython/export.js");
+/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ */ "./export.js");
+/* harmony import */ var _css_color_esp32c3_mixgocc_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./css/color_esp32c3_mixgocc.css */ "./css/color_esp32c3_mixgocc.css");
+
+
+
+
+
+
+
+
+
+
+
+Object.assign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Variables, _mixly_python__WEBPACK_IMPORTED_MODULE_2__.Variables);
+Object.assign(blockly_core__WEBPACK_IMPORTED_MODULE_0__.Procedures, _mixly_python__WEBPACK_IMPORTED_MODULE_2__.Procedures);
+blockly_core__WEBPACK_IMPORTED_MODULE_0__.Python = _mixly_python__WEBPACK_IMPORTED_MODULE_2__.Python;
+blockly_core__WEBPACK_IMPORTED_MODULE_0__.generator = _mixly_python__WEBPACK_IMPORTED_MODULE_2__.Python;
+
+mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default = {};
+Object.assign(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile, ___WEBPACK_IMPORTED_MODULE_4__.MicropythonESP32C2Pins);
+Object.assign(mixly__WEBPACK_IMPORTED_MODULE_1__.Profile.default, ___WEBPACK_IMPORTED_MODULE_4__.MicropythonESP32C2Pins['MixGo CC']);
+
+Object.assign(
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Blocks,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonVariablesBlocks,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonControlBlocks,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonMathBlocks,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonTextBlocks,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonListsBlocks,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonDictsBlocks,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonLogicBlocks,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonStorageBlocks,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonProceduresBlocks,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonTupleBlocks,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonSetBlocks,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonHtmlBlocks,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonUtilityBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonInputBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonSystemBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonSerialBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonCommunicateBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonIotBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonWeatherBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonAISensorBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonSensorOnBoardBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonSensorExternBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonNetworkBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonAIBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonActuatorOnBoardBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonActuatorExternBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonDisplayOnBoardBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonDisplayExternBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonFactoryBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonBlynkBlocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonCCG1Blocks,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonCEGOBlocks,
+ ___WEBPACK_IMPORTED_MODULE_4__.MicropythonESP32C2InoutBlocks,
+ ___WEBPACK_IMPORTED_MODULE_4__.MicropythonESP32C2MiniG2Blocks,
+ ___WEBPACK_IMPORTED_MODULE_4__.MicropythonESP32C2MEGOBlocks,
+ ___WEBPACK_IMPORTED_MODULE_4__.MicropythonESP32C2PinsBlocks
+);
+
+Object.assign(
+ blockly_core__WEBPACK_IMPORTED_MODULE_0__.Python.forBlock,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonVariablesGenerators,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonControlGenerators,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonMathGenerators,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonTextGenerators,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonListsGenerators,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonDictsGenerators,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonLogicGenerators,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonStorageGenerators,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonProceduresGenerators,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonTupleGenerators,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonSetGenerators,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonHtmlGenerators,
+ _mixly_python__WEBPACK_IMPORTED_MODULE_2__.PythonUtilityGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonInputGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonSystemGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonSerialGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonCommunicateGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonIotGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonWeatherGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonAISensorGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonSensorOnBoardGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonSensorExternGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonNetworkGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonAIGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonActuatorOnBoardGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonActuatorExternGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonDisplayOnBoardGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonDisplayExternGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonFactoryGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonBlynkGenerators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonCCG1Generators,
+ _mixly_micropython__WEBPACK_IMPORTED_MODULE_3__.MicroPythonCEGOGenerators,
+ ___WEBPACK_IMPORTED_MODULE_4__.MicropythonESP32C2InoutGenerators,
+ ___WEBPACK_IMPORTED_MODULE_4__.MicropythonESP32C2MiniG2Generators,
+ ___WEBPACK_IMPORTED_MODULE_4__.MicropythonESP32C2MEGOGenerators,
+ ___WEBPACK_IMPORTED_MODULE_4__.MicropythonESP32C2PinsGenerators
+);
+/******/ })()
+;
+//# sourceMappingURL=main.bundle.js.map
\ No newline at end of file
diff --git a/boards/default/micropython_esp32c2/main.bundle.js.map b/boards/default/micropython_esp32c2/main.bundle.js.map
new file mode 100644
index 00000000..a1cccb4a
--- /dev/null
+++ b/boards/default/micropython_esp32c2/main.bundle.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"main.bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAwC;;AAExC;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;;AAEnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;;AAEnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjeiC;AACR;;AAEhC;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;;AAEnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW,iBAAiB,6CAAW,yBAAyB,6CAAW;AACpG;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;;;AAIO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D,6BAA6B,uDAAqB;AAClD,6BAA6B,6CAAW;AACxC,4BAA4B,6CAAW;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,gBAAgB,6CAAW;AAC/D;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,YAAY,6CAAW;AAC3D,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;;AAEP;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,yCAAyC,6CAAW;AACpH;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,yCAAyC,6CAAW;AACpH;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGA;AACO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,2BAA2B,6CAAW;AAClE,iBAAiB,6CAAW,kBAAkB,6CAAW;AACzD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW,2BAA2B,6CAAW,8BAA8B,6CAAW;AACnH,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW,eAAe,6CAAW;AACtD,iBAAiB,6CAAW,+BAA+B,6CAAW;AACtE;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW,+BAA+B,6CAAW;AAC9E;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW,kBAAkB,6CAAW,8BAA8B,6CAAW;AAC1G,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW,kBAAkB,6CAAW,8BAA8B,6CAAW;AAC1G,+BAA+B,6CAAW;AAC1C,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW,eAAe,6CAAW;AACtD,iBAAiB,6CAAW,+BAA+B,6CAAW;AACtE;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW,+BAA+B,6CAAW;AAC9E;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW,kBAAkB,6CAAW,8BAA8B,6CAAW;AAC1G,+BAA+B,6CAAW;AAC1C,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW,eAAe,6CAAW;AACtD,iBAAiB,6CAAW,+BAA+B,6CAAW;AACtE;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW,eAAe,6CAAW,eAAe,6CAAW;AACxF,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW,eAAe,6CAAW,eAAe,6CAAW;AACxF,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW,8BAA8B,6CAAW;AAC7E;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9mCwC;AACT;;AAE/B;;AAEA;AACO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,iBAAiB,6CAAW,qBAAqB,6CAAW;AAC/F;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;;AAEpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,iBAAiB,6CAAW,qBAAqB,6CAAW;AAC/F;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,yCAAM;AAC/B;AACA;AACA,gCAAgC,6CAAW;AAC3C;AACA;AACA,gCAAgC,6CAAW;AAC3C;AACA;AACA,gCAAgC,6CAAW;AAC3C;AACA;AACA,gCAAgC,6CAAW;AAC3C;AACA;AACA,gCAAgC,6CAAW;AAC3C;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,yCAAM;AAC/B;AACA;AACA,gCAAgC,6CAAW;AAC3C;AACA;AACA,gCAAgC,6CAAW;AAC3C;AACA;AACA,gCAAgC,6CAAW;AAC3C;AACA;AACA,gCAAgC,6CAAW;AAC3C;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;AAIO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;;AAEnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,iBAAiB,6CAAW,uBAAuB,6CAAW;AAClG;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW,uBAAuB,6CAAW;AAC9F;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;AAIO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW;AACtE,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW,sBAAsB,6CAAW,oBAAoB,6CAAW;AACpG;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW;AACtE,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA,sBAAsB,qDAAmB;AACzC,yBAAyB,6CAAW,sBAAsB,6CAAW,oBAAoB,6CAAW;AACpG;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,UAAU,6CAAW;AACzD;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,UAAU,6CAAW;AACxD;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,sBAAsB;AACtB;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC,wBAAwB,6CAAW;AACnC,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC,UAAU;AACV,4BAA4B,qBAAqB;AACjD;AACA;AACA,sCAAsC,6CAAW;AACjD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,UAAU,6CAAW;AACzD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,UAAU,6CAAW;AACxD;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,UAAU,6CAAW;AACzD;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW;AACzH;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW,kBAAkB,6CAAW,gBAAgB,6CAAW;AACvK;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW,kBAAkB,6CAAW;AACpH;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW;AACvF,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW;AACtF;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW;AACvF;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW;AACtE;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW;AACvF;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW,gBAAgB,6CAAW,iBAAiB,6CAAW;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW;AACzH;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW,eAAe,6CAAW,gBAAgB,6CAAW;AACpK;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW,eAAe,6CAAW;AACjH;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW;AACvF,yBAAyB,6CAAW,cAAc,6CAAW;AAC7D;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW;AACtF;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW;AACvF;AACA,yBAAyB,6CAAW,cAAc,6CAAW,eAAe,6CAAW,gBAAgB,6CAAW,iBAAiB,6CAAW;AAC9I;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW,oBAAoB,6CAAW;AACrG;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW,mBAAmB,6CAAW,4BAA4B,6CAAW,gBAAgB,6CAAW;AAC5J;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW,4BAA4B,6CAAW;AACzG;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW;AAClE;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW,iBAAiB,6CAAW;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW;AAClE,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW;AACtF;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW;AAClE;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW;AACtE;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW;AAClE,yBAAyB,6CAAW,cAAc,6CAAW;AAC7D;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW;AACtF;AACA;AACA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW,kBAAkB,6CAAW,wCAAwC,6CAAW;AACtJ;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW,UAAU,6CAAW;AACvF;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AChwDwC;;AAExC;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;AACA;;AAEO,qCAAqC;AAC5C;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;;AAEO,oCAAoC;AAC3C;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClEwC;;AAExC,iCAAiC;;;AAG1B;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW,yCAAyC,6CAAW;;AAElH;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,iBAAiB,6CAAW;AAChE;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,iBAAiB,6CAAW,oCAAoC,6CAAW;AAC3E,iBAAiB,6CAAW,oCAAoC,6CAAW;AAC3E;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW,iBAAiB,6CAAW;AACxD,iBAAiB,6CAAW,kBAAkB,6CAAW;AACzD,iBAAiB,6CAAW,aAAa,6CAAW;AACpD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,iBAAiB,6CAAW;AAChE;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW,cAAc,6CAAW;AAC7D,6BAA6B,uDAAqB,GAAG,6CAAW,yCAAyC,6CAAW;AACpH;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,kBAAkB,6CAAW;AACjE;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,iBAAiB,6CAAW,oCAAoC,6CAAW;AAC3E,iBAAiB,6CAAW,oCAAoC,6CAAW;AAC3E;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,yBAAyB,6CAAW;AAChE,iBAAiB,6CAAW;AAC5B,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,iBAAiB,6CAAW,oCAAoC,6CAAW;AAC3E,iBAAiB,6CAAW,oCAAoC,6CAAW;AAC3E;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,cAAc,6CAAW;AAC7D;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,gBAAgB,6CAAW;AAC/D;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,iBAAiB,6CAAW,oCAAoC,6CAAW;AAC3E,iBAAiB,6CAAW,oCAAoC,6CAAW;AAC3E;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,cAAc,6CAAW;AAC7D;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,iBAAiB,6CAAW,oCAAoC,6CAAW;AAC3E,iBAAiB,6CAAW,oCAAoC,6CAAW;AAC3E;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,qBAAqB,6CAAW;AACpE;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,iBAAiB,6CAAW,oCAAoC,6CAAW;AAC3E,iBAAiB,6CAAW,oCAAoC,6CAAW;AAC3E;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,iCAAiC,6CAAW;;AAE5C,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW,iCAAiC,6CAAW;AAChF,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,qBAAqB,6CAAW;AACpE;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,wBAAwB,6CAAW;AACvE;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,iBAAiB,6CAAW,oCAAoC,6CAAW;AAC3E,iBAAiB,6CAAW,oCAAoC,6CAAW;AAC3E;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,iBAAiB,6CAAW;AAC5B,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,cAAc,6CAAW;AAC7D;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW;AAClE;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzuBwC;;AAExC;AACA;;;AAGA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC,SAAS;AACT;AACA,yBAAyB,kEAAgC;AACzD;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC,SAAS;AACT;AACA,yBAAyB,kEAAgC;AACzD;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC,SAAS;AACT;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC,SAAS;AACT;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC,SAAS;AACT;AACA;;AAEA;AACO;AACP;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,yBAAyB,kEAAgC;AACzD;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,yBAAyB,kEAAgC;AACzD;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;AC/WwC;;AAExC;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAAW;AAC1C,qCAAqC,6CAAW;AAChD;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChFwC;;AAExC;;AAEA;AACO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW,oBAAoB,6CAAW,oBAAoB,6CAAW;AAC1F,iBAAiB,6CAAW,qBAAqB,6CAAW,oBAAoB,6CAAW;AAC3F,iBAAiB,6CAAW,mBAAmB,6CAAW,oBAAoB,6CAAW;AACzF,iBAAiB,6CAAW,oBAAoB,6CAAW,oBAAoB,6CAAW;AAC1F,iBAAiB,6CAAW,oBAAoB,6CAAW,kBAAkB,6CAAW;AACxF,iBAAiB,6CAAW,qBAAqB,6CAAW,kBAAkB,6CAAW;AACzF,iBAAiB,6CAAW,mBAAmB,6CAAW,kBAAkB,6CAAW;AACvF,iBAAiB,6CAAW,oBAAoB,6CAAW,kBAAkB,6CAAW;AACxF,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,iBAAiB,6CAAW,qBAAqB,6CAAW;AAC/F;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,wBAAwB,6CAAW;AACnG;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,wBAAwB,6CAAW;AACnG;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,wBAAwB,6CAAW;AACnG;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,sBAAsB,6CAAW;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,SAAS;AACT;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B;AACA,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW,iBAAiB,6CAAW;AAChE;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B;AACA;AACA,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,+BAA+B,6CAAW;AAC9E;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1YwC;;AAExC;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C;;AAEA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,yBAAyB,6CAAW;AACxE;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,iBAAiB,6CAAW;AAChE;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW;AAClE;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,+BAA+B,6CAAW;AAC9E;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,+BAA+B,6CAAW,wBAAwB,6CAAW;AACjH;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,qBAAqB,6CAAW;AACpE;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,qBAAqB,6CAAW;AACpE;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,oBAAoB,6CAAW;AACnE;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,sCAAsC,6CAAW;AACjD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW,4BAA4B,6CAAW;AAC3E;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,wBAAwB,6CAAW,gCAAgC,6CAAW;AAClH;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,wBAAwB,6CAAW,gCAAgC,6CAAW;AAClH;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,4BAA4B,6CAAW;AAC3E;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW;AAClE,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW;AAClE;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW;AAClE;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW,4BAA4B,6CAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW,4BAA4B,6CAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA,qCAAqC,6CAAW;AAChD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,qCAAqC,6CAAW;AAChD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,uBAAuB,6CAAW,qCAAqC,6CAAW;AAClF,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,iBAAiB,6CAAW,yBAAyB,6CAAW;AACpG,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;;AAEA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;;AAEnD;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;;AAEA;;;AAGO;AACP;AACA;;AAEA;AACA,cAAc,6CAAW,gDAAgD,6CAAW,yDAAyD,6CAAW;AACxJ,mBAAmB,6CAAW,iDAAiD,6CAAW;AAC1F;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;;;AAGlD;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC;AACA;AACA,SAAS;AACT;AACA;;;;AAIO;AACP;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,yBAAyB,6CAAW;AACpC;AACA;;AAEA;AACA;;AAEO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzpCiC;;AAExC;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,sBAAsB,6CAAW,wBAAwB,6CAAW;AACpI;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAW;AAC9B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB;;AAEO;AACP;AACA;AACA,2BAA2B,uDAAqB;AAChD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,4BAA4B,6CAAW;AACvC;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV,gCAAgC,6CAAW;AAC3C;AACA;AACA;;AAEA;AACA,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,wBAAwB,6CAAW;AACnG;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,cAAc;AACd,uBAAuB,6CAAW;AAClC,cAAc;AACd,uBAAuB,6CAAW;AAClC,cAAc;AACd,uBAAuB,6CAAW;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA,6BAA6B,6CAAW;AACxC;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA,kDAAkD,OAAO;AACzD;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA,6BAA6B,6CAAW;AACxC;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA,KAAK;AACL;AACA;AACA,eAAe,qCAAqC;AACpD;AACA,eAAe,qCAAqC;AACpD;AACA,eAAe,6BAA6B;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD,mCAAmC,iDAAe;AAClD;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAW;AAC9B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6DAA2B;AACxD;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA,uBAAuB,6CAAW;AAClC,yBAAyB,6CAAW;AACpC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC,uBAAuB,6CAAW;AAClC,yBAAyB,6CAAW;AACpC,4BAA4B,6CAAW;AACvC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;;AAEpC;AACA;AACA,wBAAwB,6CAAW,+BAA+B,6CAAW;AAC7E;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5mBwC;;AAExC;;AAEA;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,SAAS;AACT,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,oCAAoC,6CAAW;AAC/G,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA,wBAAwB,6CAAW;AACnC,0BAA0B,6CAAW;AACrC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,oCAAoC,6CAAW;AAC/G,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA,wBAAwB,6CAAW;AACnC,0BAA0B,6CAAW;AACrC;AACA;AACA,SAAS;AACT;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;AAIO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,6CAAW,wCAAwC,6CAAW;AACtF;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,yCAAyC,6CAAW;AACpH,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA,sBAAsB,6CAAW;AACjC,uBAAuB,6CAAW;AAClC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,SAAS;AACT,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC,SAAS;AACT;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,SAAS;AACT,wBAAwB,6CAAW;AACnC;AACA;;;;AAIO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,sBAAsB,6CAAW;AACjC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,oCAAoC,6CAAW;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,wBAAwB,6CAAW;AACnC,0BAA0B,6CAAW;AACrC;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,YAAY;AACZ;AACA,YAAY;AACZ;AACA;AACA;AACA,YAAY;AACZ;AACA,YAAY;AACZ;AACA;AACA;AACA,YAAY;AACZ;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW,eAAe,6CAAW,gBAAgB,6CAAW;AACxF;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,qBAAqB,6CAAW,uBAAuB,6CAAW,oCAAoC,6CAAW,4CAA4C,6CAAW;AACxO;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC,2BAA2B,6CAAW;AACtC,kCAAkC,6CAAW;AAC7C,iCAAiC,6CAAW;AAC5C;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,gBAAgB,6CAAW,eAAe,6CAAW;AACxF;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA,yBAAyB,6CAAW,iCAAiC,6CAAW;AAChF;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,0BAA0B,6CAAW;AACrC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;;AAElD;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,iCAAiC,6CAAW;AAC5G;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW;AACtE,6BAA6B,qDAAmB;AAChD;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,yBAAyB,6CAAW;AACpG;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC;AACA,mBAAmB,6CAAW;AAC9B,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW,sBAAsB,6CAAW;AAChI;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,+BAA+B,6CAAW;AAC9E;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,6BAA6B,uDAAqB;AAClD;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,sBAAsB,6CAAW;AACpE;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvyDwC;;AAExC;;AAEA;AACA;;;;;;AAMO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,sBAAsB,6CAAW;AACjC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,gBAAgB,6CAAW,eAAe,6CAAW;AACxF;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA,yBAAyB,6CAAW,iCAAiC,6CAAW;AAChF;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,0BAA0B,6CAAW;AACrC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;;AAElD;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,iCAAiC,6CAAW;AAC5G;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW;AACtE,6BAA6B,qDAAmB;AAChD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,yBAAyB,6CAAW;AACpG;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC;AACA,mBAAmB,6CAAW;AAC9B,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,6BAA6B,uDAAqB;AAClD;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,sBAAsB,6CAAW;AACpE;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,mBAAmB,6CAAW,qBAAqB,6CAAW;AAC9H;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,+BAA+B,6CAAW;AAC9E;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW,4BAA4B,6CAAW;AACrG;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,6BAA6B,qDAAmB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;;;AAIO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC;AACA,mBAAmB,6CAAW;AAC9B,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC;AACA,mBAAmB,6CAAW,cAAc,6CAAW;AACvD,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,sBAAsB,6CAAW;AACjC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;AAIO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB;AACA;AACA,iCAAiC,6CAAW,iCAAiC,6CAAW;AACxF;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClvDwC;AACA;;AAExC;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,sBAAsB,yCAAM;AAC5B;AACA,4BAA4B,6CAAW;AACvC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,QAAQ;AAChC;AACA,4BAA4B,QAAQ;AACpC,8CAA8C,qDAAmB;AACjE;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,4BAA4B,6CAAW;AACvC,8BAA8B,6CAAW;AACzC,8BAA8B,6CAAW;AACzC,+BAA+B,6CAAW;AAC1C;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;;;;;AAQA;;;;AAIO;AACP;AACA;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,OAAO;AAC/B;AACA,4BAA4B,OAAO;AACnC,8CAA8C,qDAAmB;AACjE;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,OAAO;AAC/B;AACA,4BAA4B,QAAQ;AACpC,8CAA8C,qDAAmB;AACjE;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,OAAO;AAC/B;AACA,4BAA4B,QAAQ;AACpC,8CAA8C,qDAAmB;AACjE;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;AAIO;AACP;AACA;AACA,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;;AAEA;AACA;;;;AAIA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAAW,iCAAiC,6CAAW;AACxF;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,6CAAW;AACvC,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;;AAIO;AACP;AACA;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,OAAO;AAC/B;AACA,4BAA4B,OAAO;AACnC,8CAA8C,qDAAmB;AACjE;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW,oBAAoB,6CAAW;AACvD,aAAa,6CAAW,qBAAqB,6CAAW;AACxD,aAAa,6CAAW,qBAAqB,6CAAW;AACxD;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,QAAQ;AAChC;AACA,4BAA4B,QAAQ;AACpC,8CAA8C,qDAAmB;AACjE;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,sBAAsB,6CAAW;AACjC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;AAIO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACn7CwC;;AAExC;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA,gCAAgC;AAChC;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,6BAA6B;AAC7B;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA,0BAA0B,gDAAc;AACxC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA,gCAAgC;AAChC;AACA;AACA,4BAA4B,+CAAa;AACzC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA,6BAA6B,wDAAsB;AACnD;AACA,gCAAgC;AAChC;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA,6BAA6B,wDAAsB;AACnD;AACA,gCAAgC;AAChC;AACA;AACA,4BAA4B,+CAAa;AACzC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,6DAA2B;AACxD;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,6DAA2B;AACxD;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,wDAAsB,CAAC,6CAAW;AAC/D;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7RwC;;AAExC,+BAA+B;;AAExB;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,uBAAuB,6CAAW;AAClG;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,iCAAiC,6CAAW;AAC5C;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,iCAAiC,6CAAW;AAC5C;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,iCAAiC,6CAAW;AAC5C;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW;AAClE;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,2BAA2B,6CAAW;AAC1E,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,2CAA2C,6CAAW,6CAA6C,6CAAW;AAC9K;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD,yBAAyB,6CAAW;AACpC;AACA,iCAAiC,6CAAW;AAC5C;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD,yBAAyB,6CAAW;AACpC;AACA,iCAAiC,6CAAW;AAC5C;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtWiC;AACT;;AAE/B;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,oCAAoC,6CAAW;AAC/C;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA,6BAA6B,oDAAkB,CAAC,6CAAW;AAC3D,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAAW;AAC1C,UAAU;AACV;AACA;AACA,+BAA+B,6CAAW;AAC1C,4BAA4B,qBAAqB;AACjD;AACA;AACA,8BAA8B,gDAAc;AAC5C;AACA,4BAA4B,wDAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,wBAAwB,6CAAW;AACvE,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW,2BAA2B,6CAAW;AAC1E,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA,0BAA0B,yCAAY;AACtC;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;;AAEA;AACA;;AAEO;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/mBiC;;AAExC;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,8BAA8B,6CAAW;AAC7E;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;;AAEA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;;AAEnD;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;;AAEA;;;AAGO;AACP;AACA;;AAEA;AACA,cAAc,6CAAW,yDAAyD,6CAAW;AAC7F,mBAAmB,6CAAW,iDAAiD,6CAAW;AAC1F;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;;;AAGlD;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC;AACA;AACA,SAAS;AACT;AACA;;;;AAIO;AACP;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,yBAAyB,6CAAW;;;AAGpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6CAAW;AACtC,4BAA4B,6CAAW;AACvC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,KAAK;AACL;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,oBAAoB,6CAAW;AACnE;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,KAAK;AACL;;AAEO;AACP;AACA;;AAEA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;AAIO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,wBAAwB,6CAAW;AACvE,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,wBAAwB,6CAAW;AACvE,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,gCAAgC,6CAAW;AAC3C;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC3qBwC;AACT;;AAE/B;;AAEO;AACP;AACA,sBAAsB,yCAAY;AAClC,uCAAuC;AACvC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAY;AAClC,uCAAuC;AACvC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAY;AAClC,uCAAuC;AACvC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAY;AAClC,uCAAuC;AACvC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACnFwC;AACT;;AAE/B;;AAEO;AACP;AACA,sBAAsB,yCAAY;AAClC,qCAAqC;AACrC,0CAA0C;AAC1C;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAY;AAClC,qCAAqC;AACrC,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAY;AAClC,qCAAqC;AACrC,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAY;AAClC,qCAAqC;AACrC,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;;AAEpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAY;AAClC,qCAAqC;AACrC,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C,yBAAyB,6CAAW;;AAEpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAY;AAClC,qCAAqC;AACrC,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C,yBAAyB,6CAAW;;AAEpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAY;AAClC,qCAAqC;AACrC,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,kCAAkC,6CAAW;;AAE7C;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAY;AAClC,qCAAqC;AACrC,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C,yBAAyB,6CAAW;;AAEpC;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrLwC;AACR;;AAEhC;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;AACO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjVwC;AACS;;AAEjD,uBAAuB;;AAEhB;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW,+BAA+B,6CAAW,gBAAgB,6CAAW;AACxG;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,2CAA2C,6CAAW,6CAA6C,6CAAW;AAC9K;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW,+BAA+B,6CAAW,gBAAgB,6CAAW;AACxG;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,2CAA2C,6CAAW,6CAA6C,6CAAW;AAC9K;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,kCAAkC,6CAAW,mBAAmB,6CAAW,uBAAuB,6CAAW,uBAAuB,6CAAW,yBAAyB,6CAAW,sCAAsC,6CAAW,0CAA0C,6CAAW;AACzV;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,6CAAW;AACjC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC,2BAA2B,6CAAW;AACtC,6BAA6B,6CAAW;AACxC,4BAA4B,6CAAW;AACvC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,kCAAkC,6CAAW,mBAAmB,6CAAW,uBAAuB,6CAAW,uBAAuB,6CAAW,yBAAyB,6CAAW,sCAAsC,6CAAW;AACpS;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,6CAAW;AACjC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC,2BAA2B,6CAAW;AACtC,6BAA6B,6CAAW;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;;AAEA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,iDAAiD,6CAAW;AAC5H;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA,4BAA4B,6CAAW;AACvC,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEO;AACP;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,gCAAgC,6CAAW;AAC3C;AACA;AACA,sBAAsB,gDAAc;AACpC,gCAAgC,6CAAW;AAC3C;AACA;AACA,sBAAsB,gDAAc;AACpC,gCAAgC,6CAAW;AAC3C;AACA;AACA;AACA,wBAAwB,6CAAW,oBAAoB,6CAAW;AAClE;AACA;;AAEO;AACP;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,gCAAgC,6CAAW;AAC3C;AACA;AACA,sBAAsB,gDAAc;AACpC,gCAAgC,6CAAW;AAC3C;AACA;AACA,sBAAsB,gDAAc;AACpC,gCAAgC,6CAAW;AAC3C;AACA;AACA,wBAAwB,6CAAW,oBAAoB,6CAAW;AAClE;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;;AAEA;;AAEO;AACP;AACA,qBAAqB,6CAAW,uCAAuC,6CAAW,2CAA2C,6CAAW;AACxI;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAAW;AAC1C,qCAAqC,6CAAW;AAChD,8BAA8B,6CAAW;AACzC;AACA;AACA,SAAS;AACT;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW,6CAA6C,6CAAW;AAC3F;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,2BAA2B,6CAAW;AACtG,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,uCAAuC,6CAAW;AAClD;AACA;AACA,uCAAuC,6CAAW;AAClD;AACA;AACA,uCAAuC,6CAAW;AAClD;AACA;AACA;AACA,gBAAgB,6CAAW;AAC3B;AACA;AACA,uCAAuC,6CAAW;AAClD;AACA;AACA,uCAAuC,6CAAW;AAClD;AACA;AACA,uCAAuC,6CAAW;AAClD;AACA;AACA,uCAAuC,6CAAW;AAClD;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,6CAAW;AACpD,sCAAsC,6CAAW;AACjD;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,6CAAW;AACpD,+CAA+C,6CAAW;AAC1D;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,sCAAsC,6CAAW;AACjD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,yBAAyB,6CAAW;AACxE,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,iCAAiC,6CAAW;AAChF,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACA;AACA;AACA;AACA;AACA,2BAA2B,0DAAa;AACxC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACr2BiC;AACR;;AAEhC,qCAAqC;;;AAG9B;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW,+BAA+B,6CAAW,gBAAgB,6CAAW;AACxG;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,2CAA2C,6CAAW,6CAA6C,6CAAW;AAC9K;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,kCAAkC,6CAAW,mBAAmB,6CAAW,uBAAuB,6CAAW,uBAAuB,6CAAW,yBAAyB,6CAAW,sCAAsC,6CAAW,0CAA0C,6CAAW;AACzV;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,6CAAW;AACjC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC,2BAA2B,6CAAW;AACtC,6BAA6B,6CAAW;AACxC,4BAA4B,6CAAW;AACvC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;;;AAIO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;AAIO;AACP;AACA,qBAAqB,6CAAW,uCAAuC,6CAAW;AAClF;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAAW;AAC1C,qCAAqC,6CAAW;AAChD,8BAA8B,6CAAW;AACzC;AACA;AACA,SAAS;AACT;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;AAIO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,2BAA2B,6CAAW;AACtG,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,6CAAW;AACpD,sCAAsC,6CAAW;AACjD;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,6CAAW;AACpD,+CAA+C,6CAAW;AAC1D;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,sCAAsC,6CAAW;AACjD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,mBAAmB,6CAAW,6BAA6B,6CAAW,gBAAgB,6CAAW;AAC7H,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW;AACtE;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,6BAA6B,EAAE,6CAAW;AAC7E;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW,uBAAuB,6CAAW;AACtE;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,6BAA6B,EAAE,6CAAW;AAC7E;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW,gBAAgB,6CAAW;AACjG,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,iCAAiC,6CAAW;AACxE;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW,aAAa,6CAAW;AACpD,iBAAiB,6CAAW,aAAa,6CAAW;AACpD,iBAAiB,6CAAW,aAAa,6CAAW;AACpD;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW,mBAAmB,6CAAW;AAC1D,iBAAiB,6CAAW,aAAa,6CAAW;AACpD,iBAAiB,6CAAW,uBAAuB,6CAAW;AAC9D,iBAAiB,6CAAW,iBAAiB,6CAAW;AACxD;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAAW;AAC1C,4BAA4B,6CAAW;AACvC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAAW;AAC1C,qCAAqC,6CAAW;AAChD;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,kBAAkB,6CAAW;AACjE;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,kBAAkB,6CAAW;AACjE;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW;AACtE;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,kCAAkC,6CAAW,mBAAmB,6CAAW,uBAAuB,6CAAW,uBAAuB,6CAAW,yBAAyB,6CAAW,sCAAsC,6CAAW;AACpS;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,6CAAW;AACjC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC,2BAA2B,6CAAW;AACtC,6BAA6B,6CAAW;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,yBAAyB,6CAAW;AACxE,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,iCAAiC,6CAAW;AAChF,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;;AAEA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,iDAAiD,6CAAW;AAC5H;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA,4BAA4B,6CAAW;AACvC,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW,iBAAiB,6CAAW,sBAAsB,6CAAW;AACrG,UAAU;AACV,4BAA4B,qBAAqB;AACjD;AACA;AACA,sCAAsC,6CAAW,iBAAiB,6CAAW,sBAAsB,6CAAW;AAC9G;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,iBAAiB,6CAAW,sBAAsB,6CAAW;AACjG;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW,yBAAyB,6CAAW;AACxE;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW,gBAAgB,6CAAW;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,gBAAgB,6CAAW;AAC/D,yBAAyB,6CAAW,iCAAiC,6CAAW;AAChF;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,gBAAgB,6CAAW;AAC/D,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW;AAClE;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,gBAAgB,6CAAW;AAC/D,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,oBAAoB,6CAAW;AAC3D;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;;AAEA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB;AACA,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB;AACA,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,OAAO,6CAAW;AACtD,yBAAyB,6CAAW,0BAA0B,6CAAW;AACzE,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW,wBAAwB,6CAAW,yBAAyB,6CAAW;AAC3G;AACA,wBAAwB,6CAAW,wBAAwB,6CAAW,yBAAyB,6CAAW;AAC1G;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D,6BAA6B,uDAAqB,GAAG,6CAAW;AAChE,mBAAmB,6CAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW,0BAA0B,6CAAW;AACzE,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW,wBAAwB,6CAAW,yBAAyB,6CAAW;AAC3G;AACA,wBAAwB,6CAAW,wBAAwB,6CAAW,yBAAyB,6CAAW;AAC1G;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;;;AAGA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,mCAAmC,6CAAW;AAC9C;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,0BAA0B,6CAAW;AACrC,0BAA0B,6CAAW;AACrC;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW,uCAAuC,6CAAW;AACvH,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW,eAAe,6CAAW;AAC/F,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW,eAAe,6CAAW;AACtD,yBAAyB,6CAAW;AACpC,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,uCAAuC,6CAAW;AAC9E,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,eAAe,6CAAW;AACtD,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,uCAAuC,6CAAW;AAC9E,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,eAAe,6CAAW;AACtD,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,sBAAsB,6CAAW;AACrE,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW;AAC/F;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,yBAAyB,6CAAW;AACxE,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,yBAAyB,6CAAW;AACxE,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,gBAAgB,6CAAW;AAC/D;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,cAAc,6CAAW;AAC7D;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,kBAAkB,6CAAW;AACjE;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,6BAA6B,6CAAW;AAC5E;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA,yBAAyB,6CAAW,kBAAkB,6CAAW;AACjE;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzrEwC;AACR;AAKJ;;AAE5B,sCAAsC;;AAE/B;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW,+BAA+B,6CAAW,gBAAgB,6CAAW;AACxG;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,2CAA2C,6CAAW,6CAA6C,6CAAW;AAC9K;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW,+BAA+B,6CAAW,gBAAgB,6CAAW;AACxG;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,2CAA2C,6CAAW,6CAA6C,6CAAW;AAC9K;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,gCAAgC,6CAAW;AAC3C;AACA;AACA,sBAAsB,gDAAc;AACpC,gCAAgC,6CAAW;AAC3C;AACA;AACA,sBAAsB,gDAAc;AACpC,gCAAgC,6CAAW;AAC3C;AACA;AACA;AACA,wBAAwB,6CAAW,oBAAoB,6CAAW;AAClE;AACA;;AAEO;AACP;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,gCAAgC,6CAAW;AAC3C;AACA;AACA,sBAAsB,gDAAc;AACpC,gCAAgC,6CAAW;AAC3C;AACA;AACA,sBAAsB,gDAAc;AACpC,gCAAgC,6CAAW;AAC3C;AACA;AACA,wBAAwB,6CAAW,oBAAoB,6CAAW;AAClE;AACA;;;;AAIO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;;AAEA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,mBAAmB,6CAAW,qBAAqB,6CAAW,qBAAqB,6CAAW;AAC9J;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW,6CAA6C,6CAAW;AAC3F;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,2BAA2B,6CAAW;AACtG,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,iCAAiC,6CAAW;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,wBAAwB,6CAAW;AACnG,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,wBAAwB,6CAAW;AACnG,yBAAyB,6CAAW,4BAA4B,6CAAW;AAC3E;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,iCAAiC,6CAAW,4BAA4B,6CAAW;AACvH;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,iCAAiC,6CAAW,sBAAsB,6CAAW;AACjH;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,6CAAW;AAClD;AACA;AACA,uCAAuC,6CAAW;AAClD;AACA;AACA,uCAAuC,6CAAW;AAClD;AACA;AACA,uCAAuC,6CAAW;AAClD;AACA;AACA,uCAAuC,6CAAW;AAClD;AACA;AACA,uCAAuC,6CAAW;AAClD;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,kBAAkB,6CAAW;AACjE;AACA;AACA,0BAA0B,6CAAW,UAAU,6CAAW,kBAAkB,6CAAW;AACvF;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAAW;AAC1C,4BAA4B,6CAAW;AACvC;AACA;AACA,SAAS;AACT;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;;;;;AAMO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,kBAAkB,6CAAW;AACjE;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,oBAAoB,6CAAW;AAC/B;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,sBAAsB,6CAAW;AAC7D;;AAEA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,kCAAkC,6CAAW,mBAAmB,6CAAW,uBAAuB,6CAAW,uBAAuB,6CAAW,yBAAyB,6CAAW,sCAAsC,6CAAW;AACpS;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,6CAAW;AACjC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC,2BAA2B,6CAAW;AACtC,6BAA6B,6CAAW;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,yBAAyB,6CAAW;AACxE,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,iCAAiC,6CAAW;AAChF,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;;AAEA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,iDAAiD,6CAAW;AAC5H;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA,4BAA4B,6CAAW;AACvC,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,yBAAyB,6CAAW;AACxE,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,oBAAoB,6CAAW;AAC/B;AACA;AACA,SAAS;AACT;AACA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,iCAAiC,6CAAW;AAChF;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;;AAEA;AACA;;AAEA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;;AAEA;AACA;;;;;AAKO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,iCAAiC,6CAAW;AAChF,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,oBAAoB,6CAAW;AAC/B;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;;AAEA,wBAAwB,6CAAW;AACnC;AACA;;;;;AAKO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,wBAAwB,6CAAW;AACnG,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,iCAAiC,6CAAW;AAC5C,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,0BAA0B,6CAAW,0BAA0B,6CAAW;AACtG;AACA;AACA;AACA,wBAAwB,6CAAW;;AAEnC;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,yBAAyB,6CAAW;AACxE;AACA;AACA;;AAEA;AACA;;;;AAIO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,iCAAiC,6CAAW;AAChF,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,oBAAoB,6CAAW;AAC/B;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,UAAU,6CAAW;AACzD;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2DAAY;AAC1B,8BAA8B,4EAA6B;AAC3D,2BAA2B,yEAA0B;;AAE5D;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,kBAAkB,6CAAW;AACjE;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,iCAAiC,6CAAW;AAChF;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW;AACtE;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW;AACtE,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW;AACtE,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,uBAAuB,6CAAW;AACtE,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,qBAAqB,6CAAW,uBAAuB,6CAAW,gBAAgB,6CAAW;AACjI,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3sDwC;;AAExC,uBAAuB;;AAEhB;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW,4BAA4B,6CAAW;AAC3E;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW,+BAA+B,6CAAW;AAC7E;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,oBAAoB,6CAAW,oBAAoB,6CAAW,oBAAoB,6CAAW;AAC7J;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,qCAAqC,6CAAW;AAChD,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,qCAAqC,6CAAW;AAChD,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA,wBAAwB,6CAAW,uBAAuB,6CAAW;AACrE;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC,UAAU;AACV,4BAA4B,qBAAqB;AACjD;AACA;AACA,sCAAsC,6CAAW;AACjD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,8BAA8B,6CAAW,sBAAsB,6CAAW;AAC9G,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,yCAAyC,6CAAW;AACpH;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW,oBAAoB,6CAAW,sBAAsB,6CAAW,gBAAgB,6CAAW;AAC/H;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9XwC;;;AAGxC,wBAAwB;;AAEjB;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,sBAAsB,6CAAW,wBAAwB,6CAAW;AACpI;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,sBAAsB,6CAAW,wBAAwB,6CAAW;AACpI;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,wBAAwB,6CAAW;AACnG;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6DAA2B;AACxD;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;;AAEpC;AACA;AACA,wBAAwB,6CAAW,+BAA+B,6CAAW;AAC7E;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,sCAAsC,6CAAW;AACjH;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjPiC;;AAExC;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,mBAAmB,6CAAW;AAC1D;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,mBAAmB,6CAAW;AAC1D,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,4CAA4C,6CAAW;AAC3F;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,qBAAqB,6CAAW;AAC5D,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,kBAAkB,6CAAW;AACzD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,wCAAwC,6CAAW;AACvF;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,8CAA8C,6CAAW;AAC7F;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,gDAAgD,6CAAW;AAC/F;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,2CAA2C,6CAAW;AAC1F;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW,eAAe,6CAAW;AAC5F;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,kDAAkD,6CAAW;AACjG;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,gBAAgB,6CAAW;AACvD,iBAAiB,6CAAW,eAAe,6CAAW;AACtD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,kDAAkD,6CAAW;AACjG;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,kDAAkD,6CAAW;AACjG;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW,kDAAkD,6CAAW;AACjG;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/W4E;AACE;AACf;AACC;AACb;AACM;AACD;AACA;AACa;AACR;AACa;AACE;AACf;AACA;AACJ;AACJ;AACQ;AACD;AACJ;AACD;AACiB;AACE;AACf;AACA;AACA;AACE;;AAEuB;AACE;AACf;AACC;AACb;AACM;AACD;AACA;AACa;AACR;AACa;AACE;AACf;AACA;AACJ;AACJ;AACQ;AACD;AACJ;AACD;AACiB;AACE;AACf;AACA;AACA;AACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpD9D;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrNwB;;AAExB;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D,iDAAiD;AACjD,iDAAiD;AACjD,4BAA4B;AAC5B,iEAAiE;AACjE,iEAAiE;AACjE;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,4DAA4D;AAC5D,iDAAiD;AACjD,iDAAiD;AACjD,4BAA4B;AAC5B,iEAAiE;AACjE,iEAAiE;AACjE;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5qB+B;;AAExB;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB,kBAAkB,yCAAM;AACxB;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACvtB+B;;AAExB;AACP;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yCAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1RA;AACA;AACO;AACP;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,qCAAqC;AACrC;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACO;AACP;;AAEA;AACA;AACA;;AAEA;AACO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACO;AACP;AACA;;AAEA;AACA,oCAAoC,UAAU,cAAc,UAAU;;AAEtE;AACA;;AAEA;AACO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,iCAAiC,OAAO,aAAa,WAAW;AAChE,iBAAiB,IAAI;AACrB;AACA;;AAEA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;;AAEP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;;AAEA,8BAA8B,YAAY,IAAI,QAAQ,IAAI,KAAK;AAC/D;AACA;;AAEA;AACO;AACP;AACA;;AAEA,0CAA0C,eAAe,IAAI,gBAAgB;;AAE7E;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;AChOO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxB+B;;AAExB;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA,MAAM;AACN;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEO;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5SwC;AACT;;AAExB;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAY;AAC9B;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;;AAEP;AACA;AACA;AACA;;AAEO;AACP;AACA,qEAAqE;AACrE,mGAAmG;AACnG;AACA;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO,0BAA0B,QAAQ;AACtD;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA,2EAA2E,mDAAiB;AAC5F;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACnlBwC;AAC+B;;AAEhE;AACP;AACA,+DAA+D,EAAE,UAAU;AAC3E;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP,kEAAkE,mDAAiB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kDAAgB,OAAO,kDAAgB;AAC/C,QAAQ,kDAAgB;AACxB;AACA;AACA;AACA,gBAAgB,kDAAgB;AAChC;AACA;AACA,qEAAqE,mDAAiB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO,wBAAwB,iFAAmB;;AAE3C;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA,oCAAoC,mDAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtHO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChf+B;;AAExB;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,yDAAyD;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACntB+B;;AAExB;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;;AAEA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA,wBAAwB,OAAO;AAC/B,uCAAuC,EAAE,GAAG,EAAE;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,KAAK;AAC/B;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,6DAA6D;AACpE,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,iEAAiE;AACxE,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC96BO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,2CAA2C;AAC3C,oBAAoB;AACpB;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA,2CAA2C;AAC3C,oBAAoB;AACpB;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,kDAAkD;AAClD,mDAAmD;AACnD;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9FwC;;AAExC;AACO;AACP;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA,yFAAyF;AACzF;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,sGAAsG,mDAAiB;AACvH;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,sGAAsG,mDAAiB;AACvH;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,sGAAsG,mDAAiB;AACvH;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,sGAAsG,mDAAiB;AACvH;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,oGAAoG,mDAAiB;AACrH;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7JO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA,8BAA8B;AAC9B,oBAAoB,qBAAqB;AACzC;AACA;AACA,gDAAgD,wBAAwB;AACxE,+CAA+C,wBAAwB;AACvE;AACA,oCAAoC;AACpC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3OwC;;AAEjC;AACP;AACA;AACA;AACA,oEAAoE;AACpE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,QAAQ,mDAAiB;AACzB;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACvTO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC5BO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClEO;AACP;AACA;AACA;;AAEO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7B0C;;AAE1C;AACP;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACA;AACA;AACA;AACA;AACA,2BAA2B,0DAAa;AACxC;AACP;AACO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpZwB;;AAExB;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,sBAAsB,yCAAM;AAC5B;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACljC+B;AACmB;;AAE3C;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEA;AACO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA,SAAS,IAAsC;AAC/C;AACA;AACA,KAAK,KAAK,aAGL;AACL;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP;AACA,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2DAAY;;AAEjC;AACO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC75BO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEA,oBAAoB,qBAAqB;;AAEzC;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7HgC;;AAEzB;AACP;AACA,wCAAwC,iBAAiB;AACzD;;AAEO;AACP;AACA;;AAEO;AACP,8EAA8E,0CAAO;AACrF;AACA;;AAEO;AACP,mGAAmG,0CAAO;AAC1G,iGAAiG,0CAAO;AACxG;AACA;;AAEO;AACP,mGAAmG,0CAAO;AAC1G,iGAAiG,0CAAO;AACxG;AACA,kEAAkE;AAClE;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;;AAEA;AACO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjMA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACzKgC;;AAEhC;;AAEA;AACA;AACA,iBAAiB,0CAAO;AACxB,eAAe,0CAAO;AACtB,gBAAgB,0CAAO;AACvB,eAAe,0CAAO;AACtB,kBAAkB,0CAAO;AACzB,gBAAgB,0CAAO;AACvB,mBAAmB,0CAAO;AAC1B,oBAAoB,0CAAO;AAC3B,qBAAqB,0CAAO;AAC5B,aAAa,0CAAO;AACpB,aAAa,0CAAO;AACpB,SAAS,0CAAO;AAChB,gBAAgB,0CAAO;AACvB,YAAY,0CAAO;AACnB;AACA;AACA,UAAU,0CAAO;AACjB,YAAY,0CAAO;AACnB,YAAY,0CAAO;AACnB,gBAAgB,0CAAO;AACvB,eAAe,0CAAO;AACtB,uBAAuB,0CAAO;AAC9B,iBAAiB,0CAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,0CAAO;AACxB,eAAe,0CAAO;AACtB,gBAAgB,0CAAO;AACvB,eAAe,0CAAO;AACtB,kBAAkB,0CAAO;AACzB,gBAAgB,0CAAO;AACvB,mBAAmB,0CAAO;AAC1B,oBAAoB,0CAAO;AAC3B,qBAAqB,0CAAO;AAC5B,aAAa,0CAAO;AACpB,aAAa,0CAAO;AACpB,SAAS,0CAAO;AAChB,gBAAgB,0CAAO;AACvB,YAAY,0CAAO;AACnB;AACA;AACA,UAAU,0CAAO;AACjB,YAAY,0CAAO;AACnB,YAAY,0CAAO;AACnB,gBAAgB,0CAAO;AACvB,eAAe,0CAAO;AACtB,uBAAuB,0CAAO;AAC9B,iBAAiB,0CAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1FqB;;AAExC,qBAAqB,YAAY;;AAE1B;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,iCAAiC,6CAAW;AAC5C;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,2BAA2B,6CAAW;AAC1E,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD,yBAAyB,6CAAW;AACpC;AACA,iCAAiC,6CAAW;AAC5C;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,iCAAiC,6CAAW;AAC5C;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW;AAClE;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzQiC;;AAExC;;AAEA;AACO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW,oBAAoB,6CAAW,oBAAoB,6CAAW;AAC1F,iBAAiB,6CAAW,qBAAqB,6CAAW,oBAAoB,6CAAW;AAC3F,iBAAiB,6CAAW,mBAAmB,6CAAW,oBAAoB,6CAAW;AACzF,iBAAiB,6CAAW,oBAAoB,6CAAW,oBAAoB,6CAAW;AAC1F,iBAAiB,6CAAW,oBAAoB,6CAAW,kBAAkB,6CAAW;AACxF,iBAAiB,6CAAW,qBAAqB,6CAAW,kBAAkB,6CAAW;AACzF,iBAAiB,6CAAW,mBAAmB,6CAAW,kBAAkB,6CAAW;AACvF,iBAAiB,6CAAW,oBAAoB,6CAAW,kBAAkB,6CAAW;AACxF,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,iBAAiB,6CAAW,qBAAqB,6CAAW;AAC/F;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,wBAAwB,6CAAW;AACnG;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,wBAAwB,6CAAW;AACnG;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,wBAAwB,6CAAW;AACnG;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW,sBAAsB,6CAAW;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC3TwC;AACT;;AAE/B;;AAEO;AACP;AACA,sBAAsB,yCAAM;AAC5B,qCAAqC;AACrC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAAW;AAC1C,qCAAqC,6CAAW;AAChD;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAM;AAC5B,qCAAqC;AACrC;AACA;AACA;AACA,yBAAyB,6CAAW,kBAAkB,6CAAW;AACjE,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAM;AAC5B,qCAAqC;AACrC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAM;AAC5B,qCAAqC;AACrC;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAM;AAC5B,qCAAqC;AACrC;AACA;AACA;AACA,kCAAkC,6CAAW;AAC7C;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAM;AAC5B,qCAAqC;AACrC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAM;AAC5B,qCAAqC;AACrC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA,sBAAsB,yCAAM;AAC5B,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpJwC;AACR;;AAEhC;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB,CAAC,0CAAO;AAC1D;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChZ4D;AACI;AACG;AACJ;AACD;AACU;AACG;AACJ;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACR9B;;AAExC;AACO;AACP;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,sGAAsG,mDAAiB;AACvH;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,sGAAsG,mDAAiB;AACvH;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA,oGAAoG,mDAAiB;AACrH;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5GO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB;AACzB,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC9H+B;;AAExB;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvFO;AACP;AACA;AACA;;AAEO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChDiC;;AAExC;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,cAAc;AACd,uBAAuB,6CAAW;AAClC,cAAc;AACd,uBAAuB,6CAAW;AAClC,cAAc;AACd,uBAAuB,6CAAW;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA,6BAA6B,6CAAW;AACxC;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA,kDAAkD,OAAO;AACzD;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA,6BAA6B,6CAAW;AACxC;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA,KAAK;AACL;AACA;AACA,eAAe,qCAAqC;AACpD;AACA,eAAe,qCAAqC;AACpD;AACA,eAAe,6BAA6B;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,mBAAmB,6CAAW;AAC9B,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA,yBAAyB,6CAAW,yCAAyC,6CAAW;AACxF;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC,wBAAwB,6CAAW;AACnC;AACA;AACA,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA,kDAAkD,OAAO;AACzD;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA,KAAK;AACL;AACA;AACA,eAAe,qCAAqC;AACpD;AACA,eAAe,qCAAqC;AACpD;AACA,eAAe,6BAA6B;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,2BAA2B,uDAAqB;AAChD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,4BAA4B,6CAAW;AACvC;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV,gCAAgC,6CAAW;AAC3C;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAW;AAC9B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAW;AAC9B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;;AAGA;AACA,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB;;;;AAIA;AACA,KAAK,6CAAW;AAChB,KAAK,6CAAW;AAChB;;;;AAIO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;;;AAIO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;AAIO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,SAAS;AACT;AACA;AACA;;;;AAIO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACO;AACP;AACA;AACA,yBAAyB,6CAAW,gCAAgC,6CAAW;AAC/E;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB,GAAG,6CAAW,oDAAoD,6CAAW;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA,wBAAwB,6CAAW,+BAA+B,6CAAW;AAC7E;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChiCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACwC;;AAExC;;AAEO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD,6BAA6B,oDAAkB,CAAC,6CAAW;AAC3D;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC,wBAAwB,6CAAW;AACnC,KAAK;;AAEL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,UAAU;AACzB;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,6CAAW;AACrD,UAAU;AACV,0CAA0C,6CAAW;AACrD,4BAA4B,qBAAqB;AACjD;AACA;AACA,8BAA8B,gDAAc;AAC5C;AACA,4BAA4B,wDAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;;;AAIO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;;AAEpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;;AAEpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;;AAEpC,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,SAAS;;AAET,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,gDAAgD,qDAAmB;AACnE;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,uBAAuB,uDAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;;AAEA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,oDAAkB,CAAC,6CAAW;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC,wBAAwB,6CAAW;AACnC,KAAK;;AAEL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,UAAU;AACzB;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,6CAAW,cAAc,6CAAW;AAC9E,UAAU;AACV,0CAA0C,6CAAW;AACrD,4BAA4B,qBAAqB;AACjD;AACA;AACA,8BAA8B,gDAAc;AAC5C;AACA,4BAA4B,wDAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACpwBwC;;AAExC;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD;AACA,yBAAyB,6CAAW;AACpC,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA,6BAA6B,qDAAmB;AAChD;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChLwC;;AAExC,uBAAuB;;AAEhB;AACP;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,uCAAuC,6CAAW;AACtF;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,uCAAuC,6CAAW;AACtF;AACA,yBAAyB,6CAAW,0BAA0B,6CAAW;AACzE;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,uCAAuC,6CAAW;AACtF;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,mBAAmB,6CAAW;AAClE;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAAW;AAC5C;AACA;AACA;AACA;AACA,gCAAgC,6CAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC,UAAU;AACV,4BAA4B,qBAAqB;AACjD;AACA;AACA,sCAAsC,6CAAW;AACjD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;;AAEA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAW;AACrC,0BAA0B,6CAAW;;AAErC;AACA;AACA,SAAS;AACT;;AAEA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,uCAAuC,6CAAW;AACtF,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,iCAAiC,6CAAW;AAChF;AACA,yBAAyB,6CAAW,yBAAyB,6CAAW;AACxE,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,0BAA0B,6CAAW;AACrC;AACA;AACA,SAAS;AACT;AACA;AACO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;;AAEpC;AACA;AACA,SAAS;AACT;AACA;AACO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,2BAA2B,6CAAW;AACtC,0BAA0B,6CAAW;AACrC,wBAAwB,6CAAW;AACnC,2BAA2B,6CAAW;;AAEtC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,iBAAiB;AACjB;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,uBAAuB,6CAAW;AAClC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC,UAAU;AACV,4BAA4B,qBAAqB;AACjD;AACA;AACA,sCAAsC,6CAAW;AACjD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;;AAElD;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACv0BwC;;AAExC;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAW;AACjC,uBAAuB,6CAAW;AAClC,sBAAsB,6CAAW;AACjC,uBAAuB,6CAAW;AAClC,sBAAsB,6CAAW;AACjC,uBAAuB,6CAAW;AAClC;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEO;;AAEP;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA,6BAA6B,uDAAqB;AAClD;AACA,wBAAwB,6CAAW;;AAEnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,sBAAsB,6CAAW;AACjC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvQwC;;AAExC,sBAAsB;;AAEtB,wDAAsB;AACtB;AACA,yDAAyD,GAAG;AAC5D,uDAAuD;AACvD,wBAAwB;AACxB;;AAEA,wDAAsB;AACtB;AACA;AACA;AACA,sDAAsD,GAAG;AACzD,oDAAoD;AACpD;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD,gBAAgB,wDAAsB;AACtC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;;AAElD;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAW;AACjC,qBAAqB,6CAAW;AAChC;AACA;AACA,SAAS;;AAET;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;;AAElD;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAW;AACjC,qBAAqB,6CAAW;AAChC;AACA;AACA,SAAS;;AAET;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,yBAAyB,6CAAW;AACpC,4BAA4B,6CAAW;AACvC,0BAA0B,6CAAW;AACrC,wBAAwB,6CAAW;AACnC,4BAA4B,6CAAW;AACvC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,yBAAyB,6CAAW;AACpC,4BAA4B,6CAAW;AACvC,0BAA0B,6CAAW;AACrC,wBAAwB,6CAAW;AACnC,4BAA4B,6CAAW;AACvC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,sBAAsB,6CAAW;AACjC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;;AAElC;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,sBAAsB,6CAAW;AACjC,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA;AACO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;;AAEA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,yBAAyB,6CAAW;AACpC,uBAAuB,6CAAW;AAClC,2BAA2B,6CAAW;AACtC;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,yBAAyB,6CAAW;AACpC,uBAAuB,6CAAW;AAClC,2BAA2B,6CAAW;AACtC;AACA;AACA,SAAS;AACT;AACA;;;AAGO;AACP;AACA,0BAA0B,6CAAW,yBAAyB,6CAAW;AACzE;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,yBAAyB,6CAAW;AACpC;AACA,mBAAmB,6CAAW;AAC9B,SAAS;AACT;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB,MAAM,wDAAsB;AAC/E;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA,cAAc,6CAAW,wBAAwB,6CAAW,4BAA4B,6CAAW,wBAAwB,6CAAW,kBAAkB,6CAAW;AACnK;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,yBAAyB,6CAAW;AACpC,qBAAqB,6CAAW;AAChC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA,cAAc,6CAAW,wBAAwB,6CAAW;AAC5D;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;;AAEA;AACP;AACA;AACA;AACA,yBAAyB,6CAAW,kBAAkB,6CAAW;AACjE;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC;AACA,yBAAyB,6CAAW,iBAAiB,6CAAW;AAChE;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA,oCAAoC,EAAE;AACtC;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,EAAE;AAC9C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,uCAAuC,EAAE;AACzC,uCAAuC,EAAE;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC,UAAU;AACV,4BAA4B,qBAAqB;AACjD,4CAA4C,EAAE;AAC9C,2CAA2C,EAAE;AAC7C;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACpqBA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACwC;AACM;;AAEvC;AACP;AACA;AACA,cAAc;AACd;AACA;AACA,uBAAuB,0DAAU;AACjC,4BAA4B,wDAAsB;AAClD,YAAY,0DAAU;AACtB;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC;AACA;AACA;AACA,YAAY,6CAAW;AACvB,gCAAgC,6CAAW;AAC3C;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,SAAS;AACxB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,0BAA0B,6CAAW;AACrC;AACA;AACA;AACA;AACA,QAAQ,gDAAc;AACtB;AACA;AACA,UAAU;AACV,YAAY,gDAAc;AAC1B;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA,gBAAgB,UAAU;AAC1B,cAAc;AACd;AACA;AACA,wBAAwB,+CAAa;AACrC;AACA;AACA;AACA,wBAAwB,oCAAoC;AAC5D,4BAA4B,+CAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB,cAAc;AACd;AACA;AACA;AACA;AACA,mCAAmC,wCAAwC;AAC3E;AACA;AACA;AACA;AACA,+BAA+B,mDAAiB;AAChD;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAU;;AAElB;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,+CAAa;AAC9C;AACA,4BAA4B,+CAAa;AACzC;AACA;;AAEA;AACA,wBAAwB,4BAA4B;AACpD,+BAA+B,+CAAa;AAC5C;AACA,4BAA4B,+CAAa;AACzC;AACA,+BAA+B,+CAAa;AAC5C;AACA;AACA,2BAA2B,+CAAa;AACxC;;AAEA;AACA;AACA;;AAEA,6BAA6B,6CAAW;;AAExC;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,QAAQ,0DAAU;AAClB;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAU;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,gBAAgB,gBAAgB;AAChC,cAAc;AACd;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,gBAAgB,gCAAgC;AAChD,cAAc;AACd;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,oCAAoC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAU;AACtB;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe,wBAAwB;AACvC;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,wBAAwB,oCAAoC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAU;AACtB;AACA,KAAK;AACL;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,cAAc;AACd;AACA;AACA;AACA,qCAAqC,+CAAa;AAClD;AACA;AACA;AACA,mCAAmC,qBAAqB;AACxD;AACA,oBAAoB,+CAAa;AACjC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,QAAQ;AACvB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA,sBAAsB,6CAAW;AACjC,0BAA0B,+CAAa;AACvC;AACA,wBAAwB,4BAA4B;AACpD,yBAAyB,+CAAa;AACtC;AACA;AACA;AACA,uBAAuB,+CAAa;AACpC;AACA;AACA,0BAA0B,qDAAmB;AAC7C;;AAEA;AACA;AACA,4BAA4B,oCAAoC;AAChE,kCAAkC;AAClC;AACA,iCAAiC,6CAAW;AAC5C;;AAEA,kCAAkC,mDAAiB;AACnD,kCAAkC,+CAAa;AAC/C;AACA;AACA;AACA,oBAAoB,qDAAmB;AACvC;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEO;AACP;AACA;AACA,cAAc;AACd;AACA;AACA,uBAAuB,0DAAU;AACjC,4BAA4B,wDAAsB;AAClD,YAAY,0DAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC,yBAAyB,6CAAW;AACpC,4BAA4B,+CAAa;AACzC;AACA;AACA;AACA,YAAY,6CAAW;AACvB,gCAAgC,6CAAW;AAC3C;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA,wBAAwB,6CAAW;AACnC;AACA,KAAK;AACL;;AAEO;AACP;AACA;AACA,cAAc;AACd;AACA;AACA,wBAAwB,wDAAsB;AAC9C,YAAY,0DAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,gBAAgB,QAAQ;AACxB,cAAc;AACd;AACA;AACA;AACA,0BAA0B,QAAQ;AAClC,KAAK;AACL;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,cAAc;AACd;AACA;AACA,YAAY,+CAAa;AACzB;AACA;AACA,gBAAgB,6CAAW;AAC3B,gBAAgB,6CAAW;AAC3B;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA,uBAAuB,0DAAU;AACjC;AACA,yDAAyD,+CAAa;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD,2BAA2B,mDAAiB;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B,4BAA4B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA,gBAAgB,gDAAc;AAC9B;AACA;AACA,kBAAkB;AAClB,oBAAoB,gDAAc;AAClC;AACA,cAAc;AACd;AACA,4BAA4B,oDAAkB;AAC9C;AACA,8BAA8B,gDAAc;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,6CAAW;AAClD;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,gBAAgB,UAAU;AAC1B,cAAc;AACd;AACA;AACA,wBAAwB,+CAAa;AACrC;AACA,wBAAwB,4BAA4B;AACpD,4BAA4B,+CAAa;AACzC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAwC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,gBAAgB,gBAAgB;AAChC,cAAc;AACd;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,gBAAgB,gCAAgC;AAChD,cAAc;AACd;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe,0BAA0B;AACzC,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gDAAc;AACxC;AACA;AACA;AACA;AACA;AACA,sBAAsB,0DAAU;AAChC;AACA;AACA;AACA;AACA;AACA,gBAAgB,gDAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAa;AACvC,4BAA4B,+CAAa;AACzC;AACA;AACA,+BAA+B,qDAAmB;AAClD,+BAA+B,qDAAmB;AAClD;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC;AACA;AACA;AACA;AACA,+BAA+B,0DAAU;AACzC;AACA;AACA,kCAAkC,+CAAa;AAC/C;AACA;AACA,gBAAgB,6CAAW;AAC3B,gBAAgB,gDAAc;AAC9B,cAAc;AACd;AACA;AACA;AACA,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,uBAAuB,gDAAc;AAC/C;AACA;AACA;AACA;AACA,sBAAsB,0DAAU;AAChC;AACA,gBAAgB,gDAAc;AAC9B;AACA,gBAAgB,gDAAc;AAC9B;AACA,UAAU,uBAAuB,gDAAc;AAC/C;AACA,sBAAsB,0DAAU;AAChC;AACA;AACA,+BAA+B,gDAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gDAAc;AAC9B;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,gBAAgB,gDAAc;AAC9B;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,QAAQ;AACvB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB;AACvB,sBAAsB,6CAAW;AACjC;AACA;AACA;AACA,sBAAsB,0DAAU;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEO;AACP;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,KAAK;AACL;AACA;AACA,gBAAgB,UAAU;AAC1B,cAAc;AACd;AACA;AACA,wBAAwB,+CAAa;AACrC;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe,0BAA0B;AACzC,cAAc;AACd;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAAW;AAC5C;AACA,cAAc;AACd;AACA;AACA;AACA,iCAAiC,6CAAW;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,gCAAgC,6CAAW;AAC3C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA,KAAK;AACL;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe,0BAA0B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAAW;AAC5C;AACA,cAAc;AACd;AACA;AACA;AACA,iCAAiC,6CAAW;AAC5C;AACA;AACA;AACA,UAAU;AACV,gCAAgC,6CAAW;AAC3C;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrpCwC;;AAExC;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;;AAEnD;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC,UAAU;AACV,4BAA4B,qBAAqB;AACjD;AACA;AACA,sCAAsC,6CAAW;AACjD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;;AAEP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;;AAEpC;AACA;AACA;AACA;;AAEO;AACP;;;AAGA;AACA;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,gCAAgC,6CAAW;AAC3C,8BAA8B,6CAAW;AACzC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;;AAEA;AACA;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;;AAElD;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAW;AACrC,uCAAuC,6CAAW;AAClD,qCAAqC,6CAAW;AAChD;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,cAAc,6CAAW,iCAAiC,6CAAW;AACrE;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,2BAA2B,6CAAW;;AAEtC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;;AAEA;AACA;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;;;AAGlD;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,6CAAW;AACvC,8BAA8B,6CAAW;;AAEzC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEO;AACP;AACA;AACA;AACA,2BAA2B;AAC3B,6BAA6B,wDAAsB;AACnD,2BAA2B;AAC3B;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7ZwC;;AAExC,uBAAuB;;AAEhB;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC,sBAAsB,6CAAW;AACjC,sBAAsB,6CAAW;AACjC;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC,sBAAsB,6CAAW;AACjC,sBAAsB,6CAAW;AACjC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,qBAAqB,6CAAW;AAChC,qBAAqB,6CAAW;AAChC,sBAAsB,6CAAW;AACjC,sBAAsB,6CAAW;AACjC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,iCAAiC,6CAAW,8BAA8B,6CAAW;AACxH;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB,GAAG,6CAAW,0CAA0C,6CAAW,mDAAmD,6CAAW;AACnL;AACA,0CAA0C;AAC1C,uCAAuC;AACvC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,0CAA0C;AAC1C,uCAAuC;AACvC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,wBAAwB,6CAAW;AACnC,4BAA4B,6CAAW;AACvC,6BAA6B,6CAAW;AACxC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA,6CAAW;AACJ;AACP;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW,2CAA2C,6CAAW;AACzF;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yCAAyC;AACzC,sCAAsC;AACtC;AACA;AACA;AACA,wBAAwB,6CAAW,+CAA+C,6CAAW;AAC7F,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,yBAAyB,6CAAW;AACpC,2BAA2B,6CAAW;AACtC,uBAAuB,6CAAW;AAClC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,yCAAyC;AACzC,sCAAsC;AACtC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,yBAAyB,6CAAW;AACpC,4BAA4B,6CAAW;AACvC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,wBAAwB,6CAAW;AACnC;AACA,0BAA0B,6CAAW;AACrC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,eAAe,6CAAW;AAC9D,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9fwC;;AAExC;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,eAAe,SAAS;AACxB,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA,uCAAuC;AACvC,UAAU;AACV,uCAAuC;AACvC;AACA,mBAAmB,oDAAkB;AACrC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6DAA2B;AACxD;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,eAAe,SAAS;AACxB,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA,uCAAuC;AACvC,UAAU;AACV,uCAAuC;AACvC;AACA,mBAAmB,oDAAkB;AACrC;AACA;;AAEA,wDAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB,KAAK,wDAAsB;AAC9E;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,mBAAmB,oDAAkB;AACrC;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;AAIO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW,6BAA6B,6CAAW;AAChE;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,QAAQ,6CAAW,mEAAmE,6CAAW;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA,kEAAkE,6CAAW,8CAA8C,6CAAW;AACtI;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,8BAA8B,6CAAW;AACzC,4BAA4B,6CAAW;AACvC,0BAA0B,6CAAW;AACrC;AACA,mBAAmB,6CAAW,+BAA+B,6CAAW,qDAAqD,6CAAW;AACxI,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,4CAA4C,qDAAmB;AAC/D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,2DAA2D,6CAAW,8DAA8D,6CAAW;AAC/I,oBAAoB,uDAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,QAAQ,6CAAW;AACnB;AACA;;;AAGO;AACP;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,6BAA6B,6CAAW;AAC5E;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW,+BAA+B,6CAAW,8BAA8B,6CAAW,oCAAoC,6CAAW;AACrK;AACA;;;AAGO;AACP;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,iDAAiD,qDAAmB;AACpE;AACA,iDAAiD,qDAAmB;AACpE;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6CAAW;AAC3B;AACA,iCAAiC,6CAAW;AAC5C;AACA,UAAU;AACV;AACA;AACA,uBAAuB,uDAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,6BAA6B,6CAAW;AAC5E;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,4BAA4B,6CAAW;AACvC,8BAA8B,6CAAW;AACzC,yBAAyB,6CAAW;AACpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW,aAAa,6CAAW;AAC5D;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA,cAAc,6CAAW,4BAA4B,6CAAW,6BAA6B,6CAAW;AACxG;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,6BAA6B,uDAAqB;AAClD;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,0BAA0B,6CAAW;AACrC,0BAA0B,6CAAW;AACrC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,4BAA4B,qBAAqB;AACjD;AACA;AACA,sCAAsC,6CAAW;AACjD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACA;AACA;;AAEA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,4BAA4B,qBAAqB;AACjD;AACA;AACA,sCAAsC,6CAAW;AACjD;AACA;AACA;AACA;AACA;;;;AAIO;AACP;AACA;AACA;AACA,cAAc,6CAAW,gCAAgC,6CAAW;AACpE;AACA;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA,6BAA6B,uDAAqB;AAClD,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;;AAEnC;AACA;;;AAGO;AACP;;AAEA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACv8BwC;;AAExC,uBAAuB;;AAEhB;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC,UAAU;AACV,4BAA4B,qBAAqB;AACjD;AACA;AACA,sCAAsC,6CAAW;AACjD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC,WAAW;AACX,sCAAsC;AACtC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,YAAY;AACZ;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC,WAAW;AACX,sCAAsC;AACtC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;;AAEpC,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA,cAAc,6CAAW,6BAA6B,6CAAW,6BAA6B,6CAAW;AACzG;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;;;AAGlD;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,uBAAuB,6CAAW;AAClC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;;AAEpC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,uBAAuB,6CAAW;AAClC,2BAA2B,6CAAW;AACtC,0BAA0B,6CAAW;AACrC,wBAAwB,6CAAW;AACnC,2BAA2B,6CAAW;;AAEtC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA;AACA,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB,aAAa,6CAAW;AACxB;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,iDAAiD,qDAAmB;AACpE;AACA,iDAAiD,qDAAmB;AACpE;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6CAAW;AAC3B;AACA,iCAAiC,6CAAW;AAC5C;AACA,UAAU;AACV;AACA;AACA,uBAAuB,uDAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC,UAAU;AACV,4BAA4B,qBAAqB;AACjD;AACA;AACA,sCAAsC,6CAAW;AACjD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,+CAAa;AACzB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,uCAAuC,6CAAW;AACtF;AACA,yBAAyB,6CAAW,0BAA0B,6CAAW;AACzE;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW,uCAAuC,6CAAW;AACtF,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA,wBAAwB,6CAAW;AACnC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5tBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACwC;;AAExC;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,oDAAkB;AAC/C;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6DAA2B;AACxD;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6DAA2B;AACxD;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA,6BAA6B,+CAAa;AAC1C;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA,4BAA4B,+CAAa;AACzC;AACA,KAAK;AACL;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,oBAAoB;AACnC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA,6BAA6B,+CAAa;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAc;AACpC;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5bwC;AACJ;;AAEpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,YAAY,qDAAK;AACjB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;AACO;AACP;AACA;AACA;AACA,6BAA6B,wDAAsB;AACnD,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,YAAY,qDAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA,6BAA6B,uDAAqB;AAClD;AACA;AACA;;AAEA;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;;;AAGO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA,uBAAuB,6CAAW;AAClC,yBAAyB,6CAAW;AACpC,uBAAuB,6CAAW;AAClC,wBAAwB,6CAAW;AACnC,yBAAyB,6CAAW;AACpC,wBAAwB,6CAAW;AACnC,uBAAuB,6CAAW;AAClC,yBAAyB,6CAAW;AACpC,yBAAyB,6CAAW;AACpC,4BAA4B,6CAAW;AACvC;AACA;AACA,SAAS;AACT;AACA;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC,wBAAwB,6CAAW;AACnC,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAW;AACxC,UAAU;AACV,4BAA4B,qBAAqB;AACjD;AACA;AACA,sCAAsC,6CAAW;AACjD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC;AACA;AACA,wBAAwB,6CAAW;AACnC;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,yBAAyB,6CAAW;AACpC,6BAA6B,uDAAqB;AAClD,iBAAiB,6CAAW;AAC5B,iBAAiB,6CAAW;AAC5B;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChV4D;AACJ;AACN;AACA;AACE;AACA;AACA;AACI;AACM;AACV;AACJ;AACE;AACM;;AAEY;AACJ;AACN;AACA;AACE;AACA;AACA;AACI;AACM;AACV;AACJ;AACE;AACM;;AAE7B;AACU;AACF;AACC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/BJ;AACT;;AAExB;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA,+DAA+D,EAAE,UAAU;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACO;AACP,kEAAkE,mDAAiB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kDAAgB,OAAO,kDAAgB;AAC/C,QAAQ,kDAAgB;AACxB;AACA;AACA;AACA,oBAAoB,kDAAgB;AACpC;AACA;AACA,yEAAyE,mDAAiB;AAC1F;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,yEAAyE,mDAAiB;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,gCAAgC;AAChC;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACO;AACP,yBAAyB;AACzB;;AAEO;AACP,2BAA2B;AAC3B;;;AAGO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,QAAQ,oDAAkB;AAC1B;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;AAGO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACO;;AAEA;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACwC;AACT;;AAExB;AACP;AACA;AACA;AACA,QAAQ,mDAAiB;AACzB;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D,+CAA+C,wBAAwB;AACvE;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,yCAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wBAAwB;AAC7C;AACA;AACA,qBAAqB,yBAAyB;AAC9C;;AAEA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACrOO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,qCAAqC;AACrC;AACA;;AAEO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrEwC;;AAEjC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,QAAQ,mDAAiB;AACzB;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,QAAQ,mDAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEO;;AAEA;AACP;AACA;AACA;AACA;;AAEO;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC7QO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,mCAAmC;AACnC,qCAAqC;AACrC,wCAAwC;AACxC,sCAAsC;AACtC,oCAAoC;AACpC,yCAAyC;AACzC,sCAAsC;AACtC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;;AAEA;AACP;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,uCAAuC;AACvC;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;;AAEA;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC,qDAAqD,EAAE;AACvD;AACA;AACA;AACA,oCAAoC,iBAAiB,WAAW,GAAG;AACnE;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACnUwC;;AAEjC;AACP;AACA;AACA,QAAQ,oDAAkB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD,wEAAwE,mDAAiB;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,QAAQ,oDAAkB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD,wEAAwE,mDAAiB;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,QAAQ,oDAAkB;AAC1B;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,QAAQ,oDAAkB;AAC1B;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AC1GwC;;AAEjC;AACP;AACA,QAAQ,mDAAiB;AACzB;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA,sEAAsE,wBAAwB;AAC9F,8BAA8B,wBAAwB;AACtD,gCAAgC;AAChC;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,iBAAiB,aAAa;AAC9B;AACA;;AAEO;AACP;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9FO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,wDAAwD;AAC/D;AACA;AACA;AACA;AACA;;AAEO,iEAAiE;AACxE;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9KwC;;AAEjC;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,kDAAgB;AACjC;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;;AAEzC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;;AAEzC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACA;AACA;;AAEA;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpPwC;;AAEjC;AACP;AACA;AACA,QAAQ,mDAAiB;AACzB;AACA;AACA;AACA,oBAAoB,qBAAqB;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,QAAQ,mDAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,kDAAgB;AACjC;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;;AAGA,oBAAoB,qBAAqB;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA,cAAc;AACd;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC7EwC;;AAEjC;AACP;AACA;AACA,QAAQ,mDAAiB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0FAA0F;AAC1F;AACA,6FAA6F;AAC7F;AACA,6FAA6F;AAC7F;AACA,2GAA2G;;AAE3G;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,mDAAiB;AAC5F;AACA;;AAEO;AACP;AACA;AACA;AACA,+BAA+B;AAC/B,WAAW;AACX;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,oBAAoB,KAAK,GAAG,QAAQ;AACpC;AACA;;;;;;;;;;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACoC;;AAEpC;AACA;AACA,WAAW,QAAQ;AACnB;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sBAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA,oBAAoB,kDAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC,kDAAS;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kDAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,KAAK;;;;;;;;;;;;;;;;AC/LpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACwC;;AAExC;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iEAA+B;;AAEtD;AACA;AACA,WAAW,oBAAoB;AAC/B,YAAY,0BAA0B;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,gBAAgB;AAC3B,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,oBAAoB;AAC/B,WAAW,gBAAgB;AAC3B;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,oBAAoB;AAC/B,WAAW,gBAAgB;AAC3B;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA,gBAAgB,+CAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,YAAY,mBAAmB;AAC/B;AACA;AACA;AACA,QAAQ,gDAAc;AACtB;AACA;AACA;AACA,oBAAoB,+CAAa;AACjC;AACA;AACA,wBAAwB,+CAAa;AACrC;AACA,8BAA8B,+CAAa;AAC3C,YAAY,6CAAW;AACvB;AACA;AACA;AACA,QAAQ,gDAAc;AACtB;AACA;AACA;AACA,oBAAoB,+CAAa;AACjC;AACA;AACA,wBAAwB,+CAAa;AACrC;AACA,8BAA8B,+CAAa;AAC3C,YAAY,6CAAW;AACvB;AACA;AACA;AACA,QAAQ,gDAAc;AACtB;AACA,oBAAoB,+CAAa;AACjC;AACA;AACA;AACA;AACA,QAAQ,gDAAc;AACtB;AACA,oBAAoB,+CAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+CAAa;AACrC;AACA;AACA,2BAA2B,+CAAa;AACxC;AACA;AACA,4BAA4B,iBAAiB;AAC7C,0BAA0B,+CAAa;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,oBAAoB;AAC/B,YAAY,yBAAyB;AACrC;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA,4BAA4B,+CAAa;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B;AACA;AACA,0BAA0B,gDAAc;AACxC;AACA;AACA;AACA,oBAAoB,oDAAkB;AACtC,4BAA4B,uBAAuB;AACnD;AACA,8CAA8C,+CAAa;AAC3D;AACA;AACA;AACA;AACA,8CAA8C,+CAAa;AAC3D;AACA;AACA;AACA;AACA,YAAY,gDAAc;AAC1B,YAAY,gDAAc;AAC1B,qBAAqB,gDAAc,KAAK,gDAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gDAAc;AAC1B;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,oBAAoB;AAC/B,YAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA,yBAAyB,+CAAa;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,UAAU;;;;;;;;;;;;;;;;ACtUzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEwC;;AAExC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,mCAAmC;AAC9C,YAAY,iBAAiB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,oBAAoB;AAC/B;AACA;AACA,IAAI,gDAAc;AAClB;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA,IAAI,gDAAc;AAClB;;AAEA;AACA;AACA,WAAW,oBAAoB;AAC/B,YAAY,mBAAmB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,gBAAgB,+CAAa;AAC7B;AACA;;AAEA,QAAQ,gDAAc;AACtB;AACA,oBAAoB,+CAAa;AACjC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,QAAQ,gDAAc;AACtB;AACA,oBAAoB,+CAAa;AACjC;AACA;AACA;AACA,QAAQ,gDAAc;AACtB,oBAAoB,+CAAa;AACjC;AACA;AACA;AACA,QAAQ,gDAAc;AACtB,oBAAoB,+CAAa;AACjC;AACA;AACA;AACA,QAAQ,gDAAc;AACtB,oBAAoB,+CAAa;AACjC;AACA;AACA,uBAAuB,+CAAa;AACpC;AACA;AACA,wBAAwB,OAAO;AAC/B,sBAAsB,+CAAa;AACnC,2CAA2C,EAAE;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gDAAc;AACtB,oBAAoB,+CAAa;AACjC;AACA;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA;AACA,YAAY,gDAAc;AAC1B,wBAAwB,+CAAa;AACrC;AACA,gBAAgB,gDAAc;AAC9B;AACA;AACA,wBAAwB,+CAAa;AACrC;AACA,uBAAuB,+CAAa;AACpC;AACA;AACA;AACA;AACA,YAAY,gDAAc;AAC1B,wBAAwB,+CAAa;AACrC;AACA,gBAAgB,gDAAc;AAC9B;AACA;AACA,wBAAwB,+CAAa;AACrC;AACA,uBAAuB,+CAAa;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA,iEAAe,SAAS;;;;;;;;;;;;;;;;;ACvPxB;AACA;AACA;AACwC;AACL;;AAEnC;AACA;AACA,UAAU;AACV;AACO,mBAAmB,mDAAiB;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC;AACA,qCAAqC;AACrC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,8BAA8B;AAC9B,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;;AAEpC;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,qDAAK;AACtC,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,8BAA8B;AAC9B;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAa;AACnC;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD,2CAA2C,qDAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,UAAU;AACrB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAQ,kDAAgB;AACxB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxUA;;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;ACNwC;AACR;;AAgCT;;AAyCK;;AAYhB;;AAE6B;;AAEzC,cAAc,mDAAiB,EAAE,oDAAS;AAC1C,cAAc,oDAAkB,EAAE,qDAAU;AAC5C,gDAAc,GAAG,iDAAM;AACvB,mDAAiB,GAAG,iDAAM;;AAE1B,0CAAO;AACP,cAAc,0CAAO,EAAE,qDAAsB;AAC7C,cAAc,0CAAO,UAAU,qDAAsB;;AAErD;AACA,IAAI,gDAAc;AAClB,IAAI,gEAAqB;AACzB,IAAI,8DAAmB;AACvB,IAAI,2DAAgB;AACpB,IAAI,2DAAgB;AACpB,IAAI,4DAAiB;AACrB,IAAI,4DAAiB;AACrB,IAAI,4DAAiB;AACrB,IAAI,8DAAmB;AACvB,IAAI,iEAAsB;AAC1B,IAAI,4DAAiB;AACrB,IAAI,0DAAe;AACnB,IAAI,2DAAgB;AACpB,IAAI,8DAAmB;AACvB,IAAI,sEAAsB;AAC1B,IAAI,uEAAuB;AAC3B,IAAI,uEAAuB;AAC3B,IAAI,4EAA4B;AAChC,IAAI,oEAAoB;AACxB,IAAI,wEAAwB;AAC5B,IAAI,yEAAyB;AAC7B,IAAI,8EAA8B;AAClC,IAAI,6EAA6B;AACjC,IAAI,wEAAwB;AAC5B,IAAI,mEAAmB;AACvB,IAAI,gFAAgC;AACpC,IAAI,+EAA+B;AACnC,IAAI,+EAA+B;AACnC,IAAI,8EAA8B;AAClC,IAAI,wEAAwB;AAC5B,IAAI,sEAAsB;AAC1B,IAAI,qEAAqB;AACzB,IAAI,qEAAqB;AACzB,IAAI,4DAA6B;AACjC,IAAI,6DAA8B;AAClC,IAAI,2DAA4B;AAChC,IAAI,2DAA4B;AAChC;;AAEA;AACA,IAAI,gDAAc;AAClB,IAAI,oEAAyB;AAC7B,IAAI,kEAAuB;AAC3B,IAAI,+DAAoB;AACxB,IAAI,+DAAoB;AACxB,IAAI,gEAAqB;AACzB,IAAI,gEAAqB;AACzB,IAAI,gEAAqB;AACzB,IAAI,kEAAuB;AAC3B,IAAI,qEAA0B;AAC9B,IAAI,gEAAqB;AACzB,IAAI,8DAAmB;AACvB,IAAI,+DAAoB;AACxB,IAAI,kEAAuB;AAC3B,IAAI,0EAA0B;AAC9B,IAAI,2EAA2B;AAC/B,IAAI,2EAA2B;AAC/B,IAAI,gFAAgC;AACpC,IAAI,wEAAwB;AAC5B,IAAI,4EAA4B;AAChC,IAAI,6EAA6B;AACjC,IAAI,kFAAkC;AACtC,IAAI,iFAAiC;AACrC,IAAI,4EAA4B;AAChC,IAAI,uEAAuB;AAC3B,IAAI,oFAAoC;AACxC,IAAI,mFAAmC;AACvC,IAAI,mFAAmC;AACvC,IAAI,kFAAkC;AACtC,IAAI,4EAA4B;AAChC,IAAI,0EAA0B;AAC9B,IAAI,yEAAyB;AAC7B,IAAI,yEAAyB;AAC7B,IAAI,gEAAiC;AACrC,IAAI,iEAAkC;AACtC,IAAI,+DAAgC;AACpC,IAAI,+DAAgC;AACpC,E","sources":["webpack://@mixly/micropython-esp32c2/../micropython/blocks/actuator.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/actuator_extern.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/actuator_onboard.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/ai.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/ai_sensor.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/blynk.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/cc_g1.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/ce_go.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/communicate.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/control.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/display.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/display_extern.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/display_onboard.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/factory.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/inout.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/iot.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/network.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/nova_g1.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/pe_g1.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/pins.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/sensor.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/sensor_extern.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/sensor_onboard.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/serial.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/system.js","webpack://@mixly/micropython-esp32c2/../micropython/blocks/weather.js","webpack://@mixly/micropython-esp32c2/../micropython/export.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/actuator.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/actuator_extern.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/actuator_onboard.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/ai.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/ai_sensor.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/blynk.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/cc_g1.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/ce_go.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/communicate.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/control.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/display.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/display_extern.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/display_onboard.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/factory.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/inout.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/iot.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/network.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/nova_g1.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/pe_g1.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/pins.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/sensor.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/sensor_extern.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/sensor_onboard.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/serial.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/system.js","webpack://@mixly/micropython-esp32c2/../micropython/generators/weather.js","webpack://@mixly/micropython-esp32c2/./blocks/esp32_profile.js","webpack://@mixly/micropython-esp32c2/./blocks/inout.js","webpack://@mixly/micropython-esp32c2/./blocks/me_go.js","webpack://@mixly/micropython-esp32c2/./blocks/mini_g2.js","webpack://@mixly/micropython-esp32c2/./blocks/pins.js","webpack://@mixly/micropython-esp32c2/./export.js","webpack://@mixly/micropython-esp32c2/./generators/inout.js","webpack://@mixly/micropython-esp32c2/./generators/me_go.js","webpack://@mixly/micropython-esp32c2/./generators/mini_g2.js","webpack://@mixly/micropython-esp32c2/./generators/pins.js","webpack://@mixly/micropython-esp32c2/../python/blocks/control.js","webpack://@mixly/micropython-esp32c2/../python/blocks/dicts.js","webpack://@mixly/micropython-esp32c2/../python/blocks/html.js","webpack://@mixly/micropython-esp32c2/../python/blocks/lists.js","webpack://@mixly/micropython-esp32c2/../python/blocks/logic.js","webpack://@mixly/micropython-esp32c2/../python/blocks/math.js","webpack://@mixly/micropython-esp32c2/../python/blocks/procedures.js","webpack://@mixly/micropython-esp32c2/../python/blocks/set.js","webpack://@mixly/micropython-esp32c2/../python/blocks/storage.js","webpack://@mixly/micropython-esp32c2/../python/blocks/text.js","webpack://@mixly/micropython-esp32c2/../python/blocks/tuple.js","webpack://@mixly/micropython-esp32c2/../python/blocks/utility.js","webpack://@mixly/micropython-esp32c2/../python/blocks/variables.js","webpack://@mixly/micropython-esp32c2/../python/export.js","webpack://@mixly/micropython-esp32c2/../python/generators/control.js","webpack://@mixly/micropython-esp32c2/../python/generators/dicts.js","webpack://@mixly/micropython-esp32c2/../python/generators/html.js","webpack://@mixly/micropython-esp32c2/../python/generators/lists.js","webpack://@mixly/micropython-esp32c2/../python/generators/logic.js","webpack://@mixly/micropython-esp32c2/../python/generators/math.js","webpack://@mixly/micropython-esp32c2/../python/generators/procedures.js","webpack://@mixly/micropython-esp32c2/../python/generators/set.js","webpack://@mixly/micropython-esp32c2/../python/generators/storage.js","webpack://@mixly/micropython-esp32c2/../python/generators/text.js","webpack://@mixly/micropython-esp32c2/../python/generators/tuple.js","webpack://@mixly/micropython-esp32c2/../python/generators/utility.js","webpack://@mixly/micropython-esp32c2/../python/generators/variables.js","webpack://@mixly/micropython-esp32c2/../python/others/names.js","webpack://@mixly/micropython-esp32c2/../python/others/procedures.js","webpack://@mixly/micropython-esp32c2/../python/others/variables.js","webpack://@mixly/micropython-esp32c2/../python/python_generator.js","webpack://@mixly/micropython-esp32c2/./css/color_esp32c3_mixgocc.css?61f0","webpack://@mixly/micropython-esp32c2/external var \"Blockly\"","webpack://@mixly/micropython-esp32c2/external var \"Mixly\"","webpack://@mixly/micropython-esp32c2/webpack/bootstrap","webpack://@mixly/micropython-esp32c2/webpack/runtime/compat get default export","webpack://@mixly/micropython-esp32c2/webpack/runtime/define property getters","webpack://@mixly/micropython-esp32c2/webpack/runtime/hasOwnProperty shorthand","webpack://@mixly/micropython-esp32c2/webpack/runtime/make namespace object","webpack://@mixly/micropython-esp32c2/./index.js"],"sourcesContent":["import * as Blockly from 'blockly/core';\n\nconst ACTUATOR_HUE = 100;\n\n//Servo\nexport const servo_move = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_SERVO)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendValueInput(\"DEGREE\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_DEGREE_0_180);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SERVO_MOVE);\n }\n};\n\n//LED\nexport const number = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [\"1\", \"1\"],\n [\"2\", \"2\"]\n ]), 'op')\n this.setOutput(true);\n }\n};\n\nexport const ledswitch = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_ESP32_ON, \"1\"],\n [Blockly.Msg.MIXLY_ESP32_OFF, \"0\"],\n [Blockly.Msg.MIXLY_ESP32_TOGGLE, \"-1\"]\n ]), \"flag\");\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);\n }\n};\n\nexport const actuator_extern_led_bright = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING)\n .appendField(Blockly.Msg.MIXLY_EXTERN_LED)\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_EXTERN_LED_SETONOFF);\n }\n};\n\nexport const actuator_extern_get_led_bright = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(Blockly.Msg.MIXLY_EXTERN_LED)\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_EXTERN_LED_GETONOFF);\n }\n};\n\nexport const actuator_extern_led_brightness = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING)\n .appendField(Blockly.Msg.MIXLY_EXTERN_LED)\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_BRIGHTNESS)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_EXTERN_LED_SETBRIGHT);\n }\n};\n\nexport const actuator_led_bright = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING);\n this.appendValueInput('led')\n .appendField(Blockly.Msg.MIXLY_BUILDIN_LED)\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_SETONOFF);\n }\n};\n\nexport const actuator_get_led_bright = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);\n this.appendValueInput('led')\n .appendField(Blockly.Msg.MIXLY_BUILDIN_LED)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);\n }\n};\n\nexport const actuator_led_brightness = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING);\n this.appendValueInput('led')\n .appendField(Blockly.Msg.MIXLY_BUILDIN_LED)\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_BRIGHTNESS)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_SETBRIGHT);\n }\n};\n\n//music\nexport const esp32_music_pitch = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_TONE)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendValueInput('pitch')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_FREQUENCY);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);\n }\n};\n\nexport const esp32_music_pitch_with_time = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_TONE)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendValueInput('pitch')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_FREQUENCY);\n this.appendValueInput('time')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_DURATION);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE2);\n }\n};\n\nexport const esp32_music_stop = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_NOTONE)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const esp32_music_set_tempo = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendValueInput('TICKS')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_SET_TEMPO)\n .appendField(Blockly.Msg.MICROBIT_ACTUATOR_ticks);\n this.appendValueInput('BPM')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_SPEED);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_SET_TEMPO);\n }\n}\n\nexport const esp32_music_get_tempo = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Get_current_tempo)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_GET_TEMPO);\n }\n}\n\nexport const esp32_music_reset = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Reset_music)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_RESET);\n }\n}\n\nexport const esp32_onboard_music_pitch = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_TONE);\n this.appendValueInput('pitch')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_FREQUENCY);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);\n }\n};\n\nexport const esp32_onboard_music_pitch_with_time = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_TONE);\n this.appendValueInput('pitch')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_FREQUENCY);\n this.appendValueInput('time')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_DURATION);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE2);\n }\n};\n\nexport const esp32_onboard_music_stop = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_NOTONE);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const esp32_onboard_music_play_list = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendValueInput('LIST')\n .appendField(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS);\n\n }\n}\n\nexport const esp32_music_play_list = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendValueInput('LIST')\n .appendField(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)\n this.appendValueInput('PIN')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_PIN);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS);\n\n }\n}\n\nexport const esp32_mixgo_music_play_list_show = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendValueInput('LIST')\n .appendField(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)\n this.appendValueInput('PIN')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_PIN);\n // this.appendValueInput('DISPLAY')\n // .appendField(Blockly.Msg.MIXLY_ESP32_MIXGO_MUSIC_SHOW_IN);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_MIXGO_MUSIC_PLAY_TONE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAYSHOW)\n }\n}\n//RGB\nexport const actuator_neopixel_init = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .setCheck(\"var\");\n this.appendValueInput(\"PIN\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_PIN);\n this.appendValueInput(\"LEDCOUNT\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_COUNT);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_RGB_PIN_COUNT);\n }\n};\n\nexport const actuator_neopixel_rgb = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n // .appendField(Blockly.Msg.MIXLY_SETUP)\n this.appendValueInput(\"_LED_\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_NUM);\n this.appendValueInput(\"RVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_R);\n this.appendValueInput(\"GVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_G);\n this.appendValueInput(\"BVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_B);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B);\n }\n};\n\nexport const actuator_neopixel_write = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n // this.appendValueInput(\"PIN\", Number)\n // .setCheck(Number)\n // .setAlign(Blockly.inputs.Align.RIGHT)\n // .appendField(Blockly.Msg.MIXLY_PIN);\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_RGB_WRITE)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_WRI);\n }\n};\n\nexport const actuator_onboard_neopixel_rgb = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n this.appendValueInput(\"_LED_\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_NUM);\n this.appendValueInput(\"RVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_R);\n this.appendValueInput(\"GVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_G);\n this.appendValueInput(\"BVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_B);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B);\n }\n};\n\nexport const actuator_onboard_neopixel_rgb_all = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n this.appendValueInput(\"RVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_R);\n this.appendValueInput(\"GVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_G);\n this.appendValueInput(\"BVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_B);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B);\n }\n};\n\nexport const actuator_onboard_neopixel_write = {\n init: function () {\n this.setColour(ACTUATOR_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_RGB_WRITE)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_WRI);\n }\n};\n\n\nexport const led_light = actuator_led_bright;\nexport const get_led_bright = actuator_get_led_bright;\nexport const led_brightness = actuator_led_brightness;\n","import * as Blockly from 'blockly/core';\nimport { Profile } from 'mixly';\n\nconst ACTUATOR_EXTERN_HUE = '#74A55B';\n\n//music\nexport const esp32_music_pitch_init = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MIDI)\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .setCheck(\"var\");\n this.appendValueInput(\"PIN\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_PIN);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_RGB_PIN_COUNT);\n }\n};\n\nexport const esp32_music_pitch = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_TONE)\n this.appendValueInput('pitch')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_FREQUENCY);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);\n }\n};\n\nexport const esp32_music_pitch_with_time = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_TONE)\n this.appendValueInput('pitch')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_FREQUENCY);\n this.appendValueInput('time')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_DURATION);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE2);\n }\n};\n\nexport const esp32_music_play_list = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n this.appendValueInput('LIST')\n .appendField(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS);\n\n }\n}\n\nexport const esp32_music_set_tempo_extern = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n this.appendValueInput('TICKS')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_SET_TEMPO)\n .appendField(Blockly.Msg.MICROBIT_ACTUATOR_ticks);\n this.appendValueInput('BPM')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_SPEED);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_SET_TEMPO);\n }\n}\n\nexport const esp32_music_get_tempo_extern = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Get_current_tempo)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_GET_TEMPO);\n }\n}\n\nexport const esp32_music_reset_extern = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Reset_music)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_RESET);\n }\n}\n\nexport const esp32_music_stop = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_NOTONE)\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const actuator_extern_led_bright = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING)\n .appendField(Blockly.Msg.MIXLY_EXTERN_LED)\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_EXTERN_LED_SETONOFF);\n }\n};\n\nexport const actuator_extern_get_led_bright = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(Blockly.Msg.MIXLY_EXTERN_LED)\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BRIGHTNESS)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_EXTERN_LED_GETONOFF);\n }\n};\n\nexport const actuator_extern_get_led_state = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(Blockly.Msg.MIXLY_EXTERN_LED)\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_EXTERN_LED_GETONOFF);\n }\n};\n\nexport const actuator_extern_led_brightness = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING)\n .appendField(Blockly.Msg.MIXLY_EXTERN_LED)\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_BRIGHTNESS)\n this.appendDummyInput()\n .appendField('%')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_EXTERN_LED_SETBRIGHT);\n }\n};\n\n//Servo\nexport const servo_init = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput(\"VAR\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_SERVO)\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const servo_move = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_SERVO)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendValueInput(\"DEGREE\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_DEGREE_0_180);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SERVO_MOVE);\n }\n};\n\nexport const servo_speed_360 = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput(\"VAR\")\n .appendField(\"360°\" + Blockly.Msg.MIXLY_SERVO)\n this.appendValueInput(\"SPEED\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.blockpy_turtle_rotate + Blockly.Msg.MIXLY_SPEED + \" (-10~10)\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SERVO_360_TOOLTIP);\n }\n};\n\n//Servo\nexport const servo_set_angle = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField('180°' + Blockly.Msg.MIXLY_SERVO)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendValueInput(\"NUM\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SERVO_MOVE);\n }\n};\n\nexport const servo_set_speed = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField('360°' + Blockly.Msg.MIXLY_SERVO)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendValueInput(\"NUM\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_SPEED);\n this.appendDummyInput()\n .appendField('%');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SERVO_SPEED_TOOLIPS);\n }\n};\n\nexport const servo_get_angle = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField('180°' + Blockly.Msg.MIXLY_SERVO)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const servo_get_speed = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField('360°' + Blockly.Msg.MIXLY_SERVO)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_SPEED);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const actuator_ms32006_init = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(\"初始化\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(\"电机驱动\");\n this.appendDummyInput()\n .appendField(\"地址\")\n .appendField(new Blockly.FieldDropdown([['A', 'ms32006.ADDRESS_A'], ['B', 'ms32006.ADDRESS_B']]), 'mode');\n this.appendValueInput('SUB1')\n .setCheck(\"var\")\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\"通信\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(\"初始化MS32006电机驱动,使用I2C通信\");\n }\n};\n\nexport const actuator_ms32006_dcmotor = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(\"直流电机\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.CLOCKWISE, \"ms32006.MOT_CW\"],\n [Blockly.Msg.ANTI_CLOCKWISE, \"ms32006.MOT_CCW\"],\n [Blockly.Msg.MOTOR_N, \"ms32006.MOT_N\"],\n [Blockly.Msg.MOTOR_P, \"ms32006.MOT_P\"]\n ]), \"direction\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(\"设置直流电机的状态及转速(0-100)\");\n }\n};\n\n\n\nexport const actuator_ms32006_stepper = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(\"步进电机\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(\"选择\")\n .appendField(new Blockly.FieldDropdown([['A', 'ms32006.MOT_A'], ['B', 'ms32006.MOT_B']]), 'mode');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.CLOCKWISE, \"ms32006.MOT_CW\"],\n [Blockly.Msg.ANTI_CLOCKWISE, \"ms32006.MOT_CCW\"]\n ]), \"direction\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\"转速\");\n this.appendValueInput('steps')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\"步数\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(\"设置步进电机的状态、转速、步数(0-2047)\");\n }\n};\n\n//rgb\nexport const actuator_neopixel_init = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .setCheck(\"var\");\n this.appendValueInput(\"PIN\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_PIN);\n this.appendValueInput(\"LEDCOUNT\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_COUNT);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_RGB_PIN_COUNT);\n }\n};\n\nexport const actuator_neopixel_rgb = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n // .appendField(Blockly.Msg.MIXLY_SETUP)\n this.appendValueInput(\"_LED_\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_NUM);\n this.appendValueInput(\"RVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_R);\n this.appendValueInput(\"GVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_G);\n this.appendValueInput(\"BVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_B);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MP);\n }\n};\n\nexport const actuator_neopixel_rgb_all = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.appendValueInput(\"RVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_R);\n this.appendValueInput(\"GVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_G);\n this.appendValueInput(\"BVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_B);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_RGB_ALL_R_G_B_MIXGOCC);\n }\n};\n\nexport const actuator_neopixel_write = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n // this.appendValueInput(\"PIN\", Number)\n // .setCheck(Number)\n // .setAlign(Blockly.inputs.Align.RIGHT)\n // .appendField(Blockly.Msg.MIXLY_PIN);\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_RGB_WRITE)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_WRI);\n }\n};\n\nexport const actuator_use_uart_init = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"uart\")\n .appendField(new Blockly.FieldDropdown([\n [\"uart1\", \"uart1\"],\n [\"uart2\", \"uart2\"]\n ]), \"key\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .appendField(new Blockly.FieldDropdown([\n ['SYN6288' + Blockly.Msg.MIXLY_AipSpeech_synthesis,'SYN6288'],\n ['NS9300' + Blockly.Msg.MIXLY_MUSIC_PLAYER,'NS9300']\n ]),'key2');\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n }\n};\n\nexport const player_whether_stop ={\n init:function(){\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_MUSIC_PLAYER)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_WHETHER)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_STOPPED, \"0\"],\n [Blockly.Msg.MIXLY_PLAYING, \"1\"],\n [Blockly.Msg.MIXLY_PAUSED, \"2\"]\n ]), \"key\");\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const player_set_play = {\n init:function(){\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MUSIC_PLAYER)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_STAT)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MP3_PLAY, \"1\"],\n [Blockly.Msg.MIXLY_MP3_PAUSE, \"2\"],\n [Blockly.Msg.MIXLY_STOP, \"3\"],\n [Blockly.Msg.MIXLY_MP3_PREV, \"4\"],\n [Blockly.Msg.MIXLY_MP3_NEXT, \"5\"]\n ]), \"key\");\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const player_set_volume = {\n init:function(){\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MUSIC_PLAYER)\n .setCheck(\"var\");\n this.appendValueInput('volume')\n .appendField(Blockly.Msg.MIXLY_MP3_VOL +Blockly.Msg.MIXLY_STAT);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_PLAYER_SET_VOLUME_TOOLTIP);\n }\n}\n\nexport const player_set_mode = {\n init:function(){\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MUSIC_PLAYER)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MODE+Blockly.Msg.MIXLY_STAT)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MP3_LOOP_ALL, \"0\"],\n [Blockly.Msg.MIXLY_MP3_LOOP_ONE, \"1\"],\n [Blockly.Msg.MIXLY_PLAYER_DIRECTORY_LOOP, \"2\"],\n [Blockly.Msg.MIXLY_MP3_LOOP_RAM, \"3\"],\n [Blockly.Msg.MIXLY_PLAYER_SINGLE_STOP, \"4\"],\n [Blockly.Msg.MIXLY_PLAYER_SEQUENTIAL_PLAY, \"5\"]\n ]), \"key\");\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const player_play_music = {\n init:function(){\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MUSIC_PLAYER)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_JS_START_MELODY,\"play\"],\n [Blockly.Msg.MIXLY_PLAYER_INSERT_MUSIC, \"insert\"]\n ]), \"key\");\n this.appendValueInput('song');\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_PLAYER_PLAY_MUSIC_TOOTIP)\n }\n}\n\nexport const player_insert_music ={\n\n}\n\nexport const syn6288_set_voice = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField('SYN6288')\n this.appendValueInput('VOICE')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_SET_VOLUME);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SET_VOLUME_TOOLTIP);\n }\n}\n\nexport const syn6288_get_voice = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField('SYN6288')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET_VOLUME)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SET_VOLUME_TOOLTIP);\n }\n}\n\nexport const syn6288_builtin_voice = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField('SYN6288')\n this.appendValueInput('VOICE')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_PLAY_HINTS);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PROGRAM_BLOCK)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, 'True'], [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, 'False']]), 'mode');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_PLAY_HINTS_TOOLTIP);\n }\n}\n\nexport const syn6288_tts_play = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField('SYN6288')\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_AipSpeech_synthesis);\n this.appendValueInput('VOICE')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_BACKGROUND_MUSIC);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PROGRAM_BLOCK)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, 'True'], [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, 'False']]), 'mode');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_PLAY_TTS_TOOLTIP);\n }\n}\n\n\n//mixbot extern\nexport const mixbot_addr_extern = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.extern_addr), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const robot_motor_extern = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_MOTOR)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_SPEED);\n this.appendDummyInput()\n .appendField('%')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MIXBOT_MOTOR_EXTERN_TOOLTIP);\n }\n}\n\nexport const robot_motor_extern_get_speed = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_MOTOR)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_SPEED);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_traffic_light_extern = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_TRAFFIC_LIGHT)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_Turn_off_display, '0'],\n [Blockly.Msg.MIXLY_TRAFFIC_LIGHT_RED_ON, '1'],\n [Blockly.Msg.MIXLY_TRAFFIC_LIGHT_RED_BLINK, '2'],\n [Blockly.Msg.MIXLY_TRAFFIC_LIGHT_YELLOW_ON, '3'],\n [Blockly.Msg.MIXLY_TRAFFIC_LIGHT_YELLOW_BLINK, '4'],\n [Blockly.Msg.MIXLY_TRAFFIC_LIGHT_GREEN_ON, '5'],\n [Blockly.Msg.MIXLY_TRAFFIC_LIGHT_GREEN_BLINK, '6']\n ]), \"light\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_led_extern = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.COLOUR_RGB_WHITE, 'W'],\n [Blockly.Msg.COLOUR_RGB_RED, 'R'],\n [Blockly.Msg.COLOUR_RGB_YELLOW, 'Y'],\n [Blockly.Msg.COLOUR_RGB_GREEN, 'G'],\n [Blockly.Msg.COLOUR_RGB_BLUE, 'B']\n ]), \"color\")\n .appendField(\"LED\")\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendValueInput('value')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.BRIGHTNESS);\n this.appendDummyInput()\n .appendField('%')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_led_extern_get_value = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.COLOUR_RGB_WHITE, 'W'],\n [Blockly.Msg.COLOUR_RGB_RED, 'R'],\n [Blockly.Msg.COLOUR_RGB_YELLOW, 'Y'],\n [Blockly.Msg.COLOUR_RGB_GREEN, 'G'],\n [Blockly.Msg.COLOUR_RGB_BLUE, 'B']\n ]), \"color\")\n .appendField(\"LED\")\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.BRIGHTNESS)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_servo_extern_get_status = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_SERVO_MOTOR)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_JS_BLE_POWER, '[0]'],\n [Blockly.Msg.MIXLY_SPEED, '[1]'],\n [Blockly.Msg.MATH_SINGLE_OP_ABSOLUTE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, '[2]'],\n [Blockly.Msg.MIXLY_RELATIVE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, '[3]'],\n [Blockly.Msg.MIXLY_MIXBOT_SERVO_BLOCK_OR_NOT, '[4]'],\n [Blockly.Msg.MIXLY_MIXBOT_SERVO_FINISH_OR_NOT, '[5]'],\n [Blockly.Msg.MIXLY_ALL, '']\n ]), \"status\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_servo_extern_stop_mode = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_SERVO_MOTOR)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXBOT_SERVO_SET_STOP_MODE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MIXBOT_SERVO_STOP_MODE_KEEP, '0'],\n [Blockly.Msg.MIXLY_MIXBOT_SERVO_STOP_MODE_COAST, '1'],\n [Blockly.Msg.MIXLY_MIXBOT_SERVO_STOP_MODE_BRAKE, '2']\n ]), \"status\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_servo_extern_stop = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_SERVO_MOTOR)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_STOP)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_servo_extern_absolute_run = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_SERVO_MOTOR)\n .appendField(Blockly.Msg.MATH_SINGLE_OP_ABSOLUTE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE + Blockly.Msg.MSG.run)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MODE)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_SPEED + Blockly.Msg.MIXLY_MODE, '0'],\n [Blockly.Msg.MIXLY_MICROBIT_JS_BLE_POWER + Blockly.Msg.MIXLY_MODE, '1']\n ]), \"status\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_PARAMS);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField('%')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXBOT_SERVO_TURN_DIRECTION)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.CLOCKWISE, '0'],\n [Blockly.Msg.MIXLY_MIXBOT_SERVO_NEAREST_PATH, '1'],\n [Blockly.Msg.ANTI_CLOCKWISE, '2']\n ]), \"direction\");\n this.appendValueInput('angle')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_DISPLAY_MATRIX_ROTATE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MIXBOT_SERVO_ABSOLUTE_ANGLE_TOOLTIP);\n }\n}\n\nexport const robot_servo_extern_relative_origin = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_SERVO_MOTOR)\n .appendField(Blockly.Msg.MIXLY_RELATIVE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE + Blockly.Msg.MSG.run)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXBOT_SERVO_RELATIVE_ORIGIN_PATH)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_servo_extern_relative_run = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_SERVO_MOTOR)\n .appendField(Blockly.Msg.MIXLY_RELATIVE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE + Blockly.Msg.MSG.run)\n .appendField(\"(\" + Blockly.Msg.MIXLY_MIXBOT_SERVO_LIKE_ENCODING_MOTOR + \")\")\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MODE)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_SPEED + Blockly.Msg.MIXLY_MODE, '0'],\n [Blockly.Msg.MIXLY_MICROBIT_JS_BLE_POWER + Blockly.Msg.MIXLY_MODE, '1']\n ]), \"status\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_PARAMS);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField('%')\n this.appendValueInput('angle')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_DISPLAY_MATRIX_ROTATE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MIXBOT_SERVO_RELATIVE_ANGLE_TOOLTIP);\n }\n}\n\nexport const robot_servo_extern_relative_continue = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_SERVO_MOTOR)\n .appendField(Blockly.Msg.MIXLY_RELATIVE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE + Blockly.Msg.MSG.run)\n .appendField(\"(\" + Blockly.Msg.MIXLY_MIXBOT_SERVO_LIKE_ORDINARY_MOTOR + \")\")\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MODE)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_SPEED + Blockly.Msg.MIXLY_MODE, '0'],\n [Blockly.Msg.MIXLY_MICROBIT_JS_BLE_POWER + Blockly.Msg.MIXLY_MODE, '1']\n ]), \"status\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_PARAMS);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField('%')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXBOT_SERVO_TURN_DIRECTION)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.CLOCKWISE, '0'],\n [Blockly.Msg.ANTI_CLOCKWISE, '2']\n ]), \"direction\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const mixbot_actuator_extern_get_addr = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXBOT)\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MOTOR, 'ext_motor'],\n [Blockly.Msg.MIXLY_TRAFFIC_LIGHT, 'ext_traffic'],\n [Blockly.Msg.COLOUR_RGB_WHITE + \"LED\", 'W_LED'],\n [Blockly.Msg.COLOUR_RGB_RED + \"LED\", 'R_LED'],\n [Blockly.Msg.COLOUR_RGB_YELLOW + \"LED\", 'Y_LED'],\n [Blockly.Msg.COLOUR_RGB_GREEN + \"LED\", 'G_LED'],\n [Blockly.Msg.COLOUR_RGB_BLUE + \"LED\", 'B_LED'],\n [Blockly.Msg.MIXLY_SERVO_MOTOR, 'ext_servo']\n ]), \"name\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXBOT_EXTERN_GET_ADDR)\n this.setOutput(true);\n this.setInputsInline(true);\n }\n}\n\nexport const mixbot_actuator_extern_set_addr = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXBOT)\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MOTOR, 'ext_motor'],\n [Blockly.Msg.MIXLY_TRAFFIC_LIGHT, 'ext_traffic'],\n [Blockly.Msg.COLOUR_RGB_WHITE + \"LED\", 'W_LED'],\n [Blockly.Msg.COLOUR_RGB_RED + \"LED\", 'R_LED'],\n [Blockly.Msg.COLOUR_RGB_YELLOW + \"LED\", 'Y_LED'],\n [Blockly.Msg.COLOUR_RGB_GREEN + \"LED\", 'G_LED'],\n [Blockly.Msg.COLOUR_RGB_BLUE + \"LED\", 'B_LED'],\n [Blockly.Msg.MIXLY_SERVO_MOTOR, 'ext_servo']\n ]), \"name\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXBOT_EXTERN_SET_ADDR)\n this.appendValueInput('old')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE);\n this.appendValueInput('new')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_UPDATE);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\n//educore\nexport const PIN_init = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_AT)\n .appendField(Blockly.Msg.MIXLY_PIN);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const pin_led_bright = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING);\n this.appendValueInput('pin')\n .appendField('LED')\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const servo_PIN_init = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_SERVO + Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_AT)\n .appendField(Blockly.Msg.MIXLY_PIN);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const servo_move_angle = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput(\"SUB\")\n .appendField(Blockly.Msg.MIXLY_SERVO);\n this.appendValueInput(\"angle\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_DISPLAY_MATRIX_ROTATE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.DRAW_POINTER_ANGLE)\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const parrot_PIN_init = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_MOTOR + Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_AT)\n .appendField(Blockly.Msg.MIXLY_PIN);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const parrot_move_speed = {\n init: function () {\n this.setColour(ACTUATOR_EXTERN_HUE);\n this.appendValueInput(\"SUB\")\n .appendField(Blockly.Msg.MIXLY_MOTOR);\n this.appendValueInput(\"speed\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_DISPLAY_MATRIX_ROTATE +Blockly.Msg.MIXLY_SPEED);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};","import * as Blockly from 'blockly/core';\nimport { Boards } from 'mixly';\n\nconst ACTUATOR_ONBOARD_HUE = '#6C9858'\n\n//LED\nexport const number = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [\"L1\", \"1\"],\n [\"L2\", \"2\"]\n ]), 'op')\n this.setOutput(true);\n }\n};\n\nexport const ledswitch = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_ESP32_ON, \"1\"],\n [Blockly.Msg.MIXLY_ESP32_OFF, \"0\"],\n [Blockly.Msg.MIXLY_ESP32_TOGGLE, \"-1\"]\n ]), \"flag\");\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);\n }\n};\n\nexport const actuator_led_bright = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING);\n this.appendValueInput('led')\n .appendField(Blockly.Msg.MIXLY_BUILDIN_LED)\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_SETONOFF);\n }\n};\n\nexport const actuator_get_led_bright = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);\n this.appendValueInput('led')\n .appendField(Blockly.Msg.MIXLY_BUILDIN_LED)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BRIGHTNESS)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);\n }\n};\n\nexport const actuator_get_led_state = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);\n this.appendValueInput('led')\n .appendField(Blockly.Msg.MIXLY_BUILDIN_LED)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);\n }\n};\n\nexport const actuator_led_brightness = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING);\n this.appendValueInput('led')\n .appendField(Blockly.Msg.MIXLY_BUILDIN_LED)\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_BRIGHTNESS)\n this.appendDummyInput(\"\")\n .appendField(\"%\")\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_BUILDIN_LED + Blockly.Msg.MIXLY_BRIGHTNESS + '(0-100%)');\n }\n};\n\nexport const actuator_mixgo_zero_led_color = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING);\n this.appendValueInput('led')\n .appendField(Blockly.Msg.MIXLY_BUILDIN_LED)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_LCD_SETCOLOR)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_LIGHT_RED, \"1\"],\n [Blockly.Msg.MIXLY_LIGHT_GREEN, \"2\"],\n [Blockly.Msg.MIXLY_LIGHT_BLUE, \"3\"],\n [Blockly.Msg.MIXLY_LIGHT_YELLOW, \"4\"],\n [Blockly.Msg.MIXLY_LIGHT_CYAN, \"5\"],\n [Blockly.Msg.MIXLY_LIGHT_PURPLE, \"6\"],\n [Blockly.Msg.MIXLY_LIGHT_WHITE, \"7\"]\n ]), 'colorvalue');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip();\n }\n};\n\nexport const rm_actuator_led_bright = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING)\n .appendField(Blockly.Msg.MIXLY_BUILDIN_LED)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.COLOUR_RGB_RED, \"r\"],\n [Blockly.Msg.COLOUR_RGB_GREEN, \"g\"]\n ]), \"color\");\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_SETONOFF);\n }\n};\n\nexport const rm_actuator_get_led_bright = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n\n .appendField(Blockly.Msg.MIXLY_BUILDIN_LED)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.COLOUR_RGB_RED, \"r\"],\n [Blockly.Msg.COLOUR_RGB_GREEN, \"g\"]\n ]), \"color\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BRIGHTNESS)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);\n }\n};\n\nexport const rm_actuator_get_led_state = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(Blockly.Msg.MIXLY_BUILDIN_LED)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.COLOUR_RGB_RED, \"r\"],\n [Blockly.Msg.COLOUR_RGB_GREEN, \"g\"]\n ]), \"color\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);\n }\n};\n\nexport const rm_actuator_led_brightness = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING)\n .appendField(Blockly.Msg.MIXLY_BUILDIN_LED)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.COLOUR_RGB_RED, \"r\"],\n [Blockly.Msg.COLOUR_RGB_GREEN, \"g\"]\n ]), \"color\");\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_BRIGHTNESS)\n this.appendDummyInput(\"\")\n .appendField(\"%\")\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_BUILDIN_LED + Blockly.Msg.MIXLY_BRIGHTNESS + '(0-10)');\n }\n};\n\nexport const cc_number = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [\"L1\", \"20\"],\n [\"L2\", \"21\"]\n ]), 'op')\n this.setOutput(true);\n }\n};\n\nexport const actuator_onboard_neopixel_rgb = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n this.appendValueInput(\"_LED_\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_NUM);\n this.appendValueInput(\"RVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_R);\n this.appendValueInput(\"GVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_G);\n this.appendValueInput(\"BVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_B);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n const boardKey = Boards.getSelectedBoardKey();\n switch (boardKey) {\n case 'micropython:esp32c3:mixgo_cc':\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOCC);\n break;\n case 'micropython:esp32s2:mixgo_ce':\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOCC);\n break;\n case 'micropython:esp32c3:mixgo_me':\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOME);\n break;\n case 'micropython:esp32:mPython':\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MPYTHON);\n break;\n default:\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOME);\n }\n }\n};\n\nexport const actuator_onboard_neopixel_rgb_all = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n this.appendValueInput(\"RVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_R);\n this.appendValueInput(\"GVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_G);\n this.appendValueInput(\"BVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_B);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_RGB_ALL_R_G_B_MIXGOCC);\n }\n};\n\nexport const actuator_onboard_neopixel_rgb_show_all_rainbow = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RAINBOW);\n this.appendValueInput('time')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_DURATION)\n .appendField(Blockly.Msg.MIXLY_MILLIS);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n }\n};\n\n\nexport const actuator_onboard_neopixel_rgb_show_all_chase = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_CHASE);\n this.appendValueInput(\"RVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_R);\n this.appendValueInput(\"GVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_G);\n this.appendValueInput(\"BVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_B);\n this.appendValueInput('time')\n .setCheck(Number)\n .appendField(Blockly.Msg.PYTHON_RANGE_STEP)\n .appendField(Blockly.Msg.MIXLY_MILLIS);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n }\n};\n\nexport const actuator_onboard_neopixel_write = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_RGB_WRITE)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_WRI);\n }\n};\n\n\nexport const actuator_rm_onboard_neopixel_rgb = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n this.appendValueInput(\"_LED_\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_NUM);\n this.appendValueInput(\"RVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_R);\n this.appendValueInput(\"GVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_G);\n this.appendValueInput(\"BVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_B);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n const boardKey = Boards.getSelectedBoardKey();\n switch (boardKey) {\n case 'micropython:esp32c3:mixgocc':\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOCC);\n break;\n case 'micropython:esp32c3:mixgome':\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOME);\n break;\n case 'micropython:esp32:mPython':\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MPYTHON);\n break;\n default:\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOME);\n }\n }\n};\n\nexport const actuator_rm_onboard_neopixel_rgb_all = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n this.appendValueInput(\"RVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_R);\n this.appendValueInput(\"GVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_G);\n this.appendValueInput(\"BVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_B);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_RGB_ALL_R_G_B_MIXGOCC);\n }\n};\n\n\n\nexport const actuator_rm_onboard_neopixel_rgb_show_all_chase = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_CHASE);\n this.appendValueInput(\"RVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_R);\n this.appendValueInput(\"GVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_G);\n this.appendValueInput(\"BVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_B);\n this.appendValueInput('time')\n .setCheck(Number)\n .appendField(Blockly.Msg.PYTHON_RANGE_STEP)\n .appendField(Blockly.Msg.MIXLY_MILLIS);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n }\n};\n\n\nexport const esp32_music_set_tempo = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput('TICKS')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_SET_TEMPO)\n .appendField(Blockly.Msg.MICROBIT_ACTUATOR_ticks);\n this.appendValueInput('BPM')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_SPEED);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_SET_TEMPO);\n }\n}\n\nexport const esp32_music_get_tempo = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Get_current_tempo)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_GET_TEMPO);\n }\n}\n\nexport const esp32_music_reset = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Reset_music)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_RESET);\n }\n}\n\nexport const esp32_onboard_music_pitch = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_TONE);\n this.appendValueInput('pitch')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_FREQUENCY);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);\n }\n};\n\nexport const esp32_onboard_music_pitch_with_time = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_TONE);\n this.appendValueInput('pitch')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_FREQUENCY);\n this.appendValueInput('time')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_DURATION);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE2);\n }\n};\n\nexport const esp32_onboard_music_stop = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_NOTONE);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const esp32_onboard_music_play_list = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput('LIST')\n .appendField(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS);\n\n }\n}\n\nexport const rm_motor = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MOTOR_DC)\n .appendField(new Blockly.FieldDropdown([\n ['1', \"1\"],\n [\"2\", \"2\"],\n [\"3\", \"3\"]\n ]), \"wheel\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.CLOCKWISE, \"CW\"],\n [Blockly.Msg.ANTI_CLOCKWISE, \"CCW\"],\n [Blockly.Msg.MOTOR_P, \"P\"],\n [Blockly.Msg.MOTOR_N, \"N\"]\n ]), \"direction\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);\n this.appendDummyInput(\"\")\n .appendField(\"%\")\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\n//c3 motor onboard\n\nexport const actuator_stepper_keep = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(\"MixGo Car\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.blockpy_forward, \"F\"],\n [Blockly.Msg.blockpy_backward, \"B\"],\n [Blockly.Msg.blockpy_left, \"L\"],\n [Blockly.Msg.blockpy_right, \"R\"]\n ]), \"VAR\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);\n this.appendDummyInput()\n .appendField('%')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const actuator_stepper_stop = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"MixGo Car\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MOTOR_P, \"P\"],\n [Blockly.Msg.MOTOR_N, \"N\"]\n ]), \"VAR\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n }\n};\n\nexport const actuator_dc_motor = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MOTOR_DC)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLYCAR_WHEEL_LEFT, \"L\"],\n [Blockly.Msg.MIXLYCAR_WHEEL_RIGHT, \"R\"]\n ]), \"wheel\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.CLOCKWISE, \"CW\"],\n [Blockly.Msg.ANTI_CLOCKWISE, \"CCW\"]\n ]), \"direction\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);\n this.appendDummyInput()\n .appendField('%')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const actuator_dc_motor_stop = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MOTOR_DC)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLYCAR_WHEEL_LEFT, \"L\"],\n [Blockly.Msg.MIXLYCAR_WHEEL_RIGHT, \"R\"]\n ]), \"wheel\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_STOP)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MOTOR_P, \"P\"],\n [Blockly.Msg.MOTOR_N, \"N\"]\n ]), \"direction\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\n//mixbot onboard_motor below:\n\nexport const mixbot_motor_status = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXBOT_MOTOR_STATUS);\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MIXBOT_MOTOR_STATUS_TOOLTIP);\n }\n};\n\nexport const mixbot_move = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXBOT)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.blockpy_forward, \"F\"],\n [Blockly.Msg.blockpy_backward, \"B\"],\n [Blockly.Msg.blockpy_left, \"L\"],\n [Blockly.Msg.blockpy_right, \"R\"]\n ]), \"VAR\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_JS_BLE_POWER, \"PWR\"],\n [Blockly.Msg.MIXLY_SPEED, \"SPEED\"],\n [Blockly.Msg.MIXLY_MIXBOT_MOTOR_TURNS, \"TURNS\"]\n ]), \"mode\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_PARAMS);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MIXBOT_MOVE_TOOLTIP);\n }\n}\n\nexport const mixbot_stop = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXBOT)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MOTOR_P, \"P\"],\n [Blockly.Msg.MOTOR_N, \"N\"]\n ]), \"VAR\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const mixbot_motor = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXBOT)\n .appendField(Blockly.Msg.MIXLY_MOTOR)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.TEXT_TRIM_LEFT, \"1\"],\n [Blockly.Msg.TEXT_TRIM_RIGHT, \"2\"],\n [Blockly.Msg.TEXT_TRIM_BOTH, \"0\"]\n ]), \"wheel\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_JS_BLE_POWER, \"PWR\"],\n [Blockly.Msg.MIXLY_SPEED, \"SPEED\"],\n [Blockly.Msg.MIXLY_MIXBOT_MOTOR_TURNS, \"TURNS\"]\n ]), \"mode\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_PARAMS);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MIXBOT_MOVE_TOOLTIP);\n }\n}\n\nexport const actuator_mixbot_buzzer_on_off = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXBOT_BUZZER);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_ON, \"0\"],\n [Blockly.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_OFF, \"1\"]\n ]), 'on_off')\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};\n\n//bitbot onboard_motor below:\nexport const bitbot_move = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.BITBOT)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.blockpy_forward, \"F\"],\n [Blockly.Msg.blockpy_backward, \"B\"],\n [Blockly.Msg.blockpy_left, \"L\"],\n [Blockly.Msg.blockpy_right, \"R\"]\n ]), \"VAR\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_SPEED);\n this.appendDummyInput(\"\")\n .appendField(\"%\")\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const bitbot_stop = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.BITBOT)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MOTOR_P, \"P\"],\n [Blockly.Msg.MOTOR_N, \"N\"]\n ]), \"VAR\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const bitbot_motor = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.BITBOT)\n .appendField(Blockly.Msg.MIXLY_MOTOR)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.TEXT_TRIM_LEFT, \"0\"],\n [Blockly.Msg.TEXT_TRIM_RIGHT, \"1\"]\n ]), \"wheel\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.CLOCKWISE, \"CW\"],\n [Blockly.Msg.ANTI_CLOCKWISE, \"CCW\"],\n [Blockly.Msg.MOTOR_P, \"P\"],\n [Blockly.Msg.MOTOR_N, \"N\"]\n ]), \"direction\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_SPEED);\n this.appendDummyInput(\"\")\n .appendField(\"%\")\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const actuator_mixgo_nova_mic_set = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_MIXBOT_SOUND_SET_LOUDNESS)\n this.appendDummyInput()\n .appendField('%');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_SETONOFF);\n }\n};\n\nexport const actuator_mixgo_nova_mic_get = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXBOT_SOUND_LOUDNESS + '(%)');\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);\n }\n};\n\nexport const actuator_mixgo_nova_voice_set = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_MIXBOT_BUZZER + Blockly.Msg.MIXLY_MP3_VOL)\n this.appendDummyInput()\n .appendField('%');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_SETONOFF);\n }\n};\n\nexport const actuator_mixgo_nova_voice_get = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_MIXBOT_BUZZER + Blockly.Msg.MIXLY_MP3_VOL + '(%)');\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);\n }\n};\n\n\n\nexport const actuator_mixgo_nova_record_audio = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput('PATH')\n .appendField(Blockly.Msg.MIXLY_RECORD_AUDIO)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH);\n this.appendValueInput('TIME')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_GET_PRESSES_TIME);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n}\n\nexport const actuator_mixgo_nova_play_audio = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput('PATH')\n .appendField(Blockly.Msg.MIXLY_PLAY_AUDIO)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n}\n\nexport const actuator_mixgo_nova_play_online_audio = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput('PATH')\n .appendField(Blockly.Msg.MIXLY_PLAY_ONLINE_AUDIO)\n .appendField('URL');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n}\n\nexport const actuator_mixgo_nova_onboard_music_pitch = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_TONE);\n this.appendValueInput('pitch')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_FREQUENCY);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);\n }\n};\n\nexport const actuator_mixgo_nova_onboard_music_stop = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_NOTONE);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const set_power_output = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.ME_GO_MOTOR_EXTERN)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[\"1\", \"1\"], [\"2\", \"2\"], [\"3\", \"3\"]]), \"index\");\n this.appendValueInput('duty')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.blynk_IOT_IR_POWER + Blockly.Msg.MIXLY_PINMODEOUT);\n this.appendDummyInput()\n .appendField('%')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip();\n }\n}\n\nexport const get_power_output = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.ME_GO_MOTOR_EXTERN)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[\"1\", \"1\"], [\"2\", \"2\"]]), \"index\");\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.blynk_IOT_IR_POWER + Blockly.Msg.MIXLY_PINMODEOUT + Blockly.Msg.MIXLY_DUTY_RATIO);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n}\n\nexport const set_all_power_output = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.ME_GO_MOTOR_EXTERN)\n .appendField(Blockly.Msg.MIXLY_ALL + Blockly.Msg.PIN_NUMBERING);\n this.appendValueInput('duty')\n .setCheck(Number)\n .setAlign(Blockly.ALIGN_RIGHT)\n .appendField(Blockly.Msg.blynk_IOT_IR_POWER + Blockly.Msg.MIXLY_PINMODEOUT + Blockly.Msg.MIXLY_FREQUENCY);\n this.appendDummyInput()\n .appendField('Hz')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MIXBOT_MOTOR_EXTERN_TOOLTIP);\n }\n}\n\nexport const analog_keyboard_input = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_KEYBOARD_INPUT);\n this.appendValueInput('special');\n this.appendValueInput('general');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_RELEASE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MICROPYTHON_DISPLAY_YES, \"True\"],\n [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"False\"]\n ]), 'release');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_KEYBOARD_INPUT);\n }\n};\n\nexport const special_key = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SPECIAL_KEY)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_SPECIAL_KEY0, \"0x00\"],\n [Blockly.Msg.MIXLY_SPECIAL_KEY1, \"0x01\"],\n [Blockly.Msg.MIXLY_SPECIAL_KEY2, \"0x02\"],\n [Blockly.Msg.MIXLY_SPECIAL_KEY1, \"0x04\"],\n [Blockly.Msg.MIXLY_SPECIAL_KEY8, \"0x08\"],\n [Blockly.Msg.MIXLY_SPECIAL_KEY16, \"0x10\"],\n [Blockly.Msg.MIXLY_SPECIAL_KEY32, \"0x20\"],\n [Blockly.Msg.MIXLY_SPECIAL_KEY64, \"0x40\"],\n [Blockly.Msg.MIXLY_SPECIAL_KEY128, \"0x80\"]\n ]), 'op')\n this.setOutput(true);\n }\n};\n\nexport const general_key = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GENERAL_KEY)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_SPECIAL_KEY0, \"0x00\"],\n ['A', \"0x04\"],\n ['B', \"0x05\"],\n ['C', \"0x06\"],\n ['D', \"0x07\"],\n ['E', \"0x08\"],\n ['F', \"0x09\"],\n ['G', \"0x0A\"],\n ['H', \"0x0B\"],\n ['I', \"0x0C\"],\n ['J', \"0x0D\"],\n ['K', \"0x0E\"],\n ['L', \"0x0F\"],\n ['M', \"0x10\"],\n ['N', \"0x11\"],\n ['O', \"0x12\"],\n ['P', \"0x13\"],\n ['Q', \"0x14\"],\n ['R', \"0x15\"],\n ['S', \"0x16\"],\n ['T', \"0x17\"],\n ['U', \"0x18\"],\n ['V', \"0x19\"],\n ['W', \"0x1A\"],\n ['X', \"0x1B\"],\n ['Y', \"0x1C\"],\n ['Z', \"0x1D\"],\n ['1 !', \"0x1E\"],\n ['2 @', \"0x1F\"],\n ['3 #', \"0x20\"],\n ['4 $', \"0x21\"],\n ['5 %', \"0x22\"],\n ['6 ^', \"0x23\"],\n ['7 &', \"0x24\"],\n ['8 *', \"0x25\"],\n ['9 (', \"0x26\"],\n ['0 )', \"0x27\"],\n ['ENTER', \"0x28\"],\n ['ESC', \"0x29\"],\n ['BACKSPACE', \"0x2A\"],\n ['TAB', \"0x2B\"],\n ['SPACE', \"0x2C\"],\n ['- _', \"0x2D\"],\n ['= +', \"0x2E\"],\n ['[ {', \"0x2F\"],\n ['] }', \"0x30\"],\n ['\\\\ |', \"0x31\"],\n ['; :', \"0x33\"],\n [\"' \" + ' \"', \"0x34\"],\n ['` ~', \"0x35\"],\n [', <', \"0x36\"],\n ['. >', \"0x37\"],\n ['/ ?', \"0x38\"],\n ['CAPS_LOCK', \"0x39\"],\n ['F1', \"0x3A\"],\n ['F2', \"0x3B\"],\n ['F3', \"0x3C\"],\n ['F4', \"0x3D\"],\n ['F5', \"0x3E\"],\n ['F6', \"0x3F\"],\n ['F7', \"0x40\"],\n ['F8', \"0x41\"],\n ['F9', \"0x42\"],\n ['F10', \"0x43\"],\n ['F11', \"0x44\"],\n ['F12', \"0x45\"],\n ['PRINTSCREEN', \"0x46\"],\n ['SCROLL_LOCK', \"0x47\"],\n ['PAUSE', \"0x48\"],\n ['INSERT', \"0x49\"],\n ['HOME', \"0x4A\"],\n ['PAGE_UP', \"0x4B\"],\n ['DELETE', \"0x4C\"],\n ['END', \"0x4D\"],\n ['PAGE_DOWN', \"0x4E\"],\n ['RIGHT', \"0x4F\"],\n ['LEFT', \"0x50\"],\n ['DOWN', \"0x51\"],\n ['UP', \"0x52\"],\n ['NUM_LOCK', \"0x53\"],\n ['/', \"0x54\"],\n ['*', \"0x55\"],\n ['-', \"0x56\"],\n ['+', \"0x57\"],\n ['ENTER', \"0x58\"],\n ['1', \"0x59\"],\n ['2', \"0x5A\"],\n ['3', \"0x5B\"],\n ['4', \"0x5C\"],\n ['5', \"0x5D\"],\n ['6', \"0x5E\"],\n ['7', \"0x5F\"],\n ['8', \"0x60\"],\n ['9', \"0x61\"],\n ['0', \"0x62\"],\n ['.', \"0x63\"]\n ]), 'op')\n this.setOutput(true);\n }\n};\n\n\nexport const general_key_tuple = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.itemCount_ = 2;\n this.updateShape_();\n this.setOutput(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['generalkey_create_with_item'], this));\n this.setTooltip(Blockly.Msg.GENERALKEY_TUPLE_CREATE_TOOLTIP);\n },\n\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n /**\n * Parse XML to restore the list inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('generalkey_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('generalkey_create_with_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i).connection.connect(connections[i]);\n }\n }\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @private\n * @this Blockly.Block\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n var i = 0;\n while (this.getInput('ADD' + i)) {\n this.removeInput('ADD' + i);\n i++;\n }\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.appendDummyInput('EMPTY')\n .appendField(Blockly.Msg.GENERALKEY_CREATE_EMPTY_TITLE);\n } else {\n for (var i = 0; i < this.itemCount_; i++) {\n var input = this.appendValueInput('ADD' + i);\n if (i == 0) {\n input.appendField(Blockly.Msg.GENERALKEY_CREATE_WITH_INPUT_WITH);\n }\n }\n }\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n};\n\nexport const generalkey_container = {\n /**\n * Mutator block for list container.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GENERAL_KEY);\n this.appendStatementInput('STACK');\n this.setTooltip(Blockly.Msg.GENERALKEY_CONTAINER_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const generalkey_create_with_item = {\n /**\n * Mutator bolck for adding items.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.blockpy_SET_VARIABLES_NAME);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.TUPLE_CREATE_WITH_ITEM_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const analog_mouse_input = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_MOUSE_INPUT);\n this.appendValueInput('key');\n this.appendValueInput('x')\n .appendField(Blockly.Msg.MIXLY_X_CHANGES);\n this.appendValueInput('y')\n .appendField(Blockly.Msg.MIXLY_Y_CHANGES);\n this.appendValueInput('wheel')\n .appendField(Blockly.Msg.MIXLY_WHEEL_CHANGES);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_RELEASE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MICROPYTHON_DISPLAY_YES, \"True\"],\n [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"False\"]\n ]), 'release');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_KEYBOARD_INPUT);\n }\n};\n\nexport const mouse_key = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MOUSE_KEYS)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_SPECIAL_KEY0, \"0x00\"],\n [Blockly.Msg.MIXLY_MOUSE_LEFT_KEY, \"0x01\"],\n [Blockly.Msg.MIXLY_MOUSE_RIGHT_KEY, \"0x02\"],\n [Blockly.Msg.MIXLY_MOUSE_MID_KEY, \"0x04\"]\n ]), 'op')\n this.setOutput(true);\n }\n};\n\nexport const analog_keyboard_str = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_KEYBOARD_INPUT);\n this.appendValueInput('str')\n .appendField(Blockly.Msg.MIXLY_STR_PRINT);\n this.appendValueInput('time')\n .appendField(Blockly.Msg.MIXLY_STR_PRINT_TIME_DELAY);\n this.appendDummyInput()\n .appendField('ms');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};\n\nexport const analog_ble_keyboard_init = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_KEYBOARD);\n this.appendValueInput('kname')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_SYSTEM_DEVICE_NAME);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n}\n\nexport const ble_keyboard_get_mac = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_KEYBOARD + Blockly.Msg.MIXLY_BELONG + Blockly.Msg.MIXLY_ETHERNET_MAC_ADDRESS);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n}\n\nexport const ble_keyboard_connect = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_KEYBOARD + Blockly.Msg.MIXLY_IS_CONNECT);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n}\n\nexport const analog_ble_keyboard_input = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_KEYBOARD)\n .appendField(Blockly.Msg.MIXLY_SEND_KEYBOARD);\n this.appendValueInput('special');\n this.appendValueInput('general');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_RELEASE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MICROPYTHON_DISPLAY_YES, \"True\"],\n [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"False\"]\n ]), 'release');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_KEYBOARD_INPUT);\n }\n};\n\nexport const analog_ble_keyboard_str = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_KEYBOARD);\n this.appendValueInput('str')\n .appendField(Blockly.Msg.MIXLY_SEND_KEYBOARD + Blockly.Msg.MIXLY_STR_PRINT);\n this.appendValueInput('time')\n .appendField(Blockly.Msg.MIXLY_STR_PRINT_TIME_DELAY);\n this.appendDummyInput()\n .appendField('ms');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n}\n\nexport const analog_ble_keyboard_send_battery = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_KEYBOARD);\n this.appendValueInput('battery')\n .appendField(Blockly.Msg.MIXLY_SEND_KEYBOARD + Blockly.Msg.MIXLY_BELONG + Blockly.Msg.MIXLY_BATTERY + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO);\n this.appendDummyInput()\n .appendField('%');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n}\n\nexport const analog_ble_mouse_init = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_MOUSE);\n this.appendValueInput('name')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_SYSTEM_DEVICE_NAME);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n}\n\nexport const ble_mouse_get_mac = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_MOUSE + Blockly.Msg.MIXLY_BELONG + Blockly.Msg.MIXLY_ETHERNET_MAC_ADDRESS);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n}\n\nexport const ble_mouse_connect = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_MOUSE + Blockly.Msg.MIXLY_IS_CONNECT);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n}\n\nexport const analog_ble_mouse_input = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_MOUSE)\n .appendField(Blockly.Msg.MIXLY_SEND + Blockly.Msg.MIXLY_MOUSE_INPUT);\n this.appendValueInput('key');\n this.appendValueInput('x')\n .appendField(Blockly.Msg.MIXLY_X_CHANGES);\n this.appendValueInput('y')\n .appendField(Blockly.Msg.MIXLY_Y_CHANGES);\n this.appendValueInput('wheel')\n .appendField(Blockly.Msg.MIXLY_WHEEL_CHANGES);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_RELEASE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MICROPYTHON_DISPLAY_YES, \"True\"],\n [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"False\"]\n ]), 'release');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_KEYBOARD_INPUT);\n }\n};\n\nexport const analog_ble_mouse_send_battery = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_MOUSE);\n this.appendValueInput('battery')\n .appendField(Blockly.Msg.MIXLY_SEND + Blockly.Msg.MIXLY_MOUSE + Blockly.Msg.MIXLY_BELONG + Blockly.Msg.MIXLY_BATTERY + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO);\n this.appendDummyInput()\n .appendField('%');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n}\n\nexport const analog_ble_keyboard_mouse_init = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.MIXLY_KEYBOARD_AND_MOUSE);\n this.appendValueInput('kname')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_SYSTEM_DEVICE_NAME);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n}\n\nexport const ble_keyboard_mouse_get_mac = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.MIXLY_KEYBOARD_AND_MOUSE + Blockly.Msg.MIXLY_BELONG + Blockly.Msg.MIXLY_ETHERNET_MAC_ADDRESS);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n}\n\nexport const ble_keyboard_mouse_connect = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.MIXLY_KEYBOARD_AND_MOUSE + Blockly.Msg.MIXLY_IS_CONNECT);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n}\n\nexport const analog_ble_keyboard_mouse_send_battery = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.MIXLY_KEYBOARD_AND_MOUSE);\n this.appendValueInput('battery')\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_BATTERY + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO);\n this.appendDummyInput()\n .appendField('%');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n}\n\nexport const analog_ble_keyboard_mouse_input = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.MIXLY_KEYBOARD_AND_MOUSE)\n .appendField(Blockly.Msg.MIXLY_SEND_KEYBOARD);\n this.appendValueInput('special');\n this.appendValueInput('general');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_RELEASE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MICROPYTHON_DISPLAY_YES, \"True\"],\n [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"False\"]\n ]), 'release');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_KEYBOARD_INPUT);\n }\n};\n\nexport const analog_ble_keyboard_mouse_str = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.MIXLY_KEYBOARD_AND_MOUSE);\n this.appendValueInput('str')\n .appendField(Blockly.Msg.MIXLY_SEND_KEYBOARD + Blockly.Msg.MIXLY_STR_PRINT);\n this.appendValueInput('time')\n .appendField(Blockly.Msg.MIXLY_STR_PRINT_TIME_DELAY);\n this.appendDummyInput()\n .appendField('ms');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n}\n\nexport const analog_ble_mouse_keyboard_input = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.MIXLY_KEYBOARD_AND_MOUSE)\n .appendField(Blockly.Msg.MIXLY_SEND + Blockly.Msg.MIXLY_MOUSE_INPUT);\n this.appendValueInput('key');\n this.appendValueInput('x')\n .appendField(Blockly.Msg.MIXLY_X_CHANGES);\n this.appendValueInput('y')\n .appendField(Blockly.Msg.MIXLY_Y_CHANGES);\n this.appendValueInput('wheel')\n .appendField(Blockly.Msg.MIXLY_WHEEL_CHANGES);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_RELEASE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MICROPYTHON_DISPLAY_YES, \"True\"],\n [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"False\"]\n ]), 'release');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_MOUSE_INPUT);\n }\n};\n//educore actuator\nexport const educore_buzzer = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIDI);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n}\n\nexport const educore_buzzer_play_tone = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput(\"buzzer\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_TONE);\n this.appendValueInput('pitch')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_FREQUENCY);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const educore_buzzer_play_tone_time = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput(\"buzzer\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_TONE);\n this.appendValueInput('pitch')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_FREQUENCY);\n this.appendValueInput('time')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_DURATION);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const educore_buzzer_stop = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput(\"buzzer\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Turn_off_display);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const educore_rgb_light = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_RGB);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n}\n\nexport const educore_neopixel_rgb = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput(\"rgb\");\n this.appendValueInput(\"_LED_\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_NUM);\n this.appendValueInput(\"RVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_R);\n this.appendValueInput(\"GVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_G);\n this.appendValueInput(\"BVALUE\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_B);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n // const boardKey = Boards.getSelectedBoardKey();\n // switch (boardKey) {\n // case 'micropython:esp32c3:mixgo_cc':\n // this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOCC);\n // break;\n // case 'micropython:esp32s2:mixgo_ce':\n // this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOCC);\n // break;\n // case 'micropython:esp32c3:mixgo_me':\n // this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOME);\n // break;\n // case 'micropython:esp32:mPython':\n // this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MPYTHON);\n // break;\n // default:\n // this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MIXGOME);\n // }\n }\n};\n\nexport const educore_neopixel_clear = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput(\"rgb\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Turn_off_display)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n }\n};\n\nexport const educore_ble_sensor_init = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput(\"name\")\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_BLUETOOTH+ Blockly.Msg.MIXLY_MICROBIT_JS_SYSTEM_DEVICE_NAME + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_AS);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const educore_ble_sensor_connected = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput(\"SUB\")\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_BE_CONNETCED)\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const educore_ble_keyboard_input = {\n init: function () {\n this.setColour(ACTUATOR_ONBOARD_HUE);\n this.appendValueInput(\"SUB\")\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_KEYBOARD);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SEND_KEYBOARD);\n this.appendValueInput('general');\n // this.appendDummyInput()\n // .appendField(Blockly.Msg.MIXLY_RELEASE)\n // .appendField(new Blockly.FieldDropdown([\n // [Blockly.Msg.MICROPYTHON_DISPLAY_YES, \"True\"],\n // [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"False\"]\n // ]), 'release');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};","import * as Blockly from 'blockly/core';\n\nconst AI_HUE = 205;\n\nexport const MICROPYTHON_AI_client = {\n init: function () {\n this.setColour(AI_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_AipSpeech_asr, \"ASR\"],\n [Blockly.Msg.MIXLY_AI_UNIT, \"UNIT\"]\n ]), 'CTYPE')\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_Client)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput('API_KEY')\n .appendField('API_KEY')\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput('SECRET_KEY')\n .appendField('SECRET_KEY')\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.setInputsInline(false);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n }\n};\n\nexport const MICROPYTHON_AI_Speech_unit = { // AI_TYPE_FUNC\n init: function () {\n this.setColour(AI_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_AI_UNIT)\n .appendField(Blockly.Msg.MIXLY_Client)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput('ID')\n .appendField('ID')\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput('STR')\n .appendField(Blockly.Msg.OLED_STRING)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const MICROPYTHON_AI_Speech_asr = { // AI_TYPE_FUNC\n init: function () {\n this.setColour(AI_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_AipSpeech_asr)\n .appendField(Blockly.Msg.MIXLY_Client)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput('FILE')\n .appendField(Blockly.Msg.MIXPY_AI_AUDIO_TIME)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_LANGUAGE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_AI_LANGUAGE_CHINESE, \"1537\"],\n [Blockly.Msg.MIXLY_AI_LANGUAGE_ENGLISH, \"1737\"],\n [Blockly.Msg.MIXLY_AI_LANGUAGE_CANTONESE, \"1637\"]\n ]), 'LANGUAGE')\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\n","import * as Blockly from 'blockly/core';\n\nconst AI_SENSOR_HUE = '#90A244'; //'#9e77c9'//40;\n\n\nexport const ai_sensor_use_uart_init = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"uart\")\n .appendField(new Blockly.FieldDropdown([\n [\"uart1\", \"uart1\"],\n [\"uart2\", \"uart2\"]\n ]), \"key\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO + 'MixGo AI' + Blockly.Msg.MSG.catSensor)\n\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n }\n};\n\nexport const ai_sensor_qrcode = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_QR_CODE + Blockly.Msg.MIXPY_OBJECT)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.OLED_STRING, \"info1\"],\n [Blockly.Msg.MIXLY_POSITION_XY + \"-xywh\", \"rect\"],\n [\"x\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[0]\"],\n [\"y\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[1]\"],\n [\"w\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[2]\"],\n [\"h\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[3]\"],\n [Blockly.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, \"xc\"],\n [Blockly.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, \"yc\"]\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_QR_CODE_TOOLTIP);\n }\n};\n\nexport const ai_sensor_qrcode_lite = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_QR_CODE + Blockly.Msg.MIXPY_OBJECT, \"qrcode\"],\n [Blockly.Msg.MIXLY_BAR_CODE + Blockly.Msg.MIXPY_OBJECT, \"barcode\"],\n [Blockly.Msg.MIXLY_TAG + Blockly.Msg.MIXPY_OBJECT, \"apriltag\"]\n ]), \"TYPE\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ANALYSIS_RESULT);\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip();\n }\n};\n\nexport const ai_sensor_find_qrcodes = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_QR_CODE_RECOGNTITION);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + \"[qrcode]\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_QR_CODE_RECOGNTITION_TOOLTIP);\n }\n};\n\nexport const ai_sensor_config = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendValueInput(\"RX\")\n .appendField(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_ETHERNET_CLINET_PORT)\n .appendField(\"RX#\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"TX\")\n .appendField(\"TX#\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendDummyInput()\n .appendField(Blockly.Msg.SOFT_RESET + Blockly.Msg.MIXLY_ESP32_RGB_WRITE)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, 'True'], [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, 'False']]), 'mode')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_CONFIG_TOOLTIP);\n }\n};\n\nexport const ai_sensor_rgb = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendValueInput(\"led1\")\n .appendField(Blockly.Msg.MIXLY_SETTING)\n .appendField(\"RGB1\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"led2\")\n .appendField(\"RGB2\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_CONFIG_TOOLTIP);\n }\n};\n\nexport const ai_sensor_barcode = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_BAR_CODE + Blockly.Msg.MIXPY_OBJECT)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.OLED_STRING, \"info1\"],\n [Blockly.Msg.MIXLY_POSITION_XY + \"-xywh\", \"rect\"],\n [\"x\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[0]\"],\n [\"y\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[1]\"],\n [\"w\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[2]\"],\n [\"h\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[3]\"],\n [Blockly.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, \"xc\"],\n [Blockly.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, \"yc\"]\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_BAR_CODE_TOOLTIP);\n }\n};\n\nexport const ai_sensor_find_barcodes = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BAR_CODE_RECOGNTITION);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + \"[barcode]\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_BAR_CODE_RECOGNTITION_TOOLTIP);\n }\n};\n\nexport const ai_sensor_tag = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_TAG + Blockly.Msg.MIXPY_OBJECT)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.OLED_STRING, \"info1\"],\n [Blockly.Msg.blockpy_turtle_rotate + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, \"info2\"],\n [Blockly.Msg.MIXLY_POSITION_XY + \"-xywh\", \"rect\"],\n [\"x\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[0]\"],\n [\"y\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[1]\"],\n [\"w\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[2]\"],\n [\"h\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[3]\"],\n [Blockly.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, \"xc\"],\n [Blockly.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, \"yc\"]\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_TAG_TOOLTIP);\n }\n};\n\nexport const ai_sensor_find_tags = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_TAG_RECOGNTITION);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + \"[tag]\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_TAG_RECOGNTITION_TOOLTIP);\n }\n};\n\nexport const ai_sensor_line = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_LINE + Blockly.Msg.MIXPY_OBJECT)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_LINE_ANGLE, \"info1\"],\n [Blockly.Msg.MIXLY_POSITION_XY + \"-x1x2y1y2\", \"rect\"],\n [\"x1\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[0]\"],\n [\"x2\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[1]\"],\n [\"y1\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[2]\"],\n [\"y2\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[3]\"]\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_LINE_TOOLTIP);\n }\n};\n\nexport const ai_sensor_find_lines = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_LINE_RECOGNTITION);\n this.appendValueInput(\"VAR1\")\n .appendField(Blockly.Msg.MIXLY_ESP32_THRESHOLD)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR2\")\n .appendField(Blockly.Msg.MIXLY_LINE_RECOGNTITION_ANGLE)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR3\")\n .appendField(Blockly.Msg.MIXLY_LINE_RECOGNTITION_SLOPE)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + \"[line]\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_LINE_RECOGNTITION_TOOLTIP);\n }\n};\n\nexport const ai_sensor_circle = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_CIRCLE + Blockly.Msg.MIXPY_OBJECT)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_CIRCLE_AREA, \"info1\"],\n [Blockly.Msg.MIXLY_POSITION_XY + \"-xywh\", \"rect\"],\n [\"x\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[0]\"],\n [\"y\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[1]\"],\n [\"w\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[2]\"],\n [\"h\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[3]\"],\n [Blockly.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, \"xc\"],\n [Blockly.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, \"yc\"]\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_CIRCLE_TOOLTIP);\n }\n};\n\nexport const ai_sensor_find_circles = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_CIRCLE_RECOGNTITION);\n this.appendValueInput(\"VAR1\")\n .appendField(Blockly.Msg.MIXLY_ESP32_THRESHOLD)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR2\")\n .appendField(Blockly.Msg.MIXLY_CIRCLE_RECOGNTITION_MIN)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR3\")\n .appendField(Blockly.Msg.MIXLY_CIRCLE_RECOGNTITION_MAX)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + \"[circle]\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_CIRCLE_RECOGNTITION_TOOLTIP);\n }\n};\n\nexport const ai_sensor_rect = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_RECT + Blockly.Msg.MIXPY_OBJECT)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_CIRCLE_AREA, \"info1\"],\n [Blockly.Msg.MIXLY_POSITION_XY + \"-xywh\", \"rect\"],\n [\"x\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[0]\"],\n [\"y\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[1]\"],\n [\"w\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[2]\"],\n [\"h\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[3]\"],\n [Blockly.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, \"xc\"],\n [Blockly.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, \"yc\"]\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_RECT_TOOLTIP);\n }\n};\n\nexport const ai_sensor_find_rects = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_RECT_RECOGNTITION);\n this.appendValueInput(\"VAR1\")\n .appendField(Blockly.Msg.MIXLY_ESP32_THRESHOLD)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + \"[rect]\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_COLOR_RECOGNTITION_TOOLTIP);\n }\n};\n\nexport const ai_sensor_color = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.HTML_COLOUR + Blockly.Msg.MIXPY_OBJECT)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_COLOR_ANALYSIS);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n ['RGB' + Blockly.Msg.HTML_COLOUR, \"[0]\"],\n ['LAB' + Blockly.Msg.MIXLY_COLOR_LAB, \"[1]\"]\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_COLOR_TOOLTIP);\n }\n};\n\nexport const ai_sensor_find_colors = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_COLOR_RECOGNTITION);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + \"color\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_COLOR_RECOGNTITION_TOOLTIP);\n }\n};\n\nexport const ai_sensor_color_chases_result = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_COLOR_CHASE + Blockly.Msg.MIXPY_OBJECT)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_COLOR_CHASE_ANALYSIS);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_CIRCLE_AREA, \"info1\"],\n [Blockly.Msg.MIXLY_POSITION_XY + \"-xywh\", \"rect\"],\n [\"x\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[0]\"],\n [\"y\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[1]\"],\n [\"w\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[2]\"],\n [\"h\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[3]\"],\n [Blockly.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, \"xc\"],\n [Blockly.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, \"yc\"]\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_CIRCLE_TOOLTIP);\n }\n};\n\nexport const ai_sensor_color_chases = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_COLOR_CHASE);\n this.appendValueInput(\"VAR1\")\n .appendField('LAB' + Blockly.Msg.MIXLY_COLOR_LAB)\n\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR2\")\n .appendField(Blockly.Msg.MIXLY_ESP32_THRESHOLD)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR3\")\n .appendField(Blockly.Msg.MIXLY_COLOR_CHASE_MERGE)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + \"[colors]\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_CIRCLE_RECOGNTITION_TOOLTIP);\n }\n};\n\nexport const ai_sensor_ailocal_train = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_LOCAL_TRAIN);\n this.appendValueInput(\"VAR1\")\n .appendField(Blockly.Msg.MIXLY_OBJECT_LIST)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR2\")\n .appendField(Blockly.Msg.MICROPYTHON_HUSKYLENS_SAVE_AS + Blockly.Msg.MIXLY_MODEL_NAME)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR3\")\n .appendField(Blockly.Msg.MIXLY_TRAIN_TIME)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR4\")\n .appendField(Blockly.Msg.MIXLY_AipNlp_Topic_Title)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_LOCAL_TRAIN_TOOLTIP);\n }\n};\n\nexport const ai_sensor_ailocal_class = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_LOCAL_CLASS);\n this.appendValueInput(\"VAR1\")\n .appendField(Blockly.Msg.MIXLY_OBJECT_LIST)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR2\")\n .appendField(Blockly.Msg.MIXLY_MODEL_NAME)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR4\")\n .appendField(Blockly.Msg.MIXLY_AipNlp_Topic_Title)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + \"[objects]\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_MODEL_NAME_TOOLTIP);\n }\n};\n\nexport const ai_sensor_ailocal_class_result = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_LOCAL_CLASS + Blockly.Msg.MIXPY_OBJECT)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_COLOR_CHASE_ANALYSIS);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n ['ID', \"info1\"],\n [Blockly.Msg.MIXLY_CONFIDENCE_DEGREE, \"info2\"],\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_LOCAL_CLASS_TOOLTIP);\n }\n};\n\nexport const ai_sensor_audio_record = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MUSIC_RECORD);\n this.appendValueInput(\"VAR1\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR2\")\n .appendField(Blockly.Msg.MIXPY_AI_AUDIO_TIME)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_MUSIC_RECORD_TOOLTIP);\n }\n};\n\nexport const ai_sensor_audio_play = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MUSIC_PLAY);\n this.appendValueInput(\"VAR1\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR2\")\n .appendField(Blockly.Msg.MIXLY_MP3_VOL)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendDummyInput()\n .appendField('%')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n\n }\n};\n\nexport const ai_sensor_yolo_recognize = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_YOLO_RECOGNIZE);\n this.appendValueInput(\"VAR1\")\n .appendField(Blockly.Msg.MIXLY_ANCHOR)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR2\")\n .appendField(Blockly.Msg.MIXLY_MODEL_PATH)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR4\")\n .appendField(Blockly.Msg.MIXLY_AipNlp_Topic_Title)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + \"[objects]\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_YOLO_RECOGNIZE_TOOLTIP);\n }\n};\n\nexport const ai_sensor_yolo_recognize_result = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_YOLO_RECOGNIZE + Blockly.Msg.MIXPY_OBJECT)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_COLOR_CHASE_ANALYSIS);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n ['ID', \"info1\"],\n [Blockly.Msg.MIXLY_CONFIDENCE_DEGREE, \"info2\"],\n [Blockly.Msg.MIXLY_POSITION_XY + \"-xywh\", \"rect\"],\n [\"x\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[0]\"],\n [\"y\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[1]\"],\n [\"w\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[2]\"],\n [\"h\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[3]\"],\n [Blockly.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, \"xc\"],\n [Blockly.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, \"yc\"]\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_YOLO_RECOGNIZE_RESULT_TOOLTIP);\n }\n};\n\nexport const ai_sensor_asr_recognize = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_AipSpeech_asr);\n this.appendValueInput(\"VAR1\")\n .appendField(Blockly.Msg.MIXLY_AI_SENSOR_ASR_RECOGNISE_CORPUS)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"VAR2\")\n .appendField(Blockly.Msg.MIXLY_ESP32_THRESHOLD)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_ASR_RECOGNISE_TOOLTIP);\n }\n};\n\nexport const ai_sensor_licenseplate = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_LICENSEPLATE + Blockly.Msg.MIXPY_OBJECT)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n ['ID', \"info1\"],\n [Blockly.Msg.MIXLY_POSITION_XY + \"-xywh\", \"rect\"],\n [\"x\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[0]\"],\n [\"y\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[1]\"],\n [\"w\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[2]\"],\n [\"h\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[3]\"]\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_LICENSEPLATE_TOOLTIP);\n }\n};\n\nexport const ai_sensor_find_licenseplates = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_AipOcr_licensePlate);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + \"[licensePlate]\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_LICENSEPLATE_RECOGNTITION_TOOLTIP);\n }\n};\n\nexport const ai_sensor_face = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_FACE + Blockly.Msg.MIXPY_OBJECT)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [\"ID\", \"info1\"],\n [Blockly.Msg.MIXLY_CONFIDENCE_DEGREE, \"info2\"],\n [Blockly.Msg.MIXLY_POSITION_XY + \"-xywh\", \"rect\"],\n [\"x\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[0]\"],\n [\"y\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[1]\"],\n [\"w\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[2]\"],\n [\"h\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[3]\"]\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_FACE_TOOLTIP);\n }\n};\n\nexport const ai_sensor_classifier_faces = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_AipFace);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + \"[face]\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_BAR_FACE_CLASSIFIER_TOOLTIP);\n }\n};\n\nexport const ai_sensor_20object = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_20OBJECTS + Blockly.Msg.MIXPY_OBJECT)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n ['ID', \"info1\"],\n [Blockly.Msg.MIXLY_CONFIDENCE_DEGREE, \"info2\"],\n [Blockly.Msg.MIXLY_POSITION_XY + \"-xywh\", \"rect\"],\n [\"x\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[0]\"],\n [\"y\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[1]\"],\n [\"w\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[2]\"],\n [\"h\" + Blockly.Msg.MIXLY_POSITION_XY, \"rect[3]\"]\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_20OBJECTS_TOOLTIP);\n }\n};\n\nexport const ai_sensor_find_20objects = {\n init: function () {\n this.setColour(AI_SENSOR_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_FIND_20OBJECTS);\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + \"[20objects]\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_BAR_FIND_20OBJECTS_TOOLTIP);\n }\n};","import * as Blockly from 'blockly/core';\n\n/******************* Blynk *****************/\nconst BLYNK_HUE = '#2FAD7A';\n\n\n// 自定义终端部件 Terminal Blynk\nexport const mpython_blynk_terminal_widget_vpin = {\n init: function () {\n this.jsonInit({\n \"inputsInline\": true,\n \"nextStatement\": null,\n \"previousStatement\": null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNK_TERMINAL_WIDGET_VPIN_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNK_TERMINAL_WIDGET_VPIN_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_BLYNK_TERMINAL_WIDGET_VPIN_MESSAGE0,\n \"args0\": [\n {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"virtual_pin\"\n }\n ]\n });\n }\n};\n\n// 同步虚拟管脚的状态 Blynk\nexport const mpython_blynk_sync_virtual = {\n init: function () {\n this.jsonInit({\n \"inputsInline\": true,\n \"nextStatement\": null,\n \"previousStatement\": null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNK_SYNC_VIRTUAL_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNK_SYNC_VIRTUAL_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_BLYNK_SYNC_VIRTUAL_MESSAGE0,\n \"args0\": [\n {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"virtual_pin\"\n }\n ]\n });\n }\n};\n\n// 斷開连接 Blynk\nexport const mpython_blynk_on_disconnected = {\n init: function () {\n this.jsonInit({\n \"inputsInline\": true,\n // \"nextStatement\": null,\n // \"previousStatement\": null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNK_ON_DISCONNECTED_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNK_ON_DISCONNECTED_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_BLYNK_ON_DISCONNECTED_MESSAGE0\n });\n this.appendStatementInput('DO')\n .appendField(Blockly.CONTROLS_REPEAT_INPUT_DO);\n }\n};\n\n// 连接上 Blynk\nexport const mpython_blynk_on_connected = {\n init: function () {\n this.jsonInit({\n \"inputsInline\": true,\n // \"nextStatement\": null,\n // \"previousStatement\": null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNK_ON_CONNECTED_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNK_ON_CONNECTED_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_BLYNK_ON_CONNECTED_MESSAGE0\n });\n this.appendStatementInput('DO')\n .appendField(Blockly.CONTROLS_REPEAT_INPUT_DO);\n }\n};\n\n// Blynk 定时器的进程生效并运行\nexport const mpython_blynktimer_run = {\n init: function () {\n this.jsonInit({\n \"inputsInline\": true,\n \"nextStatement\": null,\n \"previousStatement\": null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNKTIMER_RUN_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNKTIMER_RUN_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_BLYNKTIMER_RUN_MESSAGE0\n });\n }\n};\n\n// Blynk 进程生效并运行\nexport const mpython_blynk_run = {\n init: function () {\n this.jsonInit({\n \"inputsInline\": true,\n \"nextStatement\": null,\n \"previousStatement\": null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNK_RUN_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNK_RUN_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_BLYNK_RUN_MESSAGE0\n });\n }\n};\n\n// Blynk APP 显示通知\nexport const mpython_blynk_app_notify = {\n init: function () {\n this.jsonInit({\n \"inputsInline\": true,\n \"nextStatement\": null,\n \"previousStatement\": null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNK_APP_NOTIFY_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNK_APP_NOTIFY_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_BLYNK_APP_NOTIFY_MESSAGE0,\n \"args0\": [\n {\n \"check\": String,\n \"type\": \"input_value\",\n \"name\": \"notification\"\n }\n ]\n });\n }\n};\n\n// 停止 Blynk 定时器 %1\nexport const mpython_blynk_stop_timers = {\n init: function () {\n this.jsonInit({\n \"inputsInline\": true,\n \"nextStatement\": null,\n \"previousStatement\": null,\n // \"output\": null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNK_STOP_TIMERS_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNKTIMER_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_BLYNK_STOP_TIMERS_MESSAGE0,\n \"args0\": [\n {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"timer_num\"\n }\n ]\n });\n }\n};\n\n// 给虚拟管脚添加 属性 %1 值 %2\nexport const mpython_blynk_set_property = {\n init: function () {\n this.jsonInit({\n \"inputsInline\": true,\n \"nextStatement\": null,\n \"previousStatement\": null,\n // \"output\": null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNK_SET_PROPERTY_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNK_SET_PROPERTY_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_BLYNK_SET_PROPERTY_MESSAGE0,\n \"args0\": [\n {\n \"check\": String,\n \"type\": \"input_value\",\n \"name\": \"attribute_name\"\n }\n ,\n {\n // \"check\":String,\n \"type\": \"input_value\",\n \"name\": \"attribute_value\"\n }\n ]\n });\n }\n};\n\n// 向 %1 发邮件 主题 %2 正文 %3\nexport const mpython_blynk_email = {\n init: function () {\n this.jsonInit({\n \"inputsInline\": true,\n \"nextStatement\": null,\n \"previousStatement\": null,\n // \"output\": null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNK_EMAIL_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNK_EMAIL_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_BLYNK_EMAIL_MESSAGE0,\n \"args0\": [\n {\n \"check\": String,\n \"type\": \"input_value\",\n \"name\": \"TargetEmail\"\n }\n ,\n {\n \"check\": String,\n \"type\": \"input_value\",\n \"name\": \"subject\"\n }\n ,\n {\n \"check\": String,\n \"type\": \"input_value\",\n \"name\": \"body\"\n }\n ]\n });\n }\n};\n\n// 可用的 Blynk 定时器\nexport const mpython_blynk_get_timers = {\n init: function () {\n this.jsonInit({\n \"inputsInline\": true,\n // \"nextStatement\": null,\n // \"previousStatement\": null,\n \"output\": null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNK_GET_TIMERS_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNK_GET_TIMERS_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_BLYNK_GET_TIMERS_MESSAGE0,\n });\n }\n};\n\n//blynk定时器\nexport const mpython_blynktimer = {\n init: function () {\n this.jsonInit({\n \"message0\": Blockly.Msg.MPYTHON_BLYNKTIMER_MESSAGE0,\n // \"nextStatement\": null,\n // \"previousStatement\": null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNKTIMER_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNKTIMER_TOOLTIP,\n \"args0\": [\n {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"Num\"\n }\n ,\n {\n \"options\": [\n [Blockly.Msg.MIXLY_PYTHON_PERIODIC, 'False'],\n [Blockly.Msg.MIXLY_PYTHON_ONE_SHOT, 'True']\n ],\n \"type\": \"field_dropdown\",\n \"name\": \"Timer_mode\"\n }\n ,\n {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"period\"\n }\n ]\n });\n this.appendStatementInput('DO')\n .appendField(Blockly.CONTROLS_REPEAT_INPUT_DO);\n }\n};\n\n// 发送数据 %1 到 Bylnk APP 的虚拟管脚 %2\nexport const mpython_blynk_sensor_data_to_app = {\n init: function () {\n this.jsonInit({\n \"inputsInline\": true,\n \"nextStatement\": null,\n \"previousStatement\": null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNK_SENSOR_DATA_TO_APP_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNK_SENSOR_DATA_TO_APP_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_BLYNK_SENSOR_DATA_TO_APP_MESSAGE0,\n \"args0\": [\n {\n \"type\": \"input_value\",\n \"name\": \"sensor_data\"\n }\n ,\n {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"virtual_pin\"\n }\n ]\n });\n }\n};\n\n// 从 Bylnk APP 获取虚拟管脚 %1 的值\nexport const mpython_blynk_app_data = {\n init: function () {\n this.jsonInit({\n \"inputsInline\": true,\n // \"nextStatement\": null,\n // \"previousStatement\": null,\n // \"output\":null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNK_APP_DATA_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNK_SENSOR_DATA_TO_APP_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_BLYNK_APP_DATA_MESSAGE0,\n \"args0\": [\n {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"virtual_pin\"\n }\n ,\n {\n \"type\": \"input_value\",\n \"name\": \"virtual_pin_val\"\n }\n ]\n });\n this.appendStatementInput('DO')\n .appendField(Blockly.CONTROLS_REPEAT_INPUT_DO);\n }\n};\n\n// Bylnk设置\nexport const mpython_blynk_setup = {\n init: function () {\n this.jsonInit({\n // \"inputsInline\": true,\n \"nextStatement\": null,\n \"previousStatement\": null,\n \"colour\": BLYNK_HUE,\n \"helpUrl\": Blockly.Msg.MPYTHON_BLYNK_SETUP_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_BLYNK_SETUP_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_BLYNK_SETUP_MESSAGE0,\n \"args0\": [\n {\n \"type\": \"input_dummy\"\n },\n {\n \"check\": String,\n \"type\": \"input_value\",\n \"name\": \"server\"\n },\n {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"port\"\n },\n {\n \"check\": String,\n \"type\": \"input_value\",\n \"name\": \"auth\"\n }\n ]\n });\n }\n};\n","import * as Blockly from 'blockly/core';\n\nconst CCG1_HUE = 40;\n\nexport const cc_g1_init = {\n init: function () {\n this.setColour(CCG1_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + \" CC_G1\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var TOOLTIPS = {\n \"temperature\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,\n \"relative_humidity\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP\n };\n return TOOLTIPS[mode]\n });\n }\n};\n\nexport const cc_g1_read_bat = {\n init: function () {\n this.setColour(CCG1_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GET_BATTERY);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const cc_g1_read_joystick = {\n init: function () {\n this.setColour(CCG1_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET_JOYSTICK)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"[0]\"],\n [\"y\", \"[1]\"],\n [\"(x,y)\", \"\"]\n ]), \"VAR\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_DATA);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const cc_g1_read_key = {\n init: function () {\n this.setColour(CCG1_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .appendField(new Blockly.FieldDropdown([\n [\"A\", \"0\"],\n [\"B\", \"1\"],\n [\"C\", \"2\"],\n [\"D\", \"3\"],\n [\"POWER\", \"4\"],\n [\"SELECT\", \"5\"]\n ]), \"VAR\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.WHETHER_IS_PRESSED);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const cc_g1_turnoff = {\n init: function () {\n this.setColour(CCG1_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_HANDLE_SHUTDOWN);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n","import * as Blockly from 'blockly/core';\n\nconst MEGO_HUE = 100;\n\n//LED\nexport const ce_go_light_number = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXGO_LEFT_FRONT + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, \"GLED[0]\"],\n [Blockly.Msg.MIXGO_RIGHT_FRONT + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, \"GLED[1]\"],\n [Blockly.Msg.MIXGO_LEFT_BACK + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, \"GLED[3]\"],\n [Blockly.Msg.MIXGO_RIGHT_BACK + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, \"GLED[2]\"],\n [Blockly.Msg.MIXGO_LEFT_FRONT + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, \"RLED[0]\"],\n [Blockly.Msg.MIXGO_RIGHT_FRONT + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, \"RLED[1]\"],\n [Blockly.Msg.MIXGO_LEFT_BACK + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, \"RLED[3]\"],\n [Blockly.Msg.MIXGO_RIGHT_BACK + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, \"RLED[2]\"],\n [Blockly.Msg.ME_GO_LIGHT_HEADLIGHT, \"WLED\"]\n ]), 'op')\n this.setOutput(true);\n }\n};\n\nexport const ce_go_led_bright = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING);\n this.appendValueInput('led')\n .appendField('ME GO')\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_SETONOFF);\n }\n};\n\nexport const ce_go_get_led_bright = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);\n this.appendValueInput('led')\n .appendField('ME GO')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BRIGHTNESS)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);\n }\n};\n\nexport const ce_go_get_led_state = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);\n this.appendValueInput('led')\n .appendField('ME GO')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);\n }\n};\n\nexport const ce_go_led_brightness = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING);\n this.appendValueInput('led')\n .appendField('ME GO')\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_BRIGHTNESS)\n this.appendDummyInput(\"\")\n .appendField(\"%\")\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_BUILDIN_LED + Blockly.Msg.MIXLY_BRIGHTNESS + '(0-10)');\n }\n};\n\n\nexport const ce_go_stepper_keep = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(\"ME GO\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.blockpy_forward, \"F\"],\n [Blockly.Msg.blockpy_backward, \"B\"],\n [Blockly.Msg.blockpy_left, \"L\"],\n [Blockly.Msg.blockpy_right, \"R\"]\n ]), \"VAR\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);\n this.appendDummyInput(\"\")\n .appendField(\"%\")\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const ce_go_stepper_stop = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(\"ME GO\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MOTOR_P, \"P\"],\n [Blockly.Msg.MOTOR_N, \"N\"]\n ]), \"VAR\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const ce_go_dc_motor = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(\"ME GO\")\n .appendField(Blockly.Msg.MOTOR_DC)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLYCAR_WHEEL_LEFT, \"0\"],\n [Blockly.Msg.MIXLYCAR_WHEEL_RIGHT, \"1\"],\n [Blockly.Msg.ME_GO_MOTOR_EXTERN, \"2\"]\n ]), \"wheel\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.ROTATION_FORWARD, \"CW\"],\n [Blockly.Msg.ROTATION_BACKWARD, \"CCW\"],\n [Blockly.Msg.MOTOR_P, \"P\"],\n [Blockly.Msg.MOTOR_N, \"N\"]\n ]), \"direction\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);\n this.appendDummyInput(\"\")\n .appendField(\"%\")\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const ce_go_hall_attachInterrupt = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_ESP32_INTERRUPT)\n .appendField(Blockly.Msg.ME_GO_HALL_SENSOR)\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, \"A\"], [Blockly.Msg.TEXT_TRIM_RIGHT, \"B\"]]), \"mode\");\n this.appendValueInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};\n\nexport const ce_go_hall_initialize = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.ME_GO_HALL_SENSOR)\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, \"A\"], [Blockly.Msg.TEXT_TRIM_RIGHT, \"B\"]]), \"mode\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP)\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([['turns', \"turns\"], ['distance', \"distance\"], ['turns,distance', 'all']]), \"args\");\n this.appendValueInput('num')\n .setCheck(Number)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};\n\nexport const ce_go_hall_data = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.ME_GO_HALL_SENSOR)\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, \"A\"], [Blockly.Msg.TEXT_TRIM_RIGHT, \"B\"]]), \"mode\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([['turns', \"turns\"], ['distance', \"distance\"], ['speed', 'speed']]), \"args\");\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const ce_go_pin_near_line = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.TEXT_TRIM_LEFT, \"[0]\"],\n [Blockly.Msg.MIXGO_LEFT_MID, \"[1]\"],\n [Blockly.Msg.MIXGO_RIGHT_MID, \"[2]\"],\n [Blockly.Msg.TEXT_TRIM_RIGHT, \"[3]\"],\n [Blockly.Msg.MIXLY_ALL, \"\"]\n ]), \"key\")\n .appendField(Blockly.Msg.MIXGO_LINE_SENSOR_VAL);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(function () {\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;\n return mode0 + mode1\n });\n }\n};\n\nexport const ce_go_pin_near = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXGO_LEFT_FRONT, \"[0]\"],\n [Blockly.Msg.MIXGO_RIGHT_FRONT, \"[1]\"],\n [Blockly.Msg.MIXGO_LEFT_BACK, \"[3]\"],\n [Blockly.Msg.MIXGO_RIGHT_BACK, \"[2]\"],\n [Blockly.Msg.MIXLY_ALL, \"\"]\n ]), \"key\")\n .appendField(Blockly.Msg.MIXGO_PROXIMITY_SENSOR);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(function () {\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;\n return mode0 + mode1\n });\n }\n};\n\nexport const ce_go_pin_near_state_change = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXGO_CAR_SENSOR_ONBOARD_CHANGE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_ME_GO_CAR_SENSOR_ONBOARD_AUTO_CHANGE, \"AS\"],\n [Blockly.Msg.MIXLY_MIXGO_CAR_USE_LINE_ONLY, \"LP\"],\n [Blockly.Msg.MIXLY_MIXGO_CAR_USE_PROXIMITY_ONLY, \"OA\"],\n [Blockly.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_ONLY, \"LS\"],\n [Blockly.Msg.ME_GO_SENSOR_MODE_OFF, \"CL\"]\n ]), \"key\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_mixgome_eulerangles = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GET_GESTURE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.ME_GO_PITCH, '[0]'],\n [Blockly.Msg.ME_GO_ROLL, '[1]'],\n [Blockly.Msg.ME_GO_PITCH + ', ' + Blockly.Msg.ME_GO_ROLL, '']\n ]), 'angle');\n // this.appendDummyInput(\"\")\n // .appendField(Blockly.Msg.BOARD_DIRECTION)\n // .appendField(new Blockly.FieldDropdown([\n // [Blockly.Msg.OLED_VER,'True'],\n // [Blockly.Msg.OLED_HOR,'False'],\n // ]),'dir');\n this.appendDummyInput(\"\")\n this.setOutput(true, Number);\n this.setInputsInline(true);\n\n }\n};\n\nexport const ce_go_pin_light = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.TEXT_TRIM_LEFT, \"[0]\"],\n [Blockly.Msg.MIXGO_LEFT_MID, \"[1]\"],\n [Blockly.Msg.MIXGO_RIGHT_MID, \"[2]\"],\n [Blockly.Msg.TEXT_TRIM_RIGHT, \"[3]\"],\n [Blockly.Msg.MIXLY_ALL, \"\"]\n ]), \"key\")\n .appendField(Blockly.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_SENSOR);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(function () {\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_SENSOR;\n return mode0 + mode1\n });\n }\n};\n\n//educore car\nexport const educore_car = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_CAR);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n}\n\nexport const educore_car_stepper_keep = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendValueInput('car');\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.blockpy_forward, \"forward\"],\n // [Blockly.Msg.blockpy_backward, \"B\"],\n [Blockly.Msg.blockpy_left, \"turn_left\"],\n [Blockly.Msg.blockpy_right, \"turn_right\"]\n ]), \"VAR\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_SPEED);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const educore_car_stepper_stop = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendValueInput('car');\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MOTOR_P, \"stop\"]\n // [Blockly.Msg.MOTOR_N, \"N\"]\n ]), \"VAR\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const educore_car_pin_near_line = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendValueInput('car');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.TEXT_TRIM_LEFT, \"1\"],\n // [Blockly.Msg.MIXGO_LEFT_MID, \"[1]\"],\n // [Blockly.Msg.MIXGO_RIGHT_MID, \"[2]\"],\n [Blockly.Msg.TEXT_TRIM_RIGHT, \"2\"]\n // [Blockly.Msg.MIXLY_ALL, \"\"]\n ]), \"key\")\n .appendField(Blockly.Msg.MIXGO_LINE_SENSOR_VAL);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const educore_car_pin_near = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendValueInput('car');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET+Blockly.Msg.MIXGO_PROXIMITY_SENSOR);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};","import * as Blockly from 'blockly/core';\n\nconst COMMUNICATE_HUE = 140\n\nexport const communicate_i2c_onboard = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_LED_ON_BOARD + \"I2C\");\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const communicate_spi_onboard = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_LED_ON_BOARD + \"SPI\");\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const communicate_i2c_init = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('SUB')\n .appendField(\"I2C \" + Blockly.Msg.MIXLY_SETUP)\n .setCheck(\"var\");\n\n this.appendValueInput(\"TX\", Number)\n .appendField(\"SCL\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"RX\", Number)\n .appendField(\"SDA\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput('freq')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_FREQUENCY)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_I2C_INIT);\n }\n};\n\nexport const communicate_i2c_read = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .appendField(\"I2C\")\n .setCheck(\"var\");\n this.appendValueInput('address')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_RNUMBER);\n this.appendValueInput('data')\n .setCheck(Number)\n .appendField(Blockly.Msg.LANG_MATH_BYTE);\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_READ);\n }\n}\n\nexport const communicate_i2c_write = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .appendField(\"I2C\")\n .setCheck(\"var\");\n this.appendValueInput('address')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_WNUMBER);\n this.appendValueInput('data')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_VALUE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_WRITE);\n }\n}\n\nexport const communicate_i2c_scan = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .appendField(\"I2C\")\n .setCheck(\"var\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_I2C_SCAN1 + Blockly.Msg.MIXLY_ESP32_I2C_SCAN2)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_I2C_SCAN);\n }\n}\n\nexport const communicate_spi_init = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField(Blockly.Msg.MIXLY_ESP32_SPI_INIT);\n this.appendValueInput('freq')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_SERIAL_BEGIN);\n this.appendValueInput('sck')\n .setCheck(Number)\n .appendField('SCK');\n this.appendValueInput('mosi')\n .setCheck(Number)\n .appendField('MOSI');\n this.appendValueInput('miso')\n .setCheck(Number)\n .appendField('MISO');\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SPI_INIT_TOOLTIP);\n }\n};\n\nexport const communicate_spi_set = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField(\"SPI\")\n this.appendValueInput('data')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_SERIAL_BEGIN);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SPI_SET);\n }\n};\n\nexport const communicate_spi_buffer = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('SPI');\n this.appendValueInput('data')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_SET + Blockly.Msg.MIXLY_ESP32_SPI_BUFFER);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SPI_BUFFER_SET);\n }\n};\n\nexport const communicate_spi_read = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('SPI');\n this.appendValueInput('data')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_SERIAL_READ);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER2 + Blockly.Msg.LANG_MATH_BYTE)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SPI_READ);\n }\n}\n\nexport const communicate_spi_read_output = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('SPI');\n this.appendValueInput('data')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_SERIAL_READ);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER2 + Blockly.Msg.LANG_MATH_BYTE + ' ' + Blockly.Msg.MIXLY_ESP32_SPI_OUTPUT);\n this.appendValueInput('val')\n .setCheck(Number);\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SPI_READ_OUTPUT);\n }\n}\n\nexport const communicate_spi_readinto = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('SPI');\n this.appendValueInput('data')\n .setCheck('var')\n .appendField(Blockly.Msg.MIXLY_SERIAL_READ + Blockly.Msg.MIXLY_ESP32_SPI_BUFFER);\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SPI_READINTO);\n }\n}\n\nexport const communicate_spi_readinto_output = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('SPI');\n this.appendValueInput('data')\n .setCheck('var')\n .appendField(Blockly.Msg.MIXLY_SERIAL_READ + Blockly.Msg.MIXLY_ESP32_SPI_BUFFER);\n this.appendValueInput('val')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_SPI_OUTPUT);\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SPI_READINTO_OUTPUT);\n }\n}\n\nexport const communicate_spi_write = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('SPI');\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_WRITE);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SPI_WRITE);\n }\n};\n\nexport const communicate_spi_write_readinto = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('SPI');\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_WRITE)\n // .appendField(new Blockly.FieldDropdown([\n // [Blockly.Msg.LANG_MATH_BYTE, \"byte\"],\n // [Blockly.Msg.MIXLY_ESP32_SPI_BUFFER, \"buffer\"]\n // ]), \"op\");\n this.appendValueInput('val')\n .setCheck('var')\n .appendField(Blockly.Msg.MIXLY_ESP32_BUFFER_READ);\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SPI_WRITE_READINTO);\n }\n};\n\nexport const communicate_i2c_master_read = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField(\"I2C\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_READ);\n this.setOutput(true, Number);\n }\n};\n\nexport const communicate_i2c_available = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField(\"I2C\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_READ + Blockly.Msg.MIXLY_ESP32_SUCCESS);\n this.setOutput(true, Boolean);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_I2C_AVAILABLE);\n }\n};\n\nexport const i2c_slave_onreceive = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_I2C_SLAVE_ONRECEIVE)\n .setCheck(Number);\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const communicate_ow_init = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('OneWire ' + Blockly.Msg.MIXLY_SETUP);\n this.appendValueInput('BUS')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_PIN);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_OW_INIT);\n }\n};\n\nexport const communicate_ow_scan = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('OneWire');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_ONEWIRE_SCAN);\n this.setOutput(true, 'List');\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_OW_SCAN);\n }\n};\n\nexport const communicate_ow_read = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('OneWire');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_ONEWIRE_READ);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_OW_READ);\n }\n};\n\nexport const communicate_ow_write = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('OneWire');\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_ESP32_WRITE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.LANG_MATH_STRING, \"write\"],\n [Blockly.Msg.LANG_MATH_BYTE, \"writebyte\"]\n ]), \"op\");\n this.appendValueInput('byte')\n .setCheck([Number, String]);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_OW_WRITE);\n }\n};\n\nexport const communicate_ow_select = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .appendField('OneWire')\n .setCheck('var')\n this.appendValueInput('byte')\n .setCheck(String)\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET)\n .appendField(\"ROM\");\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_OW_SELECT);\n }\n};\n\n\nexport const communicate_ow_reset = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .appendField('OneWire')\n .setCheck('var')\n this.appendDummyInput()\n .appendField(Blockly.Msg.blockpy_turtle_reset);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setOutput(false);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_OW_RESET);\n }\n};\n\nexport const communicate_ir_recv_init = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('PIN')\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_IR_RECEIVE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_TYPE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_IR_INPUT1, \"8\"],\n [Blockly.Msg.MIXLY_IR_INPUT2, \"16\"],\n [Blockly.Msg.MIXLY_IR_INPUT3, \"0\"],\n [Blockly.Msg.MIXLY_TR_SEND_RC, \"RC5\"]\n ]), \"type\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.CONTROLS_REPEAT_INPUT_DO + Blockly.Msg.MIXLY_ESP32_ONENET_SUB);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const internal_variable = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXlY_RECV_FUN);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_IR_CMD_CODE, \"0\"],\n [Blockly.Msg.MIXLY_IR_ADDR_CODE, \"1\"],\n [Blockly.Msg.MIXLY_IR_RAW_CODE, \"2\"],\n [Blockly.Msg.MIXLY_IR_PULSE, \"3\"]\n ]), \"index\");\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const recv_fun = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXlY_RECV_FUN)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MILY_PAUSE, \"True\"],\n [Blockly.Msg.MIXLY_RECOVER, \"False\"]\n ]), \"en\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const ir_whether_recv = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXlY_RECV_FUN);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_IR_WHETHER_RECV);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const ir_recv_timeout = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('time')\n .appendField(Blockly.Msg.MIXlY_RECV_FUN)\n .appendField(Blockly.Msg.MIXLY_IR_TIMEOUT);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MILLISECOND);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const communicate_ir_send_init = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('PIN')\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_IR_SEND)\n .appendField(Blockly.Msg.MIXLY_PIN);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_TYPE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_IR_SEND_samsung1, \"False\"],\n [Blockly.Msg.MIXLY_IR_SEND_samsung2, \"True\"],\n [Blockly.Msg.MIXLY_TR_SEND_RC, \"RC5\"]\n ]), \"type\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_BLE_POWER);\n this.appendValueInput('power');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MATH_QUYU_SYMBOL);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\n\nexport const ir_transmit_conventional_data = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_IR_SEND);\n this.appendValueInput('cmd')\n .appendField(Blockly.Msg.MIXLY_IR_CMD_CODE);\n this.appendValueInput('addr')\n .appendField(Blockly.Msg.MIXLY_IR_ADDR_CODE);\n this.appendValueInput('toggle')\n .appendField(Blockly.Msg.MIXLY_CONTROL);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_TRANSMIT_CONVEN_DATA);\n }\n};\n\nexport const ir_transmit_study_code = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_IR_SEND);\n this.appendValueInput('LIST')\n .appendField(Blockly.Msg.MIXLY_IR_PULSE)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const ir_transmit_raw_code = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_IR_SEND);\n this.appendValueInput('raw')\n .appendField(Blockly.Msg.MIXLY_IR_RAW_CODE)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\n\nexport const ir_transmit_busy = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_IR_TRANSMIT_DONE);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const communicate_bluetooth_central_init = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MSG.catEthernet_init + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_AS + Blockly.Msg.MSG.catBLE_UART);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n //this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_WRITE);\n }\n}\n\nexport const communicate_bluetooth_peripheral_init = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MSG.catEthernet_init + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_AS + Blockly.Msg.MSG.catBLE_HID);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.HTML_NAME);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n //this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_WRITE);\n }\n}\n\nexport const communicate_bluetooth_scan = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_ONEWIRE_SCAN + Blockly.Msg.MIXLY_BLUETOOTH);\n this.setOutput(true);\n this.setInputsInline(true);\n //this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_READ);\n }\n}\n\nexport const communicate_bluetooth_mac = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_MAC);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const communicate_bluetooth_connect = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_TEXT_JOIN + Blockly.Msg.MIXLY_BLUETOOTH)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.HTML_NAME, \"name\"],\n [Blockly.Msg.MIXLY_ETHERNET_MAC_ADDRESS, \"mac\"]\n ]), \"mode\");\n\n this.appendValueInput('data')\n .setCheck(String);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n //this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_WRITE);\n }\n}\n\nexport const communicate_bluetooth_disconnect = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_DISCONNECT_ONENET);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const communicate_bluetooth_send = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.MIXLY_SEND_DATA);\n this.appendValueInput('data')\n .appendField(Blockly.Msg.HTML_BODY);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n //this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_WRITE);\n }\n}\n\nexport const communicate_bluetooth_is_connected = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BLUETOOTH + Blockly.Msg.MIXLY_EMQX_IS_CONNECT);\n this.setOutput(true);\n this.setInputsInline(true);\n //this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_READ);\n }\n}\n\nexport const communicate_bluetooth_recv = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendValueInput('METHOD')\n .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_RECV)\n .appendField(Blockly.Msg.CONTROLS_REPEAT_INPUT_DO + Blockly.Msg.MIXLY_ESP32_ONENET_SUB);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n //this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_SUBSCRIBE_TOOLTIP);\n }\n};\n\nexport const communicate_bluetooth_recv_only = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_RECV)\n this.setOutput(true);\n this.setInputsInline(true);\n //this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_SUBSCRIBE_TOOLTIP);\n }\n};\n\nexport const communicate_bluetooth_handle = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MIXLY_BLE_HANDLE)\n this.appendValueInput('METHOD')\n .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_RECV)\n .appendField(Blockly.Msg.CONTROLS_REPEAT_INPUT_DO + Blockly.Msg.MIXLY_ESP32_ONENET_SUB);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n //this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_SUBSCRIBE_TOOLTIP);\n }\n};\n\n//espnow\nexport const communicate_espnow_init = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('ESPnow ' + Blockly.Msg.MIXLY_SETUP);\n this.appendValueInput('CHNL')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MP_ESPNOW_CHANNEL);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_TX_POWER)\n .appendField(new Blockly.FieldDropdown([[\"20\", \"20\"], [\"18\", \"18\"], [\"16\", \"16\"], [\"15\", \"15\"], [\"14\", \"14\"], [\"13\", \"13\"], [\"11\", \"11\"], [\"8\", \"8\"], [\"7\", \"7\"], [\"5\", \"5\"], [\"2\", \"2\"]]), 'op');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};\n\nexport const communicate_espnow_init_new = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('ESPnow ' + Blockly.Msg.MIXLY_SETUP);\n this.appendValueInput('CHNL')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MP_ESPNOW_CHANNEL);\n this.appendValueInput('DB')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_BLE_POWER);\n this.appendDummyInput()\n .appendField('db');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MP_ESPNOW_INIT_TOOLTIP);\n }\n};\n\nexport const network_espnow_mac = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('ESPnow ');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_MAC);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const network_espnow_info = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('ESPnow ');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_INFO);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const network_espnow_recv = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('ESPnow ');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_RECV);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [\"(\" + Blockly.Msg.MIXLY_ETHERNET_MAC_ADDRESS + \", \" + Blockly.Msg.OLED_STRING + \")\", \"\"],\n [Blockly.Msg.MIXLY_ETHERNET_MAC_ADDRESS, \"[0]\"],\n [Blockly.Msg.OLED_STRING, \"[1]\"]\n ]), \"mode\");\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const network_espnow_send = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('ESPnow ');\n this.appendValueInput('mac')\n .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_SEND_MAC);\n this.appendValueInput('content')\n .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_SEND);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MIXGO_ESPNOW_SEND_TOOLTIP);\n }\n};\n\nexport const network_espnow_recv_handle = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('ESPnow ');\n this.appendValueInput('METHOD')\n .appendField(Blockly.Msg.MIXLY_EMQX_SET_METHOD);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\n//radio\nexport const espnow_radio_channel = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MP_ESPNOW_RADIO_INIT);\n this.appendValueInput('CHNL')\n .setCheck(Number);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};\n\nexport const espnow_radio_txpower = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_MP_ESPNOW_RADIO + Blockly.Msg.MIXLY_TX_POWER)\n .appendField(new Blockly.FieldDropdown([[\"20\", \"20\"], [\"18\", \"18\"], [\"16\", \"16\"], [\"15\", \"15\"], [\"14\", \"14\"], [\"13\", \"13\"], [\"11\", \"11\"], [\"8\", \"8\"], [\"7\", \"7\"], [\"5\", \"5\"], [\"2\", \"2\"]]), 'op');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};\n\nexport const espnow_radio_channel_new = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MP_ESPNOW_RADIO_INIT);\n this.appendValueInput('CHNL')\n .setCheck(Number);\n this.appendValueInput('DB')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_BLE_POWER);\n this.appendDummyInput()\n .appendField('db');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MP_ESPNOW_RADIO_INIT_TOOLTIP);\n }\n};\n\nexport const espnow_radio_on_off = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MP_ESPNOW_RADIO);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_ON, \"True\"],\n [Blockly.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_OFF, \"False\"]\n ]), 'on_off')\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};\n\nexport const espnow_radio_send = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MP_ESPNOW_RADIO)\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_SEND);\n this.appendValueInput('send')\n .setCheck(String);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MIXGO_ESPNOW_SEND_TOOLTIP);\n }\n};\n\nexport const espnow_radio_rec = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MP_ESPNOW_RADIO)\n .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_RECV);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const espnow_radio_recv_msg = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MP_ESPNOW_RADIO_RECEIVED_MSG);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const espnow_radio_recv = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MP_ESPNOW_RADIO_MSG_RECEIVED);\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO);\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n }\n};\n\nexport const espnow_radio_recv_certain_msg = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MP_ESPNOW_RADIO_MSG_RECEIVED_CERTAIN)\n .appendField('\"')\n .appendField(new Blockly.FieldTextInput('on'), 'msg')\n .appendField('\"')\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO);\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n }\n};\n\nexport const espnow_radio_recv_new = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MP_ESPNOW_RADIO_MSG_RECEIVED);\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO);\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n }\n};\n\nexport const espnow_radio_recv_certain_msg_new = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MP_ESPNOW_RADIO_MSG_RECEIVED_CERTAIN)\n .appendField('\"')\n .appendField(new Blockly.FieldTextInput('on'), 'msg')\n .appendField('\"')\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO);\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n }\n};\n\nexport const lora_init = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('SUB')\n .appendField('Lora' + Blockly.Msg.MIXLY_SETUP)\n .setCheck(\"var\");\n this.appendValueInput('SPISUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"SPI\")\n .setCheck(\"var\");\n this.appendValueInput('PINSUB')\n .appendField(\"CS\")\n this.appendValueInput('frequency')\n .appendField(Blockly.Msg.MIXLY_FREQUENCY)\n this.appendValueInput('rate')\n .appendField(Blockly.Msg.MIXLY_CODE_RATE)\n this.appendValueInput('factor')\n .appendField(Blockly.Msg.MIXLY_SPREADING_FACTOR)\n this.appendValueInput('power')\n .appendField(Blockly.Msg.MIXLY_TX_POWER)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SIGNAL_BANDWIDTH)\n .appendField(new Blockly.FieldDropdown([\n ['7800', '7800'],\n ['10400', '10400'],\n ['15600', '15600'],\n ['20800', '20800'],\n ['31250', '31250'],\n ['41700', '41700'],\n ['62500', '62500'],\n ['125000', '125000'],\n ['250000', '250000'],\n ['500000', '500000']\n ]), 'bandwidth')\n this.setFieldValue(\"125000\", \"bandwidth\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_LORA_INIT_TOOLTIP);\n }\n};\n\nexport const lora_packet = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('Lora ');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_PACKAGE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_SIGNAL_STRENGTH, 'packet_rssi'],\n [Blockly.Msg.MIXLY_SIGNAL_NOISE_RATE, 'packet_snr']\n ]), 'key')\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const lora_send = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField('Lora ');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SEND_DATA);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_SEND);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n //this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_I2C_WRITE);\n }\n}\n\nexport const lora_recv = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('VAR')\n .setCheck('var')\n .appendField('Lora ');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXGO_ESPNOW_RECV)\n this.setOutput(true, String);\n this.setInputsInline(true);\n }\n};\n\nexport const urequests_get = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput(\"DOMAIN\")\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)\n .setCheck(String);\n this.appendDummyInput(\"\")\n\n .appendField(Blockly.Msg.blockpy_REQUESTS_GET)\n .appendField(new Blockly.FieldTextInput('response'), 'VAR')\n\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.blockpy_REQUESTS_GET_TOOLTIP);\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n\n}\n\n\nexport const urequests_attribute = {\n init: function () {\n this.appendValueInput('VAL')\n\n var attr =\n [[Blockly.Msg.blockpy_REQUESTS_GET_ATTR_HEADER, 'headers'], [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_STATUS_CODE, 'status_code'], [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_TEXT, 'text']\n , [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_COOKIES, 'cookies'], [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_CONTENT, 'content']];\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET)\n .appendField(new Blockly.FieldDropdown(attr), 'ATTR')\n\n\n this.setInputsInline(true);\n this.setOutput(true, String);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('DIR');\n var TOOLTIPS = {\n 'clear': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_CLEAR,\n 'reset': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_RESET,\n 'home': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_HOME\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\n\n\nexport const urequests_method = {\n init: function () {\n this.appendValueInput(\"VAR\")\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)\n .setCheck(String);\n var method = [\n ['get', 'get'],\n ['post', 'post'],\n ['put', 'put'],\n ['delete', 'delete'],\n ['head', 'head'],\n ['option', 'option']\n ];\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_CONDUCT)\n .appendField(new Blockly.FieldDropdown(method), 'DIR')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_REQUESTS)\n this.setOutput(true);\n this.setInputsInline(true);\n\n }\n};\n\nexport const i2c_init = communicate_i2c_init;\nexport const i2c_read = communicate_i2c_read;\nexport const i2c_write = communicate_i2c_write;\nexport const i2c_scan = communicate_i2c_scan;\nexport const spi_init = communicate_spi_init;\nexport const spi_set = communicate_spi_set;\nexport const spi_buffer = communicate_spi_buffer;\nexport const spi_read = communicate_spi_read;\nexport const spi_read_output = communicate_spi_read_output;\nexport const spi_readinto = communicate_spi_readinto;\nexport const spi_readinto_output = communicate_spi_readinto_output;\nexport const spi_write = communicate_spi_write;\nexport const spi_write_readinto = communicate_spi_write_readinto;\nexport const i2c_master_reader2 = communicate_i2c_master_read;\nexport const i2c_available = communicate_i2c_available;","import * as Blockly from 'blockly/core';\n\nconst LOOPS_HUE = 120//'#EB8045';\n\nexport const base_setup = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETUP);\n this.appendStatementInput('DO')\n .appendField('');\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_SETUP);\n }\n};\n\nexport const controls_delay = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_DELAY)\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_SECOND, \"s\"], [Blockly.Msg.MIXLY_mSecond, \"ms\"], [Blockly.Msg.MIXLY_uSecond, \"us\"]]), 'Time');\n this.appendValueInput(\"DELAY_TIME\", Number)\n .setCheck(Number);\n this.setFieldValue('ms', 'Time')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_DELAY);\n }\n};\n\nexport const Panic_with_status_code = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendValueInput(\"STATUS_CODE\", Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Panic_with_status_code)\n .setCheck(Number);\n this.setPreviousStatement(true, null);\n // this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Panic_with_status_code);\n }\n};\n\nexport const reset = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Reset_micro);\n this.setPreviousStatement(true);\n // this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Reset_micro);\n }\n};\n\nexport const controls_for = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_WITH)\n .appendField(new Blockly.FieldTextInput('i'), 'VAR');\n this.appendValueInput('FROM')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_FROM);\n this.appendValueInput('TO')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_TO);\n this.appendValueInput('STEP')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_STEP);\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n return Blockly.Msg.CONTROLS_FOR_TOOLTIP.replace('%1',\n thisBlock.getFieldValue('VAR'));\n });\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n};\n\nexport const controls_whileUntil = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendValueInput('BOOL')\n .setCheck([Boolean, Number])\n .appendField(Blockly.Msg.LANG_CONTROLS_WHILEUNTIL_TITLE_REPEAT)\n .appendField(new Blockly.FieldDropdown(this.OPERATORS), 'MODE');\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var op = thisBlock.getFieldValue('MODE');\n var TOOLTIPS = {\n 'WHILE': Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_WHILE,\n 'UNTIL': Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL\n };\n return TOOLTIPS[op];\n });\n }\n};\n\ncontrols_whileUntil.OPERATORS = [\n [Blockly.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_WHILE, 'WHILE'],\n [Blockly.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_UNTIL, 'UNTIL']\n];\n\nexport const controls_flow_statements = {\n init: function () {\n this.setColour(LOOPS_HUE);\n var dropdown = new Blockly.FieldDropdown(this.OPERATORS);\n this.appendDummyInput()\n .appendField(dropdown, 'FLOW')\n .appendField(Blockly.Msg.LANG_CONTROLS_FLOW_STATEMENTS_INPUT_OFLOOP);\n this.setPreviousStatement(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var op = thisBlock.getFieldValue('FLOW');\n var TOOLTIPS = {\n 'BREAK': Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK,\n 'CONTINUE': Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE\n };\n return TOOLTIPS[op];\n });\n },\n onchange: function () {\n if (!this.workspace) {\n // Block has been deleted.\n return;\n }\n var legal = false;\n // Is the block nested in a control statement?\n var block = this;\n do {\n if (block.type == 'controls_repeat' ||\n block.type == 'controls_for' ||\n block.type == 'controls_forEach' ||\n block.type == 'controls_repeat_ext' ||\n block.type == 'controls_whileUntil') {\n legal = true;\n break;\n }\n block = block.getSurroundParent();\n } while (block);\n if (legal) {\n this.setWarningText(null);\n } else {\n this.setWarningText(Blockly.Msg.LANG_CONTROLS_FLOW_STATEMENTS_WARNING);\n }\n }\n};\n\ncontrols_flow_statements.OPERATORS = [\n [Blockly.Msg.LANG_CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK, 'BREAK'],\n [Blockly.Msg.LANG_CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE, 'CONTINUE']\n];\n\nexport const controls_millis = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_RUNTIME);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_mSecond, \"ms\"], [Blockly.Msg.MIXLY_uSecond, \"us\"]]), 'Time');\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_RUNTIME);\n }\n};\n\nexport const controls_if = {\n /**\n * Block for if/elseif/else condition.\n * @this Blockly.Block\n */\n init: function () {\n //this.setHelpUrl(Blockly.Msg.CONTROLS_IF_HELPURL);\n this.setColour(LOOPS_HUE);\n this.appendValueInput('IF0')\n .setCheck([Boolean, Number])\n .appendField(Blockly.Msg.CONTROLS_IF_MSG_IF);\n this.appendStatementInput('DO0')\n .appendField(Blockly.Msg.CONTROLS_IF_MSG_THEN);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setHelpUrl(\"https://mixly.readthedocs.io/zh_CN/latest/arduino/03.Control.html#if\");\n this.setMutator(new Blockly.icons.MutatorIcon(['controls_if_elseif',\n 'controls_if_else'], this));\n // Assign 'this' to a variable for use in the tooltip closure below.\n var thisBlock = this;\n this.setTooltip(function () {\n if (!thisBlock.elseifCount_ && !thisBlock.elseCount_) {\n return Blockly.Msg.CONTROLS_IF_TOOLTIP_1;\n } else if (!thisBlock.elseifCount_ && thisBlock.elseCount_) {\n return Blockly.Msg.CONTROLS_IF_TOOLTIP_2;\n } else if (thisBlock.elseifCount_ && !thisBlock.elseCount_) {\n return Blockly.Msg.CONTROLS_IF_TOOLTIP_3;\n } else if (thisBlock.elseifCount_ && thisBlock.elseCount_) {\n return Blockly.Msg.CONTROLS_IF_TOOLTIP_4;\n }\n return '';\n });\n this.elseifCount_ = 0;\n this.elseCount_ = 0;\n },\n /**\n * Create XML to represent the number of else-if and else inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n if (!this.elseifCount_ && !this.elseCount_) {\n return null;\n }\n var container = document.createElement('mutation');\n if (this.elseifCount_) {\n container.setAttribute('elseif', this.elseifCount_);\n }\n if (this.elseCount_) {\n container.setAttribute('else', 1);\n }\n return container;\n },\n /**\n * Parse XML to restore the else-if and else inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n var containerBlock = this;\n var valueConnections = [];\n var statementConnections = [];\n // var elseStatementConnection = null;\n if (this.elseCount_) {\n // if (containerBlock.getInputTargetBlock('ELSE') && containerBlock.getInputTargetBlock('ELSE').previousConnection)\n // elseStatementConnection = containerBlock.getInputTargetBlock('ELSE').previousConnection;\n this.removeInput('ELSE');\n }\n for (var i = this.elseifCount_; i > 0; i--) {\n if (containerBlock.getInputTargetBlock('IF' + i) && containerBlock.getInputTargetBlock('IF' + i).previousConnection)\n valueConnections[i] = (containerBlock.getInputTargetBlock('IF' + i).previousConnection);\n else\n valueConnections[i] = null;\n this.removeInput('IF' + i);\n if (containerBlock.getInputTargetBlock('DO' + i) && containerBlock.getInputTargetBlock('DO' + i).previousConnection)\n statementConnections[i] = (containerBlock.getInputTargetBlock('DO' + i).previousConnection);\n else\n statementConnections[i] = null;\n this.removeInput('DO' + i);\n }\n this.elseifCount_ = parseInt(xmlElement.getAttribute('elseif'), 10);\n this.elseCount_ = parseInt(xmlElement.getAttribute('else'), 10);\n //this.compose(containerBlock);\n for (var i = 1; i <= this.elseifCount_; i++) {\n this.appendValueInput('IF' + i)\n .setCheck([Boolean, Number])\n .appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSEIF);\n this.appendStatementInput('DO' + i)\n .appendField(Blockly.Msg.CONTROLS_IF_MSG_THEN);\n }\n if (this.elseCount_) {\n this.appendStatementInput('ELSE')\n .appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSE);\n }\n for (var i = valueConnections.length - 2; i > 0; i--) {\n if (valueConnections[i])\n valueConnections[i].reconnect(this, 'IF' + i);\n }\n for (var i = statementConnections.length - 2; i > 0; i--) {\n if (statementConnections[i])\n statementConnections[i].reconnect(this, 'DO' + i);\n }\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock = workspace.newBlock('controls_if_if');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 1; i <= this.elseifCount_; i++) {\n var elseifBlock = workspace.newBlock('controls_if_elseif');\n elseifBlock.initSvg();\n connection.connect(elseifBlock.previousConnection);\n connection = elseifBlock.nextConnection;\n }\n if (this.elseCount_) {\n var elseBlock = workspace.newBlock('controls_if_else');\n elseBlock.initSvg();\n connection.connect(elseBlock.previousConnection);\n }\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n // Disconnect the else input blocks and remove the inputs.\n if (this.elseCount_) {\n this.removeInput('ELSE');\n }\n this.elseCount_ = 0;\n // Disconnect all the elseif input blocks and remove the inputs.\n for (var i = this.elseifCount_; i > 0; i--) {\n this.removeInput('IF' + i);\n this.removeInput('DO' + i);\n }\n this.elseifCount_ = 0;\n // Rebuild the block's optional inputs.\n var clauseBlock = containerBlock.getInputTargetBlock('STACK');\n var valueConnections = [null];\n var statementConnections = [null];\n var elseStatementConnection = null;\n while (clauseBlock) {\n switch (clauseBlock.type) {\n case 'controls_if_elseif':\n this.elseifCount_++;\n valueConnections.push(clauseBlock.valueConnection_);\n statementConnections.push(clauseBlock.statementConnection_);\n break;\n case 'controls_if_else':\n this.elseCount_++;\n elseStatementConnection = clauseBlock.statementConnection_;\n break;\n default:\n throw Error('Unknown block type: ' + clauseBlock.type);\n }\n clauseBlock = clauseBlock.nextConnection &&\n clauseBlock.nextConnection.targetBlock();\n }\n\n this.updateShape_();\n // Reconnect any child blocks.\n this.reconnectChildBlocks_(valueConnections, statementConnections, elseStatementConnection);\n\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n var clauseBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 1;\n while (clauseBlock) {\n switch (clauseBlock.type) {\n case 'controls_if_elseif':\n var inputIf = this.getInput('IF' + i);\n var inputDo = this.getInput('DO' + i);\n clauseBlock.valueConnection_ =\n inputIf && inputIf.connection.targetConnection;\n clauseBlock.statementConnection_ =\n inputDo && inputDo.connection.targetConnection;\n i++;\n break;\n case 'controls_if_else':\n var inputDo = this.getInput('ELSE');\n clauseBlock.statementConnection_ =\n inputDo && inputDo.connection.targetConnection;\n break;\n default:\n throw 'Unknown block type.';\n }\n clauseBlock = clauseBlock.nextConnection &&\n clauseBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Reconstructs the block with all child blocks attached.\n */\n rebuildShape_: function () {\n var valueConnections = [null];\n var statementConnections = [null];\n var elseStatementConnection = null;\n\n if (this.getInput('ELSE')) {\n elseStatementConnection = this.getInput('ELSE').connection.targetConnection;\n }\n var i = 1;\n while (this.getInput('IF' + i)) {\n var inputIf = this.getInput('IF' + i);\n var inputDo = this.getInput('DO' + i);\n console.log(inputIf.connection.targetConnection);\n valueConnections.push(inputIf.connection.targetConnection);\n statementConnections.push(inputDo.connection.targetConnection);\n i++;\n }\n this.updateShape_();\n this.reconnectChildBlocks_(valueConnections, statementConnections, elseStatementConnection);\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @this Blockly.Block\n * @private\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('ELSE')) {\n this.removeInput('ELSE');\n }\n var i = 1;\n while (this.getInput('IF' + i)) {\n this.removeInput('IF' + i);\n this.removeInput('DO' + i);\n i++;\n }\n // Rebuild block.\n for (var i = 1; i <= this.elseifCount_; i++) {\n this.appendValueInput('IF' + i)\n .setCheck([Number, Boolean])\n .appendField(Blockly.Msg['CONTROLS_IF_MSG_ELSEIF']);\n this.appendStatementInput('DO' + i)\n .appendField(Blockly.Msg['CONTROLS_IF_MSG_THEN']);\n }\n if (this.elseCount_) {\n this.appendStatementInput('ELSE')\n .appendField(Blockly.Msg['CONTROLS_IF_MSG_ELSE']);\n }\n },\n /**\n * Reconnects child blocks.\n * @param {!Array} valueConnections List of value\n * connectsions for if input.\n * @param {!Array} statementConnections List of\n * statement connections for do input.\n * @param {?Blockly.RenderedConnection} elseStatementConnection Statement\n * connection for else input.\n */\n reconnectChildBlocks_: function (valueConnections, statementConnections,\n elseStatementConnection) {\n for (var i = 1; i <= this.elseifCount_; i++) {\n valueConnections[i] && Blockly.Mutator.reconnect(this, 'IF' + i);\n statementConnections[i] && statementConnections[i].reconnect(this, 'DO' + i);\n }\n elseStatementConnection && elseStatementConnection.reconnect(this, 'ELSE');\n }\n};\n\nexport const controls_if_if = {\n /**\n * Mutator block for if container.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.CONTROLS_IF_IF_TITLE_IF);\n this.appendStatementInput('STACK');\n this.setTooltip(Blockly.Msg.CONTROLS_IF_IF_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const controls_if_elseif = {\n /**\n * Mutator bolck for else-if condition.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.CONTROLS_IF_ELSEIF_TITLE_ELSEIF);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.CONTROLS_IF_ELSEIF_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const controls_if_else = {\n /**\n * Mutator block for else condition.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE);\n this.setPreviousStatement(true);\n this.setTooltip(Blockly.Msg.CONTROLS_IF_ELSE_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\n\nexport const controls_end_program = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_CONTROL_END_PROGRAM);\n this.setPreviousStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_CONTROL_END_PROGRAM);\n }\n};\n\n\nexport const controls_forEach = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendValueInput('LIST')\n .setCheck(['List', String])\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.CONTROLS_FOREACH_INPUT);\n this.appendDummyInput()\n .appendField(Blockly.Msg.CONTROLS_FOREACH_INPUT_ITEM)\n .appendField(new Blockly.FieldTextInput('i'), 'VAR');\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n return Blockly.Msg.CONTROLS_FOR_TOOLTIP.replace('%1',\n thisBlock.getFieldValue('VAR'));\n });\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n};\n\nexport const raw_block = {\n // Container.\n init: function () {\n this.setColour(LOOPS_HUE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.appendDummyInput()\n .appendField('Code Block:');\n this.appendDummyInput()\n .appendField(new Blockly.FieldMultilineInput('12345'), 'TEXT');\n }\n};\n\nexport const base_type = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendValueInput(\"DATA\")\n .appendField(Blockly.Msg.MICROBIT_PYTHON_TYPE);\n this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MICROBIT_PYTHON_TYPE);\n }\n};\n\nexport const controls_TypeLists = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_CONTORL_GET_TYPE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.LANG_MATH_INT, \"int\"],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_FLOAT, \"float\"],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_STRING, \"str\"],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_LIST, \"list\"],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_TUPLE, \"tuple\"],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT, \"dict\"],\n [Blockly.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD, \"set\"],\n // [Blockly.Msg.MIXLY_MICROBIT_IMAGE,\"image\"],\n [Blockly.Msg.LOGIC_NULL, \"NoneType\"]]), \"type\");\n //整数、浮点数、字符串、列表、元组、字典、集合、图像不太对, unfinished\n this.setInputsInline(true);\n this.setOutput(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('type');\n var mode0 = Blockly.Msg.MICROBIT_controls_TypeLists;\n var TOOLTIPS = {\n 'int': Blockly.Msg.LANG_MATH_INT,\n 'float': Blockly.Msg.MIXLY_MICROBIT_TYPE_FLOAT,\n 'str': Blockly.Msg.MIXLY_MICROBIT_TYPE_STRING,\n 'list': Blockly.Msg.MIXLY_MICROBIT_TYPE_LIST,\n 'tuple': Blockly.Msg.MIXLY_MICROBIT_TYPE_TUPLE,\n 'dict': Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT,\n 'set': Blockly.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD,\n 'image': Blockly.Msg.MIXLY_MICROBIT_IMAGE,\n 'NoneType': Blockly.Msg.LOGIC_NULL\n };\n return mode0 + TOOLTIPS[mode];\n });\n }\n};\n\nexport const controls_uname = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_CONTORL_UNAME);\n\n this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + Blockly.Msg.MIXLY_MICROBIT_PY_CONTORL_UNAME);\n }\n};\n","import * as Blockly from 'blockly/core';\n\nconst DISPLAY_HUE = 180;\n\nconst FIELD_COLOUR_CONFIG = {\n colourOptions: ['#f00', '#000'],\n columns: 2\n};\n\n//var IMG = [[\"HEART\", \"HEART\"],[\"HEART_SMALL\", \"HEART_SMALL\"],[\"HAPPY\", \"HAPPY\"],[\"SAD\", \"SAD\"],[\"SMILE\", \"SMILE\"],[\"SILLY\", \"SILLY\"],[\"FABULOUS\", \"FABULOUS\"],[\"SURPRISED\", \"SURPRISED\"],[\"ASLEEP\", \"ASLEEP\"],[\"ANGRY\", \"ANGRY\"],[\"CONFUSED\", \"CONFUSED\"],[\"NO\", \"NO\"],[\"YES\", \"YES\"],[\"LEFT_ARROW\", \"LEFT_ARROW\"],[\"RIGHT_ARROW\", \"RIGHT_ARROW\"],[\"DRESS\", \"DRESS\"],[\"TRANSFORMERS\", \"TRANSFORMERS\"],[\"SCISSORS\", \"SCISSORS\"],[\"EXIT\", \"EXIT\"],[\"TREE\", \"TREE\"],[\"PACMAN\", \"PACMAN\"],[\"TARGET\", \"TARGET\"],[\"TSHIRT\", \"TSHIRT\"],[\"ROLLERSKATE\", \"ROLLERSKATE\"],[\"DUCK\", \"DUCK\"],[\"HOUSE\", \"HOUSE\"],[\"TORTOISE\", \"TORTOISE\"],[\"BUTTERFLY\", \"BUTTERFLY\"],[\"STICKFIGURE\", \"STICKFIGURE\"],[\"GHOST\", \"GHOST\"],[\"PITCHFORK\", \"PITCHFORK\"],[\"MUSIC_QUAVERS\", \"MUSIC_QUAVERS\"],[\"MUSIC_QUAVER\", \"MUSIC_QUAVER\"],[\"MUSIC_CROTCHET\", \"MUSIC_CROTCHET\"],[\"COW\", \"COW\"],[\"RABBIT\", \"RABBIT\"],[\"SQUARE_SMALL\", \"SQUARE_SMALL\"],[\"SQUARE\", \"SQUARE\"],[\"DIAMOND_SMALL\", \"DIAMOND_SMALL\"],[\"DIAMOND\", \"DIAMOND\"],[\"CHESSBOARD\", \"CHESSBOARD\"],[\"TRIANGLE_LEFT\", \"TRIANGLE_LEFT\"],[\"TRIANGLE\", \"TRIANGLE\"],[\"SNAKE\", \"SNAKE\"],[\"UMBRELLA\", \"UMBRELLA\"],[\"SKULL\", \"SKULL\"],[\"GIRAFFE\", \"GIRAFFE\"],[\"SWORD\", \"SWORD\"]];\n\nexport const display_clear = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_HUE,\n \"nextStatement\": null,\n \"previousStatement\": null,\n \"helpUrl\": \"https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.clear\",\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_Clear_display\n });\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Clear_display);\n }\n};\n\nexport const display_get_pixel = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);\n this.appendValueInput('y')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_POINT);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_BRIGHTNESS);\n }\n};\n\nexport const display_bright_point = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_BRIGHTNESS)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);\n this.appendValueInput('y')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);\n this.appendValueInput(\"STAT\")\n .setCheck([Number, Boolean]);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_DISPLAY_SETPIXEL);\n }\n};\n\nexport const monitor_show_string = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.OLED_DRAWSTR_ONE_BY_ONE, 'show'], [Blockly.Msg.MIXLY_ESP32_MONITOR_SCROLL, 'scroll']]), \"MODE\")\n .appendField(Blockly.Msg.OLED_DRAWSTR);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('MODE');\n var mode0 = Blockly.Msg.OLED_DRAWSTR;\n var TOOLTIPS = {\n 'show': Blockly.Msg.OLED_DRAWSTR_ONE_BY_ONE,\n 'scroll': Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING\n };\n return TOOLTIPS[mode] + mode0;\n });\n }\n};\n\nexport const monitor_show_scroll_string = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.OLED_DRAWSTR_ONE_BY_ONE, 'show'], [Blockly.Msg.MIXLY_ESP32_MONITOR_SCROLL, 'scroll']]), \"MODE\")\n .appendField(Blockly.Msg.OLED_DRAWSTR);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n // .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_DELAY);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('MODE');\n var mode0 = Blockly.Msg.OLED_DRAWSTR;\n var TOOLTIPS = {\n 'show': Blockly.Msg.OLED_DRAWSTR_ONE_BY_ONE,\n 'scroll': Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING\n };\n return TOOLTIPS[mode] + mode0;\n });\n }\n};\n\n\nexport const display_show_static = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_SHOW_STATIC);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_SHOW_STATIC);\n }\n};\n\nexport const microbit_display_show_image = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('PIN', String)\n .setCheck(\"esp32_image\")\n .appendField(Blockly.Msg.OLED_BITMAP);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.OLED_BITMAP);\n }\n};\n\n\n\nexport const esp32_display_show_default_image = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_HUE,\n \"InputsInline\": true,\n \"nextStatement\": null,\n \"previousStatement\": null,\n \"helpUrl\": \"https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.show\",\n \"tooltip\": \"Show the referenced image on the display.\",\n \"message0\": Blockly.Msg.OLED_BITMAP,\n \"args0\": [{\n \"name\": \"image\",\n \"options\": [[\"HEART\", \"HEART\"], [\"HEART_SMALL\", \"HEART_SMALL\"], [\"HAPPY\", \"HAPPY\"], [\"SAD\", \"SAD\"], [\"SMILE\", \"SMILE\"], [\"SILLY\", \"SILLY\"], [\"FABULOUS\", \"FABULOUS\"], [\"SURPRISED\", \"SURPRISED\"], [\"ASLEEP\", \"ASLEEP\"], [\"ANGRY\", \"ANGRY\"], [\"CONFUSED\", \"CONFUSED\"], [\"NO\", \"NO\"], [\"YES\", \"YES\"], [\"LEFT_ARROW\", \"LEFT_ARROW\"], [\"RIGHT_ARROW\", \"RIGHT_ARROW\"], [\"DRESS\", \"DRESS\"], [\"TRANSFORMERS\", \"TRANSFORMERS\"], [\"SCISSORS\", \"SCISSORS\"], [\"EXIT\", \"EXIT\"], [\"TREE\", \"TREE\"], [\"PACMAN\", \"PACMAN\"], [\"TARGET\", \"TARGET\"], [\"TSHIRT\", \"TSHIRT\"], [\"ROLLERSKATE\", \"ROLLERSKATE\"], [\"DUCK\", \"DUCK\"], [\"HOUSE\", \"HOUSE\"], [\"TORTOISE\", \"TORTOISE\"], [\"BUTTERFLY\", \"BUTTERFLY\"], [\"STICKFIGURE\", \"STICKFIGURE\"], [\"GHOST\", \"GHOST\"], [\"PITCHFORK\", \"PITCHFORK\"], [\"MUSIC_QUAVERS\", \"MUSIC_QUAVERS\"], [\"MUSIC_QUAVER\", \"MUSIC_QUAVER\"], [\"MUSIC_CROTCHET\", \"MUSIC_CROTCHET\"], [\"COW\", \"COW\"], [\"RABBIT\", \"RABBIT\"], [\"SQUARE_SMALL\", \"SQUARE_SMALL\"], [\"SQUARE\", \"SQUARE\"], [\"DIAMOND_SMALL\", \"DIAMOND_SMALL\"], [\"DIAMOND\", \"DIAMOND\"], [\"CHESSBOARD\", \"CHESSBOARD\"], [\"TRIANGLE_LEFT\", \"TRIANGLE_LEFT\"], [\"TRIANGLE\", \"TRIANGLE\"], [\"SNAKE\", \"SNAKE\"], [\"UMBRELLA\", \"UMBRELLA\"], [\"SKULL\", \"SKULL\"], [\"GIRAFFE\", \"GIRAFFE\"], [\"SWORD\", \"SWORD\"]],\n \"type\": \"field_dropdown\"\n }\n ]\n });\n }\n};\n\n\nexport const esp32_display_show_animation = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_HUE,\n \"inputsInline\": true,\n \"nextStatement\": null,\n \"previousStatement\": null,\n \"helpUrl\": \"https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.show\",\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_Animate_images,\n \"args0\": [{\n \"check\": \"List\",\n \"type\": \"input_value\",\n \"name\": \"images\"\n }, {\n \"type\": \"input_value\",\n \"name\": \"delay\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"checked\": true,\n \"type\": \"field_checkbox\",\n \"name\": \"wait\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"checked\": false,\n \"type\": \"field_checkbox\",\n \"name\": \"loop\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"checked\": false,\n \"type\": \"field_checkbox\",\n \"name\": \"clear\"\n }\n ]\n });\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SHOW_delay + Blockly.Msg.MIXLY_MICROBIT_Animate_images1);\n }\n};\n\nexport const esp32_display_scroll = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_HUE,\n \"nextStatement\": null,\n \"previousStatement\": null,\n \"helpUrl\": \"https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.scroll\",\n \"tooltip\": \"Scroll the referenced text across the display.\",\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_Scroll_message,\n \"args0\": [{\n \"check\": \"String\",\n \"type\": \"input_value\",\n \"name\": \"message\"\n }\n ]\n });\n }\n};\n\nexport const esp32_display_on = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_MICROBIT_Turn_on_display, 'on'], [Blockly.Msg.MIXLY_MICROBIT_Turn_off_display, 'off']]), 'on_off')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_monitor);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('on_off');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_monitor;\n var TOOLTIPS = {\n 'on': Blockly.Msg.MIXLY_MICROBIT_Turn_on_display,\n 'off': Blockly.Msg.MIXLY_MICROBIT_Turn_off_display\n };\n return TOOLTIPS[mode] + mode0;\n });\n }\n};\n\nexport const esp32_display_off = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_HUE,\n \"nextStatement\": null,\n \"previousStatement\": null,\n \"helpUrl\": \"https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.off\",\n \"tooltip\": \"Turn off the display.\",\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_Turn_off_display\n });\n }\n};\n\nexport const esp32_display_is_on = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_HUE,\n \"output\": \"Boolean\",\n \"helpUrl\": \"https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.is_on\",\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_Display_is_on\n });\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Display_is_on1);\n }\n};\n\nexport const display_image_builtins = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_HUE,\n \"args0\": [{\n \"name\": \"image\",\n \"options\": [[\"HEART\", \"HEART\"], [\"HEART_SMALL\", \"HEART_SMALL\"], [\"HAPPY\", \"HAPPY\"], [\"SAD\", \"SAD\"], [\"SMILE\", \"SMILE\"], [\"SILLY\", \"SILLY\"], [\"FABULOUS\", \"FABULOUS\"], [\"SURPRISED\", \"SURPRISED\"], [\"ASLEEP\", \"ASLEEP\"], [\"ANGRY\", \"ANGRY\"], [\"CONFUSED\", \"CONFUSED\"], [\"NO\", \"NO\"], [\"YES\", \"YES\"], [\"LEFT_ARROW\", \"LEFT_ARROW\"], [\"RIGHT_ARROW\", \"RIGHT_ARROW\"], [\"DRESS\", \"DRESS\"], [\"TRANSFORMERS\", \"TRANSFORMERS\"], [\"SCISSORS\", \"SCISSORS\"], [\"EXIT\", \"EXIT\"], [\"TREE\", \"TREE\"], [\"PACMAN\", \"PACMAN\"], [\"TARGET\", \"TARGET\"], [\"TSHIRT\", \"TSHIRT\"], [\"ROLLERSKATE\", \"ROLLERSKATE\"], [\"DUCK\", \"DUCK\"], [\"HOUSE\", \"HOUSE\"], [\"TORTOISE\", \"TORTOISE\"], [\"BUTTERFLY\", \"BUTTERFLY\"], [\"STICKFIGURE\", \"STICKFIGURE\"], [\"GHOST\", \"GHOST\"], [\"PITCHFORK\", \"PITCHFORK\"], [\"MUSIC_QUAVERS\", \"MUSIC_QUAVERS\"], [\"MUSIC_QUAVER\", \"MUSIC_QUAVER\"], [\"MUSIC_CROTCHET\", \"MUSIC_CROTCHET\"], [\"COW\", \"COW\"], [\"RABBIT\", \"RABBIT\"], [\"SQUARE_SMALL\", \"SQUARE_SMALL\"], [\"SQUARE\", \"SQUARE\"], [\"DIAMOND_SMALL\", \"DIAMOND_SMALL\"], [\"DIAMOND\", \"DIAMOND\"], [\"CHESSBOARD\", \"CHESSBOARD\"], [\"TRIANGLE_LEFT\", \"TRIANGLE_LEFT\"], [\"TRIANGLE\", \"TRIANGLE\"], [\"SNAKE\", \"SNAKE\"], [\"UMBRELLA\", \"UMBRELLA\"], [\"SKULL\", \"SKULL\"], [\"GIRAFFE\", \"GIRAFFE\"], [\"SWORD\", \"SWORD\"]],\n \"type\": \"field_dropdown\"\n }\n ],\n \"output\": [\"esp32_image\", \"List\"],\n \"helpUrl\": \"https://microbit-micropython.readthedocs.io/en/latest/image.html#attributes\",\n \"tooltip\": Blockly.Msg.MIXLY_MICROBIT_Built_in_image1,\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_Built_in_image\n });\n }\n};\n\n\nexport const display_image_create = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_HUE,\n \"args0\": [{\n \"type\": \"input_dummy\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"00\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"01\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"02\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"03\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"04\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"05\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"06\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"07\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"08\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"09\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"0a\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"0b\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"0c\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"0d\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"0e\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"0f\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"10\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"11\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"12\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"13\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"14\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"15\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"16\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"17\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"18\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"19\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"1a\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"1b\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"1c\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"1d\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"1e\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"1f\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"20\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"21\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"22\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"23\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"24\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"25\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"26\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"27\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"28\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"29\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"2a\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"2b\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"2c\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"2d\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"2e\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"2f\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"30\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"31\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"32\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"33\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"34\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"35\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"36\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"37\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"38\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"39\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"3a\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"3b\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"3c\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"3d\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"3e\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"3f\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"40\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"41\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"42\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"43\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"44\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"45\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"46\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"47\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"48\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"49\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"4a\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"4b\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"4c\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"4d\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"4e\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"4f\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"50\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"51\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"52\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"53\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"54\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"55\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"56\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"57\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"58\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"59\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"5a\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"5b\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"5c\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"5d\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"5e\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"5f\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"60\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"61\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"62\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"63\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"64\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"65\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"66\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"67\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"68\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"69\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"6a\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"6b\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"6c\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"6d\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"6e\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"6f\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"70\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"71\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"72\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"73\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"74\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"75\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"76\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"77\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"78\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"79\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"7a\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"7b\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"7c\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"7d\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"7e\"\n }, {\n \"colour\": \"#000000\",\n \"type\": \"field_colour\",\n \"name\": \"7f\"\n }\n ],\n \"output\": \"esp32_image\",\n \"helpUrl\": \"https://microbit-micropython.readthedocs.io/en/latest/image.html#microbit.Image\",\n \"message0\": Blockly.Msg.MIXLY_ESP32_Create_image\n });\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1);\n }\n};\n\n\n\nexport const image_shift = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MIXLY_UP, 'up'],\n [Blockly.Msg.MIXLY_DOWN, 'down'],\n [Blockly.Msg.MIXLY_LEFT, 'left'],\n [Blockly.Msg.MIXLY_RIGHT, 'right'],\n ];\n //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);\n this.setColour(DISPLAY_HUE);\n this.setOutput(true);\n this.setInputsInline(true);\n this.appendValueInput('img')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET)\n .setCheck([\"esp32_image\", \"List\", String]);\n this.appendDummyInput('')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.appendValueInput('val')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_SHIFT)\n .setCheck(Number);\n this.appendDummyInput('')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_UNIT)\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var mode0 = Blockly.Msg.DISPLAY_IMAGE_LET;\n var mode1 = Blockly.Msg.DISPLAY_IMAGE_LET2;\n var mode2 = Blockly.Msg.DISPLAY_IMAGE_LET3;\n var TOOLTIPS = {\n 'up': Blockly.Msg.MIXLY_UP,\n 'down': Blockly.Msg.MIXLY_DOWN,\n 'left': Blockly.Msg.MIXLY_LEFT,\n 'right': Blockly.Msg.MIXLY_RIGHT\n };\n return mode0 + mode1 + TOOLTIPS[mode] + mode2;\n });\n }\n};\n\nexport const image_arithmetic = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MICROBIT_DISPLAY_UNION, '+'],\n [Blockly.Msg.MICROBIT_DISPLAY_MINUS, '-']\n ];\n //this.setHelpUrl(Blockly.Msg.MATH_ARITHMETIC_HELPURL);\n this.setColour(DISPLAY_HUE);\n this.setOutput(true, \"esp32_image\");\n this.appendValueInput('A')\n // .setCheck([\"esp32_image\", \"List\", String])\n .appendField(Blockly.Msg.MICROBIT_DISPLAY_MERGE_SHAPE);\n this.appendValueInput('B')\n // .setCheck([\"esp32_image\", \"List\", String])\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n '+': Blockly.Msg.MIXLY_MICROBIT_image_add,\n '-': Blockly.Msg.MIXLY_MICROBIT_image_reduce\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const esp32_display_show_string = {\n init: function () {\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.OLED_DRAWSTR_ONE_BY_ONE, 'show'], [Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING, 'scroll']]), \"MODE\");\n this.jsonInit({\n \"colour\": DISPLAY_HUE,\n \"inputsInline\": true,\n \"nextStatement\": null,\n \"previousStatement\": null,\n \"helpUrl\": \"https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.show\",\n \"tooltip\": \"Display the list of images as an animation with a certain delay between each frame. Indicate if you need to wait before continuing, continuously loop the animation and clear the display when finished.\",\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_SHOW_STRING,\n \"args0\": [{\n \"check\": String,\n \"type\": \"input_value\",\n \"name\": \"images\"\n }, {\n \"type\": \"input_value\",\n \"name\": \"delay\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"checked\": true,\n \"type\": \"field_checkbox\",\n \"name\": \"wait\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"checked\": false,\n \"type\": \"field_checkbox\",\n \"name\": \"loop\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"checked\": false,\n \"type\": \"field_checkbox\",\n \"name\": \"clear\"\n }\n ]\n });\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('MODE');\n var mode0 = Blockly.Msg.OLED_DRAWSTR;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SHOW_delay;\n var TOOLTIPS = {\n 'show': Blockly.Msg.OLED_DRAWSTR_ONE_BY_ONE,\n 'scroll': Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING\n };\n return mode1 + TOOLTIPS[mode] + mode0;\n });\n }\n};\n\n// export const esp32_display_scroll_string = {\n// init : function () {\n// this.jsonInit({\n// \"colour\" : DISPLAY_HUE,\n// \"inputsInline\": true,\n// \"nextStatement\" : null,\n// \"previousStatement\" : null,\n// \"helpUrl\" : \"https://microbit-micropython.readthedocs.io/en/latest/display.html#microbit.display.show\",\n// \"tooltip\" : \"Display the list of images as an animation with a certain delay between each frame. Indicate if you need to wait before continuing, continuously loop the animation and clear the display when finished.\",\n// \"message0\" : Blockly.Msg.MIXLY_MICROBIT_Scroll_string,\n// \"args0\" : [{\n// \"check\" : String,\n// \"type\" : \"input_value\",\n// \"name\" : \"images\"\n// }, {\n// \"type\" : \"input_value\",\n// \"name\" : \"delay\"\n// }, {\n// \"type\" : \"input_dummy\"\n// }, {\n// \"checked\" : true,\n// \"type\" : \"field_checkbox\",\n// \"name\" : \"wait\"\n// }, {\n// \"type\" : \"input_dummy\"\n// }, {\n// \"checked\" : false,\n// \"type\" : \"field_checkbox\",\n// \"name\" : \"loop\"\n// }, {\n// \"type\" : \"input_dummy\"\n// }, {\n// \"checked\" : false,\n// \"type\" : \"field_checkbox\",\n// \"name\" : \"clear\"\n// }\n// ]\n// });\n// }\n// };\n\nexport const group_lcd_print = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput(\"TEXT\", String)\n .setCheck([String, Number])\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_DF_LCD)\n .appendField('mylcd')\n //.appendField(new Blockly.FieldTextInput('mylcd'), 'VAR')\n .appendField(Blockly.Msg.MIXLY_LCD_PRINT1);\n this.appendValueInput(\"TEXT2\", String)\n .setCheck([String, Number])\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_LCD_PRINT2);\n /*\n this.appendValueInput(\"TEXT3\", String)\n .setCheck([String,Number])\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_LCD_PRINT3);\n this.appendValueInput(\"TEXT4\", String)\n .setCheck([String,Number])\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_LCD_PRINT4);\n */\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_LCD_PRINT4_TOOLTIP);\n }\n};\n\nexport const group_lcd_init = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('device')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .appendField(Blockly.Msg.MIXLY_DF_LCD)\n .appendField('1602')\n .appendField('mylcd')\n .appendField(Blockly.Msg.MIXLY_LCD_ADDRESS);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_DF_LCD + Blockly.Msg.MIXLY_LCD_ADDRESS);\n }\n};\n\nexport const group_lcd_print2 = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput(\"row\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_DF_LCD)\n .appendField('mylcd')\n .appendField(Blockly.Msg.MIXLY_LCD_ROW);\n this.appendValueInput(\"column\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_LCD_COLUMN);\n this.appendValueInput(\"TEXT\", String)\n .setCheck([String, Number])\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_LCD_PRINT);\n this.setPreviousStatement(true, null);\n this.setInputsInline(true);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_LCD_PRINT3_TOOLTIP);\n }\n};\n\nexport const group_lcd_power = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_DF_LCD)\n .appendField('mylcd')\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_ON, \"on()\"], [Blockly.Msg.MIXLY_OFF, \"off()\"], [Blockly.Msg.MIXLY_LCD_STAT_CLEAR, \"clear()\"], [Blockly.Msg.MIXLY_LCD_NOBACKLIGHT, \"backlight(off)\"], [Blockly.Msg.MIXLY_LCD_BACKLIGHT, \"backlight(on)\"]]), \"STAT\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('STAT');\n var mode0 = Blockly.Msg.LISTS_SET_INDEX_SET;\n var mode1 = Blockly.Msg.MIXLY_DF_LCD;\n var TOOLTIPS = {\n 'on()': Blockly.Msg.MIXLY_ON,\n 'off()': Blockly.Msg.MIXLY_OFF,\n 'clear()': Blockly.Msg.MIXLY_LCD_STAT_CLEAR,\n 'backlight(off)': Blockly.Msg.MIXLY_LCD_NOBACKLIGHT,\n 'backlight(on)': Blockly.Msg.MIXLY_LCD_BACKLIGHT\n };\n return mode0 + mode1 + TOOLTIPS[mode];\n });\n }\n};\n\n// export const oled_init = {\n// init: function() {\n// this.setColour(DISPLAY_HUE);\n// this.appendValueInput('VAR')\n// .appendField(Blockly.Msg.OLED)\n// .setCheck(\"var\");\n// this.appendValueInput(\"RX\", Number)\n// //.appendField(Blockly.Msg.MIXLY_SETUP)\n// // .appendField(Blockly.Msg.OLED)\n// // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')\n// .appendField(Blockly.Msg.MIXLY_SETUP)\n// .appendField(\"sda\")\n// .setCheck(Number)\n// .setAlign(Blockly.inputs.Align.RIGHT);\n// this.appendValueInput(\"TX\", Number)\n// .appendField(\"scl\")\n// .setCheck(Number)\n// .setAlign(Blockly.inputs.Align.RIGHT);\n// this.appendValueInput('freq')\n// .setCheck(Number)\n// .appendField(Blockly.Msg.MIXLY_FREQUENCY)\n// .setAlign(Blockly.inputs.Align.RIGHT);\n// this.setPreviousStatement(true, null);\n// this.setNextStatement(true, null);\n// this.setInputsInline(true);\n// }\n// };\n\nexport const display_use_i2c_init = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('I2CSUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"I2C\")\n .setCheck(\"var\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n // this.appendDummyInput(\"\")\n // .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO + \"OLED\")\n // .appendField(new Blockly.FieldDropdown([\n // [\"OLED 128¡Á64\", \"OLED 128¡Á64\"]\n // ]), \"key\");\n this.appendValueInput('row')\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO + \"OLED\")\n .setCheck(Number);\n this.appendValueInput('column')\n .appendField(\"X\")\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip();\n }\n};\n\nexport const display_draw_4strings = {\n init: function () {\n // this.appendDummyInput()\n // .appendField(Blockly.Msg.OLED)\n // this.appendDummyInput(\"\")\n // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')\n // .appendField(Blockly.Msg.OLEDDISPLAY);\n //.appendField(new Blockly.FieldImage(Blockly.pathToBlockly + 'blocks/display-oled-128x64-i2c/display-oled-128x64-i2c.jpg', Blockly.Arduino.imageSize, Blockly.Arduino.imageSize));\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n .setCheck(\"var\");\n this.appendValueInput(\"Text_line1\", 'String')\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.OLEDDISPLAY + Blockly.Msg.line1);\n this.appendValueInput(\"Text_line2\", 'String')\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.line2);\n this.appendValueInput(\"Text_line3\", 'String')\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.line3);\n this.appendValueInput(\"Text_line4\", 'String')\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.line4);\n this.setInputsInline(false);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(DISPLAY_HUE);\n this.setTooltip(Blockly.Msg.MIXLY_DF_LCD + Blockly.Msg.OLEDDISPLAY + Blockly.Msg.MIXLY_MICROBIT_TYPE_STRING);\n }\n};\n\nexport const display_image_size = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MIXLY_HEIGHT, 'height'],\n [Blockly.Msg.MIXLY_WIDTH, 'width']\n ];\n this.setColour(DISPLAY_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + Blockly.Msg.MIXLY_MICROBIT_IMAGE);\n this.appendValueInput('VAR')\n .setCheck(\"esp32_image\")\n // .appendField(Blockly.Msg.blockpy_USE_LIST);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setInputsInline(true);\n this.setOutput(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_IMAGE\n var TOOLTIPS = {\n 'height': Blockly.Msg.MIXLY_HEIGHT,\n 'width': Blockly.Msg.MIXLY_WIDTH,\n };\n return mode0 + mode1 + TOOLTIPS[mode];\n });\n }\n};\n\nexport const display_rect = {\n init: function () {\n var brightness_or_not = [\n [Blockly.Msg.MIXLY_4DIGITDISPLAY_ON, '1'],\n [Blockly.Msg.MIXLY_4DIGITDISPLAY_OFF, '0']\n ];\n this.setColour(DISPLAY_HUE);\n // this.appendDummyInput()\n // .appendField(Blockly.Msg.OLED)\n // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RECT)\n .appendField(new Blockly.FieldDropdown(brightness_or_not), 'OP')\n\n // this.appendValueInput(\"PIN\", Number)\n // .setCheck(Number)\n // .setAlign(Blockly.inputs.Align.RIGHT)\n // .appendField(Blockly.Msg.MIXLY_PIN);\n this.jsonInit({\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_SHOW_RECT,\n \"args0\": [{\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"width\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"height\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"checked\": false,\n \"type\": \"field_checkbox\",\n \"name\": \"fill\"\n }\n ]\n });\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_OLED_RECT);\n }\n};\n\nexport const display_line = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n // this.appendDummyInput()\n // .appendField(Blockly.Msg.OLED)\n // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n .setCheck(\"var\");\n // this.appendValueInput(\"PIN\", Number)\n // .setCheck(Number)\n // .setAlign(Blockly.inputs.Align.RIGHT)\n // .appendField(Blockly.Msg.MIXLY_PIN);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_DISPLAY_DRAW)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_DISPLAY_RLINE, \"hline\"], [Blockly.Msg.MIXLY_DISPLAY_VLINE, \"vline\"]]), \"direction\");\n this.jsonInit({\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_SHOW_LINE,\n \"args0\": [{\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"length\"\n }\n ]\n });\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_OLED_LINE);\n }\n};\n\nexport const display_line_arbitrarily = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n // this.appendDummyInput()\n // .appendField(Blockly.Msg.OLED)\n // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n .setCheck(\"var\");\n // this.appendValueInput(\"PIN\", Number)\n // .setCheck(Number)\n // .setAlign(Blockly.inputs.Align.RIGHT)\n // .appendField(Blockly.Msg.MIXLY_PIN);\n this.jsonInit({\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_SHOW_LINE_ARBITRARILY,\n \"args0\": [{\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x1\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y1\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x2\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y2\"\n },\n ]\n });\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_OLED_LINE_ARBIT);\n }\n}\n\nexport const display_get_screen_pixel = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);\n }\n};\n\nexport const display_get_screen_image = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_GET_SCREEN_IMAGE);\n this.setInputsInline(true);\n this.setOutput(true, \"esp32_image\");\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MONITOR_GET_SCREEN_IMAGE_TOOLTIP);\n }\n};\n\nexport const display_bright_screen = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS);\n }\n};\n\nexport const display_blink_rate = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_BLINK_RATE)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_BLINK_RATE);\n }\n};\n\nexport const display_rgb_color = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n // this.appendValueInput(\"PIN\", Number)\n // .setCheck(Number)\n // .setAlign(Blockly.inputs.Align.RIGHT)\n // .appendField(Blockly.Msg.MIXLY_PIN);\n this.appendValueInput(\"_LED_\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_NUM);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_AS)\n .appendField(new Blockly.FieldColour('#f00', null, FIELD_COLOUR_CONFIG), 'FIELDNAME');\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B);\n }\n};\n\nexport const display_show_image_or_string = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('data')\n .setCheck([String, \"esp32_image\", \"List\", 'Tuple'])\n .appendField(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_OR_ANIMATION);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING);\n }\n};\n\nexport const display_scroll_string = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const display_show_image_or_string_delay = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('data')\n .setCheck([String, \"esp32_image\", \"List\", 'Tuple'])\n .appendField(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_OR_ANIMATION);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY);\n }\n};\n\nexport const display_scroll_string_delay = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SCROLL_IMAGE_OR_STRING_DELAY);\n }\n};\n\nexport const display_onoff = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_ESP32_ON, \"ON\"], [Blockly.Msg.MIXLY_ESP32_OFF, \"OFF\"]]), 'ONOFF')\n this.setOutput(true, Boolean);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);\n }\n};\n\n// export const switch = {\n// init: function () {\n// this.setColour(DISPLAY_HUE);\n// this.appendDummyInput(\"\")\n// .appendField(new Blockly.FieldDropdown([\n// [Blockly.Msg.MIXLY_ESP32_ON, \"1\"],\n// [Blockly.Msg.MIXLY_ESP32_OFF, \"0\"]\n// ]), \"flag\");\n// this.setOutput(true);\n// this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);\n// }\n// };\n\nexport const display_fill = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('SUB');\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_LCD_STAT_CLEAR, \"0\"],\n [Blockly.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL, \"1\"]\n ]), \"key\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var TOOLTIPS = {\n '0': Blockly.Msg.MIXLY_LCD_STAT_CLEAR,\n '1': Blockly.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL\n };\n return Blockly.Msg.MIXLY_DF_LCD + TOOLTIPS[mode];\n });\n }\n};\n\nexport const display_tm_use_i2c_init = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('I2CSUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"I2C\")\n .setCheck(\"var\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .appendField(new Blockly.FieldDropdown([\n // [\"MPU9250\", \"MPU9250\"],\n // [\"TM1637\", \"TM1637\"],\n [\"TM1650\", \"TM1650\"]\n ]), \"key\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_USE_I2C_TOOLTIP;\n var TOOLTIPS = {\n // \"MPU9250\": \"MPU9250\",\n // \"TM1637\": \"TM1637\",\n \"TM1650\": \"TM1650\"\n };\n return mode0 + TOOLTIPS[mode]\n });\n }\n};\n\nexport const display_tm1650_power = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY)\n .appendField(new Blockly.FieldDropdown([[\"TM1650\", \"tm1650\"]]), \"TYPE\");\n this.appendValueInput(\"VAR\")\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_ON, \"_on\"], [Blockly.Msg.MIXLY_OFF, \"_off\"], [Blockly.Msg.MIXLY_LCD_STAT_CLEAR, \"_clear\"]]), \"STAT\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_4digitdisplay_power);\n }\n};\n\nexport const display_tm1650_show_num = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY)\n .appendField(new Blockly.FieldDropdown([[\"TM1650\", \"tm1650\"]]), \"TYPE\");\n this.appendValueInput(\"VAR\")\n this.appendValueInput(\"VALUE\")\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SHOW_NUMBER);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n // this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_4digitdisplay_displayString);\n }\n};\n\nexport const display_tm1650_show_dot = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY)\n .appendField(new Blockly.FieldDropdown([[\"TM1650\", \"tm1650\"]]), \"TYPE\");\n this.appendValueInput(\"VAR\")\n this.appendValueInput(\"NO\")\n .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER1)\n this.appendValueInput(\"STAT\")\n .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER2 + Blockly.Msg.MIXLY_4DIGITDISPLAY_DOT)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_4digitdisplay_showDot);\n }\n};\n\nexport const display_animate = {\n init: function () {\n var ANIMATE = [\n [\"ALL_CLOCKS\", 'ALL_CLOCKS'],\n [\"ALL_ARROWS\", 'ALL_ARROWS']\n ];\n this.setColour(DISPLAY_HUE);\n this.setOutput(true, 'Tuple');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_DISPLAY_ANIMATE)\n .appendField(new Blockly.FieldDropdown(ANIMATE), 'ANIMATION')\n //this.setTooltip(Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP);\n }\n};\n\nexport const display_circle = {\n init: function () {\n var brightness_or_not = [\n [Blockly.Msg.MIXLY_4DIGITDISPLAY_ON, '1'],\n [Blockly.Msg.MIXLY_4DIGITDISPLAY_OFF, '0']\n ];\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MIXPY_TURTLE_DRAW_CIRCLE)\n .appendField(new Blockly.FieldDropdown(brightness_or_not), 'OP')\n this.jsonInit({\n \"message0\": Blockly.Msg.MIXLY_HANBIT_SHOW_CIRCLE,\n \"args0\": [{\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"r\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"checked\": false,\n \"type\": \"field_checkbox\",\n \"name\": \"fill\"\n }\n ]\n });\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_TURTLE_DRAW_CIRCLE);\n }\n};\n\nexport const display_triangle = {\n init: function () {\n var brightness_or_not = [\n [Blockly.Msg.MIXLY_4DIGITDISPLAY_ON, '1'],\n [Blockly.Msg.MIXLY_4DIGITDISPLAY_OFF, '0']\n ];\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_DISPLAY_DRAW + Blockly.Msg.MIXLY_HANBIT_DRAW_TRIANGLE)\n .appendField(new Blockly.FieldDropdown(brightness_or_not), 'OP')\n this.jsonInit({\n \"message0\": Blockly.Msg.MIXLY_HANBIT_SHOW_triangle,\n \"args0\": [{\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x0\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y0\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x1\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y1\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x2\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y2\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"checked\": false,\n \"type\": \"field_checkbox\",\n \"name\": \"fill\"\n }\n ]\n });\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_DISPLAY_DRAW + Blockly.Msg.MIXLY_HANBIT_DRAW_TRIANGLE);\n }\n};\n\nexport const display_help = {\n init: function () {\n this.setColour('#555555');\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXGO_ONBOARDDISPLAY_HELP);\n this.setInputsInline(true);\n this.setTooltip('');\n }\n};\n\n//显示-OLED-显示图像\nexport const display_oled_showBitmap = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.OLED_BITMAP);\n this.appendValueInput(\"START_X\", Number)\n .appendField(Blockly.Msg.OLED_START_X)\n .setCheck(Number);\n this.appendValueInput(\"START_Y\", Number)\n .appendField(Blockly.Msg.OLED_START_Y)\n .setCheck(Number);\n this.appendValueInput(\"bitmap_name\", String)\n .appendField(Blockly.Msg.OLED_BITMAP_NAME);\n this.appendValueInput(\"WIDTH\", Number)\n .appendField(Blockly.Msg.MIXLY_WIDTH)\n .setCheck(Number);\n this.appendValueInput(\"HEIGHT\", Number)\n .appendField(Blockly.Msg.MIXLY_HEIGHT)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.OLED_SHOW_BMP_TOOLTIP);\n }\n};\n\n//显示-OLED-画点\nexport const display_oled_drawPixel = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.OLED_DRAWPIXEL);\n this.appendValueInput(\"POS_X\")\n .appendField(Blockly.Msg.OLED_POSX)\n this.appendValueInput(\"POS_Y\")\n .appendField(Blockly.Msg.OLED_POSY)\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.OLED_DRAW_PIXE_TOOLTIP);\n }\n};\n\n//pe:\nexport const display_matrix_use_i2c_init = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('I2CSUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"I2C\")\n .setCheck(\"var\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .appendField(new Blockly.FieldDropdown([\n [\"32x12 Matrix\", \"32x12 Matrix\"]\n ]), \"key\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n\n\n }\n};\n\nexport const display_show_image = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('SUB')\n this.appendValueInput('data')\n .setCheck([String, \"esp32_image\", \"List\", 'Tuple'])\n .appendField(Blockly.Msg.OLED_BITMAP);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING);\n }\n};\n\nexport const display_scroll_string_extern = {\n init: function () {\n this.setColour(DISPLAY_HUE);\n this.appendValueInput('SUB');\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\n","import * as Blockly from 'blockly/core';\n\nconst DISPLAY_EXTERN_HUE = '5BA5A5';\n\n//var IMG = [[\"HEART\", \"HEART\"],[\"HEART_SMALL\", \"HEART_SMALL\"],[\"HAPPY\", \"HAPPY\"],[\"SAD\", \"SAD\"],[\"SMILE\", \"SMILE\"],[\"SILLY\", \"SILLY\"],[\"FABULOUS\", \"FABULOUS\"],[\"SURPRISED\", \"SURPRISED\"],[\"ASLEEP\", \"ASLEEP\"],[\"ANGRY\", \"ANGRY\"],[\"CONFUSED\", \"CONFUSED\"],[\"NO\", \"NO\"],[\"YES\", \"YES\"],[\"LEFT_ARROW\", \"LEFT_ARROW\"],[\"RIGHT_ARROW\", \"RIGHT_ARROW\"],[\"DRESS\", \"DRESS\"],[\"TRANSFORMERS\", \"TRANSFORMERS\"],[\"SCISSORS\", \"SCISSORS\"],[\"EXIT\", \"EXIT\"],[\"TREE\", \"TREE\"],[\"PACMAN\", \"PACMAN\"],[\"TARGET\", \"TARGET\"],[\"TSHIRT\", \"TSHIRT\"],[\"ROLLERSKATE\", \"ROLLERSKATE\"],[\"DUCK\", \"DUCK\"],[\"HOUSE\", \"HOUSE\"],[\"TORTOISE\", \"TORTOISE\"],[\"BUTTERFLY\", \"BUTTERFLY\"],[\"STICKFIGURE\", \"STICKFIGURE\"],[\"GHOST\", \"GHOST\"],[\"PITCHFORK\", \"PITCHFORK\"],[\"MUSIC_QUAVERS\", \"MUSIC_QUAVERS\"],[\"MUSIC_QUAVER\", \"MUSIC_QUAVER\"],[\"MUSIC_CROTCHET\", \"MUSIC_CROTCHET\"],[\"COW\", \"COW\"],[\"RABBIT\", \"RABBIT\"],[\"SQUARE_SMALL\", \"SQUARE_SMALL\"],[\"SQUARE\", \"SQUARE\"],[\"DIAMOND_SMALL\", \"DIAMOND_SMALL\"],[\"DIAMOND\", \"DIAMOND\"],[\"CHESSBOARD\", \"CHESSBOARD\"],[\"TRIANGLE_LEFT\", \"TRIANGLE_LEFT\"],[\"TRIANGLE\", \"TRIANGLE\"],[\"SNAKE\", \"SNAKE\"],[\"UMBRELLA\", \"UMBRELLA\"],[\"SKULL\", \"SKULL\"],[\"GIRAFFE\", \"GIRAFFE\"],[\"SWORD\", \"SWORD\"]];\n// var IMG = [[\"HEART\", \"HEART\"], [\"HEART_SMALL\", \"HEART_SMALL\"], [\"HAPPY\", \"HAPPY\"], [\"SAD\", \"SAD\"], [\"SMILE\", \"SMILE\"], [\"SILLY\", \"SILLY\"], [\"FABULOUS\", \"FABULOUS\"], [\"SURPRISED\", \"SURPRISED\"], [\"ASLEEP\", \"ASLEEP\"], [\"ANGRY\", \"ANGRY\"], [\"CONFUSED\", \"CONFUSED\"], [\"NO\", \"NO\"], [\"YES\", \"YES\"]];\n\n\n\n\n\nexport const display_matrix_use_i2c_init = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('I2CSUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"I2C\")\n .setCheck(\"var\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .appendField(new Blockly.FieldDropdown([\n [\"32x12 Matrix\", \"32x12 Matrix\"],\n [\"16x8 Matrix\", \"16x8 Matrix\"]\n ]), \"key\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n\n\n }\n};\n\nexport const display_matrix_extern_show_image = {\n init: function () {\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('data')\n .setCheck([String, \"esp32_image\", \"List\", 'Tuple'])\n .appendField(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING);\n }\n};\n\nexport const display_matrix_extern_show_image_or_string_delay = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.OLED_DRAWSTR);\n this.appendValueInput(\"space\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.TEXT_CENTER)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MICROPYTHON_DISPLAY_YES, \"True\"],\n [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"False\"]\n ]), 'center')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY);\n }\n};\n\nexport const display_matrix_extern_scroll_string = {\n init: function () {\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const display_matrix_extern_scroll_string_delay = {\n init: function () {\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);\n this.appendValueInput(\"space\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SCROLL_IMAGE_OR_STRING_DELAY);\n }\n};\n\nexport const display_matrix_extern_show_frame_string = {\n init: function () {\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const display_matrix_extern_show_frame_string_delay = {\n init: function () {\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const display_matrix_extern_shift = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MIXLY_UP, 'shift_up'],\n [Blockly.Msg.MIXLY_DOWN, 'shift_down'],\n [Blockly.Msg.MIXLY_LEFT, 'shift_left'],\n [Blockly.Msg.MIXLY_RIGHT, 'shift_right'],\n ];\n //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.setColour(DISPLAY_EXTERN_HUE);\n // this.setOutput(true);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.appendDummyInput('')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET)\n this.appendDummyInput('')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.appendValueInput('val')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_SHIFT)\n .setCheck(Number);\n this.appendDummyInput('')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_UNIT)\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var mode0 = Blockly.Msg.DISPLAY_IMAGE_LET;\n var mode1 = Blockly.Msg.DISPLAY_IMAGE_LET2;\n var mode2 = Blockly.Msg.DISPLAY_IMAGE_LET3;\n var TOOLTIPS = {\n 'up': Blockly.Msg.MIXLY_UP,\n 'down': Blockly.Msg.MIXLY_DOWN,\n 'left': Blockly.Msg.MIXLY_LEFT,\n 'right': Blockly.Msg.MIXLY_RIGHT\n };\n return mode0 + mode1 + TOOLTIPS[mode] + mode2;\n });\n }\n};\n\nexport const display_matrix_extern_get_pixel = {\n init: function () {\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);\n this.appendValueInput('y')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_POINT);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_BRIGHTNESS);\n }\n};\n\nexport const display_matrix_extern_bright_point = {\n init: function () {\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_BRIGHTNESS)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);\n this.appendValueInput('y')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);\n this.appendValueInput(\"STAT\")\n .setCheck([Number, Boolean]);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_DISPLAY_SETPIXEL);\n }\n};\n\nexport const display_matrix_extern_get_screen_pixel = {\n init: function () {\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);\n }\n};\n\nexport const display_matrix_extern_bright_screen = {\n init: function () {\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS + ' 0.0-1.0');\n }\n};\n\nexport const display_matrix_extern_clear = {\n init: function () {\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Clear_display);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Clear_display);\n }\n};\n\n\nexport const display_matrix_extern_image_builtins = {\n init: function () {\n var OPERATORS =\n [[\"HEART\", \"HEART\"], [\"HEART_SMALL\", \"HEART_SMALL\"], [\"HAPPY\", \"HAPPY\"], [\"SAD\", \"SAD\"], [\"SMILE\", \"SMILE\"], [\"SILLY\", \"SILLY\"], [\"FABULOUS\", \"FABULOUS\"], [\"SURPRISED\", \"SURPRISED\"], [\"ASLEEP\", \"ASLEEP\"], [\"ANGRY\", \"ANGRY\"], [\"CONFUSED\", \"CONFUSED\"], [\"NO\", \"NO\"], [\"YES\", \"YES\"]\n // ,[\"LEFT_ARROW\", \"LEFT_ARROW\"],[\"RIGHT_ARROW\", \"RIGHT_ARROW\"],[\"DRESS\", \"DRESS\"],[\"TRANSFORMERS\", \"TRANSFORMERS\"],[\"SCISSORS\", \"SCISSORS\"],[\"EXIT\", \"EXIT\"],[\"TREE\", \"TREE\"],[\"PACMAN\", \"PACMAN\"],[\"TARGET\", \"TARGET\"],[\"TSHIRT\", \"TSHIRT\"],[\"ROLLERSKATE\", \"ROLLERSKATE\"],[\"DUCK\", \"DUCK\"],[\"HOUSE\", \"HOUSE\"],[\"TORTOISE\", \"TORTOISE\"],[\"BUTTERFLY\", \"BUTTERFLY\"],[\"STICKFIGURE\", \"STICKFIGURE\"],[\"GHOST\", \"GHOST\"],[\"PITCHFORK\", \"PITCHFORK\"],[\"MUSIC_QUAVERS\", \"MUSIC_QUAVERS\"],[\"MUSIC_QUAVER\", \"MUSIC_QUAVER\"],[\"MUSIC_CROTCHET\", \"MUSIC_CROTCHET\"],[\"COW\", \"COW\"],[\"RABBIT\", \"RABBIT\"],[\"SQUARE_SMALL\", \"SQUARE_SMALL\"],[\"SQUARE\", \"SQUARE\"],[\"DIAMOND_SMALL\", \"DIAMOND_SMALL\"],[\"DIAMOND\", \"DIAMOND\"],[\"CHESSBOARD\", \"CHESSBOARD\"],[\"TRIANGLE_LEFT\", \"TRIANGLE_LEFT\"],[\"TRIANGLE\", \"TRIANGLE\"],[\"SNAKE\", \"SNAKE\"],[\"UMBRELLA\", \"UMBRELLA\"],[\"SKULL\", \"SKULL\"],[\"GIRAFFE\", \"GIRAFFE\"],[\"SWORD\", \"SWORD\"]\n ];\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Built_in_image1)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'image');\n this.setOutput(true, \"esp32_image\");\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Clear_display);\n }\n};\n\n\nexport const matrix_extern_image_arithmetic = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MICROBIT_DISPLAY_UNION, 'add'],\n [Blockly.Msg.MICROBIT_DISPLAY_MINUS, 'sub']\n ];\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.setColour(DISPLAY_EXTERN_HUE);\n this.setOutput(true, \"esp32_image\");\n this.appendValueInput('A')\n // .setCheck([\"esp32_image\", \"List\", String])\n .appendField(Blockly.Msg.MICROBIT_DISPLAY_MERGE_SHAPE);\n this.appendValueInput('B')\n // .setCheck([\"esp32_image\", \"List\", String])\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n '+': Blockly.Msg.MIXLY_MICROBIT_image_add,\n '-': Blockly.Msg.MIXLY_MICROBIT_image_reduce\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const matrix_extern_image_invert = {\n init: function () {\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('A')\n .setCheck(\"esp32_image\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Invert_image1);\n this.setInputsInline(true);\n this.setOutput(true, \"esp32_image\");\n }\n};\n\n//oled\nexport const display_use_i2c_init = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('I2CSUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"I2C\")\n .setCheck(\"var\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n // this.appendDummyInput(\"\")\n // .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO + \"OLED\")\n // .appendField(new Blockly.FieldDropdown([\n // [\"OLED 128¡Á64\", \"OLED 128¡Á64\"]\n // ]), \"key\");\n this.appendValueInput('row')\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO + \"OLED\")\n .setCheck(Number);\n this.appendValueInput('column')\n .appendField(\"X\")\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip();\n }\n};\n\nexport const display_draw_4strings = {\n init: function () {\n // this.appendDummyInput()\n // .appendField(Blockly.Msg.OLED)\n // this.appendDummyInput(\"\")\n // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')\n // .appendField(Blockly.Msg.OLEDDISPLAY);\n //.appendField(new Blockly.FieldImage(Blockly.pathToBlockly + 'blocks/display-oled-128x64-i2c/display-oled-128x64-i2c.jpg', Blockly.Arduino.imageSize, Blockly.Arduino.imageSize));\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n .setCheck(\"var\");\n this.appendValueInput(\"Text_line1\", 'String')\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.OLEDDISPLAY + Blockly.Msg.line1);\n this.appendValueInput(\"Text_line2\", 'String')\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.line2);\n this.appendValueInput(\"Text_line3\", 'String')\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.line3);\n this.appendValueInput(\"Text_line4\", 'String')\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.line4);\n this.setInputsInline(false);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(DISPLAY_EXTERN_HUE);\n this.setTooltip(Blockly.Msg.MIXLY_DF_LCD + Blockly.Msg.OLEDDISPLAY + Blockly.Msg.MIXLY_MICROBIT_TYPE_STRING);\n }\n};\n\nexport const display_image_size = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MIXLY_HEIGHT, 'height'],\n [Blockly.Msg.MIXLY_WIDTH, 'width']\n ];\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + Blockly.Msg.MIXLY_MICROBIT_IMAGE);\n this.appendValueInput('VAR')\n .setCheck(\"esp32_image\")\n // .appendField(Blockly.Msg.blockpy_USE_LIST);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setInputsInline(true);\n this.setOutput(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_IMAGE\n var TOOLTIPS = {\n 'height': Blockly.Msg.MIXLY_HEIGHT,\n 'width': Blockly.Msg.MIXLY_WIDTH,\n };\n return mode0 + mode1 + TOOLTIPS[mode];\n });\n }\n};\n\nexport const display_rect = {\n init: function () {\n var brightness_or_not = [\n [Blockly.Msg.MIXLY_4DIGITDISPLAY_ON, '1'],\n [Blockly.Msg.MIXLY_4DIGITDISPLAY_OFF, '0']\n ];\n this.setColour(DISPLAY_EXTERN_HUE);\n // this.appendDummyInput()\n // .appendField(Blockly.Msg.OLED)\n // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RECT)\n .appendField(new Blockly.FieldDropdown(brightness_or_not), 'OP')\n\n // this.appendValueInput(\"PIN\", Number)\n // .setCheck(Number)\n // .setAlign(Blockly.inputs.Align.RIGHT)\n // .appendField(Blockly.Msg.MIXLY_PIN);\n this.jsonInit({\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_SHOW_RECT,\n \"args0\": [{\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"width\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"height\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"checked\": false,\n \"type\": \"field_checkbox\",\n \"name\": \"fill\"\n }\n ]\n });\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_OLED_RECT);\n }\n};\n\nexport const display_line = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n // this.appendDummyInput()\n // .appendField(Blockly.Msg.OLED)\n // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n .setCheck(\"var\");\n // this.appendValueInput(\"PIN\", Number)\n // .setCheck(Number)\n // .setAlign(Blockly.inputs.Align.RIGHT)\n // .appendField(Blockly.Msg.MIXLY_PIN);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_DISPLAY_DRAW)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_DISPLAY_RLINE, \"hline\"], [Blockly.Msg.MIXLY_DISPLAY_VLINE, \"vline\"]]), \"direction\");\n this.jsonInit({\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_SHOW_LINE,\n \"args0\": [{\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"length\"\n }\n ]\n });\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_OLED_LINE);\n }\n};\n\nexport const display_line_arbitrarily = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n // this.appendDummyInput()\n // .appendField(Blockly.Msg.OLED)\n // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n .setCheck(\"var\");\n // this.appendValueInput(\"PIN\", Number)\n // .setCheck(Number)\n // .setAlign(Blockly.inputs.Align.RIGHT)\n // .appendField(Blockly.Msg.MIXLY_PIN);\n this.jsonInit({\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_SHOW_LINE_ARBITRARILY,\n \"args0\": [{\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x1\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y1\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x2\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y2\"\n },\n ]\n });\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_OLED_LINE_ARBIT);\n }\n}\n\nexport const display_get_screen_image = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_GET_SCREEN_IMAGE);\n this.setInputsInline(true);\n this.setOutput(true, \"esp32_image\");\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_MONITOR_GET_SCREEN_IMAGE_TOOLTIP);\n }\n};\n\nexport const display_blink_rate = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_BLINK_RATE)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_BLINK_RATE);\n }\n};\n\nexport const display_rgb_color = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RGB)\n this.appendValueInput(\"_LED_\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RGB_NUM);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_AS)\n .appendField(new Blockly.FieldColour('#000', null, {\n colourOptions: ['#f00', '#000'],\n columns: 2\n }), 'FIELDNAME');\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B);\n }\n};\n\nexport const display_onoff = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_ESP32_ON, \"ON\"], [Blockly.Msg.MIXLY_ESP32_OFF, \"OFF\"]]), 'ONOFF')\n this.setOutput(true, Boolean);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);\n }\n};\n\n// export const switch = {\n// init: function () {\n// this.setColour(DISPLAY_EXTERN_HUE);\n// this.appendDummyInput(\"\")\n// .appendField(new Blockly.FieldDropdown([\n// [Blockly.Msg.MIXLY_ESP32_ON, \"1\"],\n// [Blockly.Msg.MIXLY_ESP32_OFF, \"0\"]\n// ]), \"flag\");\n// this.setOutput(true);\n// this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);\n// }\n// };\n\nexport const display_fill = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_LCD_STAT_CLEAR, \"0\"],\n [Blockly.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL, \"1\"]\n ]), \"key\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var TOOLTIPS = {\n '0': Blockly.Msg.MIXLY_LCD_STAT_CLEAR,\n '1': Blockly.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL\n };\n return Blockly.Msg.MIXLY_DF_LCD + TOOLTIPS[mode];\n });\n }\n};\n\nexport const display_animate = {\n init: function () {\n var ANIMATE = [\n [\"ALL_CLOCKS\", 'ALL_CLOCKS'],\n [\"ALL_ARROWS\", 'ALL_ARROWS']\n ];\n this.setColour(DISPLAY_EXTERN_HUE);\n this.setOutput(true, 'Tuple');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_DISPLAY_ANIMATE)\n .appendField(new Blockly.FieldDropdown(ANIMATE), 'ANIMATION')\n //this.setTooltip(Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP);\n }\n};\n\nexport const display_circle = {\n init: function () {\n var brightness_or_not = [\n [Blockly.Msg.MIXLY_4DIGITDISPLAY_ON, '1'],\n [Blockly.Msg.MIXLY_4DIGITDISPLAY_OFF, '0']\n ];\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MIXPY_TURTLE_DRAW_CIRCLE)\n .appendField(new Blockly.FieldDropdown(brightness_or_not), 'OP')\n this.jsonInit({\n \"message0\": Blockly.Msg.MIXLY_HANBIT_SHOW_CIRCLE,\n \"args0\": [{\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"r\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"checked\": false,\n \"type\": \"field_checkbox\",\n \"name\": \"fill\"\n }\n ]\n });\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_TURTLE_DRAW_CIRCLE);\n }\n};\n\nexport const display_triangle = {\n init: function () {\n var brightness_or_not = [\n [Blockly.Msg.MIXLY_4DIGITDISPLAY_ON, '1'],\n [Blockly.Msg.MIXLY_4DIGITDISPLAY_OFF, '0']\n ];\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_DISPLAY_DRAW + Blockly.Msg.MIXLY_HANBIT_DRAW_TRIANGLE)\n .appendField(new Blockly.FieldDropdown(brightness_or_not), 'OP')\n this.jsonInit({\n \"message0\": Blockly.Msg.MIXLY_HANBIT_SHOW_triangle,\n \"args0\": [{\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x0\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y0\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x1\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y1\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x2\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y2\"\n }, {\n \"type\": \"input_dummy\"\n }, {\n \"checked\": false,\n \"type\": \"field_checkbox\",\n \"name\": \"fill\"\n }\n ]\n });\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip('');\n this.setTooltip(Blockly.Msg.MIXLY_DISPLAY_DRAW + Blockly.Msg.MIXLY_HANBIT_DRAW_TRIANGLE);\n }\n};\n\nexport const display_help = {\n init: function () {\n this.setColour('#555555');\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXGO_ONBOARDDISPLAY_HELP);\n this.setInputsInline(true);\n this.setTooltip('');\n }\n};\n\n//显示-OLED-显示图像\nexport const display_oled_showBitmap = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.OLED_BITMAP);\n this.appendValueInput(\"START_X\", Number)\n .appendField(Blockly.Msg.OLED_START_X)\n .setCheck(Number);\n this.appendValueInput(\"START_Y\", Number)\n .appendField(Blockly.Msg.OLED_START_Y)\n .setCheck(Number);\n this.appendValueInput(\"bitmap_name\", String)\n .appendField(Blockly.Msg.OLED_BITMAP_NAME);\n this.appendValueInput(\"WIDTH\", Number)\n .appendField(Blockly.Msg.MIXLY_WIDTH)\n .setCheck(Number);\n this.appendValueInput(\"HEIGHT\", Number)\n .appendField(Blockly.Msg.MIXLY_HEIGHT)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.OLED_SHOW_BMP_TOOLTIP);\n }\n};\n\n//显示-OLED-画点\nexport const display_oled_drawPixel = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.OLED)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.OLED_DRAWPIXEL);\n this.appendValueInput(\"POS_X\")\n .appendField(Blockly.Msg.OLED_POSX)\n this.appendValueInput(\"POS_Y\")\n .appendField(Blockly.Msg.OLED_POSY)\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.OLED_DRAW_PIXE_TOOLTIP);\n }\n};\n\nexport const display_tm_use_i2c_init = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('I2CSUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"I2C\")\n .setCheck(\"var\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .appendField(new Blockly.FieldDropdown([\n // [\"MPU9250\", \"MPU9250\"],\n // [\"TM1637\", \"TM1637\"],\n [\"TM1650\", \"TM1650\"]\n ]), \"key\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_USE_I2C_TOOLTIP;\n var TOOLTIPS = {\n // \"MPU9250\": \"MPU9250\",\n // \"TM1637\": \"TM1637\",\n \"TM1650\": \"TM1650\"\n };\n return mode0 + TOOLTIPS[mode]\n });\n }\n};\n\nexport const display_tm1650_power = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY)\n .appendField(new Blockly.FieldDropdown([[\"TM1650\", \"tm1650\"]]), \"TYPE\");\n this.appendValueInput(\"VAR\")\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_ON, \"on\"], [Blockly.Msg.MIXLY_OFF, \"off\"], [Blockly.Msg.MIXLY_LCD_STAT_CLEAR, \"clear\"]]), \"STAT\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_4digitdisplay_power);\n }\n};\n\nexport const display_tm1650_show_num = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY)\n .appendField(new Blockly.FieldDropdown([[\"TM1650\", \"tm1650\"]]), \"TYPE\");\n this.appendValueInput(\"VAR\")\n this.appendValueInput(\"VALUE\")\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SHOW_NUMBER);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n // this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_4digitdisplay_displayString);\n }\n};\n\nexport const display_tm1650_show_dot = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY)\n .appendField(new Blockly.FieldDropdown([[\"TM1650\", \"tm1650\"]]), \"TYPE\");\n this.appendValueInput(\"VAR\")\n this.appendValueInput(\"NO\")\n .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER1)\n this.appendValueInput(\"STAT\")\n .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER2 + Blockly.Msg.MIXLY_4DIGITDISPLAY_DOT)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_4digitdisplay_showDot);\n }\n};\n\nexport const display_tm1650_set_brightness = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY)\n .appendField(new Blockly.FieldDropdown([[\"TM1650\", \"tm1650\"]]), \"TYPE\");\n this.appendValueInput(\"VAR\")\n this.appendValueInput(\"VALUE\")\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SET_BRIGHTNESS);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_4DIGITDISPLAY_4DIGITDISPLAY_BRIGHTNESS_TOOLTIP);\n }\n};\n\nexport const tft_use_spi_init = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SPISUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"SPI\")\n .setCheck(\"var\");\n this.appendValueInput('PINDC')\n .appendField(\"DC\")\n this.appendValueInput('PINCS')\n .appendField(\"CS\")\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO + Blockly.Msg.MSG.catTFT)\n this.appendValueInput(\"WIDTH\")\n .appendField(Blockly.Msg.MIXLY_WIDTH)\n .setCheck(Number);\n this.appendValueInput(\"HEIGHT\")\n .appendField(Blockly.Msg.MIXLY_HEIGHT)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_turtle_rotate)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"0\"],\n [Blockly.Msg.ANTI_CLOCKWISE + '90°', \"1\"],\n [Blockly.Msg.ANTI_CLOCKWISE + '180°', \"2\"],\n [Blockly.Msg.ANTI_CLOCKWISE + '270°', \"3\"]\n ]), 'rotate')\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n }\n};\n\nexport const tft_show_image_xy = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MSG.catTFT);\n this.appendValueInput('data')\n .appendField(Blockly.Msg.OLED_BITMAP);\n this.appendValueInput(\"x\")\n .setCheck(Number)\n .appendField('x');\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField('y');\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_NUMBER);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.HTML_COLOUR);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING);\n }\n};\n\nexport const display_color_seclet = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(new Blockly.FieldColour('#000', null, {\n colourOptions: [\n // grays\n '#ffffff', '#cccccc', '#c0c0c0', '#999999', '#666666', '#333333', '#000000',\n // reds\n '#ffcccc', '#ff6666', '#ff0000', '#cc0000', '#990000', '#660000', '#330000',\n // oranges\n '#ffcc99', '#ff9966', '#ff9900', '#ff6600', '#cc6600', '#993300', '#663300',\n // yellows\n '#ffff99', '#ffff66', '#ffcc66', '#ffcc33', '#cc9933', '#996633', '#663333',\n // olives\n '#ffffcc', '#ffff33', '#ffff00', '#ffcc00', '#999900', '#666600', '#333300',\n // greens\n '#99ff99', '#66ff99', '#33ff33', '#33cc00', '#009900', '#006600', '#003300',\n // turquoises\n '#99ffff', '#33ffff', '#66cccc', '#00cccc', '#339999', '#336666', '#003333',\n // blues\n '#ccffff', '#66ffff', '#33ccff', '#3366ff', '#3333ff', '#000099', '#000066',\n // purples\n '#ccccff', '#9999ff', '#6666cc', '#6633ff', '#6600cc', '#333399', '#330099',\n // violets\n '#ffccff', '#ff99ff', '#cc66cc', '#cc33cc', '#993399', '#663366', '#330033'\n ],\n columns: 7\n }), \"COLOR\");\n this.setInputsInline(true);\n this.setOutput(true, String);\n }\n};\n\n\nexport const tft_show_image_or_string_delay = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MSG.catTFT);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.OLED_DRAWSTR);\n this.appendValueInput(\"x\")\n .setCheck(Number)\n .appendField('x');\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField('y');\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);\n this.appendValueInput(\"space\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.TEXT_CENTER)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MICROPYTHON_DISPLAY_YES, \"True\"],\n [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"False\"]\n ]), 'center')\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.HTML_COLOUR);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY);\n }\n};\n\n\nexport const tft_scroll_string_delay = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MSG.catTFT);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField('y');\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);\n this.appendValueInput(\"space\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.HTML_COLOUR);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SCROLL_IMAGE_OR_STRING_DELAY);\n }\n};\n\nexport const tft_show_frame_string_delay = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MSG.catTFT);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.HTML_COLOUR);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\n\n\nexport const tft_fill = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catTFT);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_LCD_STAT_CLEAR, \"BLACK\"],\n [Blockly.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL, \"WHITE\"]\n ]), \"key\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var TOOLTIPS = {\n '0': Blockly.Msg.MIXLY_LCD_STAT_CLEAR,\n '1': Blockly.Msg.MIXLY_HANDBIT_DISLPAY_OLED_FILL\n };\n return Blockly.Msg.MIXLY_DF_LCD + TOOLTIPS[mode];\n });\n }\n};\n\nexport const tft_line_arbitrarily = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n // this.appendDummyInput()\n // .appendField(Blockly.Msg.OLED)\n // .appendField(new Blockly.FieldTextInput('lcd'), 'VAR')\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MSG.catTFT)\n .setCheck(\"var\");\n // this.appendValueInput(\"PIN\", Number)\n // .setCheck(Number)\n // .setAlign(Blockly.inputs.Align.RIGHT)\n // .appendField(Blockly.Msg.MIXLY_PIN);\n this.jsonInit({\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_SHOW_LINE_ARBITRARILY,\n \"args0\": [{\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x1\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y1\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"x2\"\n }, {\n \"check\": Number,\n \"type\": \"input_value\",\n \"name\": \"y2\"\n },\n ]\n });\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.HTML_COLOUR);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_OLED_LINE_ARBIT);\n }\n}\n\nexport const display_lcd_use_i2c_init = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('I2CSUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"I2C\")\n .setCheck(\"var\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .appendField(new Blockly.FieldDropdown([\n // [\"MPU9250\", \"MPU9250\"],\n // [\"TM1637\", \"TM1637\"],\n [\"LCD1602\", \"16\"],\n [\"LCD2004\", \"20\"]\n ]), \"key\");\n this.appendValueInput(\"ADDR\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MQTT_SERVER_ADD);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_SETUP;\n var TOOLTIPS = {\n \"16\": \"LCD1602\",\n \"20\": \"LCD2004\"\n };\n return mode0 + TOOLTIPS[mode]\n });\n }\n};\n\nexport const lcd_show_image_or_string_delay = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MSG.catLCD);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.OLED_DRAWSTR);\n this.appendValueInput(\"x\")\n .setCheck(Number)\n .appendField(Blockly.Msg.array2_cols);\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField(Blockly.Msg.array2_rows);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.TEXT_CENTER)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MICROPYTHON_DISPLAY_YES, \"True\"],\n [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"False\"]\n ]), 'center')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY);\n }\n};\n\nexport const lcd_print_string = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MSG.catLCD);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_SERIAL_PRINT + Blockly.Msg.OLED_DRAWSTR);\n this.appendValueInput(\"x\")\n .setCheck(Number)\n .appendField(Blockly.Msg.array2_cols);\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField(Blockly.Msg.array2_rows);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const lcd_backlight = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catLCD);\n this.appendDummyInput()\n .appendField(Blockly.Msg.TFT_Brightness)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_Turn_on_display, \"1\"],\n [Blockly.Msg.MIXLY_MICROBIT_Turn_off_display, \"0\"]\n ]), \"key\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var TOOLTIPS = {\n '1': Blockly.Msg.MIXLY_MICROBIT_Turn_on_display,\n '0': Blockly.Msg.MIXLY_MICROBIT_Turn_off_display\n };\n return Blockly.Msg.MSG.catLCD + Blockly.Msg.TFT_Brightness + TOOLTIPS[mode];\n });\n }\n};\n\nexport const lcd_clear = {\n init: function () {\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catLCD);\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Clear_display);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Clear_display);\n }\n};\n\nexport const display_oled_use_i2c_init = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('I2CSUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"I2C\")\n .setCheck(\"var\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO + 'oled128x64')\n this.appendValueInput(\"ADDR\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MQTT_SERVER_ADD);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_DRIVER)\n .appendField(new Blockly.FieldDropdown([\n ['SSD1306','0'],\n ['SSD1315','1']\n ]),'driver');\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_SETUP;\n var TOOLTIPS = {\n \"16\": \"LCD1602\",\n \"20\": \"LCD2004\"\n };\n return mode0 + TOOLTIPS[mode]\n });\n }\n};\n\nexport const extern_oled_show_image = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catOLED);\n this.appendValueInput('data')\n .appendField(Blockly.Msg.OLED_BITMAP);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING);\n }\n};\n\nexport const extern_oled_show_image_xy = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catOLED);\n this.appendValueInput('data')\n .appendField(Blockly.Msg.OLED_BITMAP);\n this.appendValueInput(\"x\")\n .setCheck(Number)\n .appendField('x');\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField('y');\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_NUMBER);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING);\n }\n};\n\nexport const extern_oled_show_string = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catOLED);\n this.appendValueInput('data')\n .setCheck([String, \"esp32_image\", \"List\", 'Tuple'])\n .appendField(Blockly.Msg.OLED_DRAWSTR);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING);\n }\n};\n\nexport const extern_oled_show_image_or_string_delay = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catOLED);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.OLED_DRAWSTR);\n this.appendValueInput(\"x\")\n .setCheck(Number)\n .appendField('x');\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField('y');\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);\n this.appendValueInput(\"space\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.TEXT_CENTER)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MICROPYTHON_DISPLAY_YES, \"True\"],\n [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"False\"]\n ]), 'center')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY);\n }\n};\n\nexport const extern_oled_scroll_string = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catOLED);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const extern_oled_scroll_string_delay = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catOLED);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField('y');\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);\n this.appendValueInput(\"space\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SCROLL_IMAGE_OR_STRING_DELAY);\n }\n};\n\nexport const extern_oled_show_frame_string = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catOLED);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const extern_oled_show_frame_string_delay = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catOLED);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const extern_oled_shift = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MIXLY_UP, 'shift_up'],\n [Blockly.Msg.MIXLY_DOWN, 'shift_down'],\n [Blockly.Msg.MIXLY_LEFT, 'shift_left'],\n [Blockly.Msg.MIXLY_RIGHT, 'shift_right'],\n ];\n //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catOLED);\n // this.setOutput(true);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.appendDummyInput('')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET)\n this.appendDummyInput('')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.appendValueInput('val')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_SHIFT)\n .setCheck(Number);\n this.appendDummyInput('')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_UNIT)\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var mode0 = Blockly.Msg.DISPLAY_IMAGE_LET;\n var mode1 = Blockly.Msg.DISPLAY_IMAGE_LET2;\n var mode2 = Blockly.Msg.DISPLAY_IMAGE_LET3;\n var TOOLTIPS = {\n 'up': Blockly.Msg.MIXLY_UP,\n 'down': Blockly.Msg.MIXLY_DOWN,\n 'left': Blockly.Msg.MIXLY_LEFT,\n 'right': Blockly.Msg.MIXLY_RIGHT\n };\n return mode0 + mode1 + TOOLTIPS[mode] + mode2;\n });\n }\n};\n\nexport const extern_oled_get_pixel = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catOLED);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);\n this.appendValueInput('y')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_POINT);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_BRIGHTNESS);\n }\n};\n\nexport const extern_oled_bright_point = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catOLED);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_BRIGHTNESS)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);\n this.appendValueInput('y')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);\n this.appendValueInput(\"STAT\")\n .setCheck([Number, Boolean]);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_DISPLAY_SETPIXEL);\n }\n};\n\n\n\nexport const extern_oled_clear = {\n init: function () {\n this.setColour(DISPLAY_EXTERN_HUE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MSG.catOLED);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Clear_display);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Clear_display);\n }\n};\n\nexport const extern_oled_shape_rect = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_EXTERN_HUE,\n \"args0\": [\n {\n \"name\": \"SUB\",\n\n \"type\": \"input_value\"\n },\n {\n \"name\": \"state\",\n \"options\": [\n [Blockly.Msg.MPYTHON_DISPLAY_MODE_1, '1'],\n [Blockly.Msg.MPYTHON_DISPLAY_MODE_0, '0']\n ],\n \"type\": \"field_dropdown\"\n },\n {\n \"name\": \"shape\",\n \"options\": [\n [Blockly.Msg.MPYTHON_DISPLAY_HOLLOW, 'rect'],\n [Blockly.Msg.MPYTHON_DISPLAY_SOLID, 'fill_rect']\n ],\n \"type\": \"field_dropdown\"\n },\n {\n \"type\": \"input_dummy\"\n },\n {\n \"name\": \"x\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"y\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"w\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"h\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n }\n\n ],\n \"inputsInline\": true,\n \"helpUrl\": Blockly.Msg.mpython_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_DISPLAY_SHAPE_RECT_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_DISPLAY_SHAPE_RECT_MESSAGE1,\n \"nextStatement\": null,\n \"previousStatement\": null\n });\n }\n};\n\nexport const extern_oled_hvline = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_EXTERN_HUE,\n \"args0\": [\n {\n \"name\": \"SUB\",\n\n \"type\": \"input_value\"\n },\n {\n \"name\": \"state\",\n \"options\": [\n [Blockly.Msg.MPYTHON_DISPLAY_MODE_1, '1'],\n [Blockly.Msg.MPYTHON_DISPLAY_MODE_0, '0']\n ],\n \"type\": \"field_dropdown\"\n },\n {\n \"name\": \"dir_h_v\",\n \"options\": [\n [Blockly.Msg.mpython_vertical, '0'],\n [Blockly.Msg.mpython_horizontal, '1']\n ],\n \"type\": \"field_dropdown\"\n },\n {\n \"type\": \"input_dummy\"\n },\n {\n \"name\": \"x\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"y\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"length\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n }\n\n ],\n \"inputsInline\": true,\n \"helpUrl\": Blockly.Msg.mpython_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_DISPLAY_HVLINE_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_DISPLAY_HVLINE_MESSAGE1,\n \"nextStatement\": null,\n \"previousStatement\": null\n });\n }\n};\n\nexport const extern_oled_line = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_EXTERN_HUE,\n \"args0\": [\n {\n \"name\": \"SUB\",\n\n \"type\": \"input_value\"\n },\n {\n \"name\": \"state\",\n \"options\": [[Blockly.Msg.mpython_display_hline_1, '1'], [Blockly.Msg.mpython_display_hline_0, '0']],\n \"type\": \"field_dropdown\"\n },\n {\n \"type\": \"input_dummy\"\n }, {\n \"name\": \"x1\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"y1\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"x2\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"y2\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n }\n\n ],\n \"inputsInline\": true,\n \"helpUrl\": Blockly.Msg.mpython_HELPURL,\n \"tooltip\": Blockly.Msg.mpython_display_line_TOOLTIP,\n \"message0\": Blockly.Msg.mpython_display_line_MESSAGE1,\n \"nextStatement\": null,\n \"previousStatement\": null\n });\n }\n};","import * as Blockly from 'blockly/core';\nimport { Boards, Profile } from 'mixly';\n\nconst DISPLAY_ONBOARD_HUE = '#569A98';\n\nexport const display_show_image = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck([String, \"esp32_image\", \"List\", 'Tuple'])\n .appendField(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n var version = Boards.getSelectedBoardKey()\n if (version == 'micropython:esp32:mixbot') {\n this.setTooltip(Blockly.Msg.MIXLY_MIXBOT_SHOW_SCROLL_STRING_TOOLTIP);\n }\n }\n};\n\nexport const display_show_image_or_string_delay = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.OLED_DRAWSTR);\n this.appendValueInput(\"space\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.TEXT_CENTER)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MICROPYTHON_DISPLAY_YES, \"True\"],\n [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"False\"]\n ]), 'center')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n\n }\n};\n\nexport const display_scroll_string = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const display_scroll_string_delay = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);\n this.appendValueInput(\"space\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n\n }\n};\n\nexport const display_show_frame_string = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const display_show_frame_string_delay = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const display_image_create = {\n init: function () {\n this.appendDummyInput('')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)\n for (let i = 0; i < 12; i++) {\n let dummyInputObj = this.appendDummyInput();\n for (let j = 0; j < 32; j++) {\n dummyInputObj.appendField(new Blockly.FieldColour('#000', null, {\n colourOptions: ['#f00', '#000'],\n columns: 2\n }), i + '-' + j);\n }\n }\n this.setOutput(true);\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1);\n }\n};\n\nexport const display_image_builtins = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_ONBOARD_HUE,\n \"args0\": [{\n \"name\": \"image\",\n \"options\": [[\"HEART\", \"HEART\"], [\"HEART_SMALL\", \"HEART_SMALL\"], [\"HAPPY\", \"HAPPY\"], [\"SAD\", \"SAD\"], [\"SMILE\", \"SMILE\"], [\"SILLY\", \"SILLY\"], [\"FABULOUS\", \"FABULOUS\"], [\"SURPRISED\", \"SURPRISED\"], [\"ASLEEP\", \"ASLEEP\"], [\"ANGRY\", \"ANGRY\"], [\"CONFUSED\", \"CONFUSED\"], [\"NO\", \"NO\"], [\"YES\", \"YES\"]\n // ,[\"LEFT_ARROW\", \"LEFT_ARROW\"],[\"RIGHT_ARROW\", \"RIGHT_ARROW\"],[\"DRESS\", \"DRESS\"],[\"TRANSFORMERS\", \"TRANSFORMERS\"],[\"SCISSORS\", \"SCISSORS\"],[\"EXIT\", \"EXIT\"],[\"TREE\", \"TREE\"],[\"PACMAN\", \"PACMAN\"],[\"TARGET\", \"TARGET\"],[\"TSHIRT\", \"TSHIRT\"],[\"ROLLERSKATE\", \"ROLLERSKATE\"],[\"DUCK\", \"DUCK\"],[\"HOUSE\", \"HOUSE\"],[\"TORTOISE\", \"TORTOISE\"],[\"BUTTERFLY\", \"BUTTERFLY\"],[\"STICKFIGURE\", \"STICKFIGURE\"],[\"GHOST\", \"GHOST\"],[\"PITCHFORK\", \"PITCHFORK\"],[\"MUSIC_QUAVERS\", \"MUSIC_QUAVERS\"],[\"MUSIC_QUAVER\", \"MUSIC_QUAVER\"],[\"MUSIC_CROTCHET\", \"MUSIC_CROTCHET\"],[\"COW\", \"COW\"],[\"RABBIT\", \"RABBIT\"],[\"SQUARE_SMALL\", \"SQUARE_SMALL\"],[\"SQUARE\", \"SQUARE\"],[\"DIAMOND_SMALL\", \"DIAMOND_SMALL\"],[\"DIAMOND\", \"DIAMOND\"],[\"CHESSBOARD\", \"CHESSBOARD\"],[\"TRIANGLE_LEFT\", \"TRIANGLE_LEFT\"],[\"TRIANGLE\", \"TRIANGLE\"],[\"SNAKE\", \"SNAKE\"],[\"UMBRELLA\", \"UMBRELLA\"],[\"SKULL\", \"SKULL\"],[\"GIRAFFE\", \"GIRAFFE\"],[\"SWORD\", \"SWORD\"]\n ],\n \"type\": \"field_dropdown\"\n }],\n \"output\": [\"esp32_image\", \"List\"],\n \"helpUrl\": \"https://microbit-micropython.readthedocs.io/en/latest/image.html#attributes\",\n \"tooltip\": Blockly.Msg.MIXLY_MICROBIT_Built_in_image1,\n \"message0\": Blockly.Msg.MIXLY_MICROBIT_Built_in_image\n });\n }\n};\n\nexport const display_image_builtins_all = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Built_in_image1)\n .appendField(new Blockly.FieldDropdown(Profile.default.builtinimg), 'image');\n this.setOutput(true, [\"esp32_image\", \"List\"]);\n }\n};\n\nexport const image_arithmetic = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MICROBIT_DISPLAY_UNION, 'add'],\n [Blockly.Msg.MICROBIT_DISPLAY_MINUS, 'sub']\n ];\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.setOutput(true, \"esp32_image\");\n this.appendValueInput('A')\n // .setCheck([\"esp32_image\", \"List\", String])\n .appendField(Blockly.Msg.MICROBIT_DISPLAY_MERGE_SHAPE);\n this.appendValueInput('B')\n // .setCheck([\"esp32_image\", \"List\", String])\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n '+': Blockly.Msg.MIXLY_MICROBIT_image_add,\n '-': Blockly.Msg.MIXLY_MICROBIT_image_reduce\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const image_invert = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('A')\n .setCheck(\"esp32_image\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Invert_image1);\n this.setInputsInline(true);\n this.setOutput(true, \"esp32_image\");\n }\n};\n\nexport const display_shift = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MIXLY_UP, 'shift_up'],\n [Blockly.Msg.MIXLY_DOWN, 'shift_down'],\n [Blockly.Msg.MIXLY_LEFT, 'shift_left'],\n [Blockly.Msg.MIXLY_RIGHT, 'shift_right'],\n ];\n //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);\n this.setColour(DISPLAY_ONBOARD_HUE);\n // this.setOutput(true);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.appendDummyInput('')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET)\n this.appendDummyInput('')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.appendValueInput('val')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_SHIFT)\n .setCheck(Number);\n this.appendDummyInput('')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_UNIT)\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var mode0 = Blockly.Msg.DISPLAY_IMAGE_LET;\n var mode1 = Blockly.Msg.DISPLAY_IMAGE_LET2;\n var mode2 = Blockly.Msg.DISPLAY_IMAGE_LET3;\n var TOOLTIPS = {\n 'shift_up': Blockly.Msg.MIXLY_UP,\n 'shift_down': Blockly.Msg.MIXLY_DOWN,\n 'shift_left': Blockly.Msg.MIXLY_LEFT,\n 'shift_right': Blockly.Msg.MIXLY_RIGHT\n };\n return mode0 + mode1 + TOOLTIPS[mode] + mode2;\n });\n }\n};\n\nexport const display_get_pixel = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);\n this.appendValueInput('y')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_POINT);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_BRIGHTNESS);\n }\n};\n\nexport const display_bright_point = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_BRIGHTNESS)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);\n this.appendValueInput('y')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);\n this.appendValueInput(\"STAT\")\n .setCheck([Number, Boolean]);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_DISPLAY_SETPIXEL);\n }\n};\n\nexport const display_get_screen_pixel = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);\n }\n};\n\nexport const display_bright_screen = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS + ' 0.0-1.0');\n }\n};\n\nexport const display_clear = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Clear_display);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Clear_display);\n }\n};\n\n\n\n\n\n\n\n//mixgo_me onboard_matrix below:\n\n\n\nexport const mixgome_display_image_create = {\n init: function () {\n this.appendDummyInput('')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)\n for (let i = 0; i < 5; i++) {\n let dummyInputObj = this.appendDummyInput();\n for (let j = 0; j < 8; j++) {\n dummyInputObj.appendField(new Blockly.FieldColour('#000', null, {\n colourOptions: ['#f00', '#000'],\n columns: 2\n }), i + '-' + j);\n }\n }\n this.setOutput(true);\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1);\n }\n};\n\nexport const mixgomini_display_image_create = {\n init: function () {\n this.appendDummyInput('')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)\n for (let i = 0; i < 8; i++) {\n let dummyInputObj = this.appendDummyInput();\n for (let j = 0; j < 12; j++) {\n dummyInputObj.appendField(new Blockly.FieldColour('#000', null, {\n colourOptions: ['#f00', '#000'],\n columns: 2\n }), i + '-' + j);\n }\n }\n this.setOutput(true);\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1);\n }\n};\n\nexport const mixgo_display_image_create_new = {\n init: function () {\n this.appendDummyInput('')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)\n for (let i = 0; i < 8; i++) {\n let dummyInputObj = this.appendDummyInput();\n for (let j = 0; j < 16; j++) {\n dummyInputObj.appendField(new Blockly.FieldColour('#000', null, {\n colourOptions: ['#f00', '#000'],\n columns: 2\n }), i + '-' + j);\n }\n }\n this.setOutput(true, \"esp32_image\");\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1);\n }\n};\n\n\n\nexport const mixgome_display_font = {\n init: function () {\n var OPERATORS = [\n ['4x5' + Blockly.Msg.MIXGO_ME_DISPLAY_HORIZONTAL, \"'4x5'\"],\n ['5x5' + Blockly.Msg.MIXGO_ME_DISPLAY_HORIZONTAL, \"'5x5'\"],\n ['5x8' + Blockly.Msg.MIXGO_ME_DISPLAY_VERTICAL, \"'5x8'\"]\n ];\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.OLED_SET_FONT)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n\n }\n};\n\n\n\n//mpython\n\nexport const onboard_oled_show_image = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .appendField(Blockly.Msg.OLED_BITMAP);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING);\n }\n};\n\nexport const onboard_oled_show_image_xy = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .appendField(Blockly.Msg.OLED_BITMAP);\n this.appendValueInput(\"x\")\n .setCheck(Number)\n .appendField('x');\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField('y');\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_NUMBER);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING);\n }\n};\n\nexport const onboard_oled_show_string = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck([String, \"esp32_image\", \"List\", 'Tuple'])\n .appendField(Blockly.Msg.OLED_DRAWSTR);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING);\n }\n};\n\nexport const onboard_oled_show_image_or_string_delay = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.OLED_DRAWSTR);\n this.appendValueInput(\"x\")\n .setCheck(Number)\n .appendField('x');\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField('y');\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);\n this.appendValueInput(\"space\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.TEXT_CENTER)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MICROPYTHON_DISPLAY_YES, \"True\"],\n [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"False\"]\n ]), 'center')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY);\n }\n};\n\nexport const onboard_oled_scroll_string_delay = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField('y');\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);\n this.appendValueInput(\"space\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SCROLL_IMAGE_OR_STRING_DELAY);\n }\n};\n\n\nexport const onboard_oled_show_frame_string_delay = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const onboard_oled_bright_point = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_BRIGHTNESS)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);\n this.appendValueInput('y')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);\n this.appendValueInput(\"STAT\")\n .setCheck([Number, Boolean]);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_DISPLAY_SETPIXEL);\n }\n};\n\nexport const mpython_display_shape_rect = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_ONBOARD_HUE,\n \"args0\": [\n {\n \"name\": \"state\",\n \"options\": [\n [Blockly.Msg.MPYTHON_DISPLAY_MODE_1, '1'],\n [Blockly.Msg.MPYTHON_DISPLAY_MODE_0, '0']\n ],\n \"type\": \"field_dropdown\"\n },\n {\n \"name\": \"shape\",\n \"options\": [\n [Blockly.Msg.MPYTHON_DISPLAY_HOLLOW, 'rect'],\n [Blockly.Msg.MPYTHON_DISPLAY_SOLID, 'fill_rect']\n ],\n \"type\": \"field_dropdown\"\n },\n {\n \"type\": \"input_dummy\"\n },\n {\n \"name\": \"x\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"y\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"w\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"h\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n }\n\n ],\n \"inputsInline\": true,\n \"helpUrl\": Blockly.Msg.mpython_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_DISPLAY_SHAPE_RECT_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_DISPLAY_SHAPE_RECT_MESSAGE0,\n \"nextStatement\": null,\n \"previousStatement\": null\n });\n }\n};\n\nexport const mpython_display_hvline = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_ONBOARD_HUE,\n \"args0\": [\n {\n \"name\": \"state\",\n \"options\": [\n [Blockly.Msg.MPYTHON_DISPLAY_MODE_1, '1'],\n [Blockly.Msg.MPYTHON_DISPLAY_MODE_0, '0']\n ],\n \"type\": \"field_dropdown\"\n },\n {\n \"name\": \"dir_h_v\",\n \"options\": [\n [Blockly.Msg.mpython_vertical, '0'],\n [Blockly.Msg.mpython_horizontal, '1']\n ],\n \"type\": \"field_dropdown\"\n },\n {\n \"type\": \"input_dummy\"\n },\n {\n \"name\": \"x\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"y\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"length\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n }\n\n ],\n \"inputsInline\": true,\n \"helpUrl\": Blockly.Msg.mpython_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_DISPLAY_HVLINE_TOOLTIP,\n \"message0\": Blockly.Msg.MPYTHON_DISPLAY_HVLINE_MESSAGE0,\n \"nextStatement\": null,\n \"previousStatement\": null\n });\n }\n};\n\nexport const mpython_display_line = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_ONBOARD_HUE,\n \"args0\": [\n {\n \"name\": \"state\",\n \"options\": [[Blockly.Msg.mpython_display_hline_1, '1'], [Blockly.Msg.mpython_display_hline_0, '0']],\n \"type\": \"field_dropdown\"\n },\n {\n \"type\": \"input_dummy\"\n }, {\n \"name\": \"x1\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"y1\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"x2\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"y2\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n }\n\n ],\n \"inputsInline\": true,\n \"helpUrl\": Blockly.Msg.mpython_HELPURL,\n \"tooltip\": Blockly.Msg.mpython_display_line_TOOLTIP,\n \"message0\": Blockly.Msg.mpython_display_line_MESSAGE0,\n \"nextStatement\": null,\n \"previousStatement\": null\n });\n }\n};\n\nexport const mpython_pbm_image = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_ONBOARD_HUE,\n \"args0\": [\n {\n \"type\": \"field_label\",\n \"name\": \"size_image\",\n \"text\": Blockly.Msg.MIXLY_MICROBIT_Built_in_image1\n },\n\n {\n \"name\": \"path\",\n \"options\": [\n [\"Heart\", \"Heart\"],\n [\"Angry\", \"Angry\"],\n [\"Bored\", \"Bored\"],\n [\"Confused\", \"Confused\"],\n [\"Happy\", \"Happy\"],\n [\"Paper\", \"Paper\"],\n [\"Rock\", \"Rock\"],\n [\"Sad\", \"Sad\"],\n [\"Scissors\", \"Scissors\"],\n [\"Silly\", \"Silly\"],\n [\"Sleep\", \"Sleep\"],\n [\"Small_heart\", \"Small_heart\"],\n [\"Small_paper\", \"Small_paper\"],\n [\"Small_rock\", \"Small_rock\"],\n [\"Small_scissors\", \"Small_scissors\"],\n [\"Smile\", \"Smile\"],\n [\"Surprise\", \"Surprise\"],\n [\"Wonderful\", \"Wonderful\"],\n [\"Eyes_Angry\", \"Eyes_Angry\"],\n [\"Awake\", \"Awake\"],\n [\"Black_eye\", \"Black_eye\"],\n [\"Bottom_left\", \"Bottom_left\"],\n [\"Bottom_right\", \"Bottom_right\"],\n [\"Crazy_1\", \"Crazy_1\"],\n [\"Crazy_2\", \"Crazy_2\"],\n [\"Disappointed\", \"Disappointed\"],\n [\"Dizzy\", \"Dizzy\"],\n [\"Down\", \"Down\"],\n [\"Evil\", \"Evil\"],\n [\"Hurt\", \"Hurt\"],\n [\"Knocked_out\", \"Knocked_out\"],\n [\"Love\", \"Love\"],\n [\"Middle_left\", \"Middle_left\"],\n [\"Middle_right\", \"Middle_right\"],\n [\"Neutral\", \"Neutral\"],\n [\"Nuclear\", \"Nuclear\"],\n [\"Pinch_left\", \"Pinch_left\"],\n [\"Pinch_middle\", \"Pinch_middle\"],\n [\"Pinch_right\", \"Pinch_right\"],\n [\"Tear\", \"Tear\"],\n [\"Tired_left\", \"Tired_left\"],\n [\"Tired_middle\", \"Tired_middle\"],\n [\"Tired_right\", \"Tired_right\"],\n [\"Toxic\", \"Toxic\"],\n [\"Up\", \"Up\"],\n [\"Winking\", \"Winking\"],\n [\"Accept\", \"Accept\"],\n [\"Backward\", \"Backward\"],\n [\"Decline\", \"Decline\"],\n [\"Forward\", \"Forward\"],\n [\"Left\", \"Left\"],\n [\"No_go\", \"No_go\"],\n [\"Question_mark\", \"Question_mark\"],\n [\"Right\", \"Right\"],\n [\"Stop_1\", \"Stop_1\"],\n [\"Stop_2\", \"Stop_2\"],\n [\"Thumbs_down\", \"Thumbs_down\"],\n [\"Thumbs_up\", \"Thumbs_up\"],\n [\"Warning\", \"Warning\"],\n [\"Bomb\", \"Bomb\"],\n [\"Boom\", \"Boom\"],\n [\"Fire\", \"Fire\"],\n [\"Flowers\", \"Flowers\"],\n [\"Forest\", \"Forest\"],\n [\"Lightning\", \"Lightning\"],\n [\"Light_off\", \"Light_off\"],\n [\"Light_on\", \"Light_on\"],\n [\"Night\", \"Night\"],\n [\"Pirate\", \"Pirate\"],\n [\"Snow\", \"Snow\"],\n [\"Target\", \"Target\"],\n [\"Bar_0\", \"Bar_0\"],\n [\"Bar_1\", \"Bar_1\"],\n [\"Bar_2\", \"Bar_2\"],\n [\"Bar_3\", \"Bar_3\"],\n [\"Bar_4\", \"Bar_4\"],\n [\"Dial_0\", \"Dial_0\"],\n [\"Dial_1\", \"Dial_1\"],\n [\"Dial_2\", \"Dial_2\"],\n [\"Dial_3\", \"Dial_3\"],\n [\"Dial_4\", \"Dial_4\"],\n [\"Dots_0\", \"Dots_0\"],\n [\"Dots_1\", \"Dots_1\"],\n [\"Dots_2\", \"Dots_2\"],\n [\"Dots_3\", \"Dots_3\"],\n [\"Hourglass_0\", \"Hourglass_0\"],\n [\"Hourglass_1\", \"Hourglass_1\"],\n [\"Hourglass_2\", \"Hourglass_2\"],\n [\"Timer_0\", \"Timer_0\"],\n [\"Timer_1\", \"Timer_1\"],\n [\"Timer_2\", \"Timer_2\"],\n [\"Timer_3\", \"Timer_3\"],\n [\"Timer_4\", \"Timer_4\"],\n [\"Water_level_0\", \"Water_level_0\"],\n [\"Water_level_1\", \"Water_level_1\"],\n [\"Water_level_2\", \"Water_level_2\"],\n [\"Water_level_3\", \"Water_level_3\"],\n\n\n ],\n \"type\": \"field_dropdown\"\n }\n ],\n \"output\": \"String\",\n \"helpUrl\": '',\n \"tooltip\": '',\n \"message0\": '%1 %2'\n });\n }\n};\n\n//mixbot onboard_matrix below:\n\n\n\nexport const mixbot_display_image_create = {\n init: function () {\n this.appendDummyInput('')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)\n for (let i = 0; i < 5; i++) {\n let dummyInputObj = this.appendDummyInput();\n for (let j = 0; j < 5; j++) {\n dummyInputObj.appendField(new Blockly.FieldColour('#000', null, {\n colourOptions: ['#f00', '#000'],\n columns: 2\n }), i + '-' + j);\n }\n }\n this.setOutput(true);\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1);\n }\n};\n\nexport const mixbot_display_get_screen_pixel = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);\n }\n};\n\nexport const mixbot_display_get_ambientbright = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXBOT_AMBIENTBRIGHT);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n }\n};\n\nexport const mixbot_display_bright_screen = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS + ' 0.0-1.0');\n }\n};\n\nexport const mixbot_display_rotate = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.mixpy_PL_PIE_SHADOW_N, '0'],\n [Blockly.Msg.CLOCKWISE + '90' + Blockly.Msg.blockpy_setheading_degree, '1'],\n [Blockly.Msg.CLOCKWISE + '180' + Blockly.Msg.blockpy_setheading_degree, '2'],\n [Blockly.Msg.CLOCKWISE + '270' + Blockly.Msg.blockpy_setheading_degree, '3']\n ];\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXBOT_SCREEN_ROTATE)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n\n }\n};\n\nexport const bitbot_display_image_create = {\n init: function () {\n this.appendDummyInput('')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE)\n for (let i = 0; i < 12; i++) {\n let dummyInputObj = this.appendDummyInput();\n for (let j = 0; j < 12; j++) {\n dummyInputObj.appendField(new Blockly.FieldColour('#000', null, {\n colourOptions: ['#f00', '#000'],\n columns: 2\n }), i + '-' + j);\n }\n }\n this.setOutput(true);\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1);\n }\n};\n\n//mixgo_nova onboard tft below:\nexport const onboard_tft_show_image = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .appendField(Blockly.Msg.OLED_BITMAP);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING);\n }\n};\n\nexport const onboard_tft_show_image_xy = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .appendField(Blockly.Msg.OLED_BITMAP);\n this.appendValueInput(\"x\")\n .setCheck(Number)\n .appendField('x');\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField('y');\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_NUMBER);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.HTML_COLOUR);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.OLED_BITMAP_OR_STRING);\n }\n};\n\nexport const onboard_tft_show_image_or_string_delay = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.OLED_DRAWSTR);\n this.appendValueInput(\"x\")\n .setCheck(Number)\n .appendField('x');\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField('y');\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);\n this.appendValueInput(\"space\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.TEXT_CENTER)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MICROPYTHON_DISPLAY_YES, \"True\"],\n [Blockly.Msg.MICROPYTHON_DISPLAY_NO, \"False\"]\n ]), 'center')\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.HTML_COLOUR);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SHOW_IMAGE_OR_STRING_DELAY);\n }\n};\n\nexport const onboard_tft_scroll_string = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const onboard_tft_scroll_string_delay = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_STRING);\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField('y');\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);\n this.appendValueInput(\"space\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MICROPYTHON_DISPLAY_FONT_SPACE);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.HTML_COLOUR);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SCROLL_IMAGE_OR_STRING_DELAY);\n }\n};\n\nexport const onboard_tft_show_frame_string = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const onboard_tft_show_frame_string_delay = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_MONITOR_SHOW_FRAME);\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_TURTLE_WRITE_FONT_NUM);\n this.appendValueInput(\"time\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SCROLL_INTERVAL);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.HTML_COLOUR);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const onboard_tft_display_shape_rect = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_ONBOARD_HUE,\n \"args0\": [\n {\n \"name\": \"shape\",\n \"options\": [\n [Blockly.Msg.MPYTHON_DISPLAY_HOLLOW, 'rect'],\n [Blockly.Msg.MPYTHON_DISPLAY_SOLID, 'fill_rect']\n ],\n \"type\": \"field_dropdown\"\n },\n {\n \"type\": \"input_dummy\"\n },\n {\n \"name\": \"x\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"y\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"w\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"h\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"VAR\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n }\n\n ],\n \"inputsInline\": true,\n \"helpUrl\": Blockly.Msg.mpython_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_DISPLAY_SHAPE_RECT_TOOLTIP,\n \"message0\": Blockly.Msg.ONBOARD_TFT_DISPLAY_SHAPE_RECT_MESSAGE0,\n \"nextStatement\": null,\n \"previousStatement\": null\n });\n }\n};\n\nexport const onboard_tft_display_hvline = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_ONBOARD_HUE,\n \"args0\": [\n {\n \"name\": \"dir_h_v\",\n \"options\": [\n [Blockly.Msg.mpython_vertical, '0'],\n [Blockly.Msg.mpython_horizontal, '1']\n ],\n \"type\": \"field_dropdown\"\n },\n {\n \"type\": \"input_dummy\"\n },\n {\n \"name\": \"x\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"y\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"length\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"VAR\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n }\n\n ],\n \"inputsInline\": true,\n \"helpUrl\": Blockly.Msg.mpython_HELPURL,\n \"tooltip\": Blockly.Msg.MPYTHON_DISPLAY_HVLINE_TOOLTIP,\n \"message0\": Blockly.Msg.ONBOARD_TFT_DISPLAY_HVLINE_MESSAGE0,\n \"nextStatement\": null,\n \"previousStatement\": null\n });\n }\n};\n\nexport const onboard_tft_display_line = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_ONBOARD_HUE,\n \"args0\": [\n {\n \"type\": \"input_dummy\"\n }, {\n \"name\": \"x1\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"y1\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"x2\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"y2\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"VAR\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n }\n\n ],\n \"inputsInline\": true,\n \"helpUrl\": Blockly.Msg.mpython_HELPURL,\n \"tooltip\": Blockly.Msg.mpython_display_line_TOOLTIP,\n \"message0\": Blockly.Msg.mpython_display_line_MESSAGE0,\n \"nextStatement\": null,\n \"previousStatement\": null\n });\n }\n};\n\nexport const onboard_tft_shift = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MIXLY_UP, 'shift_up'],\n [Blockly.Msg.MIXLY_DOWN, 'shift_down'],\n [Blockly.Msg.MIXLY_LEFT, 'shift_left'],\n [Blockly.Msg.MIXLY_RIGHT, 'shift_right'],\n ];\n //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);\n this.setColour(DISPLAY_ONBOARD_HUE);\n // this.setOutput(true);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.appendDummyInput('')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET)\n this.appendDummyInput('')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.appendValueInput('val')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_SHIFT)\n .setCheck(Number);\n this.appendDummyInput('')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_UNIT)\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var mode0 = Blockly.Msg.DISPLAY_IMAGE_LET;\n var mode1 = Blockly.Msg.DISPLAY_IMAGE_LET2;\n var mode2 = Blockly.Msg.DISPLAY_IMAGE_LET3;\n var TOOLTIPS = {\n 'up': Blockly.Msg.MIXLY_UP,\n 'down': Blockly.Msg.MIXLY_DOWN,\n 'left': Blockly.Msg.MIXLY_LEFT,\n 'right': Blockly.Msg.MIXLY_RIGHT\n };\n return mode0 + mode1 + TOOLTIPS[mode] + mode2;\n });\n }\n};\n\nexport const onboard_tft_get_pixel = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendDummyInput('')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);\n this.appendValueInput('y')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);\n this.appendDummyInput()\n .appendField(Blockly.Msg.HTML_COLOUR);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_BRIGHTNESS);\n }\n};\n\nexport const onboard_tft_bright_point = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_LCD_SETCOLOR)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_GET_POINT_X);\n this.appendValueInput('y')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_PLOT_POINT_Y);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.HTML_COLOUR);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_DISPLAY_SETPIXEL);\n }\n};\n\n\n\nexport const onboard_tft_clear = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Clear_display);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Clear_display);\n }\n};\n\nexport const onboard_tft_get_screen_pixel = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_GET_SCREEN_BRIGHTNESS);\n }\n};\n\nexport const onboard_tft_bright_screen = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('x')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_JS_MONITOR_SET_SCREEN_BRIGHTNESS + ' 0.0-1.0');\n }\n};\n\nexport const onboard_tft_fill = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_SCREEN_FILL)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const onboard_tft_clock_init = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_INIT_CLOCK);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_CENTER_POS);\n this.appendValueInput(\"x\")\n .setCheck(Number)\n .appendField('x');\n this.appendValueInput(\"y\")\n .setCheck(Number)\n .appendField('y');\n this.appendValueInput(\"size\")\n .setCheck(Number)\n .appendField(Blockly.Msg.OLED_CIRCLE_RADIUS);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.HTML_COLOUR);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const onboard_tft_clock_get_rtctime = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.GET_RTCTIME);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const onboard_tft_clock_set_time = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.SET_TIME);\n this.appendValueInput(\"h\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_HOUR);\n this.appendValueInput(\"m\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MINUTE);\n this.appendValueInput(\"s\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_SECOND);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const onboard_tft_clock_draw = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.DRAW_CLOCK);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const onboard_tft_clock_clear = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendValueInput('SUB')\n this.appendDummyInput()\n .appendField(Blockly.Msg.CLEAR_CLOCK);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_STM32_TFT_BACKGROUND_COLOR);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const onboard_tft_display_shape_circle = {\n init: function () {\n this.jsonInit({\n \"colour\": DISPLAY_ONBOARD_HUE,\n \"args0\": [\n {\n \"name\": \"shape\",\n \"options\": [\n [Blockly.Msg.MPYTHON_DISPLAY_HOLLOW, 'False'],\n [Blockly.Msg.MPYTHON_DISPLAY_SOLID, 'True']\n ],\n \"type\": \"field_dropdown\"\n },\n {\n \"type\": \"input_dummy\"\n },\n {\n \"name\": \"x\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"y\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"r\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n },\n {\n \"name\": \"VAR\",\n \"type\": \"input_value\",\n //\"check\": \"Number\"\n }\n\n ],\n \"inputsInline\": true,\n \"helpUrl\": Blockly.Msg.mpython_HELPURL,\n \"message0\": Blockly.Msg.ONBOARD_TFT_DISPLAY_SHAPE_CIRCLE_MESSAGE0,\n \"nextStatement\": null,\n \"previousStatement\": null\n });\n }\n};\n\nexport const draw_pointer = {\n init: function () {\n this.setColour(DISPLAY_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.DRAW_POINTER)\n .appendField(Blockly.Msg.DRAW_POINTER_ANGLE);\n this.appendValueInput('angle');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_DRAW_POINTER_DU);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.DRAW_POINTER_TOOLTIP);\n }\n};","import * as Blockly from 'blockly/core';\n\nconst FACTORY_HUE = \"#777777\"//65;\n\nexport const factory_from_import = {\n init: function () {\n this.setColour(FACTORY_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"from \")\n .appendField(new Blockly.FieldTextInput('ESP32'), 'path')\n .appendField(\" import \")\n .appendField(new Blockly.FieldTextInput('*'), 'module');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const factory_import = {\n init: function () {\n this.setColour(FACTORY_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"import \")\n .appendField(new Blockly.FieldTextInput('module'), 'module');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const factory_function_noreturn = {\n init: function () {\n //console.log('init');\n this.setColour(FACTORY_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldTextInput('my_function'), 'NAME');\n this.itemCount_ = 1;\n this.arguments_ = ['x'];//add\n this.updateShape_();\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['factory_create_with_item'], this));\n },\n mutationToDom: function () {\n //console.log('mutationToDom');\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n //add\n for (var i = 0; i < this.arguments_.length; i++) {\n var parameter = document.createElement('arg');\n parameter.setAttribute('name', this.arguments_[i]);\n container.appendChild(parameter);\n }\n return container;\n },\n domToMutation: function (xmlElement) {\n //console.log('domToMutation');\n this.arguments_ = [];//add\n //add\n for (var i = 0; xmlElement.childNodes[i]; i++) {\n let childNode = xmlElement.childNodes[i];\n if (childNode.nodeName.toLowerCase() == 'arg') {\n this.arguments_.push(childNode.getAttribute('name'));\n }\n }\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n decompose: function (workspace) {\n //console.log('decompose');\n var containerBlock =\n workspace.newBlock('factory_create_with_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK')\n .connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('factory_create_with_item');\n itemBlock.initSvg();\n itemBlock.setFieldValue(this.arguments_[i], 'NAME');//add\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n compose: function (containerBlock) {\n //console.log('compose');\n this.arguments_ = [];//add\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n this.arguments_.push(itemBlock.getFieldValue('NAME'));//add\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i).connection.connect(connections[i]);\n }\n }\n },\n saveConnections: function (containerBlock) {\n //console.log('saveConnections');\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n updateShape_: function () {\n //console.log('updateShape_');\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n var i = 0;\n while (this.getInput('ADD' + i)) {\n this.removeInput('ADD' + i);\n i++;\n }\n }\n // Rebuild block.\n for (var i = 0; i < this.itemCount_; i++) {\n this.appendValueInput('ADD' + i)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(this.arguments_[i]);\n }\n }\n};\n\nexport const factory_create_with_container = {\n init: function () {\n this.setColour(FACTORY_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PARAMS);\n this.appendStatementInput('STACK');\n this.contextMenu = false;\n }\n};\n\nexport const factory_create_with_item = {\n init: function () {\n this.setColour(FACTORY_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE + ':')\n .appendField(new Blockly.FieldTextInput('x'), 'NAME');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.contextMenu = false;\n }\n};\n\nexport const factory_function_return = {\n init: function () {\n this.setColour(FACTORY_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldTextInput('my_function'), 'NAME');\n this.itemCount_ = 1;\n this.arguments_ = ['x'];//add\n this.updateShape_();\n this.setOutput(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['factory_create_with_item'], this));\n },\n mutationToDom: factory_function_noreturn.mutationToDom,\n domToMutation: factory_function_noreturn.domToMutation,\n decompose: factory_function_noreturn.decompose,\n compose: factory_function_noreturn.compose,\n saveConnections: factory_function_noreturn.saveConnections,\n updateShape_: factory_function_noreturn.updateShape_\n};\n\nexport const factory_declare = {\n init: function () {\n this.setColour(FACTORY_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldTextInput('test'), 'NAME')\n .appendField(\"=\")\n .appendField(new Blockly.FieldTextInput('Test'), 'TYPE')\n .appendField(\"()\");\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n}\n\n\nexport const factory_callMethod_noreturn = {\n init: function () {\n this.setColour(FACTORY_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldTextInput('test'), 'NAME')\n .appendField('.')\n .appendField(new Blockly.FieldTextInput('callMethod'), 'METHOD');\n this.itemCount_ = 1;\n this.arguments_ = ['x'];//add\n this.updateShape_();\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['factory_create_with_item'], this));\n },\n mutationToDom: factory_function_noreturn.mutationToDom,\n domToMutation: factory_function_noreturn.domToMutation,\n decompose: factory_function_noreturn.decompose,\n compose: factory_function_noreturn.compose,\n saveConnections: factory_function_noreturn.saveConnections,\n updateShape_: factory_function_noreturn.updateShape_\n};\n\nexport const factory_callMethod_return = {\n init: function () {\n this.setColour(FACTORY_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldTextInput('test'), 'NAME')\n .appendField('.')\n .appendField(new Blockly.FieldTextInput('callMethod'), 'METHOD');\n this.itemCount_ = 1;\n this.arguments_ = ['x'];//add\n this.updateShape_();\n this.setOutput(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['factory_create_with_item'], this));\n },\n mutationToDom: factory_function_noreturn.mutationToDom,\n domToMutation: factory_function_noreturn.domToMutation,\n decompose: factory_function_noreturn.decompose,\n compose: factory_function_noreturn.compose,\n saveConnections: factory_function_noreturn.saveConnections,\n updateShape_: factory_function_noreturn.updateShape_\n};\n\nexport const factory_block = {\n init: function () {\n this.setColour(FACTORY_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldTextInput('display.scroll(\"Hello World!\")'), 'VALUE');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const factory_block_return = {\n init: function () {\n this.setColour(FACTORY_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldTextInput('test'), 'VALUE');\n this.setOutput(true);\n }\n};\n\nexport const factory_block_with_textarea = {\n init: function () {\n this.setColour(FACTORY_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldMultilineInput('display.scroll(\"Hello World!\")\\ndisplay.scroll(\"Hello Mixly!\")'), 'VALUE');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const factory_block_return_with_textarea = {\n init: function () {\n this.setColour(FACTORY_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldMultilineInput('Hello\\nMixly'), 'VALUE');\n this.setOutput(true);\n }\n};\n\nexport const folding_block = {\n init: function () {\n this.setColour(FACTORY_HUE);\n this.appendDummyInput()\n .appendField(new Blockly.FieldTextInput(Blockly.Msg.FOLDING_BLOCK), \"peien\");\n this.appendStatementInput('DO')\n .appendField('');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.FOLDING_BLOCK_HELP);\n }\n};","import * as Blockly from 'blockly/core';\n\nconst BASE_HUE = 20//'#ae3838';//40;\n\nexport const inout_highlow = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_HIGH, \"HIGH\"], [Blockly.Msg.MIXLY_LOW, \"LOW\"]]), 'BOOL')\n this.setOutput(true, Boolean);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_HIGHLOW_TOOLTIP);\n }\n};\n\nexport const inout_digital_write = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_Digital_PINMODEOUT)\n .setCheck(Number);\n this.appendValueInput(\"STAT\")\n .appendField(Blockly.Msg.MIXLY_STAT)\n .setCheck([Number, Boolean]);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_DIGITAL_WRITE_TOOLTIP);\n }\n};\n\nexport const inout_digital_read = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(Blockly.Msg.MIXLY_Digital_PINMODEIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)\n this.setInputsInline(true);\n this.setOutput(true, [Boolean, Number]);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_DIGITAL_READ_TOOLTIP);\n }\n};\n\nexport const inout_pwm_analog_write = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(\"PWM\" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n .setCheck(Number);\n this.appendValueInput(\"NUM\", Number)\n .appendField(Blockly.Msg.MIXLY_VALUE2)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PWM_ANALOG_WRITE_TOOLTIP);\n }\n};\n\nexport const inout_analog_write = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(\"DAC\" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n .setCheck(Number);\n this.appendValueInput(\"NUM\", Number)\n .appendField(Blockly.Msg.MIXLY_VALUE2)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_TOOLTIP);\n }\n};\n\nexport const inout_analog_write_set = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_PERIOD_MIL)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_mSecond, \"period\"],\n [Blockly.Msg.MIXLY_uSecond, \"period_microseconds\"]\n ]), \"key\");\n this.appendValueInput(\"NUM\", Number)\n .appendField(Blockly.Msg.MIXLY_STAT)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_SET_TOOLTIP);\n }\n};\n\nexport const inout_pwm_analog_write_set_freq = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(\"PWM\" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n .setCheck(Number);\n this.appendValueInput(\"NUM\", Number)\n .appendField(Blockly.Msg.MIXLY_FREQUENCY + Blockly.Msg.MIXLY_STAT)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PWM_ANALOG_WRITE_SET_FREQ_TOOLTIP);\n }\n};\n\nexport const inout_analog_read = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(Blockly.Msg.MIXLY_Analog_PINMODEIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_READ_TOOLTIP);\n }\n};\n\nexport const inout_analog_atten = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_Analog_PINMODEIN)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_ESP32_REF_VOLTAGE + Blockly.Msg.MIXLY_STAT)\n .appendField(new Blockly.FieldDropdown([\n [\"3.3V\", \"machine.ADC.ATTN_11DB\"],\n [\"2.2V\", \"machine.ADC.ATTN_6DB\"],\n [\"1.5V\", \"machine.ADC.ATTN_2_5DB\"],\n [\"1.2V\", \"machine.ADC.ATTN_0DB\"]\n ]), \"atten\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_ATTEN_TOOLTIP);\n }\n};\n\n\nexport const inout_pin_pressed = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput('pin')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR);\n // this.appendDummyInput()\n // .appendField(Blockly.Msg.MIXLY_IS_TOUCHED);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_TOOLTIP);\n }\n};\n\nexport const inout_pin_attachInterrupt = {\n init: function () {\n this.setColour(20);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_ATTACHINTERRUPT_PIN)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MODE)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_RISING, \"machine.Pin.IRQ_RISING\"], [Blockly.Msg.MIXLY_FALLING, \"machine.Pin.IRQ_FALLING\"], [Blockly.Msg.MIXLY_CHANGE, \"(machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING)\"]]), \"mode\");\n this.appendValueInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_ATTACHINTERRUPT_TOOLTIP);\n }\n};\n\nexport const inout_digital_init = {\n init: function () {\n this.setColour(20);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .appendField(new Blockly.FieldTextInput('pin#'), 'PIN_OBJ');\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)\n // .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE+Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_Digital_PINMODEOUT, \"machine.Pin.OUT\"],\n [Blockly.Msg.MIXLY_Digital_PINMODEIN, \"machine.Pin.IN\"],\n [Blockly.Msg.MIXLY_PINMODEPULLUP, \"machine.Pin.IN, machine.Pin.PULL_UP\"],\n [Blockly.Msg.MIXLY_PINMODEPULLDOWN, \"machine.Pin.IN, machine.Pin.PULL_DOWN\"]\n ]), \"MODE\")\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_DIGITAL_INIT_TOOLTIP);\n },\n getVars: function () {\n return [this.getFieldValue('PIN_OBJ') == 'pin#' ? null : this.getFieldValue('PIN_OBJ')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {\n this.setTitleValue(newName, 'PIN_OBJ');\n }\n }\n};\n\nexport const inout_pwm_analog_write_init = {\n init: function () {\n this.setColour(BASE_HUE);\n // this.appendValueInput(\"PIN\", Number)\n // .appendField(Blockly.Msg.MIXLY_SETUP)\n // .appendField(\"PWM\"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n // .appendField('pwm')\n // .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .appendField(new Blockly.FieldTextInput('pwm#'), 'PIN_OBJ')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)\n this.appendDummyInput(\"\")\n .appendField(\"PWM\" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n // .appendField('pwm')\n // .appendField(new Blockly.FieldDropdown(profile.default.pwm_pin),\"PIN\")\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PWM_ANALOG_WRITE_INIT_TOOLTIP);\n },\n getVars: function () {\n return [this.getFieldValue('PIN_OBJ') == 'pwm#' ? null : this.getFieldValue('PIN_OBJ')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {\n this.setTitleValue(newName, 'PIN_OBJ');\n }\n }\n};\n\nexport const inout_analog_write_init = {\n init: function () {\n this.setColour(BASE_HUE);\n // this.appendValueInput(\"PIN\", Number)\n // .appendField(Blockly.Msg.MIXLY_SETUP)\n // .appendField(\"PWM\"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n // .appendField('pwm')\n // .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .appendField(new Blockly.FieldTextInput('dac#'), 'PIN_OBJ')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)\n this.appendDummyInput(\"\")\n .appendField(\"DAC\" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n // .appendField('dac')\n // .appendField(new Blockly.FieldDropdown(profile.default.dac_pin),\"PIN\")\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_INIT_TOOLTIP);\n },\n getVars: function () {\n return [this.getFieldValue('PIN_OBJ') == 'dac#' ? null : this.getFieldValue('PIN_OBJ')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {\n this.setTitleValue(newName, 'PIN_OBJ');\n }\n }\n};\n\nexport const inout_analog_read_init = {\n init: function () {\n this.setColour(BASE_HUE);\n // this.appendValueInput(\"PIN\", Number)\n // .appendField(Blockly.Msg.MIXLY_SETUP)\n // .appendField(\"PWM\"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n // .appendField('pwm')\n // .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .appendField(new Blockly.FieldTextInput('adc#'), 'PIN_OBJ')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_Analog_PINMODEIN)\n // .appendField('adc')\n // .appendField(new Blockly.FieldDropdown(profile.default.adc_pin),\"PIN\")\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_READ_INIT_TOOLTIP);\n },\n getVars: function () {\n return [this.getFieldValue('PIN_OBJ') == 'adc#' ? null : this.getFieldValue('PIN_OBJ')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {\n this.setTitleValue(newName, 'PIN_OBJ');\n }\n }\n};\n\nexport const inout_pin_pressed_init = {\n init: function () {\n this.setColour(BASE_HUE);\n // this.appendValueInput(\"PIN\", Number)\n // .appendField(Blockly.Msg.MIXLY_SETUP)\n // .appendField(\"PWM\"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n // .appendField('pwm')\n // .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .appendField(new Blockly.FieldTextInput('tc#'), 'PIN_OBJ')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR)\n // .appendField('tc')\n // .appendField(new Blockly.FieldDropdown(profile.default.tc_pin),\"PIN\")\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_INIT_TOOLTIP);\n },\n getVars: function () {\n return [this.getFieldValue('PIN_OBJ') == 'tc#' ? null : this.getFieldValue('PIN_OBJ')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {\n this.setTitleValue(newName, 'PIN_OBJ');\n }\n }\n};\n\nexport const inout_pinMode = inout_digital_init;\nexport const inout_analog_write_set_freq = inout_pwm_analog_write_set_freq;\nexport const pin_pressed_init = inout_pin_pressed_init;\nexport const pin_pressed = inout_pin_pressed;\nexport const controls_pin_attachInterrupt = inout_pin_attachInterrupt;\n","import * as Blockly from 'blockly/core';\nimport * as Mixly from 'mixly';\n\nconst IOT_HUE = '#526FC3';\n//'#2FAD7A';\n\nexport const iot_wifi_connect = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_IOT_CONNECT_WIFI);\n this.appendValueInput('WIFINAME')\n .setCheck(String)\n .appendField(Blockly.Msg.HTML_NAME);\n this.appendValueInput('PASSWORD')\n .setCheck(String)\n .appendField(Blockly.Msg.HTML_PASSWORD);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_WIFI_CONNECT_TOOLTIP);\n }\n};\n\nexport const iot_onenet_connect = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField(\"OneNET\" + Blockly.Msg.TUPLE_JOIN);\n this.appendValueInput('CLIENT')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_ONENET_CLIENT);\n this.appendValueInput('SERVER')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_ONENET_SERVER);\n this.appendValueInput('USERNAME')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_ONENET_USERNAME);\n this.appendValueInput('PASSWORD')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_ONENET_PASSWORD);\n this.appendValueInput('TOPIC')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_ESP32_ONENET_TOPIC);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_ESP32_ONENET_SUB);\n //this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_CONNECT_TOOLTIP);\n }\n};\n\nexport const iot_onenet_disconnect = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField(\"OneNET\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_DISCONNECT_ONENET);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_DISCONNECT_TOOLTIP);\n }\n};\n\nexport const iot_onenet_check = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField(\"OneNET\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_CHECK_ONENET);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_CHECK_TOOLTIP);\n }\n};\n\nexport const iot_onenet_publish_dict = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField(\"OneNET\")\n this.appendValueInput('DICT')\n .appendField(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_PRINT_DATA)\n .appendField(new Blockly.FieldCheckbox('TRUE'), 'is_print');\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_PUBLISH_DICT_TOOLTIP);\n }\n};\n\nexport const iot_onenet_publish = {\n /**\n * Block for creating a list with any number of elements of any type.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(IOT_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField(\"OneNET\")\n .setAlign(Blockly.inputs.Align.RIGHT)\n this.appendDummyInput()\n .appendField(new Blockly.FieldLabel(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET), 'TIP')\n .setAlign(Blockly.inputs.Align.RIGHT)\n this.itemCount_ = 2;\n this.updateShape_();\n this.setInputsInline(false);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['iot_publish_item'], this));\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_PUBLISH_TOOLTIP);\n },\n /**\n * Create XML to represent list inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n /**\n * Parse XML to restore the list inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('iot_publish_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('iot_create_with_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n let i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (let i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i).connection.connect(connections[i]);\n }\n }\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @private\n * @this Blockly.Block\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n }\n var keyNames = [];\n for (let i = 0; this.getInput('ADD' + i); i++) {\n //this.getInput('VALUE' + i).removeField(\"KEY\"+i);\n keyNames.push(this.getFieldValue(\"KEY\" + i))\n this.removeInput('ADD' + i);\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n //this.getField('TIP')\n //.setText(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET_EMPTY);\n this.setFieldValue(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET_EMPTY, 'TIP');\n } else {\n //this.getField('TIP')\n //.setText(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET);\n this.setFieldValue(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET, 'TIP');\n for (let i = 0; i < this.itemCount_; i++) {\n this.appendValueInput('ADD' + i)\n .setCheck(null)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\n new Blockly.FieldTextInput(\n keyNames.length > i\n ? keyNames[i]\n : '\"key' + (i + 1) + '\"'),\n 'KEY' + i)\n .appendField(\":\")\n }\n }\n }, getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n};\n\nexport const iot_publish_container = {\n /**\n * Mutator block for list container.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT);\n this.appendStatementInput('STACK');\n this.setTooltip(Blockly.Msg.DICTS_CREATE_WITH_CONTAINER_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\n\nexport const iot_publish_item = {\n /**\n * Mutator bolck for adding items.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.DICTS_CREATE_WITH_ITEM_TITLE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.DICTS_CREATE_WITH_ITEM_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const iot_create_with_item = {\n /**\n * Mutator bolck for adding items.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.DICTS_CREATE_WITH_ITEM_TITLE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.DICTS_CREATE_WITH_ITEM_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\n\nexport const iot_mixio_connect = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT);\n this.appendValueInput('SERVER')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_EMQX_SERVER)\n .setAlign(Blockly.inputs.Align.RIGHT)\n this.appendValueInput('USERNAME')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_WIFI_USERNAME)\n .setAlign(Blockly.inputs.Align.RIGHT)\n this.appendValueInput('PASSWORD')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_IOT_PASSWORD)\n .setAlign(Blockly.inputs.Align.RIGHT)\n this.appendValueInput('PROJECT')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_EMQX_PROJECT)\n .setAlign(Blockly.inputs.Align.RIGHT)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const IOT_MIXIO_PUBLISH = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(\"MixIO\")\n this.appendValueInput('TOPIC')\n .appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_NEW)\n .appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_TOPIC);\n this.appendValueInput('MSG')\n .appendField(Blockly.Msg.HTML_BODY);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_PUBLISH_TOOLTIP);\n }\n};\n\nexport const IOT_MIXIO_SUBSCRIBE = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(\"MixIO\")\n this.appendValueInput('TOPIC')\n .appendField(Blockly.Msg.MIXLY_EMQX_SUBSCRIBE + Blockly.Msg.MIXLY_MICROBIT_MSG)\n .appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_TOPIC);\n this.appendValueInput('METHOD')\n .appendField(Blockly.Msg.MIXLY_EMQX_SET_METHOD);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_SUBSCRIBE_TOOLTIP);\n }\n};\n\nexport const iot_mixio_disconnect = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(\"MixIO\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_DISCONNECT_ONENET);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n // this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_DISCONNECT_TOOLTIP);\n }\n};\n\nexport const iot_mixio_connect_only = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(\"MixIO\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_EMQX_CONNECT);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n // this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_DISCONNECT_TOOLTIP);\n }\n};\n\nexport const iot_mixio_check = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(\"MixIO\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_CHECK_ONENET);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n // this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_CHECK_TOOLTIP);\n }\n};\n\nexport const iot_mixio_format_topic = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_FORMAT)\n .appendField(Blockly.Msg.MQTT_Topic);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const iot_mixio_format_msg = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_FORMAT)\n .appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_MSG);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const IOT_FORMATTING = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_ESP32_IOT_MAP_FORMATING);\n this.setOutput(true);\n // this.setTooltip();\n }\n};\n\nexport const IOT_FORMAT_STRING = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_FORMAT + '(Json)');\n this.setOutput(true);\n // this.setTooltip();\n }\n};\n\nexport const IOT_EMQX_PING = {\n init: function () {\n this.setColour(IOT_HUE);\n // this.appendValueInput('VAR')\n // .setCheck(\"var\")\n this.appendDummyInput()\n .appendField(\"MixIO\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_EMQX_PING);\n this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_PING_TOOLTIP);\n }\n};\n\nexport const IOT_MIXIO_NTP = {\n init: function () {\n this.setColour(IOT_HUE);\n // this.appendValueInput('VAR')\n // .setCheck(\"var\")\n this.appendDummyInput()\n .appendField(\"MixIO\")\n .appendField(Blockly.Msg.MIXLY_GET_NTP)\n this.appendValueInput('addr')\n .appendField(Blockly.Msg.blynk_SERVER_ADD);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT);\n this.appendValueInput('SERVER')\n .appendField(Blockly.Msg.MIXLY_EMQX_SERVER)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput('KEY')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + Blockly.Msg.MIXLY_MIXIO_SHARE_KEY)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\n\nexport const IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT);\n this.appendValueInput('SERVER')\n .appendField(Blockly.Msg.MIXLY_EMQX_SERVER)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput('KEY')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"Mixly Key\")\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\n\nexport const iot_mixly_key = {\n init: function () {\n this.VISITOR_ID = Mixly.Config.BOARD.visitorId.str32.substring(0, 8).toUpperCase();\n this.setColour(IOT_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldTextInput(this.visitorId), 'VISITOR_ID');\n this.setOutput(true, null);\n },\n onchange: function () {\n const nowVisitorId = this.getFieldValue('VISITOR_ID');\n if (this.VISITOR_ID !== nowVisitorId)\n this.setFieldValue(this.VISITOR_ID, 'VISITOR_ID');\n }\n};\n\nexport const iot_client_onboard = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField('MixIO')\n .appendField(Blockly.Msg.MSG.catEthernet_clinet);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const iot_http_client = {\n init: function () {\n this.setColour(IOT_HUE);\n // this.appendValueInput('VAR')\n // .setCheck(\"var\")\n this.appendDummyInput()\n .appendField(\"HTTP\" + Blockly.Msg.MIXLY_Client)\n this.appendValueInput('addr')\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET2);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_REQUESTS_GET)\n .appendField(Blockly.Msg.MIXLY_GET_CURRENT_TIME)\n .appendField(Blockly.Msg.MIXLY_OPEN_DEBUG)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, \"True\"],\n [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, \"False\"]\n ]), \"key\");\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const iot_http_data = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(\"HTTP\" + Blockly.Msg.MIXLY_Client)\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_REQUESTS_LEN, \"client_len\"],\n [Blockly.Msg.MIXLY_REQUESTS_GET_LEN, \"server_len\"],\n [Blockly.Msg.MIXLY_REQUESTS_MESSAGE, \"text\"]\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n\n }\n};\n\nexport const iot_mqtt_client = {\n init: function () {\n this.setColour(IOT_HUE);\n // this.appendValueInput('VAR')\n // .setCheck(\"var\")\n this.appendDummyInput()\n .appendField(\"MQTT\" + Blockly.Msg.MIXLY_Client)\n this.appendValueInput('addr')\n .appendField(Blockly.Msg.MIXLY_CONNECTTO);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_INIT_SUBSCRIBE)\n .appendField(Blockly.Msg.MQTT_Topic)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GET_CURRENT_TIME, \"\"],\n ]), \"key\")\n .appendField(Blockly.Msg.MIXLY_OPEN_DEBUG)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, \"True\"],\n [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, \"False\"]\n ]), \"key2\");\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const iot_mqtt_data = {\n init: function () {\n this.setColour(IOT_HUE);\n this.appendDummyInput()\n .appendField(\"MQTT\" + Blockly.Msg.MIXLY_Client)\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_REQUESTS_LEN, \"client_len\"],\n [Blockly.Msg.MIXLY_REQUESTS_GET_LEN, \"server_len\"],\n [Blockly.Msg.MIXLY_REQUESTS_MESSAGE, \"time_msg()\"]\n ]), \"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n\n }\n};\n\nexport const iot_wificonnect = iot_wifi_connect;\nexport const iot_onenetconnect = iot_onenet_connect;\nexport const iot_onenetdisconnect = iot_onenet_disconnect;\nexport const iot_checkonenet = iot_onenet_check;\nexport const iot_publish = iot_onenet_publish;","import * as Blockly from 'blockly/core';\n\nconst NETWORK_HUE = 225;\n\nexport const network_init = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_NETWORK_INIT)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_NETWORK_MODE)\n .appendField(new Blockly.FieldDropdown([\n ['STA', \"STA\"],\n ['AP', \"AP\"]\n ]), \"mode\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_INIT_TOOLTIP);\n }\n};\n\n\nexport const network_open = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_NETWORK_WIFI_OPEN, \"True\"],\n [Blockly.Msg.MIXLY_NETWORK_WIFI_CLOSE, \"False\"]\n ]), \"op\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_NETWORK_WIFI_FLAG)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('op');\n var mode0 = Blockly.Msg.MIXLY_ESP32_NETWORK_OPEN_TOOLTIP;\n var TOOLTIPS = {\n 'True': Blockly.Msg.MIXLY_NETWORK_WIFI_OPEN,\n 'False': Blockly.Msg.MIXLY_NETWORK_WIFI_CLOSE,\n };\n return TOOLTIPS[mode] + mode0\n });\n }\n};\n\nexport const network_is_active = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_NETWORK_WIFI_IS_ACTIVE)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_NETWORK_WIFI_IS_ACTIVE);\n }\n};\n\nexport const network_scan = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_NETWORK_WIFI_SCAN)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(function () {\n var mode = 'all';\n var mode0 = Blockly.Msg.MIXLY_ESP32_NETWORK_SCAN_TOOLTIP\n var TOOLTIPS = {\n '0': \"ssid\",\n '1': 'bssid',\n '2': \"channel\",\n '3': \"RSSI\",\n '4': \"authmode\",\n '5': \"hidden\",\n 'all': Blockly.Msg.MIXLY_NETWORK_WIFI_SCAN_ATTRIBUTE,\n };\n return mode0 + TOOLTIPS[mode]\n });\n }\n};\n\nexport const network_connect = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_ESP32_NETWORK_CONNECT);\n this.appendValueInput('id')\n .setCheck(String)\n .appendField(Blockly.Msg.HTML_NAME);\n this.appendValueInput('password')\n .setCheck(String)\n .appendField(Blockly.Msg.HTML_PASSWORD);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_CONNECT_TOOLTIP);\n }\n};\n\nexport const network_wifi_connect = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_NETWORK_WIFI_CONNECT + Blockly.Msg.MIXLY_SYMBOL_QUESTION);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_WIFI_CONNECT_TOOLTIP);\n }\n};\n\nexport const network_get_connect = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_ESP32_NETWORK_GET_WIFI);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_ESP32_NETWORK_IP, \"0\"],\n [Blockly.Msg.MIXLY_ESP32_NETWORK_MASK, \"1\"],\n [Blockly.Msg.MIXLY_ESP32_NETWORK_GATEWAY, \"2\"],\n [\"DNS\", \"3\"]\n ]), \"mode\");\n this.setOutput(true);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('mode');\n var mode0 = Blockly.Msg.MIXLY_ESP32_NETWORK_GET_WIFI_TOOLTIP\n var TOOLTIPS = {\n '0': Blockly.Msg.MIXLY_ESP32_NETWORK_IP,\n '1': Blockly.Msg.MIXLY_ESP32_NETWORK_MASK,\n '2': Blockly.Msg.MIXLY_ESP32_NETWORK_GATEWAY,\n '3': \"DNS\",\n };\n return mode0 + TOOLTIPS[mode]\n });\n }\n};\n\nexport const network_stop = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_ESP32_NETWORK_STOP_CONNECT);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_STOP_TOOLTIP);\n }\n};\n\nexport const network_get_wifi = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_ESP32_NETWORK_GET_WIFI);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_NETWORK_WIFI_ESSID, \"essid\"],\n [Blockly.Msg.MIXLY_NETWORK_WIFI_CHANNEL, \"channel\"]\n ]), \"op\");\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_GET_WIFI_TOOLTIP);\n }\n};\n\nexport const network_ap_connect = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET);\n this.appendValueInput('essid')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_NETWORK_WIFI_ESSID);\n this.appendValueInput('channel')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_NETWORK_WIFI_CHANNEL);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_AP_CONNECT_TOOLTIP);\n }\n};\n\nexport const network_server = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_ESP32_NETWORK_SERVER1);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_ESP32_NETWORK_SERVER2);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_CLOSE_TOOLTIP);\n }\n};\n\nexport const network_socket_init = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_INIT)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_TYPE)\n .appendField(new Blockly.FieldDropdown([\n ['TCP', \"TCP\"],\n ['UDP', \"UDP\"]\n ]), \"mode\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('mode');\n var mode0 = Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_INIT_TOOLTIP\n var TOOLTIPS = {\n 'TCP': 'TCP',\n 'UDP': 'UDP',\n };\n return mode0 + TOOLTIPS[mode]\n });\n }\n};\n\nexport const network_socket_bind = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_LET_SOCKET)\n this.appendValueInput('address')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_BIND_TO_ADDRESS);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_BIND_TOOLTIP);\n }\n};\n\nexport const network_socket_connect = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_LET_SOCKET)\n this.appendValueInput('address')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_CONNECT_TO_ADDRESS);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_CONNECT_TOOLTIP);\n }\n};\n\nexport const network_socket_listen = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendValueInput('queue')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_LISTEN)\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_QUEUE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_LISTEN_TOOLTIP);\n }\n};\n\nexport const network_socket_accept = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_ACCEPT);\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_ACCEPT_TOOLTIP);\n }\n};\n\nexport const network_socket_receive = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField(\"TCP\")\n this.appendValueInput('size')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_RECEIVE)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_RECEIVE_TOOLTIP);\n }\n};\n\nexport const network_socket_send = {\n init: function () {\n this.setColour(NETWORK_HUE);\n // .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField(\"TCP\")\n this.appendValueInput('content')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_SEND)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_SEND_TOOLTIP);\n }\n};\n\nexport const network_socket_receive_from = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField(\"UDP\")\n this.appendValueInput('size')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_RECEIVE)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_RECEIVE_FROM_TOOLTIP);\n }\n};\n\nexport const network_socket_send_to = {\n init: function () {\n this.setColour(NETWORK_HUE);\n // .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n .appendField(\"UDP\")\n this.appendValueInput('content')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_SEND)\n this.appendValueInput('address')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_TO);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_SEND_TO_TOOLTIP);\n }\n};\n\nexport const network_socket_close = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"var\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_CLOSE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_CLOSE_TOOLTIP);\n }\n};\n\n\nexport const requests_get = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendValueInput(\"DOMAIN\")\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)\n .setCheck(String);\n this.appendDummyInput(\"\")\n\n .appendField(Blockly.Msg.blockpy_REQUESTS_GET)\n .appendField(new Blockly.FieldTextInput('response'), 'VAR')\n\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.blockpy_REQUESTS_GET_TOOLTIP);\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n\n}\n\n\nexport const requests_attribute = {\n init: function () {\n this.appendValueInput('VAL')\n\n var attr =\n [[Blockly.Msg.blockpy_REQUESTS_GET_ATTR_STATUS_CODE, 'status_code'], [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_TEXT, 'text']\n , [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_COOKIES, 'cookies'], [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_CONTENT, 'content']];\n this.setColour(NETWORK_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET)\n .appendField(new Blockly.FieldDropdown(attr), 'ATTR')\n\n\n this.setInputsInline(true);\n this.setOutput(true, String);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('DIR');\n var TOOLTIPS = {\n 'clear': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_CLEAR,\n 'reset': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_RESET,\n 'home': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_HOME\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\n\n\nexport const requests_method = {\n init: function () {\n this.appendValueInput(\"VAR\")\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)\n .setCheck(String);\n var method = [\n ['post', 'post'], ['put', 'put'],\n ['delete', 'delete'], ['head', 'head'],\n ['option', 'option']\n ];\n this.setColour(NETWORK_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_CONDUCT)\n .appendField(new Blockly.FieldDropdown(method), 'DIR')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_REQUESTS)\n\n\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('DIR');\n var TOOLTIPS = {\n 'forward': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_FORWARD,\n 'backward': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_BACKWARD\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const ntptime_time = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GET_NTP + '(NTP)')\n this.appendValueInput(\"data\")\n .appendField(Blockly.Msg.blynk_SERVER_ADD)\n this.setOutput(true, 'Tuple');\n this.setInputsInline(true);\n }\n};\n\nexport const ntptime_address = {\n init: function () {\n this.setColour(NETWORK_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n ['ntp.aliyun.com', \"ntp.aliyun.com\"],\n ['ntp1.aliyun.com', \"ntp1.aliyun.com\"],\n ['ntp2.aliyun.com', \"ntp2.aliyun.com\"],\n ['ntp3.aliyun.com', \"ntp3.aliyun.com\"],\n ['ntp4.aliyun.com', \"ntp4.aliyun.com\"],\n ['ntp5.aliyun.com', \"ntp5.aliyun.com\"],\n ['ntp6.aliyun.com', \"ntp6.aliyun.com\"],\n ['ntp7.aliyun.com', \"ntp7.aliyun.com\"],\n ['time1.cloud.tencent.com', \"time1.cloud.tencent.com\"],\n ['time2.cloud.tencent.com', \"time2.cloud.tencent.com\"],\n ['time3.cloud.tencent.com', \"time3.cloud.tencent.com\"],\n ['time4.cloud.tencent.com', \"time4.cloud.tencent.com\"],\n ['time5.cloud.tencent.com', \"time5.cloud.tencent.com\"]\n ]), 'op')\n this.setOutput(true);\n }\n};\n\nconst COMMUNICATE_HUE = '#3288dd';\n\nexport const requests_get2 = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput(\"URL\")\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)\n .setCheck(String);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_CONDUCT)\n .appendField(new Blockly.FieldDropdown([[\"get\", \"get\"], [\"head\", \"head\"], [\"delete\", \"delete\"]]), 'TYPE')\n .appendField(Blockly.Msg.blockpy_REQUESTS)\n .appendField(Blockly.Msg.MIXPY_REQUESTS_GET_RESULT)\n this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(\"\");\n },\n};\n\nexport const requests_post = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput(\"URL\")\n .appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)\n .setCheck(String);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_CONDUCT)\n .appendField(new Blockly.FieldDropdown([[\"post\", \"post\"], [\"put\", \"put\"], [\"patch\", \"patch\"]]), 'TYPE')\n .appendField(Blockly.Msg.blockpy_REQUESTS)\n this.appendValueInput(\"data\")\n .appendField(Blockly.Msg.blockpy_REQUESTS + Blockly.Msg.OLED_STRING)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXPY_REQUESTS_GET_RESULT)\n this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(\"\");\n },\n};\n\nexport const requests_attribute2 = {\n init: function () {\n this.appendValueInput('VAL')\n\n var attr = [\n [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_TEXT, 'text'],\n [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_JSON, 'json()'],\n [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_STATUS_CODE, 'status_code'],\n [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_CONTENT, 'content'],\n [Blockly.Msg.MIXPY_TEXT_ENCODE, 'encoding']\n ];\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET)\n .appendField(new Blockly.FieldDropdown(attr), 'ATTR')\n this.setInputsInline(true);\n this.setOutput(true, String);\n }\n};\n\n//educore_networke\nexport const educore_wifi_connect = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_IOT_CONNECT_WIFI);\n this.appendValueInput('WIFINAME')\n .setCheck(String)\n .appendField(Blockly.Msg.HTML_NAME);\n this.appendValueInput('PASSWORD')\n .setCheck(String)\n .appendField(Blockly.Msg.HTML_PASSWORD);\n this.appendValueInput('TIMEOUT')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_IR_TIMEOUT);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MILLIS)\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_WIFI_CONNECT_TOOLTIP);\n }\n};\n\n\n\nexport const educore_mqtt_connect = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_CONNECT_TOOLTIP);\n this.appendValueInput('SERVER')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_EMQX_SERVER)\n .setAlign(Blockly.inputs.Align.RIGHT)\n this.appendValueInput('PORT')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_EMQX_PORT)\n .setAlign(Blockly.inputs.Align.RIGHT)\n this.appendValueInput('CLIENT_ID')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_EMQX_CLIENT_ID)\n .setAlign(Blockly.inputs.Align.RIGHT)\n this.appendValueInput('USERNAME')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_WIFI_USERNAME)\n .setAlign(Blockly.inputs.Align.RIGHT)\n this.appendValueInput('PASSWORD')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_IOT_PASSWORD)\n .setAlign(Blockly.inputs.Align.RIGHT)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const educore_mqtt_subscribe_message = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendValueInput('TOPIC')\n .appendField(Blockly.Msg.MIXLY_EMQX_SUBSCRIBE + Blockly.Msg.MIXLY_MICROBIT_MSG)\n .appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_TOPIC);\n this.appendValueInput('MESSAGE')\n .appendField(Blockly.Msg.blockpy_set_of);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const educore_mqtt_topic_subscribe = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(\"mqtt\")\n this.appendValueInput('TOPIC')\n .appendField(Blockly.Msg.MIXLY_EMQX_SUBSCRIBE + Blockly.Msg.MIXLY_MICROBIT_MSG)\n .appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_TOPIC);\n this.appendValueInput('METHOD')\n .appendField(Blockly.Msg.MIXLY_EMQX_SET_METHOD);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const educore_mqtt_topic_publish = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(\"mqtt\")\n this.appendValueInput('TOPIC')\n .appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_NEW)\n .appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_TOPIC);\n this.appendValueInput('MSG')\n .appendField(Blockly.Msg.HTML_BODY);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const educore_mqtt_connect_success = {\n init: function () {\n this.setColour(COMMUNICATE_HUE);\n this.appendDummyInput()\n .appendField(\"mqtt\"+Blockly.Msg.MIXLY_EMQX_IS_CONNECT)\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};","import * as Blockly from 'blockly/core';\nimport * as Mixly from 'mixly';\n\nconst NOVAG1_HUE = 100;\n\nexport const get_potential_num = {\n init: function () {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_nova\") { var name = 'Nova G1' }\n this.setColour(NOVAG1_HUE);\n this.appendDummyInput()\n .appendField(name)\n .appendField(Blockly.Msg.MIXLY_MIXGO_NOVA_POTENTIAL_NUM);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n}\n\nexport const nova_g1_motor = {\n init: function () {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_nova\") { var name = 'Nova G1' }\n this.setColour(NOVAG1_HUE);\n this.appendValueInput('PIN')\n .appendField(name)\n .appendField(Blockly.Msg.MOTOR_DC)\n .appendField(Blockly.Msg.LCD_NUMBERING)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.CLOCKWISE, \"CW\"],\n [Blockly.Msg.ANTI_CLOCKWISE, \"CCW\"],\n [Blockly.Msg.MOTOR_P, \"P\"],\n [Blockly.Msg.MOTOR_N, \"N\"]\n ]), \"direction\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);\n this.appendDummyInput(\"\")\n .appendField(\"%\")\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const nova_g1_usb = {\n init: function () {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_nova\") { var name = 'Nova G1' }\n this.setColour(NOVAG1_HUE);\n this.appendValueInput('PIN')\n .appendField(name)\n .appendField(Blockly.Msg.SET_USB);\n this.appendValueInput('percent')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_POWER_SUPPLY);\n this.appendDummyInput(\"\")\n .appendField(\"%\")\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const nova_g1_spk_en = {\n init: function () {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_nova\") { var name = 'Nova G1' }\n this.setColour(NOVAG1_HUE);\n this.appendDummyInput()\n .appendField(name)\n .appendField(Blockly.Msg.MIXLY_SPK_STATE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_ON, \"True\"],\n [Blockly.Msg.MIXLY_OFF, \"False\"]\n ]), \"state\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}","import * as Blockly from 'blockly/core';\nimport * as Mixly from 'mixly';\n\nconst PEG1_HUE = 100;\n\nexport const pe_g1_use_i2c_init = {\n init: function () {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_ce\") { var name = 'CE G6' }\n else if (version == \"mixgo_pe\") { var name = 'PE G1' }\n this.setColour(PEG1_HUE);\n this.appendValueInput('I2CSUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"I2C\")\n .setCheck(\"var\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .appendField(name);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n }\n};\n\nexport const pe_g1_battery_left = {\n init: function () {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_ce\") { var name = 'CE G6' }\n else if (version == \"mixgo_pe\") { var name = 'PE G1' }\n this.setColour(PEG1_HUE);\n this.appendValueInput('SUB')\n .appendField(name)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXGO_CAR_BATTERY_LEFT);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const pe_g1_dc_motor = {\n init: function () {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_ce\") { var name = 'CE G6' }\n else if (version == \"mixgo_pe\") { var name = 'PE G1' }\n this.setColour(PEG1_HUE);\n this.appendValueInput('SUB')\n .appendField(name)\n .setCheck(\"var\");\n this.appendValueInput('PIN')\n .appendField(Blockly.Msg.MOTOR_DC)\n .appendField(Blockly.Msg.LCD_NUMBERING)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.CLOCKWISE, \"CW\"],\n [Blockly.Msg.ANTI_CLOCKWISE, \"CCW\"],\n [Blockly.Msg.MOTOR_P, \"P\"],\n [Blockly.Msg.MOTOR_N, \"N\"]\n ]), \"direction\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);\n this.appendDummyInput(\"\")\n .appendField(\"%\")\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const pe_g1_dc_motor_speed = {\n init: function () {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_ce\") { var name = 'CE G6' }\n else if (version == \"mixgo_pe\") { var name = 'PE G1' }\n this.setColour(PEG1_HUE);\n this.appendValueInput('SUB')\n .appendField(name)\n .setCheck(\"var\");\n this.appendValueInput('PIN')\n .appendField(Blockly.Msg.MOTOR_DC)\n .appendField(Blockly.Msg.LCD_NUMBERING)\n\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_STEPPER_GET_SPEED);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n}\n\nexport const pe_g1_servo_set_angle = {\n init: function () {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_ce\") { var name = 'CE G6' }\n else if (version == \"mixgo_pe\") { var name = 'PE G1' }\n this.setColour(PEG1_HUE);\n this.appendValueInput('SUB')\n .appendField(name)\n .setCheck(\"var\");\n this.appendValueInput('PIN')\n .appendField('180°' + Blockly.Msg.MIXLY_SERVO)\n .appendField(Blockly.Msg.LCD_NUMBERING)\n\n this.appendValueInput(\"NUM\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SERVO_MOVE);\n }\n};\n\nexport const pe_g1_servo_set_speed = {\n init: function () {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_ce\") { var name = 'CE G6' }\n else if (version == \"mixgo_pe\") { var name = 'PE G1' }\n this.setColour(PEG1_HUE);\n this.appendValueInput('SUB')\n .appendField(name)\n .setCheck(\"var\");\n this.appendValueInput('PIN')\n .appendField('360°' + Blockly.Msg.MIXLY_SERVO)\n .appendField(Blockly.Msg.LCD_NUMBERING)\n\n this.appendValueInput(\"NUM\", Number)\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_SPEED);\n this.appendDummyInput()\n .appendField('%');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SERVO_SPEED_TOOLIPS);\n }\n};\n\nexport const pe_g1_servo_get_angle = {\n init: function () {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_ce\") { var name = 'CE G6' }\n else if (version == \"mixgo_pe\") { var name = 'PE G1' }\n this.setColour(PEG1_HUE);\n this.appendValueInput('SUB')\n .appendField(name)\n .setCheck(\"var\");\n this.appendValueInput('PIN')\n .appendField('180°' + Blockly.Msg.MIXLY_SERVO)\n\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const pe_g1_servo_get_speed = {\n init: function () {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_ce\") { var name = 'CE G6' }\n else if (version == \"mixgo_pe\") { var name = 'PE G1' }\n this.setColour(PEG1_HUE);\n this.appendValueInput('SUB')\n .appendField(name)\n .setCheck(\"var\");\n this.appendValueInput('PIN')\n .appendField('360°' + Blockly.Msg.MIXLY_SERVO)\n .appendField(Blockly.Msg.LCD_NUMBERING)\n\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_SPEED);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};","import * as Blockly from 'blockly/core';\nimport { Profile } from 'mixly';\n\nconst PINS_HUE = 230;\n\nexport const pins_digital = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.digital), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_digital_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.digital_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_input_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.input_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_output_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.output_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pwm_input = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.pwm_input), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const analog_input = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.analog_input), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pwm_output = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.pwm_output), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const analog_output = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.analog_output), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const espnow_channel = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.espnow_channel), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\n\nexport const i2c_A_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.i2c_A_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const i2c_B_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.i2c_B_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\n\nexport const spi_A_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.spi_A_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const spi_B_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.spi_B_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const spi_C_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.spi_C_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const spi_D_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.spi_D_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_analog = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.analog), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_analog_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.analog_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_dac = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.dac), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_dac_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.dac_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_button = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.button), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_pwm = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.pwm), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_pwm_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.pwm_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_touch_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.touch_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_touch = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.touch), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_serial = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.serial_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_builtinimg = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.builtinimg), 'PIN');\n this.setOutput(true, \"esp32_image\");\n }\n};\n\nexport const pins_imglist = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.imglist), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_playlist = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.playlist), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_exlcdh = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.exlcdh), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_exlcdv = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.exlcdv), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_axis = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.axis), 'PIN');\n this.setOutput(true, Number);\n }\n};\nexport const pins_brightness = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.brightness), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_tone_notes = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.tone_notes), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_radio_power = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.radio_power), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_radio_datarate = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.radio_datarate), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_one_more = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.one_more), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_digital_dot = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.digital_dot), 'PIN');\n this.setOutput(true, Number);\n }\n};","import * as Blockly from 'blockly/core';\nimport { sensor_LTR308 } from './sensor_onboard';\n\nconst SENSOR_HUE = 40; //'#9e77c9'//40;\n\nexport const sensor_mixgo_button_is_pressed = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('btn')\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_IS_PRESSED);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SENOR_IS_PRESSED);\n }\n};\n\nexport const sensor_mixgo_button_was_pressed = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('btn')\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WAS_PRESSED);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SENOR_WAS_PRESSED);\n }\n};\n\nexport const sensor_mixgo_button_get_presses = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('btn')\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET_PRESSES);\n this.appendValueInput('VAR')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_GET_PRESSES_TIME);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + Blockly.Msg.MIXLY_BUTTON + Blockly.Msg.MIXLY_GET_PRESSES);\n }\n};\n\nexport const sensor_mixgo_button_attachInterrupt = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput(\"btn\")\n .appendField(Blockly.Msg.MIXLY_ESP32_INTERRUPT)\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MODE)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_RISING, \"machine.Pin.IRQ_RISING\"], [Blockly.Msg.MIXLY_FALLING, \"machine.Pin.IRQ_FALLING\"], [Blockly.Msg.MIXLY_CHANGE, \"(machine.Pin.IRQ_RISING or machine.Pin.IRQ_FALLING)\"]]), \"mode\");\n this.appendValueInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);\n }\n};\n\n\nexport const sensor_mixgo_extern_button_is_pressed = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_IS_PRESSED);\n this.appendValueInput(\"STAT\")\n .appendField(Blockly.Msg.MIXLY_ELECLEVEL);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SENOR_IS_PRESSED);\n }\n};\n\nexport const sensor_mixgo_extern_button_was_pressed = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WAS_PRESSED);\n this.appendValueInput(\"STAT\")\n .appendField(Blockly.Msg.MIXLY_ELECLEVEL);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SENOR_WAS_PRESSED);\n }\n};\n\nexport const sensor_mixgo_extern_button_get_presses = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET_PRESSES);\n this.appendValueInput('VAR')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_GET_PRESSES_TIME);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + Blockly.Msg.MIXLY_BUTTON + Blockly.Msg.MIXLY_GET_PRESSES);\n }\n};\n\nexport const sensor_mixgo_extern_button_attachInterrupt = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MODE)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_RISING, \"machine.Pin.IRQ_RISING\"], [Blockly.Msg.MIXLY_FALLING, \"machine.Pin.IRQ_FALLING\"], [Blockly.Msg.MIXLY_CHANGE, \"(machine.Pin.IRQ_RISING or machine.Pin.IRQ_FALLING)\"]]), \"mode\");\n this.appendValueInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);\n }\n};\n\nexport const sensor_mpu9250_attachGestureInterrupt = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('SUB')\n .appendField(\"MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_MICROBIT_shake, \"shake\"], [Blockly.Msg.MIXLY_UP, \"up\"], [Blockly.Msg.MIXLY_DOWN, \"down\"], [Blockly.Msg.MIXLY_LEFT, \"left\"], [Blockly.Msg.MIXLY_RIGHT, \"right\"], [Blockly.Msg.MIXLY_MICROBIT_face_up, \"face up\"], [Blockly.Msg.MIXLY_MICROBIT_face_down, \"face down\"], [Blockly.Msg.MIXLY_MICROBIT_freefall, \"freefall\"], [\"3g\", \"3g\"], [\"6g\", \"6g\"], [\"8g\", \"8g\"]]), \"gesture\");\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('gesture');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT;\n var mode1 = Blockly.Msg.MSG.catSensor;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_STATE;\n var mode3 = Blockly.Msg.MIXLY_MICROBIT_PERFORMANCE\n var TOOLTIPS = {\n 'shake': Blockly.Msg.MIXLY_MICROBIT_shake,\n 'up': Blockly.Msg.MIXLY_UP,\n 'down': Blockly.Msg.MIXLY_DOWN,\n 'left': Blockly.Msg.MIXLY_LEFT,\n 'right': Blockly.Msg.MIXLY_RIGHT,\n 'face up': Blockly.Msg.MIXLY_MICROBIT_face_up,\n 'face down': Blockly.Msg.MIXLY_MICROBIT_face_down,\n 'freefall': Blockly.Msg.MIXLY_MICROBIT_freefall,\n '3g': '3g',\n '6g': '6g',\n '8g': '8g'\n };\n return mode0 + mode1 + mode2 + TOOLTIPS[mode] + mode3;\n });\n }\n};\n\nexport const sensor_mpu9250_gesture = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('SUB')\n .appendField(\"MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_MICROBIT_shake, \"shake\"], [Blockly.Msg.MIXLY_UP, \"up\"], [Blockly.Msg.MIXLY_DOWN, \"down\"], [Blockly.Msg.MIXLY_LEFT, \"left\"], [Blockly.Msg.MIXLY_RIGHT, \"right\"], [Blockly.Msg.MIXLY_MICROBIT_face_up, \"face up\"], [Blockly.Msg.MIXLY_MICROBIT_face_down, \"face down\"]]), \"gesture\");\n this.setOutput(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('gesture');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT;\n var mode1 = Blockly.Msg.MSG.catSensor;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_STATE;\n var mode3 = Blockly.Msg.MIXLY_MICROBIT_PERFORMANCE\n var TOOLTIPS = {\n 'shake': Blockly.Msg.MIXLY_MICROBIT_shake,\n 'up': Blockly.Msg.MIXLY_UP,\n 'down': Blockly.Msg.MIXLY_DOWN,\n 'left': Blockly.Msg.MIXLY_LEFT,\n 'right': Blockly.Msg.MIXLY_RIGHT,\n 'face up': Blockly.Msg.MIXLY_MICROBIT_face_up,\n 'face down': Blockly.Msg.MIXLY_MICROBIT_face_down,\n // 'freefall':Blockly.Msg.MIXLY_MICROBIT_freefall,\n // '3g': '3g',\n // '6g': '6g',\n // '8g': '8g'\n };\n return mode0 + mode1 + mode2 + TOOLTIPS[mode] + mode3;\n });\n }\n};\n\nexport const sensor_mpu9250_get_acceleration = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('SUB')\n .appendField(\"MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"x\"],\n [\"y\", \"y\"],\n [\"z\", \"z\"],\n [\"(x,y,z)\", \"values\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;\n var TOOLTIPS = {\n 'x': 'x',\n 'y': 'y',\n 'z': 'z',\n '(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\n\n\nexport const sensor_adxl345_get_acceleration = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_ADXL345)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"x\"],\n [\"y\", \"y\"],\n [\"z\", \"z\"],\n [\"(x,y,z)\", \"values\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;\n var TOOLTIPS = {\n 'x': 'x',\n 'y': 'y',\n 'z': 'z',\n '(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\n\n\nexport const sensor_light_level = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_LIGHT_LEVEL)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SENSOR_LIGHT_LEVEL_TOOLTIP);\n }\n};\n\nexport const sensor_mpu9250_calibrate_compass = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('SUB')\n .appendField(\"MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS);\n }\n};\n// export const sensor_mpu9250_is_compass_calibrated = {\n// init: function(){\n// this.setColour(SENSOR_HUE);\n// this.appendValueInput('SUB')\n// .setCheck(\"var\");\n// this.appendDummyInput()\n// .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_IS_COMPASS_CALIBRATED)\n// this.setOutput(true, Number);\n// this.setInputsInline(true);\n// this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_IS_COMPASS_CALIBRATED1);\n// }\n// };\n// export const sensor_mpu9250_compass_heading = {\n// init: function(){\n// this.setColour(SENSOR_HUE);\n// this.appendValueInput('SUB')\n// .setCheck(\"var\");\n// this.appendDummyInput()\n// .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE)\n// this.setOutput(true, Number);\n// this.setInputsInline(true);\n// }\n// };\n\nexport const sensor_mpu9250_temperature = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('SUB')\n .appendField(\"MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GETTEMPERATUE)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n\n this.setTooltip(Blockly.Msg.MIXLY_GETTEMPERATUE);\n }\n};\n\nexport const sensor_mpu9250_field_strength = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('SUB')\n .appendField(\"MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET_COMPASS)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH, 'strength'], [Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, 'heading']]), 'compass');\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('compass');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_JS_GET_COMPASS;\n var TOOLTIPS = {\n 'strength': Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH,\n 'heading': Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE\n };\n return mode0 + TOOLTIPS[mode];\n });\n }\n};\n\nexport const sensor_distance_hrsc04 = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_CHAOSHENGBO)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_CHAOSHENGBO);\n }\n};\n\n//传感器-实时时钟块_获取时间\nexport const RTC_get_time = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('SUB')\n .appendField(\"RTC\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RTCGETTIME);\n // this.appendDummyInput(\"\").setAlign(Blockly.inputs.Align.RIGHT).appendField('myRTC');\n // this.appendDummyInput(\"\").setAlign(Blockly.inputs.Align.RIGHT).appendField(new Blockly.FieldDropdown(RTC_TIME_TYPE), \"TIME_TYPE\");\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_RTC_GET_TIME_TOOLTIP);\n // var thisBlock = this;\n // this.setTooltip(function() {\n // var mode = thisBlock.getFieldValue('TIME_TYPE');\n // var mode0 = Blockly.Msg.MIXLY_RTCGETTIME;\n // var TOOLTIPS = {\n // 'Year':Blockly.Msg.MIXLY_YEAR,\n // 'Month':Blockly.Msg.MIXLY_MONTH,\n // 'Day':Blockly.Msg.MIXLY_DAY,\n // 'Hour':Blockly.Msg.MIXLY_HOUR,\n // 'Minute':Blockly.Msg.MIXLY_MINUTE,\n // 'Second':Blockly.Msg.MIXLY_SECOND,\n // 'Week':Blockly.Msg.MIXLY_WEEK,\n // 'Mix1':Blockly.Msg.MIXLY_MIX1,\n // 'Mix2':Blockly.Msg.MIXLY_MIX2\n // };\n // return mode0 +TOOLTIPS[mode];\n // });\n }\n};\n\nexport const RTC_set_time = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendDummyInput(\"\")\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RTCSETTIME)\n .appendField('myRTC');\n this.appendValueInput(\"hour\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\" \" + Blockly.Msg.MIXLY_HOUR);\n this.appendValueInput(\"minute\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\" \" + Blockly.Msg.MIXLY_MINUTE);\n this.appendValueInput(\"second\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\" \" + Blockly.Msg.MIXLY_SECOND);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(false);\n this.setTooltip(Blockly.Msg.MIXLY_RTCSETTIME + Blockly.Msg.MIXLY_MIX2);\n }\n};\n\nexport const RTC_set_date = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendDummyInput(\"\")\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RTCSETDATE)\n .appendField('myRTC');\n this.appendValueInput(\"year\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\" \" + Blockly.Msg.MIXLY_YEAR);\n this.appendValueInput(\"month\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\" \" + Blockly.Msg.MIXLY_MONTH);\n this.appendValueInput(\"day\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\" \" + Blockly.Msg.MIXLY_DAY);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_RTCSETDATE + Blockly.Msg.MIXLY_MIX1);\n }\n};\n\nexport const sensor_compass_reset = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('SUB')\n .appendField(\"MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Reset_COMPASS)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Reset_COMPASS);\n }\n};\n\nexport const HCSR04 = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_CHAOSHENGBO);\n this.appendValueInput(\"PIN1\", Number)\n .appendField('Trig #')\n .setCheck(Number);\n this.appendValueInput(\"PIN2\", Number)\n .appendField('Echo #')\n .setCheck(Number);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_CHAOSHENGBO);\n }\n\n};\n\nexport const sensor_dht11 = {\n init: function () {\n var WHAT = [[Blockly.Msg.MIXLY_GETTEMPERATUE, 'temperature'], [Blockly.Msg.MIXLY_GETHUMIDITY, 'relative_humidity'], [Blockly.Msg.MIXLY_DHT11_T_H, 'tempandhum']];\n this.setColour(SENSOR_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(new Blockly.FieldDropdown([['DHT11', 'dht11']\n , ['DHT22', 'dht22']//, ['DHT21', '21'], ['DHT33', '33'], ['DHT44', '44']\n ]), 'TYPE')\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(WHAT), \"WHAT\");\n this.setOutput(true, Number);\n var thisBlock = this;\n this.setTooltip(function () {\n var op = thisBlock.getFieldValue('WHAT');\n var TOOLTIPS = {\n 'temperature': Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_TEM,\n 'relative_humidity': Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_HUM,\n 'tempandhum': Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_TEM_HUM\n };\n return TOOLTIPS[op];\n });\n }\n};\n\n\nexport const sensor_mixgo_extern_light = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_LIGHT);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_VALUE);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_LIGHT_TOOLTIP);\n }\n};\n\nexport const sensor_mixgo_extern_sound = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_SOUND);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_VALUE);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_SOUND_TOOLTIP);\n }\n};\n\nexport const number1 = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[\"1\", \"touch1\"], [\"2\", \"touch2\"]]), 'op')\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);\n }\n};\n\nexport const sensor_mixgo_pin_pressed = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput(\"button\")\n .appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_IS_TOUCHED);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_sensor_pin_pressed);\n }\n};\n\nexport const sensor_mixgo_extern_pin_near = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_NEAR);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_VALUE);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP + Blockly.Msg.MIXLY_ESP32_NEAR);\n }\n};\n\n\nexport const sensor_mixgo_pin_near = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, \"left\"], [Blockly.Msg.TEXT_TRIM_RIGHT, \"right\"]]), \"direction\")\n .appendField(Blockly.Msg.MIXLY_ESP32_NEAR);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('direction');\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;\n var TOOLTIPS = {\n 'left': Blockly.Msg.TEXT_TRIM_LEFT,\n 'right': Blockly.Msg.TEXT_TRIM_RIGHT,\n };\n return mode0 + TOOLTIPS[mode] + mode1\n });\n }\n};\n\nexport const RTC_set_datetime = {\n init: function () {\n this.setColour(SENSOR_HUE);\n // this.appendDummyInput()\n this.appendValueInput('SUB')\n .appendField(\"RTC\")\n .appendField(Blockly.Msg.MIXLY_RTC_TIME)\n .setCheck(\"var\");\n this.appendValueInput('year')\n .setCheck(Number)\n .appendField(\" \" + Blockly.Msg.MIXLY_YEAR);\n this.appendValueInput('month')\n .setCheck(Number)\n .appendField(\" \" + Blockly.Msg.MIXLY_MONTH);\n this.appendValueInput('day')\n .setCheck(Number)\n .appendField(\" \" + Blockly.Msg.MIXLY_DAY);\n this.appendValueInput('weekday')\n .setCheck(Number)\n .appendField(\" \" +\n Blockly.Msg.MIXLY_WEEK2);\n this.appendValueInput('hour')\n .setCheck(Number)\n .appendField(\" \" + Blockly.Msg.MIXLY_HOUR);\n this.appendValueInput('minute')\n .setCheck(Number)\n .appendField(\" \" + Blockly.Msg.MIXLY_MINUTE);\n this.appendValueInput('second')\n .setCheck(Number)\n .appendField(\" \" + Blockly.Msg.MIXLY_SECOND);\n this.appendValueInput('millisecond')\n .setCheck(Number)\n .appendField(\" \" + Blockly.Msg.MIXLY_MILLISECOND);\n this.setInputsInline(false);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_RTC_SET_DATATIME_TOOLTIP);\n }\n};\n\nexport const sensor_rtc_init = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"RTC\")\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .setCheck(\"var\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SENSOR_RTC_INT_TOOLTIP);\n }\n};\n\nexport const sensor_use_i2c_init = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('I2CSUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"I2C\")\n .setCheck(\"var\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .appendField(new Blockly.FieldDropdown([\n [\"MPU9250\", \"MPU9250\"],\n [\"BMP280\", \"BMP280\"],\n [\"SHT20\", \"SHT20\"],\n [\"ADXL345\", \"ADXL345\"]\n ]), \"key\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setFieldValue(\"MPU9250\", \"key\");\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_USE_I2C_TOOLTIP;\n var TOOLTIPS = {\n \"MPU9250\": \"MPU9250\",\n \"SHT20\": \"SHT20\",\n \"BMP280\": \"BMP280\",\n \"ADXL345\": \"ADXL345\"\n };\n return mode0 + TOOLTIPS[mode]\n });\n }\n};\n\nexport const sensor_bmp = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('SUB')\n .appendField(\"BMP280\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GETTEMPERATUE, \"get_BMP_temperature()\"],\n [Blockly.Msg.MIXLY_GETPRESSURE, \"get_BMP_pressure()\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var TOOLTIPS = {\n \"get_BMP_temperature()\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_BMP_temperature_TOOLTIP,\n \"get_BMP_pressure()\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_BMP_press_TOOLTIP,\n };\n return TOOLTIPS[mode]\n });\n }\n};\n\nexport const sensor_sht = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('SUB')\n .appendField(\"SHT20\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GETTEMPERATUE, \"get_SHT_temperature()\"],\n [Blockly.Msg.MIXLY_GETHUMIDITY, \"get_SHT_relative_humidity()\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var TOOLTIPS = {\n \"get_SHT_temperature()\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,\n \"get_SHT_relative_humidity()\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP,\n };\n return TOOLTIPS[mode]\n });\n }\n};\n\nexport const sensor_ds18x20 = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(\"DS18x20 \" + Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GETTEMPERATUE);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_SENSOR_DS18X20_TOOLTIP);\n }\n};\n\nexport const sensor_mpu9250_get_magnetic = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('SUB')\n .appendField(\"MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET + Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"x\"],\n [\"y\", \"y\"],\n [\"z\", \"z\"],\n [\"(x,y,z)\", \"values\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH;\n var TOOLTIPS = {\n 'x': 'x',\n 'y': 'y',\n 'z': 'z',\n '(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\n\nexport const sensor_mpu9250_get_gyro = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendValueInput('SUB')\n .appendField(\"MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + Blockly.Msg.MIXLY_ESP32_SENOR_GYRO)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"x\"],\n [\"y\", \"y\"],\n [\"z\", \"z\"],\n [\"(x,y,z)\", \"values\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_ESP32_SENOR_GYRO;\n var TOOLTIPS = {\n 'x': 'x',\n 'y': 'y',\n 'z': 'z',\n '(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\n\nexport const sensor_lm35 = {\n init: function () {\n this.setColour(SENSOR_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"LM35\" + Blockly.Msg.MIXLY_TEMP);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GETTEMPERATUE);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_LM35);\n }\n};\n\nexport const sensor_button_is_pressed = sensor_mixgo_button_is_pressed;\nexport const sensor_button_was_pressed = sensor_mixgo_button_was_pressed;\nexport const sensor_button_get_presses = sensor_mixgo_button_get_presses;\nexport const sensor_pin_pressed = sensor_mixgo_pin_pressed;\nexport const sensor_pin_near = sensor_mixgo_pin_near;\nexport const sensor_mixgo_light = sensor_LTR308;\nexport const sensor_light = sensor_mixgo_light;\nexport const sensor_get_acceleration = sensor_mpu9250_get_acceleration;\nexport const dht11 = sensor_dht11;\nexport const sensor_field_strength = sensor_mpu9250_field_strength;\nexport const sensor_temperature = sensor_mpu9250_temperature","import * as Blockly from 'blockly/core';\nimport { Profile } from 'mixly';\n\nconst SENSOR_EXTERN_HUE = '#A58C5B'; //'#9e77c9'//40;\n\n\nexport const sensor_mixgo_extern_button_is_pressed = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_IS_PRESSED);\n this.appendValueInput(\"STAT\")\n .appendField(Blockly.Msg.MIXLY_ELECLEVEL);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SENOR_IS_PRESSED);\n }\n};\n\nexport const sensor_mixgo_extern_button_was_pressed = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WAS_PRESSED);\n this.appendValueInput(\"STAT\")\n .appendField(Blockly.Msg.MIXLY_ELECLEVEL);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SENOR_WAS_PRESSED);\n }\n};\n\nexport const sensor_mixgo_extern_button_get_presses = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET_PRESSES);\n this.appendValueInput('VAR')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_GET_PRESSES_TIME);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + Blockly.Msg.MIXLY_BUTTON + Blockly.Msg.MIXLY_GET_PRESSES);\n }\n};\n\nexport const sensor_mixgo_extern_button_attachInterrupt = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MODE)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_RISING, \"machine.Pin.IRQ_RISING\"], [Blockly.Msg.MIXLY_FALLING, \"machine.Pin.IRQ_FALLING\"], [Blockly.Msg.MIXLY_CHANGE, \"(machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING)\"]]), \"mode\");\n this.appendValueInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);\n }\n};\n\n\nexport const sensor_mpu9250_attachGestureInterrupt = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(\"MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_MICROBIT_shake, \"shake\"], [Blockly.Msg.MIXLY_UP, \"up\"], [Blockly.Msg.MIXLY_DOWN, \"down\"], [Blockly.Msg.MIXLY_LEFT, \"left\"], [Blockly.Msg.MIXLY_RIGHT, \"right\"], [Blockly.Msg.MIXLY_MICROBIT_face_up, \"face up\"], [Blockly.Msg.MIXLY_MICROBIT_face_down, \"face down\"], [Blockly.Msg.MIXLY_MICROBIT_freefall, \"freefall\"], [\"3g\", \"3g\"], [\"6g\", \"6g\"], [\"8g\", \"8g\"]]), \"gesture\");\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('gesture');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT;\n var mode1 = Blockly.Msg.MSG.catSensor;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_STATE;\n var mode3 = Blockly.Msg.MIXLY_MICROBIT_PERFORMANCE\n var TOOLTIPS = {\n 'shake': Blockly.Msg.MIXLY_MICROBIT_shake,\n 'up': Blockly.Msg.MIXLY_UP,\n 'down': Blockly.Msg.MIXLY_DOWN,\n 'left': Blockly.Msg.MIXLY_LEFT,\n 'right': Blockly.Msg.MIXLY_RIGHT,\n 'face up': Blockly.Msg.MIXLY_MICROBIT_face_up,\n 'face down': Blockly.Msg.MIXLY_MICROBIT_face_down,\n 'freefall': Blockly.Msg.MIXLY_MICROBIT_freefall,\n '3g': '3g',\n '6g': '6g',\n '8g': '8g'\n };\n return mode0 + mode1 + mode2 + TOOLTIPS[mode] + mode3;\n });\n }\n};\n\n\nexport const sensor_adxl345_get_acceleration = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_ADXL345)\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"x\"],\n [\"y\", \"y\"],\n [\"z\", \"z\"],\n [\"(x,y,z)\", \"values\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;\n var TOOLTIPS = {\n 'x': 'x',\n 'y': 'y',\n 'z': 'z',\n '(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\n\n\n\nexport const sensor_light_level = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_LIGHT_LEVEL)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SENSOR_LIGHT_LEVEL_TOOLTIP);\n }\n};\n\n\n\nexport const sensor_dht11 = {\n init: function () {\n var WHAT = [[Blockly.Msg.MIXLY_GETTEMPERATUE, 'temperature'], [Blockly.Msg.MIXLY_GETHUMIDITY, 'humidity']];\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(new Blockly.FieldDropdown([['DHT11', 'DHT11']\n , ['DHT22', 'DHT22']//, ['DHT21', '21'], ['DHT33', '33'], ['DHT44', '44']\n ]), 'TYPE')\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(WHAT), \"WHAT\");\n this.setOutput(true, Number);\n var thisBlock = this;\n this.setTooltip(function () {\n var op = thisBlock.getFieldValue('WHAT');\n var TOOLTIPS = {\n 'temperature': Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_TEM,\n 'relative_humidity': Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_HUM,\n 'tempandhum': Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_TEM_HUM\n };\n return TOOLTIPS[op];\n });\n }\n};\n\n\nexport const sensor_mixgo_extern_light = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_LIGHT);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_VALUE);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_LIGHT_TOOLTIP);\n }\n};\n\nexport const sensor_mixgo_extern_sound = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_SOUND);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_VALUE);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_SOUND_TOOLTIP);\n }\n};\n\n\n\nexport const sensor_mixgo_extern_pin_near = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, \"left\"], [Blockly.Msg.TEXT_TRIM_RIGHT, \"right\"]]), \"direction\")\n .appendField(Blockly.Msg.MIXLY_ESP32_NEAR);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('direction');\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;\n var TOOLTIPS = {\n 'left': Blockly.Msg.TEXT_TRIM_LEFT,\n 'right': Blockly.Msg.TEXT_TRIM_RIGHT,\n };\n return mode0 + TOOLTIPS[mode] + mode1\n });\n }\n};\n\nexport const sensor_bmp = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_ALTITUDE_SENSOR+\" BMP280\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GETTEMPERATUE, \"get_BMP_temperature()\"],\n [Blockly.Msg.MIXLY_GETPRESSURE, \"get_BMP_pressure()\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var TOOLTIPS = {\n \"get_BMP_temperature()\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_BMP_temperature_TOOLTIP,\n \"get_BMP_pressure()\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_BMP_press_TOOLTIP,\n };\n return TOOLTIPS[mode]\n });\n }\n};\n\nexport const sensor_sht = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_TEMP_AND_HUMIDITY_SENSOR +\" SHT20\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GETTEMPERATUE, \"get_SHT_temperature()\"],\n [Blockly.Msg.MIXLY_GETHUMIDITY, \"get_SHT_relative_humidity()\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var TOOLTIPS = {\n \"get_SHT_temperature()\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,\n \"get_SHT_relative_humidity()\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP,\n };\n return TOOLTIPS[mode]\n });\n }\n};\n\nexport const sensor_DS18X20 = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(\"DS18X20 \" + Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GETTEMPERATUE);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_SENSOR_DS18X20_TOOLTIP);\n }\n};\n\nexport const sensor_lm35 = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"LM35\" + Blockly.Msg.MIXLY_TEMP);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GETTEMPERATUE);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_LM35);\n }\n};\n\n\n//pe\nexport const sensor_use_i2c_init = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('I2CSUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"I2C\")\n .setCheck(\"var\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_ESP32_EXTERN_LIGHT+\"(LTR308ALS)\", \"LTR308\"],\n [Blockly.Msg.MIXLY_COLOR_SENSOR+\"(LTR381RGB)\", \"LTR381RGB\"],\n [Blockly.Msg.MIXLY_COLOR_SENSOR+\"(UCS12071)\",\"UCS12071\"],\n [Blockly.Msg.MIXLY_EXTERN_LIGHTUV +\"(LTR390UV)\",\"LTR390UV\"],\n [Blockly.Msg.MIXLY_ALTITUDE_SENSOR+\"(HP203X)\", \"HP203X\"],\n [Blockly.Msg.MIXLY_ALTITUDE_SENSOR+\"(SPL06_001)\",\"SPL06_001\"],\n [Blockly.Msg.MIXLY_ALTITUDE_SENSOR+\"(BMP280)\", \"BMP280\"],\n [Blockly.Msg.MIXLY_TEMP_AND_HUMIDITY_SENSOR + \"(SHTC3)\", \"SHTC3\"],\n [Blockly.Msg.MIXLY_TEMP_AND_HUMIDITY_SENSOR + \"(AHT21)\", \"AHT21\"],\n [Blockly.Msg.MIXLY_TEMP_AND_HUMIDITY_SENSOR + \"(SHT20)\", \"SHT20\"],\n [Blockly.Msg.MIXLY_LASER_RANGE_SENSOR + \"(VL53L0X)\", \"VL53L0X\"],\n [Blockly.Msg.MIXLY_GEOMAGNETIC_SENSOR + \"(QMC5883L)\", \"QMC5883L\"],\n [Blockly.Msg.MIXLY_ESP32_MAX30102+\"(MAX30102)\", \"MAX30102\"],\n [Blockly.Msg.HTML_COLOUR +\"、\"+ Blockly.Msg.MIXLY_ENVIRONMENT_LIGHT+\"、\"+Blockly.Msg.MIXLY_NEXT+\"、\"+Blockly.Msg.MIXLY_ESP32_APDS9960+\"(APDS9960)\", \"APDS9960\"],\n [Blockly.Msg.MIXLY_NINE_AXIS_SENSOR+\"(MPU9250)\", \"MPU9250\"],\n [Blockly.Msg.MixGo_MPU9250+\"(ADXL345)\", \"ADXL345\"],\n [\"RFID\", \"RFID\"],\n [Blockly.Msg.MIXLY_RADAR_SENSOR+\"(CBR817)\", \"CBR817\"],\n [Blockly.Msg.MIXLY_AipSpeech_asr+\"(CI130X)\",\"CI130X\"]\n ]), \"key\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setFieldValue(\"LTR308\", \"key\");\n }\n};\n\nexport const radar_set_DETECTION_THRESHOLD = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_RADAR+'CBR817')\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXlY_INTERACTION)\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_DETECTION_THRESHOLD);\n this.appendValueInput('VAR2')\n .appendField(Blockly.Msg.MIXLY_DELAY_TIME);\n this.appendDummyInput()\n .appendField('ms');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_THRESHOLD_TOOLTIP+' ; '+Blockly.Msg.MIXLY_DELAY_TIME_RANGE)\n }\n};\n\nexport const radar_set_DETECTION_THRESHOLD_SANT = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RADAR)\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXlY_INTERACTION)\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_DETECTION_THRESHOLD);\n this.appendValueInput('VAR2')\n .appendField(Blockly.Msg.MIXLY_DELAY_TIME);\n this.appendDummyInput()\n .appendField('ms');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_THRESHOLD_TOOLTIP+' ; '+Blockly.Msg.MIXLY_DELAY_TIME_RANGE)\n }\n};\n\nexport const interaction_whether_to_interaction = {\n init:function(){\n this.setColour(SENSOR_EXTERN_HUE); \n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_RADAR+'CBR817')\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GET_TO_INTERACTION)\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const interaction_whether_to_interaction_SANT = {\n init:function(){\n this.setColour(SENSOR_EXTERN_HUE); \n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RADAR)\n .appendField(Blockly.Msg.MIXLY_GET_TO_INTERACTION)\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const CI130X_IDENTIFY_AND_SAVE = {\n init:function(){\n this.setColour(SENSOR_EXTERN_HUE); \n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_AipSpeech_asr+'CI130X')\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_IDENTIFY_ONCE_AND_SAVE)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};\n\nexport const CI130X_GET_WHETHER_IDENTIFY = {\n init:function(){\n this.setColour(SENSOR_EXTERN_HUE); \n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_AipSpeech_asr+'CI130X')\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_HELLO_XIAOZHI,\"1\"],\n [Blockly.Msg.MIXLY_XIAOZHIXIAOZHI ,\"2\"],\n [Blockly.Msg.MIXLY_THE_FIRST ,\"3\"],\n [Blockly.Msg.MIXLY_THE_SECOND ,\"4\"],\n [Blockly.Msg.MIXLY_THE_THIRD ,\"5\"],\n [Blockly.Msg.MIXLY_THE_FOURTH ,\"6\"],\n [Blockly.Msg.MIXLY_THE_FIFTH ,\"7\"],\n [Blockly.Msg.MIXLY_THE_SIXTH ,\"8\"],\n [Blockly.Msg.MIXLY_THE_SEVENTH ,\"9\"],\n [Blockly.Msg.MIXLY_THE_EIGHTH ,\"10\"],\n [Blockly.Msg.MIXLY_THE_NINTH ,\"11\"],\n [Blockly.Msg.MIXLY_THE_TENTH ,\"12\"],\n [Blockly.Msg.MIXLY_THE_ELEVENTH ,\"13\"],\n [Blockly.Msg.MIXLY_THE_TWELFTH ,\"14\"],\n [Blockly.Msg.MIXLY_THE_13TH ,\"15\"],\n [Blockly.Msg.MIXLY_THE_14TH ,\"16\"],\n [Blockly.Msg.MIXLY_THE_15TH ,\"17\"],\n [Blockly.Msg.MIXLY_THE_16TH ,\"18\"],\n [Blockly.Msg.MIXLY_THE_17TH ,\"19\"],\n [Blockly.Msg.MIXLY_THE_18TH ,\"20\"],\n [Blockly.Msg.MIXLY_THE_19TH ,\"21\"],\n [Blockly.Msg.MIXLY_THE_20TH ,\"22\"],\n [Blockly.Msg.MIXLY_Turn_on_the_lights ,\"23\"],\n [Blockly.Msg.MIXLY_Turn_off_the_lights ,\"24\"],\n [Blockly.Msg.MIXLY_Turn_up_the_brightness ,\"25\"],\n [Blockly.Msg.MIXLY_Turn_down_the_brightness ,\"26\"],\n [Blockly.Msg.MIXLY_Set_it_to_red ,\"27\"],\n [Blockly.Msg.MIXLY_Set_it_to_orange ,\"28\"],\n [Blockly.Msg.MIXLY_Set_it_to_yellow ,\"29\"],\n [Blockly.Msg.MIXLY_Set_it_to_green ,\"30\"],\n [Blockly.Msg.MIXLY_Set_it_to_cyan ,\"31\"],\n [Blockly.Msg.MIXLY_Set_it_to_blue ,\"32\"],\n [Blockly.Msg.MIXLY_Set_it_to_purple ,\"33\"],\n [Blockly.Msg.MIXLY_Set_it_to_white ,\"34\"],\n [Blockly.Msg.MIXLY_Turn_on_the_fan ,\"35\"],\n [Blockly.Msg.MIXLY_Turn_off_the_fan ,\"36\"],\n [Blockly.Msg.MIXLY_First_gear ,\"37\"],\n [Blockly.Msg.MIXLY_Wind_speed_second ,\"38\"],\n [Blockly.Msg.MIXLY_Third_gear ,\"39\"],\n [Blockly.Msg.MIXLY_Previous ,\"40\"],\n [Blockly.Msg.MIXLY_Next_page ,\"41\"],\n [Blockly.Msg.MIXLY_Show_smiley_face ,\"42\"],\n [Blockly.Msg.MIXLY_Show_crying_face ,\"43\"],\n [Blockly.Msg.MIXLY_Show_love ,\"44\"],\n [Blockly.Msg.MIXLY_Close_display ,\"45\"],\n [Blockly.Msg.MIXLY_Start_execution ,\"46\"],\n [Blockly.Msg.MIXLY_FORWARD ,\"47\"],\n [Blockly.Msg.MIXLY_BACKWARD ,\"48\"],\n [Blockly.Msg.MIXLY_TURNLEFT ,\"49\"],\n [Blockly.Msg.MIXLY_TURNRIGHT ,\"50\"],\n [Blockly.Msg.MIXLY_STOP ,\"51\"],\n [Blockly.Msg.MIXLY_Accelerate ,\"52\"],\n [Blockly.Msg.MIXLY_retard ,\"53\"],\n [Blockly.Msg.ROTATION_FORWARD ,\"54\"],\n [Blockly.Msg.ROTATION_BACKWARD ,\"55\"],\n [Blockly.Msg.MIXLY_Query_temperature ,\"56\"],\n [Blockly.Msg.MIXLY_Query_humidity ,\"57\"],\n [Blockly.Msg.MIXLY_Query_brightness ,\"58\"],\n [Blockly.Msg.MIXLY_Query_sound ,\"59\"],\n [Blockly.Msg.MIXLY_Query_time ,\"60\"],\n [Blockly.Msg.MIXLY_Query_distance ,\"61\"],\n [Blockly.Msg.MIXLY_Query_pressure ,\"62\"],\n [Blockly.Msg.MIXLY_Query_key ,\"63\"],\n [Blockly.Msg.MIXLY_Query_touch ,\"64\"],\n [Blockly.Msg.MIXLY_Query_color ,\"65\"]\n ]),\"cmd\")\n .appendField(Blockly.Msg.MIXLY_WHETHER+Blockly.Msg.MIXLY_BE_IDENTIFIED);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const CI130X_GET_THE_RECOGNIZED_CMD = {\n init:function(){\n this.setColour(SENSOR_EXTERN_HUE); \n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_AipSpeech_asr+'CI130X')\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_RECOGNIZED_STATE,\"status1\"],\n [Blockly.Msg.MIXLY_WHETHER_BROADCAST,\"status2\"],\n [Blockly.Msg.MIXLY_THE_RECOGNIZED_CMD,\"result\"]\n ]),\"key\")\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_CI130X_GET_THE_RECOGNIZED_STATE_TOOLTIP);\n }\n};\n\nexport const CI130X_BROADCAST = {\n init:function(){\n this.setColour(SENSOR_EXTERN_HUE); \n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_AipSpeech_asr+'CI130X')\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MP3_PLAY)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_JS_INOUT_PULL_NONE,\"None\"],\n [Blockly.Msg.MIXLY_WIND_SPEED,\"154\"],\n [Blockly.Msg.MIXLY_HYETAL,\"155\"],\n [Blockly.Msg.MIXLY_TEMPERATURE,\"156\"],\n [Blockly.Msg.MIXLY_Humidity,\"157\"],\n [Blockly.Msg.MIXLY_Altitude, \"158\"],\n [Blockly.Msg.MIXLY_SOUND, \"159\"],\n [Blockly.Msg.MIXLY_BRIGHTNESS, \"160\"],\n [Blockly.Msg.ME_GO_HALL_SENSOR_DISTANCE,\"161\"],\n [Blockly.Msg.MIXLY_SERVO,\"162\"],\n [Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE,\"163\"],\n [Blockly.Msg.MIXLY_BUTTON2,\"164\"],\n [Blockly.Msg.MIXLY_ESP32_TOUCH,\"165\"],\n [Blockly.Msg.MIXLY_PAY,\"166\"],\n [Blockly.Msg.MIXLY_CARSH_CHANGE,\"167\"],\n [Blockly.Msg.MIXLY_COUNTDOWN,\"168\"],\n [Blockly.Msg.MIXLY_TIMING,\"169\"],\n [Blockly.Msg.MIXLY_AT_THE_MOMENT,\"170\"],\n [Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE,\"171\"],\n [Blockly.Msg.MIXLY_FORWARD ,\"172\"],\n [Blockly.Msg.MIXLY_BACKWARD ,\"173\"],\n [Blockly.Msg.MIXLY_TURNLEFT ,\"174\"],\n [Blockly.Msg.MIXLY_TURNRIGHT ,\"175\"],\n [Blockly.Msg.MIXLY_STOP ,\"176\"],\n [Blockly.Msg.MIXLY_Accelerate ,\"177\"],\n [Blockly.Msg.MIXLY_retard ,\"178\"],\n [Blockly.Msg.ROTATION_FORWARD ,\"179\"],\n [Blockly.Msg.ROTATION_BACKWARD ,\"180\"],\n [Blockly.Msg.TUPLE_JOIN,\"181\"],\n [Blockly.Msg.MIXLY_SHOW,\"182\"],\n [Blockly.Msg.MIXLY_LAMPLIGHT,\"183\"],\n [Blockly.Msg.MIXLY_ACCELERATION,\"184\"]\n ]),\"star\");\n this.appendValueInput('NUM')\n .appendField(Blockly.Msg.MIXLY_NUMBER);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_UNIT)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_JS_INOUT_PULL_NONE,\"None\"],\n [Blockly.Msg.MIXLY_YEAR,\"117\"],\n [Blockly.Msg.MIXLY_MONTH,\"118\"],\n [Blockly.Msg.MIXLY_DAY,\"119\"],\n [Blockly.Msg.MIXLY_HOUR,\"120\"],\n [Blockly.Msg.MIXLY_MINUTE,\"121\"],\n [Blockly.Msg.MIXLY_SECOND,\"122\"],\n [Blockly.Msg.MIXLY_WEEK2,\"123\"],\n [Blockly.Msg.MIXLY_RMB_UNIT,\"124\"],\n [Blockly.Msg.blockpy_setheading_degree,\"125\"],\n [Blockly.Msg.MIXLY_GEAR,\"126\"],\n [Blockly.Msg.MIXLY_LAYER,\"127\"],\n [Blockly.Msg.MIXLY_GRAM,\"128\"],\n [Blockly.Msg.MIXLY_METER,\"129\"],\n [Blockly.Msg.MIXLY_CENTIMETER,\"130\"],\n [Blockly.Msg.MIXLY_MILLIMETER,\"131\"],\n [Blockly.Msg.MIXLY_LUMEN,\"132\"],\n [Blockly.Msg.MIXLY_DECIBEL,\"133\"],\n [Blockly.Msg.MIXLY_hectopascal,\"134\"],\n [Blockly.Msg.MIXLY_PERCENT,\"135\"],\n [Blockly.Msg.MIXLY_CELSIUS,\"136\"],\n [Blockly.Msg.MIXLY_METER_PER_SEC,\"137\"],\n [Blockly.Msg.MIXLY_MICROBIT_Turn_on_display,\"138\"],\n [Blockly.Msg.MIXLY_MICROBIT_Turn_off_display,\"139\"],\n [Blockly.Msg.MIXLY_SUCCESS,\"140\"],\n [Blockly.Msg.MIXLY_FAILED,\"141\"],\n [Blockly.Msg.MIXLY_WRONG,\"142\"],\n [Blockly.Msg.MIXLY_GOOD,\"143\"],\n [Blockly.Msg.MIXLY_blockpy_set_add,\"144\"],\n [Blockly.Msg.MIXLY_DECREASE,\"145\"],\n [Blockly.Msg.COLOUR_RGB_RED,\"146\"],\n [Blockly.Msg.COLOUR_RGB_ORANGE,\"147\"],\n [Blockly.Msg.COLOUR_YELLOW,\"148\"],\n [Blockly.Msg.COLOUR_RGB_GREEN,\"149\"],\n [Blockly.Msg.COLOUR_CYAN,\"150\"],\n [Blockly.Msg.COLOUR_RGB_BLUE,\"151\"],\n [Blockly.Msg.COLOUR_RGB_PURPLE,\"152\"],\n [Blockly.Msg.COLOUR_RGB_WHITE,\"153\"]\n ]),\"end\");\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n}\n\nexport const CI130X_SET_SYSTEM_CMD = {\n init:function(){\n this.setColour(SENSOR_EXTERN_HUE); \n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_AipSpeech_asr+'CI130X')\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_SYSTEM + Blockly.Msg.MIXLY_CMD)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MILXY_ENTER_WAKE_UP,\"1\"],\n [Blockly.Msg.MIXLY_INCREASE_VOLUME,\"202\"],\n [Blockly.Msg.MIXLY_REDUCE_VOLUME,\"203\"],\n [Blockly.Msg.MIXLY_MAX_VOLUME,\"204\"],\n [Blockly.Msg.MIXLY_MINIMUM,\"205\"],\n [Blockly.Msg.MIXLY_OPEN_RESPONSE,\"206\"],\n [Blockly.Msg.MIXLY_CLOSE_RESPONSE,\"207\"],\n [Blockly.Msg.MIXLY_QUIT_WAKE_UP,\"208\"]\n ]),\"cmd\")\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_MAX30102_extern = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_MAX30102 + \" MAX30102\");\n this.appendValueInput('SUB')\n //.appendField(\"BMP280\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_ESP32_MAX30102_IR, \"[0]\"],\n [Blockly.Msg.MIXLY_ESP32_MAX30102_RED, \"[1]\"],\n [Blockly.Msg.MIXLY_ESP32_MAX30102_IR + ',' + Blockly.Msg.MIXLY_ESP32_MAX30102_RED, \"\"],\n ]), \"key\")\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_APDS9960_extern = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_APDS9960 + \" APDS9960\");\n this.appendValueInput('SUB')\n //.appendField(\"BMP280\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_ESP32_APDS9960_COLOR, \"color\"],\n [Blockly.Msg.MIXLY_ESP32_APDS9960_GESTURE, \"gesture\"],\n [Blockly.Msg.MIXLY_ESP32_APDS9960_APPROACH, \"proximity\"],\n ]), \"key\")\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_LTR308_extern = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_LIGHT + \" LTR308ALS\");\n this.appendValueInput('SUB')\n //.appendField(\"BMP280\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET_LIGHT_INTENSITY);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_ltr381_extern = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.HTML_COLOUR + Blockly.Msg.MSG.catSensor + \" LTR381RGB\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GET + Blockly.Msg.HTML_COLOUR, \"[2]\"],\n [Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_IR_STRENGTH, \"[1]\"],\n [Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_LIGHT_STRENGTH, \"[0]\"],\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_ucs12071_extern = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.HTML_COLOUR + Blockly.Msg.MSG.catSensor + \" UCS12071\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GET +'RGB'+ Blockly.Msg.HTML_COLOUR, \"0\"],\n [Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_RGB_RAW, \"1\"],\n [Blockly.Msg.MIXLY_GET_ENV_LIGHT + Blockly.Msg.MIXLY_BRIGHTNESS, \"2\"],\n [Blockly.Msg.GET_IR_STRENGTH+Blockly.Msg.MIXLY_BRIGHTNESS,\"3\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_LTR390UV_extern = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_EXTERN_LIGHTUV + \" LTR390UV\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GET_ENV_LIGHT, \"E\"],\n [Blockly.Msg.MIXLY_GET_ULTRAVIOLET, \"U\"],\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_VL530LX_extern = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_LASER_RANGE + \" VL53L0X\");\n this.appendValueInput('SUB')\n //.appendField(\"BMP280\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET_DISTANCE + '(mm)');\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_shtc3_extern = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_TEM_HUM + \" SHTC3\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GETTEMPERATUE, \"temperature\"],\n [Blockly.Msg.MIXLY_GETHUMIDITY, \"humidity\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var TOOLTIPS = {\n \"temperature\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,\n \"humidity\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP\n };\n return TOOLTIPS[mode]\n });\n }\n};\n\nexport const sensor_aht11_extern = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_TEM_HUM + \" AHT21\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GETTEMPERATUE, \"temperature\"],\n [Blockly.Msg.MIXLY_GETHUMIDITY, \"humidity\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var TOOLTIPS = {\n \"temperature\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,\n \"relative_humidity\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP\n };\n return TOOLTIPS[mode]\n });\n }\n};\n\nexport const sensor_hp203_extern = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_Altitude + Blockly.Msg.MSG.catSensor + \" HP203X\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GETPRESSURE, \"pressure()\"],\n [Blockly.Msg.MIXLY_GETTEMPERATUE, \"temperature()\"],\n [Blockly.Msg.MIXLY_GET_ALTITUDE, \"altitude()\"],\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_spl06_001_extern = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_Altitude + Blockly.Msg.MSG.catSensor + \" SPL06_001\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GETPRESSURE, \"pressure()\"],\n [Blockly.Msg.MIXLY_GETTEMPERATUE, \"temperature()\"],\n [Blockly.Msg.MIXLY_GET_ALTITUDE, \"altitude()\"],\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_QMC5883L_extern = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MIXGOPE_FIELD + Blockly.Msg.MSG.catSensor + \" QMC5883L\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, \"get_bearing()\"],\n [Blockly.Msg.MIXLY_TEMPERATURE, \"get_temp()\"],\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_mpu9250_gesture = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(\"MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_MICROBIT_shake, \"shake\"], [Blockly.Msg.MIXLY_UP, \"up\"], [Blockly.Msg.MIXLY_DOWN, \"down\"], [Blockly.Msg.MIXLY_LEFT, \"left\"], [Blockly.Msg.MIXLY_RIGHT, \"right\"], [Blockly.Msg.MIXLY_MICROBIT_face_up, \"face up\"], [Blockly.Msg.MIXLY_MICROBIT_face_down, \"face down\"]]), \"gesture\");\n this.setOutput(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('gesture');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT;\n var mode1 = Blockly.Msg.MSG.catSensor;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_STATE;\n var mode3 = Blockly.Msg.MIXLY_MICROBIT_PERFORMANCE\n var TOOLTIPS = {\n 'shake': Blockly.Msg.MIXLY_MICROBIT_shake,\n 'up': Blockly.Msg.MIXLY_UP,\n 'down': Blockly.Msg.MIXLY_DOWN,\n 'left': Blockly.Msg.MIXLY_LEFT,\n 'right': Blockly.Msg.MIXLY_RIGHT,\n 'face up': Blockly.Msg.MIXLY_MICROBIT_face_up,\n 'face down': Blockly.Msg.MIXLY_MICROBIT_face_down,\n // 'freefall':Blockly.Msg.MIXLY_MICROBIT_freefall,\n // '3g': '3g',\n // '6g': '6g',\n // '8g': '8g'\n };\n return mode0 + mode1 + mode2 + TOOLTIPS[mode] + mode3;\n });\n }\n};\n\nexport const sensor_mpu9250_get_acceleration = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_NINE_AXIS_SENSOR+\" MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"x\"],\n [\"y\", \"y\"],\n [\"z\", \"z\"],\n [\"(x,y,z)\", \"values\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;\n var TOOLTIPS = {\n 'x': 'x',\n 'y': 'y',\n 'z': 'z',\n '(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\n\nexport const sensor_mpu9250_get_magnetic = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_NINE_AXIS_SENSOR+\" MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET + Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"x\"],\n [\"y\", \"y\"],\n [\"z\", \"z\"],\n [\"(x,y,z)\", \"values\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH;\n var TOOLTIPS = {\n 'x': 'x',\n 'y': 'y',\n 'z': 'z',\n '(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\n\nexport const sensor_mpu9250_get_gyro = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_NINE_AXIS_SENSOR+\" MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + Blockly.Msg.MIXLY_ESP32_SENOR_GYRO)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"x\"],\n [\"y\", \"y\"],\n [\"z\", \"z\"],\n [\"(x,y,z)\", \"values\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_ESP32_SENOR_GYRO;\n var TOOLTIPS = {\n 'x': 'x',\n 'y': 'y',\n 'z': 'z',\n '(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\n\nexport const sensor_mpu9250_calibrate_compass = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_NINE_AXIS_SENSOR+\" MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS);\n }\n};\n\n\nexport const sensor_mpu9250_temperature = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_NINE_AXIS_SENSOR+\" MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GETTEMPERATUE)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n\n this.setTooltip(Blockly.Msg.MIXLY_GETTEMPERATUE);\n }\n};\n\n\nexport const sensor_mpu9250_field_strength = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(\"MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET_COMPASS)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH, 'strength'], [Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, 'heading']]), 'compass');\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('compass');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_JS_GET_COMPASS;\n var TOOLTIPS = {\n 'strength': Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH,\n 'heading': Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE\n };\n return mode0 + TOOLTIPS[mode];\n });\n }\n};\n\nexport const sensor_compass_reset = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(\"MPU9250\")\n .setCheck(\"var\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Reset_COMPASS)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Reset_COMPASS);\n }\n};\n\nexport const sensor_use_spi_init = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SPISUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"SPI\")\n .setCheck(\"var\");\n this.appendValueInput('PINSUB')\n .appendField(\"CS\")\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .appendField(new Blockly.FieldDropdown([\n [\"RFID\", \"RFID\"],\n [\"WS-LoRa\", \"Weather\"]\n ]), \"key\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setFieldValue(\"RFID\", \"key\");\n }\n};\n\nexport const extern_rfid_read = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(\"RFID\" + Blockly.Msg.MIXLY_RFID_READ_CARD);\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.appendValueInput('SECTOR')\n .appendField(Blockly.Msg.MIXLY_LIST_INDEX)\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_RFID_READ_CARD_UID, \"id\"],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL, \"content\"],\n [Blockly.Msg.MIXLY_ALL, \"ALL\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const extern_rfid_readid = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(\"RFID\" + Blockly.Msg.MIXLY_RFID_READ_CARD);\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RFID_READ_CARD_UID);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const extern_rfid_readcontent = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(\"RFID\" + Blockly.Msg.MIXLY_RFID_READ_CARD);\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.appendValueInput('SECTOR')\n .appendField(Blockly.Msg.MIXLY_LIST_INDEX)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL);\n this.setOutput(true, 'Tuple');\n this.setInputsInline(true);\n }\n};\n\nexport const extern_rfid_write = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_RFID_WRITE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n this.appendValueInput('SECTOR')\n .appendField(Blockly.Msg.MIXLY_LIST_INDEX)\n this.appendValueInput('CONTENT')\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_WRITE_NUM)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n }\n};\n\nexport const extern_rfid_write_return = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_RFID_WRITE);\n this.appendValueInput('SUB')\n .setCheck(\"var\")\n this.appendValueInput('SECTOR')\n .appendField(Blockly.Msg.MIXLY_LIST_INDEX)\n this.appendValueInput('CONTENT')\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_WRITE_NUM)\n this.appendDummyInput()\n .appendField(Blockly.Msg.RETURN_SUCCESS_OR_NOT);\n this.setInputsInline(true);\n this.setOutput(true, Boolean);\n }\n};\n\nexport const extern_rfid_status = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(\"RFID\");\n this.appendValueInput('SUB')\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_RFID_SCAN_OK, \"0\"],\n [Blockly.Msg.MIXLY_RFID_SCAN_NOTAGERR, \"1\"],\n [Blockly.Msg.MIXLY_RFID_SCAN_ERROR, \"2\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\n//--------------------待写气象数据\nexport const weather_data = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(\"无线气象站\" + \" WS-LoRa\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET)\n .appendField(new Blockly.FieldDropdown([\n [\"全部(元组)\", \"data()[0]\"],\n [\"全部(json)\", \"data()[1]\"],\n [\"全部(json,附带位置信息)\", \"data()[2]\"],\n [\"编号\", \"data()[0][0]\"],\n [\"电量\", \"data()[0][1]\"],\n [\"风速\", \"data()[0][2]\"],\n [\"阵风\", \"data()[0][3]\"],\n [\"风向\", \"data()[0][4]\"],\n [\"雨量\", \"data()[0][5]\"],\n [\"温度\", \"data()[0][6]\"],\n [\"湿度\", \"data()[0][7]\"],\n [\"光照\", \"data()[0][8]\"],\n [\"紫外线\", \"data()[0][9]\"],\n [\"大气压\", \"data()[0][10]\"],\n [\"信号强度\", \"data()[0][11]\"],\n [\"信噪比\", \"data()[0][12]\"],\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(\"返回气象数据元组 data= (设备id,电池状态,风速m/s,阵风m/s,风向°,雨量mm,温度℃,湿度%,光照Lux,UVI,大气压Pa,信号强度dB,信噪比dB)\");\n }\n};\n\nexport const weather_have_data = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(\"无线气象站\" + \" WS-LoRa\")\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SERIAL_AVAILABLE)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const weather_uart_mixio = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(\"无线气象站\" + \" WS-LoRa\")\n .setCheck(\"var\");\n this.appendValueInput('BASE')\n .appendField(\"以主题\")\n this.appendDummyInput(\"\")\n .appendField(\"串口发送至MixIO\")\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n }\n};\n\nexport const weather_set_label = {\n\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(\"无线气象站\" + \" WS-LoRa\")\n .setCheck(\"var\");\n this.itemCount_ = 2;\n this.updateShape_();\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setInputsInline(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['weather_set_label_item'], this));\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip();\n },\n\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('weather_set_label_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('weather_set_label_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i)\n .connection.connect(connections[i]);\n }\n }\n },\n\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n var i = 0;\n while (this.getInput('ADD' + i)) {\n this.removeInput('ADD' + i);\n i++;\n }\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.appendDummyInput('EMPTY')\n .appendField(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_GPS_LOCATION + Blockly.Msg.mixpy_PYLAB_TICKS_TAG + '(id,long,lat)');\n } else {\n for (var i = 0; i < this.itemCount_; i++) {\n var input = this.appendValueInput('ADD' + i);\n if (i == 0) {\n input.appendField(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_GPS_LOCATION + Blockly.Msg.mixpy_PYLAB_TICKS_TAG + '(id,long,lat)');\n }\n }\n }\n }\n};\nexport const weather_set_label_container = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_GPS_LOCATION + Blockly.Msg.mixpy_PYLAB_TICKS_TAG);\n this.appendStatementInput('STACK');\n this.contextMenu = false;\n }\n};\n\nexport const weather_set_label_item = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.contextMenu = false;\n }\n};\n\nexport const sensor_mixgoce_hot_wheel_is_touched = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_HOT_WHEEL)\n .appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_UP, \"4\"],\n [Blockly.Msg.MIXLY_DOWN, \"2\"],\n [Blockly.Msg.MIXLY_LEFT, \"3\"],\n [Blockly.Msg.MIXLY_RIGHT, \"1\"],\n [\"OK\", \"0\"]\n ]), \"key\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_DATA, \"value\"],\n [Blockly.Msg.MIXLY_PULSEIN_STAT, \"is_touched()\"]\n ]), \"stat\");\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip();\n }\n};\n\nexport const sensor_mixgoce_hot_wheel_degrees = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_HOT_WHEEL)\n .appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE + '(-180°~180°)');\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip();\n }\n};\n\nexport const esp32_s2_weather_init = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.ForecastType + Blockly.Msg.MSG.catSensor);\n this.appendValueInput('wd')\n .setCheck(Number)\n .appendField('wd');\n this.appendValueInput('ws')\n .setCheck(Number)\n .appendField('ws');\n this.appendValueInput('rain')\n .setCheck(Number)\n .appendField('rain');\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const esp32_s2_weather_wd = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ForecastType + Blockly.Msg.MSG.catSensor)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + Blockly.Msg.ForecastFx)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const esp32_s2_weather_rain = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('rain')\n .appendField(Blockly.Msg.ForecastType + Blockly.Msg.MSG.catSensor)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_RAIN_TIME + Blockly.Msg.MIXLY_RAIN)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const esp32_s2_weather_ws = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ForecastType + Blockly.Msg.MSG.catSensor)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.blynk_IOT_IR_FAN, \"0\"],\n [Blockly.Msg.MIXLY_WIND_RATING, \"1\"],\n [Blockly.Msg.blynk_IOT_IR_FAN + Blockly.Msg.MIXLY_WIND_RATING, \"ALL\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const HCSR04 = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_CHAOSHENGBO);\n this.appendValueInput(\"PIN1\", Number)\n .appendField('Trig #')\n .setCheck(Number);\n this.appendValueInput(\"PIN2\", Number)\n .appendField('Echo #')\n .setCheck(Number);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_CHAOSHENGBO);\n }\n\n};\n\n//PS2\nexport const PS2_init = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.PS2);\n this.appendDummyInput(\"\")\n .appendField('CLK#')\n .appendField(new Blockly.FieldDropdown(Profile.default.output_pin), \"PS2_CLK\")\n .appendField('DOU#')\n .appendField(new Blockly.FieldDropdown(Profile.default.output_pin), \"PS2_DOU\")\n .appendField('DIN#')\n .appendField(new Blockly.FieldDropdown(Profile.default.output_pin), \"PS2_DIN\")\n .appendField('CS#')\n .appendField(new Blockly.FieldDropdown(Profile.default.output_pin), \"PS2_CS\");\n // this.appendDummyInput(\"\")\n // .appendField(Blockly.Msg.PS2_setRumble)\n // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_ON,\"true\"],[Blockly.Msg.MIXLY_OFF,\"false\"]]), \"rumble\");\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip('');\n }\n};\n\n\nvar PSBUTTON = [\n [Blockly.Msg.PS2_TRIANGLE, \"PSB_GREEN\"],\n [Blockly.Msg.PS2_CIRCLE, \"PSB_RED\"],\n [Blockly.Msg.PS2_CROSS, \"PSB_BLUE\"],\n [Blockly.Msg.PS2_SQUARE, \"PSB_PINK\"],\n [Blockly.Msg.PS2_L1, \"PSB_L1\"],\n [Blockly.Msg.PS2_L2, \"PSB_L2\"],\n // [\"PSB_L3\",\"PSB_L3\"],\n [Blockly.Msg.PS2_R1, \"PSB_R1\"],\n [Blockly.Msg.PS2_R2, \"PSB_R2\"],\n // [\"PSB_R3\",\"PSB_R3\"],\n [Blockly.Msg.PS2_UP, \"PSB_PAD_UP\"],\n [Blockly.Msg.PS2_RIGHT, \"PSB_PAD_RIGHT\"],\n [Blockly.Msg.PS2_DOWN, \"PSB_PAD_DOWN\"],\n [Blockly.Msg.PS2_LEFT, \"PSB_PAD_LEFT\"],\n [Blockly.Msg.PS2_SELECT, \"PSB_SELECT\"],\n [Blockly.Msg.PS2_START, \"PSB_START\"]\n];\n\n//\nexport const PS2_vibration = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.PS2 + Blockly.Msg.PS2_setRumble)\n .appendField(Blockly.Msg.MIXLY_STM32_OLED_SMALL + Blockly.Msg.MSG.catActuator_motor)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_OFF, \"0\"],\n [Blockly.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_ON, \"1\"],\n ]), \"smotorstate\")\n .appendField(Blockly.Msg.MIXLY_STM32_OLED_BIG + Blockly.Msg.MSG.catActuator_motor + Blockly.Msg.MIXLY_MIXGOPE_AMPLITUDE)\n this.appendValueInput(\"AMP\", Number)\n this.setTooltip(Blockly.Msg.MIXLY_STM32_OLED_BIG + Blockly.Msg.MSG.catActuator_motor + Blockly.Msg.MIXLY_MIXGOPE_AMPLITUDE + \"0-100\");\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\n//\nexport const PS2_Button = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.PS2_BUTTON)\n .appendField(new Blockly.FieldDropdown(PSBUTTON), \"psbt\")\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_BUTTON_HOLD, \"Button\"]\n // ,[Blockly.Msg.MIXLY_BUTTON_PRESSED, \"ButtonPressed\"]\n // ,[Blockly.Msg.MIXLY_BUTTON_RELEASED,\"ButtonReleased\"]\n // ,[Blockly.Msg.MIXLY_CHANGE,\"NewButtonState\"]\n ]), \"btstate\");\n this.setOutput(true, Boolean);\n this.setTooltip('');\n }\n};\n\n//\nexport const PS2_State = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.PS2_BUTTON)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_PULSEIN_STAT, \"0\"]\n , [Blockly.Msg.MIXLY_MICROBIT_JS_I2C_VALUE, \"1\"]\n // ,[Blockly.Msg.MIXLY_BUTTON_RELEASED,\"ButtonReleased\"]\n // ,[Blockly.Msg.MIXLY_CHANGE,\"NewButtonState\"]\n ]), \"btstate\");\n this.setOutput(true, Boolean);\n this.setTooltip('');\n }\n};\n\nexport const PS2_Buttons = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.PS2_BUTTON)\n .appendField(new Blockly.FieldDropdown(PSBUTTON), \"psbt\")\n this.setOutput(true, Boolean);\n this.setTooltip('');\n }\n};\n\nexport const PS2_stk = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n var PSSTK = [\n [Blockly.Msg.PS2_RX, \"0\"],\n [Blockly.Msg.PS2_RY, \"1\"],\n [Blockly.Msg.PS2_LX, \"2\"],\n [Blockly.Msg.PS2_LY, \"3\"],\n ];\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.PS2_stick)\n .appendField(new Blockly.FieldDropdown(PSSTK), \"psstk\");\n this.setOutput(true, Number);\n this.setTooltip('');\n }\n};\n\nexport const PS2_init_new = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.PS2);\n this.appendValueInput('CLK')\n .appendField('CLK#');\n this.appendValueInput('DOU')\n .appendField('DOU#');\n this.appendValueInput('DIN')\n .appendField('DIN#');\n this.appendValueInput('CS')\n .appendField('CS#');\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip('');\n }\n};\n\nexport const PS2_vibration_new = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.PS2);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.PS2_setRumble)\n .appendField(Blockly.Msg.MIXLY_STM32_OLED_SMALL + Blockly.Msg.MSG.catActuator_motor)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_OFF, \"0\"],\n [Blockly.Msg.MIXLY_MICROBIT_PY_COMMUNICATE_ON, \"1\"],\n ]), \"smotorstate\")\n .appendField(Blockly.Msg.MIXLY_STM32_OLED_BIG + Blockly.Msg.MSG.catActuator_motor + Blockly.Msg.MIXLY_MIXGOPE_AMPLITUDE)\n this.appendValueInput(\"AMP\", Number)\n this.setTooltip(Blockly.Msg.MIXLY_STM32_OLED_BIG + Blockly.Msg.MSG.catActuator_motor + Blockly.Msg.MIXLY_MIXGOPE_AMPLITUDE + \"0-100\");\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const PS2_Buttons_new = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.PS2);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.PS2_BUTTON.slice(3))\n .appendField(new Blockly.FieldDropdown(PSBUTTON), \"psbt\")\n .appendField(Blockly.Msg.MIXLY_WAS_PRESSED)\n this.setOutput(true, Boolean);\n this.setTooltip('');\n }\n};\n\nexport const PS2_stk_new = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n var PSSTK = [\n [Blockly.Msg.PS2_RX, \"RX\"],\n [Blockly.Msg.PS2_RY, \"RY\"],\n [Blockly.Msg.PS2_LX, \"LX\"],\n [Blockly.Msg.PS2_LY, \"LY\"],\n ];\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.PS2);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_JOYSTICK)\n .appendField(new Blockly.FieldDropdown(PSSTK), \"psstk\");\n this.setOutput(true, Number);\n this.setTooltip('');\n }\n};\n\nexport const sensor_use_uart_init = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"uart\")\n .appendField(new Blockly.FieldDropdown([\n [\"uart1\", \"uart1\"],\n [\"uart2\", \"uart2\"]\n ]), \"key\");\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_PM25_SENSOR, \"PM\"],\n [Blockly.Msg.MIXLY_GNSS_SENSOR, \"GNSS\"]\n ]), \"sensor\");\n\n\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n }\n};\n\nexport const pm25_get_data = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField('PM2.5' + Blockly.Msg.MSG.catSensor)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n ['PM2.5', \"[0]\"],\n ['PM10', \"[1]\"],\n ['(PM2.5, PM10)', \"\"],\n ]), \"pm\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_CONCENTRATION)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_PM_CONCENTRATION_TOOLTIP);\n }\n}\n\nexport const gnss_have_data = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_GNSS_SENSOR)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SERIAL_AVAILABLE)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const gnss_get_data = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_GNSS_SENSOR)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GPS_TIME, \"time\"],\n [Blockly.Msg.MIXLY_GPS_LOCATION, \"locate\"],\n [Blockly.Msg.MIXLY_PULSEIN_STAT, \"status\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var TOOLTIPS = {\n 'time': Blockly.Msg.MIXLY_GNSS_SENSOR_GET_TIME_TOOLTIP,\n 'locate': Blockly.Msg.MIXLY_GNSS_SENSOR_GET_LOCATE_TOOLTIP,\n 'status': Blockly.Msg.MIXLY_GNSS_SENSOR_GET_STATUS_TOOLTIP\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\n//mixbot/feiyi extern below:\nexport const robot_button_extern_get_value = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_BUTTON)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.TURTLE_POS)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.mixpy_PL_TEXT_TOP, '[0]'],\n [Blockly.Msg.mixpy_PL_TEXT_BOTTOM, '[1]'],\n [Blockly.Msg.TEXT_TRIM_LEFT, '[2]'],\n [Blockly.Msg.TEXT_TRIM_RIGHT, '[3]'],\n [Blockly.Msg.mixpy_PL_TEXT_CENTER, '[4]']\n ]), \"num\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_DATA)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_touch_extern_get_value = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_MICROBIT_JS_INOUT_EVENT_TOUCH + Blockly.Msg.MSG.catSensor)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXBOT_EXTERN_TOUCHED + \"?\")\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_infrared_extern_get_value = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_ESP32_EXTERN_NEAR)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_DATA)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_infrared_extern_grey_get_value = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_ESP32_EXTERN_GRAY_NEAR)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_DATA)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_potentiometer_extern_get_value = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_KNOB_POTENTIOMETER)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_DATA)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_color_extern_get_value = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.HTML_COLOUR + Blockly.Msg.MSG.catSensor)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.HTML_COLOUR + Blockly.Msg.HTML_NAME, '[0]'],\n [\"RGB\" + Blockly.Msg.MIXLY_MICROBIT_TYPE_TUPLE, '[1]'],\n [Blockly.Msg.MIXLY_ENVIRONMENT_BRIGHTNESS, '[2]'],\n [Blockly.Msg.MIXLY_REFLECTION_BRIGHTNESS, '[3]'],\n [Blockly.Msg.MIXLY_ALL, '']\n ]), \"color\");\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n }\n}\n\nexport const mixbot_sensor_extern_get_addr = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXBOT)\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_BUTTON, 'ext_button'],\n [Blockly.Msg.MIXLY_MICROBIT_JS_INOUT_EVENT_TOUCH + Blockly.Msg.MSG.catSensor, 'ext_collision'],\n [Blockly.Msg.MIXLY_ESP32_EXTERN_NEAR, 'ext_infrared'],\n [Blockly.Msg.MIXLY_KNOB_POTENTIOMETER, 'ext_potentiometer'],\n [Blockly.Msg.HTML_COLOUR + Blockly.Msg.MSG.catSensor, 'ext_color'],\n [Blockly.Msg.MIXLY_EXTERN_SONAR, 'ext_sonar']\n ]), \"name\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXBOT_EXTERN_GET_ADDR)\n this.setOutput(true);\n this.setInputsInline(true);\n }\n}\n\nexport const mixbot_sensor_extern_set_addr = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXBOT)\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_BUTTON, 'ext_button'],\n [Blockly.Msg.MIXLY_MICROBIT_JS_INOUT_EVENT_TOUCH + Blockly.Msg.MSG.catSensor, 'ext_collision'],\n [Blockly.Msg.MIXLY_ESP32_EXTERN_NEAR, 'ext_infrared'],\n [Blockly.Msg.MIXLY_KNOB_POTENTIOMETER, 'ext_potentiometer'],\n [Blockly.Msg.HTML_COLOUR + Blockly.Msg.MSG.catSensor, 'ext_color'],\n [Blockly.Msg.MIXLY_EXTERN_SONAR, 'ext_sonar']\n ]), \"name\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXBOT_EXTERN_SET_ADDR)\n this.appendValueInput('old')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE);\n this.appendValueInput('new')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_UPDATE);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_sonar_extern_get_value = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_EXTERN_SONAR)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_DATA + '(cm)')\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n}\n\nexport const robot_sonar_extern_led = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_EXTERN_SONAR)\n .appendField(Blockly.Msg.PIN_NUMBERING)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, \"0\"], [Blockly.Msg.MIXLY_RIGHT, \"1\"]]), \"mode\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_EXTERN_INDICATOR_LIGHT)\n this.appendValueInput('light')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.LCD_NUMBERING);\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const sensor_weather_solo_init = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.weather_solo);\n this.appendValueInput('wd')\n .appendField('W-D#');\n this.appendValueInput('ws')\n .appendField('W-S#');\n this.appendValueInput('rain')\n .appendField('Rain#');\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip('');\n }\n};\n\nexport const sensor_weather_solo_wd = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.weather_solo);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET + Blockly.Msg.ForecastFx)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_ABBR, \"[0]\"],\n [Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, \"[1]\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_weather_solo_ws = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.weather_solo);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET + Blockly.Msg.MIXLY_WIND_SPEED)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_SPEED + 'm/s', \"[0]\"],\n [Blockly.Msg.MIXLY_WIND_RATING, \"[1]\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_weather_solo_rain = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.weather_solo);\n this.appendValueInput('time')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RAIN_TIME)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_ACCUMULATED, \"[0]\"],\n [Blockly.Msg.MIXLY_AVERAGE, \"[1]\"]\n ]), \"key\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RAIN + '(mm)');\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\n//educore sensor_extern\nexport const educore_body_sensor = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\")\n .appendField(Blockly.Msg.MIXLY_BODY_SENSOR);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const educore_soilhum_sensor = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\")\n .appendField(Blockly.Msg.MIXLY_SOILHUM_SENSOR);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const educore_temphum_sensor = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\")\n .appendField(Blockly.Msg.MIXLY_TEMP_AND_HUMIDITY_SENSOR);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const educore_infrared_sensor = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\")\n .appendField(Blockly.Msg.MIXLY_Infrared_pyroelectric_sensor);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const educore_button_sensor_extern = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\")\n .appendField(Blockly.Msg.HTML_BUTTON);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_read_humiture = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_GET)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_set_of)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_TEMPERATURE,\"0\"],\n [Blockly.Msg.MIXLY_Humidity,\"1\"]\n ]),\"key\");\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const educore_ultrasonic_sensor = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\")\n .appendField(Blockly.Msg.MIXLY_EXTERN_SONAR);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const ultrasonic_sensor_read_distance = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_GET)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_set_of+Blockly.Msg.ME_GO_HALL_SENSOR_DISTANCE);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const educore_temp_sensor = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\")\n .appendField(Blockly.Msg.MIXLY_TEMP + Blockly.Msg.MIXLY_DS18B20);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const educore_camera_sensor = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"PIN\")\n .appendField(Blockly.Msg.MIXLY_SMARTCAMERA);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const camera_sensor_init = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"SUB\")\n .appendField(Blockly.Msg.MIXLY_SMARTCAMERA);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_PROCCED)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_AipFace,\"FACE_RECOGNIZE\"],\n [Blockly.Msg.MIXLY_FACE_CLASSIFIER,\"FACE_DETECT\"]\n ]),\"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const camera_sensor_result = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput(\"SUB\")\n .appendField(Blockly.Msg.MIXLY_SMARTCAMERA);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_set_of + Blockly.Msg.MIXLY_RECOGNIZED_RESULT);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_weigh_init = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_SETUP + 'HX711/720' + Blockly.Msg.MIXLY_WEIGH_SENSOR);\n this.appendValueInput('sck')\n .appendField('#SCK');\n this.appendValueInput('dat')\n .appendField('#DAT');\n this.appendValueInput('pc')\n .appendField(Blockly.Msg.MIXLY_Calibration_ratio);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip('');\n }\n};\n\nexport const weigh_sensor_get_weight = {\n init: function () {\n this.setColour(SENSOR_EXTERN_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_WEIGH_SENSOR)\n this.appendDummyInput()\n .appendField(Blockly.Msg.blockpy_set_of + Blockly.Msg.MIXLY_DATA)\n this.setOutput(true);\n this.setInputsInline(true);\n }\n}","import * as Blockly from 'blockly/core';\nimport { Profile } from 'mixly';\nimport {\n sensor_dht11,\n sensor_mpu9250_field_strength,\n sensor_mpu9250_temperature\n} from './sensor_extern.js';\n\nconst SENSOR_ONBOARD_HUE = '#947C54'; //'#9e77c9'//40;\n\nexport const sensor_mixgo_button_is_pressed = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput('btn')\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_IS_PRESSED);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SENOR_IS_PRESSED);\n }\n};\n\nexport const sensor_mixgo_button_was_pressed = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput('btn')\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WAS_PRESSED);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SENOR_WAS_PRESSED);\n }\n};\n\nexport const sensor_mixgo_button_get_presses = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput('btn')\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET_PRESSES);\n this.appendValueInput('VAR')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_GET_PRESSES_TIME);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + Blockly.Msg.MIXLY_BUTTON + Blockly.Msg.MIXLY_GET_PRESSES);\n }\n};\n\nexport const sensor_mixgo_button_attachInterrupt = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput(\"btn\")\n .appendField(Blockly.Msg.MIXLY_ESP32_INTERRUPT)\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MODE)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_RISING, \"machine.Pin.IRQ_RISING\"], [Blockly.Msg.MIXLY_FALLING, \"machine.Pin.IRQ_FALLING\"], [Blockly.Msg.MIXLY_CHANGE, \"(machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING)\"]]), \"mode\");\n this.appendValueInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);\n }\n};\n\nexport const sensor_mixgocar42_button_is_pressed = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_IS_PRESSED);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SENOR_IS_PRESSED);\n }\n};\n\nexport const sensor_mixgocar42_button_was_pressed = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WAS_PRESSED);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SENOR_WAS_PRESSED);\n }\n};\n\nexport const sensor_mixgocar42_button_get_presses = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET_PRESSES);\n this.appendValueInput('VAR')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_GET_PRESSES_TIME);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + Blockly.Msg.MIXLY_BUTTON + Blockly.Msg.MIXLY_GET_PRESSES);\n }\n};\n\nexport const sensor_mixgocar42_button_attachInterrupt = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_INTERRUPT)\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MODE)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_RISING, \"machine.Pin.IRQ_RISING\"], [Blockly.Msg.MIXLY_FALLING, \"machine.Pin.IRQ_FALLING\"], [Blockly.Msg.MIXLY_CHANGE, \"(machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING)\"]]), \"mode\");\n this.appendValueInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);\n }\n};\n\nexport const sensor_mixgo_pin_pressed = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput(\"button\")\n .appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_IS_TOUCHED);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_sensor_pin_pressed);\n }\n};\n\nexport const sensor_mixgoce_pin_pressed = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput(\"button\")\n .appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_IS_TOUCHED);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_sensor_pin_pressed);\n }\n};\n\nexport const sensor_mpython_pin_pressed = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput(\"button\")\n .appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_IS_TOUCHED);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_sensor_pin_pressed);\n }\n};\n\nexport const sensor_mixgo_touch_slide = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_TOUCH_SLIDE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_VALUE);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOUCH_SLIDE_TOOLTIP);\n }\n};\n\n\nexport const sensor_distance_hrsc04 = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_CHAOSHENGBO)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_CHAOSHENGBO);\n }\n};\n\n// var RTC_TIME_TYPE = [\n// [Blockly.Msg.MIXLY_YEAR, \"Year\"],\n// [Blockly.Msg.MIXLY_MONTH, \"Month\"],\n// [Blockly.Msg.MIXLY_DAY, \"Day\"],\n// [Blockly.Msg.MIXLY_HOUR, \"Hour\"],\n// [Blockly.Msg.MIXLY_MINUTE, \"Minute\"],\n// [Blockly.Msg.MIXLY_SECOND, \"Second\"],\n// [Blockly.Msg.MIXLY_WEEK, \"Week\"],\n// [Blockly.Msg.MIXLY_MIX1, \"Mix1\"],\n// [Blockly.Msg.MIXLY_MIX2, \"Mix2\"],\n// ];\n\nexport const RTC_set_time = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RTCSETTIME)\n .appendField('myRTC');\n this.appendValueInput(\"hour\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\" \" + Blockly.Msg.MIXLY_HOUR);\n this.appendValueInput(\"minute\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\" \" + Blockly.Msg.MIXLY_MINUTE);\n this.appendValueInput(\"second\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\" \" + Blockly.Msg.MIXLY_SECOND);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(false);\n this.setTooltip(Blockly.Msg.MIXLY_RTCSETTIME + Blockly.Msg.MIXLY_MIX2);\n }\n};\n\nexport const RTC_set_date = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RTCSETDATE)\n .appendField('myRTC');\n this.appendValueInput(\"year\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\" \" + Blockly.Msg.MIXLY_YEAR);\n this.appendValueInput(\"month\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\" \" + Blockly.Msg.MIXLY_MONTH);\n this.appendValueInput(\"day\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\" \" + Blockly.Msg.MIXLY_DAY);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_RTCSETDATE + Blockly.Msg.MIXLY_MIX1);\n }\n};\n\n\n\nexport const HCSR04 = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_CHAOSHENGBO);\n this.appendValueInput(\"PIN1\", Number)\n .appendField('Trig #')\n .setCheck(Number);\n this.appendValueInput(\"PIN2\", Number)\n .appendField('Echo #')\n .setCheck(Number);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_CHAOSHENGBO);\n }\n\n};\n\nexport const sensor_mixgo_light = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_LIGHT);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_LIGHT_TOOLTIP);\n }\n};\n\n\nexport const number1 = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[\"1\", \"touch1\"], [\"2\", \"touch2\"]]), 'op')\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);\n }\n};\n\nexport const number2 = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[\"0\", \"0\"], [\"1\", \"1\"], [\"2\", \"2\"], [\"3\", \"3\"]]), 'op')\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);\n }\n};\n\nexport const number3 = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_UP, \"12\"], [Blockly.Msg.MIXLY_DOWN, \"14\"], [Blockly.Msg.MIXLY_LEFT, \"13\"], [Blockly.Msg.MIXLY_RIGHT, \"15\"], [\"A\", \"32\"], [\"B\", \"33\"]]), 'op')\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);\n }\n};\n\nexport const number4 = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[\"0\", \"0\"], [\"1\", \"1\"], [\"2\", \"2\"], [\"3\", \"3\"], [\"4\", \"4\"]]), 'op')\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);\n }\n};\n\nexport const number5 = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[\"0\", \"0\"], [\"1\", \"1\"], [\"2\", \"2\"], [\"3\", \"3\"]]), 'op')\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);\n }\n};\n\nexport const number6 = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[\"3\", \"3\"], [\"4\", \"4\"]]), 'op')\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);\n }\n};\n\nexport const number7 = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[\"0\", \"0\"], [\"1\", \"1\"]]), 'op')\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);\n }\n};\n\nexport const sensor_mixgo_pin_near_single = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_NEAR);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_VALUE);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP + Blockly.Msg.MIXLY_ESP32_NEAR);\n }\n};\n\nexport const sensor_mixgo_pin_near_double = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, \"left\"], [Blockly.Msg.TEXT_TRIM_RIGHT, \"right\"]]), \"direction\")\n .appendField(Blockly.Msg.MIXLY_ESP32_NEAR);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('direction');\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;\n var TOOLTIPS = {\n 'left': Blockly.Msg.TEXT_TRIM_LEFT,\n 'right': Blockly.Msg.TEXT_TRIM_RIGHT,\n };\n return mode0 + TOOLTIPS[mode] + mode1\n });\n }\n};\n\nexport const sensor_mixgo_pin_near = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + Blockly.Msg.MIXLY_ESP32_NEAR);\n // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.mixpy_PL_TEXT_TOP, \"l\"], [Blockly.Msg.mixpy_PL_TEXT_BOTTOM, \"r\"]]), \"direction\")\n this.setOutput(true, Number);\n this.setInputsInline(true);\n // var thisBlock = this;\n // this.setTooltip(function () {\n // var mode = thisBlock.getFieldValue('direction');\n // var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n // var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;\n // var TOOLTIPS = {\n // 'l': Blockly.Msg.mixpy_PL_TEXT_TOP,\n // 'r': Blockly.Msg.mixpy_PL_TEXT_BOTTOM,\n // };\n // return mode0 + TOOLTIPS[mode] + mode1\n // });\n }\n};\n\n\nexport const sensor_mixgo_nova_pin_near = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, \"l\"], [Blockly.Msg.TEXT_TRIM_RIGHT, \"r\"]]), \"direction\")\n .appendField(Blockly.Msg.MIXLY_ESP32_NEAR);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('direction');\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;\n var TOOLTIPS = {\n 'l': Blockly.Msg.TEXT_TRIM_LEFT,\n 'r': Blockly.Msg.TEXT_TRIM_RIGHT,\n };\n return mode0 + TOOLTIPS[mode] + mode1\n });\n }\n};\n\nexport const sensor_mixgo_nova_LTR308 = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, \"l\"], [Blockly.Msg.TEXT_TRIM_RIGHT, \"r\"]]), \"direction\")\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_LIGHT + Blockly.Msg.MIXLY_DATA);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('direction');\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ESP32_EXTERN_LIGHT;\n var TOOLTIPS = {\n 'l': Blockly.Msg.TEXT_TRIM_LEFT,\n 'r': Blockly.Msg.TEXT_TRIM_RIGHT,\n };\n return mode0 + TOOLTIPS[mode] + mode1\n });\n }\n};\n\nexport const sensor_mixgo_LTR308 = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.mixpy_PL_TEXT_TOP, \"l\"], [Blockly.Msg.mixpy_PL_TEXT_BOTTOM, \"r\"]]), \"direction\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + Blockly.Msg.MIXLY_ESP32_EXTERN_LIGHT + Blockly.Msg.MIXLY_DATA);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_mixgo_sant_color = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + Blockly.Msg.MIXLY_COLOR_SENSOR + Blockly.Msg.MIXLY_DATA);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\n//传感器-实时时钟块_获取时间\nexport const onboard_RTC_get_time = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(\"RTC\")\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_RTCGETTIME);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_RTC_GET_TIME_TOOLTIP + ' (year, month, mday, hour, minute, second, weekday, yearday)');\n // var thisBlock = this;\n // this.setTooltip(function() {\n // var mode = thisBlock.getFieldValue('TIME_TYPE');\n // var mode0 = Blockly.Msg.MIXLY_RTCGETTIME;\n // var TOOLTIPS = {\n // 'Year':Blockly.Msg.MIXLY_YEAR,\n // 'Month':Blockly.Msg.MIXLY_MONTH,\n // 'Day':Blockly.Msg.MIXLY_DAY,\n // 'Hour':Blockly.Msg.MIXLY_HOUR,\n // 'Minute':Blockly.Msg.MIXLY_MINUTE,\n // 'Second':Blockly.Msg.MIXLY_SECOND,\n // 'Week':Blockly.Msg.MIXLY_WEEK,\n // 'Mix1':Blockly.Msg.MIXLY_MIX1,\n // 'Mix2':Blockly.Msg.MIXLY_MIX2\n // };\n // return mode0 +TOOLTIPS[mode];\n // });\n }\n};\n\nexport const onboard_RTC_get_timestamp = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput('LIST')\n .appendField(Blockly.Msg.MIXLY_RTCGETTIMESTAMP);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_RTC_GET_TIMESTAMP_TOOLTIP);\n }\n};\n\nexport const onboard_RTC_timestamp_totuple = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_RTC_TIMESTAMP);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LISTS_TO_TUPLE);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n }\n};\n\nexport const onboard_RTC_settime_string = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField('RTC');\n this.appendValueInput('CONTENT')\n .appendField(Blockly.Msg.MIXLY_USE_STRING_TUPLE)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_RTCSETTIME);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n }\n};\n\nexport const onboard_RTC_set_datetime = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(\"RTC\")\n this.appendValueInput('year')\n .setCheck(Number)\n .appendField(\" \" + Blockly.Msg.MIXLY_YEAR);\n this.appendValueInput('month')\n .setCheck(Number)\n .appendField(\" \" + Blockly.Msg.MIXLY_MONTH);\n this.appendValueInput('day')\n .setCheck(Number)\n .appendField(\" \" + Blockly.Msg.MIXLY_DAY);\n this.appendValueInput('hour')\n .setCheck(Number)\n .appendField(\" \" + Blockly.Msg.MIXLY_HOUR);\n this.appendValueInput('minute')\n .setCheck(Number)\n .appendField(\" \" + Blockly.Msg.MIXLY_MINUTE);\n this.appendValueInput('second')\n .setCheck(Number)\n .appendField(\" \" + Blockly.Msg.MIXLY_SECOND);\n this.setInputsInline(false);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_RTC_SET_DATATIME_TOOLTIP);\n }\n};\n\nexport const sensor_rtc_init = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"RTC\")\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .setCheck(\"var\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SENSOR_RTC_INT_TOOLTIP);\n }\n};\n\nexport const onboard_RTC_get_time_str = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_RTC_GET_TIME_STR);\n this.setOutput(true, String);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_RTC_GET_TIME_TOOLTIP);\n }\n};\n\nexport const onboard_RTC_get_timetuple_to_str = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput('CONTENT')\n .appendField(Blockly.Msg.MIXLY_GPS_TIME + Blockly.Msg.MIXLY_MICROBIT_TYPE_TUPLE)\n .setCheck()\n this.appendDummyInput()\n .appendField( Blockly.Msg.A_TO_B + Blockly.Msg.MIXLY_GPS_TIME + Blockly.Msg.LANG_MATH_STRING)\n this.setOutput(true, String);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_LTR308 = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_LIGHT);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_LIGHT_TOOLTIP);\n }\n};\n\nexport const sensor_sound = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_SOUND);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_SOUND_TOOLTIP);\n }\n};\n\nexport const sensor_aht11 = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_TEM_HUM + \" \")\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GETTEMPERATUE, \"temperature\"],\n [Blockly.Msg.MIXLY_GETHUMIDITY, \"humidity\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var TOOLTIPS = {\n \"temperature\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,\n \"humidity\": Blockly.Msg.MIXLY_ESP32C3_SENSOR_AHT_HUM_TOOLTIP\n };\n return TOOLTIPS[mode]\n });\n }\n};\n\n\nexport const sensor_get_temperature = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GETTEMPERATUE);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\n\n\n\n\nexport const sensor_hp203 = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_Altitude + Blockly.Msg.MSG.catSensor + \" \")\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GETPRESSURE, \"pressure()\"],\n [Blockly.Msg.MIXLY_GETTEMPERATUE, \"temperature()\"],\n [Blockly.Msg.MIXLY_GET_ALTITUDE, \"altitude()\"],\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const rfid_readid = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(\"RFID\" + Blockly.Msg.MIXLY_RFID_READ_CARD);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RFID_READ_CARD_UID);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const rfid_readcontent = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(\"RFID\" + Blockly.Msg.MIXLY_RFID_READ_CARD);\n this.appendValueInput('SECTOR')\n .appendField(Blockly.Msg.MIXLY_LIST_INDEX)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const rfid_write = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_RFID_WRITE);\n this.appendValueInput('SECTOR')\n .appendField(Blockly.Msg.MIXLY_LIST_INDEX)\n this.appendValueInput('CONTENT')\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_WRITE_NUM)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n }\n};\n\nexport const rfid_write_return = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_RFID_WRITE);\n this.appendValueInput('SECTOR')\n .appendField(Blockly.Msg.MIXLY_LIST_INDEX)\n this.appendValueInput('CONTENT')\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_WRITE_NUM)\n this.appendDummyInput()\n .appendField(Blockly.Msg.RETURN_SUCCESS_OR_NOT);\n this.setInputsInline(true);\n this.setOutput(true, Boolean);\n }\n};\n\nexport const sensor_get_acceleration = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"[0]\"],\n [\"y\", \"[1]\"],\n [\"z\", \"[2]\"],\n [\"(x,y,z)\", \"\"],\n [Blockly.Msg.MIXLY_STRENGTH, \"strength\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;\n var TOOLTIPS = {\n '[0]': 'x',\n '[1]': 'y',\n '[2]': 'z',\n '': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\n\nexport const sensor_eulerangles = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GET_GESTURE_ALL)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.ME_GO_PITCH, '[0]'],\n [Blockly.Msg.ME_GO_ROLL, '[1]'],\n [Blockly.Msg.ME_GO_PITCH + ', ' + Blockly.Msg.ME_GO_ROLL, '']\n ]), 'angle');\n\n this.appendDummyInput(\"\")\n this.setOutput(true, Number);\n this.setInputsInline(true);\n\n }\n};\n\nexport const sensor_onboard_mpu9250_gesture = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"MPU9250\")\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_MICROBIT_shake, \"shake\"], [Blockly.Msg.MIXLY_UP, \"up\"], [Blockly.Msg.MIXLY_DOWN, \"down\"], [Blockly.Msg.MIXLY_LEFT, \"left\"], [Blockly.Msg.MIXLY_RIGHT, \"right\"], [Blockly.Msg.MIXLY_MICROBIT_face_up, \"face up\"], [Blockly.Msg.MIXLY_MICROBIT_face_down, \"face down\"]]), \"gesture\");\n this.setOutput(true);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('gesture');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT;\n var mode1 = Blockly.Msg.MSG.catSensor;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_STATE;\n var mode3 = Blockly.Msg.MIXLY_MICROBIT_PERFORMANCE\n var TOOLTIPS = {\n 'shake': Blockly.Msg.MIXLY_MICROBIT_shake,\n 'up': Blockly.Msg.MIXLY_UP,\n 'down': Blockly.Msg.MIXLY_DOWN,\n 'left': Blockly.Msg.MIXLY_LEFT,\n 'right': Blockly.Msg.MIXLY_RIGHT,\n 'face up': Blockly.Msg.MIXLY_MICROBIT_face_up,\n 'face down': Blockly.Msg.MIXLY_MICROBIT_face_down,\n // 'freefall':Blockly.Msg.MIXLY_MICROBIT_freefall,\n // '3g': '3g',\n // '6g': '6g',\n // '8g': '8g'\n };\n return mode0 + mode1 + mode2 + TOOLTIPS[mode] + mode3;\n });\n }\n};\n\nexport const sensor_onboard_mpu9250_get_acceleration = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"MPU9250\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"x\"],\n [\"y\", \"y\"],\n [\"z\", \"z\"],\n [\"(x,y,z)\", \"values\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;\n var TOOLTIPS = {\n 'x': 'x',\n 'y': 'y',\n 'z': 'z',\n '(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\n\nexport const sensor_onboard_mpu9250_get_magnetic = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"MPU9250\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET + Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"x\"],\n [\"y\", \"y\"],\n [\"z\", \"z\"],\n [\"(x,y,z)\", \"values\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH;\n var TOOLTIPS = {\n 'x': 'x',\n 'y': 'y',\n 'z': 'z',\n '(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\n\nexport const sensor_onboard_mpu9250_get_gyro = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"MPU9250\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + Blockly.Msg.MIXLY_ESP32_SENOR_GYRO)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"x\"],\n [\"y\", \"y\"],\n [\"z\", \"z\"],\n [\"(x,y,z)\", \"values\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_ESP32_SENOR_GYRO;\n var TOOLTIPS = {\n 'x': 'x',\n 'y': 'y',\n 'z': 'z',\n '(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\n\nexport const sensor_onboard_mpu9250_calibrate_compass = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"MPU9250\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS);\n }\n};\n\n\nexport const sensor_onboard_mpu9250_temperature = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"MPU9250\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GETTEMPERATUE)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n\n this.setTooltip(Blockly.Msg.MIXLY_GETTEMPERATUE);\n }\n};\n\n\nexport const sensor_onboard_mpu9250_field_strength = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"MPU9250\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET_COMPASS)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH, 'strength'], [Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, 'heading']]), 'compass');\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('compass');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_JS_GET_COMPASS;\n var TOOLTIPS = {\n 'strength': Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH,\n 'heading': Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE\n };\n return mode0 + TOOLTIPS[mode];\n });\n }\n};\n\nexport const sensor_onboard_compass_reset = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"MPU9250\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Reset_COMPASS)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Reset_COMPASS);\n }\n};\n\n//mixgo_cc onboard_sensor blocks:\nexport const sensor_mixgo_cc_mmc5603_get_magnetic = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET + Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"[0]\"],\n [\"y\", \"[1]\"],\n [\"z\", \"[2]\"],\n [\"(x,y,z)\", \"\"],\n [Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH_ALL, \"all\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH;\n var TOOLTIPS = {\n '[0]': 'x',\n '[1]': 'y',\n '[2]': 'z',\n '': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\nexport const sensor_mixgo_cc_mmc5603_get_angle = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET_COMPASS + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n\n }\n};\n\nexport const sensor_mixgo_cc_mmc5603_calibrate_compass = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS);\n }\n};\n\n\n//mixgo_me onboard_sensor blocks:\n\n\nexport const sensor_mixgome_temperature = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GETTEMPERATUE)\n this.appendDummyInput(\"\")\n this.setOutput(true, Number);\n this.setInputsInline(true);\n\n }\n};\n\n//mixgo_ce onboard_sensor blocks:\n\n\nexport const sensor_mixgoce_temperature = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GETTEMPERATUE)\n this.appendDummyInput(\"\")\n this.setOutput(true, Number);\n this.setInputsInline(true);\n\n }\n};\n\n\n\n\nexport const sensor_mpython_qmi8658_get_gyro = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + Blockly.Msg.MIXLY_ESP32_SENOR_GYRO)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"[0]\"],\n [\"y\", \"[1]\"],\n [\"z\", \"[2]\"],\n [\"(x,y,z)\", \"\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_ESP32_SENOR_GYRO;\n var TOOLTIPS = {\n '[0]': 'x',\n '[1]': 'y',\n '[2]': 'z',\n '': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\n\nexport const sensor_mpython_qmi8658_temperature = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GETTEMPERATUE)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n\n this.setTooltip(Blockly.Msg.MIXLY_GETTEMPERATUE);\n }\n};\n\n\n\n\nexport const sensor_rm_pin_near_double = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, \"1\"], [Blockly.Msg.TEXT_TRIM_RIGHT, \"2\"]]), \"direction\")\n .appendField(Blockly.Msg.MIXLY_ESP32_NEAR);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('direction');\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;\n var TOOLTIPS = {\n 'left': Blockly.Msg.TEXT_TRIM_LEFT,\n 'right': Blockly.Msg.TEXT_TRIM_RIGHT,\n };\n return mode0 + TOOLTIPS[mode] + mode1\n });\n }\n};\n\nexport const sensor_rm_battery_left = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXGO_CAR_BATTERY_LEFT);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_rm_acc = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(\"acc\" + Blockly.Msg.MIXLY_MICROBIT_JS_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_ADXL345_XA, \"[0]\"],\n [Blockly.Msg.MIXLY_ADXL345_YA, \"[1]\"],\n [Blockly.Msg.MIXLY_ACC_SHAKE, \"[2]\"],\n [Blockly.Msg.MIXLY_ADXL345_XA + ',' + Blockly.Msg.MIXLY_ADXL345_YA + ',' + Blockly.Msg.MIXLY_ACC_SHAKE, \"\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION);\n\n }\n};\n\n//car4.2\nexport const sensor_mixgocar_pin_near_line = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.TEXT_TRIM_LEFT, \"[0]\"],\n [Blockly.Msg.MIXGO_LEFT_MID, \"[1]\"],\n [Blockly.Msg.MIXGO_RIGHT_MID, \"[2]\"],\n [Blockly.Msg.TEXT_TRIM_RIGHT, \"[3]\"],\n [Blockly.Msg.MIXLY_ALL, \"\"]\n ]), \"key\")\n .appendField(Blockly.Msg.MIXGO_LINE_SENSOR_VAL);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(function () {\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;\n return mode0 + mode1\n });\n }\n};\n\nexport const sensor_mixgocar_pin_near = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXGO_LEFT_FRONT, \"[0]\"],\n [Blockly.Msg.MIXGO_RIGHT_FRONT, \"[1]\"],\n [Blockly.Msg.MIXGO_LEFT_BACK, \"[3]\"],\n [Blockly.Msg.MIXGO_RIGHT_BACK, \"[2]\"],\n [Blockly.Msg.MIXLY_ALL, \"\"]\n ]), \"key\")\n .appendField(Blockly.Msg.MIXGO_PROXIMITY_SENSOR);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(function () {\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;\n return mode0 + mode1\n });\n }\n};\n\nexport const sensor_mixgocar_pin_near_state_change = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXGO_CAR_SENSOR_ONBOARD_CHANGE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MIXGO_CAR_SENSOR_ONBOARD_AUTO_CHANGE, \"AS\"],\n [Blockly.Msg.MIXLY_MIXGO_CAR_USE_LINE_ONLY, \"LP\"],\n [Blockly.Msg.MIXLY_MIXGO_CAR_USE_PROXIMITY_ONLY, \"OA\"]\n ]), \"key\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\n\nexport const sensor_mixgocar_battery_left = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXGO_CAR_BATTERY_LEFT);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\n//mixbot onboard_sensor below:\n\n\nexport const sensor_mixbot_patrol_calibrate = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXGO_LINE_SENSOR)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MIXBOT_LINE_SENSOR_CALIBRATE_WHITE, \"WHITE\"],\n [Blockly.Msg.MIXLY_MIXBOT_LINE_SENSOR_CALIBRATE_BLACK, \"BLACK\"],\n [Blockly.Msg.MIXLY_MIXBOT_LINE_SENSOR_CALIBRATE_RESET, \"RESET_TO_FAB\"]\n ]), \"key\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_mixbot_patrol_value = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXGO_LEFT_FRONT, \"[0]\"],\n [Blockly.Msg.MIXGO_RIGHT_FRONT, \"[1]\"],\n [Blockly.Msg.MIXGO_LEFT_BACK, \"[3]\"],\n [Blockly.Msg.MIXGO_RIGHT_BACK, \"[2]\"],\n [Blockly.Msg.MIXLY_ALL, \"\"]\n ]), \"key\")\n .appendField(Blockly.Msg.MIXGO_LINE_SENSOR_VAL);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(function () {\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;\n return mode0 + mode1\n });\n }\n};\n\nexport const sensor_mixbot_temperature = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET + Blockly.Msg.MIXLY_MICROBIT_Board_temperature)\n this.appendDummyInput(\"\")\n this.setOutput(true, Number);\n this.setInputsInline(true);\n\n }\n};\n\n\n\nexport const sensor_mixbot_get_gyro = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + Blockly.Msg.MIXLY_ESP32_SENOR_GYRO)\n .appendField(new Blockly.FieldDropdown([\n [\"x\", \"[0]\"],\n [\"y\", \"[1]\"],\n [\"z\", \"[2]\"],\n [\"(x,y,z)\", \"\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;\n var mode2 = Blockly.Msg.MIXLY_ESP32_SENOR_GYRO;\n var TOOLTIPS = {\n '[0]': 'x',\n '[1]': 'y',\n '[2]': 'z',\n '': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,\n };\n return mode0 + TOOLTIPS[mode] + mode1 + mode2;\n });\n }\n};\n\nexport const sensor_bitbot_ALS = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.ANALOG + Blockly.Msg.MIXLY_ESP32_EXTERN_LIGHT)\n this.appendValueInput('mode')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.LCD_NUMBERING);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET_LIGHT_INTENSITY + \"(%)\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const bitbot_als_num = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.als_num), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const sensor_button_is_pressed = sensor_mixgo_button_is_pressed;\nexport const sensor_button_was_pressed = sensor_mixgo_button_was_pressed;\nexport const sensor_button_get_presses = sensor_mixgo_button_get_presses;\nexport const sensor_pin_pressed = sensor_mixgo_pin_pressed;\nexport const sensor_pin_near = sensor_mixgo_pin_near;\nexport const sensor_light = sensor_mixgo_light;\nexport const dht11 = sensor_dht11;\nexport const sensor_field_strength = sensor_mpu9250_field_strength;\nexport const sensor_temperature = sensor_mpu9250_temperature\n\n//educore sensor_onboard\nexport const educore_voice_sensor = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_SOUND);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const sensor_read = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_GET)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_set_of + Blockly.Msg.MIXLY_MICROBIT_JS_I2C_VALUE);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const educore_light_sensor = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_LIGHT_SENSOR);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const educore_gyroscope_sensor = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GYROSCOPE_SENSOR);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const educore_gyroscope_sensor_read = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_GET)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_Horizontal_inclination, \"X\"],\n [\"y\", \"[1]\"],\n [\"z\", \"[2]\"]\n ]), \"key\");\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const educore_gyroscope_sensor_shake = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_GET)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_BE_SHAKED)\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const educore_button_sensor = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_BUTTON)\n .appendField(new Blockly.FieldDropdown([\n [\"a\", \"a\"],\n [\"b\", \"b\"],\n [\"c\", \"c\"]\n ]), \"btn\");\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const educore_button_was_pressed = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_BUTTON);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WAS_PRESSED);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SENOR_WAS_PRESSED);\n }\n};\n\nexport const educore_rfid_sensor = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput(\"PIN\")\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_RFID_INITIAL);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const educore_rfid_sensor_scan = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput(\"SUB\")\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_RFID_READ);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const educore_rfid_sensor_scan_data = {\n init: function () {\n this.setColour(SENSOR_ONBOARD_HUE);\n this.appendValueInput(\"SUB\")\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_RFID_READ + Blockly.Msg.MIXLY_COMMUNICATION_DATA_FROM);\n this.appendDummyInput('')\n .appendField(Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_SERIAL_NUMBER,\"serial_number\"]\n ]),\"key\");\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const CI130X_IDENTIFY_AND_SAVE_SANT = {\n init:function(){\n this.setColour(SENSOR_ONBOARD_HUE); \n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_AipSpeech_asr + Blockly.Msg.MIXLY_IDENTIFY_ONCE_AND_SAVE)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};\n\nexport const CI130X_GET_WHETHER_IDENTIFY_SANT = {\n init:function(){\n this.setColour(SENSOR_ONBOARD_HUE); \n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_AipSpeech_asr + Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_HELLO_XIAOZHI,\"1\"],\n [Blockly.Msg.MIXLY_XIAOZHIXIAOZHI ,\"2\"],\n [Blockly.Msg.MIXLY_THE_FIRST ,\"3\"],\n [Blockly.Msg.MIXLY_THE_SECOND ,\"4\"],\n [Blockly.Msg.MIXLY_THE_THIRD ,\"5\"],\n [Blockly.Msg.MIXLY_THE_FOURTH ,\"6\"],\n [Blockly.Msg.MIXLY_THE_FIFTH ,\"7\"],\n [Blockly.Msg.MIXLY_THE_SIXTH ,\"8\"],\n [Blockly.Msg.MIXLY_THE_SEVENTH ,\"9\"],\n [Blockly.Msg.MIXLY_THE_EIGHTH ,\"10\"],\n [Blockly.Msg.MIXLY_THE_NINTH ,\"11\"],\n [Blockly.Msg.MIXLY_THE_TENTH ,\"12\"],\n [Blockly.Msg.MIXLY_THE_ELEVENTH ,\"13\"],\n [Blockly.Msg.MIXLY_THE_TWELFTH ,\"14\"],\n [Blockly.Msg.MIXLY_THE_13TH ,\"15\"],\n [Blockly.Msg.MIXLY_THE_14TH ,\"16\"],\n [Blockly.Msg.MIXLY_THE_15TH ,\"17\"],\n [Blockly.Msg.MIXLY_THE_16TH ,\"18\"],\n [Blockly.Msg.MIXLY_THE_17TH ,\"19\"],\n [Blockly.Msg.MIXLY_THE_18TH ,\"20\"],\n [Blockly.Msg.MIXLY_THE_19TH ,\"21\"],\n [Blockly.Msg.MIXLY_THE_20TH ,\"22\"],\n [Blockly.Msg.MIXLY_Turn_on_the_lights ,\"23\"],\n [Blockly.Msg.MIXLY_Turn_off_the_lights ,\"24\"],\n [Blockly.Msg.MIXLY_Turn_up_the_brightness ,\"25\"],\n [Blockly.Msg.MIXLY_Turn_down_the_brightness ,\"26\"],\n [Blockly.Msg.MIXLY_Set_it_to_red ,\"27\"],\n [Blockly.Msg.MIXLY_Set_it_to_orange ,\"28\"],\n [Blockly.Msg.MIXLY_Set_it_to_yellow ,\"29\"],\n [Blockly.Msg.MIXLY_Set_it_to_green ,\"30\"],\n [Blockly.Msg.MIXLY_Set_it_to_cyan ,\"31\"],\n [Blockly.Msg.MIXLY_Set_it_to_blue ,\"32\"],\n [Blockly.Msg.MIXLY_Set_it_to_purple ,\"33\"],\n [Blockly.Msg.MIXLY_Set_it_to_white ,\"34\"],\n [Blockly.Msg.MIXLY_Turn_on_the_fan ,\"35\"],\n [Blockly.Msg.MIXLY_Turn_off_the_fan ,\"36\"],\n [Blockly.Msg.MIXLY_First_gear ,\"37\"],\n [Blockly.Msg.MIXLY_Wind_speed_second ,\"38\"],\n [Blockly.Msg.MIXLY_Third_gear ,\"39\"],\n [Blockly.Msg.MIXLY_Previous ,\"40\"],\n [Blockly.Msg.MIXLY_Next_page ,\"41\"],\n [Blockly.Msg.MIXLY_Show_smiley_face ,\"42\"],\n [Blockly.Msg.MIXLY_Show_crying_face ,\"43\"],\n [Blockly.Msg.MIXLY_Show_love ,\"44\"],\n [Blockly.Msg.MIXLY_Close_display ,\"45\"],\n [Blockly.Msg.MIXLY_Start_execution ,\"46\"],\n [Blockly.Msg.MIXLY_FORWARD ,\"47\"],\n [Blockly.Msg.MIXLY_BACKWARD ,\"48\"],\n [Blockly.Msg.MIXLY_TURNLEFT ,\"49\"],\n [Blockly.Msg.MIXLY_TURNRIGHT ,\"50\"],\n [Blockly.Msg.MIXLY_STOP ,\"51\"],\n [Blockly.Msg.MIXLY_Accelerate ,\"52\"],\n [Blockly.Msg.MIXLY_retard ,\"53\"],\n [Blockly.Msg.ROTATION_FORWARD ,\"54\"],\n [Blockly.Msg.ROTATION_BACKWARD ,\"55\"],\n [Blockly.Msg.MIXLY_Query_temperature ,\"56\"],\n [Blockly.Msg.MIXLY_Query_humidity ,\"57\"],\n [Blockly.Msg.MIXLY_Query_brightness ,\"58\"],\n [Blockly.Msg.MIXLY_Query_sound ,\"59\"],\n [Blockly.Msg.MIXLY_Query_time ,\"60\"],\n [Blockly.Msg.MIXLY_Query_distance ,\"61\"],\n [Blockly.Msg.MIXLY_Query_pressure ,\"62\"],\n [Blockly.Msg.MIXLY_Query_key ,\"63\"],\n [Blockly.Msg.MIXLY_Query_touch ,\"64\"],\n [Blockly.Msg.MIXLY_Query_color ,\"65\"]\n ]),\"cmd\")\n .appendField(Blockly.Msg.MIXLY_WHETHER+Blockly.Msg.MIXLY_BE_IDENTIFIED);\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const CI130X_GET_THE_RECOGNIZED_CMD_SANT = {\n init:function(){\n this.setColour(SENSOR_ONBOARD_HUE); \n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_AipSpeech_asr + Blockly.Msg.MIXLY_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_RECOGNIZED_STATE,\"status1\"],\n [Blockly.Msg.MIXLY_WHETHER_BROADCAST,\"status2\"],\n [Blockly.Msg.MIXLY_THE_RECOGNIZED_CMD,\"result\"]\n ]),\"key\")\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_CI130X_GET_THE_RECOGNIZED_STATE_TOOLTIP);\n }\n};\n\nexport const CI130X_BROADCAST_SANT = {\n init:function(){\n this.setColour(SENSOR_ONBOARD_HUE); \n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_AipSpeech_asr + Blockly.Msg.MIXLY_MP3_PLAY)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_JS_INOUT_PULL_NONE,\"None\"],\n [Blockly.Msg.MIXLY_WIND_SPEED,\"154\"],\n [Blockly.Msg.MIXLY_HYETAL,\"155\"],\n [Blockly.Msg.MIXLY_TEMPERATURE,\"156\"],\n [Blockly.Msg.MIXLY_Humidity,\"157\"],\n [Blockly.Msg.MIXLY_Altitude, \"158\"],\n [Blockly.Msg.MIXLY_SOUND, \"159\"],\n [Blockly.Msg.MIXLY_BRIGHTNESS, \"160\"],\n [Blockly.Msg.ME_GO_HALL_SENSOR_DISTANCE,\"161\"],\n [Blockly.Msg.MIXLY_SERVO,\"162\"],\n [Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE,\"163\"],\n [Blockly.Msg.MIXLY_BUTTON2,\"164\"],\n [Blockly.Msg.MIXLY_ESP32_TOUCH,\"165\"],\n [Blockly.Msg.MIXLY_PAY,\"166\"],\n [Blockly.Msg.MIXLY_CARSH_CHANGE,\"167\"],\n [Blockly.Msg.MIXLY_COUNTDOWN,\"168\"],\n [Blockly.Msg.MIXLY_TIMING,\"169\"],\n [Blockly.Msg.MIXLY_AT_THE_MOMENT,\"170\"],\n [Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE,\"171\"],\n [Blockly.Msg.MIXLY_FORWARD ,\"172\"],\n [Blockly.Msg.MIXLY_BACKWARD ,\"173\"],\n [Blockly.Msg.MIXLY_TURNLEFT ,\"174\"],\n [Blockly.Msg.MIXLY_TURNRIGHT ,\"175\"],\n [Blockly.Msg.MIXLY_STOP ,\"176\"],\n [Blockly.Msg.MIXLY_Accelerate ,\"177\"],\n [Blockly.Msg.MIXLY_retard ,\"178\"],\n [Blockly.Msg.ROTATION_FORWARD ,\"179\"],\n [Blockly.Msg.ROTATION_BACKWARD ,\"180\"],\n [Blockly.Msg.TUPLE_JOIN,\"181\"],\n [Blockly.Msg.MIXLY_SHOW,\"182\"],\n [Blockly.Msg.MIXLY_LAMPLIGHT,\"183\"],\n [Blockly.Msg.MIXLY_ACCELERATION,\"184\"]\n ]),\"star\");\n this.appendValueInput('NUM')\n .appendField(Blockly.Msg.MIXLY_NUMBER);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_UNIT)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_JS_INOUT_PULL_NONE,\"None\"],\n [Blockly.Msg.MIXLY_YEAR,\"117\"],\n [Blockly.Msg.MIXLY_MONTH,\"118\"],\n [Blockly.Msg.MIXLY_DAY,\"119\"],\n [Blockly.Msg.MIXLY_HOUR,\"120\"],\n [Blockly.Msg.MIXLY_MINUTE,\"121\"],\n [Blockly.Msg.MIXLY_SECOND,\"122\"],\n [Blockly.Msg.MIXLY_WEEK2,\"123\"],\n [Blockly.Msg.MIXLY_RMB_UNIT,\"124\"],\n [Blockly.Msg.blockpy_setheading_degree,\"125\"],\n [Blockly.Msg.MIXLY_GEAR,\"126\"],\n [Blockly.Msg.MIXLY_LAYER,\"127\"],\n [Blockly.Msg.MIXLY_GRAM,\"128\"],\n [Blockly.Msg.MIXLY_METER,\"129\"],\n [Blockly.Msg.MIXLY_CENTIMETER,\"130\"],\n [Blockly.Msg.MIXLY_MILLIMETER,\"131\"],\n [Blockly.Msg.MIXLY_LUMEN,\"132\"],\n [Blockly.Msg.MIXLY_DECIBEL,\"133\"],\n [Blockly.Msg.MIXLY_hectopascal,\"134\"],\n [Blockly.Msg.MIXLY_PERCENT,\"135\"],\n [Blockly.Msg.MIXLY_CELSIUS,\"136\"],\n [Blockly.Msg.MIXLY_METER_PER_SEC,\"137\"],\n [Blockly.Msg.MIXLY_MICROBIT_Turn_on_display,\"138\"],\n [Blockly.Msg.MIXLY_MICROBIT_Turn_off_display,\"139\"],\n [Blockly.Msg.MIXLY_SUCCESS,\"140\"],\n [Blockly.Msg.MIXLY_FAILED,\"141\"],\n [Blockly.Msg.MIXLY_WRONG,\"142\"],\n [Blockly.Msg.MIXLY_GOOD,\"143\"],\n [Blockly.Msg.MIXLY_blockpy_set_add,\"144\"],\n [Blockly.Msg.MIXLY_DECREASE,\"145\"],\n [Blockly.Msg.COLOUR_RGB_RED,\"146\"],\n [Blockly.Msg.COLOUR_RGB_ORANGE,\"147\"],\n [Blockly.Msg.COLOUR_YELLOW,\"148\"],\n [Blockly.Msg.COLOUR_RGB_GREEN,\"149\"],\n [Blockly.Msg.COLOUR_CYAN,\"150\"],\n [Blockly.Msg.COLOUR_RGB_BLUE,\"151\"],\n [Blockly.Msg.COLOUR_RGB_PURPLE,\"152\"],\n [Blockly.Msg.COLOUR_RGB_WHITE,\"153\"]\n ]),\"end\");\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n}\n\nexport const CI130X_SET_SYSTEM_CMD_SANT = {\n init:function(){\n this.setColour(SENSOR_ONBOARD_HUE); \n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_AipSpeech_asr+Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_SYSTEM + Blockly.Msg.MIXLY_CMD)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MILXY_ENTER_WAKE_UP,\"1\"],\n [Blockly.Msg.MIXLY_INCREASE_VOLUME,\"202\"],\n [Blockly.Msg.MIXLY_REDUCE_VOLUME,\"203\"],\n [Blockly.Msg.MIXLY_MAX_VOLUME,\"204\"],\n [Blockly.Msg.MIXLY_MINIMUM,\"205\"],\n [Blockly.Msg.MIXLY_OPEN_RESPONSE,\"206\"],\n [Blockly.Msg.MIXLY_CLOSE_RESPONSE,\"207\"],\n [Blockly.Msg.MIXLY_QUIT_WAKE_UP,\"208\"]\n ]),\"cmd\")\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};","import * as Blockly from 'blockly/core';\n\nconst SERIAL_HUE = 65; //'#58a8de'//65;\n\nexport const serial_print_byte = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendValueInput(\"CONTENT\", String)\n .appendField(\"Serial\")\n .appendField(new Blockly.FieldDropdown([['uart1', '1']]), 'mode')\n .appendField(Blockly.Msg.MIXLY_SERIAL_WRITE + '(' + Blockly.Msg.LANG_MATH_BYTE + ')');\n //this.setFieldValue('1','mode')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.TEXT_PRINT_TOOLTIP);\n }\n};\n\nexport const serial_print = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendValueInput(\"CONTENT\", String)\n .appendField(\"Serial\")\n .appendField(new Blockly.FieldDropdown([['uart1', '1']]), 'mode')\n .appendField(Blockly.Msg.MIXLY_SERIAL_PRINT);\n //this.setFieldValue('1','mode')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.TEXT_PRINT_TOOLTIP);\n }\n};\n\nexport const serial_println = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendValueInput(\"CONTENT\", String)\n .appendField(\"Serial\")\n .appendField(new Blockly.FieldDropdown([['uart1', '1']]), 'mode')\n .appendField(Blockly.Msg.MIXLY_SERIAL_PRINTLN);\n //this.setFieldValue('1','mode')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.TEXT_PRINT_Huanhang_TOOLTIP + Blockly.Msg.TEXT_PRINT_TOOLTIP);\n }\n};\n\n//打印16进制数\nexport const serial_print_hex = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendDummyInput()\n .appendField(\"Serial\")\n .appendField(new Blockly.FieldDropdown([['uart1', '1']]), 'mode')\n .appendField(Blockly.Msg.MIXLY_SERIAL_PRINTLN);\n this.appendValueInput(\"CONTENT\", Number)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MATH_BIN, \"bin\"], [Blockly.Msg.MATH_OCT, \"oct\"], [Blockly.Msg.MATH_DEC, \"int\"], [Blockly.Msg.MATH_HEX, \"hex\"]]), \"STAT\")\n .setCheck(Number);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setFieldValue('hex', 'STAT')\n this.setTooltip(Blockly.Msg.TEXT_PRINT_HEX_TOOLTIP);\n }\n};\n\nexport const serial_receive_data_event = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendValueInput('char_marker')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_SERIAL_WHEN_CONTAIN_DATA)\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO);\n }\n};\n\nexport const serial_readstr = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendDummyInput()\n .appendField(\"Serial\")\n .appendField(new Blockly.FieldDropdown([['uart1', '1']]), 'mode')\n .appendField(Blockly.Msg.MIXLY_SERIAL_READSTR);\n //this.setFieldValue('1','mode')\n this.setOutput(true, String);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_SERIAL_READ_STR);\n }\n};\n\nexport const serial_any = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendDummyInput()\n .appendField(\"Serial\")\n .appendField(new Blockly.FieldDropdown([['uart1', '1']]), 'mode')\n .appendField(Blockly.Msg.MIXLY_SERIAL_AVAILABLE);\n //this.setFieldValue('1','mode')\n this.setOutput(true, Boolean);\n this.setTooltip(Blockly.Msg.MIXLY_SERIAL_AVAILABLE1);\n }\n};\n\nexport const serial_readline = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendDummyInput()\n .appendField(\"Serial\")\n .appendField(new Blockly.FieldDropdown([['uart1', '1']]), 'mode')\n .appendField(Blockly.Msg.MIXLY_ESP32_READ_LINE);\n //this.setFieldValue('1','mode')\n this.setOutput(true, String);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_SERIAL_READ_LINE1);\n }\n};\n\nexport const serial_readstr_until = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendDummyInput()\n .appendField(\"Serial \" + Blockly.Msg.MIXLY_SERIAL_READSTR_UNTIL)\n .appendField(new Blockly.FieldDropdown([\n [\"new line\", \"serial.delimiters(Delimiters.NewLine)\"],\n [\",\", \"serial.delimiters(Delimiters.Comma)\"],\n [\"$\", \"serial.delimiters(Delimiters.Dollar)\"],\n [\":\", \"serial.delimiters(Delimiters.Colon)\"],\n [\".\", \"serial.delimiters(Delimiters.Fullstop)\"],\n [\"#\", \"serial.delimiters(Delimiters.Hash)\"]\n ]), \"char_marker\");\n\n this.setInputsInline(true);\n this.setOutput(true, String);\n }\n};\n\nexport const serial_softserial_new = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendValueInput(\"RX\")\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .appendField(new Blockly.FieldDropdown([['uart1', '1']]), 'mode')\n .appendField(\"RX#\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendValueInput(\"TX\")\n .appendField(\"TX#\")\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SERIAL_BEGIN)\n .appendField(new Blockly.FieldDropdown([['115200', '115200'], ['57600', '57600'], ['37400', '38400'], ['31250', '31250'], ['28800', '28800'], ['19200', '19200'], ['14400', '14400'], ['9600', '9600'], ['4800', '4800'], ['2400', '2400'], ['1200', '1200'], ['300', '300']]), 'baudrate');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SERIAL_softserial);\n }\n};\n\nexport const serial_softserial = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .appendField(new Blockly.FieldDropdown([['uart1 (RX=23,TX=19)', '1'], ['uart2 (RX=5,TX=18)', '2']]), 'mode');\n //this.setFieldValue('1','mode')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SERIAL_BEGIN)\n .appendField(new Blockly.FieldDropdown([['115200', '115200'], ['57600', '57600'], ['37400', '38400'], ['31250', '31250'], ['28800', '28800'], ['19200', '19200'], ['14400', '14400'], ['9600', '9600'], ['4800', '4800'], ['2400', '2400'], ['1200', '1200'], ['300', '300']]), 'baudrate');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SERIAL_softserial);\n }\n};\n\nexport const serial_begin = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendDummyInput()\n .appendField(\"Serial \" + Blockly.Msg.MIXLY_SERIAL_BEGIN)\n .appendField(new Blockly.FieldDropdown([['115200', '115200'], ['57600', '57600'], ['37400', '38400'], ['31250', '31250'], ['28800', '28800'], ['19200', '19200'], ['14400', '14400'], ['9600', '9600'], ['4800', '4800'], ['2400', '2400'], ['1200', '1200'], ['300', '300']]), 'baudrate');\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_SERIAL_BEGIN);\n }\n};\n\nexport const system_input = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendValueInput(\"VAR\")\n .appendField(Blockly.Msg.blockpy_inout_raw_input)\n .setCheck(String);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.INOUT_input_TOOLTIP);\n }\n}\n\nexport const system_print = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendValueInput(\"VAR\")\n .appendField(Blockly.Msg.MIXLY_SERIAL_PRINTLN);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.BLOCKPY_PRINT_TOOLTIP);\n }\n};\n\nexport const system_print_inline = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendValueInput(\"VAR\")\n .appendField(Blockly.Msg.MIXLY_SERIAL_PRINT);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.TEXT_PRINT_TOOLTIP);\n }\n};\n\nexport const system_print_end = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendValueInput(\"VAR\")\n .appendField(Blockly.Msg.MIXLY_SERIAL_PRINT);\n this.appendValueInput(\"END\")\n .appendField(Blockly.Msg.MIXLY_ENDSWITH);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_INOUT_PRINT_END_TOOLTIP);\n }\n};\n\nexport const system_print_many = {\n\n init: function () {\n this.setColour(SERIAL_HUE);\n\n this.itemCount_ = 2;\n this.updateShape_();\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setInputsInline(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['system_print_item'], this));\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_TOOLTIP);\n },\n\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('system_print_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('system_print_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i)\n .connection.connect(connections[i]);\n }\n }\n },\n\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n var i = 0;\n while (this.getInput('ADD' + i)) {\n this.removeInput('ADD' + i);\n i++;\n }\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.appendDummyInput('EMPTY')\n .appendField(Blockly.Msg.MIXLY_MIXPY_INOUT_PRINT_EMPTY);\n } else {\n for (var i = 0; i < this.itemCount_; i++) {\n var input = this.appendValueInput('ADD' + i);\n if (i == 0) {\n input.appendField(Blockly.Msg.MIXLY_SERIAL_PRINTLN);\n }\n }\n }\n }\n};\nexport const system_print_container = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SERIAL_PRINTLN);\n this.appendStatementInput('STACK');\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_CONTAINER_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const system_print_item = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_ITEM_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const serial_send_to_ai = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendValueInput(\"CONTENT\")\n .appendField(\"Serial\")\n .appendField(new Blockly.FieldDropdown([['uart1', '1']]), 'mode')\n .appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_TO + Blockly.Msg.MIXLY_OTHER + 'MP' + Blockly.Msg.MIXLY_DEVICE)\n .appendField(Blockly.Msg.LANG_CONTROLS_WHILEUNTIL_TITLE_REPEAT)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, 'True'], [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, 'False']]), 'STAT')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n }\n};\n\nexport const serial_read_from_ai = {\n init: function () {\n this.setColour(SERIAL_HUE);\n this.appendDummyInput()\n .appendField(\"Serial\")\n .appendField(new Blockly.FieldDropdown([['uart1', '1']]), 'mode')\n .appendField(Blockly.Msg.MIXLY_ESP32_READ + Blockly.Msg.MIXLY_OTHER + 'MP' + Blockly.Msg.MIXLY_DEVICE + Blockly.Msg.MIXLY_SD_DATA);\n this.setOutput(true, Boolean);\n }\n};","import * as Blockly from 'blockly/core';\n\n\nconst SYSTEM_HUE = 120; //'#EB8045';\n\nexport const controls_delay_new = {\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_DELAY)\n this.appendValueInput(\"DELAY_TIME\", Number)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_SECOND, \"s\"], [Blockly.Msg.MIXLY_mSecond, \"ms\"], [Blockly.Msg.MIXLY_uSecond, \"us\"]]), 'Time');\n this.setFieldValue('s', 'Time')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_DELAY);\n }\n};\n\nexport const controls_delay = {\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_DELAY)\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_SECOND, \"s\"], [Blockly.Msg.MIXLY_mSecond, \"ms\"], [Blockly.Msg.MIXLY_uSecond, \"us\"]]), 'Time');\n this.appendValueInput(\"DELAY_TIME\", Number)\n .setCheck(Number);\n this.setFieldValue('ms', 'Time')\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_DELAY);\n }\n};\n\nexport const Panic_with_status_code = {\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.appendValueInput(\"STATUS_CODE\", Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Panic_with_status_code)\n .setCheck(Number);\n this.setPreviousStatement(true, null);\n // this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Panic_with_status_code);\n }\n};\n\nexport const reset = {\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Reset_micro);\n this.setPreviousStatement(true);\n // this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Reset_micro);\n }\n};\n\nexport const controls_millis = {\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_RUNTIME);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_mSecond, \"ms\"], [Blockly.Msg.MIXLY_uSecond, \"us\"]]), 'Time');\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_CONTROLS_MILLIS_TOOLTIP);\n }\n};\n\nexport const raw_block = {\n // Container.\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.appendDummyInput()\n .appendField('Code Block:');\n this.appendDummyInput()\n .appendField(new Blockly.FieldMultilineInput('12345'), 'TEXT');\n }\n};\n\nexport const controls_uname = {\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_CONTORL_UNAME);\n\n this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + Blockly.Msg.MIXLY_MICROBIT_PY_CONTORL_UNAME);\n }\n};\n\nexport const timer = {\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.appendValueInput('VAR')\n .appendField(\"Timer\")\n .setCheck(\"var\");\n this.appendValueInput('period')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n // .appendField(\"Timer\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_PERIOD_MIL);\n this.appendValueInput('mode')\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE);\n this.appendValueInput('callback')\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.CONTROLS_REPEAT_INPUT_DO);\n // this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_TIMER_TOOLTIP);\n }\n};\n\nexport const system_timer = {\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.appendValueInput('VAR')\n .appendField(\"Timer\")\n .setCheck(\"var\");\n // .appendField(\"I2C \" + Blockly.Msg.MIXLY_SETUP)\n this.appendValueInput(\"period\")\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_PERIOD_MIL)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_mSecond)\n .appendField(Blockly.Msg.MIXLY_MODE)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_PYTHON_ONE_SHOT, \"ONE_SHOT\"], [Blockly.Msg.MIXLY_PYTHON_PERIODIC, \"PERIODIC\"]]), \"mode\");\n this.appendValueInput('callback')\n .appendField(Blockly.Msg.MIXLY_DO)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SYSTEM_TIMER_TOOLTIP);\n }\n};\n\nexport const system_ticks_diff = {\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.appendValueInput('END')\n // .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_ESP32_TIME_TICKS_DIFF);\n this.appendValueInput('START')\n // .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_ESP32_TIME_MINUS);\n this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SYSTEM_TICKS_DIFF_TOOLTIP);\n }\n};\n\nexport const system_timer_init = {\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.appendDummyInput(\"\")\n .appendField(\"Timer\")\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_SETUP)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_SYSTEM_TIMER_INIT_TOOLTIP);\n }\n};\n\nexport const system_wdt_init = {\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MACHINE_WDT)\n .appendField(Blockly.Msg.MIXLY_SETUP)\n this.appendValueInput('period')\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_MACHINE_WDT_TIMEOUT)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_mSecond)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_MACHINE_WDT_INIT_TOOLTIP);\n }\n};\n\nexport const system_wdt_feed = {\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MACHINE_WDT)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MACHINE_FEED)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_MACHINE_WDT_FEED_TOOLTIP);\n }\n};\n\nexport const system_machine_reset = {\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MACHINE_RESET)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_MACHINE_RESET_TOOLTIP);\n }\n};\n\nexport const system_bitbot_shutdown = {\n init: function () {\n this.setColour(SYSTEM_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.BITBOT)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.SHUTDOWN)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MICROPYTHON_BITBOT_SHUTDOWN_TOOLTIP);\n }\n};\n\nexport const Timer_init = system_timer_init;\nexport const timer2 = system_timer;\nexport const time_ticks_diff = system_ticks_diff;\nexport const base_delay = controls_delay;","import * as Blockly from 'blockly/core';\n\nconst WEATHER_HUE = '#27b6ac';\n\nexport const WEATHER_NOW = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MSG.catweather)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW, \"weather_now\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_ALARM, \"weather_alarm\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_AIR_NOW, \"air_now\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_TIDE_DAILY, \"tide_daily\"],\n [Blockly.Msg.MIXLY_WEB_PLACE + Blockly.Msg.HTML_SEARCH, \"location_search\"]\n ]), \"mode\");\n this.appendValueInput('key')\n .appendField(Blockly.Msg.MIXLY_API_PRIVATE_KEY);\n this.appendValueInput('addr')\n .appendField(Blockly.Msg.MIXLY_GEOGRAPHIC_LOCATION);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const WEATHER_DAILY = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MSG.catweather)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY, \"weather_daily\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_LIFE_SUGGESTION, \"life_suggestion\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_AIR_DAILY, \"air_daily\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_GEO_SUN, \"geo_sun\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_GEO_MOON, \"geo_moon\"]\n ]), \"mode\");\n this.appendValueInput('key')\n .appendField(Blockly.Msg.MIXLY_API_PRIVATE_KEY);\n this.appendValueInput('addr')\n .appendField(Blockly.Msg.MIXLY_GEOGRAPHIC_LOCATION);\n this.appendValueInput('day')\n .appendField(Blockly.Msg.MIXLY_WEB_DAILY);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const WEATHER_HOUR = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MSG.catweather)\n .appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_HOURS);\n this.appendValueInput('key')\n .appendField(Blockly.Msg.MIXLY_API_PRIVATE_KEY);\n this.appendValueInput('addr')\n .appendField(Blockly.Msg.MIXLY_GEOGRAPHIC_LOCATION);\n this.appendValueInput('hour')\n .appendField(Blockly.Msg.MIXLY_WEB_HOURS);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const Weather_now = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MSG.catweather)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW, \"Weather_now\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_ALARM, \"Weather_alarm\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_AIR_NOW, \"Air_now\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_TIDE_DAILY, \"Tide_daily\"],\n [Blockly.Msg.MIXLY_WEB_PLACE + Blockly.Msg.HTML_SEARCH, \"Location_search\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_LIFE_SUGGESTION, \"Life_suggestion\"]\n ]), \"mode\");\n this.appendValueInput('key')\n .appendField(Blockly.Msg.MIXLY_API_PRIVATE_KEY);\n this.appendValueInput('addr')\n .appendField(Blockly.Msg.MIXLY_GEOGRAPHIC_LOCATION);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const Weather_now_content = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW + Blockly.Msg.MIXLY_BELONG);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_PARAMETER_FREE, \"none\"],\n [Blockly.Msg.MIXLY_WEATHER_PHENOMENON, \"text\"],\n [Blockly.Msg.MIXLY_WEATHER_PHENOMENON_CODE, \"code\"],\n [Blockly.Msg.MIXLY_TEMPERATURE + Blockly.Msg.MIXLY_TEMPERATURE_UNIT_, \"temperature\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_FEEL, \"feels_like\"],\n [Blockly.Msg.MIXLY_Altitude + Blockly.Msg.MIXLY_PRESSURE_UNIT, \"pressure\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_HUMIDITY, \"humidity\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_VISIBILITY, \"visibility\"],\n [Blockly.Msg.ForecastFx, \"wind_direction\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_WIND_DIRECT_DEGREE, \"wind_direction_degree\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_WIND_SPEED, \"wind_speed\"],\n [Blockly.Msg.MIXLY_WIND_RATING, \"wind_scale\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_CLOUDS, \"clouds\"]\n ]), \"content\");\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const Air_now_content = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_AIR_NOW + Blockly.Msg.MIXLY_BELONG);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_PARAMETER_FREE, \"none\"],\n [Blockly.Msg.MIXLY_AIR_NOW_AIRQUAILTY, \"api\"],\n [Blockly.Msg.MIXLY_AIR_NOW_PM25, \"pm25\"],\n [Blockly.Msg.MIXLY_AIR_NOW_PM10, \"pm10\"],\n [Blockly.Msg.MIXLY_AIR_NOW_so2, \"so2\"],\n [Blockly.Msg.MIXLY_AIR_NOW_no2, \"no2\"],\n [Blockly.Msg.MIXLY_AIR_NOW_co, \"co\"],\n [Blockly.Msg.MIXLY_AIR_NOW_o3, \"o3\"],\n [Blockly.Msg.MIXLY_AIR_NOW_pp, \"primary_pollutant\"],\n [Blockly.Msg.MIXLY_AIR_NOW_quailty, \"quality\"],\n [Blockly.Msg.MIXLY_AIR_NOW_last_update, \"last_update\"]\n ]), \"content\");\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const Weather_alarm_content = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_ALARM + Blockly.Msg.MIXLY_BELONG);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_PARAMETER_FREE, \"none\"],\n [Blockly.Msg.MIXLY_WEATHER_ALARM_TITLE, \"title\"],\n [Blockly.Msg.MIXLY_WEATHER_ALARM_TYPE, \"type\"],\n [Blockly.Msg.MIXLY_WEATHER_ALARM_LEVEL, \"level\"],\n [Blockly.Msg.MIXLY_WEATHER_ALARM_DESCRIPTION, \"description\"],\n [Blockly.Msg.MIXLY_WEATHER_ALARM_PUB_DATE, \"pub_date\"]\n ]), \"content\");\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const Life_suggestion_content = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_LIFE_SUGGESTION + Blockly.Msg.MIXLY_BELONG);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_PARAMETER_FREE, \"none\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_AC, \"ac\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_AP, \"air_pollution\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_AIRING, \"airing\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_ALLERGY, \"allergy\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_BEER, \"beer\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_BOATING, \"boating\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_CAR_WS, \"car_washing\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_CHILL, \"chill\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_COMFORT, \"comfort\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_DATING, \"dating\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_DRESSING, \"dressing\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_FISHING, \"fishing\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_FLU, \"flu\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_HAIR_DRESS, \"hair_dressing\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_KITEFLYING, \"kiteflying\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_MAKEUP, \"makeup\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_MOOD, \"mood\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_MORNINIG_SPORT, \"morning_sport\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_NIGHT_LIFE, \"night_life\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_ROAD_CONDI, \"road_condition\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_SHOPPING, \"shopping\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_SPORT, \"sport\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_SUNSCREEN, \"sunscreen\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_TRAFFIC, \"traffic\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_TRAVEL, \"travel\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_UMBRELLA, \"umbrella\"],\n [Blockly.Msg.MIXLY_LIFE_SUGGESTION_UV, \"uv\"]\n ]), \"content\");\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const Tide_daily_content = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_TIDE_DAILY + Blockly.Msg.MIXLY_BELONG);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_PARAMETER_FREE, \"none\"],\n [Blockly.Msg.MIXLY_GPS_DATE, \"date\"],\n [Blockly.Msg.MIXLY_TIDE_DAILY_HEIGHT, \"tide\"],\n [Blockly.Msg.MIXLY_TIDE_DAILY_0_TIME, \"0,time\"],\n [Blockly.Msg.MIXLY_TIDE_DAILY_0_HEIGHT, \"0,height\"],\n [Blockly.Msg.MIXLY_TIDE_DAILY_1_TIME, \"1,time\"],\n [Blockly.Msg.MIXLY_TIDE_DAILY_1_HEIGHT, \"1,height\"],\n [Blockly.Msg.MIXLY_TIDE_DAILY_2_TIME, \"2,time\"],\n [Blockly.Msg.MIXLY_TIDE_DAILY_2_HEIGHT, \"2,height\"],\n [Blockly.Msg.MIXLY_TIDE_DAILY_3_TIME, \"3,time\"],\n [Blockly.Msg.MIXLY_TIDE_DAILY_3_HEIGHT, \"3,height\"]\n ]), \"content\");\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const Location_search_content = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WEB_PLACE + Blockly.Msg.HTML_SEARCH + Blockly.Msg.MIXLY_BELONG);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_PARAMETER_FREE, \"none\"],\n [Blockly.Msg.MIXLY_LOCATION_SEARCH_ID, \"id\"],\n [Blockly.Msg.MIXLY_LOCATION_SEARCH_NAME, \"name\"],\n [Blockly.Msg.MIXLY_LOCATION_SEARCH_COUNTRY, \"country\"],\n [Blockly.Msg.MIXLY_LOCATION_SEARCH_PATH, \"path\"],\n [Blockly.Msg.MIXLY_LOCATION_SEARCH_TIMEZONE, \"timezone\"],\n [Blockly.Msg.MIXLY_LOCATION_SEARCH_TIMEZONE_O, \"timezone_offset\"]\n ]), \"content\");\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const Weather_daily = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MSG.catweather)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY, \"Weather_daily\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_AIR_DAILY, \"Air_daily\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_GEO_SUN, \"Geo_sun\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_GEO_MOON, \"Geo_moon\"]\n ]), \"mode\");\n this.appendValueInput('key')\n .appendField(Blockly.Msg.MIXLY_API_PRIVATE_KEY);\n this.appendValueInput('addr')\n .appendField(Blockly.Msg.MIXLY_GEOGRAPHIC_LOCATION);\n this.appendValueInput('day')\n .appendField(Blockly.Msg.MIXLY_WEB_DAILY);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const Weather_daily_content = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY);\n this.appendValueInput('day')\n .appendField(Blockly.Msg.LISTS_GET_INDEX_FROM_START);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY_DAY + Blockly.Msg.MIXLY_BELONG);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_PARAMETER_FREE, \"none\"],\n [Blockly.Msg.MIXLY_GPS_DATE, \"date\"],\n [Blockly.Msg.MIXLY_DAYTIME_WEATHER_PHENOMENON, \"text_day\"],\n [Blockly.Msg.MIXLY_DAYTIME_WEATHER_PHENOMENON_CODE, \"code_day\"],\n [Blockly.Msg.MIXLY_EVENING_WEATHER_PHENOMENON, \"text_night\"],\n [Blockly.Msg.MIXLY_EVENING_WEATHER_PHENOMENON_CODE, \"code_night\"],\n [Blockly.Msg.ForecastHigh + Blockly.Msg.MIXLY_TEMPERATURE_UNIT_, \"high\"],\n [Blockly.Msg.ForecastLow + Blockly.Msg.MIXLY_TEMPERATURE_UNIT_, \"low\"],\n [Blockly.Msg.MIXLY_PROBABILITY_OF_PRECIPITATION, \"precip\"],\n [Blockly.Msg.ForecastFx, \"wind_direction\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_WIND_DIRECT_DEGREE, \"wind_direction_degree\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_WIND_SPEED, \"wind_speed\"],\n [Blockly.Msg.MIXLY_WIND_RATING, \"wind_scale\"],\n [Blockly.Msg.MIXLY_RAINFALL, \"rainfall\"],\n [Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW_HUMIDITY, \"humidity\"]\n ]), \"content\");\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const Air_daily_content = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_AIR_DAILY);\n this.appendValueInput('day')\n .appendField(Blockly.Msg.LISTS_GET_INDEX_FROM_START);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY_DAY + Blockly.Msg.MIXLY_BELONG);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_PARAMETER_FREE, \"none\"],\n [Blockly.Msg.MIXLY_AIR_NOW_AIRQUAILTY, \"api\"],\n [Blockly.Msg.MIXLY_AIR_NOW_PM25, \"pm25\"],\n [Blockly.Msg.MIXLY_AIR_NOW_PM10, \"pm10\"],\n [Blockly.Msg.MIXLY_AIR_NOW_so2, \"so2\"],\n [Blockly.Msg.MIXLY_AIR_NOW_no2, \"no2\"],\n [Blockly.Msg.MIXLY_AIR_NOW_co, \"co\"],\n [Blockly.Msg.MIXLY_AIR_NOW_o3, \"o3\"],\n [Blockly.Msg.MIXLY_AIR_NOW_quailty, \"quality\"],\n [Blockly.Msg.MIXLY_GPS_DATE, \"date\"]\n ]), \"content\");\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const Geo_sun_content = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_GEO_SUN);\n this.appendValueInput('day')\n .appendField(Blockly.Msg.LISTS_GET_INDEX_FROM_START);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY_DAY + Blockly.Msg.MIXLY_BELONG);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_PARAMETER_FREE, \"none\"],\n [Blockly.Msg.MIXLY_GPS_DATE, \"date\"],\n [Blockly.Msg.MIXLY_SUNRISE_T, \"sunrise\"],\n [Blockly.Msg.MIXLY_SUNSET_T, \"sunset\"]\n ]), \"content\");\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const Geo_moon_content = {\n init: function () {\n this.setColour(WEATHER_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_GEO_MOON);\n this.appendValueInput('day')\n .appendField(Blockly.Msg.LISTS_GET_INDEX_FROM_START);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY_DAY + Blockly.Msg.MIXLY_BELONG);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_PARAMETER_FREE, \"none\"],\n [Blockly.Msg.MIXLY_GPS_DATE, \"date\"],\n [Blockly.Msg.MIXLT_MOONRISE_T, \"rise\"],\n [Blockly.Msg.MIXLY_MOONSET_T, \"set\"],\n [Blockly.Msg.MIXLY_MOON_FRACTION, \"fraction\"],\n [Blockly.Msg.MIXLY_MOON_PHASE, \"phase\"],\n [Blockly.Msg.MIXLY_MOON_PHASE_NAME, \"phase_name\"]\n ]), \"content\");\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};","import * as MicroPythonActuatorExternBlocks from './blocks/actuator_extern';\nimport * as MicroPythonActuatorOnBoardBlocks from './blocks/actuator_onboard';\nimport * as MicroPythonActuatorBlocks from './blocks/actuator';\nimport * as MicroPythonAISensorBlocks from './blocks/ai_sensor';\nimport * as MicroPythonAIBlocks from './blocks/ai';\nimport * as MicroPythonBlynkBlocks from './blocks/blynk';\nimport * as MicroPythonCCG1Blocks from './blocks/cc_g1';\nimport * as MicroPythonCEGOBlocks from './blocks/ce_go';\nimport * as MicroPythonCommunicateBlocks from './blocks/communicate';\nimport * as MicroPythonControlBlocks from './blocks/control';\nimport * as MicroPythonDisplayExternBlocks from './blocks/display_extern';\nimport * as MicroPythonDisplayOnBoardBlocks from './blocks/display_onboard';\nimport * as MicroPythonDisplayBlocks from './blocks/display';\nimport * as MicroPythonFactoryBlocks from './blocks/factory';\nimport * as MicroPythonInputBlocks from './blocks/inout';\nimport * as MicroPythonIotBlocks from './blocks/iot';\nimport * as MicroPythonNetworkBlocks from './blocks/network';\nimport * as MicroPythonNovaG1Blocks from './blocks/nova_g1';\nimport * as MicroPythonPeG1Blocks from './blocks/pe_g1';\nimport * as MicroPythonPinsBlocks from './blocks/pins';\nimport * as MicroPythonSensorExternBlocks from './blocks/sensor_extern';\nimport * as MicroPythonSensorOnBoardBlocks from './blocks/sensor_onboard';\nimport * as MicroPythonSensorBlocks from './blocks/sensor';\nimport * as MicroPythonSerialBlocks from './blocks/serial';\nimport * as MicroPythonSystemBlocks from './blocks/system';\nimport * as MicroPythonWeatherBlocks from './blocks/weather';\n\nimport * as MicroPythonActuatorExternGenerators from './generators/actuator_extern';\nimport * as MicroPythonActuatorOnBoardGenerators from './generators/actuator_onboard';\nimport * as MicroPythonActuatorGenerators from './generators/actuator';\nimport * as MicroPythonAISensorGenerators from './generators/ai_sensor';\nimport * as MicroPythonAIGenerators from './generators/ai';\nimport * as MicroPythonBlynkGenerators from './generators/blynk';\nimport * as MicroPythonCCG1Generators from './generators/cc_g1';\nimport * as MicroPythonCEGOGenerators from './generators/ce_go';\nimport * as MicroPythonCommunicateGenerators from './generators/communicate';\nimport * as MicroPythonControlGenerators from './generators/control';\nimport * as MicroPythonDisplayExternGenerators from './generators/display_extern';\nimport * as MicroPythonDisplayOnBoardGenerators from './generators/display_onboard';\nimport * as MicroPythonDisplayGenerators from './generators/display';\nimport * as MicroPythonFactoryGenerators from './generators/factory';\nimport * as MicroPythonInputGenerators from './generators/inout';\nimport * as MicroPythonIotGenerators from './generators/iot';\nimport * as MicroPythonNetworkGenerators from './generators/network';\nimport * as MicroPythonNovaG1Generators from './generators/nova_g1';\nimport * as MicroPythonPeG1Generators from './generators/pe_g1';\nimport * as MicroPythonPinsGenerators from './generators/pins';\nimport * as MicroPythonSensorExternGenerators from './generators/sensor_extern';\nimport * as MicroPythonSensorOnBoardGenerators from './generators/sensor_onboard';\nimport * as MicroPythonSensorGenerators from './generators/sensor';\nimport * as MicroPythonSerialGenerators from './generators/serial';\nimport * as MicroPythonSystemGenerators from './generators/system';\nimport * as MicroPythonWeatherGenerators from './generators/weather';\n\nexport {\n MicroPythonActuatorExternBlocks,\n MicroPythonActuatorOnBoardBlocks,\n MicroPythonActuatorBlocks,\n MicroPythonAISensorBlocks,\n MicroPythonAIBlocks,\n MicroPythonBlynkBlocks,\n MicroPythonCCG1Blocks,\n MicroPythonCEGOBlocks,\n MicroPythonCommunicateBlocks,\n MicroPythonControlBlocks,\n MicroPythonDisplayExternBlocks,\n MicroPythonDisplayOnBoardBlocks,\n MicroPythonDisplayBlocks,\n MicroPythonFactoryBlocks,\n MicroPythonInputBlocks,\n MicroPythonIotBlocks,\n MicroPythonNetworkBlocks,\n MicroPythonNovaG1Blocks,\n MicroPythonPeG1Blocks,\n MicroPythonPinsBlocks,\n MicroPythonSensorExternBlocks,\n MicroPythonSensorOnBoardBlocks,\n MicroPythonSensorBlocks,\n MicroPythonSerialBlocks,\n MicroPythonSystemBlocks,\n MicroPythonWeatherBlocks,\n MicroPythonActuatorExternGenerators,\n MicroPythonActuatorOnBoardGenerators,\n MicroPythonActuatorGenerators,\n MicroPythonAISensorGenerators,\n MicroPythonAIGenerators,\n MicroPythonBlynkGenerators,\n MicroPythonCCG1Generators,\n MicroPythonCEGOGenerators,\n MicroPythonCommunicateGenerators,\n MicroPythonControlGenerators,\n MicroPythonDisplayExternGenerators,\n MicroPythonDisplayOnBoardGenerators,\n MicroPythonDisplayGenerators,\n MicroPythonFactoryGenerators,\n MicroPythonInputGenerators,\n MicroPythonIotGenerators,\n MicroPythonNetworkGenerators,\n MicroPythonNovaG1Generators,\n MicroPythonPeG1Generators,\n MicroPythonPinsGenerators,\n MicroPythonSensorExternGenerators,\n MicroPythonSensorOnBoardGenerators,\n MicroPythonSensorGenerators,\n MicroPythonSerialGenerators,\n MicroPythonSystemGenerators,\n MicroPythonWeatherGenerators\n};","export const esp32_music_pitch = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var number_pitch = generator.valueToCode(this, 'pitch', generator.ORDER_ATOMIC);\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'music.pitch(' + pin + ', ' + number_pitch + ')\\n';\n return code;\n}\n\nexport const esp32_music_pitch_with_time = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var number_pitch = generator.valueToCode(this, 'pitch', generator.ORDER_ATOMIC);\n var number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'music.pitch_time(' + pin + ', ' + number_pitch + ', ' + number_time + ')\\n';\n return code;\n}\n\nexport const esp32_music_stop = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'music.stop(' + pin + ')\\n';\n return code;\n}\n\nexport const esp32_music_set_tempo = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var bpm = generator.valueToCode(this, 'BPM', generator.ORDER_ASSIGNMENT);\n var ticks = generator.valueToCode(this, 'TICKS', generator.ORDER_ASSIGNMENT);\n var code = \"music.set_tempo(\" + ticks + \", \" + bpm + \")\\n\";\n return code;\n}\n\nexport const esp32_music_get_tempo = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var code = \"music.get_tempo()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const esp32_onboard_music_pitch = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var number_pitch = generator.valueToCode(this, 'pitch', generator.ORDER_ATOMIC);\n var code = 'music.pitch(' + number_pitch + ')\\n';\n return code;\n}\n\nexport const esp32_onboard_music_pitch_with_time = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var number_pitch = generator.valueToCode(this, 'pitch', generator.ORDER_ATOMIC);\n var number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);\n var code = 'music.pitch_time(' + number_pitch + ', ' + number_time + ')\\n';\n return code;\n}\n\nexport const esp32_onboard_music_stop = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var code = 'music.stop(' + ')\\n';\n return code;\n}\n\nexport const esp32_onboard_music_play_list = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);\n var code = \"music.play(\" + lst + \")\\n\";\n return code;\n}\n\nexport const esp32_music_play_list = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ASSIGNMENT);\n var code = \"music.play(\" + lst + \", \" + pin + \")\\n\";\n return code;\n}\n\nexport const esp32_mixgo_music_play_list_show = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n generator.definitions_['import_matrix'] = 'import matrix';\n var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ASSIGNMENT);\n // var display = generator.valueToCode(this, 'DISPLAY', generator.ORDER_ASSIGNMENT);\n var code = \"music.play_show(\" + lst + \", \" + pin + \")\\n\";\n return code;\n}\n\nexport const esp32_music_reset = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n return \"music.reset()\\n\";\n}\n\nexport const servo_move = function (_, generator) {\n generator.definitions_['import_servo'] = 'import servo';\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var value_degree = generator.valueToCode(this, 'DEGREE', generator.ORDER_ATOMIC);\n var code = 'servo.servo_write_angle(' + dropdown_pin + ',' + value_degree + ')\\n';\n return code;\n}\n\nexport const number = function (_, generator) {\n var code = this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ledswitch = function (_, generator) {\n var code = this.getFieldValue('flag');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const actuator_extern_led_bright = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n // var bright = this.getFieldValue('bright');\n var code = \"mixgo.led(\" + pin + \").setonoff(\" + bright + \")\\n\";\n return code;\n}\n\nexport const actuator_extern_get_led_bright = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = \"mixgo.led(\" + pin + \").getonoff(\" + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const actuator_extern_led_brightness = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var code = 'mixgo.led(' + pin + ').setbrightness(' + flag + ')\\n';\n return code;\n}\n\nexport const actuator_led_bright = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n // var bright = this.getFieldValue('bright');\n var code = \"mixgo.led\" + op + \".setonoff(\" + bright + \")\\n\";\n return code;\n}\n\nexport const actuator_get_led_bright = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n var code = \"mixgo.led\" + op + \".getonoff(\" + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const actuator_led_brightness = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var code = 'mixgo.led' + op + '.setbrightness(' + flag + ')\\n';\n return code;\n}\n\nexport const actuator_neopixel_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var dropdown_rgbpin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var value_ledcount = generator.valueToCode(this, 'LEDCOUNT', generator.ORDER_ATOMIC);\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_neopixel'] = 'import neopixel';\n var code = v + ' = neopixel.NeoPixel(machine.Pin(' + dropdown_rgbpin + '), ' + value_ledcount + ', timing = True)\\n';\n return code;\n}\n\nexport const actuator_neopixel_write = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_neopixel'] = 'import neopixel';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.write()\\n';\n return code;\n}\n\nexport const actuator_neopixel_rgb = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_neopixel'] = 'import neopixel';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);\n var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);\n var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);\n var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);\n var code = v + '[' + value_led + '] = (' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\\n';\n return code;\n}\n\nexport const actuator_onboard_neopixel_write = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var code = 'mixgo.rgb.write()\\n';\n return code;\n}\n\nexport const actuator_onboard_neopixel_rgb = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);\n var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);\n var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);\n var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);\n var code = 'mixgo.rgb[' + value_led + '] = (' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\\n';\n return code;\n}\n\nexport const actuator_onboard_neopixel_rgb_all = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);\n var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);\n var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);\n var code = 'mixgo.rgb.fill((' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + '))\\n';\n return code;\n}\n\nexport const led_light = actuator_led_bright;\nexport const get_led_bright = actuator_get_led_bright;\nexport const led_brightness = actuator_led_brightness;","import { Boards } from 'mixly';\n\nexport const servo_init = function (_, generator) {\n generator.definitions_['import_servo'] = 'import servo';\n generator.definitions_['import_board'] = 'import board';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = v + ' = servo.Servo(board.' + dropdown_pin + ')\\n';\n return code;\n}\n\nexport const servo_speed_360 = function (_, generator) {\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var speed = generator.valueToCode(this, 'SPEED', generator.ORDER_ATOMIC);\n var code = v + '.set_speed(' + speed + ')\\n';\n return code;\n}\n\nexport const servo_set_angle = function (_, generator) {\n generator.definitions_['import_servo'] = 'import servo';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);\n var code = 'servo.servo180_angle(' + dropdown_pin + ',' + num + ')\\n';\n return code;\n}\n\nexport const servo_set_speed = function (_, generator) {\n generator.definitions_['import_servo'] = 'import servo';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);\n var code = 'servo.servo360_speed(' + dropdown_pin + ',' + num + ')\\n';\n return code;\n}\n\nexport const servo_get_angle = function (_, generator) {\n generator.definitions_['import_servo'] = 'import servo';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'servo.servo180_angle(' + dropdown_pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const servo_get_speed = function (_, generator) {\n generator.definitions_['import_servo'] = 'import servo';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'servo.servo360_speed(' + dropdown_pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const actuator_ms32006_init = function (_, generator) {\n generator.definitions_['import ms32006'] = 'import ms32006';\n var address = this.getFieldValue('mode')\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var sub1 = generator.valueToCode(this, 'SUB1', generator.ORDER_ATOMIC);\n var code = sub + '=ms32006.MS32006(' + sub1 + ',addr=' + address + ')\\n';\n return code;\n}\n\nexport const actuator_ms32006_dcmotor = function (_, generator) {\n generator.definitions_['import ms32006'] = 'import ms32006';\n var direction = this.getFieldValue('direction')\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n var code = sub + '.dc_motor(' + direction + ',' + speed + ')\\n';\n return code;\n}\n\nexport const actuator_ms32006_stepper = function (_, generator) {\n generator.definitions_['import ms32006'] = 'import ms32006';\n var mode = this.getFieldValue('mode')\n var direction = this.getFieldValue('direction')\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n var steps = generator.valueToCode(this, 'steps', generator.ORDER_ATOMIC);\n var code = sub + '.move(' + mode + ',' + direction + ',' + speed + ',' + steps + ')\\n';\n return code;\n}\n\nexport const esp32_music_pitch_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var dropdown_rgbpin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n generator.definitions_['import_music'] = 'import music';\n var code = v + ' = music.MIDI(' + dropdown_rgbpin + ')\\n';\n return code;\n}\n\nexport const esp32_music_pitch = function (block, generator) {\n generator.definitions_['import_music'] = 'import music';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);\n var code = v + '.pitch(' + number_pitch + ')\\n';\n return code;\n}\n\nexport const esp32_music_pitch_with_time = function (block, generator) {\n generator.definitions_['import_music'] = 'import music';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);\n var number_time = generator.valueToCode(block, 'time', generator.ORDER_ATOMIC);\n var code = v + '.pitch_time(' + number_pitch + ', ' + number_time + ')\\n';\n return code;\n}\n\nexport const esp32_music_stop = function (block, generator) {\n generator.definitions_['import_music'] = 'import music';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.stop(' + ')\\n';\n return code;\n}\n\nexport const esp32_music_set_tempo_extern = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var bpm = generator.valueToCode(this, 'BPM', generator.ORDER_ASSIGNMENT);\n var ticks = generator.valueToCode(this, 'TICKS', generator.ORDER_ASSIGNMENT);\n var code = v + \".set_tempo(\" + ticks + \", \" + bpm + \")\\n\";\n return code;\n}\n\nexport const esp32_music_get_tempo_extern = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + \".get_tempo()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const esp32_music_play_list = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + \".play(\" + v + '.' + lst + \")\\n\";\n return code;\n}\n\nexport const esp32_music_reset_extern = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n return v + \".reset()\\n\";\n}\n\nexport const servo_move = function (_, generator) {\n generator.definitions_['import_servo'] = 'import servo';\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var value_degree = generator.valueToCode(this, 'DEGREE', generator.ORDER_ATOMIC);\n var code = 'servo.servo_write_angle(' + dropdown_pin + ',' + value_degree + ')\\n';\n return code;\n}\n\nexport const actuator_extern_led_bright = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n // var bright = this.getFieldValue('bright');\n var code = \"mixgo.LED(\" + pin + \").setonoff(\" + bright + \")\\n\";\n return code;\n}\n\nexport const actuator_extern_get_led_bright = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = \"mixgo.LED(\" + pin + \").getbrightness(\" + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const actuator_extern_get_led_state = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = \"mixgo.LED(\" + pin + \").getonoff(\" + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const actuator_extern_led_brightness = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var code = 'mixgo.LED(' + pin + ').setbrightness(' + flag + ')\\n';\n return code;\n}\n\nexport const actuator_neopixel_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var dropdown_rgbpin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var value_ledcount = generator.valueToCode(this, 'LEDCOUNT', generator.ORDER_ATOMIC);\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_neopixel'] = 'import neopixel';\n var code = v + ' = neopixel.NeoPixel(machine.Pin(' + dropdown_rgbpin + '), ' + value_ledcount + ')\\n';\n return code;\n}\n\nexport const actuator_neopixel_rgb_all = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);\n var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);\n var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);\n var code = v + '.fill((' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + '))\\n';\n return code;\n}\n\nexport const actuator_neopixel_write = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_neopixel'] = 'import neopixel';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.write()\\n';\n return code;\n}\n\nexport const actuator_neopixel_rgb = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_neopixel'] = 'import neopixel';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);\n var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);\n var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);\n var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);\n var code = v + '[' + value_led + '] = (' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\\n';\n return code;\n}\n\nexport const actuator_use_uart_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var key2 = this.getFieldValue('key2');\n if (key2=='SYN6288'){\n generator.definitions_['import_syn6288'] = 'import syn6288';\n var code = v + '=syn6288.SYN6288(' + key + ')\\n';\n return code;\n }else if(key2=='NS9300'){\n generator.definitions_['import_ns9300'] = 'import ns9300';\n var code = v + '=ns9300.NS9300(' + key + ')\\n';\n return code;\n }\n \n}\n\nexport const player_whether_stop = function(_,generator){\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = v+'.status('+key+')';\n return [code,generator.ORDER_ATOMIC];\n}\n\nexport const player_set_play = function(_,generator){\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = v+'.control('+key+')\\n';\n return code;\n}\n\nexport const player_set_volume = function(_,generator){\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var vol = generator.valueToCode(this, 'volume', generator.ORDER_ATOMIC);\n var code = v+'.volume('+vol+')\\n';\n return code;\n}\n\nexport const player_set_mode = function(_,generator){\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = v +'.mode('+key+')\\n';\n return code;\n}\n\nexport const player_play_music = function(_,generator){\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var s = generator.valueToCode(this, 'song', generator.ORDER_ATOMIC);\n var code = v +'.'+key+'('+s+')\\n';\n return code;\n}\n\nexport const syn6288_set_voice = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var voice = generator.valueToCode(this, 'VOICE', generator.ORDER_ASSIGNMENT);\n var code = v + \".volume(\" + voice + \")\\n\";\n return code;\n}\n\nexport const syn6288_get_voice = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + \".volume()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const syn6288_builtin_voice = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var mode = this.getFieldValue('mode');\n var voice = generator.valueToCode(this, 'VOICE', generator.ORDER_ASSIGNMENT);\n var code = v + \".hint_tones(\" + voice + ',blocking=' + mode + \")\\n\";\n return code;\n}\n\nexport const syn6288_tts_play = function (_, generator) {\n generator.definitions_['import_music'] = 'import music';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var mode = this.getFieldValue('mode');\n var voice = generator.valueToCode(this, 'VOICE', generator.ORDER_ASSIGNMENT);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = v + \".synthesis(\" + data + ',music=' + voice + ',blocking=' + mode + \")\\n\";\n return code;\n}\n\n//mixbot extern below:\nexport const mixbot_addr_extern = function (_, generator) {\n var code = this.getFieldValue('PIN');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const robot_motor_extern = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_motor'] = 'from mixbot_ext import ext_motor';\n var code = 'ext_motor.run(' + mode + ',' + speed + \")\\n\";\n return code;\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_motor'] = 'ext_motor_left = i2cdevice.Motor(ext_i2c_left)';\n var code = 'ext_motor_left.run(0,' + speed + ')\\n';\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_motor'] = 'ext_motor_right = i2cdevice.Motor(ext_i2c_right)';\n var code = 'ext_motor_right.run(0,' + speed + ')\\n';\n }\n return code;\n }\n}\n\nexport const robot_motor_extern_get_speed = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n if (version == 'mixbot') {\n var code = 'ext_motor.run(' + mode + \")\";\n return [code, generator.ORDER_ATOMIC];\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_motor'] = 'ext_motor_left = i2cdevice.Motor(ext_i2c_left)';\n var code = 'ext_motor_left.run()';\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_motor'] = 'ext_motor_right = i2cdevice.Motor(ext_i2c_right)';\n var code = 'ext_motor_right.run()';\n }\n return [code, generator.ORDER_ATOMIC];\n }\n}\n\nexport const robot_traffic_light_extern = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n var light = this.getFieldValue('light');\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_traffic'] = 'from mixbot_ext import ext_traffic';\n var mode = this.getFieldValue('mode');\n var light = this.getFieldValue('light');\n var code = 'ext_traffic.led(' + mode + ',';\n if (light == '0' || light == '1' || light == '2') { code += '0' + ',' }\n else if (light == '3' || light == '4') { code += '1' + ',' }\n else if (light == '5' || light == '6') { code += '2' + ',' }\n if (light == '0') { code += '0' }\n else if (light == '1' || light == '3' || light == '5') { code += '1' }\n else if (light == '2' || light == '4' || light == '6') { code += '-1' }\n code += \")\\n\";\n return code;\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_traffic'] = 'ext_traffic_left = i2cdevice.Traffic_LED(ext_i2c_left)';\n var code = 'ext_traffic_left.led(0,';\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_traffic'] = 'ext_traffic_right = i2cdevice.Traffic_LED(ext_i2c_right)';\n var code = 'ext_traffic_right.led(0,';\n }\n if (light == '0' || light == '1' || light == '2') { code += '0' + ',' }\n else if (light == '3' || light == '4') { code += '1' + ',' }\n else if (light == '5' || light == '6') { code += '2' + ',' }\n if (light == '0') { code += '0' }\n else if (light == '1' || light == '3' || light == '5') { code += '1' }\n else if (light == '2' || light == '4' || light == '6') { code += '-1' }\n code += \")\\n\";\n return code;\n }\n}\n\nexport const robot_led_extern = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n var color = this.getFieldValue('color');\n var value = generator.valueToCode(this, 'value', generator.ORDER_ATOMIC);\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_' + color + '_LED'] = 'from mixbot_ext import ' + color + '_LED';\n var code = color + '_LED.brightness(' + mode + ',' + value + \")\\n\";\n return code;\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_' + color + '_LED'] = 'ext_' + color + '_LED_left = i2cdevice.' + color + '_LED(ext_i2c_left)';\n var code = 'ext_' + color + '_LED_left.brightness(' + '0,' + value + \")\\n\";\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_' + color + '_LED'] = 'ext_' + color + '_LED_right = i2cdevice.' + color + '_LED(ext_i2c_right)';\n var code = 'ext_' + color + '_LED_right.brightness(' + '0,' + value + \")\\n\";\n }\n return code;\n }\n}\n\nexport const robot_led_extern_get_value = function (_, generator) {\n var mode = this.getFieldValue('mode');\n var color = this.getFieldValue('color');\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_' + color + '_LED'] = 'from mixbot_ext import ' + color + '_LED';\n var code = color + '_LED.brightness(' + mode + \")\";\n return [code, generator.ORDER_ATOMIC];\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_' + color + '_LED'] = 'ext_' + color + '_LED_left = i2cdevice.' + color + '_LED(ext_i2c_left)';\n var code = 'ext_' + color + '_LED_left.brightness(0)';\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_' + color + '_LED'] = 'ext_' + color + '_LED_right = i2cdevice.' + color + '_LED(ext_i2c_right)';\n var code = 'ext_' + color + '_LED_right.brightness(0)';\n }\n return [code, generator.ORDER_ATOMIC];\n }\n}\n\nexport const robot_servo_extern_get_status = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n var status = this.getFieldValue('status');\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';\n var code = 'ext_servo.state(' + mode + \")\" + status;\n return [code, generator.ORDER_ATOMIC];\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';\n var code = 'ext_servo_left.state(0)' + status;\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';\n var code = 'ext_servo_right.state(0)' + status;\n }\n return [code, generator.ORDER_ATOMIC];\n }\n}\n\nexport const robot_servo_extern_stop_mode = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n var status = this.getFieldValue('status');\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';\n var code = 'ext_servo.stop_mode(' + mode + \",\" + status + \")\\n\";\n return code;\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';\n var code = 'ext_servo_left.stop_mode(' + \"0,\" + status + \")\\n\";\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';\n var code = 'ext_servo_right.stop_mode(' + \"0,\" + status + \")\\n\";\n }\n return code;\n }\n}\n\nexport const robot_servo_extern_stop = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';\n var code = 'ext_servo.stop(' + mode + \")\\n\";\n return code;\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';\n var code = 'ext_servo_left.stop(0)\\n';\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';\n var code = 'ext_servo_right.stop(0)\\n';\n }\n return code;\n }\n}\n\nexport const robot_servo_extern_absolute_run = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n var status = this.getFieldValue('status');\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n var direction = this.getFieldValue('direction');\n var angle = generator.valueToCode(this, 'angle', generator.ORDER_ATOMIC);\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';\n var code = 'ext_servo.absolute_run(' + mode + \",\" + status + \",\" + speed + \",\" + direction + \",\" + angle + \")\\n\";\n return code;\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';\n var code = 'ext_servo_left.absolute_run(' + \"0,\" + status + \",\" + speed + \",\" + direction + \",\" + angle + \")\\n\";\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';\n var code = 'ext_servo_right.absolute_run(' + \"0,\" + status + \",\" + speed + \",\" + direction + \",\" + angle + \")\\n\";\n }\n return code;\n }\n}\n\nexport const robot_servo_extern_relative_origin = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';\n var code = 'ext_servo.relative_origin(' + mode + \")\\n\";\n return code;\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';\n var code = 'ext_servo_left.relative_origin(0)\\n';\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';\n var code = 'ext_servo_right.relative_origin(0)\\n';\n }\n return code;\n }\n}\n\nexport const robot_servo_extern_relative_run = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n var status = this.getFieldValue('status');\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n var angle = generator.valueToCode(this, 'angle', generator.ORDER_ATOMIC);\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';\n var code = 'ext_servo.relative_run(' + mode + \",\" + status + \",\" + speed + \",\" + angle + \")\\n\";\n return code;\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';\n var code = 'ext_servo_left.relative_run(' + \"0,\" + status + \",\" + speed + \",\" + angle + \")\\n\";\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';\n var code = 'ext_servo_right.relative_run(' + \"0,\" + status + \",\" + speed + \",\" + angle + \")\\n\";\n }\n return code;\n }\n}\n\nexport const robot_servo_extern_relative_continue = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n var status = this.getFieldValue('status');\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n var direction = this.getFieldValue('direction');\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';\n var code = 'ext_servo.relative_continue(' + mode + \",\" + status + \",\" + speed + \",\" + direction + \")\\n\";\n return code;\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';\n var code = 'ext_servo_left.relative_continue(' + \"0,\" + status + \",\" + speed + \",\" + direction + \")\\n\";\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';\n var code = 'ext_servo_right.relative_continue(' + \"0,\" + status + \",\" + speed + \",\" + direction + \")\\n\";\n }\n return code;\n }\n}\n\nexport const mixbot_actuator_extern_get_addr = function (_, generator) {\n var name = this.getFieldValue('name');\n generator.definitions_['import_mixbot_ext_' + name] = 'from mixbot_ext import ' + name;\n var code = name + '.addr_get()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const mixbot_actuator_extern_set_addr = function (_, generator) {\n var name = this.getFieldValue('name');\n generator.definitions_['import_mixbot_ext_' + name] = 'from mixbot_ext import ' + name;\n var oldaddr = generator.valueToCode(this, 'old', generator.ORDER_ATOMIC);\n var newaddr = generator.valueToCode(this, 'new', generator.ORDER_ATOMIC);\n var code = name + '.addr_set(' + oldaddr + ',' + newaddr + ')\\n';\n return code;\n}\n\n//educore\nexport const PIN_init = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + 'pin'] = 'from ' + version + ' import pin';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'pin('+ dropdown_pin +')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const pin_led_bright = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var pin = generator.valueToCode(this, 'pin', generator.ORDER_ATOMIC);\n generator.definitions_['import_' + version + 'pin'] = 'from ' + version + ' import pin';\n var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var code = pin+\".write_digital(value=\" + bright + \")\\n\";\n return code;\n}\n\nexport const servo_PIN_init = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + 'servo'] = 'from ' + version + ' import servo';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'servo('+ dropdown_pin +')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const servo_move_angle = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + 'servo'] = 'from ' + version + ' import servo';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var a = generator.valueToCode(this, 'angle', generator.ORDER_ATOMIC);\n var code = sub+'.angle('+ a +')\\n';\n return code;\n}\n\nexport const parrot_PIN_init = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + 'parrot'] = 'from ' + version + ' import parrot';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'parrot('+ dropdown_pin +')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const parrot_move_speed = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + 'parrot'] = 'from ' + version + ' import parrot';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n var code = sub+'.speed('+ speed +')\\n';\n return code;\n}","import { Boards } from 'mixly';\n\nexport const esp32_music_set_tempo = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';\n var bpm = generator.valueToCode(this, 'BPM', generator.ORDER_ASSIGNMENT);\n var ticks = generator.valueToCode(this, 'TICKS', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_music.set_tempo(\" + ticks + \", \" + bpm + \")\\n\";\n return code;\n}\n\nexport const esp32_music_get_tempo = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';\n var code = \"onboard_music.get_tempo()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const esp32_onboard_music_pitch = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';\n var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);\n var code = 'onboard_music.pitch(' + number_pitch + ')\\n';\n return code;\n}\n\nexport const esp32_onboard_music_pitch_with_time = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);\n var number_time = generator.valueToCode(block, 'time', generator.ORDER_ATOMIC);\n if (version == 'mixgo_zero') {\n generator.definitions_['import_mixgo_zero_voice_spk_midi'] = \"from mixgo_zero_voice import spk_midi\";\n var code = 'spk_midi.pitch_time(' + number_pitch + ', ' + number_time + ')\\n';\n } else if (version == 'mixgo_nova') {\n generator.definitions_['import_mixgo_nova_voice_spk_midi'] = \"from mixgo_nova_voice import spk_midi\";\n var code = 'spk_midi.pitch_time(' + number_pitch + ', ' + number_time + ')\\n';\n } else {\n generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';\n var code = 'onboard_music.pitch_time(' + number_pitch + ', ' + number_time + ')\\n';\n }\n return code;\n}\n\nexport const esp32_onboard_music_stop = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';\n var code = 'onboard_music.stop(' + ')\\n';\n return code;\n}\n\nexport const esp32_onboard_music_play_list = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);\n if (version == 'mixgo_sant') {\n generator.definitions_['import_mixgo_sant_onboard_music'] = \"from mixgo_sant import onboard_music\";\n var code = \"onboard_music.play(\" + lst + \")\\n\";\n } else if (version == 'mixgo_nova') {\n generator.definitions_['import_mixgo_nova_voice_spk_midi'] = \"from mixgo_nova_voice import spk_midi\";\n var code = \"spk_midi.play(\" + lst + \")\\n\";\n } else {\n generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';\n var code = \"onboard_music.play(\" + lst + \")\\n\";\n }\n return code;\n}\n\nexport const esp32_music_reset = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';\n return \"onboard_music.reset()\\n\";\n}\n\nexport const number = function (_, generator) {\n var code = this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ledswitch = function (_, generator) {\n var code = this.getFieldValue('flag');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const actuator_led_bright = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';\n var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var code = \"onboard_led.setonoff(\" + op + \",\" + bright + \")\\n\";\n return code;\n}\n\nexport const actuator_get_led_bright = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';\n var code = \"onboard_led.getbrightness(\" + op + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const actuator_get_led_state = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';\n var code = \"onboard_led.getonoff(\" + op + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const actuator_led_brightness = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';\n var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var code = \"onboard_led.setbrightness(\" + op + \",\" + flag + \")\\n\";\n return code;\n}\n\nexport const actuator_mixgo_zero_led_color = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';\n var color = this.getFieldValue('colorvalue');\n var code = \"onboard_led.setcolor(\" + op + \",\" + color + \")\\n\";\n return code;\n}\n\nexport const cc_number = function (_, generator) {\n var code = this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const rm_actuator_led_bright = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var op = this.getFieldValue('color');\n generator.definitions_['import_' + version + '_' + op + 'led'] = 'from ' + version + ' import ' + op + 'led';\n var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var code = op + \"led.setonoff(\" + bright + \")\\n\";\n return code;\n}\n\nexport const rm_actuator_get_led_bright = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var op = this.getFieldValue('color');\n generator.definitions_['import_' + version + '_' + op + 'led'] = 'from ' + version + ' import ' + op + 'led';\n var code = op + \"led.getbrightness()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const rm_actuator_get_led_state = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var op = this.getFieldValue('color');\n generator.definitions_['import_' + version + '_' + op + 'led'] = 'from ' + version + ' import ' + op + 'led';\n var code = op + \"led.getonoff()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const rm_actuator_led_brightness = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var op = this.getFieldValue('color');\n generator.definitions_['import_' + version + '_' + op + 'led'] = 'from ' + version + ' import ' + op + 'led';\n var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var code = op + \"led.setbrightness(\" + flag + \")\\n\";\n return code;\n}\n\nexport const actuator_onboard_neopixel_write = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';\n var code = 'onboard_rgb.write()\\n';\n return code;\n}\n\nexport const actuator_onboard_neopixel_rgb = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';\n var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);\n var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);\n var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);\n var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);\n var code = 'onboard_rgb[' + value_led + '] = (' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\\n';\n return code;\n}\n\nexport const actuator_onboard_neopixel_rgb_all = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';\n var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);\n var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);\n var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);\n var code = 'onboard_rgb.fill((' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + '))\\n';\n return code;\n}\n\nexport const actuator_onboard_neopixel_rgb_show_all_chase = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';\n var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);\n var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);\n var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);\n var number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);\n var code = 'onboard_rgb.color_chase(' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ', ' + number_time + ')\\n';\n return code;\n}\n\nexport const actuator_onboard_neopixel_rgb_show_all_rainbow = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';\n var number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);\n var code = 'onboard_rgb.rainbow_cycle(' + number_time + ')\\n';\n return code;\n}\n\nexport const rm_motor = function (_, generator) {\n var wheel = this.getFieldValue('wheel');\n generator.definitions_['import_rm_e1_motor' + wheel] = 'from rm_e1 import motor' + wheel;\n var v = this.getFieldValue('direction');\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n var code = \"motor\" + wheel + '.motion(\"' + v + '\",' + speed + \")\\n\";\n return code;\n}\n\n//c3 motor onboard\nexport const actuator_stepper_keep = function (_, generator) {\n var v = this.getFieldValue('VAR');\n generator.definitions_['import_mixgocar_c3_car'] = 'from mixgocar_c3 import car';\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);\n var code = 'car.motor_move(\"' + v + '\",' + speed + \")\\n\";\n return code;\n}\n\nexport const actuator_stepper_stop = function (_, generator) {\n var v = this.getFieldValue('VAR');\n generator.definitions_['import_mixgocar_c3_car'] = 'from mixgocar_c3 import car';\n var code = 'car.motor_move(\"' + v + '\"' + \")\\n\";\n return code;\n}\n\nexport const actuator_dc_motor = function (_, generator) {\n var wheel = this.getFieldValue('wheel');\n generator.definitions_['import_mixgocar_c3_car'] = 'from mixgocar_c3 import car';\n var v = this.getFieldValue('direction');\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n var code = \"car.motor(car.MOTO_\" + wheel + ',\"' + v + '\",' + speed + \")\\n\";\n return code;\n}\n\nexport const actuator_dc_motor_stop = function (_, generator) {\n var wheel = this.getFieldValue('wheel');\n generator.definitions_['import_mixgocar_c3_car'] = 'from mixgocar_c3 import car';\n var v = this.getFieldValue('direction');\n var code = \"car.motor(car.MOTO_\" + wheel + ',\"' + v + '\"' + \")\\n\";\n return code;\n}\n\n//mixbot onboard_motor below:\n\nexport const mixbot_motor_status = function (_, generator) {\n generator.definitions_['import_mixbot_motor'] = 'from mixbot import motor';\n var code = 'motor.status()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const mixbot_move = function (_, generator) {\n var v = this.getFieldValue('VAR');\n var mode = this.getFieldValue('mode');\n generator.definitions_['import_mixbot_motor'] = 'from mixbot import motor';\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);\n var code = 'motor.move(\"' + v + '\",motor.' + mode + '_MODE,' + speed + \")\\n\";\n return code;\n}\n\nexport const mixbot_stop = function (_, generator) {\n var v = this.getFieldValue('VAR');\n generator.definitions_['import_mixbot_motor'] = 'from mixbot import motor';\n if (v == 'N') {\n var code = 'motor.move(\"N\",motor.STOP_MODE)\\n'\n } else if (v == 'P') {\n var code = 'motor.move(\"P\",motor.BRAKE_MODE)\\n'\n }\n return code;\n}\n\nexport const mixbot_motor = function (_, generator) {\n var wheel = this.getFieldValue('wheel');\n generator.definitions_['import_mixbot_motor'] = 'from mixbot import motor';\n var mode = this.getFieldValue('mode');\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n var code = 'motor.run(' + wheel + ',motor.' + mode + '_MODE,' + speed + \")\\n\";\n return code;\n}\n\nexport const actuator_mixbot_buzzer_on_off = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_spk_en'] = 'from ' + version + ' import spk_en';\n var op = this.getFieldValue('on_off');\n var code = \"spk_en.value(\" + op + \")\\n\";\n return code;\n}\n\n//bitbot onboard_motor below:\nexport const bitbot_move = function (_, generator) {\n var v = this.getFieldValue('VAR');\n generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);\n var code = 'onboard_bot51.move(\"' + v + '\",' + speed + \")\\n\";\n return code;\n}\n\nexport const bitbot_stop = function (_, generator) {\n var v = this.getFieldValue('VAR');\n generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';\n var code = 'onboard_bot51.move(\"' + v + '\"' + \")\\n\";\n return code;\n}\n\nexport const bitbot_motor = function (_, generator) {\n var wheel = this.getFieldValue('wheel');\n var direction = this.getFieldValue('direction');\n generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n var code = 'onboard_bot51.motor(' + wheel + ',\"' + direction + '\",' + speed + \")\\n\";\n return code;\n}\n\nexport const actuator_mixgo_nova_mic_set = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'mixgo_zero') {\n generator.definitions_['import_mixgo_zero_voice_ob_code'] = \"from mixgo_zero_voice import ob_code\";\n } else {\n generator.definitions_['import_mixgo_nova_voice_ob_code'] = \"from mixgo_nova_voice import ob_code\";\n }\n\n var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var code = \"ob_code.mic_volume(\" + bright + \")\\n\";\n return code;\n}\n\nexport const actuator_mixgo_nova_mic_get = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'mixgo_zero') {\n generator.definitions_['import_mixgo_zero_voice_ob_code'] = \"from mixgo_zero_voice import ob_code\";\n } else {\n generator.definitions_['import_mixgo_nova_voice_ob_code'] = \"from mixgo_nova_voice import ob_code\";\n }\n var code = \"ob_code.mic_volume()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const actuator_mixgo_nova_voice_set = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'mixgo_zero') {\n generator.definitions_['import_mixgo_zero_voice_ob_code'] = \"from mixgo_zero_voice import ob_code\";\n } else {\n generator.definitions_['import_mixgo_nova_voice_ob_code'] = \"from mixgo_nova_voice import ob_code\";\n }\n var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var code = \"ob_code.voice_volume(\" + bright + \")\\n\";\n return code;\n}\n\nexport const actuator_mixgo_nova_voice_get = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'mixgo_zero') {\n generator.definitions_['import_mixgo_zero_voice_ob_code'] = \"from mixgo_zero_voice import ob_code\";\n } else {\n generator.definitions_['import_mixgo_nova_voice_ob_code'] = \"from mixgo_nova_voice import ob_code\";\n }\n var code = \"ob_code.voice_volume()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const actuator_mixgo_nova_record_audio = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'mixgo_zero') {\n generator.definitions_['import_mixgo_zero_voice_record_audio'] = \"from mixgo_zero_voice import record_audio\";\n } else {\n generator.definitions_['import_mixgo_nova_voice_record_audio'] = \"from mixgo_nova_voice import record_audio\";\n }\n var path = generator.valueToCode(this, 'PATH', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'TIME', generator.ORDER_ASSIGNMENT);\n var code = \"record_audio(\" + path + \", \" + time + \")\\n\";\n return code;\n}\n\nexport const actuator_mixgo_nova_play_audio = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'mixgo_zero') {\n generator.definitions_['import_mixgo_zero_voice_play_audio'] = \"from mixgo_zero_voice import play_audio\";\n } else {\n generator.definitions_['import_mixgo_nova_voice_play_audio'] = \"from mixgo_nova_voice import play_audio\";\n }\n var path = generator.valueToCode(this, 'PATH', generator.ORDER_ASSIGNMENT);\n var code = \"play_audio(\" + path + \")\\n\";\n return code;\n}\n\nexport const actuator_mixgo_nova_play_online_audio = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n if (version == 'mixgo_zero') {\n generator.definitions_['import_mixgo_zero_voice_play_audio_url'] = \"from mixgo_zero_voice import play_audio_url\";\n } else {\n generator.definitions_['import_mixgo_nova_voice_play_audio_url'] = \"from mixgo_nova_voice import play_audio_url\";\n }\n var path = generator.valueToCode(this, 'PATH', generator.ORDER_ASSIGNMENT);\n var code = \"play_audio_url(\" + path + \")\\n\";\n return code;\n}\n\nexport const actuator_mixgo_nova_onboard_music_pitch = function (block, generator) {\n generator.definitions_['import_mixgo_nova_voice_spk_midi'] = \"from mixgo_nova_voice import spk_midi\";\n var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);\n var code = 'spk_midi.pitch(' + number_pitch + ')\\n';\n return code;\n}\n\nexport const actuator_mixgo_nova_onboard_music_stop = function (block, generator) {\n generator.definitions_['import_mixgo_nova_voice_spk_midi'] = \"from mixgo_nova_voice import spk_midi\";\n var code = 'spk_midi.stop(' + ')\\n';\n return code;\n}\n\nexport const set_power_output = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n var index = this.getFieldValue('index');\n var duty = generator.valueToCode(this, 'duty', generator.ORDER_ATOMIC);\n generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';\n var code = 'onboard_bot.usben(' + index + ',' + duty + ')\\n';\n return code;\n}\n\nexport const get_power_output = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n var index = this.getFieldValue('index');\n generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';\n var code = 'onboard_bot.usben(' + index + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const set_all_power_output = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n var duty = generator.valueToCode(this, 'duty', generator.ORDER_ATOMIC);\n generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';\n var code = 'onboard_bot.usben(freq = ' + duty + ')\\n';\n return code;\n}\n\nexport const analog_keyboard_input = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var sp = generator.valueToCode(this, 'special', generator.ORDER_ATOMIC);\n var ge = generator.valueToCode(this, 'general', generator.ORDER_ATOMIC);\n var re = this.getFieldValue('release');\n generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';\n var code = \"onboard_bot.hid_keyboard(\" + sp + \",\" + ge + \",\" + re + \")\\n\";\n return code;\n}\n\nexport const special_key = function (_, generator) {\n var code = this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const general_key = function (_, generator) {\n var code = this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const analog_mouse_input = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);\n var wheel = generator.valueToCode(this, 'wheel', generator.ORDER_ATOMIC);\n var re = this.getFieldValue('release');\n generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';\n var code = \"onboard_bot.hid_mouse(keys=\" + key + \",move=(\" + x + \",\" + y + \"),wheel=\" + wheel + \",release=\" + re + \")\\n\";\n return code;\n}\n\nexport const mouse_key = function (_, generator) {\n var code = this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const analog_keyboard_str = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var str = generator.valueToCode(this, 'str', generator.ORDER_ATOMIC);\n var t = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);\n generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';\n var code = \"onboard_bot.hid_keyboard_str(\" + str + \",delay=\" + t + \")\\n\";\n return code;\n}\n\nexport const general_key_tuple = function (_, generator) {\n // Create a list with any number of elements of any type.\n var code = new Array(this.itemCount_);\n var default_value = '0';\n for (var n = 0; n < this.itemCount_; n++) {\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || default_value;\n }\n if (this.itemCount_ != 1) {\n var code = '(' + code.join(', ') + ')';\n } else {\n var code = '(' + code.join(', ') + ',)';\n }\n\n return [code, generator.ORDER_ATOMIC];\n};\n\nexport const analog_ble_keyboard_init = function (_, generator) {\n generator.definitions_['import_ble_keyboard'] = 'from ble_hid_keyboard import Keyboard';\n var kname = generator.valueToCode(this, 'kname', generator.ORDER_ATOMIC)\n var code = 'ble_keyboard=Keyboard(' + kname + ')\\n';\n return code;\n}\n\nexport const ble_keyboard_get_mac = function (_, generator) {\n generator.definitions_['import_ble_keyboard'] = 'from ble_hid_keyboard import Keyboard';\n var code = 'ble_keyboard.mac';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ble_keyboard_connect = function (_, generator) {\n generator.definitions_['import_ble_keyboard'] = 'from ble_hid_keyboard import Keyboard';\n var code = 'ble_keyboard.is_connected()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const analog_ble_keyboard_input = function (_, generator) {\n var sp = generator.valueToCode(this, 'special', generator.ORDER_ATOMIC);\n var ge = generator.valueToCode(this, 'general', generator.ORDER_ATOMIC);\n var re = this.getFieldValue('release');\n generator.definitions_['import_ble_keyboard'] = 'from ble_hid_keyboard import Keyboard';\n var code = \"ble_keyboard.notify_hid(\" + sp + \",\" + ge + \",\" + re + \")\\n\";\n return code;\n}\n\nexport const analog_ble_keyboard_str = function (_, generator) {\n var str = generator.valueToCode(this, 'str', generator.ORDER_ATOMIC);\n var t = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);\n generator.definitions_['import_ble_keyboard'] = 'from ble_hid_keyboard import Keyboard';\n var code = \"ble_keyboard.notify_str(\" + str + \",delay=\" + t + \")\\n\";\n return code;\n}\n\nexport const analog_ble_keyboard_send_battery = function (_, generator) {\n var b = generator.valueToCode(this, 'battery', generator.ORDER_ATOMIC);\n generator.definitions_['import_ble_keyboard'] = 'from ble_hid_keyboard import Keyboard';\n var code = \"ble_keyboard.notify_battery(\" + b + \")\\n\";\n return code;\n}\n\nexport const analog_ble_mouse_init = function (_, generator) {\n generator.definitions_['import_ble_mouse'] = 'from ble_hid_mouse import Mouse';\n var name = generator.valueToCode(this, 'name', generator.ORDER_ATOMIC)\n var code = 'ble_mouse=Mouse(' + name + ')\\n';\n return code;\n}\n\nexport const ble_mouse_get_mac = function (_, generator) {\n generator.definitions_['import_ble_mouse'] = 'from ble_hid_mouse import Mouse';\n var code = 'ble_mouse.mac';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ble_mouse_connect = function (_, generator) {\n generator.definitions_['import_ble_mouse'] = 'from ble_hid_mouse import Mouse';\n var code = 'ble_mouse.is_connected()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const analog_ble_mouse_input = function (_, generator) {\n var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);\n var wheel = generator.valueToCode(this, 'wheel', generator.ORDER_ATOMIC);\n var re = this.getFieldValue('release');\n generator.definitions_['import_ble_mouse'] = 'from ble_hid_mouse import Mouse';\n var code = \"ble_mouse.notify_hid(\" + key + \",(\" + x + \",\" + y + \"),\" + wheel + \",\" + re + \")\\n\";\n return code;\n}\n\nexport const analog_ble_mouse_send_battery = function (_, generator) {\n var b = generator.valueToCode(this, 'battery', generator.ORDER_ATOMIC);\n generator.definitions_['import_ble_mouse'] = 'from ble_hid_mouse import Mouse';\n var code = \"ble_mouse.notify_battery(\" + b + \")\\n\";\n return code;\n}\n\nexport const analog_ble_keyboard_mouse_init = function (_, generator) {\n generator.definitions_['import_HID_ble_hid'] = 'from ble_hid import HID';\n var kname = generator.valueToCode(this, 'kname', generator.ORDER_ATOMIC)\n var code = 'ble_hid = HID(' + kname + ')\\n';\n return code;\n}\n\nexport const ble_keyboard_mouse_get_mac = function (_, generator) {\n generator.definitions_['import_HID_ble_hid'] = 'from ble_hid import HID';\n var code = 'ble_hid.mac';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ble_keyboard_mouse_connect = function (_, generator) {\n generator.definitions_['import_HID_ble_hid'] = 'from ble_hid import HID';\n var code = 'ble_hid.is_connected()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const analog_ble_keyboard_mouse_send_battery = function (_, generator) {\n var b = generator.valueToCode(this, 'battery', generator.ORDER_ATOMIC);\n generator.definitions_['import_HID_ble_hid'] = 'from ble_hid import HID';\n var code = \"ble_hid.battery_notify(\" + b + \")\\n\";\n return code;\n}\n\nexport const analog_ble_keyboard_mouse_input = function (_, generator) {\n var sp = generator.valueToCode(this, 'special', generator.ORDER_ATOMIC);\n var ge = generator.valueToCode(this, 'general', generator.ORDER_ATOMIC);\n var re = this.getFieldValue('release');\n generator.definitions_['import_HID_ble_hid'] = 'from ble_hid import HID';\n var code = \"ble_hid.keyboard_notify(\" + sp + \",\" + ge + \",\" + re + \")\\n\";\n return code;\n}\n\nexport const analog_ble_keyboard_mouse_str = function (_, generator) {\n var str = generator.valueToCode(this, 'str', generator.ORDER_ATOMIC);\n var t = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);\n generator.definitions_['import_HID_ble_hid'] = 'from ble_hid import HID';\n var code = \"ble_hid.keyboard_str(\" + str + \",delay=\" + t + \")\\n\";\n return code;\n}\n\nexport const analog_ble_mouse_keyboard_input = function (_, generator) {\n var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);\n var wheel = generator.valueToCode(this, 'wheel', generator.ORDER_ATOMIC);\n var re = this.getFieldValue('release');\n generator.definitions_['import_HID_ble_hid'] = 'from ble_hid import HID';\n var code = \"ble_hid.mouse_notify(\" + key + \",(\" + x + \",\" + y + \"),\" + wheel + \",\" + re + \")\\n\";\n return code;\n}\n//educore actuator\nexport const educore_buzzer = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_speaker'] = 'from ' + version + ' import spesker';\n var code = \"speaker()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_buzzer_play_tone = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_speaker'] = 'from ' + version + ' import spesker';\n var bu = generator.valueToCode(this, 'buzzer', generator.ORDER_ATOMIC);\n var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);\n var code = bu+'.tone(freq=[' + number_pitch + '])\\n';\n return code;\n}\n\nexport const educore_buzzer_play_tone_time = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_speaker'] = 'from ' + version + ' import spesker';\n var bu = generator.valueToCode(this, 'buzzer', generator.ORDER_ATOMIC);\n var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);\n var number_time = generator.valueToCode(block, 'time', generator.ORDER_ATOMIC);\n var code = bu+'.tone(freq=' + number_pitch + ', dur=' + number_time + ')\\n';\n return code;\n}\n\nexport const educore_buzzer_stop = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_speaker'] = 'from ' + version + ' import spesker';\n var bu = generator.valueToCode(this, 'buzzer', generator.ORDER_ATOMIC);\n var code = bu+'.stop()\\n';\n return code;\n}\n\nexport const educore_rgb_light = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + 'rgb'] = 'from ' + version + ' import rgb';\n var code = \"rgb()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_neopixel_rgb = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + 'rgb'] = 'from ' + version + ' import rgb';\n var rgb = generator.valueToCode(this, 'rgb', generator.ORDER_ATOMIC);\n var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);\n var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);\n var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);\n var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);\n var code = rgb+'.write(index[' + value_led + '], r=int(' + value_rvalue + '), g=int(' + value_gvalue + '), b=int(' + value_bvalue + '))\\n';\n return code;\n}\n\nexport const educore_neopixel_clear = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + 'rgb'] = 'from ' + version + ' import rgb';\n var rgb = generator.valueToCode(this, 'rgb', generator.ORDER_ATOMIC);\n var code = rgb+'.clear()\\n';\n return code;\n}\n\nexport const educore_ble_sensor_init = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_hid'] = 'from ' + version + ' import hid';\n var n = generator.valueToCode(this, 'name', generator.ORDER_ATOMIC);\n var code = 'hid.(name='+ n +')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_ble_sensor_connected = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_hid'] = 'from ' + version + ' import hid';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub+'.isconnected()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_ble_keyboard_input = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_keycode'] = 'from ' + version + ' import keycode';\n var ge = generator.valueToCode(this, 'general', generator.ORDER_ATOMIC);\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub+\".keyboard_send(\"+ ge + \")\\n\";\n return code;\n}","import * as Mixly from 'mixly';\n\nexport const MICROPYTHON_AI_client = function (_, generator) {\n var ctype = this.getFieldValue('CTYPE');\n generator.definitions_['import_baidu_speech'] = 'import baidu_speech';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var api_key = generator.valueToCode(this, 'API_KEY', generator.ORDER_ATOMIC);\n var sound = '';\n if (ctype == \"ASR\") {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_sound'] = \"from \" + version + \" import onboard_sound\";\n sound += 'onboard_sound.adc' + ',';\n }\n var secret_key = generator.valueToCode(this, 'SECRET_KEY', generator.ORDER_ATOMIC);\n var code = v + ' = ' + 'baidu_speech.' + ctype + '(' + sound + api_key + ', ' + secret_key + ')\\n';\n return code;\n}\n\nexport const MICROPYTHON_AI_Speech_unit = function (_, generator) {\n generator.definitions_['import_baidu_speech'] = 'import baidu_speech';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var id = generator.valueToCode(this, 'ID', generator.ORDER_ATOMIC);\n var s = generator.valueToCode(this, 'STR', generator.ORDER_ATOMIC);\n var code = v + '.chatbot(' + id + ',' + s + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const MICROPYTHON_AI_Speech_asr = function (_, generator) {\n var language = this.getFieldValue('LANGUAGE');\n generator.definitions_['import_baidu_speech'] = 'import baidu_speech';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var fn = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC) || '\"\"';\n var code = v + '.recognize(record_time=' + fn + ',dev_pid=' + language + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\n","export const ai_sensor_use_uart_init = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = v + '=mixgo_ai.AI(' + key + ',quick=1)\\n';\n return code;\n}\n\nexport const ai_sensor_qrcode_lite = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var type = this.getFieldValue('TYPE');\n var code = sub + '.find_' + type + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_config = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var rx = generator.valueToCode(this, 'RX', generator.ORDER_ATOMIC);\n var tx = generator.valueToCode(this, 'TX', generator.ORDER_ATOMIC);\n var dropdown_uart = this.getFieldValue('mode');\n var code = v + '.configure(' + tx + ',' + rx + ',restart=' + dropdown_uart + ')\\n';\n return code;\n}\n\nexport const ai_sensor_rgb = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var led1 = generator.valueToCode(this, 'led1', generator.ORDER_ATOMIC);\n var led2 = generator.valueToCode(this, 'led2', generator.ORDER_ATOMIC);\n var code = v + '.led_rgb(' + led1 + ',' + led2 + ')\\n';\n return code;\n}\n\nexport const ai_sensor_qrcode = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_find_qrcodes = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.find_qrcodes()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_barcode = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_find_barcodes = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.find_barcodes()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_tag = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_find_tags = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.find_apriltags()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_line = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_find_lines = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);\n var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);\n var v3 = generator.valueToCode(this, 'VAR3', generator.ORDER_ATOMIC);\n var code = v + '.find_lines(' + v1 + ',' + v2 + ',' + v3 + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_circle = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_find_circles = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);\n var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);\n var v3 = generator.valueToCode(this, 'VAR3', generator.ORDER_ATOMIC);\n var code = v + '.find_circles(' + v1 + ',' + v2 + ',' + v3 + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_rect = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_find_rects = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);\n var code = v + '.find_rects(' + v1 + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_color = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_find_colors = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.find_colors()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_color_chases_result = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_color_chases = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);\n var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);\n var v3 = generator.valueToCode(this, 'VAR3', generator.ORDER_ATOMIC);\n var code = v + '.color_track(' + v1 + ',' + v2 + ',' + v3 + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_ailocal_train = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);\n var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);\n var v3 = generator.valueToCode(this, 'VAR3', generator.ORDER_ATOMIC);\n var v4 = generator.valueToCode(this, 'VAR4', generator.ORDER_ATOMIC);\n var code = v + '.ailocal_train(' + v1 + ',' + v2 + ',' + v3 + ',' + v4 + ')\\n';\n return code;\n}\n\nexport const ai_sensor_ailocal_class = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);\n var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);\n var v4 = generator.valueToCode(this, 'VAR4', generator.ORDER_ATOMIC);\n var code = v + '.ailocal_class(' + v1 + ',' + v2 + ',' + v4 + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_ailocal_class_result = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_audio_record = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);\n var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);\n var code = v + '.audio_record(path=' + v1 + ',times=' + v2 + ')\\n';\n return code;\n}\n\nexport const ai_sensor_audio_play = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);\n var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);\n var code = v + '.audio_play(path=' + v1 + ',volume=' + v2 + ')\\n';\n return code;\n}\n\nexport const ai_sensor_yolo_recognize = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);\n var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);\n var v4 = generator.valueToCode(this, 'VAR4', generator.ORDER_ATOMIC);\n var code = v + '.yolo_recognize(' + v1 + ',' + v2 + ',' + v4 + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_yolo_recognize_result = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_asr_recognize = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);\n var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);\n var code = v + '.asr_recognize(' + v1 + ',threshold=' + v2 + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_licenseplate = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_find_licenseplates = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.find_licenseplate()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_face = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_classifier_faces = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.face_detect()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_20object = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ai_sensor_find_20objects = function (_, generator) {\n generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.find_20object()';\n return [code, generator.ORDER_ATOMIC];\n}","// Blynk 第二版\n// Blynk 自定义终端部件 Terminal\nexport const mpython_blynk_terminal_widget_vpin = function (_, generator) {\n // generator.definitions_['import_BlynkLib'] = 'import blynklib';\n var virtual_pin = generator.valueToCode(this, 'virtual_pin', generator.ORDER_ATOMIC);\n\n generator.functions_['terminal_widget_vpin_' + virtual_pin] =\n `\nALLOWED_COMMANDS_LIST = ['ls', 'lsusb', 'ip a', 'ip abc']\n\n@blynk.handle_event('write V${virtual_pin}')\ndef write_handler(pin, _values):\n header = ''\n result = ''\n delimiter = '{}\\\\n'.format('=' * 30)\n if _values and _values[0] in ALLOWED_COMMANDS_LIST:\n cmd_params = _values[0].split(' ')\n try:\n result = subprocess.check_output(cmd_params).decode('utf-8')\n header = '[output]\\\\n'\n except subprocess.CalledProcessError as exe_err:\n header = '[error]\\\\n'\n result = 'Return Code: {}\\\\n'.format(exe_err.returncode)\n except Exception as g_err:\n print(\"Command caused '{}'\".format(g_err))\n elif _values and _values[0] == 'help':\n header = '[help -> allowed commands]\\\\n'\n result = '{}\\\\n'.format('\\\\n'.join(ALLOWED_COMMANDS_LIST))\n\n # communicate with terminal if help or some allowed command\n if result:\n output = '{}{}{}{}'.format(header, delimiter, result, delimiter)\n print(output)\n blynk.virtual_write(pin, output)\n blynk.virtual_write(pin, '\\\\n')\n`\n\n var code = '';\n return code;\n}\n\n// Blynk 同步虚拟管脚的状态\nexport const mpython_blynk_sync_virtual = function (_, generator) {\n // generator.definitions_['import_BlynkLib'] = 'import blynklib';\n var virtual_pin = generator.valueToCode(this, 'virtual_pin', generator.ORDER_ATOMIC);\n\n var code = 'blynk.virtual_sync(' + virtual_pin + ')\\n';\n return code;\n}\n\n// 斷開连接 Blynk\nexport const mpython_blynk_on_disconnected = function (_, generator) {\n // generator.definitions_['import_BlynkLib'] = 'import blynklib';\n\n var branch = generator.statementToCode(this, 'DO');\n branch = generator.addLoopTrap(branch, this.id) || generator.PASS;\n\n generator.definitions_['blynk_on_disconnected'] =\n '@blynk.handle_event(\"disconnect\")\\n' +\n 'def connect_handler():\\n' +\n \" print('Blynk disconnected')\\n\" + branch;\n\n return '';\n}\n\n// 连接上 Blynk\nexport const mpython_blynk_on_connected = function (_, generator) {\n // generator.definitions_['import_BlynkLib'] = 'import blynklib';\n\n var branch = generator.statementToCode(this, 'DO');\n branch = generator.addLoopTrap(branch, this.id) || generator.PASS;\n\n generator.definitions_['blynk_on_connected'] =\n '@blynk.handle_event(\"connect\")\\n' +\n 'def connect_handler():\\n' +\n \" print('Blynk connected')\\n\" + branch;\n\n return '';\n}\n\n// Blynk 定时器的进程生效并运行\nexport const mpython_blynktimer_run = function () {\n // generator.definitions_['import_BlynkLib'] = 'import blynklib';\n // generator.definitions_['import_blynktimer'] = 'import blynktimer';\n\n var code = 'blynk_timer.run()\\n';\n return code;\n}\n\n// Blynk 进程生效并运行\nexport const mpython_blynk_run = function () {\n // generator.definitions_['import_BlynkLib'] = 'import blynklib';\n\n var code = 'blynk.run()\\n';\n return code;\n}\n\n// Blynk APP 显示通知\nexport const mpython_blynk_app_notify = function (_, generator) {\n // generator.definitions_['import_BlynkLib'] = 'import blynklib';\n var notification = generator.valueToCode(this, 'notification', generator.ORDER_ATOMIC);\n\n var code = 'blynk.notify(' + notification + ')\\n';\n return code;\n}\n\n// 停止 Blynk 定时器 %1\nexport const mpython_blynk_stop_timers = function (_, generator) {\n generator.definitions_['import_blynktimer'] = 'import blynktimer';\n generator.definitions_['def_blynktimer'] = 'blynk_timer = blynktimer.Timer(no_timers_err=False)';\n\n var timer_num = generator.valueToCode(this, 'timer_num', generator.ORDER_ATOMIC);\n var code = `blynk_timer.stop('${timer_num}_blynk_timer${timer_num}')` + '\\n';\n\n return code;\n}\n\n// 可用的 Blynk 定时器\nexport const mpython_blynk_get_timers = function (_, generator) {\n generator.definitions_['import_blynktimer'] = 'import blynktimer';\n generator.definitions_['def_blynktimer'] = 'blynk_timer = blynktimer.Timer(no_timers_err=False)';\n\n var code = `blynk_timer.get_timers()`;\n return [code, generator.ORDER_ATOMIC];\n}\n\n//blynk定时器\nexport const mpython_blynktimer = function (_, generator) {\n generator.definitions_['import_blynktimer'] = 'import blynktimer';\n\n var Num = generator.valueToCode(this, 'Num', generator.ORDER_ATOMIC);\n var period = generator.valueToCode(this, 'period', generator.ORDER_ATOMIC);\n var Timer_mode = this.getFieldValue('Timer_mode');\n\n var branch = generator.statementToCode(this, 'DO');\n branch = generator.addLoopTrap(branch, this.id) || generator.PASS;\n\n generator.definitions_['def_blynktimer'] = 'blynk_timer = blynktimer.Timer(no_timers_err=False)';\n\n generator.definitions_['blynktimer_event' + Num] =\n `\n@blynk_timer.register(interval=${period}, run_once=${Timer_mode})\ndef blynk_timer${Num}():\n`\n + branch;\n\n return '';\n}\n\n// 发送数据 %1 到 Bylnk APP 的虚拟管脚 %2\nexport const mpython_blynk_sensor_data_to_app = function (_, generator) {\n // generator.definitions_['import_BlynkLib'] = 'import blynklib';\n var sensor_data = generator.valueToCode(this, 'sensor_data', generator.ORDER_ATOMIC);\n var virtual_pin = generator.valueToCode(this, 'virtual_pin', generator.ORDER_ATOMIC);\n var code = 'blynk.virtual_write(' + virtual_pin + ', ' + sensor_data + ')\\n';\n return code;\n}\n\n// 从 Bylnk APP 获取虚拟管脚 %1 的值\nexport const mpython_blynk_app_data = function (_, generator) {\n\n // generator.definitions_['import_BlynkLib'] = 'import blynklib';\n var virtual_pin = generator.valueToCode(this, 'virtual_pin', generator.ORDER_ATOMIC);\n\n var branch = generator.statementToCode(this, 'DO');\n branch = generator.addLoopTrap(branch, this.id) || generator.PASS;\n\n generator.definitions_['blynk_VIRTUAL_WRITE_' + virtual_pin] =\n \"@blynk.handle_event('write V\" + virtual_pin + \"')\\n\" +\n 'def write_virtual_pin_handler(pin, _value):\\n' +\n ' for i in range(0, len(_value)):\\n' +\n ' try: _value[i] = eval(_value[i])\\n' +\n ' except: pass\\n' +\n ' if len(_value) == 1: _value = _value[0]\\n' + branch;\n //' print('+'\"v' + virtual_pin + '_value: {}\".format(_value))\\n'\n // var code = 'blynk.run()\\n';\n return '';\n}\n\n// 向 %1 发邮件 主题 %2 正文 %3\nexport const mpython_blynk_email = function (_, generator) {\n var body = generator.valueToCode(this, 'body', generator.ORDER_ATOMIC);\n var subject = generator.valueToCode(this, 'subject', generator.ORDER_ATOMIC);\n var TargetEmail = generator.valueToCode(this, 'TargetEmail', generator.ORDER_ATOMIC);\n\n var code = `blynk.email(${TargetEmail}, ${subject}, ${body})` + '\\n';\n return code;\n}\n\n// 给虚拟管脚添加 属性 %1 值 %2\nexport const mpython_blynk_set_property = function (_, generator) {\n var attribute_value = generator.valueToCode(this, 'attribute_value', generator.ORDER_ATOMIC);\n var attribute_name = generator.valueToCode(this, 'attribute_name', generator.ORDER_ATOMIC);\n\n var code = `blynk.set_property(pin, ${attribute_name}, ${attribute_value})` + '\\n';\n\n return code;\n}\n\n// Bylnk设置\nexport const mpython_blynk_setup = function (_, generator) {\n generator.definitions_['import_BlynkLib'] = 'import blynklib';\n var server = generator.valueToCode(this, 'server', generator.ORDER_ATOMIC);\n var auth = generator.valueToCode(this, 'auth', generator.ORDER_ATOMIC);\n var port = generator.valueToCode(this, 'port', generator.ORDER_ATOMIC);\n\n generator.definitions_['mpython_blynk_setup'] =\n \"blynk = blynklib.Blynk(\" + auth + \", server=\" + server + \", port=\" + port + \")\";\n\n generator.definitions_['blynk_on_connected'] =\n `\n@blynk.handle_event(\"connect\")\ndef connect_handler():\n print('Blynk connected')\n`\n\n generator.definitions_['blynk_on_disconnected'] =\n `\n@blynk.handle_event(\"disconnect\")\ndef connect_handler():\n print('Blynk disconnected')\n`\n\n return '';\n}","export const cc_g1_read_bat = function (_, generator) {\n generator.definitions_['import_cc_g1'] = 'from cc_g1 import handle';\n var code = 'handle.read_bat()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const cc_g1_read_joystick = function (_, generator) {\n var v = this.getFieldValue('VAR');\n generator.definitions_['import_cc_g1'] = 'from cc_g1 import handle';\n var code = 'handle.read_joystick()' + v + '';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const cc_g1_read_key = function (_, generator) {\n var v = this.getFieldValue('VAR');\n generator.definitions_['import_cc_g1'] = 'from cc_g1 import handle';\n var code = 'handle.read_key(' + v + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const cc_g1_turnoff = function (_, generator) {\n generator.definitions_['import_cc_g1'] = 'from cc_g1 import handle';\n var code = 'handle.shutdown()';\n return code;\n}","import * as Mixly from 'mixly';\n\nexport const ce_go_light_number = function (_, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n } else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_car'] = 'from ce_go import car';\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_car'] = 'from mini_go import car';\n }\n var code = 'car.' + this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ce_go_led_bright = function (_, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_car'] = 'from mini_go import car';\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_car'] = 'from ce_go import car';\n }\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var code = \"car.setonoff(\" + op + \",\" + bright + \")\\n\";\n return code;\n}\n\nexport const ce_go_get_led_bright = function (_, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_car'] = 'from ce_go import car';\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_car'] = 'from mini_go import car';\n }\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n var code = \"car.getrightness(\" + op + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ce_go_get_led_state = function (_, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_car'] = 'from ce_go import car';\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_car'] = 'from mini_go import car';\n }\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n var code = \"car.getonoff(\" + op + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ce_go_led_brightness = function (_, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_car'] = 'from ce_go import car';\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_car'] = 'from mini_go import car';\n }\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var code = \"car.setbrightness(\" + op + \",\" + flag + \")\\n\";\n return code;\n}\n\nexport const ce_go_stepper_keep = function (_, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_car'] = 'from ce_go import car';\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_car'] = 'from mini_go import car';\n }\n var v = this.getFieldValue('VAR');\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);\n var code = 'car.move(\"' + v + '\",' + speed + \")\\n\";\n return code;\n}\n\nexport const ce_go_stepper_stop = function (_, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_car'] = 'from ce_go import car';\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_car'] = 'from mini_go import car';\n }\n var v = this.getFieldValue('VAR');\n var code = 'car.move(\"' + v + '\")\\n';\n return code;\n}\n\nexport const ce_go_dc_motor = function (_, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_car'] = 'from ce_go import car';\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_car'] = 'from mini_go import car';\n }\n var wheel = this.getFieldValue('wheel');\n var v = this.getFieldValue('direction');\n if (wheel == 0) {\n if (v == 'CW') { v = 'CCW' }\n else if (v == 'CCW') { v = 'CW' }\n }\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n var code = \"car.motor(car.MOTO[\" + wheel + '],\"' + v + '\",' + speed + \")\\n\";\n return code;\n}\n\nexport const ce_go_hall_attachInterrupt = function (_, generator) {\n var dropdown_mode = this.getFieldValue('mode');\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_hall_' + dropdown_mode] = 'from ce_go import hall_' + dropdown_mode;\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_hall' + dropdown_mode] = 'from mini_go import hall_'+ dropdown_mode;\n }\n var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);\n var code = 'hall_' + dropdown_mode + '.irq_cb(' + atta + ')\\n'\n return code;\n}\n\nexport const ce_go_hall_initialize = function (_, generator) {\n var dropdown_mode = this.getFieldValue('mode');\n var args = this.getFieldValue('args');\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_hall_' + dropdown_mode] = 'from ce_go import hall_' + dropdown_mode;\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_hall' + dropdown_mode] = 'from mini_go import hall_'+ dropdown_mode;\n }\n var num = generator.valueToCode(this, 'num', generator.ORDER_ATOMIC);\n if (args == 'all') {\n var code = 'hall_' + dropdown_mode + '.initial(' + 'turns' + '=' + num + ',distance=' + num + ')\\n'\n return code;\n }\n var code = 'hall_' + dropdown_mode + '.initial(' + args + '=' + num + ')\\n'\n return code;\n}\n\nexport const ce_go_hall_data = function (_, generator) {\n var dropdown_mode = this.getFieldValue('mode');\n var args = this.getFieldValue('args');\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_hall_' + dropdown_mode] = 'from ce_go import hall_' + dropdown_mode;\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_hall' + dropdown_mode] = 'from mini_go import hall_'+ dropdown_mode;\n }\n var code = 'hall_' + dropdown_mode + '.' + args + '';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ce_go_pin_near_line = function (_, generator) {\n var key = this.getFieldValue('key');\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_hall'] = 'from me_go import car';\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_hall'] = 'from ce_go import car';\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_hall'] = 'from mini_go import car';\n }\n var code = 'car.patrol()' + key + '';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ce_go_pin_near = function (_, generator) {\n var key = this.getFieldValue('key');\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_hall'] = 'from me_go import car';\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_hall'] = 'from ce_go import car';\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_hall'] = 'from mini_go import car';\n }\n var code = 'car.obstacle()' + key + '';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ce_go_pin_near_state_change = function (_, generator) {\n var key = this.getFieldValue('key');\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_hall'] = 'from me_go import car';\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_hall'] = 'from ce_go import car';\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_hall'] = 'from mini_go import car';\n }\n var code = 'car.ir_mode(car.' + key + ')\\n';\n return code;\n}\n\nexport const sensor_mixgome_eulerangles = function (_, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_mixgo_me_onboard_mxc6655xa'] = \"from mixgo_me import onboard_mxc6655xa\";\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_mixgo_ce_onboard_mxc6655xa'] = \"from mixgo_ce import onboard_mxc6655xa\";\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_onboard_mxc6655xa'] = 'from mini_go import onboard_mxc6655xa';\n }\n var angle = this.getFieldValue('angle');\n var code = 'onboard_mxc6655xa.eulerangles(upright=True)' + angle;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ce_go_pin_light = function (_, generator) {\n var key = this.getFieldValue('key');\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\" || version == \"mixgo_cc\") {\n generator.definitions_['import_me_go_hall'] = 'from me_go import car';\n }\n else if (version == \"mixgo_ce\") {\n generator.definitions_['import_ce_go_hall'] = 'from ce_go import car';\n }else if (version == \"mixgo_mini\"){\n generator.definitions_['import_mini_go_hall'] = 'from mini_go import car';\n }\n var code = 'car.light()' + key + '';\n return [code, generator.ORDER_ATOMIC];\n}\n\n//educore car\n\nexport const educore_car = function (_, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_'+version+'_car'] = 'from '+version+' import car';\n var code = 'car()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_car_stepper_keep = function (_, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_'+version+'_car'] = 'from '+version+' import car';\n var car = generator.valueToCode(this, 'car', generator.ORDER_ASSIGNMENT);\n var v = this.getFieldValue('VAR');\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);\n var code = car+'.'+ v +'('+speed+\")\\n\";\n return code;\n}\n\nexport const educore_car_stepper_stop = function (_, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_'+version+'_car'] = 'from '+version+' import car';\n var car = generator.valueToCode(this, 'car', generator.ORDER_ASSIGNMENT);\n var v = this.getFieldValue('VAR');\n var code = car+'.'+ v +\"()\\n\";\n return code;\n}\n\nexport const educore_car_pin_near_line = function (_, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_'+version+'_car'] = 'from '+version+' import car';\n var car = generator.valueToCode(this, 'car', generator.ORDER_ASSIGNMENT);\n var key = this.getFieldValue('key');\n var code = car+'.get_itr_dnum(' + key + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_car_pin_near = function (_, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_'+version+'_car'] = 'from '+version+' import car';\n var car = generator.valueToCode(this, 'car', generator.ORDER_ASSIGNMENT);\n var code = car+'.get_distance()';\n return [code, generator.ORDER_ATOMIC];\n}","import * as Blockly from 'blockly/core';\nimport * as Mixly from 'mixly';\n\nexport const communicate_i2c_onboard = function (block, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_i2c'] = 'from ' + version + ' import onboard_i2c';\n var code = 'onboard_i2c';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const communicate_spi_onboard = function (block, generator) {\n var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_i2c'] = 'from ' + version + ' import onboard_spi';\n var code = 'onboard_spi';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const communicate_i2c_init = function (block, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin1 = generator.valueToCode(this, 'RX', generator.ORDER_ATOMIC);\n var dropdown_pin2 = generator.valueToCode(this, 'TX', generator.ORDER_ATOMIC);\n var freq = generator.valueToCode(this, 'freq', generator.ORDER_ATOMIC);\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n return \"\" + sub + \" = machine.SoftI2C(scl = machine.Pin(\" + dropdown_pin2 + \"), sda = machine.Pin(\" + dropdown_pin1 + \"), freq = \" + freq + \")\\n\";\n}\n\nexport const communicate_i2c_read = function (block, generator) {\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n return [\"\" + name + \".readfrom(\" + address + \", \" + data + \")\", generator.ORDER_ATOMIC];\n}\n\nexport const communicate_i2c_write = function (block, generator) {\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n return \"\" + name + \".writeto(\" + address + \", \" + data + \")\\n\";\n}\n\nexport const communicate_i2c_scan = function (block, generator) {\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n return [\"\" + name + \".scan()\", generator.ORDER_ATOMIC];\n}\n\nexport const communicate_i2c_master_read = function (block, generator) {\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = \"\" + name + \".read()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const communicate_i2c_available = function (block, generator) {\n\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = \"\" + name + \".available()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const i2c_slave_onreceive = function (block, generator) {\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n generator.setups_['setup_i2c_' + pin] = 'Wire.begin(' + pin + ');';\n generator.setups_['setup_i2c_onReceive_' + pin] = 'Wire.onReceive(i2cReceiveEvent_' + pin + ');';\n var funcName = 'i2cReceiveEvent_' + pin;\n var branch = generator.statementToCode(this, 'DO');\n var code2 = 'void' + ' ' + funcName + '(int howMany) {\\n' + branch + '}\\n';\n generator.definitions_[funcName] = code2;\n return '';\n}\n\nexport const communicate_spi_init = function (block, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var freq = generator.valueToCode(this, 'freq', generator.ORDER_ATOMIC);\n var mosi = generator.valueToCode(this, 'mosi', generator.ORDER_ATOMIC);\n var miso = generator.valueToCode(this, 'miso', generator.ORDER_ATOMIC);\n var sck = generator.valueToCode(this, 'sck', generator.ORDER_ATOMIC);\n return \"\" + name + \" = machine.SoftSPI(baudrate=\" + freq + \", sck=machine.Pin(\" + sck + \"), mosi=machine.Pin(\" + mosi + \"), miso=machine.Pin(\" + miso + \"))\\n\";\n}\n\nexport const communicate_spi_set = function (block, generator) {\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n return \"spi.init(baudrate=\" + data + \")\\n\";\n}\n\nexport const communicate_spi_buffer = function (block, generator) {\n var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n return \"\" + varname + \"=bytearray(\" + data + \")\\n\";\n}\n\nexport const communicate_spi_read = function (block, generator) {\n var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n return [\"\" + varname + \".read(\" + data + \")\", generator.ORDER_ATOMIC];\n}\n\nexport const communicate_spi_read_output = function (block, generator) {\n var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n var val = generator.valueToCode(this, 'val', generator.ORDER_ATOMIC);\n return [\"\" + varname + \".read(\" + data + \",\" + val + \")\", generator.ORDER_ATOMIC];\n}\n\nexport const communicate_spi_readinto = function (block, generator) {\n var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n return [\"\" + varname + \".readinto(\" + data + \")\", generator.ORDER_ATOMIC];\n}\n\nexport const communicate_spi_readinto_output = function (block, generator) {\n var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n var val = generator.valueToCode(this, 'val', generator.ORDER_ATOMIC);\n return [\"\" + varname + \".readinto(\" + data + \",\" + val + \")\", generator.ORDER_ATOMIC];\n}\n\nexport const communicate_spi_write = function (block, generator) {\n var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n return [\"\" + varname + \".write(\" + data + \".encode('utf-8'))\", generator.ORDER_ATOMIC];\n}\n\nexport const communicate_spi_write_readinto = function (block, generator) {\n var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n var val = generator.valueToCode(this, 'val', generator.ORDER_ATOMIC);\n // var op=this.getFieldValue('op');\n // if(op==\"byte\"){\n return [\"\" + varname + \".write_readinto(\" + data + \".encode('utf-8'),\" + val + \")\", generator.ORDER_ATOMIC];\n // }else{\n // return [\"\"+varname+\".write_readinto(\" + data + \",\"+val+\")\", generator.ORDER_ATOMIC];\n // }\n}\n\nexport const communicate_ow_init = function (block, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_onewire'] = \"import onewire\";\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var varName = generator.valueToCode(this, 'BUS', generator.ORDER_ATOMIC);\n var code = \"\" + name + \"=onewire.OneWire(machine.Pin(\" + varName + \"))\\n\";\n return code;\n}\n\nexport const communicate_ow_scan = function (block, generator) {\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = \"\" + name + \".scan()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const communicate_ow_reset = function (block, generator) {\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = \"\" + name + \".reset()\\n\";\n return code;\n}\n\nexport const communicate_ow_read = function (block, generator) {\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = \"\" + name + \".readbyte()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const communicate_ow_write = function (block, generator) {\n var varName = generator.valueToCode(this, 'byte', generator.ORDER_ATOMIC);\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var op = this.getFieldValue('op');\n var code = \"\" + name + \".\" + op + \"(\" + varName + \")\\n\";\n return code;\n}\n\nexport const communicate_ow_select = function (block, generator) {\n var varName = generator.valueToCode(this, 'byte', generator.ORDER_ATOMIC);\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = \"\" + name + \".select_rom(\" + varName + \".encode('utf-8'))\\n\";\n return code;\n}\n\nexport const communicate_ir_recv_init = function (block, generator) {\n generator.definitions_['import_irremote'] = 'import irremote';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var bit = this.getFieldValue('type');\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (sub == \"\" && bit == \"RC5\") {\n var code = \"ir_rx = irremote.RC5_RX(\" + pin + \")\\n\";\n }\n else if (sub == \"\") {\n var code = \"ir_rx = irremote.NEC_RX(\" + pin + \",\" + bit + \")\\n\";\n }\n else {\n var code = \"ir_rx = irremote.NEC_RX(\" + pin + \",\" + bit + \",\" + sub + \")\\n\";\n }\n return code;\n}\n\nexport const internal_variable = function (block, generator) {\n generator.definitions_['import_irremote'] = 'import irremote';\n var index = this.getFieldValue('index');\n var code = \"ir_rx.code[\" + index + \"]\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const recv_fun = function (block, generator) {\n generator.definitions_['import_irremote'] = 'import irremote';\n var en = this.getFieldValue('en');\n var code = \"ir_rx.enable(\" + en + \")\\n\";\n return code;\n}\n\nexport const ir_whether_recv = function (block, generator) {\n generator.definitions_['import_irremote'] = 'import irremote';\n var code = \"ir_rx.any()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ir_recv_timeout = function (block, generator) {\n generator.definitions_['import_irremote'] = 'import irremote';\n var time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);\n var code = \"ir_rx.timeout(\" + time + \")\\n\";\n return code;\n}\n\nexport const communicate_ir_send_init = function (block, generator) {\n generator.definitions_['import_irremote'] = 'import irremote';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var sam = this.getFieldValue('type');\n var power = generator.valueToCode(this, 'power', generator.ORDER_ATOMIC);\n if (sam == \"RC5\") {\n var code = \"ir_tx = irremote.RC5_TX(\" + pin + \",\" + power + \")\\n\";\n }\n else {\n var code = \"ir_tx = irremote.NEC_TX(\" + pin + \",\" + sam + \",\" + power + \")\\n\";\n }\n return code;\n}\n\nexport const ir_transmit_conventional_data = function (block, generator) {\n generator.definitions_['import_irremote'] = 'import irremote';\n var cmd = generator.valueToCode(this, 'cmd', generator.ORDER_ATOMIC);\n var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);\n var toggle = generator.valueToCode(this, 'toggle', generator.ORDER_ATOMIC);\n var code = \"ir_tx.transmit(\" + cmd + \",\" + addr + \",\" + toggle + \")\\n\";\n return code;\n}\n\nexport const ir_transmit_study_code = function (block, generator) {\n generator.definitions_['import_irremote'] = 'import irremote';\n var s_code = generator.valueToCode(this, 'LIST', generator.ORDER_ATOMIC);\n var code = \"ir_tx.transmit(pulses=\" + s_code + \")\\n\";\n return code;\n}\n\nexport const ir_transmit_raw_code = function (block, generator) {\n generator.definitions_['import_irremote'] = 'import irremote';\n var raw = generator.valueToCode(this, 'raw', generator.ORDER_ATOMIC);\n var code = \"ir_tx.transmit(raw=\" + raw + \")\\n\";\n return code;\n}\n\nexport const ir_transmit_busy = function (block, generator) {\n generator.definitions_['import_irremote'] = 'import irremote';\n var code = \"ir_tx.busy()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const communicate_bluetooth_central_init = function (block, generator) {\n generator.definitions_['import_ble_central'] = 'import ble_central';\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = name + \" = ble_central.BLESimpleCentral()\\n\";\n return code;\n}\n\nexport const communicate_bluetooth_peripheral_init = function (block, generator) {\n generator.definitions_['import_ble_peripheral'] = 'import ble_peripheral';\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = name + \" = ble_peripheral.BLESimplePeripheral(\" + data + \")\\n\";\n return code;\n}\n\nexport const communicate_bluetooth_scan = function (block, generator) {\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = name + \".scan()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const communicate_bluetooth_connect = function (block, generator) {\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var mode = this.getFieldValue('mode');\n var code = name + \".connect(\" + mode + '=' + data + \")\\n\";\n return code;\n}\n\nexport const communicate_bluetooth_disconnect = function (block, generator) {\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = name + '.disconnect()\\n';\n return code;\n}\n\nexport const communicate_bluetooth_mac = function (block, generator) {\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n return [name + \".mac\", generator.ORDER_ATOMIC];\n}\n\nexport const communicate_bluetooth_is_connected = function (block, generator) {\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = name + \".is_connected()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const communicate_bluetooth_send = function (block, generator) {\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = name + \".send(\" + data + \")\\n\";\n return code;\n}\n\nexport const communicate_bluetooth_recv_only = function (block, generator) {\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = v + '.recv()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const communicate_bluetooth_recv = function (block, generator) {\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);\n var code = v + '.recv(' + method + ')\\n';\n return code;\n}\n\nexport const communicate_bluetooth_handle = function (block, generator) {\n generator.definitions_['import_ble_handle'] = 'import ble_handle';\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);\n var code = v + '=ble_handle.Handle()\\n' + v + '.recv(' + method + ')\\n';\n return code;\n}\n\n//espnow\nexport const communicate_espnow_init = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var varName = generator.valueToCode(this, 'CHNL', generator.ORDER_ATOMIC);\n var power = this.getFieldValue('op');\n var code = \"\" + name + \"=radio.ESPNow(channel=\" + varName + \",txpower=\" + power + \")\\n\";\n return code;\n}\n\nexport const communicate_espnow_init_new = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var varName = generator.valueToCode(this, 'CHNL', generator.ORDER_ATOMIC);\n var varName2 = generator.valueToCode(this, 'DB', generator.ORDER_ATOMIC);\n var code = \"\" + name + \"=radio.ESPNow(channel=\" + varName + ',txpower=' + varName2 + \")\\n\";\n return code;\n}\n\nexport const network_espnow_mac = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n return [name + \".mac\", generator.ORDER_ATOMIC];\n}\n\nexport const network_espnow_info = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n return [name + \".info()\", generator.ORDER_ATOMIC];\n}\n\nexport const network_espnow_recv = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n var mode = this.getFieldValue('mode');\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = name + \".recv()\" + mode;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const network_espnow_send = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var mac = generator.valueToCode(this, 'mac', generator.ORDER_ATOMIC);\n var content = generator.valueToCode(this, 'content', generator.ORDER_ATOMIC);\n var code = name + \".send(\" + mac + \",\" + content + \")\\n\";\n return code;\n}\n\nexport const network_espnow_recv_handle = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);\n var code = name + \".recv_cb(\" + method + \")\\n\";\n return code;\n}\n\n//radio\nexport const espnow_radio_channel = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n generator.definitions_['var_declare_ESPNow_radio'] = \"ESPNow_radio=radio.ESPNow()\";\n var varName = generator.valueToCode(this, 'CHNL', generator.ORDER_ATOMIC);\n var code = \"ESPNow_radio.set_channel(channel=\" + varName + \")\\n\";\n return code;\n}\n\nexport const espnow_radio_txpower = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n generator.definitions_['var_declare_ESPNow_radio'] = \"ESPNow_radio=radio.ESPNow()\";\n var power = this.getFieldValue('op');\n var code = \"ESPNow_radio.set_channel(txpower=\" + power + \")\\n\";\n return code;\n}\n\nexport const espnow_radio_channel_new = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n var varName2 = generator.valueToCode(this, 'DB', generator.ORDER_ATOMIC);\n generator.definitions_['var_declare_ESPNow_radio'] = \"ESPNow_radio=radio.ESPNow(channel=1,txpower=\" + varName2 + \")\";\n var varName = generator.valueToCode(this, 'CHNL', generator.ORDER_ATOMIC);\n var code = \"ESPNow_radio.set_channel(\" + varName + \")\\n\";\n return code;\n}\n\nexport const espnow_radio_on_off = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';\n var op = this.getFieldValue('on_off');\n var code = \"ESPNow_radio.active(\" + op + \")\\n\";\n return code;\n}\n\nexport const espnow_radio_send = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';\n var varName = generator.valueToCode(this, 'send', generator.ORDER_ATOMIC);\n var code = 'ESPNow_radio.send(\"ffffffffffff\",' + varName + \")\\n\";\n return code;\n}\n\nexport const espnow_radio_rec = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';\n var code = \"ESPNow_radio.recv()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const espnow_radio_recv_msg = function (block, generator) {\n var code = \"ESPNow_radio_msg\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const espnow_radio_recv = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n generator.definitions_['import_ubinascii'] = 'import ubinascii';\n generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';\n var doCode = generator.statementToCode(block, 'DO') || generator.PASS;\n generator.definitions_['def_ESPNow_radio_recv'] = 'def ESPNow_radio_recv(mac,ESPNow_radio_msg):\\n' + doCode;\n generator.definitions_['def_ESPNow_radio_recv_all'] = '_radio_msg_list = []\\n' + 'def ESPNow_radio_recv_callback(mac,ESPNow_radio_msg):\\n' + ' global _radio_msg_list\\n' + ' try: ESPNow_radio_recv(mac,ESPNow_radio_msg)\\n' + ' except: pass\\n' + ' if str(ESPNow_radio_msg) in _radio_msg_list:\\n' + \" eval('radio_recv_' + bytes.decode(ubinascii.hexlify(ESPNow_radio_msg)) + '()')\\n\";\n generator.definitions_['ESPNow_radio_recv_callback'] = \"ESPNow_radio.recv_cb(ESPNow_radio_recv_callback)\\n\";\n\n return '';\n}\n\nvar writeUTF = function (str, isGetBytes) {\n var back = [];\n var byteSize = 0;\n for (var i = 0; i < str.length; i++) {\n var code = str.charCodeAt(i);\n if (0x00 <= code && code <= 0x7f) {\n byteSize += 1;\n back.push(code);\n } else if (0x80 <= code && code <= 0x7ff) {\n byteSize += 2;\n back.push((192 | (31 & (code >> 6))));\n back.push((128 | (63 & code)))\n } else if ((0x800 <= code && code <= 0xd7ff) || (0xe000 <= code && code <= 0xffff)) {\n byteSize += 3;\n back.push((224 | (15 & (code >> 12))));\n back.push((128 | (63 & (code >> 6))));\n back.push((128 | (63 & code)))\n }\n }\n for (i = 0; i < back.length; i++) {\n back[i] &= 0xff;\n }\n if (isGetBytes) {\n return back;\n }\n if (byteSize <= 0xff) {\n return [0, byteSize].concat(back);\n }\n return [byteSize >> 8, byteSize & 0xff].concat(back);\n}\n\nvar toUTF8Hex = function (str) {\n var charBuf = writeUTF(str, true);\n var re = '';\n for (var i = 0; i < charBuf.length; i++) {\n var x = (charBuf[i] & 0xFF).toString(16);\n if (x.length === 1) {\n x = '0' + x;\n }\n re += x;\n }\n return re;\n}\n\nexport const espnow_radio_recv_certain_msg = function (block, generator) {\n generator.definitions_['import_radio'] = \"import radio\";\n generator.definitions_['import_ubinascii'] = 'import ubinascii';\n generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';\n var doCode = generator.statementToCode(block, 'DO') || generator.PASS;\n generator.definitions_['def_ESPNow_radio_recv_all'] = '_radio_msg_list = []\\n' + 'def ESPNow_radio_recv_callback(mac,ESPNow_radio_msg):\\n' + ' global _radio_msg_list\\n' + ' try: ESPNow_radio_recv(mac,ESPNow_radio_msg)\\n' + ' except: pass\\n' + ' if str(ESPNow_radio_msg) in _radio_msg_list:\\n' + \" eval('radio_recv_' + bytes.decode(ubinascii.hexlify(ESPNow_radio_msg)) + '()')\\n\";\n generator.definitions_['ESPNow_radio_recv_callback'] = \"ESPNow_radio.recv_cb(ESPNow_radio_recv_callback)\\n\";\n var message = block.getFieldValue('msg');\n var message_utf8 = toUTF8Hex(message);\n generator.definitions_['def_radio_recv_' + message_utf8] =\n '_radio_msg_list.append(\\'' + message + '\\')\\n' +\n 'def radio_recv_' + message_utf8 + '():\\n' + doCode;\n return '';\n}\n\nexport const espnow_radio_recv_new = function (block, generator) {\n generator.definitions_['import_radio'] = 'import radio';\n generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';\n var doCode = generator.statementToCode(block, 'DO') || generator.PASS;\n generator.definitions_['def_ESPNow_radio_recv'] = 'def ESPNow_radio_recv(mac, ESPNow_radio_msg):\\n'\n + `${doCode}\\nESPNow_radio.recv_cb(\"__all__\", ESPNow_radio_recv)\\n`;\n return '';\n}\n\nexport const espnow_radio_recv_certain_msg_new = function (block, generator) {\n generator.definitions_['import_radio'] = 'import radio';\n generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';\n var doCode = generator.statementToCode(block, 'DO') || generator.PASS;\n var message = block.getFieldValue('msg');\n generator.definitions_['def_ESPNow_radio_recv_' + message] = 'def ESPNow_radio_recv(mac, ESPNow_radio_msg):\\n'\n + `${doCode}\\nESPNow_radio.recv_cb(\"${message}\", ESPNow_radio_recv)\\n`;\n return '';\n}\n\nexport const lora_init = function (block, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var sv = generator.valueToCode(this, 'SPISUB', generator.ORDER_ATOMIC);\n var pv = generator.valueToCode(this, 'PINSUB', generator.ORDER_ATOMIC);\n var fr = generator.valueToCode(this, 'frequency', generator.ORDER_ATOMIC);\n var r = generator.valueToCode(this, 'rate', generator.ORDER_ATOMIC);\n var f = generator.valueToCode(this, 'factor', generator.ORDER_ATOMIC);\n var p = generator.valueToCode(this, 'power', generator.ORDER_ATOMIC);\n var bandwidth = this.getFieldValue('bandwidth');\n var code;\n generator.definitions_['import_rfm98'] = 'import rfm98';\n var code = v + ' = rfm98.RFM98(' + sv + ',cs_pin=' + pv + ',frequency_mhz=' + fr + ',signal_bandwidth=' + bandwidth + ',coding_rate=' + r + ',spreading_factor=' + f + ',tx_power=' + p + ')\\n';\n return code;\n}\n\nexport const lora_packet = function (block, generator) {\n generator.definitions_['import_rfm98'] = 'import rfm98';\n var key = this.getFieldValue('key');\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n return [name + \".\" + key + '()', generator.ORDER_ATOMIC];\n}\n\nexport const lora_send = function (block, generator) {\n generator.definitions_['import_rfm98'] = 'import rfm98';\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = name + \".send(\" + data + \")\\n\";\n return code;\n}\n\nexport const lora_recv = function (block, generator) {\n generator.definitions_['import_rfm98'] = 'import rfm98';\n var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n return [name + '.recv()', generator.ORDER_ATOMIC];\n}\n\nexport const urequests_get = function (block, generator) {\n generator.definitions_.import_requests = \"import urequests\";\n var varName = generator.variableDB_.getName(this.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);\n var str = generator.valueToCode(this, 'DOMAIN', generator.ORDER_ATOMIC);\n var code = varName + '= ' + 'urequests.get(' + str + ')\\n';\n return code;\n}\n\nexport const urequests_attribute = function (block, generator) {\n generator.definitions_.import_requests = \"import urequests\";\n var varName = generator.valueToCode(this, 'VAL', generator.ORDER_ASSIGNMENT) || '0';\n var attr = this.getFieldValue('ATTR');\n var code = varName + \".\" + attr;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const urequests_method = function (block, generator) {\n generator.definitions_.import_requests = \"import urequests\";\n var method = this.getFieldValue('DIR');\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = \"urequests.\" + method + \"(\" + str + ')';\n return [code, generator.ORDER_ATOMIC];\n}","import * as Blockly from 'blockly/core';\nimport { controls_repeat_ext } from '@mixly/python/generators/control';\n\nexport const base_setup = function (_, generator) {\n var branch = generator.statementToCode(this, 'DO');\n branch = branch.replace(/(^\\s*)|(\\s*$)/g, \"\").replace(/\\n {4}/g, '\\n');//去除两端空格\n if (branch) {\n if (branch.endsWith('\\n')) {\n generator.setups_['setup_setup'] = branch;\n } else {\n generator.setups_['setup_setup'] = branch + '\\n';\n }\n }\n return '';\n}\n\n// ok\nexport const controls_if = function (a, generator) {\n var b = 0,\n c = \"\",\n d,\n e;\n do\n e = generator.valueToCode(a, \"IF\" + b, generator.ORDER_NONE) || \"False\", d = generator.statementToCode(a, \"DO\" + b) || generator.PASS, c += (0 == b ? \"if \" : \"elif \") + e + \":\\n\" + d, ++b;\n while (a.getInput(\"IF\" + b));\n a.getInput(\"ELSE\") && (d = generator.statementToCode(a, \"ELSE\") || generator.PASS, c += \"else:\\n\" + d);\n return c\n}\n\n// ok\nexport const controls_for = function (a, generator) {\n var b = generator.variableDB_.getName(a.getFieldValue(\"VAR\"), Blockly.Variables.NAME_TYPE),\n //var b = generator.valueToCode(a, \"VAR\", generator.ORDER_MEMBER) || \"''\",\n c = generator.valueToCode(a, \"FROM\", generator.ORDER_NONE) || \"0\",\n d = generator.valueToCode(a, \"TO\", generator.ORDER_NONE) || \"0\",\n e = generator.valueToCode(a, \"STEP\", generator.ORDER_NONE) || \"1\",\n f = generator.addLoopTrap(generator.statementToCode(a, \"DO\"), a.id) || generator.PASS,\n g = \"\",\n h = function (_, generator) {\n return generator.provideFunction_(\"upRange\",\n [\"def \" + generator.FUNCTION_NAME_PLACEHOLDER_ + \"(start, stop, step):\", \" while start <= stop:\", \" yield start\", \" start += abs(step)\"])\n },\n k = function (_, generator) {\n return generator.provideFunction_(\"downRange\", [\"def \" + generator.FUNCTION_NAME_PLACEHOLDER_ + \"(start, stop, step):\", \" while start >= stop:\", \" yield start\", \" start -= abs(step)\"])\n }\n a = function (a, b, c) {\n return \"(\" + a + \" <= \" + b + \") and \" + h() + \"(\" + a + \", \" + b + \", \" + c + \") or \" + k() + \"(\" + a + \", \" + b + \", \" + c + \")\"\n }\n if (Blockly.isNumber(c) && Blockly.isNumber(d) &&\n Blockly.isNumber(e))\n c = parseFloat(c), d = parseFloat(d), e = Math.abs(parseFloat(e)), 0 === c % 1 && 0 === d % 1 && 0 === e % 1 ? (c <= d ? (d++, a = 0 == c && 1 == e ? d : c + \", \" + d, 1 != e && (a += \", \" + e)) : (d--, a = c + \", \" + d + \", -\" + e), a = \"range(\" + a + \")\") : (a = c < d ? h() : k(), a += \"(\" + c + \", \" + d + \", \" + e + \")\");\n else {\n var l = function (a, c) {\n if (Blockly.isNumber(a))\n a = parseFloat(a);\n else {\n var d = generator.variableDB_.getDistinctName(b + c, Blockly.Variables.NAME_TYPE);\n g += d + \" = \" + a + \"\\n\";\n a = d\n }\n return a\n }\n c = l(c, \"_start\");\n d = l(d, \"_end\");\n l(e, \"_inc\");\n a = \"number\" == typeof c && \"number\" == typeof d ? c < d ? h(c, d, e) : k(c, d, e) : a(c, d, e)\n }\n return g += \"for \" + b + \" in \" + a + \":\\n\" + f\n}\n\n// ok\nexport const controls_repeat = controls_repeat_ext;\n\nexport const controls_whileUntil = function (a, generator) {\n var b = \"UNTIL\" == a.getFieldValue(\"MODE\"),\n c = generator.valueToCode(a, \"BOOL\", b ? generator.ORDER_LOGICAL_NOT : generator.ORDER_NONE) || \"False\",\n d = generator.addLoopTrap(generator.statementToCode(a, \"DO\"), a.id) || generator.PASS;\n b && (c = \"not \" + c);\n return \"while \" + c + \":\\n\" + d\n}\n\n// ok\nexport const controls_flow_statements = function (a) {\n switch (a.getFieldValue(\"FLOW\")) {\n case \"BREAK\":\n return \"break\\n\";\n case \"CONTINUE\":\n return \"continue\\n\"\n }\n throw \"Unknown flow statement.\";\n}\n\n//ok\nexport const controls_forEach = function (block, generator) {\n // For each loop.\n var variable0 = generator.variableDB_.getName(\n block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);\n var argument0 = generator.valueToCode(block, 'LIST',\n generator.ORDER_RELATIONAL) || '[]';\n var branch = generator.statementToCode(block, 'DO');\n branch = generator.addLoopTrap(branch, block.id) ||\n generator.PASS;\n var code = 'for ' + variable0 + ' in ' + argument0 + ':\\n' + branch;\n return code;\n}\n\n// ok\nexport const controls_type = function (_, generator) {\n var data = generator.valueToCode(this, 'DATA', generator.ORDER_ATOMIC) || '1000'\n var code = 'type(' + data + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const controls_typeLists = function (_, generator) {\n generator.definitions_['import_microbit_*'] = 'from microbit import *';\n var type = this.getFieldValue('type');\n // generator.definitions_['func_type' + type] = code;\n return [type, generator.ORDER_ATOMIC];\n}\n","export const display_show_image_or_string = function (_, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = \"matrix.show(\" + data + \")\\n\";\n return code;\n}\n\nexport const display_scroll_string = function (_, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = \"matrix.scroll(\" + data + \")\\n\";\n return code;\n}\n\nexport const display_show_static = function (_, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = \"matrix.showstatic(\" + data + \")\\n\";\n return code;\n}\n\nexport const display_show_image_or_string_delay = function (_, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n var code = \"matrix.show(\" + data + ',' + time + \")\\n\";\n return code;\n}\n\nexport const display_scroll_string_delay = function (_, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n var code = \"matrix.scroll(\" + data + ',' + time + \")\\n\";\n return code;\n}\n\nexport const display_image_create = function (block, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var colours = {\n \"#000000\": \"0\",\n //\"#440000\": \"1\",\n //\"#660000\": \"2\",\n //\"#880000\": \"3\",\n //\"#aa0000\": \"4\",\n //\"#bb0000\": \"5\",\n //\"#cc0000\": \"6\",\n //\"#dd0000\": \"7\",\n //\"#ee0000\": \"8\",\n \"#ff0000\": \"1\"\n }\n var colour_00 = colours[block.getFieldValue(\"00\")];\n var colour_01 = colours[block.getFieldValue(\"01\")];\n var colour_02 = colours[block.getFieldValue(\"02\")];\n var colour_03 = colours[block.getFieldValue(\"03\")];\n var colour_04 = colours[block.getFieldValue(\"04\")];\n var colour_05 = colours[block.getFieldValue(\"05\")];\n var colour_06 = colours[block.getFieldValue(\"06\")];\n var colour_07 = colours[block.getFieldValue(\"07\")];\n var colour_08 = colours[block.getFieldValue(\"08\")];\n var colour_09 = colours[block.getFieldValue(\"09\")];\n var colour_0a = colours[block.getFieldValue(\"0a\")];\n var colour_0b = colours[block.getFieldValue(\"0b\")];\n var colour_0c = colours[block.getFieldValue(\"0c\")];\n var colour_0d = colours[block.getFieldValue(\"0d\")];\n var colour_0e = colours[block.getFieldValue(\"0e\")];\n var colour_0f = colours[block.getFieldValue(\"0f\")];\n var colour_10 = colours[block.getFieldValue(\"10\")];\n var colour_11 = colours[block.getFieldValue(\"11\")];\n var colour_12 = colours[block.getFieldValue(\"12\")];\n var colour_13 = colours[block.getFieldValue(\"13\")];\n var colour_14 = colours[block.getFieldValue(\"14\")];\n var colour_15 = colours[block.getFieldValue(\"15\")];\n var colour_16 = colours[block.getFieldValue(\"16\")];\n var colour_17 = colours[block.getFieldValue(\"17\")];\n var colour_18 = colours[block.getFieldValue(\"18\")];\n var colour_19 = colours[block.getFieldValue(\"19\")];\n var colour_1a = colours[block.getFieldValue(\"1a\")];\n var colour_1b = colours[block.getFieldValue(\"1b\")];\n var colour_1c = colours[block.getFieldValue(\"1c\")];\n var colour_1d = colours[block.getFieldValue(\"1d\")];\n var colour_1e = colours[block.getFieldValue(\"1e\")];\n var colour_1f = colours[block.getFieldValue(\"1f\")];\n var colour_20 = colours[block.getFieldValue(\"20\")];\n var colour_21 = colours[block.getFieldValue(\"21\")];\n var colour_22 = colours[block.getFieldValue(\"22\")];\n var colour_23 = colours[block.getFieldValue(\"23\")];\n var colour_24 = colours[block.getFieldValue(\"24\")];\n var colour_25 = colours[block.getFieldValue(\"25\")];\n var colour_26 = colours[block.getFieldValue(\"26\")];\n var colour_27 = colours[block.getFieldValue(\"27\")];\n var colour_28 = colours[block.getFieldValue(\"28\")];\n var colour_29 = colours[block.getFieldValue(\"29\")];\n var colour_2a = colours[block.getFieldValue(\"2a\")];\n var colour_2b = colours[block.getFieldValue(\"2b\")];\n var colour_2c = colours[block.getFieldValue(\"2c\")];\n var colour_2d = colours[block.getFieldValue(\"2d\")];\n var colour_2e = colours[block.getFieldValue(\"2e\")];\n var colour_2f = colours[block.getFieldValue(\"2f\")];\n var colour_30 = colours[block.getFieldValue(\"30\")];\n var colour_31 = colours[block.getFieldValue(\"31\")];\n var colour_32 = colours[block.getFieldValue(\"32\")];\n var colour_33 = colours[block.getFieldValue(\"33\")];\n var colour_34 = colours[block.getFieldValue(\"34\")];\n var colour_35 = colours[block.getFieldValue(\"35\")];\n var colour_36 = colours[block.getFieldValue(\"36\")];\n var colour_37 = colours[block.getFieldValue(\"37\")];\n var colour_38 = colours[block.getFieldValue(\"38\")];\n var colour_39 = colours[block.getFieldValue(\"39\")];\n var colour_3a = colours[block.getFieldValue(\"3a\")];\n var colour_3b = colours[block.getFieldValue(\"3b\")];\n var colour_3c = colours[block.getFieldValue(\"3c\")];\n var colour_3d = colours[block.getFieldValue(\"3d\")];\n var colour_3e = colours[block.getFieldValue(\"3e\")];\n var colour_3f = colours[block.getFieldValue(\"3f\")];\n var colour_40 = colours[block.getFieldValue(\"40\")];\n var colour_41 = colours[block.getFieldValue(\"41\")];\n var colour_42 = colours[block.getFieldValue(\"42\")];\n var colour_43 = colours[block.getFieldValue(\"43\")];\n var colour_44 = colours[block.getFieldValue(\"44\")];\n var colour_45 = colours[block.getFieldValue(\"45\")];\n var colour_46 = colours[block.getFieldValue(\"46\")];\n var colour_47 = colours[block.getFieldValue(\"47\")];\n var colour_48 = colours[block.getFieldValue(\"48\")];\n var colour_49 = colours[block.getFieldValue(\"49\")];\n var colour_4a = colours[block.getFieldValue(\"4a\")];\n var colour_4b = colours[block.getFieldValue(\"4b\")];\n var colour_4c = colours[block.getFieldValue(\"4c\")];\n var colour_4d = colours[block.getFieldValue(\"4d\")];\n var colour_4e = colours[block.getFieldValue(\"4e\")];\n var colour_4f = colours[block.getFieldValue(\"4f\")];\n var colour_50 = colours[block.getFieldValue(\"50\")];\n var colour_51 = colours[block.getFieldValue(\"51\")];\n var colour_52 = colours[block.getFieldValue(\"52\")];\n var colour_53 = colours[block.getFieldValue(\"53\")];\n var colour_54 = colours[block.getFieldValue(\"54\")];\n var colour_55 = colours[block.getFieldValue(\"55\")];\n var colour_56 = colours[block.getFieldValue(\"56\")];\n var colour_57 = colours[block.getFieldValue(\"57\")];\n var colour_58 = colours[block.getFieldValue(\"58\")];\n var colour_59 = colours[block.getFieldValue(\"59\")];\n var colour_5a = colours[block.getFieldValue(\"5a\")];\n var colour_5b = colours[block.getFieldValue(\"5b\")];\n var colour_5c = colours[block.getFieldValue(\"5c\")];\n var colour_5d = colours[block.getFieldValue(\"5d\")];\n var colour_5e = colours[block.getFieldValue(\"5e\")];\n var colour_5f = colours[block.getFieldValue(\"5f\")];\n var colour_60 = colours[block.getFieldValue(\"60\")];\n var colour_61 = colours[block.getFieldValue(\"61\")];\n var colour_62 = colours[block.getFieldValue(\"62\")];\n var colour_63 = colours[block.getFieldValue(\"63\")];\n var colour_64 = colours[block.getFieldValue(\"64\")];\n var colour_65 = colours[block.getFieldValue(\"65\")];\n var colour_66 = colours[block.getFieldValue(\"66\")];\n var colour_67 = colours[block.getFieldValue(\"67\")];\n var colour_68 = colours[block.getFieldValue(\"68\")];\n var colour_69 = colours[block.getFieldValue(\"69\")];\n var colour_6a = colours[block.getFieldValue(\"6a\")];\n var colour_6b = colours[block.getFieldValue(\"6b\")];\n var colour_6c = colours[block.getFieldValue(\"6c\")];\n var colour_6d = colours[block.getFieldValue(\"6d\")];\n var colour_6e = colours[block.getFieldValue(\"6e\")];\n var colour_6f = colours[block.getFieldValue(\"6f\")];\n var colour_70 = colours[block.getFieldValue(\"70\")];\n var colour_71 = colours[block.getFieldValue(\"71\")];\n var colour_72 = colours[block.getFieldValue(\"72\")];\n var colour_73 = colours[block.getFieldValue(\"73\")];\n var colour_74 = colours[block.getFieldValue(\"74\")];\n var colour_75 = colours[block.getFieldValue(\"75\")];\n var colour_76 = colours[block.getFieldValue(\"76\")];\n var colour_77 = colours[block.getFieldValue(\"77\")];\n var colour_78 = colours[block.getFieldValue(\"78\")];\n var colour_79 = colours[block.getFieldValue(\"79\")];\n var colour_7a = colours[block.getFieldValue(\"7a\")];\n var colour_7b = colours[block.getFieldValue(\"7b\")];\n var colour_7c = colours[block.getFieldValue(\"7c\")];\n var colour_7d = colours[block.getFieldValue(\"7d\")];\n var colour_7e = colours[block.getFieldValue(\"7e\")];\n var colour_7f = colours[block.getFieldValue(\"7f\")];\n var code = 'matrix.Image(\"' + colour_00 + colour_01 + colour_02 + colour_03 + colour_04 + colour_05 + colour_06 + colour_07 + colour_08 + colour_09 + colour_0a + colour_0b + colour_0c + colour_0d + colour_0e + colour_0f + ':' + colour_10 + colour_11 + colour_12 + colour_13 + colour_14 + colour_15 + colour_16 + colour_17 + colour_18 + colour_19 + colour_1a + colour_1b + colour_1c + colour_1d + colour_1e + colour_1f + ':' + colour_20 + colour_21 + colour_22 + colour_23 + colour_24 + colour_25 + colour_26 + colour_27 + colour_28 + colour_29 + colour_2a + colour_2b + colour_2c + colour_2d + colour_2e + colour_2f + ':' + colour_30 + colour_31 + colour_32 + colour_33 + colour_34 + colour_35 + colour_36 + colour_37 + colour_38 + colour_39 + colour_3a + colour_3b + colour_3c + colour_3d + colour_3e + colour_3f + ':' + colour_40 + colour_41 + colour_42 + colour_43 + colour_44 + colour_45 + colour_46 + colour_47 + colour_48 + colour_49 + colour_4a + colour_4b + colour_4c + colour_4d + colour_4e + colour_4f + ':' + colour_50 + colour_51 + colour_52 + colour_53 + colour_54 + colour_55 + colour_56 + colour_57 + colour_58 + colour_59 + colour_5a + colour_5b + colour_5c + colour_5d + colour_5e + colour_5f + ':' + colour_60 + colour_61 + colour_62 + colour_63 + colour_64 + colour_65 + colour_66 + colour_67 + colour_68 + colour_69 + colour_6a + colour_6b + colour_6c + colour_6d + colour_6e + colour_6f + ':' + colour_70 + colour_71 + colour_72 + colour_73 + colour_74 + colour_75 + colour_76 + colour_77 + colour_78 + colour_79 + colour_7a + colour_7b + colour_7c + colour_7d + colour_7e + colour_7f + '\")';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_image_builtins = function (block, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var dropdown_image = block.getFieldValue('image');\n var code = 'matrix.Image.' + dropdown_image;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_get_pixel = function (block, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);\n var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);\n var code = 'matrix.get_pixel(int(' + value_x + '), int(' + value_y + '))';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_bright_point = function (_, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);\n var code = 'matrix.set_pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + \")\\n\";\n return code;\n}\n\nexport const display_get_screen_pixel = function (_, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var code = 'matrix.get_brightness()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_get_screen_image = function (_, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var code = 'matrix.get_screenimage()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_bright_screen = function (_, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var code = 'matrix.set_brightness(' + x + ')\\n';\n return code;\n}\n\nexport const display_blink_rate = function (_, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var code = 'matrix.blink_rate(' + x + ')\\n';\n return code;\n}\n\nexport const display_clear = function (_, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var code = 'matrix.clear()\\n';\n return code;\n}\n\nexport const display_use_i2c_init = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var i2csub = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var row = generator.valueToCode(this, 'row', generator.ORDER_ATOMIC);\n var column = generator.valueToCode(this, 'column', generator.ORDER_ATOMIC);\n var code = sub + \" = ssd1306.SSD1306_I2C(\" + row + \",\" + column + \",\" + i2csub + \")\\n\";\n return code;\n}\n\nexport const display_draw_4strings = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var value_text_line1 = generator.valueToCode(this, 'Text_line1', generator.ORDER_ASSIGNMENT) || '\\'\\'';\n var value_text_line2 = generator.valueToCode(this, 'Text_line2', generator.ORDER_ASSIGNMENT) || '\\'\\'';\n var value_text_line3 = generator.valueToCode(this, 'Text_line3', generator.ORDER_ASSIGNMENT) || '\\'\\'';\n var value_text_line4 = generator.valueToCode(this, 'Text_line4', generator.ORDER_ASSIGNMENT) || '\\'\\'';\n var code = varName + '.show_str(' + value_text_line1 + ',' + value_text_line2 + ',' + value_text_line3 + ',' + value_text_line4 + ')\\n'\n return code;\n}\n\nexport const display_line_arbitrarily = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);\n var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);\n var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);\n var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);\n var code = varName + '.show_line(' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', 1)\\n';\n return code;\n}\n\nexport const display_rect = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);\n var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);\n var value_width = generator.valueToCode(this, 'width', generator.ORDER_ATOMIC);\n var value_height = generator.valueToCode(this, 'height', generator.ORDER_ATOMIC);\n var checkbox_fill = this.getFieldValue(\"fill\") == 'TRUE' ? 'True' : 'False';\n var size = this.getFieldValue('OP');\n var code = '';\n switch (checkbox_fill) {\n case \"True\":\n code = varName + '.show_fill_rect(' + location_x + ', ' + location_y + ', ' + value_width + ', ' + value_height + ',' + size + ')\\n';\n break;\n case \"False\":\n code = varName + '.show_rect(' + location_x + ', ' + location_y + ', ' + value_width + ', ' + value_height + ',' + size + ')\\n';\n break;\n }\n return code;\n}\n\nexport const image_arithmetic = function (block, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var op = block.getFieldValue(\"OP\");\n var imga = generator.valueToCode(block, 'A', generator.ORDER_ATOMIC);\n var imgb = generator.valueToCode(block, 'B', generator.ORDER_ATOMIC);\n var code = '';\n if (op == 'INTERSECTION') {\n code = imga + '-(' + imga + '-' + imgb + ')';\n }\n else {\n code = imga + op + imgb;\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_line = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);\n var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);\n var value_length = generator.valueToCode(this, 'length', generator.ORDER_ATOMIC);\n var value_direction = this.getFieldValue(\"direction\");\n var code = varName + '.show_' + value_direction + '(' + location_x + ', ' + location_y + ', ' + value_length + ', 1)\\n';\n return code;\n}\n\nexport const display_onoff = function (_, generator) {\n var code = (this.getFieldValue('ONOFF') == 'ON') ? '1' : '0';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const image_shift = function (block, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var op = block.getFieldValue(\"OP\");\n var image = generator.valueToCode(block, 'img', generator.ORDER_ATOMIC);\n var value = generator.valueToCode(block, 'val', generator.ORDER_ATOMIC);\n var code = image + '.shift_' + op + '(' + value + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_fill = function (_, generator) {\n var varName = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n generator.definitions_['import_machine'] = 'import machine';\n var key = this.getFieldValue('key');\n var code = varName + '.show_fill(' + key + ')\\n';\n return code;\n}\n\n// export const switch = function (_, generator) {\n// var code = this.getFieldValue('flag');\n// return [code, generator.ORDER_ATOMIC];\n// }\n\nexport const display_tm_use_i2c_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue(\"key\");\n var code;\n if (key == 'TM1650') {\n generator.definitions_['import_tm1650'] = 'import tm1650';\n code = v + ' = tm1650.' + key + \"(\" + iv + ')\\n';\n } else if (key == 'TM1637') {\n generator.definitions_['import_tm1637'] = 'import tm1637';\n code = v + ' = tm1637.' + key + \"(\" + iv + ')\\n';\n }\n return code;\n}\n\nexport const display_tm1650_power = function (_, generator) {\n var type = this.getFieldValue(\"TYPE\");\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var stat = this.getFieldValue(\"STAT\");\n var code = v + '.' + type + stat + \"()\\n\";\n return code;\n}\n\nexport const display_tm1650_show_num = function (_, generator) {\n var type = this.getFieldValue(\"TYPE\");\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var val = generator.valueToCode(this, 'VALUE', generator.ORDER_ATOMIC);\n var code = v + '.' + type + \"_show_num(\" + val + \")\\n\";\n return code;\n}\n\nexport const display_tm1650_show_dot = function (_, generator) {\n var type = this.getFieldValue(\"TYPE\");\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var n = generator.valueToCode(this, 'NO', generator.ORDER_ATOMIC);\n var stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);\n var code = v + '.' + type + \"_show_dot(\" + n + \", \" + stat + \")\\n\";\n return code;\n}\n\nexport const display_animate = function (_, generator) {\n // Boolean values true and false.\n var name = this.getFieldValue(\"ANIMATION\");\n var code = 'matrix.Image.' + name;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_circle = function (_, generator) {\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);\n var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);\n var value_r = generator.valueToCode(this, 'r', generator.ORDER_ATOMIC);\n var checkbox_fill = this.getFieldValue(\"fill\") == 'TRUE' ? 'True' : 'False';\n var size = this.getFieldValue('OP');\n var code = '';\n switch (checkbox_fill) {\n case \"True\":\n code = varName + '.show_fill_circle(' + location_x + ', ' + location_y + ', ' + value_r + ', ' + size + ')\\n';\n break;\n case \"False\":\n code = varName + '.show_circle(' + location_x + ', ' + location_y + ', ' + value_r + ', ' + size + ')\\n';\n break;\n }\n return code;\n}\n\nexport const display_triangle = function (_, generator) {\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var location_x0 = generator.valueToCode(this, 'x0', generator.ORDER_ATOMIC);\n var location_y0 = generator.valueToCode(this, 'y0', generator.ORDER_ATOMIC);\n var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);\n var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);\n var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);\n var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);\n var checkbox_fill = this.getFieldValue(\"fill\") == 'TRUE' ? 'True' : 'False';\n var size = this.getFieldValue('OP');\n var code = '';\n switch (checkbox_fill) {\n case \"True\":\n code = varName + '.show_fill_triangle(' + location_x0 + ', ' + location_y0 + ', ' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', ' + size + ')\\n';\n break;\n case \"False\":\n code = varName + '.show_triangle(' + location_x0 + ', ' + location_y0 + ', ' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', ' + size + ')\\n';\n break;\n }\n return code;\n}\n\nexport const display_oled_showBitmap = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var location_x = generator.valueToCode(this, 'START_X', generator.ORDER_ATOMIC);\n var location_y = generator.valueToCode(this, 'START_Y', generator.ORDER_ATOMIC);\n var bmp = generator.valueToCode(this, 'bitmap_name', generator.ORDER_ATOMIC);\n var w = generator.valueToCode(this, 'WIDTH', generator.ORDER_ATOMIC);\n var h = generator.valueToCode(this, 'HEIGHT', generator.ORDER_ATOMIC);\n var code = varName + '.show_bitmap(' + location_x + ', ' + location_y + ', ' + bmp + ',' + w + ',' + h + ')\\n';\n return code;\n}\n\nexport const display_oled_drawPixel = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var location_x = generator.valueToCode(this, 'POS_X', generator.ORDER_ATOMIC);\n var location_y = generator.valueToCode(this, 'POS_Y', generator.ORDER_ATOMIC);\n var code = varName + '.show_pixel(' + location_x + ', ' + location_y + ')\\n';\n return code;\n}\n\n// pe:\nexport const display_matrix_use_i2c_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue(\"key\");\n var code;\n if (key == '32x12 Matrix') {\n generator.definitions_['import_matrix32x12'] = 'import matrix32x12';\n code = v + ' = matrix32x12.Matrix(' + iv + ')\\n';\n } else if (key == 'TM1637') {\n generator.definitions_['import_tm1637'] = 'import tm1637';\n code = v + ' = tm1637.' + key + \"(\" + iv + ')\\n';\n }\n return code;\n}\n\nexport const display_show_image = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n generator.definitions_['import_matrix32x12'] = 'import matrix32x12';\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = v + \".set_buffer(\" + data + \")\\n\";\n return code;\n}\n\nexport const display_scroll_string_extern = function (_, generator) {\n generator.definitions_['import_matrix32x12'] = 'import matrix32x12';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = v + \".scroll(\" + data + \")\\n\";\n return code;\n}","import { Boards } from 'mixly';\n\nexport const display_matrix_use_i2c_init = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue(\"key\");\n var font = '';\n if (['mpython', 'mixgo_pe', 'mixgo_nova'].indexOf(version) >= 0) {\n font = '0x700000'\n } else if (['mixgo_sant'].indexOf(version) >= 0) {\n font = '0xE00000'\n } else {\n font = '0x3A0000'\n }\n var code;\n if (key == '32x12 Matrix') {\n generator.definitions_['import_matrix32x12'] = 'import matrix32x12';\n code = v + ' = matrix32x12.Matrix(' + iv + ',font_address=' + font + ')\\n';\n } else if (key == '16x8 Matrix') {\n generator.definitions_['import_matrix16x8'] = 'import matrix16x8';\n code = v + ' = matrix16x8.Matrix(' + iv + ')\\n';\n }\n return code;\n}\n\nexport const display_matrix_extern_show_image = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = v + \".shows(\" + data + \")\\n\";\n return code;\n}\n\nexport const display_matrix_extern_show_image_or_string_delay = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);\n var op = this.getFieldValue('center');\n var code = v + \".shows(\" + data + ',space = ' + space + ',center = ' + op + \")\\n\";\n return code;\n}\n\nexport const display_matrix_extern_show_frame_string = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = v + \".frame(\" + data + \")\\n\";\n return code;\n}\n\nexport const display_matrix_extern_show_frame_string_delay = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n var code = v + \".frame(\" + data + ',delay = ' + time + \")\\n\";\n return code;\n}\n\nexport const display_matrix_extern_scroll_string = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = v + \".scroll(\" + data + \")\\n\";\n return code;\n}\n\nexport const display_matrix_extern_scroll_string_delay = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);\n var code = v + \".scroll(\" + data + ',speed =' + time + ',space = ' + space + \")\\n\";\n return code;\n}\n\nexport const display_matrix_extern_clear = function (block, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.fill(0)\\n' + v + '.show()\\n';\n return code;\n}\n\nexport const display_matrix_extern_shift = function (a, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var op = a.getFieldValue(\"OP\");\n var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);\n var code = v + '.' + op + '(' + value + ')\\n';\n return code;\n}\n\nexport const display_matrix_extern_get_pixel = function (block, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);\n var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);\n var code = v + '.pixel(int(' + value_x + '), int(' + value_y + '))';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_matrix_extern_bright_point = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);\n var code = v + '.pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + \")\\n\" + v + '.show()\\n';\n return code;\n}\n\nexport const display_matrix_extern_get_screen_pixel = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.get_brightness()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_matrix_extern_bright_screen = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var code = v + '.set_brightness(' + x + ')\\n';\n return code;\n}\n\nexport const display_matrix_extern_image_builtins = function (block, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var dropdown_image = block.getFieldValue('image');\n var code = v + '.' + dropdown_image;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const matrix_extern_image_arithmetic = function (a, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var op = a.getFieldValue(\"OP\");\n var imga = generator.valueToCode(a, 'A', generator.ORDER_ATOMIC);\n var imgb = generator.valueToCode(a, 'B', generator.ORDER_ATOMIC);\n var code = v + '.map_' + op + '(' + imga + ',' + imgb + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const matrix_extern_image_invert = function (a, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var imga = generator.valueToCode(a, 'A', generator.ORDER_ATOMIC);\n var code = v + '.map_invert(' + imga + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\n//oled\nexport const display_use_i2c_init = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var i2csub = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var row = generator.valueToCode(this, 'row', generator.ORDER_ATOMIC);\n var column = generator.valueToCode(this, 'column', generator.ORDER_ATOMIC);\n var code = sub + \" = ssd1306.SSD1306_I2C(\" + row + \",\" + column + \",\" + i2csub + \")\\n\";\n return code;\n}\n\nexport const display_draw_4strings = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var value_text_line1 = generator.valueToCode(this, 'Text_line1', generator.ORDER_ASSIGNMENT) || '\\'\\'';\n var value_text_line2 = generator.valueToCode(this, 'Text_line2', generator.ORDER_ASSIGNMENT) || '\\'\\'';\n var value_text_line3 = generator.valueToCode(this, 'Text_line3', generator.ORDER_ASSIGNMENT) || '\\'\\'';\n var value_text_line4 = generator.valueToCode(this, 'Text_line4', generator.ORDER_ASSIGNMENT) || '\\'\\'';\n var code = varName + '.show_str(' + value_text_line1 + ',' + value_text_line2 + ',' + value_text_line3 + ',' + value_text_line4 + ')\\n'\n return code;\n}\n\nexport const display_line_arbitrarily = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);\n var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);\n var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);\n var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);\n var code = varName + '.show_line(' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', 1)\\n';\n return code;\n}\n\nexport const display_rect = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);\n var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);\n var value_width = generator.valueToCode(this, 'width', generator.ORDER_ATOMIC);\n var value_height = generator.valueToCode(this, 'height', generator.ORDER_ATOMIC);\n var checkbox_fill = this.getFieldValue(\"fill\") == 'TRUE' ? 'True' : 'False';\n var size = this.getFieldValue('OP');\n switch (checkbox_fill) {\n case \"True\":\n var code = varName + '.show_fill_rect(' + location_x + ', ' + location_y + ', ' + value_width + ', ' + value_height + ',' + size + ')\\n';\n return code;\n case \"False\":\n var code = varName + '.show_rect(' + location_x + ', ' + location_y + ', ' + value_width + ', ' + value_height + ',' + size + ')\\n';\n return code;\n }\n}\n\n\nexport const display_line = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);\n var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);\n var value_length = generator.valueToCode(this, 'length', generator.ORDER_ATOMIC);\n var value_direction = this.getFieldValue(\"direction\");\n var code = varName + '.show_' + value_direction + '(' + location_x + ', ' + location_y + ', ' + value_length + ', 1)\\n';\n return code;\n}\n\nexport const display_onoff = function (_, generator) {\n var code = (this.getFieldValue('ONOFF') == 'ON') ? '1' : '0';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const image_shift = function (a, generator) {\n generator.definitions_['import_matrix'] = 'import matrix';\n var op = a.getFieldValue(\"OP\");\n var image = generator.valueToCode(a, 'img', generator.ORDER_ATOMIC);\n var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);\n var code = image + '.shift_' + op + '(' + value + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_fill = function (_, generator) {\n var varName = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n generator.definitions_['import_machine'] = 'import machine';\n var key = this.getFieldValue('key');\n var code = varName + '.show_fill(' + key + ')\\n';\n return code;\n}\n\n// export const switch = function (_, generator) {\n// var code = this.getFieldValue('flag');\n// return [code, generator.ORDER_ATOMIC];\n// };\n\nexport const display_animate = function (_, generator) {\n // Boolean values true and false.\n var name = this.getFieldValue(\"ANIMATION\");\n var code = 'matrix.Image.' + name;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_circle = function (_, generator) {\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);\n var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);\n var value_r = generator.valueToCode(this, 'r', generator.ORDER_ATOMIC);\n var checkbox_fill = this.getFieldValue(\"fill\") == 'TRUE' ? 'True' : 'False';\n var size = this.getFieldValue('OP');\n switch (checkbox_fill) {\n case \"True\":\n var code = varName + '.show_fill_circle(' + location_x + ', ' + location_y + ', ' + value_r + ', ' + size + ')\\n';\n return code;\n case \"False\":\n var code = varName + '.show_circle(' + location_x + ', ' + location_y + ', ' + value_r + ', ' + size + ')\\n';\n return code;\n }\n}\n\nexport const display_triangle = function (_, generator) {\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var location_x0 = generator.valueToCode(this, 'x0', generator.ORDER_ATOMIC);\n var location_y0 = generator.valueToCode(this, 'y0', generator.ORDER_ATOMIC);\n var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);\n var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);\n var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);\n var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);\n var checkbox_fill = this.getFieldValue(\"fill\") == 'TRUE' ? 'True' : 'False';\n var size = this.getFieldValue('OP');\n switch (checkbox_fill) {\n case \"True\":\n var code = varName + '.show_fill_triangle(' + location_x0 + ', ' + location_y0 + ', ' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', ' + size + ')\\n';\n return code;\n case \"False\":\n var code = varName + '.show_triangle(' + location_x0 + ', ' + location_y0 + ', ' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', ' + size + ')\\n';\n return code;\n }\n}\n\nexport const display_oled_showBitmap = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var location_x = generator.valueToCode(this, 'START_X', generator.ORDER_ATOMIC);\n var location_y = generator.valueToCode(this, 'START_Y', generator.ORDER_ATOMIC);\n var bmp = generator.valueToCode(this, 'bitmap_name', generator.ORDER_ATOMIC);\n var w = generator.valueToCode(this, 'WIDTH', generator.ORDER_ATOMIC);\n var h = generator.valueToCode(this, 'HEIGHT', generator.ORDER_ATOMIC);\n var code = varName + '.show_bitmap(' + location_x + ', ' + location_y + ', ' + bmp + ',' + w + ',' + h + ')\\n';\n return code;\n}\n\nexport const display_oled_drawPixel = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_ssd1306'] = 'import ssd1306';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var location_x = generator.valueToCode(this, 'POS_X', generator.ORDER_ATOMIC);\n var location_y = generator.valueToCode(this, 'POS_Y', generator.ORDER_ATOMIC);\n var code = varName + '.show_pixel(' + location_x + ', ' + location_y + ')\\n';\n return code;\n}\n\n//tm1650\nexport const display_tm_use_i2c_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue(\"key\");\n var code;\n if (key == 'TM1650') {\n generator.definitions_['import_tm1650'] = 'import tm1650';\n code = v + ' = tm1650.' + key + \"(\" + iv + ')\\n';\n } else if (key == 'TM1637') {\n generator.definitions_['import_tm1637'] = 'import tm1637';\n code = v + ' = tm1637.' + key + \"(\" + iv + ')\\n';\n }\n return code;\n}\n\nexport const display_tm1650_power = function (_, generator) {\n // var type = this.getFieldValue(\"TYPE\");\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var stat = this.getFieldValue(\"STAT\");\n var code = v + '.' + stat + \"()\\n\";\n return code;\n}\n\nexport const display_tm1650_show_num = function (_, generator) {\n // var type = this.getFieldValue(\"TYPE\");\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var val = generator.valueToCode(this, 'VALUE', generator.ORDER_ATOMIC);\n var code = v + \".shownum(\" + val + \")\\n\";\n return code;\n}\n\nexport const display_tm1650_show_dot = function (_, generator) {\n // var type = this.getFieldValue(\"TYPE\");\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var n = generator.valueToCode(this, 'NO', generator.ORDER_ATOMIC);\n var stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);\n var code = v + '.showDP(' + n + \", \" + stat + \")\\n\";\n return code;\n}\n\nexport const display_tm1650_set_brightness = function (_, generator) {\n // var type = this.getFieldValue(\"TYPE\");\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var val = generator.valueToCode(this, 'VALUE', generator.ORDER_ATOMIC);\n var code = v + \".intensity(\" + val + \")\\n\";\n return code;\n}\n\nexport const tft_use_spi_init = function (_, generator) {\n generator.definitions_['import_st7789'] = 'import st7789';\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var font = '';\n if (['mpython', 'mixgo_pe', 'mixgo_nova'].indexOf(version) >= 0) {\n font = '0x700000'\n } else if (['mixgo_sant'].indexOf(version) >= 0) {\n font = '0xE00000'\n } else {\n font = '0x3A0000'\n }\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var sv = generator.valueToCode(this, 'SPISUB', generator.ORDER_ATOMIC);\n var pv = generator.valueToCode(this, 'PINCS', generator.ORDER_ATOMIC);\n var dv = generator.valueToCode(this, 'PINDC', generator.ORDER_ATOMIC);\n var w = generator.valueToCode(this, 'WIDTH', generator.ORDER_ATOMIC);\n var h = generator.valueToCode(this, 'HEIGHT', generator.ORDER_ATOMIC);\n var op = this.getFieldValue('rotate');\n var code = v + ' = st7789.ST7789(' + sv + ',' + w + ',' + h + ',dc_pin=' + dv + ',cs_pin=' + pv + ',rotation=' + op + ',font_address=' + font + ')\\n';\n return code;\n}\n\nexport const tft_show_image_xy = function (_, generator) {\n generator.definitions_['import_st7789'] = 'import st7789';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n if (color.slice(0, 2) == \"0x\") {\n var code = v + \".image(\" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',color=' + color + \")\\n\";\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = v + \".image(\" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',color=0x' + rgb565.toString(16) + \")\\n\";\n }\n return code;\n}\n\nexport const display_color_seclet = function (_, generator) {\n var colour = this.getFieldValue('COLOR');\n var code = '0x' + colour.slice(1) + ''\n var rgb565 = (code & 0xf80000) >> 8 | (code & 0xfc00) >> 5 | (code & 0xff) >> 3\n return ['0x' + rgb565.toString(16), generator.ORDER_ATOMIC];\n}\n\nexport const tft_show_image_or_string_delay = function (_, generator) {\n generator.definitions_['import_st7789'] = 'import st7789';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var op = this.getFieldValue('center');\n if (color.slice(0, 2) == \"0x\") {\n var code = v + \".shows(\" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ',color=' + color + \")\\n\";\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = v + \".shows(\" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ',color=0x' + rgb565.toString(16) + \")\\n\";\n }\n return code;\n}\n\nexport const tft_show_frame_string_delay = function (_, generator) {\n generator.definitions_['import_st7789'] = 'import st7789';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n if (color.slice(0, 2) == \"0x\") {\n var code = v + \".frame(\" + data + ',size = ' + size + ',delay = ' + time + ',color=' + color + \")\\n\";\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = v + \".frame(\" + data + ',size = ' + size + ',delay = ' + time + ',color=0x' + rgb565.toString(16) + \")\\n\";\n }\n return code;\n}\n\nexport const tft_scroll_string_delay = function (_, generator) {\n generator.definitions_['import_st7789'] = 'import st7789';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n if (color.slice(0, 2) == \"0x\") {\n var code = v + \".scroll(\" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ',color=' + color + \")\\n\";\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = v + \".scroll(\" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ',color=0x' + rgb565.toString(16) + \")\\n\";\n }\n return code;\n}\n\nexport const tft_fill = function (_, generator) {\n generator.definitions_['import_st7789'] = 'import st7789';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = v + '.fill(st7789.' + key + ')\\n';\n return code;\n}\n\nexport const tft_line_arbitrarily = function (_, generator) {\n generator.definitions_['import_st7789'] = 'import st7789';\n var varName = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);\n var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);\n var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);\n var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n if (color.slice(0, 2) == \"0x\") {\n var code = varName + '.line(' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', color=' + color + ')\\n';\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = varName + '.line(' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', color=0x' + rgb565.toString(16) + ')\\n';\n }\n return code;\n}\n\nexport const display_lcd_use_i2c_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue(\"key\");\n var addr = generator.valueToCode(this, 'ADDR', generator.ORDER_ATOMIC);\n var code;\n generator.definitions_['import_i2clcd'] = 'import i2clcd';\n code = v + ' = i2clcd.LCD' + \"(\" + iv + ',lcd_width=' + key + ',i2c_addr=' + addr +')\\n';\n return code;\n}\n\nexport const lcd_show_image_or_string_delay = function (_, generator) {\n generator.definitions_['import_i2clcd'] = 'import i2clcd';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var op = this.getFieldValue('center');\n var code = v + \".shows(\" + data + ',column = ' + x + ',line = ' + y + ',center = ' + op + \")\\n\";\n return code;\n}\n\nexport const lcd_print_string = function (_, generator) {\n generator.definitions_['import_i2clcd'] = 'import i2clcd';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var delay = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n var code = v + \".print(\" + data + ',column = ' + x + ',line = ' + y + ',delay=' + delay + \")\\n\";\n return code;\n}\n\nexport const lcd_backlight = function (_, generator) {\n generator.definitions_['import_i2clcd'] = 'import i2clcd';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = v + '.backlight(' + key + ')\\n';\n return code;\n}\n\nexport const lcd_clear = function (block, generator) {\n generator.definitions_['import_i2clcd'] = 'import i2clcd';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.clear()\\n';\n return code;\n}\n\nexport const display_oled_use_i2c_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);\n var addr = generator.valueToCode(this, 'ADDR', generator.ORDER_ATOMIC);\n var m =this.getFieldValue(\"driver\");\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var font = '';\n if (['mpython', 'mixgo_pe', 'mixgo_nova'].indexOf(version) >= 0) {\n font = '0x700000'\n } else if (['mixgo_sant'].indexOf(version) >= 0) {\n font = '0xE00000'\n } else {\n font = '0x3A0000'\n }\n var code;\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n code = v + ' = oled128x64.OLED' + \"(\" + iv + ',address=' + addr + ',font_address=' + font + ',types='+m+')\\n';\n\n return code;\n}\n\nexport const extern_oled_show_image = function (_, generator) {\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = v + \".image(\" + data + \")\\n\";\n return code;\n}\n\nexport const extern_oled_show_image_xy = function (_, generator) {\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var code = v + \".image(\" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + \")\\n\";\n return code;\n}\n\nexport const extern_oled_show_string = function (_, generator) {\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = v + \".shows(\" + data + \")\\n\";\n return code;\n}\n\nexport const extern_oled_show_image_or_string_delay = function (_, generator) {\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);\n var op = this.getFieldValue('center');\n var code = v + \".shows(\" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + \")\\n\";\n return code;\n}\n\nexport const extern_oled_show_frame_string = function (_, generator) {\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = v + \".frame(\" + data + \")\\n\";\n return code;\n}\n\nexport const extern_oled_show_frame_string_delay = function (_, generator) {\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n var code = v + \".frame(\" + data + ',size = ' + size + ',delay = ' + time + \")\\n\";\n return code;\n}\n\nexport const extern_oled_scroll_string = function (_, generator) {\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = v + \".scroll(\" + data + \")\\n\";\n return code;\n}\n\nexport const extern_oled_scroll_string_delay = function (_, generator) {\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);\n var code = v + \".scroll(\" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + \")\\n\";\n return code;\n}\n\nexport const extern_oled_clear = function (block, generator) {\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.fill(0)\\n' + v + '.show()\\n';\n return code;\n}\n\nexport const extern_oled_shift = function (a, generator) {\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var op = a.getFieldValue(\"OP\");\n var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);\n var code = v + '.' + op + '(' + value + ')\\n';\n return code;\n}\n\nexport const extern_oled_get_pixel = function (block, generator) {\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);\n var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);\n var code = v + '.pixel(int(' + value_x + '), int(' + value_y + '))';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const extern_oled_bright_point = function (_, generator) {\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);\n var code = v + '.pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + \")\\n\" + v + '.show()\\n';\n return code;\n}\n\nexport const extern_oled_shape_rect = function (block, generator) {\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);\n var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);\n var w = generator.valueToCode(block, 'w', generator.ORDER_ATOMIC);\n var h = generator.valueToCode(block, 'h', generator.ORDER_ATOMIC);\n var state = block.getFieldValue('state');\n var shape = block.getFieldValue('shape');\n var code = v + '.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', ' + state + ')\\n' + v + '.show()\\n';\n return code;\n}\n\nexport const extern_oled_hvline = function (block, generator) { //水平线\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);\n var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);\n var var_length = generator.valueToCode(block, 'length', generator.ORDER_ATOMIC);\n var state = block.getFieldValue('state');\n var hv = block.getFieldValue('dir_h_v');\n var code = v + '.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', ' + state + ')\\n' + v + '.show()\\n';\n return code;\n}\n\nexport const extern_oled_line = function (block, generator) {\n generator.definitions_['import_oled128x64'] = 'import oled128x64';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var x1 = generator.valueToCode(block, 'x1', generator.ORDER_ATOMIC);\n var y1 = generator.valueToCode(block, 'y1', generator.ORDER_ATOMIC);\n var x2 = generator.valueToCode(block, 'x2', generator.ORDER_ATOMIC);\n var y2 = generator.valueToCode(block, 'y2', generator.ORDER_ATOMIC);\n var state = block.getFieldValue('state');\n var code = v + '.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', ' + state + ')\\n' + v + '.show()\\n';\n return code;\n}","import { Boards } from 'mixly';\n\nexport const display_show_image = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n if (version == \"educore\"){\n generator.definitions_['import_' + version + 'oled'] = \"from \" + version + \" import oled\";\n var code = \"oled.print(\" + data + \")\\n\";\n }else{\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var code = \"onboard_matrix.shows(\" + data + \")\\n\";\n }\n return code;\n}\n\nexport const display_show_image_or_string_delay = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);\n var op = this.getFieldValue('center');\n if (version == \"mixgo_sant\" || version == \"mixgo_nova\") {\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var code = \"onboard_tft.shows(\" + data + \",space = \" + space + ',center = ' + op + \")\\n\";\n return code;\n }else if (version == \"educore\"){\n generator.definitions_['import_' + version + 'oled'] = \"from \" + version + \" import oled\";\n var code = \"oled.print(\" + data + ',space = ' + space + ',center = ' + op + \")\\n\";\n }\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var code = \"onboard_matrix.shows(\" + data + ',space = ' + space + ',center = ' + op + \")\\n\";\n return code;\n}\n\nexport const display_show_frame_string = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n if (version == 'mpython' || version == 'educore') {\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_oled.frame(\" + data + \")\\n\";\n } else {\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_matrix.frame(\" + data + \")\\n\";\n }\n return code;\n}\n\nexport const display_show_frame_string_delay = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n if (version == 'mpython' || version == 'educore') {\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_oled.frame(\" + data + ',delay = ' + time + \")\\n\";\n } else {\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var code = \"onboard_matrix.frame(\" + data + ',delay = ' + time + \")\\n\";\n }\n return code;\n}\n\nexport const display_scroll_string = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n if (version == 'mpython'|| version == 'educore') {\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_oled.scroll(\" + data + \")\\n\";\n } else {\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_matrix.scroll(\" + data + \")\\n\";\n }\n return code;\n}\n\nexport const display_scroll_string_delay = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);\n if (version == 'mpython'|| version == 'educore') {\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var code = \"onboard_oled.scroll(\" + data + ',speed =' + time + ',space = ' + space + \")\\n\";\n }else{\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var code = \"onboard_matrix.scroll(\" + data + ',speed =' + time + ',space = ' + space + \")\\n\";\n }\n return code;\n}\n\nexport const display_image_builtins = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var dropdown_image = block.getFieldValue('image');\n var code = 'onboard_matrix.' + dropdown_image;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_image_builtins_all = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var dropdown_image = block.getFieldValue('image');\n var code = 'onboard_matrix.' + dropdown_image;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_image_create = function (block, generator) {\n var colours = {\n \"#000000\": \"0\",\n //\"#440000\": \"1\",\n //\"#660000\": \"2\",\n //\"#880000\": \"3\",\n //\"#aa0000\": \"4\",\n //\"#bb0000\": \"5\",\n //\"#cc0000\": \"6\",\n //\"#dd0000\": \"7\",\n //\"#ee0000\": \"8\",\n \"#ff0000\": \"1\"\n }\n function pad(num) {\n let newNum = '';\n if (num.length % 2 === 1) {\n num = '0' + num;\n }\n if (num.length < 8) {\n let k = 8 - num.length\n for (let i = 1; i <= k; i++) {\n num = '0' + num;\n }\n }\n\n for (let i = 1; i <= num.length; i++)\n if (i % 2 === 0 && i !== num.length)\n newNum = newNum + num[i - 1] + ',0x';\n else\n newNum += num[i - 1];\n return '0x' + newNum;\n }\n let colorList = [];\n for (let i = 0; i < 12; i++) {\n let colorRow = '';\n let colorNum = 0;\n let correct = 0;\n\n for (let j = 0; j < 32; j++) {\n if (j < 8) {\n correct = 7 - j\n }\n else if (j < 16) {\n correct = 23 - j\n }\n else if (j < 24) {\n correct = 39 - j\n }\n else if (j < 32) {\n correct = 55 - j\n }\n colorNum += Number(colours[block.getFieldValue(i + '-' + j)]) * Math.pow(2, 31 - correct);\n\n }\n colorRow += pad(colorNum.toString(16));\n colorList.unshift(colorRow);\n }\n let codelist = [];\n for (let i = 0; i < colorList.length; i++) {\n codelist[i] = colorList[colorList.length - 1 - i];\n }\n //var code = \"bytearray(b'\" + colorList.join('') + \"')\";\n var code = '[' + codelist + ']';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_clear = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n if (version == 'mpython') {\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var code = 'onboard_oled.fill(0)\\n' + 'onboard_oled.show()\\n';\n }\n else {\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var code = 'onboard_matrix.fill(0)\\n' + 'onboard_matrix.show()\\n';\n }\n return code;\n}\n\nexport const image_arithmetic = function (a, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var op = a.getFieldValue(\"OP\");\n var imga = generator.valueToCode(a, 'A', generator.ORDER_ATOMIC);\n var imgb = generator.valueToCode(a, 'B', generator.ORDER_ATOMIC);\n var code = 'onboard_matrix.map_' + op + '(' + imga + ',' + imgb + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const image_invert = function (a, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var imga = generator.valueToCode(a, 'A', generator.ORDER_ATOMIC);\n var code = 'onboard_matrix.map_invert(' + imga + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_shift = function (a, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n if (version == 'mpython') {\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var op = a.getFieldValue(\"OP\");\n var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);\n var code = 'onboard_oled.' + op + '(' + value + ')\\n';\n } else {\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var op = a.getFieldValue(\"OP\");\n var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);\n var code = 'onboard_matrix.' + op + '(' + value + ')\\n';\n }\n return code;\n}\n\n// export const onboard_oled_shift = function (a) {\n// var version = Boards.getSelectedBoardKey().split(':')[2]\n\n// return code;\n// };\n\nexport const display_get_pixel = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n if (version == 'mpython') {\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);\n var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);\n var code = 'onboard_oled.pixel(int(' + value_x + '), int(' + value_y + '))';\n } else {\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);\n var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);\n var code = 'onboard_matrix.pixel(int(' + value_x + '), int(' + value_y + '))';\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_bright_point = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);\n var code = 'onboard_matrix.pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + \")\\n\" + 'onboard_matrix.show()\\n';\n return code;\n}\n\nexport const display_get_screen_pixel = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var code = 'onboard_matrix.get_brightness()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const display_bright_screen = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var code = 'onboard_matrix.set_brightness(' + x + ')\\n';\n return code;\n}\n\n//mixgo_me onboard_matrix below:\n\nexport const mixgome_display_image_create = function (block, generator) {\n var colours = {\n \"#000000\": \"0\",\n \"#ff0000\": \"1\"\n }\n function pad(num) {\n let newNum = '';\n if (num.length % 2 === 1) {\n num = '0' + num;\n }\n\n for (let i = 1; i <= num.length; i++)\n if (i % 2 === 0 && i !== num.length)\n newNum = newNum + num[i - 1] + '\\\\x';\n else\n newNum += num[i - 1];\n return '\\\\x' + newNum;\n }\n let colorList = [];\n for (let i = 0; i < 5; i++) {\n let colorRow = '';\n let colorNum = 0;\n for (let j = 0; j < 8; j++) {\n colorNum += Number(colours[block.getFieldValue((4 - i) + '-' + j)]) * Math.pow(2, j);\n }\n colorRow += pad(colorNum.toString(16));\n colorList.unshift(colorRow);\n }\n\n var code = \"bytearray(b'\" + colorList.join('') + \"')\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const mixgomini_display_image_create = function (block, generator) {\n var blinkColor = '#ff0000';\n var code = '';\n for (let i = 0; i < 12; i++) {\n let value = 0;\n for (let j = 0; j < 8; j++) {\n if (block.getFieldValue(`${j}-${i}`) !== blinkColor) {\n continue;\n }\n value += 1 << j;\n }\n let temp = value.toString(16);\n code += '\\\\x' + Array(2 - temp.length).fill(0).join('') + temp;\n }\n code = `bytearray(b'${code}')`;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const mixgome_display_font = function (a, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var op = a.getFieldValue(\"OP\");\n var code = 'onboard_matrix.font(' + op + ')\\n';\n return code;\n}\n\nexport const mixgo_display_image_create_new = function (block, generator) {\n var colours = {\n \"#000000\": \"0\",\n \"#ff0000\": \"1\"\n }\n function pad(num) {\n let newNum = '';\n if (num.length % 2 === 1) {\n num = '0' + num;\n }\n while (num.length < 4) {\n num = '0' + num;\n }\n for (let i = 1; i <= num.length; i++)\n if (i % 2 === 0 && i !== num.length)\n newNum = newNum + num[i - 1] + '\\\\x';\n else\n newNum += num[i - 1];\n return '\\\\x' + newNum;\n }\n let colorList = [];\n for (let i = 0; i < 8; i++) {\n let colorRow = '';\n let colorNum = 0;\n for (let j = 0; j < 16; j++) {\n var c = (j + 8) % 16\n colorNum += Number(colours[block.getFieldValue((7 - i) + '-' + c)]) * Math.pow(2, j);\n }\n colorRow += pad(colorNum.toString(16));\n colorList.unshift(colorRow);\n }\n\n var code = \"bytearray(b'\" + colorList.join('') + \"')\";\n return [code, generator.ORDER_ATOMIC];\n}\n\n//mpython\n\nexport const mpython_pbm_image = function (block, generator) {\n var code = block.getFieldValue('path');\n var sort = ['expression_picture', 'eye_picture', 'informatio_picture', 'object_picture', 'progres_picture']\n var img = [[\"Angry\", \"Bored\", \"Confused\", \"Happy\", \"Heart\", \"Paper\", \"Rock\", \"Sad\", \"Scissors\", \"Silly\", \"Sleep\", \"Small_heart\", \"Small_paper\", \"Small_rock\", \"Small_scissors\", \"Smile\", \"Surprise\", \"Wonderful\"], [\"Eyes_Angry\", \"Awake\", \"Black_eye\", \"Bottom_left\", \"Bottom_right\", \"Crazy_1\", \"Crazy_2\", \"Disappointed\", \"Dizzy\", \"Down\", \"Hurt\", \"Evil\", \"Knocked_out\", \"Love\", \"Middle_left\", \"Middle_right\", \"Neutral\", \"Nuclear\", \"Pinch_left\", \"Pinch_middle\", \"Pinch_right\", \"Tear\", \"Tired_middle\", \"Tired_left\", \"Tired_right\", \"Toxic\", \"Up\", \"Winking\"], [\"Accept\", \"Backward\", \"Decline\", \"Forward\", \"Left\", \"No_go\", \"Question_mark\", \"Right\", \"Stop_1\", \"Stop_2\", \"Thumbs_down\", \"Thumbs_up\", \"Warning\"], [\"Bomb\", \"Boom\", \"Fire\", \"Flowers\", \"Forest\", \"Lightning\", \"Light_off\", \"Light_on\", \"Night\", \"Pirate\", \"Snow\", \"Target\"], [\"Bar_0\", \"Bar_1\", \"Bar_2\", \"Bar_3\", \"Bar_4\", \"Dial_0\", \"Dial_1\", \"Dial_2\", \"Dial_3\", \"Dial_4\", \"Dots_0\", \"Dots_1\", \"Dots_2\", \"Dots_3\", \"Hourglass_0\", \"Hourglass_1\", \"Hourglass_2\", \"Timer_0\", \"Timer_1\", \"Timer_2\", \"Timer_3\", \"Timer_4\", \"Water_level_0\", \"Water_level_1\", \"Water_level_2\", \"Water_level_3\"]]\n for (var i = 0; i < 5; i++) {\n if (img[i].indexOf(code) != -1) {\n var tag = i;\n break;\n }\n }\n generator.definitions_['import_' + sort[tag] + '_' + code] = \"from \" + sort[tag] + \" import \" + code;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const onboard_oled_show_image = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_oled.image(\" + data + \")\\n\";\n return code;\n}\n\nexport const onboard_oled_show_image_xy = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_oled.image(\" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + \")\\n\";\n return code;\n}\n\nexport const onboard_oled_show_string = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_oled.shows(\" + data + \")\\n\";\n return code;\n}\n\nexport const onboard_oled_show_image_or_string_delay = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);\n var op = this.getFieldValue('center');\n var code = \"onboard_oled.shows(\" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + \")\\n\";\n return code;\n}\n\nexport const onboard_oled_show_frame_string_delay = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_oled.frame(\" + data + ',size = ' + size + ',delay = ' + time + \")\\n\";\n return code;\n}\n\nexport const onboard_oled_scroll_string_delay = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_oled.scroll(\" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + \")\\n\";\n return code;\n}\n\nexport const onboard_oled_bright_point = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);\n var code = 'onboard_oled.pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + \")\\n\" + 'onboard_oled.show()\\n';\n return code;\n}\n\nexport const mpython_display_shape_rect = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);\n var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);\n var w = generator.valueToCode(block, 'w', generator.ORDER_ATOMIC);\n var h = generator.valueToCode(block, 'h', generator.ORDER_ATOMIC);\n var state = block.getFieldValue('state');\n var shape = block.getFieldValue('shape');\n var code = 'onboard_oled.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', ' + state + ')\\n' + 'onboard_oled.show()\\n';\n return code;\n}\n\nexport const mpython_display_hvline = function (block, generator) { //水平线\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);\n var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);\n var var_length = generator.valueToCode(block, 'length', generator.ORDER_ATOMIC);\n var state = block.getFieldValue('state');\n var hv = block.getFieldValue('dir_h_v');\n var code = 'onboard_oled.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', ' + state + ')\\n' + 'onboard_oled.show()\\n';\n return code;\n}\n\nexport const mpython_display_line = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_oled\";\n var x1 = generator.valueToCode(block, 'x1', generator.ORDER_ATOMIC);\n var y1 = generator.valueToCode(block, 'y1', generator.ORDER_ATOMIC);\n var x2 = generator.valueToCode(block, 'x2', generator.ORDER_ATOMIC);\n var y2 = generator.valueToCode(block, 'y2', generator.ORDER_ATOMIC);\n var state = block.getFieldValue('state');\n var code = 'onboard_oled.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', ' + state + ')\\n' + 'onboard_oled.show()\\n';\n return code;\n}\n\n//mixbot onboard_matrix below:\n\nexport const mixbot_display_image_create = function (block, generator) {\n var colours = {\n \"#000000\": \"0\",\n \"#ff0000\": \"1\"\n }\n function pad(num) {\n let newNum = '';\n if (num.length % 2 === 1) {\n num = '0' + num;\n }\n\n for (let i = 1; i <= num.length; i++)\n if (i % 2 === 0 && i !== num.length)\n newNum = newNum + num[i - 1] + '\\\\x';\n else\n newNum += num[i - 1];\n return '\\\\x' + newNum;\n }\n let colorList = [];\n for (let i = 0; i < 5; i++) {\n let colorRow = '';\n let colorNum = 0;\n for (let j = 0; j < 5; j++) {\n colorNum += Number(colours[block.getFieldValue((4 - i) + '-' + j)]) * Math.pow(2, j);\n }\n colorRow += pad(colorNum.toString(16));\n colorList.unshift(colorRow);\n }\n\n var code = \"b'\" + colorList.join('') + \"'\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const mixbot_display_get_screen_pixel = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var code = 'onboard_matrix.screenbright()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const mixbot_display_get_ambientbright = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var code = 'onboard_matrix.ambientbright()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const mixbot_display_bright_screen = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var code = 'onboard_matrix.screenbright(' + x + ')\\n';\n return code;\n}\n\nexport const mixbot_display_rotate = function (a, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_matrix'] = \"from \" + version + \" import onboard_matrix\";\n var op = a.getFieldValue(\"OP\");\n var code = 'onboard_matrix.direction(' + op + ')\\n';\n return code;\n}\n\nexport const bitbot_display_image_create = function (block, generator) {\n var colours = {\n \"#000000\": \"0\",\n \"#ff0000\": \"1\"\n }\n function pad(num) {\n\n if (num.length == 1) {\n return '\\\\x0' + num + '\\\\x00';\n }\n if (num.length == 2) {\n return '\\\\x' + num + '\\\\x00';\n }\n if (num.length == 3) {\n return '\\\\x' + num[1] + num[2] + '\\\\x0' + num[0];\n }\n }\n let colorList = [];\n for (let i = 0; i < 12; i++) {\n let colorRow = '';\n let colorNum = 0;\n for (let j = 0; j < 12; j++) {\n colorNum += Number(colours[block.getFieldValue((11 - i) + '-' + j)]) * Math.pow(2, j);\n }\n colorRow += pad(colorNum.toString(16));\n colorList.unshift(colorRow);\n }\n\n var code = \"b'\" + colorList.join('') + \"'\";\n return [code, generator.ORDER_ATOMIC];\n}\n\n//mixgo_nova onboard tft below:\nexport const onboard_tft_show_image = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_tft.image(\" + data + \", color=0xffff)\\n\";\n return code;\n}\n\nexport const onboard_tft_show_image_xy = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n if (color.slice(0, 2) == \"0x\") {\n var code = \"onboard_tft.image(\" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',color=' + color + \")\\n\";\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = \"onboard_tft.image(\" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',color=0x' + rgb565.toString(16) + \")\\n\";\n }\n return code;\n}\n\nexport const onboard_tft_show_image_or_string_delay = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);\n var op = this.getFieldValue('center');\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n if (color.slice(0, 2) == \"0x\") {\n var code = \"onboard_tft.shows(\" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ',color=' + color + \")\\n\";\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = \"onboard_tft.shows(\" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ',color=0x' + rgb565.toString(16) + \")\\n\";\n }\n return code;\n}\n\nexport const onboard_tft_show_frame_string = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_tft\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_tft.frame(\" + data + \",color=0xffff)\\n\";\n return code;\n}\n\nexport const onboard_tft_show_frame_string_delay = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n if (color.slice(0, 2) == \"0x\") {\n var code = \"onboard_tft.frame(\" + data + ',size = ' + size + ',delay = ' + time + ',color=' + color + \")\\n\";\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = \"onboard_tft.frame(\" + data + ',size = ' + size + ',delay = ' + time + ',color=0x' + rgb565.toString(16) + \")\\n\";\n }\n return code;\n}\n\nexport const onboard_tft_scroll_string = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_oled'] = \"from \" + version + \" import onboard_tft\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_tft.scroll(\" + data + \",color=0xffff)\\n\";\n return code;\n}\n\nexport const onboard_tft_scroll_string_delay = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);\n var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n if (color.slice(0, 2) == \"0x\") {\n var code = \"onboard_tft.scroll(\" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ',color=' + color + \")\\n\";\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = \"onboard_tft.scroll(\" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ',color=0x' + rgb565.toString(16) + \")\\n\";\n }\n return code;\n}\n\nexport const onboard_tft_display_shape_rect = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);\n var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);\n var w = generator.valueToCode(block, 'w', generator.ORDER_ATOMIC);\n var h = generator.valueToCode(block, 'h', generator.ORDER_ATOMIC);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var shape = block.getFieldValue('shape');\n if (color.slice(0, 2) == \"0x\") {\n var code = 'onboard_tft.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', ' + color + ')\\n' + 'onboard_tft.show()\\n';\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = 'onboard_tft.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', 0x' + rgb565.toString(16) + ')\\n' + 'onboard_tft.show()\\n';\n }\n return code;\n}\n\nexport const onboard_tft_display_hvline = function (block, generator) { //水平线\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);\n var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);\n var var_length = generator.valueToCode(block, 'length', generator.ORDER_ATOMIC);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var hv = block.getFieldValue('dir_h_v');\n if (color.slice(0, 2) == \"0x\") {\n var code = 'onboard_tft.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', ' + color + ')\\n' + 'onboard_tft.show()\\n';\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = 'onboard_tft.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', 0x' + rgb565.toString(16) + ')\\n' + 'onboard_tft.show()\\n';\n }\n return code;\n}\n\nexport const onboard_tft_display_line = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var x1 = generator.valueToCode(block, 'x1', generator.ORDER_ATOMIC);\n var y1 = generator.valueToCode(block, 'y1', generator.ORDER_ATOMIC);\n var x2 = generator.valueToCode(block, 'x2', generator.ORDER_ATOMIC);\n var y2 = generator.valueToCode(block, 'y2', generator.ORDER_ATOMIC);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n if (color.slice(0, 2) == \"0x\") {\n var code = 'onboard_tft.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', ' + color + ')\\n' + 'onboard_tft.show()\\n';\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = 'onboard_tft.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', 0x' + rgb565.toString(16) + ')\\n' + 'onboard_tft.show()\\n';\n }\n return code;\n}\n\nexport const onboard_tft_clear = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var code = 'onboard_tft.fill(0)\\n' + 'onboard_tft.show()\\n';\n return code;\n}\n\nexport const onboard_tft_shift = function (a, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var op = a.getFieldValue(\"OP\");\n var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);\n var code = 'onboard_tft.' + op + '(' + value + ')\\n';\n return code;\n}\n\nexport const onboard_tft_get_pixel = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);\n var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);\n var code = 'hex(onboard_tft.pixel(int(' + value_x + '), int(' + value_y + ')))';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const onboard_tft_bright_point = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n if (color.slice(0, 2) == \"0x\") {\n var code = 'onboard_tft.pixel(int(' + x + '), int(' + y + '), ' + color + \")\\n\" + 'onboard_tft.show()\\n';\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = 'onboard_tft.pixel(int(' + x + '), int(' + y + '), 0x' + rgb565.toString(16) + \")\\n\" + 'onboard_tft.show()\\n';\n }\n return code;\n}\n\nexport const onboard_tft_get_screen_pixel = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var code = 'onboard_tft.get_brightness()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const onboard_tft_bright_screen = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var code = 'onboard_tft.set_brightness(' + x + ')\\n';\n return code;\n}\n\nexport const onboard_tft_fill = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT);\n if (color.slice(0, 2) == \"0x\") {\n var code = 'onboard_tft.fill(' + color + ')\\nonboard_tft.show()\\n';\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = 'onboard_tft.fill(0x' + rgb565.toString(16) + ')\\nonboard_tft.show()\\n';\n }\n return code;\n}\n\nexport const onboard_tft_clock_init = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_Clock'] = \"from \" + version + \" import Clock\";\n var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);\n var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n if (color.slice(0, 2) == \"0x\") {\n var code = sub + \"=Clock(\" + x + ',' + y + ',' + size + ',' + color + \")\\n\";\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = sub + \"=Clock(\" + x + ',' + y + ',' + size + ',0x' + rgb565.toString(16) + \")\\n\";\n }\n return code;\n}\n\nexport const onboard_tft_clock_get_rtctime = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_Clock'] = \"from \" + version + \" import Clock\";\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);\n var code = sub + \".set_rtctime()\\n\";\n return code;\n}\n\nexport const onboard_tft_clock_set_time = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_Clock'] = \"from \" + version + \" import Clock\";\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);\n var h = generator.valueToCode(this, 'h', generator.ORDER_ASSIGNMENT);\n var m = generator.valueToCode(this, 'm', generator.ORDER_ASSIGNMENT);\n var s = generator.valueToCode(this, 's', generator.ORDER_ASSIGNMENT);\n var code = sub + \".set_time(\" + h + ',' + m + ',' + s + \")\\n\";\n return code;\n}\n\nexport const onboard_tft_clock_draw = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_Clock'] = \"from \" + version + \" import Clock\";\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);\n var code = sub + \".draw_clock()\\n\";\n return code;\n}\n\nexport const onboard_tft_clock_clear = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_Clock'] = \"from \" + version + \" import Clock\";\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n if (color.slice(0, 2) == \"0x\") {\n var code = sub + \".clear(\" + color + \")\\n\";\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = sub + \".clear(0x\" + rgb565.toString(16) + \")\\n\";\n }\n return code;\n}\n\nexport const onboard_tft_display_shape_circle = function (block, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_tft'] = \"from \" + version + \" import onboard_tft\";\n var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);\n var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);\n var R = generator.valueToCode(block, 'r', generator.ORDER_ATOMIC);\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var shape = block.getFieldValue('shape');\n if (color.slice(0, 2) == \"0x\") {\n var code = 'onboard_tft.ellipse(' + x + ', ' + y + ', ' + R + ', ' + R + ', ' + color + ',' + shape + ')\\n' + 'onboard_tft.show()\\n';\n } else {\n const rgbValues = color.match(/\\d+/g);\n const r = parseInt(rgbValues[0]);\n const g = parseInt(rgbValues[1]);\n const b = parseInt(rgbValues[2]);\n var rgb = \"0x\" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, \"0\");\n var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;\n var code = 'onboard_tft.ellipse(' + x + ', ' + y + ', ' + R + ', ' + R + ', 0x' + rgb565.toString(16) + ',' + shape + ')\\n' + 'onboard_tft.show()\\n';\n }\n return code;\n}\n\nexport const draw_pointer = function(_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_'+version+'_onboard_matrix'] = \"from \"+version+\" import onboard_matrix\";\n var angle = generator.valueToCode(this, 'angle', generator.ORDER_ASSIGNMENT);\n var code = \"onboard_matrix.pointern(angle=\" + angle + \")\\n\";\n return code;\n}","export const factory_from_import = function (_, generator) {\n var path = this.getFieldValue('path');\n var module = this.getFieldValue('module');\n generator.definitions_['import_' + path + '_' + module] = 'from ' + path + ' import ' + module;\n return '';\n}\n\nexport const factory_import = function (_, generator) {\n var module = this.getFieldValue('module');\n generator.definitions_['import_' + module] = 'import ' + module;\n return '';\n}\n\nexport const factory_function_noreturn = function (_, generator) {\n var NAME = this.getFieldValue('NAME');\n var code = new Array(this.itemCount_);\n for (var n = 0; n < this.itemCount_; n++) {\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || '';\n }\n return NAME + '(' + code.join(', ') + ')\\n';\n}\n\nexport const factory_function_return = function (_, generator) {\n var NAME = this.getFieldValue('NAME');\n var code = new Array(this.itemCount_);\n for (var n = 0; n < this.itemCount_; n++) {\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || '';\n }\n return [NAME + '(' + code.join(', ') + ')', generator.ORDER_ATOMIC];\n}\n\nexport const factory_declare = function () {\n var TYPE = this.getFieldValue('TYPE');\n var NAME = this.getFieldValue('NAME');\n return NAME + ' = ' + TYPE + '()\\n';\n}\n\nexport const factory_callMethod_noreturn = function (_, generator) {\n var NAME = this.getFieldValue('NAME');\n var METHOD = this.getFieldValue('METHOD');\n var code = new Array(this.itemCount_);\n for (var n = 0; n < this.itemCount_; n++) {\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || '';\n }\n return NAME + '.' + METHOD + '(' + code.join(', ') + ')\\n';\n}\n\nexport const factory_callMethod_return = function (_, generator) {\n var NAME = this.getFieldValue('NAME');\n var METHOD = this.getFieldValue('METHOD');\n var code = new Array(this.itemCount_);\n for (var n = 0; n < this.itemCount_; n++) {\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || '';\n }\n return [NAME + '.' + METHOD + '(' + code.join(', ') + ')', generator.ORDER_ATOMIC];\n}\n\nexport const factory_block = function () {\n var VALUE = this.getFieldValue('VALUE');\n //if(!(VALUE.charAt(VALUE.length-1)==\";\")){\n //VALUE=VALUE+';';\n //}\n return VALUE + '\\n';\n}\n\nexport const factory_block_return = function (_, generator) {\n var VALUE = this.getFieldValue('VALUE');\n return [VALUE, generator.ORDER_ATOMIC];\n}\n\nexport const factory_block_with_textarea = function () {\n var VALUE = this.getFieldValue('VALUE');\n //if(!(VALUE.charAt(VALUE.length-1)==\";\")){\n //VALUE=VALUE+';';\n //}\n return VALUE + '\\n';\n}\n\nexport const factory_block_return_with_textarea = function (_, generator) {\n var VALUE = this.getFieldValue('VALUE');\n return [VALUE, generator.ORDER_ATOMIC];\n}\n\nexport const folding_block = function (_, generator) {\n var comment = this.getFieldValue('peien');\n comment = \"#\" + comment;\n var branch = generator.statementToCode(this, 'DO');\n branch = branch.replace(/(^\\s*)|(\\s*$)/g, \"\");//去除两端空格\n branch = branch.replace(/(\\n\\s\\s\\s\\s)/g, \"\\n\");//去除换行时空格\n return comment + '\\n' + branch + '\\n';\n}","import * as Blockly from 'blockly/core';\n\n// ok\nexport const inout_highlow = function (_, generator) {\n // Boolean values HIGH and LOW.\n var code = (this.getFieldValue('BOOL') == 'HIGH') ? '1' : '0';\n return [code, generator.ORDER_ATOMIC];\n}\n\n// ok\nexport const inout_digital_write = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);\n var code = \"\";\n code += dropdown_pin + '.value(' + dropdown_stat + ')\\n'\n return code;\n}\n\n// ok\nexport const inout_digital_read = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = \"\";\n code = dropdown_pin + '.value()';\n return [code, generator.ORDER_ATOMIC];\n}\n\n// ok\nexport const inout_pwm_analog_write = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n //var dropdown_stat = this.getFieldValue('STAT');\n var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);\n //generator.setups_['setup_output'+dropdown_pin] = 'pinMode('+dropdown_pin+', OUTPUT);';\n var code = dropdown_pin + '.duty_u16(' + value_num + ')\\n';\n return code;\n}\n\n// ok\nexport const inout_analog_write = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n //var dropdown_stat = this.getFieldValue('STAT');\n var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);\n //generator.setups_['setup_output'+dropdown_pin] = 'pinMode('+dropdown_pin+', OUTPUT);';\n var code = dropdown_pin + '.write(' + value_num + ')\\n';\n return code;\n}\n\n// ok\nexport const inout_analog_write_set = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = dropdown_pin + '.set_analog_' + key + '(' + value_num + ')\\n';\n //var code = 'pin' + dropdown_pin + '.set_analog_period(' + value_num + ')\\n';\n return code;\n}\n\nexport const inout_pwm_analog_write_set_freq = function (_, generator) {\n //generator.definitions_['import_machine_Pin'] = \"from machine import Pin\";\n // generator.definitions_['import_machine_PWM'] = \"from machine import PWM\";\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);\n var code = dropdown_pin + '.freq(' + value_num + ')\\n';\n //var code = 'pin' + dropdown_pin + '.set_analog_period(' + value_num + ')\\n';\n return code;\n}\n\n// ok\nexport const inout_analog_read = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n //generator.setups_['setup_input_'+dropdown_pin] = 'pinMode('+dropdown_pin+', INPUT);';\n var code = dropdown_pin + '.read_u16()';\n return [code, generator.ORDER_ATOMIC];\n}\n\n// ok\nexport const inout_pin_pressed = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var pin = generator.valueToCode(this, 'pin', generator.ORDER_ATOMIC);\n var code = pin + '.read()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const inout_pin_attachInterrupt = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var dropdown_mode = this.getFieldValue('mode');\n var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);\n var code = 'machine.Pin(' + dropdown_pin + ').irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\\n'\n //var funcName = 'attachInterrupt_func_' + dropdown_pin;\n //var branch = generator.statementToCode(this, 'DO') || generator.PASS;\n //var code2 = 'def' + ' ' + funcName + '(p):\\n' + branch + '\\n';\n //generator.setups_[funcName] = code2;\n return code;\n}\n\nexport const inout_digital_init = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var pin_obj = this.getFieldValue('PIN_OBJ') || 'pin#';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var dropdown_mode = this.getFieldValue('MODE');\n var varName = (pin_obj == 'pin#') ? 'pin' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);\n var code = varName + ' = machine.Pin(' + dropdown_pin + ', ' + dropdown_mode + ')\\n';\n return code;\n}\n\nexport const inout_pwm_analog_write_init = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var pin_obj = this.getFieldValue('PIN_OBJ') || 'pwm#';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var varName = (pin_obj == 'pwm#') ? 'pwm' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);\n var code = varName + ' = machine.PWM(machine.Pin(' + dropdown_pin + '))\\n';\n return code;\n}\n\n// ok\nexport const inout_analog_write_init = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var pin_obj = this.getFieldValue('PIN_OBJ') || 'dac#';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var varName = (pin_obj == 'dac#') ? 'dac' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);\n var code = varName + ' = machine.DAC(machine.Pin(' + dropdown_pin + '))\\n';\n return code;\n}\n\nexport const inout_analog_read_init = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var pin_obj = this.getFieldValue('PIN_OBJ') || 'adc#';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var varName = (pin_obj == 'adc#') ? 'adc' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);\n var code = varName + ' = machine.ADC(machine.Pin(' + dropdown_pin + '))\\n';\n return code;\n}\n\nexport const inout_analog_atten = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n //var dropdown_stat = this.getFieldValue('STAT');\n var value_atten = this.getFieldValue('atten')\n var code = dropdown_pin + '.atten(' + value_atten + ')\\n';\n return code;\n}\n\n// ok\nexport const inout_pin_pressed_init = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var pin_obj = this.getFieldValue('PIN_OBJ') || 'tc#';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var varName = (pin_obj == 'tc#') ? 'tc' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);\n var code = varName + ' = machine.TouchPad(machine.Pin(' + dropdown_pin + '))\\n';\n return code;\n}","export const iot_wifi_connect = function (_, generator) {\n generator.definitions_['import_mixiot'] = \"import mixiot\";\n var username = generator.valueToCode(this, 'WIFINAME', generator.ORDER_ATOMIC);\n var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);\n var code = 'mixiot.wlan_connect(' + username + ',' + password + ')\\n';\n return code;\n}\n\nexport const iot_onenet_connect = function (_, generator) {\n generator.definitions_['import_onenet'] = \"import onenet\";\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var client = generator.valueToCode(this, 'CLIENT', generator.ORDER_ATOMIC);\n var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);\n var username = generator.valueToCode(this, 'USERNAME', generator.ORDER_ATOMIC);\n var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);\n var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);\n var subscribe = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT) || 'None';\n var code = v + ' = onenet.init_MQTT_client(' + client + ', ' + server + ', ' + username + ', ' + password + ', ' + topic + ', ' + subscribe + ')\\n';\n return code;\n}\n\nexport const iot_onenet_disconnect = function (_, generator) {\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n generator.definitions_['import_onenet'] = \"import onenet\";\n var code = v + '.do_disconnect()\\n';\n return code;\n}\n\nexport const iot_onenet_publish_dict = function (_, generator) {\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var d = generator.valueToCode(this, 'DICT', generator.ORDER_ATOMIC);\n var check = this.getFieldValue(\"is_print\") == 'TRUE' ? 'True' : 'False';\n generator.definitions_['import_onenet'] = \"import onenet\";\n var code = v + '.publish(' + d + ', is_print = ' + check + ')\\n';\n return code;\n}\n\nexport const iot_onenet_check = function (_, generator) {\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n generator.definitions_['import_onenet'] = \"import onenet\";\n var code = v + '.check_msg()\\n';\n return code;\n}\n\nexport const iot_onenet_publish = function (_, generator) {\n // Create a list with any number of elements of any type.\n\n //var size=window.parseFloat(this.getFieldValue('SIZE'));\n generator.definitions_['import_onenet'] = \"import onenet\";\n var ck = new Array(this.itemCount_);\n var cv = new Array(this.itemCount_);\n var ct = new Array(this.itemCount_);\n\n var default_value = '0';\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n\n for (let n = 0; n < this.itemCount_; n++) {\n var keyName = this.getFieldValue('KEY' + n);\n ck[n] = keyName;\n }\n for (let n = 0; n < this.itemCount_; n++) {\n cv[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || default_value;\n }\n var code = v + \".publish({\";\n for (let n = 0; n < this.itemCount_; n++) {\n ct[n] = ck[n] + ': ' + cv[n];\n }\n //var code = \"c.publish('$dp', pubData(\"+ '{' + code.join(', ') + '})\\n';\n //var code =''+varName+'['+size+\"]\"+'='+ '{' + code.join(', ') + '}\\n';\n //generator.setups_['setup_lists'+varName] = code;\n code = code + ct.join(', ') + \"})\\n\";\n return code;\n}\n\nexport const iot_mixio_connect = function (_, generator) {\n generator.definitions_['import_mixiot'] = \"import mixiot\";\n generator.definitions_['import_machine'] = \"import machine\";\n generator.definitions_['import_ubinascii_hexlify'] = \"from ubinascii import hexlify\";\n var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);\n var username = generator.valueToCode(this, 'USERNAME', generator.ORDER_ATOMIC);\n var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);\n var project = generator.valueToCode(this, 'PROJECT', generator.ORDER_ATOMIC);\n //var subscribe = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT) || '0';\n var a = \"'\" + username.replace(\"'\", \"\").replace(\"'\", \"\") + \"/\" + project.replace(\"'\", \"\").replace(\"'\", \"\") + \"/'\"\n var code = 'MQTT_USR_PRJ = ' + a + '\\n' + 'mqtt_client = mixiot.init_MQTT_client(' + server + ', ' + username + ', ' + password + ', MQTT_USR_PRJ)\\n';\n return code;\n}\n\nexport const IOT_MIXIO_PUBLISH = function (_, generator) {\n var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);\n var msg = generator.valueToCode(this, 'MSG', generator.ORDER_ATOMIC);\n generator.definitions_['import_mixiot'] = \"import mixiot\";\n var code = 'mqtt_client.publish(MQTT_USR_PRJ + ' + topic + ', ' + msg + ')\\n';\n return code;\n}\n\nexport const IOT_MIXIO_SUBSCRIBE = function (_, generator) {\n var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);\n var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);\n generator.definitions_['import_mixiot'] = \"import mixiot\";\n var code = 'mqtt_client.set_callback(' + topic + ',' + method + ', MQTT_USR_PRJ)\\n';\n code += 'mqtt_client.subscribe(MQTT_USR_PRJ + ' + topic + ')\\n';\n return code;\n}\n\nexport const iot_mixio_disconnect = function (_, generator) {\n generator.definitions_['import_mixiot'] = \"import mixiot\";\n var code = 'mqtt_client.disconnect(MQTT_USR_PRJ)\\n';\n return code;\n}\n\nexport const iot_mixio_connect_only = function (_, generator) {\n generator.definitions_['import_mixiot'] = \"import mixiot\";\n var code = 'mqtt_client.connect()\\n';\n return code;\n}\n\nexport const iot_mixio_check = function (_, generator) {\n generator.definitions_['import_mixiot'] = \"import mixiot\";\n var code = 'mqtt_client.check_msg()\\n';\n return code;\n}\n\nexport const iot_mixio_format_topic = function (_, generator) {\n var code = 'mqtt_client.decode(\"utf-8\").split(\"/\")[-1]';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const iot_mixio_format_msg = function (_, generator) {\n var code = 'mqtt_client.decode(\"utf-8\")';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const IOT_FORMATTING = function (_, generator) {\n generator.definitions_['import_mixpy'] = \"import mixpy\";\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = 'mixpy.format_content(' + v + ', mqtt_client.client_id)';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const IOT_FORMAT_STRING = function (_, generator) {\n generator.definitions_['import_mixpy'] = \"import mixpy\";\n var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = 'mixpy.format_str(' + v + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE = function (_, generator) {\n var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);\n // var port = '1883';\n var share_code = generator.valueToCode(this, 'KEY', generator.ORDER_ATOMIC);\n generator.definitions_['import_mixiot'] = \"import mixiot\";\n generator.definitions_['import_machine'] = \"import machine\";\n generator.definitions_['import_urequests'] = \"import urequests\";\n generator.definitions_['import_ubinascii_hexlify'] = \"from ubinascii import hexlify\";\n generator.definitions_['import_mixpy_analyse_sharekey'] = \"from mixpy import analyse_sharekey\";\n // var mac_address = 'str(binascii.hexlify(wifi.radio.mac_address))[2:14]'\n // var socket_pool = 'socketpool.SocketPool(wifi.radio)'\n // var ssl_context = 'ssl.create_default_context()'\n var code = 'sk = analyse_sharekey(\\'http://'+server.substring(1, server.length-1)+'/mixio-php/sharekey.php?sk=' + share_code + '\\')\\n'+\n 'MQTT_USR_PRJ = sk[0]+\\'/\\'+sk[1]+\\'/\\'\\n' +\n 'mqtt_client = mixiot.init_MQTT_client(' + server + ', sk[0], sk[2]' + ', MQTT_USR_PRJ)\\n';\n return code;\n}\n\nexport const iot_mixly_key = function (_, generator) {\n var code = this.getFieldValue('VISITOR_ID');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE = function (_, generator) {\n generator.definitions_['import_mixiot'] = \"import mixiot\";\n generator.definitions_['import_machine'] = \"import machine\";\n generator.definitions_['import_ubinascii_hexlify'] = \"from ubinascii import hexlify\";\n var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);\n // var port = '1883';\n var username = '\"MixIO_public\"';\n var password = '\"MixIO_public\"';\n var mixly_code = generator.valueToCode(this, 'KEY', generator.ORDER_ATOMIC);\n var a = '\"MixIO/' + mixly_code + '/default/\"'\n // var mac_address = 'str(binascii.hexlify(wifi.radio.mac_address))[2:14]'\n // var socket_pool = 'socketpool.SocketPool(wifi.radio)'\n // var ssl_context = 'ssl.create_default_context()'\n var code = 'MQTT_USR_PRJ = ' + a + '\\n' + 'mqtt_client = mixiot.init_MQTT_client(' + server + ', ' + username + ', ' + password + ', MQTT_USR_PRJ)\\n';\n return code;\n}\n\nexport const IOT_EMQX_PING = function (_, generator) {\n generator.definitions_['import_mixiot'] = \"import mixiot\";\n var code = 'mqtt_client.pingSync()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const IOT_MIXIO_NTP = function (_, generator) {\n generator.definitions_['import_mixiot'] = \"import mixiot\";\n var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);\n var code = 'mixiot.ntp(' + addr + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const iot_client_onboard = function (_, generator) {\n var code = 'mqtt_client';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const iot_http_client = function (_, generator) {\n generator.definitions_['import_debugnet'] = \"import debugnet\";\n var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = 'HTTP_client = debugnet.request(\"GET\",' + addr + ',debug=' + key + ')\\n';\n return code;\n}\n\nexport const iot_http_data = function (_, generator) {\n generator.definitions_['import_debugnet'] = \"import debugnet\";\n var key = this.getFieldValue('key');\n var code = 'HTTP_client.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const iot_mqtt_client = function (_, generator) {\n generator.definitions_['import_debugnet'] = \"import debugnet\";\n var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key2');\n var code = 'mqtt_client = debugnet.init_MQTT_client(' + addr + ', \"MixIO_public\", \"MixIO_public\", \"MixIO/3QBAGKRL/default/\",debug=' + key + ')\\n';\n code += 'mqtt_client.subscribe(\"$SYS/hello\")\\n';\n return code;\n}\n\nexport const iot_mqtt_data = function (_, generator) {\n generator.definitions_['import_mixiot'] = \"import mixiot\";\n var key = this.getFieldValue('key');\n var code = 'mqtt_client.' + key;\n return [code, generator.ORDER_ATOMIC];\n}","import * as Blockly from 'blockly/core';\n\nexport const network_init = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var mode = this.getFieldValue('mode');\n return \"\" + varName + \" = network.WLAN(network.\" + mode + \"_IF);\\n\";\n}\n\n// export const network_connect = function() {\n// generator.definitions_['import_network'] = \"import network\";\n// // generator.setups_['class_wlan'] ='wlan.active(True)\\n';\n// var varName =generator.valueToCode(this, 'VAR',generator.ORDER_ATOMIC);\n// var id = generator.valueToCode(this, 'id', generator.ORDER_ATOMIC);\n// var password = generator.valueToCode(this, 'password', generator.ORDER_ATOMIC);\n// return \"if not \"+varName+\".isconnected():\\n\"+\n// \" \"+varName+\".connect(\"+id+\",\"+password+\")\\n\"+\n// \" while not \"+varName+\".isconnected():\\n\"+\n// \" pass\\n\";\n// }\n\nexport const network_connect = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n // generator.setups_['class_wlan'] ='wlan.active(True)\\n';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var id = generator.valueToCode(this, 'id', generator.ORDER_ATOMIC);\n var password = generator.valueToCode(this, 'password', generator.ORDER_ATOMIC);\n return \"\" + varName + \".connect(\" + id + \",\" + password + \")\\n\"\n}\n\nexport const network_wifi_connect = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = varName + '.isconnected()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const network_get_connect = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var mode = this.getFieldValue('mode');\n var code = \"\" + varName + \".ifconfig()[\" + mode + \"]\";\n return [code, generator.ORDER_ATOMIC]\n}\n\nexport const network_stop = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n return \"\" + varName + \".disconnect()\\n\";\n}\n\nexport const network_open = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var op = this.getFieldValue('op');\n var code = \"\" + varName + \".active(\" + op + \")\\n\";\n return code;\n}\n\nexport const network_is_active = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = \"\" + varName + \".active()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const network_get_wifi = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var op = this.getFieldValue('op');\n var code = \"\" + varName + \".config('\" + op + \"')\";\n return [code, generator.ORDER_ATOMIC]\n}\n\nexport const network_ap_connect = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n // generator.setups_['class_wlan'] ='ap = network.WLAN(network.AP_IF)\\n'+'ap.active(True)\\n';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var essid = generator.valueToCode(this, 'essid', generator.ORDER_ATOMIC);\n var channel = generator.valueToCode(this, 'channel', generator.ORDER_ATOMIC);\n return \"\" + varName + \".config(essid = \" + essid + \", channel = \" + channel + \")\\n\";\n}\n\nexport const network_scan = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = \"\" + varName + \".scan()\";\n return [code, generator.ORDER_ATOMIC];\n\n}\n\nexport const network_server = function (_, generator) {\n generator.definitions_['import_server_*'] = 'from server import *';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n // generator.setups_['class_wlan'] ='SSID=\"ying\"\\n'+'PASSWORD=\"201411132040\"\\n';\n return 'if not ' + varName + '.isconnected():\\n'\n + ' connectWifi(SSID, PASSWORD)\\n'\n + 'ip=' + varName + '.ifconfig()[0]\\n'\n + 'print(ip)\\n'\n + 'time.sleep(1)\\n'\n + 'DATA=listenData()\\n'\n}\n\nexport const network_socket_init = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n generator.definitions_['import_socket'] = \"import socket\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var mode = this.getFieldValue('mode');\n if (mode == 'UDP') {\n mode = 'socket.SOCK_DGRAM'\n }\n else if (mode == 'TCP') {\n mode = 'socket.SOCK_STREAM'\n }\n return \"\" + varName + \" = socket.socket(socket.AF_INET,\" + mode + \")\\n\";\n}\n\nexport const network_socket_bind = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n generator.definitions_['import_socket'] = \"import socket\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);\n return \"\" + varName + \".bind(\" + address + \")\\n\";\n}\n\nexport const network_socket_connect = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n generator.definitions_['import_socket'] = \"import socket\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);\n return \"\" + varName + \".connect(socket.getaddrinfo\" + address + \"[0][-1])\\n\";\n}\n\nexport const network_socket_listen = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n generator.definitions_['import_socket'] = \"import socket\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var queue = generator.valueToCode(this, 'queue', generator.ORDER_ATOMIC);\n return \"\" + varName + \".listen(\" + queue + \")\\n\";\n}\n\nexport const network_socket_accept = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n generator.definitions_['import_socket'] = \"import socket\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = \"\" + varName + \".accept()\";\n return [code, generator.ORDER_ASSIGNMENT];\n}\n\nexport const network_socket_receive = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n generator.definitions_['import_socket'] = \"import socket\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ATOMIC);\n var code = \"\" + varName + \".recv(\" + size + \")\";\n return [code, generator.ORDER_ASSIGNMENT];\n}\n\nexport const network_socket_send = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n generator.definitions_['import_socket'] = \"import socket\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var content = generator.valueToCode(this, 'content', generator.ORDER_ATOMIC);\n var code = \"\" + varName + \".send(\" + content + \")\\n\";\n return code;\n}\n\nexport const network_socket_receive_from = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n generator.definitions_['import_socket'] = \"import socket\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var size = generator.valueToCode(this, 'size', generator.ORDER_ATOMIC);\n var code = \"\" + varName + \".recvfrom(\" + size + \")\";\n return [code, generator.ORDER_ASSIGNMENT];\n}\n\nexport const network_socket_send_to = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n generator.definitions_['import_socket'] = \"import socket\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var content = generator.valueToCode(this, 'content', generator.ORDER_ATOMIC);\n var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);\n var code = \"\" + varName + \".sendto(\" + content + \",\" + address + \")\\n\";\n return code;\n}\n\nexport const network_socket_close = function (_, generator) {\n generator.definitions_['import_network'] = \"import network\";\n generator.definitions_['import_socket'] = \"import socket\";\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = \"\" + varName + \".close()\\n\";\n return code;\n}\n\nexport const requests_get = function (_, generator) {\n generator.definitions_.import_requests = \"import requests\";\n var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),\n Blockly.Variables.NAME_TYPE);\n var str = generator.valueToCode(this, 'DOMAIN', generator.ORDER_ATOMIC);\n var code = varName + '= ' + 'requests.get(' + str + ')\\n';\n\n return code;\n}\n\nexport const requests_attribute = function (_, generator) {\n generator.definitions_.import_requests = \"import requests\";\n var varName = generator.valueToCode(this, 'VAL', generator.ORDER_ASSIGNMENT) || '0';\n var attr = this.getFieldValue('ATTR');\n var code = varName + \".\" + attr;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const requests_method = function (_, generator) {\n generator.definitions_.import_requests = \"import requests\";\n var method = this.getFieldValue('DIR');\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = \"requests.\" + method + \"(\" + str + ')\\n';\n return code;\n}\n\nexport const ntptime_time = function (_, generator) {\n generator.definitions_['import_ntptime'] = \"import ntptime\";\n var str = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n var code = \"ntptime.time(host=\" + str + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ntptime_address = function (_, generator) {\n var code = \"'\" + this.getFieldValue('op') + \"'\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const requests_get2 = function (_, generator) {\n generator.definitions_['import_urequests'] = \"import urequests\";\n var dropdown_type = this.getFieldValue('TYPE');\n var str = generator.valueToCode(this, 'URL', generator.ORDER_ATOMIC);\n var code = 'urequests.' + dropdown_type + '(' + str + ')';\n return [code, generator.ORDER_ATOMIC];\n\n};\n\nexport const requests_attribute2 = function (_, generator) {\n generator.definitions_['import_urequests'] = \"import urequests\";\n var varName = generator.valueToCode(this, 'VAL', generator.ORDER_ASSIGNMENT) || '0';\n var attr = this.getFieldValue('ATTR');\n var code = varName + \".\" + attr;\n return [code, generator.ORDER_ATOMIC];\n};\n\nexport const requests_post = function (_, generator) {\n generator.definitions_['import_urequests'] = \"import urequests\";\n var dropdown_type = this.getFieldValue('TYPE');\n var str = generator.valueToCode(this, 'URL', generator.ORDER_ATOMIC);\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n var code = 'urequests.' + dropdown_type + '(' + str + ',data=' + data + ')';\n return [code, generator.ORDER_ATOMIC];\n\n};\n\nexport const educore_wifi_connect = function (_, generator) {\n generator.definitions_['import_educore_wifi'] = \"from educore import wifi\";\n var username = generator.valueToCode(this, 'WIFINAME', generator.ORDER_ATOMIC);\n var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);\n var timeout = generator.valueToCode(this, 'TIMEOUT', generator.ORDER_ATOMIC);\n var code = 'wifi.connect(ssid='+username+', psd='+password+', timeout='+timeout+')\\n';\n return code;\n}\n\nexport const educore_mqtt_connect = function (_, generator) {\n generator.definitions_['import_educore_mqttclient'] = \"from educore import mqttclient\";\n var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);\n var port = generator.valueToCode(this, 'PORT', generator.ORDER_ATOMIC);\n var client_id = generator.valueToCode(this, 'CLIENT_ID', generator.ORDER_ATOMIC);\n var username = generator.valueToCode(this, 'USERNAME', generator.ORDER_ATOMIC);\n var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);\n // var a = \"'\" + username.replace(\"'\", \"\").replace(\"'\", \"\") + \"/\" + project.replace(\"'\", \"\").replace(\"'\", \"\") + \"/'\"\n // var code = 'MQTT_USR_PRJ = ' + a + '\\n' + 'mqtt_client = mixiot.init_MQTT_client(' + server + ', ' + username + ', ' + password + ', MQTT_USR_PRJ)\\n';\n var code = 'mqttclient.connect(server='+server+', port='+port+',client_id='+client_id+',user='+username+',psd='+password+')\\n'\n return code;\n}\n\nexport const educore_mqtt_subscribe_message = function (_, generator) {\n generator.definitions_['import_educore_mqttclient'] = \"from educore import mqttclient\";\n var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);\n var message = generator.valueToCode(this, 'MESSAGE', generator.ORDER_ATOMIC);\n var code = 'mqttclient.'+message+'(' + topic + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_mqtt_topic_subscribe = function (_, generator) {\n var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);\n var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);\n generator.definitions_['import_educore_mqttclient'] = \"from educore import mqttclient\";\n // var code = 'mqtt_client.set_callback(' + topic + ',' + method + ', MQTT_USR_PRJ)\\n';\n // code += 'mqtt_client.subscribe(MQTT_USR_PRJ + ' + topic + ')\\n';\n var code = 'mqttclient.received(topic='+topic+', callback='+method+')\\n';\n return code;\n}\n\nexport const educore_mqtt_topic_publish = function (_, generator) {\n generator.definitions_['import_educore_mqttclient'] = \"from educore import mqttclient\";\n var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);\n var msg = generator.valueToCode(this, 'MSG', generator.ORDER_ATOMIC);\n var code = 'mqtt_client.publish(topic=' + topic + ',content=' + msg + ')\\n';\n return code;\n}\n\nexport const educore_mqtt_connect_success = function (_, generator) {\n generator.definitions_['import_educore_mqttclient'] = \"from educore import mqttclient\";\n var code = 'mqtt_client.connescted()';\n return [code, generator.ORDER_ATOMIC];\n}","export const get_potential_num = function (_, generator) {\n generator.definitions_['from_nova_g1_import_ext_g1'] = 'from nova_g1 import ext_g1';\n var code = 'ext_g1.varistor()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const nova_g1_motor = function (_, generator) {\n generator.definitions_['from_nova_g1_import_ext_g1'] = 'from nova_g1 import ext_g1';\n var wheel = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var v = this.getFieldValue('direction');\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n var code = \"ext_g1.motor(\" + wheel + ',\"' + v + '\",' + speed + \")\\n\";\n return code;\n}\n\nexport const nova_g1_usb = function (_, generator) {\n generator.definitions_['from_nova_g1_import_ext_g1'] = 'from nova_g1 import ext_g1';\n var p = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var percent = generator.valueToCode(this, 'percent', generator.ORDER_ATOMIC);\n var code = \"ext_g1.usb_pwm(\" + p + ',' + percent + \")\\n\";\n return code;\n}\n\nexport const nova_g1_spk_en = function (_, generator) {\n generator.definitions_['from_nova_g1_import_ext_g1'] = 'from nova_g1 import ext_g1';\n var state = this.getFieldValue('state');\n var code = \"ext_g1.spk_en(\" + state + \")\\n\";\n return code;\n}","export const pe_g1_use_i2c_init = function (_, generator) {\n generator.definitions_['import_pe_g1'] = 'import pe_g1';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);\n var code = v + ' = pe_g1.PE_G1(' + iv + ')\\n';\n return code;\n}\n\nexport const pe_g1_battery_left = function (_, generator) {\n generator.definitions_['import_pe_g1'] = 'import pe_g1';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + '.read_bat()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const pe_g1_dc_motor = function (_, generator) {\n generator.definitions_['import_pe_g1'] = 'import pe_g1';\n var s = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var wheel = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var v = this.getFieldValue('direction');\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n var code = s + \".motor(\" + wheel + ',\"' + v + '\",' + speed + \")\\n\";\n return code;\n}\n\nexport const pe_g1_dc_motor_speed = function (_, generator) {\n generator.definitions_['import_pe_g1'] = 'import pe_g1';\n var s = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var wheel = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var v = 'NC';\n var code = s + \".motor(\" + wheel + ',\"' + v + '\"' + \")\\n\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const pe_g1_servo_set_angle = function (_, generator) {\n generator.definitions_['import_pe_g1'] = 'import pe_g1';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);\n var code = v + '.servo180(' + dropdown_pin + ',' + num + ')\\n';\n return code;\n}\n\nexport const pe_g1_servo_set_speed = function (_, generator) {\n generator.definitions_['import_pe_g1'] = 'import pe_g1';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);\n var code = v + '.servo360(' + dropdown_pin + ',' + num + ')\\n';\n return code;\n}\n\nexport const pe_g1_servo_get_angle = function (_, generator) {\n generator.definitions_['import_pe_g1'] = 'import pe_g1';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = v + '.servo180(' + dropdown_pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const pe_g1_servo_get_speed = function (_, generator) {\n generator.definitions_['import_pe_g1'] = 'import pe_g1';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = v + '.servo360(' + dropdown_pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}","export const pins_digital = function (_, generator) {\n var code = this.getFieldValue('PIN');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const pins_button = pins_digital;\nexport const pins_digital_pin = pins_digital;\nexport const pins_analog_pin = pins_digital;\nexport const pins_analog = pins_digital;\nexport const pins_pwm_pin = pins_digital;\nexport const pins_pwm = pins_digital;\nexport const pins_dac_pin = pins_digital;\nexport const pins_dac = pins_digital;\nexport const pins_touch_pin = pins_digital;\nexport const pins_touch = pins_digital;\nexport const espnow_channel = pins_digital;\nexport const pins_interrupt = pins_digital;\nexport const pins_serial = pins_digital;\nexport const pins_builtinimg = pins_digital;\nexport const pins_imglist = pins_digital;\nexport const pins_playlist = pins_digital;\nexport const pins_axis = pins_digital;\nexport const pins_exlcdh = pins_digital;\nexport const pins_exlcdv = pins_digital;\nexport const pins_brightness = pins_digital;\nexport const pins_tone_notes = pins_digital;\nexport const pins_radio_power = pins_digital;\nexport const pins_radio_datarate = pins_digital;\nexport const pins_one_more = pins_digital;\nexport const pins_digital_dot = pins_digital;","import { sensor_LTR308 } from './sensor_onboard';\n\nexport const sensor_mixgo_button_is_pressed = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);\n var code = 'mixgo.' + btn + '.is_pressed()';\n return [code, generator.ORDER_ATOMIC];\n}\n\n//ok\nexport const sensor_mixgo_button_was_pressed = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);\n var code = 'mixgo.' + btn + '.was_pressed()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_button_get_presses = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);\n var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n var code = 'mixgo.' + btn + '.get_presses(' + argument + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_button_attachInterrupt = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var dropdown_btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);\n var dropdown_mode = this.getFieldValue('mode');\n var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);\n var code = 'mixgo.' + dropdown_btn + '.irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\\n'\n return code;\n}\n\n//ok\nexport const sensor_mixgo_extern_button_is_pressed = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);\n var code = 'mixgo.Button(' + pin + ').is_pressed(' + dropdown_stat + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\n//ok\nexport const sensor_mixgo_extern_button_was_pressed = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);\n var code = 'mixgo.Button(' + pin + ').was_pressed(' + dropdown_stat + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_extern_button_get_presses = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n var code = 'mixgo.Button(' + pin + ').get_presses(' + argument + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_extern_button_attachInterrupt = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var dropdown_mode = this.getFieldValue('mode');\n var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);\n var code = 'mixgo.Button(' + pin + ').irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\\n'\n return code;\n}\n\n//ok\nexport const sensor_mpu9250_attachGestureInterrupt = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n var gesture = this.getFieldValue('gesture');\n var branch = generator.statementToCode(this, 'DO');\n var d = branch || generator.PASS;\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"mpu\")\n generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';\n var code = 'if ' + v + '.mpu9250_is_gesture(\"' + gesture + '\"):\\n' + d;\n return code;\n}\n\nexport const sensor_mpu9250_gesture = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n var gesture = this.getFieldValue('gesture');\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"mpu\")\n generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';\n var code = v + '.mpu9250_is_gesture(\"' + gesture + '\")';\n return [code, generator.ORDER_ATOMIC];\n}\n\n//ok\nexport const sensor_mpu9250_get_acceleration = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n var key = this.getFieldValue('key');\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"mpu\")\n generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';\n var code = v + '.mpu9250_get_' + key + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_adxl345_get_acceleration = function (_, generator) {\n generator.definitions_['import_adxl345'] = 'import adxl345';\n // generator.definitions_['import_machine'] = 'import machine';\n var key = this.getFieldValue('key');\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code;\n if (key == 'x') {\n code = v + '.readX()';\n } else if (key == 'y') {\n code = v + '.readY()';\n } else if (key == 'z') {\n code = v + '.readZ()';\n } else if (key == 'values') {\n code = v + '.readXYZ()';\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mpu9250_get_magnetic = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n var key = this.getFieldValue('key');\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"mpu\")\n generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';\n var code = v + '.mpu9250_magnetic_' + key + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mpu9250_get_gyro = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n var key = this.getFieldValue('key');\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"mpu\")\n generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';\n var code = v + '.mpu9250_gyro_' + key + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mpu9250_calibrate_compass = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n return '' + v + '.calibrate()\\n';\n}\n\nexport const sensor_mpu9250_temperature = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"mpu\")\n generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';\n return [v + '.mpu9250_get_temperature()', generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mpu9250_field_strength = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"compass\")\n generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';\n var compass = this.getFieldValue('compass');\n var a;\n if (compass == 'strength') {\n a = v + '.get_field_strength()';\n }\n else if (compass == 'heading') {\n a = v + '.heading()';\n }\n return [a, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_distance_hrsc04 = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n generator.setups_['class_hrsc04'] =\n 'class HCSR04:\\n' +\n ' def __init__(self, tpin=pin15, epin=pin14, spin=pin13):\\n' +\n ' self.trigger_pin = tpin\\n' +\n ' self.echo_pin = epin\\n' +\n ' self.sclk_pin = spin\\n' +\n '\\n' +\n ' def distance_mm(self):\\n' +\n ' spi.init(baudrate=125000, sclk=self.sclk_pin,\\n' +\n ' mosi=self.trigger_pin, miso=self.echo_pin)\\n' +\n ' pre = 0\\n' +\n ' post = 0\\n' +\n ' k = -1\\n' +\n ' length = 500\\n' +\n ' resp = bytearray(length)\\n' +\n ' resp[0] = 0xFF\\n' +\n ' spi.write_readinto(resp, resp)\\n' +\n ' # find first non zero value\\n' +\n ' try:\\n' +\n ' i, value = next((ind, v) for ind, v in enumerate(resp) if v)\\n' +\n ' except StopIteration:\\n' +\n ' i = -1\\n' +\n ' if i > 0:\\n' +\n ' pre = bin(value).count(\"1\")\\n' +\n ' # find first non full high value afterwards\\n' +\n ' try:\\n' +\n ' k, value = next((ind, v)\\n' +\n ' for ind, v in enumerate(resp[i:length - 2]) if resp[i + ind + 1] == 0)\\n' +\n ' post = bin(value).count(\"1\") if k else 0\\n' +\n ' k = k + i\\n' +\n ' except StopIteration:\\n' +\n ' i = -1\\n' +\n ' dist= -1 if i < 0 else round((pre + (k - i) * 8. + post) * 8 * 0.172)\\n' +\n ' return dist\\n' +\n '\\n' +\n 'sonar=HCSR04()\\n'\n return ['sonar.distance_mm()/10.0', generator.ORDER_ATOMIC];\n}\n\nexport const RTC_get_time = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"rtc\")\n generator.definitions_['import_mixgo_rtc'] = 'from mixgo import rtc';\n var code = v + '.datetime()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const RTC_set_time = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var hour = generator.valueToCode(this, \"hour\", generator.ORDER_ASSIGNMENT);\n var minute = generator.valueToCode(this, \"minute\", generator.ORDER_ASSIGNMENT);\n var second = generator.valueToCode(this, \"second\", generator.ORDER_ASSIGNMENT);\n generator.setups_['class_DS1307'] = generator.CLASS_DS1307_INIT;\n var code = 'str(ds.Hour(' + hour + '))+ str(ds.Minute(' + minute + ')) +str(ds.Second(' + second + '))\\n';\n return code;\n}\n\nexport const RTC_set_date = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var year = generator.valueToCode(this, \"year\", generator.ORDER_ASSIGNMENT);\n var month = generator.valueToCode(this, \"month\", generator.ORDER_ASSIGNMENT);\n var day = generator.valueToCode(this, \"day\", generator.ORDER_ASSIGNMENT);\n generator.setups_['class_DS1307'] = generator.CLASS_DS1307_INIT;\n var code = 'str(ds.Year(' + year + '))+ str(ds.Month(' + month + ')) +str(ds.Day(' + day + '))\\n';\n return code;\n}\n\nexport const sensor_compass_reset = function (block, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n return '' + v + '.reset_calibrate()\\n';\n}\n\nexport const HCSR04 = function (_, generator) {\n generator.definitions_['import_sonar'] = 'import sonar';\n var dropdown_pin1 = generator.valueToCode(this, \"PIN1\", generator.ORDER_ASSIGNMENT);\n var dropdown_pin2 = generator.valueToCode(this, \"PIN2\", generator.ORDER_ASSIGNMENT);\n var code = 'sonar.Sonar(' + dropdown_pin1 + ', ' + dropdown_pin2 + ').checkdist()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_dht11 = function (_, generator) {\n generator.definitions_['import_dhtx'] = 'import dhtx';\n var sensor_type = this.getFieldValue('TYPE');\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var what = this.getFieldValue('WHAT');\n var code = 'dhtx.get_dht_' + what + \"('\" + sensor_type + \"', \" + dropdown_pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_extern_light = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'mixgo.get_brightness(' + pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_extern_sound = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'mixgo.get_soundlevel(' + pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const number1 = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var code = this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_pin_pressed = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'button', generator.ORDER_ATOMIC);\n var code = 'mixgo.' + pin + '.is_touched()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_extern_pin_near = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'mixgo.' + 'Infrared(' + pin + ')()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_pin_near = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var direction = this.getFieldValue('direction');\n var code = 'mixgo.' + 'infrared_' + direction + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const RTC_set_datetime = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var year = generator.valueToCode(this, \"year\", generator.ORDER_ASSIGNMENT);\n var month = generator.valueToCode(this, \"month\", generator.ORDER_ASSIGNMENT);\n var day = generator.valueToCode(this, \"day\", generator.ORDER_ASSIGNMENT);\n var hour = generator.valueToCode(this, \"hour\", generator.ORDER_ASSIGNMENT);\n var minute = generator.valueToCode(this, \"minute\", generator.ORDER_ASSIGNMENT);\n var second = generator.valueToCode(this, \"second\", generator.ORDER_ASSIGNMENT);\n var week = generator.valueToCode(this, \"weekday\", generator.ORDER_ASSIGNMENT);\n var millisecond = generator.valueToCode(this, \"millisecond\", generator.ORDER_ASSIGNMENT);\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"rtc\")\n generator.definitions_['import_mixgo_rtc'] = 'from mixgo import rtc';\n var code = v + '.datetime((' + year + ',' + month + ',' + day + ',' + week + ',' + hour + ',' + minute + ',' + second + ',' + millisecond + '))\\n';\n return code;\n}\n\nexport const sensor_rtc_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n generator.definitions_['import_machine'] = 'import machine';\n var code = v + ' = machine.RTC()\\n';\n return code;\n}\n\nexport const sensor_use_i2c_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_machine'] = 'import machine';\n var code;\n if (key == 'MPU9250') {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n code = v + ' = mpu9250.' + key + \"(\" + iv + ')\\n';\n } else if (key == 'BMP280') {\n generator.definitions_['import_bmp280'] = 'import bmp280';\n code = v + ' = bmp280.' + key + \"(\" + iv + ')\\n';\n } else if (key == 'SHT20') {\n generator.definitions_['import_sht20'] = 'import sht20';\n code = v + ' = sht20.' + key + \"(\" + iv + ')\\n';\n } else if (key == 'ADXL345') {\n generator.definitions_['import_adxl345'] = 'import adxl345';\n code = v + ' = adxl345.' + key + \"(\" + iv + ')\\n';\n }\n return code;\n}\n\nexport const sensor_bmp = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_bmp280'] = 'import bmp280';\n var code = v + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_sht = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_sht20'] = 'import sht20';\n var code = v + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_ds18x20 = function (_, generator) {\n generator.definitions_['import_ds18x20x'] = 'import ds18x20x';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'ds18x20x.get_ds18x20_temperature(' + dropdown_pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_lm35 = function (_, generator) {\n generator.definitions_['import_lm35'] = 'import lm35';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'lm35.get_LM35_temperature(' + dropdown_pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_button_is_pressed = sensor_mixgo_button_is_pressed;\nexport const sensor_button_was_pressed = sensor_mixgo_button_was_pressed;\nexport const sensor_button_get_presses = sensor_mixgo_button_get_presses;\nexport const sensor_pin_pressed = sensor_mixgo_pin_pressed;\nexport const sensor_pin_near = sensor_mixgo_pin_near;\nexport const sensor_mixgo_light = sensor_LTR308;\nexport const sensor_light = sensor_mixgo_light;\n// export const sensor_get_acceleration = sensor_mixgo_get_acceleration;\nexport const dht11 = sensor_dht11;","import { Boards } from 'mixly';\n\nexport const sensor_mixgo_extern_button_is_pressed = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);\n var code = 'mixgo.Button(' + pin + ').is_pressed(' + dropdown_stat + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\n//ok\nexport const sensor_mixgo_extern_button_was_pressed = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);\n var code = 'mixgo.Button(' + pin + ').was_pressed(' + dropdown_stat + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_extern_button_get_presses = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n var code = 'mixgo.Button(' + pin + ').get_presses(' + argument + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_extern_button_attachInterrupt = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var dropdown_mode = this.getFieldValue('mode');\n var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);\n var code = 'mixgo.Button(' + pin + ').irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\\n'\n return code;\n}\n\nexport const sensor_mpu9250_attachGestureInterrupt = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n var gesture = this.getFieldValue('gesture');\n var branch = generator.statementToCode(this, 'DO');\n var d = branch || generator.PASS;\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"mpu\")\n generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';\n var code = 'if ' + v + '.mpu9250_is_gesture(\"' + gesture + '\"):\\n' + d;\n return code;\n}\n\nexport const sensor_distance_hrsc04 = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n generator.setups_['class_hrsc04'] =\n 'class HCSR04:\\n' +\n ' def __init__(self, tpin=pin15, epin=pin14, spin=pin13):\\n' +\n ' self.trigger_pin = tpin\\n' +\n ' self.echo_pin = epin\\n' +\n ' self.sclk_pin = spin\\n' +\n '\\n' +\n ' def distance_mm(self):\\n' +\n ' spi.init(baudrate=125000, sclk=self.sclk_pin,\\n' +\n ' mosi=self.trigger_pin, miso=self.echo_pin)\\n' +\n ' pre = 0\\n' +\n ' post = 0\\n' +\n ' k = -1\\n' +\n ' length = 500\\n' +\n ' resp = bytearray(length)\\n' +\n ' resp[0] = 0xFF\\n' +\n ' spi.write_readinto(resp, resp)\\n' +\n ' # find first non zero value\\n' +\n ' try:\\n' +\n ' i, value = next((ind, v) for ind, v in enumerate(resp) if v)\\n' +\n ' except StopIteration:\\n' +\n ' i = -1\\n' +\n ' if i > 0:\\n' +\n ' pre = bin(value).count(\"1\")\\n' +\n ' # find first non full high value afterwards\\n' +\n ' try:\\n' +\n ' k, value = next((ind, v)\\n' +\n ' for ind, v in enumerate(resp[i:length - 2]) if resp[i + ind + 1] == 0)\\n' +\n ' post = bin(value).count(\"1\") if k else 0\\n' +\n ' k = k + i\\n' +\n ' except StopIteration:\\n' +\n ' i = -1\\n' +\n ' dist= -1 if i < 0 else round((pre + (k - i) * 8. + post) * 8 * 0.172)\\n' +\n ' return dist\\n' +\n '\\n' +\n 'sonar=HCSR04()\\n'\n return ['sonar.distance_mm()/10.0', generator.ORDER_ATOMIC];\n}\n\nexport const RTC_set_time = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var hour = generator.valueToCode(this, \"hour\", generator.ORDER_ASSIGNMENT);\n var minute = generator.valueToCode(this, \"minute\", generator.ORDER_ASSIGNMENT);\n var second = generator.valueToCode(this, \"second\", generator.ORDER_ASSIGNMENT);\n generator.setups_['class_DS1307'] = generator.CLASS_DS1307_INIT;\n var code = 'str(ds.Hour(' + hour + '))+ str(ds.Minute(' + minute + ')) +str(ds.Second(' + second + '))\\n';\n return code;\n}\n\nexport const RTC_set_date = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var year = generator.valueToCode(this, \"year\", generator.ORDER_ASSIGNMENT);\n var month = generator.valueToCode(this, \"month\", generator.ORDER_ASSIGNMENT);\n var day = generator.valueToCode(this, \"day\", generator.ORDER_ASSIGNMENT);\n generator.setups_['class_DS1307'] = generator.CLASS_DS1307_INIT;\n var code = 'str(ds.Year(' + year + '))+ str(ds.Month(' + month + ')) +str(ds.Day(' + day + '))\\n';\n return code;\n}\n\nexport const sensor_mixgo_extern_light = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'mixgo.get_brightness(' + pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_extern_sound = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'mixgo.get_soundlevel(' + pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_extern_pin_near = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var direction = this.getFieldValue('direction');\n var code = 'mixgo.' + 'infrared_' + direction + '.near()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_rtc_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n generator.definitions_['import_machine'] = 'import machine';\n var code = v + ' = machine.RTC()\\n';\n return code;\n}\n\nexport const sensor_bmp = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_bmp280'] = 'import bmp280';\n var code = v + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_sht = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_sht20'] = 'import sht20';\n var code = v + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\n//pe\nexport const sensor_use_i2c_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code;\n if (key == 'MPU9250') {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n code = v + ' = mpu9250.' + key + \"(\" + iv + ')\\n';\n } else if (key == 'BMP280') {\n generator.definitions_['import_bmp280'] = 'import bmp280';\n code = v + ' = bmp280.' + key + \"(\" + iv + ')\\n';\n } else if (key == 'SHT20') {\n generator.definitions_['import_sht20'] = 'import sht20';\n code = v + ' = sht20.' + key + \"(\" + iv + ')\\n';\n } else if (key == 'ADXL345') {\n generator.definitions_['import_adxl345'] = 'import adxl345';\n code = v + ' = adxl345.' + key + \"(\" + iv + ')\\n';\n } else if (key == 'LTR308') {\n generator.definitions_['import_ltr308al'] = 'import ltr308al';\n code = v + ' = ltr308al.LTR_308ALS(' + iv + ')\\n';\n } else if (key == 'LTR381RGB') {\n generator.definitions_['import_ltr381rgb'] = 'import ltr381rgb';\n code = v + ' = ltr381rgb.LTR_381RGB(' + iv + ')\\n';\n } else if(key == 'UCS12071'){\n generator.definitions_['import_ucs12071'] = 'import ucs12071';\n code = v + ' = ucs12071.UCS12071(' + iv + ')\\n';\n } else if (key == 'LTR390UV'){\n generator.definitions_['import_ltr390uv'] = 'import ltr390uv';\n code = v + ' = ltr390uv.ALS_UVS(' + iv +')\\n';\n } else if (key == 'HP203X') {\n generator.definitions_['import_hp203x'] = 'import hp203x';\n code = v + ' = hp203x.HP203X(' + iv + ')\\n';\n } else if(key == \"SPL06_001\"){\n generator.definitions_['import_spl06_001'] = 'import spl06_001';\n code = v + ' = spl06_001.SPL06(' + iv + ')\\n';\n } else if (key == 'SHTC3') {\n generator.definitions_['import_shtc3'] = 'import shtc3';\n code = v + ' = shtc3.' + key + \"(\" + iv + ')\\n';\n } else if (key == 'AHT21') {\n generator.definitions_['import_ahtx0'] = 'import ahtx0';\n code = v + ' = ahtx0.AHTx0(' + iv + ')\\n';\n } else if (key == 'VL53L0X') {\n generator.definitions_['import_vl53l0x'] = 'import vl53l0x';\n code = v + ' = vl53l0x.' + key + \"(\" + iv + ')\\n';\n } else if (key == 'QMC5883L') {\n generator.definitions_['import_qmc5883l'] = 'import qmc5883l';\n code = v + ' = qmc5883l.Compass(' + iv + ')\\n';\n } else if (key == 'MAX30102') {\n generator.definitions_['import_max30102'] = 'import max30102';\n code = v + ' = max30102.MAX30102(' + iv + ')\\n';\n } else if (key == 'APDS9960') {\n generator.definitions_['import_apds9960'] = 'import apds9960';\n code = v + ' = apds9960.APDS9960(' + iv + ')\\n';\n } else if (key == 'RFID') {\n generator.definitions_['import_rc522'] = 'import rc522';\n code = v + ' = rc522.RC522(' + iv + ')\\n';\n }else if (key == 'CBR817') {\n generator.definitions_['import_cbr817'] = 'import cbr817';\n code = v + ' = cbr817.' + key + \"(\" + iv + ')\\n';\n }else if (key == 'CI130X'){\n generator.definitions_['import_ci130x'] = 'import ci130x';\n code = v + ' = ci130x.' + key + \"(\" + iv + ')\\n';\n }\n return code;\n}\n\nexport const radar_set_DETECTION_THRESHOLD = function (_, generator) {\n generator.definitions_['import_cbr817'] = 'import cbr817';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var value = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var value2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);\n var code = sub + '.threshold(' + value +')\\n'+sub + '.delay_ms(' + value2 +')\\n';\n return code;\n}\n\nexport const radar_set_DETECTION_THRESHOLD_SANT = function (_, generator) {\n generator.definitions_['import_sant_g2_ext_mmw'] = 'from sant_g2 import ext_mmw';\n var value = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var value2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);\n var code = 'ext_mmw.threshold(' + value +')\\n'+ 'ext_mmw.delay_ms(' + value2 +')\\n';\n return code;\n}\n\nexport const interaction_whether_to_interaction = function(_,generator){\n generator.definitions_['import_cbr817'] = 'import cbr817';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub+'.result()';\n return [code,generator.ORDER_ATOMIC];\n}\n\nexport const interaction_whether_to_interaction_SANT = function(_,generator){\n generator.definitions_['import_sant_g2_ext_mmw'] = 'from sant_g2 import ext_mmw';\n var code = 'ext_mmw.result()';\n return [code,generator.ORDER_ATOMIC];\n}\n\nexport const CI130X_IDENTIFY_AND_SAVE = function(_,generator){\n generator.definitions_['import_ci130x'] = 'import ci130x';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub+'.cmd_id()\\n';\n return code;\n}\n\nexport const CI130X_GET_WHETHER_IDENTIFY = function(_,generator){\n generator.definitions_['import_ci130x'] = 'import ci130x';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var cmd = this.getFieldValue('cmd');\n var code = sub+'.result('+cmd+')';\n return [code,generator.ORDER_ATOMIC];\n}\n\nexport const CI130X_GET_THE_RECOGNIZED_CMD = function(_,generator){\n generator.definitions_['import_ci130x'] = 'import ci130x';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n if(key == 'status1'){\n var code = sub+'.status()[0]';\n }else if(key == 'status2'){\n var code = sub+'.status()[1]';\n }else{\n var code = sub+'.'+key +'()';\n }\n return [code,generator.ORDER_ATOMIC];\n}\n\nexport const CI130X_BROADCAST = function(_,generator){\n generator.definitions_['import_ci130x'] = 'import ci130x';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);\n var star = this.getFieldValue('star');\n var end = this.getFieldValue('end');\n var code = sub+'.play('+star+','+num+','+end+')\\n';\n return code;\n}\n\nexport const CI130X_SET_SYSTEM_CMD = function(_,generator){\n generator.definitions_['import_ci130x'] = 'import ci130x';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var cmd = this.getFieldValue('cmd');\n var code = sub+'.sys_cmd('+cmd+')\\n';\n return code;\n}\n\nexport const sensor_MAX30102_extern = function (_, generator) {\n generator.definitions_['import_max30102'] = 'import max30102';\n var key = this.getFieldValue('key');\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub + '.heartrate()' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_APDS9960_extern = function (_, generator) {\n generator.definitions_['import_apds9960'] = 'import apds9960';\n var key = this.getFieldValue('key');\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub + '.' + key + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_LTR308_extern = function (_, generator) {\n generator.definitions_['import_ltr308al'] = 'import ltr308al';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub + '.getdata()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_hp203_extern = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_hp203x'] = 'import hp203x';\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_spl06_001_extern = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_spl06_001'] = 'import spl06_001';\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_ltr381_extern = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_ltr381rgb'] = 'import ltr381rgb';\n var code = sub + '.getdata()' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_ucs12071_extern = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_ucs12071'] = 'import ucs12071';\n if (key == '0'){\n var code = sub + '.color()';\n }\n else if(key == '1'){\n var code = sub + '.color_raw()';\n }\n else if(key == '2'){\n var code = sub + '.als()';\n }\n else{\n var code = sub + '.ir()';\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_LTR390UV_extern = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_time'] = 'import time';\n generator.definitions_['import_ltr390uv'] = 'import ltr390uv';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n if (key == 'E') {\n var code = sub + '.ambient_light()';\n } else {\n var code = sub + '.ultraviolet()';\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_QMC5883L_extern = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_qmc5883l'] = 'import qmc5883l';\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_shtc3_extern = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_shtc3'] = 'import shtc3';\n var code = sub + '.' + key + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_aht11_extern = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_ahtx0'] = 'import ahtx0';\n var code = sub + '.' + key + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_VL530LX_extern = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n generator.definitions_['import_vl53l0x'] = 'import vl53l0x';\n var code = sub + '.read()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_use_spi_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var sv = generator.valueToCode(this, 'SPISUB', generator.ORDER_ATOMIC);\n var pv = generator.valueToCode(this, 'PINSUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code;\n if (key == 'RFID') {\n generator.definitions_['import_rc522'] = 'import rc522';\n var code = v + ' = rc522.RC522(' + sv + ',' + pv + ')\\n';\n } else if (key == 'Weather') {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version] = 'import ' + version;\n generator.definitions_['import_ws_lora'] = 'import ws_lora';\n if (version == 'mixgo_pe') {\n var code = v + ' = ws_lora.Weather(' + sv + ',' + pv + ')\\n';\n } else if (version == 'mixgo_nova') {\n var code = v + ' = ws_lora.Weather(' + sv + ',' + pv + ',' + version + '.onboard_i2c_soft' + ')\\n';\n } else {\n var code = v + ' = ws_lora.Weather(' + sv + ',' + pv + ',' + version + '.onboard_i2c' + ')\\n';\n }\n }\n return code;\n}\n\nexport const extern_rfid_read = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_rc522'] = 'import rc522';\n var code = sub + '.read_card(' + sector + ',\"' + key + '\")';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const extern_rfid_readid = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n generator.definitions_['import_rc522'] = 'import rc522';\n var code = sub + '.read_card(0, x=\"id\")';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const extern_rfid_readcontent = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);\n generator.definitions_['import_rc522'] = 'import rc522';\n var code = sub + '.read_card(' + sector + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const extern_rfid_write = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);\n var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);\n generator.definitions_['import_rc522'] = 'import rc522';\n var code = sub + '.write_card(' + cnt + ',' + sector + ')\\n';\n return code;\n}\n\nexport const extern_rfid_write_return = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);\n var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);\n generator.definitions_['import_rc522'] = 'import rc522';\n var code = sub + '.write_card(' + cnt + ',' + sector + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const extern_rfid_status = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_rc522'] = 'import rc522';\n var code = sub + '.scan_card()==' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const weather_data = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_ws_lora'] = 'import ws_lora';\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const weather_have_data = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n generator.definitions_['import_ws_lora'] = 'import ws_lora';\n var code = sub + '.any()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const weather_uart_mixio = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var base = generator.valueToCode(this, 'BASE', generator.ORDER_ATOMIC);\n generator.definitions_['import_ws_lora'] = 'import ws_lora';\n var code = sub + '.uart_mixio(topic=' + base + ')\\n';\n return code;\n}\n\nexport const weather_set_label = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n generator.definitions_['import_ws_lora'] = 'import ws_lora';\n var code = new Array(this.itemCount_);\n var default_value = '0';\n for (var n = 0; n < this.itemCount_; n++) {\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || default_value;\n }\n var code = sub + '.label(' + code.join(', ') + ')\\n';\n return code;\n}\n\nexport const sensor_mixgoce_hot_wheel_is_touched = function (_, generator) {\n var key = this.getFieldValue('key');\n var stat = this.getFieldValue('stat');\n generator.definitions_['import_tpwheel'] = 'import tpwheel';\n var code = 'tpwheel.TouchPadWheels(' + key + ').' + stat;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgoce_hot_wheel_degrees = function (_, generator) {\n generator.definitions_['import_tpwheel'] = 'import tpwheel';\n var code = 'tpwheel.hot_wheels_degree()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const esp32_s2_weather_init = function (_, generator) {\n generator.definitions_['import_weather'] = 'import weather';\n generator.definitions_['import_board_*'] = 'from board import *';\n var wd = generator.valueToCode(this, 'wd', generator.ORDER_ATOMIC);\n var ws = generator.valueToCode(this, 'ws', generator.ORDER_ATOMIC);\n var rain = generator.valueToCode(this, 'rain', generator.ORDER_ATOMIC);\n var code = \"wd = weather.Weather_wd(\" + wd + \")\\n\"\n code += \"ws = weather.Weather_ws(\" + ws + \")\\n\"\n code += \"rain = weather.Weather_rain(\" + rain + \")\\n\"\n return code;\n}\n\nexport const esp32_s2_weather_wd = function (_, generator) {\n generator.definitions_['import_weather'] = 'import weather';\n var code = 'wd.wind_direction()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const esp32_s2_weather_rain = function (_, generator) {\n generator.definitions_['import_weather'] = 'import weather';\n var rain = generator.valueToCode(this, 'rain', generator.ORDER_ATOMIC);\n var code = 'rain.rain_count(time_Hour=' + rain + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const esp32_s2_weather_ws = function (_, generator) {\n generator.definitions_['import_weather'] = 'import weather';\n var key = this.getFieldValue('key');\n if (key == 'ALL') {\n var code = 'ws.wind_speed()';\n } else {\n var code = 'ws.wind_speed()[' + key + ']';\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const HCSR04 = function (_, generator) {\n generator.definitions_['import_sonar'] = 'import sonar';\n var dropdown_pin1 = generator.valueToCode(this, \"PIN1\", generator.ORDER_ASSIGNMENT);\n var dropdown_pin2 = generator.valueToCode(this, \"PIN2\", generator.ORDER_ASSIGNMENT);\n var code = 'sonar.Sonar(' + dropdown_pin1 + ',' + dropdown_pin2 + ').checkdist()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const PS2_init = function (_, generator) {\n generator.definitions_['import_ps2'] = 'import ps2';\n //generator.definitions_['import_board'] = 'import board';\n var PS2_CLK = this.getFieldValue('PS2_CLK');\n var PS2_DOU = this.getFieldValue('PS2_DOU');\n var PS2_DIN = this.getFieldValue('PS2_DIN');\n var PS2_CS = this.getFieldValue('PS2_CS');\n var code = 'mixgope_ps = ps2.PS2Controller(' + PS2_CLK + ',' + PS2_DOU + ',' + PS2_DIN + ',' + PS2_CS + ')\\n';\n return code;\n}\n\nexport const PS2_vibration = function (_, generator) {\n generator.definitions_['import_ps2'] = 'import ps2';\n var ss = this.getFieldValue('smotorstate');\n var amp = generator.valueToCode(this, 'AMP', generator.ORDER_ATOMIC);\n var code = \"mixgope_ps.PS2_vibration(\" + ss + ',' + amp + \")\\n\";\n return code;\n}\n\nexport const PS2_Button = function (_, generator) {\n generator.definitions_['import_ps2'] = 'import ps2';\n var bt = this.getFieldValue('psbt');\n var code = \"mixgope_ps.PS2_keydata()[0] & (ps2.\" + bt + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const PS2_Buttons = function (_, generator) {\n generator.definitions_['import_ps2'] = 'import ps2';\n var bt = this.getFieldValue('psbt');\n var code = \"ps2.\" + bt;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const PS2_State = function (_, generator) {\n generator.definitions_['import_ps2'] = 'import ps2';\n var bt = this.getFieldValue('btstate');\n var code = \"mixgope_ps.PS2_keydata()[\" + bt + \"]\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const PS2_stk = function (_, generator) {\n generator.definitions_['import_ps2'] = 'import ps2';\n var stk = this.getFieldValue('psstk');\n var code = \"mixgope_ps.PS2_keydata()[1][\" + stk + \"]\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const RTC_set_datetime = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var year = generator.valueToCode(this, \"year\", generator.ORDER_ASSIGNMENT);\n var month = generator.valueToCode(this, \"month\", generator.ORDER_ASSIGNMENT);\n var day = generator.valueToCode(this, \"day\", generator.ORDER_ASSIGNMENT);\n var hour = generator.valueToCode(this, \"hour\", generator.ORDER_ASSIGNMENT);\n var minute = generator.valueToCode(this, \"minute\", generator.ORDER_ASSIGNMENT);\n var second = generator.valueToCode(this, \"second\", generator.ORDER_ASSIGNMENT);\n var week = generator.valueToCode(this, \"weekday\", generator.ORDER_ASSIGNMENT);\n var millisecond = generator.valueToCode(this, \"millisecond\", generator.ORDER_ASSIGNMENT);\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"rtc\")\n generator.definitions_['import_mixgo_rtc'] = 'from mixgo import rtc';\n var code = v + '.datetime((' + year + ',' + month + ',' + day + ',' + week + ',' + hour + ',' + minute + ',' + second + ',' + millisecond + '))\\n';\n return code;\n}\n\nexport const RTC_get_time = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"rtc\")\n generator.definitions_['import_mixgo_rtc'] = 'from mixgo import rtc';\n var code = v + '.datetime()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_dht11 = function (_, generator) {\n generator.definitions_['import_dhtx'] = 'import dhtx';\n var sensor_type = this.getFieldValue('TYPE');\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var what = this.getFieldValue('WHAT');\n var code = 'dhtx.' + sensor_type + \"(\" + dropdown_pin + ').' + what + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const PS2_init_new = function (_, generator) {\n generator.definitions_['import_ps2'] = 'import ps2';\n //generator.definitions_['import_board'] = 'import board';\n var PS2_CLK = generator.valueToCode(this, 'CLK', generator.ORDER_ATOMIC);\n var PS2_DOU = generator.valueToCode(this, 'DOU', generator.ORDER_ATOMIC);\n var PS2_DIN = generator.valueToCode(this, 'DIN', generator.ORDER_ATOMIC);\n var PS2_CS = generator.valueToCode(this, 'CS', generator.ORDER_ATOMIC);\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub + ' = ps2.PS2Controller(' + PS2_CLK + ',' + PS2_DOU + ',' + PS2_DIN + ',' + PS2_CS + ')\\n';\n return code;\n}\n\nexport const PS2_vibration_new = function (_, generator) {\n generator.definitions_['import_ps2'] = 'import ps2';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var ss = this.getFieldValue('smotorstate');\n var amp = generator.valueToCode(this, 'AMP', generator.ORDER_ATOMIC);\n var code = sub + \".vibration(\" + ss + ',' + amp + \")\\n\";\n return code;\n}\n\nexport const PS2_Buttons_new = function (_, generator) {\n generator.definitions_['import_ps2'] = 'import ps2';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var bt = this.getFieldValue('psbt');\n var code = sub + '.button(ps2.' + bt + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const PS2_stk_new = function (_, generator) {\n generator.definitions_['import_ps2'] = 'import ps2';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var stk = this.getFieldValue('psstk');\n var code = sub + \".analog(ps2.PSS_\" + stk + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_use_uart_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var s = this.getFieldValue('sensor');\n var code = ''\n if (s == 'PM') {\n generator.definitions_['import_pm2_5'] = 'import pm2_5';\n code = v + '=pm2_5.PM2_5(' + key + ')\\n';\n } else if (s == 'GNSS') {\n generator.definitions_['import_gnss'] = 'import gnss';\n code = v + '=gnss.NMEA0183(' + key + ')\\n';\n }\n return code;\n}\n\nexport const pm25_get_data = function (_, generator) {\n generator.definitions_['import_pm2_5'] = 'import pm2_5';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var pm = this.getFieldValue('pm');\n var code = v + \".concentration()\" + pm;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const gnss_get_data = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n generator.definitions_['import_gnss'] = 'import gnss';\n var code = sub + '.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const gnss_have_data = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n generator.definitions_['import_gnss'] = 'import gnss';\n var code = sub + '.any()';\n return [code, generator.ORDER_ATOMIC];\n}\n\n//mixbot/feiyi extern below:\nexport const robot_button_extern_get_value = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n var num = this.getFieldValue('num');\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_button'] = 'from mixbot_ext import ext_button';\n var code = 'ext_button.value(' + mode + \")\" + num;\n return [code, generator.ORDER_ATOMIC];\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_button'] = 'ext_button_left = i2cdevice.Buttonx5(ext_i2c_left)';\n var code = 'ext_button_left.value()' + num;\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_button'] = 'ext_button_right = i2cdevice.Buttonx5(ext_i2c_right)';\n var code = 'ext_button_right.value()' + num;\n }\n return [code, generator.ORDER_ATOMIC];\n }\n}\n\nexport const robot_touch_extern_get_value = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_collision'] = 'from mixbot_ext import ext_collision';\n var code = 'ext_collision.value(' + mode + \")\";\n return [code, generator.ORDER_ATOMIC];\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_collision'] = 'ext_collision_left = i2cdevice.Button(ext_i2c_left)';\n var code = 'ext_collision_left.value()';\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_collision'] = 'ext_collision_right = i2cdevice.Button(ext_i2c_right)';\n var code = 'ext_collision_right.value()';\n }\n return [code, generator.ORDER_ATOMIC];\n }\n}\n\nexport const robot_infrared_extern_get_value = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'mixbot') {\n var mode = this.getFieldValue('mode');\n generator.definitions_['import_mixbot_ext_ext_infrared'] = 'from mixbot_ext import ext_infrared';\n var code = 'ext_infrared.value(' + mode + \")\";\n return [code, generator.ORDER_ATOMIC];\n } else if (version == 'feiyi') {\n var mode = this.getFieldValue('mode');\n generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';\n var code = 'onboard_bot51.read_ps(' + mode + \")\";\n return [code, generator.ORDER_ATOMIC];\n }\n}\n\nexport const robot_infrared_extern_grey_get_value = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_grey_near'] = 'ext_grey_near_left = i2cdevice.Infrared(ext_i2c_left)';\n var code = 'ext_grey_near_left.value()';\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_grey_near'] = 'ext_grey_near_right = i2cdevice.Infrared(ext_i2c_right)';\n var code = 'ext_grey_near_right.value()';\n }\n return [code, generator.ORDER_ATOMIC];\n }\n}\n\nexport const robot_potentiometer_extern_get_value = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_potentiometer'] = 'from mixbot_ext import ext_potentiometer';\n var code = 'ext_potentiometer.value(' + mode + \")\";\n return [code, generator.ORDER_ATOMIC];\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_potentiometer'] = 'ext_potentiometer_left = i2cdevice.Dimmer(ext_i2c_left)';\n var code = 'ext_potentiometer_left.value()';\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_potentiometer'] = 'ext_potentiometer_right = i2cdevice.Dimmer(ext_i2c_right)';\n var code = 'ext_potentiometer_right.value()';\n }\n return [code, generator.ORDER_ATOMIC];\n }\n}\n\nexport const robot_color_extern_get_value = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n var color = this.getFieldValue('color');\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_color'] = 'from mixbot_ext import ext_color';\n var code = 'ext_color.recognition(' + mode + \")\" + color;\n return [code, generator.ORDER_ATOMIC];\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_color'] = 'ext_color_left = i2cdevice.Color_ID(ext_i2c_left)';\n var code = 'ext_color_left.recognition()' + color;\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_color'] = 'ext_color_right = i2cdevice.Color_ID(ext_i2c_right)';\n var code = 'ext_color_right.recognition()' + color;\n }\n return [code, generator.ORDER_ATOMIC];\n }\n}\n\nexport const robot_sonar_extern_get_value = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_sonar'] = 'from mixbot_ext import ext_sonar';\n var code = 'ext_sonar.value(' + mode + \")\";\n return [code, generator.ORDER_ATOMIC];\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_sonar'] = 'ext_sonar_left = i2cdevice.Sonar(ext_i2c_left)';\n var code = 'ext_sonar_left.value()';\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_sonar'] = 'ext_sonar_right = i2cdevice.Sonar(ext_i2c_right)';\n var code = 'ext_sonar_right.value()';\n }\n return [code, generator.ORDER_ATOMIC];\n }\n}\n\nexport const robot_sonar_extern_led = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var mode = this.getFieldValue('mode');\n var light = generator.valueToCode(this, 'light', generator.ORDER_ATOMIC);\n var op = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n if (version == 'mixbot') {\n generator.definitions_['import_mixbot_ext_ext_sonar'] = 'from mixbot_ext import ext_sonar';\n var code = 'ext_sonar.led(' + mode + ',' + light + ',' + op + \")\\n\";\n return code;\n } else if (version == 'feiyi') {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_i2cdevice'] = 'import i2cdevice';\n if (mode == \"0\") {\n generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';\n generator.definitions_['import_left_sonar'] = 'ext_sonar_left = i2cdevice.Sonar(ext_i2c_left)';\n var code = 'ext_sonar_left.led(0,' + light + ',' + op + ')\\n';\n } else if (mode == \"1\") {\n generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';\n generator.definitions_['import_right_sonar'] = 'ext_sonar_right = i2cdevice.Sonar(ext_i2c_right)';\n var code = 'ext_sonar_right.led(0,' + light + ',' + op + ')\\n';\n }\n return code;\n }\n}\n\nexport const mixbot_sensor_extern_get_addr = function (_, generator) {\n var name = this.getFieldValue('name');\n generator.definitions_['import_mixbot_ext_' + name] = 'from mixbot_ext import ' + name;\n var code = name + '.addr_get()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const mixbot_sensor_extern_set_addr = function (_, generator) {\n var name = this.getFieldValue('name');\n generator.definitions_['import_mixbot_ext_' + name] = 'from mixbot_ext import ' + name;\n var oldaddr = generator.valueToCode(this, 'old', generator.ORDER_ATOMIC);\n var newaddr = generator.valueToCode(this, 'new', generator.ORDER_ATOMIC);\n var code = name + '.addr_set(' + oldaddr + ',' + newaddr + ')\\n';\n return code;\n}\n\nexport const sensor_weather_solo_init = function (_, generator) {\n generator.definitions_['import_ws_solo'] = 'import ws_solo';\n var wd = generator.valueToCode(this, 'wd', generator.ORDER_ATOMIC);\n var ws = generator.valueToCode(this, 'ws', generator.ORDER_ATOMIC);\n var rain = generator.valueToCode(this, 'rain', generator.ORDER_ATOMIC);\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub + ' = ws_solo.Weather_Solo(' + wd + ', ' + ws + ', ' + rain + ')\\n';\n return code;\n}\n\nexport const sensor_weather_solo_wd = function (_, generator) {\n generator.definitions_['import_ws_solo'] = 'import ws_solo';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.wind_direction()' + key + '';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_weather_solo_ws = function (_, generator) {\n generator.definitions_['import_ws_solo'] = 'import ws_solo';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.wind_speed()' + key + '';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_weather_solo_rain = function (_, generator) {\n generator.definitions_['import_ws_solo'] = 'import ws_solo';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub + '.rain_count(' + time + ')' + key + '';\n return [code, generator.ORDER_ATOMIC];\n}\n\n\nexport const sensor_DS18X20 = function(_, generator){\n generator.definitions_['import_DS18X20'] = 'from ds18b20 import DS18X20';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code ='DS18X20('+dropdown_pin+').temperature()';\n return [code, generator.ORDER_ATOMIC];\n};\n\n//educore sensor_extern \nexport const educore_body_sensor = function (_, generator) {\n generator.definitions_['import_educore_tsd'] = 'from educore import tsd';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'tsd(' + pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_soilhum_sensor = function (_, generator) {\n generator.definitions_['import_educore_solihum'] = 'from educore import soilhum';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'soilhum(' + pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_temphum_sensor = function (_, generator) {\n generator.definitions_['import_educore_dht'] = 'from educore import dht';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'dht(' + pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_infrared_sensor = function (_, generator) {\n generator.definitions_['import_educore_tsd'] = 'from educore import tsd';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'tsd(' + pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_button_sensor_extern = function (_, generator) {\n generator.definitions_['import_educore_button'] = 'from educore import button';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'button(' + pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_read_humiture = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub+\".read()[\"+key+\"]\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_ultrasonic_sensor = function (_, generator) {\n generator.definitions_['import_educore_ultrasonic'] = 'from educore import ultrasonic';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'ultrasonic(' + pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const ultrasonic_sensor_read_distance = function (_, generator) {\n generator.definitions_['import_educore_ultrasonic'] = 'from educore import ultrasonic';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub+\".diatance()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_temp_sensor = function (_, generator) {\n generator.definitions_['import_educore_ds18b20'] = 'from educore import ds18b20';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'ds18b20(' + pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_camera_sensor = function (_, generator) {\n generator.definitions_['import_educore_smartcamera'] = 'from educore import smartcamera';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'smartcamera(' + pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const camera_sensor_init = function (_, generator) {\n generator.definitions_['import_educore_smartcamera'] = 'from educore import smartcamera';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub+'.init(' + key + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const camera_sensor_result = function (_, generator) {\n generator.definitions_['import_educore_smartcamera'] = 'from educore import smartcamera';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub+'.result()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_weigh_init = function (_, generator) {\n generator.definitions_['import_hx270'] = 'import hx720';\n var sck = generator.valueToCode(this, 'sck', generator.ORDER_ATOMIC);\n var dat = generator.valueToCode(this, 'dat', generator.ORDER_ATOMIC);\n var pc = generator.valueToCode(this, 'pc', generator.ORDER_ATOMIC);\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub + ' = hx720.HX720(' + sck + ', ' + dat + ', ' + pc + ')\\n';\n return code;\n}\n\nexport const weigh_sensor_get_weight = function (_, generator) {\n generator.definitions_['import_hx270'] = 'import hx720';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = v + \".read_weight(10)\";\n return [code, generator.ORDER_ATOMIC];\n}","import { Boards } from 'mixly';\nimport { sensor_dht11 } from './sensor_extern.js';\n\nexport const sensor_mixgo_button_is_pressed = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version] = 'import ' + version;\n var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);\n var code = version + '.' + btn + '.is_pressed()';\n return [code, generator.ORDER_ATOMIC];\n}\n\n//ok\nexport const sensor_mixgo_button_was_pressed = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version] = 'import ' + version;\n var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);\n var code = version + '.' + btn + '.was_pressed()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_button_get_presses = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version] = 'import ' + version;\n var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);\n var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n var code = version + '.' + btn + '.get_presses(' + argument + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_button_attachInterrupt = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version] = 'import ' + version;\n var dropdown_btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);\n var dropdown_mode = this.getFieldValue('mode');\n var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);\n var code = version + '.' + dropdown_btn + '.irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\\n'\n return code;\n}\n\n//ok\nexport const sensor_mixgocar42_button_is_pressed = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version] = 'import ' + version;\n var code = version + '.' + 'button.is_pressed()';\n return [code, generator.ORDER_ATOMIC];\n}\n\n//ok\nexport const sensor_mixgocar42_button_was_pressed = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version] = 'import ' + version;\n var code = version + '.' + 'button.was_pressed()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgocar42_button_get_presses = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version] = 'import ' + version;\n var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n var code = version + '.' + 'button.get_presses(' + argument + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgocar42_button_attachInterrupt = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version] = 'import ' + version;\n var dropdown_mode = this.getFieldValue('mode');\n var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);\n var code = version + '.' + 'button.irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\\n'\n return code;\n}\n\nexport const HCSR04 = function (_, generator) {\n generator.definitions_['import_sonar'] = 'import sonar';\n var dropdown_pin1 = generator.valueToCode(this, \"PIN1\", generator.ORDER_ASSIGNMENT);\n var dropdown_pin2 = generator.valueToCode(this, \"PIN2\", generator.ORDER_ASSIGNMENT);\n var code = 'sonar.Sonar(' + dropdown_pin1 + ', ' + dropdown_pin2 + ').checkdist()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const number1 = function (_, generator) {\n var code = this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const number2 = function (_, generator) {\n var code = this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const number3 = function (_, generator) {\n var code = this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const number4 = function (_, generator) {\n var code = this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const number5 = function (_, generator) {\n var code = this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const number6 = function (_, generator) {\n var code = this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const number7 = function (_, generator) {\n var code = this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_pin_near_single = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_als'] = \"from \" + version + \" import onboard_als\";\n var code = 'onboard_als.ps_nl()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_pin_near_double = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version] = 'import ' + version;\n var direction = this.getFieldValue('direction');\n var code = version + '.' + 'infrared_' + direction + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_pin_near = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_als'] = 'from ' + version + ' import onboard_als';\n var code = 'onboard_als.ps()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_nova_pin_near = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var direction = this.getFieldValue('direction');\n generator.definitions_['import_' + version + '_' + direction] = 'from ' + version + ' import onboard_als_' + direction;\n var code = 'onboard_als_' + direction + '.ps_nl()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_LTR308 = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_als'] = 'from ' + version + ' import onboard_als';\n var code = 'onboard_als.als()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_sant_color = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_als'] = 'from ' + version + ' import onboard_als';\n var code = 'onboard_als.color()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_nova_LTR308 = function (_, generator) {\n var direction = this.getFieldValue('direction');\n generator.definitions_['import_' + version + '_' + direction] = 'from ' + version + ' import onboard_als_' + direction;\n var code = 'onboard_als_' + direction + '.als_vis()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_ds18x20 = function (_, generator) {\n generator.definitions_['import_ds18x20x'] = 'import ds18x20x';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'ds18x20x.get_ds18x20_temperature(' + dropdown_pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_lm35 = function (_, generator) {\n generator.definitions_['import_lm35'] = 'import lm35';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'lm35.get_LM35_temperature(' + dropdown_pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_LTR308 = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo\") {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n return ['mixgo.get_brightness()', generator.ORDER_ATOMIC];\n } else if (version == \"mixgo_ce\") {\n generator.definitions_['import_mixgo_ce'] = 'import mixgo_ce';\n return ['mixgo_ce.get_brightness()', generator.ORDER_ATOMIC];\n } else if (version == \"mpython\") {\n generator.definitions_['import_mpython_onboard_light'] = 'from mpython import onboard_light';\n return ['onboard_light.brightness()', generator.ORDER_ATOMIC];\n }\n generator.definitions_['import_' + version + '_onboard_als'] = \"from \" + version + \" import onboard_als\";\n var code = 'onboard_als.als_vis()';\n return [code, generator.ORDER_ATOMIC];\n // else{return ['', generator.ORDER_ATOMIC];}\n}\n\nexport const sensor_sound = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'mixbot') {\n generator.definitions_['import_' + version + '_sound'] = 'from ' + version + ' import sound';\n var code = 'sound.loudness()';\n } else if (version == 'mixgo_zero') {\n generator.definitions_['import_mixgo_zero_voice_sound_level'] = \"from mixgo_zero_voice import sound_level\";\n var code = 'sound_level()';\n } else if (version == 'mixgo_nova') {\n generator.definitions_['import_mixgo_nova_voice_sound_level'] = \"from mixgo_nova_voice import sound_level\";\n var code = 'sound_level()';\n } else if (version == \"mixgo\") {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n return ['mixgo.get_soundlevel()', generator.ORDER_ATOMIC];\n } else if (version == \"mpython\") {\n generator.definitions_['import_mpython_onboard_sound'] = 'from mpython import onboard_sound';\n return ['onboard_sound.soundlevel()', generator.ORDER_ATOMIC];\n } else if (version == \"mixgo_mini\") {\n generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';\n var code = 'onboard_bot.soundlevel()';\n } else {\n generator.definitions_['import_' + version + '_onboard_sound'] = 'from ' + version + ' import onboard_sound';\n var code = 'onboard_sound.read()';\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\n// export const sensor_mixgo_nova_sound = function (_, generator) {\n// var version = Boards.getSelectedBoardKey().split(':')[2]\n// return [code, generator.ORDER_ATOMIC];\n// }\n\nexport const sensor_hp203 = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var key = this.getFieldValue('key');\n if (version == \"mixgo_mini\") {\n generator.definitions_['import_mixgo_mini_onboard_i2c'] = 'from mixgo_mini import onboard_i2c';\n generator.definitions_['import_spl06_001'] = 'import spl06_001';\n generator.definitions_['import_onboard_bps'] = 'onboard_bps = spl06_001.SPL06(onboard_i2c)';\n } else {\n generator.definitions_['import_' + version + '_onboard_bps'] = \"from \" + version + \" import onboard_bps\";\n }\n var code = 'onboard_bps.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_aht11 = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var key = this.getFieldValue('key');\n if (version == 'mixgo_nova' || version == 'mixgo_zero') {\n generator.definitions_['import_' + version + '_onboard_ths'] = \"from \" + version + \" import onboard_ths\";\n } else if (version == 'mixgo_mini') {\n generator.definitions_['import_mixgo_mini_onboard_i2c'] = 'from mixgo_mini import onboard_i2c';\n generator.definitions_['import_shtc3'] = 'import shtc3';\n generator.definitions_['import_onboard_ths'] = 'onboard_ths = shtc3.SHTC3(onboard_i2c)';\n } else {\n generator.definitions_['import_' + version + '_onboard_ths'] = \"from \" + version + \" import onboard_ths\";\n }\n var code = 'onboard_ths.' + key + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_get_temperature = function (_, generator) {\n generator.definitions_['import_feiyi_onboard_acc'] = 'from feiyi import onboard_acc';\n return ['onboard_acc.temperature()', generator.ORDER_ATOMIC];\n}\n\nexport const rfid_readid = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_rfid'] = \"from \" + version + \" import onboard_rfid\";\n var code = 'onboard_rfid.read_card(0, x=\"id\")';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const rfid_readcontent = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);\n generator.definitions_['import_' + version + '_onboard_rfid'] = \"from \" + version + \" import onboard_rfid\";\n var code = 'onboard_rfid.read_card(' + sector + ', x=\"content\")';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const rfid_write = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);\n var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);\n generator.definitions_['import_' + version + '_onboard_rfid'] = \"from \" + version + \" import onboard_rfid\";\n var code = 'onboard_rfid.write_card(' + cnt + ',' + sector + ')\\n';\n return code;\n}\n\nexport const rfid_write_return = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);\n var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);\n generator.definitions_['import_' + version + '_onboard_rfid'] = \"from \" + version + \" import onboard_rfid\";\n var code = 'onboard_rfid.write_card(' + cnt + ',' + sector + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_get_acceleration = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var key = this.getFieldValue('key');\n if (key == 'strength') {\n if (version == 'mixbot') {\n generator.definitions_['import_' + version + '_acc_gyr'] = 'from ' + version + ' import acc_gyr';\n var code = 'acc_gyr.strength()';\n } else {\n generator.definitions_['import_' + version + '_onboard_acc'] = \"from \" + version + \" import onboard_acc\";\n var code = 'onboard_acc.strength()';\n }\n return [code, generator.ORDER_ATOMIC];\n }\n if (version == 'mixbot') {\n generator.definitions_['import_' + version + '_acc_gyr'] = 'from ' + version + ' import acc_gyr';\n var code = 'acc_gyr.accelerometer()' + key;\n } else if (version == 'mpython') {\n generator.definitions_['import_mpython_motion'] = 'from mpython import motion';\n var code = 'motion.accelerometer()' + key;\n } else {\n generator.definitions_['import_' + version + '_onboard_acc'] = \"from \" + version + \" import onboard_acc\";\n var code = 'onboard_acc.acceleration()' + key;\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_eulerangles = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_acc'] = \"from \" + version + \" import onboard_acc\";\n var angle = this.getFieldValue('angle');\n var code = 'onboard_acc.eulerangles()' + angle;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mpu9250_gesture = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n var gesture = this.getFieldValue('gesture');\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"mpu\")\n generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';\n var code = v + '.mpu9250_is_gesture(\"' + gesture + '\")';\n return [code, generator.ORDER_ATOMIC];\n}\n\n//ok\nexport const sensor_mpu9250_get_acceleration = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n var key = this.getFieldValue('key');\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"mpu\")\n generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';\n var code = v + '.mpu9250_get_' + key + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgoce_pin_pressed = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var pin = generator.valueToCode(this, 'button', generator.ORDER_ATOMIC);\n if ( 'mixgo_mini'|| version == 'mixgo_sant') {\n generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';\n var code = 'onboard_bot.touched(' + pin + ')';\n }else {\n generator.definitions_['import_' + version] = 'import ' + version;\n var code = version + '.touched(' + pin + ')';\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_touch_slide = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'mixgo_mini'|| version == 'mixgo_sant') {\n generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';\n var code = 'onboard_bot.touch_slide()';\n } else {\n generator.definitions_['import_' + version] = 'import ' + version;\n var code = version + '.touch_slide(3,4)';\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_pin_pressed = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version] = 'import ' + version;\n var pin = generator.valueToCode(this, 'button', generator.ORDER_ATOMIC);\n var code = version + '.' + pin + '.is_touched()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mpython_pin_pressed = function (_, generator) {\n generator.definitions_['import_mpython'] = 'import mpython';\n var pin = generator.valueToCode(this, 'button', generator.ORDER_ATOMIC);\n var code = 'mpython.touch_' + pin + '.is_touched()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_adxl345_get_acceleration = function (_, generator) {\n generator.definitions_['import_adxl345'] = 'import adxl345';\n // generator.definitions_['import_machine'] = 'import machine';\n var key = this.getFieldValue('key');\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code;\n if (key == 'x') {\n code = v + '.readX()';\n } else if (key == 'y') {\n code = v + '.readY()';\n } else if (key == 'z') {\n code = v + '.readZ()';\n } else if (key == 'values') {\n code = v + '.readXYZ()';\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mpu9250_get_magnetic = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n var key = this.getFieldValue('key');\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"mpu\")\n generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';\n var code = v + '.mpu9250_magnetic_' + key + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mpu9250_get_gyro = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n var key = this.getFieldValue('key');\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"mpu\")\n generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';\n var code = v + '.mpu9250_gyro_' + key + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mpu9250_calibrate_compass = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n return '' + v + '.calibrate()\\n';\n}\n\nexport const sensor_mpu9250_temperature = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"mpu\")\n generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';\n return [v + '.mpu9250_get_temperature()', generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mpu9250_field_strength = function (_, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n if (v == \"compass\")\n generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';\n var compass = this.getFieldValue('compass');\n var a;\n if (compass == 'strength') {\n a = v + '.get_field_strength()';\n } else if (compass == 'heading') {\n a = v + '.heading()';\n }\n return [a, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_compass_reset = function (block, generator) {\n generator.definitions_['import_mpu9250'] = 'import mpu9250';\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n return '' + v + '.reset_calibrate()\\n';\n}\n\nexport const sensor_onboard_mpu9250_gesture = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var gesture = this.getFieldValue('gesture');\n generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';\n var code = 'onboard_mpu.mpu9250_is_gesture(\"' + gesture + '\")';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_onboard_mpu9250_get_acceleration = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var key = this.getFieldValue('key');\n generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';\n var code = 'onboard_mpu.mpu9250_get_' + key + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_onboard_mpu9250_get_magnetic = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var key = this.getFieldValue('key');\n generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';\n var code = 'onboard_mpu.mpu9250_magnetic_' + key + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_onboard_mpu9250_get_gyro = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var key = this.getFieldValue('key');\n generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';\n var code = 'onboard_mpu.mpu9250_gyro_' + key + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_onboard_mpu9250_calibrate_compass = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_mixgo_onboard_compass'] = 'from mixgo import onboard_compass';\n return '' + 'onboard_compass.calibrate()\\n';\n}\n\nexport const sensor_onboard_mpu9250_temperature = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';\n return ['onboard_mpu.mpu9250_get_temperature()', generator.ORDER_ATOMIC];\n}\n\nexport const sensor_onboard_mpu9250_field_strength = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_mixgo_onboard_compass'] = 'from mixgo import onboard_compass';\n var compass = this.getFieldValue('compass');\n var a;\n if (compass == 'strength') {\n a = 'onboard_compass.get_field_strength()';\n } else if (compass == 'heading') {\n a = 'onboard_compass.heading()';\n }\n return [a, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_onboard_compass_reset = function (block, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n generator.definitions_['import_mixgo_onboard_compass'] = 'from mixgo import onboard_compass';\n return '' + 'onboard_compass.reset_calibrate()\\n';\n}\n\nexport const onboard_RTC_set_datetime = function (_, generator) {\n generator.definitions_['import_rtctime'] = \"import rtctime\";\n var year = generator.valueToCode(this, \"year\", generator.ORDER_ASSIGNMENT);\n var month = generator.valueToCode(this, \"month\", generator.ORDER_ASSIGNMENT);\n var day = generator.valueToCode(this, \"day\", generator.ORDER_ASSIGNMENT);\n var hour = generator.valueToCode(this, \"hour\", generator.ORDER_ASSIGNMENT);\n var minute = generator.valueToCode(this, \"minute\", generator.ORDER_ASSIGNMENT);\n var second = generator.valueToCode(this, \"second\", generator.ORDER_ASSIGNMENT);\n var code = 'rtctime.settime((' + year + ',' + month + ',' + day + ',' + hour + ',' + minute + ',' + second + ',0,0))\\n';\n return code;\n}\n\nexport const onboard_RTC_settime_string = function (_, generator) {\n var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);\n generator.definitions_['import_rtctime'] = \"import rtctime\";\n var code = 'rtctime.settime(' + cnt + ')\\n';\n return code;\n}\n\nexport const onboard_RTC_get_time = function (_, generator) {\n generator.definitions_['import_time'] = 'import time';\n var code = 'time.localtime()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const onboard_RTC_get_timestamp = function (_, generator) {\n generator.definitions_['import_time'] = 'import time';\n var time = generator.valueToCode(this, 'LIST', generator.ORDER_ATOMIC);\n var code = 'time.mktime(' + time + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const onboard_RTC_timestamp_totuple = function (_, generator) {\n generator.definitions_['import_time'] = 'import time';\n var ts = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = 'time.localtime(' + ts + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const onboard_RTC_get_time_str = function(_,generator){\n generator.definitions_['import_rtctime'] = 'import rtctime';\n var code = 'rtctime.strtime()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const onboard_RTC_get_timetuple_to_str = function(_,generator){\n generator.definitions_['import_rtctime'] = 'import rtctime';\n var ct = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);\n var code = 'rtctime.strtime('+ ct +')';\n return [code, generator.ORDER_ATOMIC];\n}\n\n//mixgo_cc onboard_sensor generators:\n\nexport const sensor_mixgo_cc_mmc5603_get_magnetic = function (_, generator) {\n var key = this.getFieldValue('key');\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'mpython') {\n generator.definitions_['import_mpython_magnetic'] = 'from mpython import magnetic';\n if (key == 'all') {\n var code = 'magnetic.getstrength()';\n } else {\n var code = 'magnetic.getdata()' + key;\n }\n } else if (version == 'mixgo_mini') {\n generator.definitions_['import_mixgo_mini_onboard_i2c'] = 'from mixgo_mini import onboard_i2c';\n generator.definitions_['import_mmc5603'] = 'import mmc5603';\n generator.definitions_['import_onboard_mgs'] = 'onboard_mgs = mmc5603.MMC5603(onboard_i2c)';\n if (key == 'all') {\n var code = 'onboard_mgs.getstrength()';\n } else {\n var code = 'onboard_mgs.getdata()' + key;\n }\n } else {\n generator.definitions_['import_' + version + '_onboard_mgs'] = \"from \" + version + \" import onboard_mgs\";\n if (key == 'all') {\n var code = 'onboard_mgs.getstrength()';\n } else {\n var code = 'onboard_mgs.getdata()' + key;\n }\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_cc_mmc5603_get_angle = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'mpython') {\n generator.definitions_['import_mpython_magnetic'] = 'from mpython import magnetic';\n var code = 'magnetic.getangle()';\n } else if (version == 'mixgo_mini') {\n generator.definitions_['import_mixgo_mini_onboard_i2c'] = 'from mixgo_mini import onboard_i2c';\n generator.definitions_['import_mmc5603'] = 'import mmc5603';\n generator.definitions_['import_onboard_mgs'] = 'onboard_mgs = mmc5603.MMC5603(onboard_i2c)';\n } else {\n generator.definitions_['import_' + version + '_onboard_mgs'] = \"from \" + version + \" import onboard_mgs\";\n }\n var code = 'onboard_mgs.getangle()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgo_cc_mmc5603_calibrate_compass = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'mixgo_mini') {\n generator.definitions_['import_mixgo_mini_onboard_i2c'] = 'from mixgo_mini import onboard_i2c';\n generator.definitions_['import_mmc5603'] = 'import mmc5603';\n generator.definitions_['import_onboard_mgs'] = 'onboard_mgs = mmc5603.MMC5603(onboard_i2c)';\n } else {\n generator.definitions_['import_' + version + '_onboard_mgs'] = \"from \" + version + \" import onboard_mgs\";\n }\n var code = 'onboard_mgs.calibrate()\\n';\n return code;\n}\n\n//mixgo_me onboard_sensor generators:\n\nexport const sensor_mixgome_temperature = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'mixgo_mini') {\n generator.definitions_['import_mixgo_mini_onboard_temperature'] = 'from mixgo_mini import onboard_temperature';\n var code = 'onboard_temperature()';\n } else {\n generator.definitions_['import_mixgo_me_onboard_acc'] = \"from mixgo_me import onboard_acc\";\n var code = 'onboard_acc.temperature()';\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\n//mixgo_ce onboard_sensor generators:\nexport const sensor_mixgoce_temperature = function (_, generator) {\n generator.definitions_['import_mixgo_ce'] = \"import mixgo_ce\";\n var code = 'mixgo_ce.get_temperature()';\n return [code, generator.ORDER_ATOMIC];\n}\n\n//mpython onboard_sensor:\n\nexport const sensor_mpython_qmi8658_get_gyro = function (_, generator) {\n var key = this.getFieldValue('key');\n generator.definitions_['import_mpython_motion'] = 'from mpython import motion';\n var code = 'motion.gyroscope()' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mpython_qmi8658_temperature = function (_, generator) {\n generator.definitions_['import_mpython_motion'] = 'from mpython import motion';\n return ['motion.temperature()', generator.ORDER_ATOMIC];\n}\n\nexport const sensor_rm_pin_near_double = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var direction = this.getFieldValue('direction');\n generator.definitions_['import_' + version + '_adc' + direction] = 'from ' + version + ' import adc' + direction;\n var code = 'adc' + direction + '.read()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_rm_battery_left = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == 'feiyi') {\n generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';\n var code = 'onboard_bot51.read_bat()';\n return [code, generator.ORDER_ATOMIC];\n }\n generator.definitions_['import_' + version + '_battery'] = 'from ' + version + ' import battery';\n var code = 'battery.voltage()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_rm_acc = function (_, generator) {\n var key = this.getFieldValue('key');\n generator.definitions_['import_rm_e1_gyro'] = 'from rm_e1 import gyro';\n var code = 'gyro.acceleration()' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\n//car4.2\nexport const sensor_mixgocar_pin_near_line = function (_, generator) {\n var key = this.getFieldValue('key');\n generator.definitions_['import_mixgocar_c3_onboard_info'] = 'from mixgocar_c3 import onboard_info';\n var code = 'onboard_info.patrol()' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgocar_pin_near = function (_, generator) {\n var key = this.getFieldValue('key');\n generator.definitions_['import_mixgocar_c3_onboard_info'] = 'from mixgocar_c3 import onboard_info';\n var code = 'onboard_info.obstacle()' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixgocar_pin_near_state_change = function (_, generator) {\n var key = this.getFieldValue('key');\n generator.definitions_['import_mixgocar_c3_onboard_info'] = 'from mixgocar_c3 import onboard_info';\n var code = 'onboard_info.ir_mode(onboard_info.' + key + ')\\n';\n return code;\n}\n\nexport const sensor_mixgocar_battery_left = function (_, generator) {\n generator.definitions_['import_mixgocar_c3_onboard_info'] = 'from mixgocar_c3 import onboard_info';\n var code = 'onboard_info.read_bat()';\n return [code, generator.ORDER_ATOMIC];\n}\n\n//mixbot onboard_sensor below:\n\nexport const sensor_mixbot_patrol_calibrate = function (_, generator) {\n var key = this.getFieldValue('key');\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_patrol'] = 'from ' + version + ' import patrol';\n var code = 'patrol.correct(patrol.CORRECTING_' + key + ')\\n';\n return code;\n}\n\nexport const sensor_mixbot_patrol_value = function (_, generator) {\n var key = this.getFieldValue('key');\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_patrol'] = 'from ' + version + ' import patrol';\n var code = 'patrol.getdata()' + key + '';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixbot_temperature = function (_, generator) {\n generator.definitions_['import_mixbot_acc_gyr'] = \"from mixbot import acc_gyr\";\n var code = 'acc_gyr.temperature()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_mixbot_get_gyro = function (_, generator) {\n var key = this.getFieldValue('key');\n generator.definitions_['import_mixbot_acc_gyr'] = \"from mixbot import acc_gyr\";\n var code = 'acc_gyr.gyroscope()' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_bitbot_ALS = function (_, generator) {\n generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';\n var mode = generator.valueToCode(this, 'mode', generator.ORDER_ATOMIC);\n var code = 'onboard_bot51.' + 'read_als(' + mode + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const bitbot_als_num = function (_, generator) {\n var code = this.getFieldValue('PIN');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_button_is_pressed = sensor_mixgo_button_is_pressed;\nexport const sensor_button_was_pressed = sensor_mixgo_button_was_pressed;\nexport const sensor_button_get_presses = sensor_mixgo_button_get_presses;\nexport const sensor_pin_pressed = sensor_mixgo_pin_pressed;\nexport const sensor_pin_near = sensor_mixgo_pin_near;\nexport const sensor_mixgo_light = sensor_LTR308;\nexport const sensor_light = sensor_mixgo_light;\nexport const dht11 = sensor_dht11;\n\n//educore onboard_sensor\nexport const educore_voice_sensor = function (_, generator) {\n generator.definitions_['import_educore_sound'] = 'from educore import sound';\n var code = \"sound()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sensor_read = function (_, generator) {\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub+\".read()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_light_sensor = function (_, generator) {\n generator.definitions_['import_educore_light'] = 'from educore import light';\n var code = \"light()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_gyroscope_sensor = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_'+version+'_accelerometer'] = 'from '+version+' import accelerometer';\n var code = \"accelerometer()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_gyroscope_sensor_read = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_'+version+'_accelerometer'] = 'from '+version+' import accelerometer';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub+\".\"+key+\"()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_gyroscope_sensor_shake = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_'+version+'_accelerometer'] = 'from '+version+' import accelerometer';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub+\".shake()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_button_sensor = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_button'] = 'from ' + version + ' import button';\n var btn = this.getFieldValue('btn');\n var code = 'button(button.'+btn+')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_button_was_pressed = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_button'] = 'from ' + version + ' import button';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub + '.status()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_rfid_sensor = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_rfid'] = 'from ' + version + ' import rfid';\n var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = 'rfid(' + pin + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_rfid_sensor_scan = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_rfid'] = 'from ' + version + ' import rfid';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var code = sub+'.scanning()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const educore_rfid_sensor_scan_data = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_rfid'] = 'from ' + version + ' import rfid';\n var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = sub+'.'+key+'()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const CI130X_IDENTIFY_AND_SAVE_SANT = function(_,generator){\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';\n var code = 'onboard_asr.cmd_id()\\n';\n return code;\n}\n\nexport const CI130X_GET_WHETHER_IDENTIFY_SANT = function(_,generator){\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';\n var cmd = this.getFieldValue('cmd');\n var code = 'onboard_asr.result('+cmd+')';\n return [code,generator.ORDER_ATOMIC];\n}\n\nexport const CI130X_GET_THE_RECOGNIZED_CMD_SANT = function(_,generator){\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';\n var key = this.getFieldValue('key');\n if(key == 'status1'){\n var code = 'onboard_asr.status()[0]';\n }else if(key == 'status2'){\n var code = 'onboard_asr.status()[1]';\n }else{\n var code = 'onboard_asr.'+key +'()';\n }\n return [code,generator.ORDER_ATOMIC];\n}\n\nexport const CI130X_BROADCAST_SANT = function(_,generator){\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';\n var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);\n var star = this.getFieldValue('star');\n var end = this.getFieldValue('end');\n var code = 'onboard_asr.play('+star+','+num+','+end+')\\n';\n return code;\n}\n\nexport const CI130X_SET_SYSTEM_CMD_SANT = function(_,generator){\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + '_onboard_asr'] = 'from ' + version + ' import onboard_asr';\n var cmd = this.getFieldValue('cmd');\n var code = 'onboard_asr.sys_cmd('+cmd+')\\n';\n return code;\n}","export const serial_print = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_uart = this.getFieldValue('mode');\n var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '\"\"'\n var code = \"uart\" + dropdown_uart + \".write(str(\" + content + \"))\\n\";\n return code;\n}\n\nexport const serial_print_byte = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_uart = this.getFieldValue('mode');\n var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '\"\"'\n var code = \"uart\" + dropdown_uart + \".write(\" + content + \")\\n\";\n return code;\n}\n\nexport const serial_println = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_uart = this.getFieldValue('mode');\n var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '\"\"'\n var code = \"uart\" + dropdown_uart + \".write(str(\" + content + \")+'\\\\r\\\\n')\\n\";\n return code;\n}\n\nexport const serial_print_hex = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_uart = this.getFieldValue('mode');\n var dropdown_stat = this.getFieldValue('STAT');\n var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '0';\n var code = \"uart\" + dropdown_uart + \".write(str(\" + dropdown_stat + \"(\" + content + \"))+'\\\\r\\\\n')\\n\";\n return code;\n}\n\nexport const serial_any = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_uart = this.getFieldValue('mode');\n var code = \"uart\" + dropdown_uart + \".any()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const serial_readstr = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_uart = this.getFieldValue('mode');\n var code = \"uart\" + dropdown_uart + \".read()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const serial_readline = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_uart = this.getFieldValue('mode');\n var code = \"uart\" + dropdown_uart + \".readline()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const serial_softserial = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_uart = this.getFieldValue('mode')\n var baudrate = this.getFieldValue('baudrate');\n return \"uart\" + dropdown_uart + \"=machine.UART(\" + dropdown_uart + \", \" + baudrate + \")\\n\";\n}\n\nexport const serial_softserial_new = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var rx = generator.valueToCode(this, 'RX', generator.ORDER_ATOMIC);\n var tx = generator.valueToCode(this, 'TX', generator.ORDER_ATOMIC);\n var dropdown_uart = this.getFieldValue('mode')\n var baudrate = this.getFieldValue('baudrate');\n return \"uart\" + dropdown_uart + \"=machine.UART(\" + dropdown_uart + \", tx=\" + tx + \", rx=\" + rx + \", baudrate=\" + baudrate + \")\\n\";\n}\n\nexport const system_input = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '\"\"';\n return ['input(' + str + ')', generator.ORDER_ATOMIC];\n}\n\nexport const system_print = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '\"\"';\n var code = \"print(\" + str + \")\\n\";\n return code;\n}\n\nexport const system_print_inline = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '\"\"';\n var code = \"print(\" + str + ',end =\"\")\\n';\n return code;\n}\n\nexport const system_print_end = function (_, generator) {\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '\"\"';\n var end = generator.valueToCode(this, 'END', generator.ORDER_ATOMIC) || '\"\"';\n var code = \"print(\" + str + ',end =' + end + ')\\n';\n return code;\n}\n\nexport const system_print_many = function (_, generator) {\n var code = new Array(this.itemCount_);\n var default_value = '0';\n\n for (var n = 0; n < this.itemCount_; n++) {\n\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || default_value;\n }\n\n var code = 'print(' + code.join(', ') + ')\\n';\n return code;\n}\n\nexport const serial_send_to_ai = function (_, generator) {\n generator.definitions_['import_uart_com'] = 'import uart_com';\n var dropdown_uart = this.getFieldValue('mode');\n var dropdown_stat = this.getFieldValue('STAT');\n var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '0';\n var code = \"uart_com.send(uart\" + dropdown_uart + \", \" + content + \", repeat=\" + dropdown_stat + \")\\n\";\n return code;\n}\n\nexport const serial_read_from_ai = function (_, generator) {\n generator.definitions_['import_uart_com'] = 'import uart_com';\n var dropdown_uart = this.getFieldValue('mode');\n var code = \"uart_com.recv(uart\" + dropdown_uart + \")\";\n return [code, generator.ORDER_ATOMIC];\n}","import { Profile } from 'mixly';\n\nexport const system_run_in_background = function (_, generator) {\n var branch = generator.statementToCode(this, 'do');\n return 'control.inBackground(() => {\\n' + branch + '})\\n';\n}\n\nexport const system_reset = function () {\n return 'control.reset()\\n';\n}\n\nexport const system_wait = function (_, generator) {\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC) || Profile.default.serial;\n return 'control.waitMicros(' + data + ')\\n';\n}\n\nexport const system_raise_event = function (_, generator) {\n var source = generator.valueToCode(this, 'system_event_bus_source', generator.ORDER_ATOMIC) || Profile.default.serial;\n var value = generator.valueToCode(this, 'system_event_bus_value', generator.ORDER_ATOMIC) || Profile.default.serial;\n return 'control.raiseEvent(' + source + ', ' + value + ')\\n';\n}\n\nexport const system_on_event = function (_, generator) {\n var source = generator.valueToCode(this, 'system_event_bus_source', generator.ORDER_ATOMIC) || Profile.default.serial;\n var value = generator.valueToCode(this, 'system_event_bus_value', generator.ORDER_ATOMIC) || Profile.default.serial;\n var branch = generator.statementToCode(this, 'do');\n return 'control.onEvent(' + source + ', ' + value + ', () => {\\n' + branch + ')\\n';\n}\n\nexport const system_timestamp = function (_, generator) {\n return ['control.eventTimestamp()', generator.ORDER_ATOMIC];\n}\n\nexport const system_value = function (_, generator) {\n return ['control.eventValue()', generator.ORDER_ATOMIC];\n}\n\nexport const system_event_bus_source = function (_, generator) {\n return [this.getFieldValue('key'), generator.ORDER_ATOMIC];\n}\n\nexport const system_event_bus_value = function (_, generator) {\n return [this.getFieldValue('key'), generator.ORDER_ATOMIC];\n}\n\nexport const system_device_name = function (_, generator) {\n return ['control.deviceName()', generator.ORDER_ATOMIC];\n}\n\nexport const system_device_serial_number = function (_, generator) {\n return ['control.deviceSerialNumber()', generator.ORDER_ATOMIC];\n}\n\n//ok\nexport const Panic_with_status_code = function (_, generator) {\n var status_code = generator.valueToCode(this, 'STATUS_CODE', generator.ORDER_ATOMIC) || '1000'\n var code = 'panic(' + status_code + ')\\n';\n return code;\n}\n\n//ok\nexport const controls_millis = function (_, generator) {\n generator.definitions_['import_time'] = 'import time';\n var dropdown_time = this.getFieldValue('Time');\n switch (dropdown_time) {\n case \"ms\":\n var code = 'time.ticks_ms()';\n return [code, generator.ORDER_ATOMIC];\n case \"us\":\n var code = 'time.ticks_us()';\n return [code, generator.ORDER_ATOMIC];\n }\n}\n\n//ok\nexport const controls_end_program = function () {\n return 'while True:\\n pass\\n';\n}\n\n//ok\nexport const reset = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n return 'reset()\\n';\n}\n\nexport const controls_uname = function (_, generator) {\n generator.definitions_['import_os'] = 'import os';\n return 'os.uname()';\n}\n\nexport const controls_delay = function (_, generator) {\n // generator.definitions_.import_time = \"import time\";\n generator.definitions_['import_time'] = 'import time';\n var delay_time = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ATOMIC) || '1000'\n var dropdown_time = this.getFieldValue('Time');\n switch (dropdown_time) {\n case \"s\":\n var code = 'time.sleep(' + delay_time + ')\\n';\n return code;\n case \"ms\":\n var code = 'time.sleep_ms(' + delay_time + ')\\n';\n return code;\n case \"us\":\n var code = 'time.sleep_us(' + delay_time + ')\\n';\n return code;\n }\n}\n\nexport const controls_delay_new = function (_, generator) {\n // generator.definitions_.import_time = \"import time\";\n generator.definitions_['import_time'] = 'import time';\n var delay_time = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ATOMIC) || '1000'\n var dropdown_time = this.getFieldValue('Time');\n switch (dropdown_time) {\n case \"s\":\n var code = 'time.sleep(' + delay_time + ')\\n';\n return code;\n case \"ms\":\n var code = 'time.sleep_ms(' + delay_time + ')\\n';\n return code;\n case \"us\":\n var code = 'time.sleep_us(' + delay_time + ')\\n';\n return code;\n }\n}\n\nexport const timer = function (_, generator) {\n generator.definitions_['import_mixgo'] = 'import mixgo';\n var v = generator.valueToCode(this, \"VAR\", generator.ORDER_NONE) || \"None\";\n var period = generator.valueToCode(this, \"period\", generator.ORDER_NONE) || \"0\";\n var mode = generator.valueToCode(this, \"mode\", generator.ORDER_NONE) || \"None\";\n var callback = generator.valueToCode(this, \"callback\", generator.ORDER_NONE) || \"None\";\n // var callback = generator.valueToCode(this, \"callback\", generator.ORDER_NONE) || \"None\";\n var code = v + \".init(period = \" + period + \", mode = Timer.\" + mode + \", callback = \" + callback + \")\\n\";\n return code;\n}\n\nexport const system_timer = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var v = generator.valueToCode(this, \"VAR\", generator.ORDER_NONE) || \"None\";\n var period = generator.valueToCode(this, \"period\", generator.ORDER_NONE) || \"0\";\n var mode = this.getFieldValue('mode');\n //var branch = generator.statementToCode(this, 'callback') || generator.PASS;\n var callback = generator.valueToCode(this, \"callback\", generator.ORDER_NONE) || \"None\";\n //var code = v + \".init(period = \" + period + \", mode = machine.Timer.\" + mode + \", callback = \" + v + \"_callback_func)\\n\";\n //generator.setups_['timer_callback_func'] = 'def ' + v + '_callback_func(t):\\n' + branch + '\\n';\n var code = v + \".init(period = \" + period + \", mode = machine.Timer.\" + mode + \", callback = \" + callback + \")\\n\";\n return code;\n}\n\nexport const system_ticks_diff = function (_, generator) {\n generator.definitions_['import_time'] = 'import time';\n var end = generator.valueToCode(this, \"END\", generator.ORDER_NONE) || \"0\";\n var start = generator.valueToCode(this, \"START\", generator.ORDER_NONE) || \"0\";\n var code = \"time.ticks_diff(\" + end + \", \" + start + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const system_timer_init = function (_, generator) {\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n generator.definitions_['import_machine'] = 'import machine';\n var code = v + ' = machine.Timer(0)\\n';\n return code;\n}\n\nexport const system_wdt_init = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var period = generator.valueToCode(this, \"period\", generator.ORDER_NONE) || \"0\";\n var code = 'wdt = machine.WDT(timeout= ' + period + ')\\n';\n return code;\n}\n\nexport const system_wdt_feed = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var code = 'wdt.feed()\\n';\n return code;\n}\n\nexport const system_machine_reset = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var code = 'machine.reset()\\n';\n return code;\n}\n\nexport const system_bitbot_shutdown = function (_, generator) {\n generator.definitions_['import_bitbot_onboard_bot51'] = 'from bitbot import onboard_bot51';\n var code = 'onboard_bot51.shutdown()\\n';\n return code;\n}\n\nexport const Timer_init = system_timer_init;\nexport const timer2 = system_timer;\nexport const time_ticks_diff = system_ticks_diff;\nexport const base_delay = controls_delay;","export const WEATHER_NOW = function (_, generator) {\n generator.definitions_['import_seniverse_api'] = \"import seniverse_api\";\n var dropdown_mode = this.getFieldValue('mode');\n var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);\n var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);\n var code = 'seniverse_api.' + dropdown_mode + '(' + key + ',' + addr + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const WEATHER_DAILY = function (_, generator) {\n generator.definitions_['import_seniverse_api'] = \"import seniverse_api\";\n var dropdown_mode = this.getFieldValue('mode');\n var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);\n var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);\n var day = generator.valueToCode(this, 'day', generator.ORDER_ATOMIC);\n var code = 'seniverse_api.' + dropdown_mode + '(' + key + ',' + addr + ',' + day + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const WEATHER_HOUR = function (_, generator) {\n generator.definitions_['import_seniverse_api'] = \"import seniverse_api\";\n var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);\n var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);\n var hour = generator.valueToCode(this, 'hour', generator.ORDER_ATOMIC);\n var code = 'seniverse_api.weather_hourly(' + key + ',' + addr + ',' + hour + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const Weather_now = function (_, generator) {\n generator.definitions_['import_seniverse_api*'] = \"from seniverse_api import *\";\n var dropdown_mode = this.getFieldValue('mode');\n var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);\n var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);\n var code = dropdown_mode + '.request(' + key + ',' + addr + ')\\n';\n return code;\n};\n\nexport const Weather_now_content = function (_, generator) {\n generator.definitions_['import_seniverse_api*'] = \"from seniverse_api import *\";\n var content = this.getFieldValue('content');\n if (content == 'none') {\n var code = 'Weather_now.analysis()';\n }\n else {\n var code = 'Weather_now.analysis(\"' + content + '\")';\n }\n return [code, generator.ORDER_ATOMIC];\n};\n\nexport const Air_now_content = function (_, generator) {\n generator.definitions_['import_seniverse_api*'] = \"from seniverse_api import *\";\n var content = this.getFieldValue('content');\n if (content == 'none') {\n var code = 'Air_now.analysis()';\n }\n else {\n var code = 'Air_now.analysis(\"' + content + '\")';\n }\n return [code, generator.ORDER_ATOMIC];\n};\n\nexport const Weather_alarm_content = function (_, generator) {\n generator.definitions_['import_seniverse_api*'] = \"from seniverse_api import *\";\n var content = this.getFieldValue('content');\n if (content == 'none') {\n var code = 'Weather_alarm.analysis()';\n }\n else {\n var code = 'Weather_alarm.analysis(\"' + content + '\")';\n }\n return [code, generator.ORDER_ATOMIC];\n};\n\nexport const Life_suggestion_content = function (_, generator) {\n generator.definitions_['import_seniverse_api*'] = \"from seniverse_api import *\";\n var content = this.getFieldValue('content');\n if (content == 'none') {\n var code = 'Life_suggestion.analysis()';\n }\n else {\n var code = 'Life_suggestion.analysis(\"' + content + '\")';\n }\n return [code, generator.ORDER_ATOMIC];\n};\n\nexport const Tide_daily_content = function (_, generator) {\n generator.definitions_['import_seniverse_api*'] = \"from seniverse_api import *\";\n var content = this.getFieldValue('content');\n if (content == 'none') {\n var code = 'Tide_daily.analysis()';\n }\n else {\n var code = 'Tide_daily.analysis(\"' + content + '\")';\n }\n return [code, generator.ORDER_ATOMIC];\n};\n\nexport const Location_search_content = function (_, generator) {\n generator.definitions_['import_seniverse_api*'] = \"from seniverse_api import *\";\n var content = this.getFieldValue('content');\n if (content == 'none') {\n var code = 'Location_search.analysis()';\n }\n else {\n var code = 'Location_search.analysis(\"' + content + '\")';\n }\n return [code, generator.ORDER_ATOMIC];\n};\n\nexport const Weather_daily = function (_, generator) {\n generator.definitions_['import_seniverse_api*'] = \"from seniverse_api import *\";\n var dropdown_mode = this.getFieldValue('mode');\n var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);\n var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);\n var day = generator.valueToCode(this, 'day', generator.ORDER_ATOMIC);\n var code = dropdown_mode + '.request(' + key + ',' + addr + ',' + day + ')\\n';\n return code;\n};\n\nexport const Weather_daily_content = function (_, generator) {\n generator.definitions_['import_seniverse_api*'] = \"from seniverse_api import *\";\n var content = this.getFieldValue('content');\n var day = generator.valueToCode(this, 'day', generator.ORDER_ATOMIC);\n if (content == 'none') {\n var code = 'Weather_daily.analysis('+day+')';\n }\n else {\n var code = 'Weather_daily.analysis(' + day + ',\"' + content + '\")';\n }\n return [code, generator.ORDER_ATOMIC];\n};\n\nexport const Air_daily_content = function (_, generator) {\n generator.definitions_['import_seniverse_api*'] = \"from seniverse_api import *\";\n var content = this.getFieldValue('content');\n var day = generator.valueToCode(this, 'day', generator.ORDER_ATOMIC);\n if (content == 'none') {\n var code = 'Air_daily.analysis('+day+')';\n }\n else {\n var code = 'Air_daily.analysis(' + day + ',\"' + content + '\")';\n }\n return [code, generator.ORDER_ATOMIC];\n};\n\nexport const Geo_sun_content = function (_, generator) {\n generator.definitions_['import_seniverse_api*'] = \"from seniverse_api import *\";\n var content = this.getFieldValue('content');\n var day = generator.valueToCode(this, 'day', generator.ORDER_ATOMIC);\n if (content == 'none') {\n var code = 'Geo_sun.analysis('+day+')';\n }\n else {\n var code = 'Geo_sun.analysis(' + day + ',\"' + content + '\")';\n }\n return [code, generator.ORDER_ATOMIC];\n};\n\nexport const Geo_moon_content = function (_, generator) {\n generator.definitions_['import_seniverse_api*'] = \"from seniverse_api import *\";\n var content = this.getFieldValue('content');\n var day = generator.valueToCode(this, 'day', generator.ORDER_ATOMIC);\n if (content == 'none') {\n var code = 'Geo_moon.analysis('+day+')';\n }\n else {\n var code = 'Geo_moon.analysis(' + day + ',\"' + content + '\")';\n }\n return [code, generator.ORDER_ATOMIC];\n};","import { Profile } from 'mixly';\n\nconst pins = {};\n\npins[\"MixGo MINI\"] = {\n description: \"MicroPython[ESP32C3 MixGo MINI]\",\n digital_pin: Profile.generate(['0-10', '18']),\n input_pin: Profile.generate(['0-10', '18']),\n output_pin: Profile.generate(['0-10', '18']),\n pwm_input: Profile.generate(['0-10', '18'], 'pwm', 'pwm'),\n analog_input: Profile.generate(['0-4'], 'adc', 'adc'),\n pwm_output: Profile.generate(['0-10', '18'], 'pwm', 'pwm'),\n analog_output: Profile.generate(['0-4'], 'adc', 'adc'),\n espnow_channel: Profile.generate(['1-13']),\n haskylens_model: Profile.generate(['0-4']),\n digital: Profile.generate(['0-10', '18'], 'pin', 'pin'),\n pwm_pin: Profile.generate(['0-10', '18']),\n pwm: Profile.generate(['0-10', '18'], 'pwm', 'pwm'),\n analog_pin: Profile.generate(['0-4']),\n analog: Profile.generate(['0-4'], 'adc', 'adc'),\n button: [[\"B1\", \"B1key\"], [\"B2\", \"B2key\"], [\"A1\", \"A1key\"], [\"A2\", \"A2key\"], [\"A3\", \"A3key\"], [\"A4\", \"A4key\"]],\n buttonB: [[\"B1\", \"B1key\"], [\"B2\", \"B2key\"]],\n axis: Profile.generate(['0-4']),\n exlcdh: Profile.generate(['0-11']),\n exlcdv: Profile.generate(['0-7']),\n brightness: Profile.generate(['0-9']),\n tts_voice: Profile.generate(['0-16']),\n tts_builtin_music: Profile.generate(['0-47']),\n tts_bgmusic: Profile.generate(['0-15']),\n //builtinimg: [[\"HEART\", \"matrix.Image.HEART\"],[\"HEART_SMALL\", \"matrix.Image.HEART_SMALL\"],[\"HAPPY\", \"matrix.Image.HAPPY\"],[\"SAD\", \"matrix.Image.SAD\"],[\"SMILE\", \"matrix.Image.SMILE\"],[\"SILLY\", \"matrix.Image.SILLY\"],[\"FABULOUS\", \"matrix.Image.FABULOUS\"],[\"SURPRISED\", \"matrix.Image.SURPRISED\"],[\"ASLEEP\", \"matrix.Image.ASLEEP\"],[\"ANGRY\", \"matrix.Image.ANGRY\"],[\"CONFUSED\", \"matrix.Image.CONFUSED\"],[\"NO\", \"matrix.Image.NO\"],[\"YES\", \"matrix.Image.YES\"],[\"LEFT_ARROW\", \"matrix.Image.LEFT_ARROW\"],[\"RIGHT_ARROW\", \"matrix.Image.RIGHT_ARROW\"],[\"DRESS\", \"matrix.Image.DRESS\"],[\"TRANSFORMERS\", \"matrix.Image.TRANSFORMERS\"],[\"SCISSORS\", \"matrix.Image.SCISSORS\"],[\"EXIT\", \"matrix.Image.EXIT\"],[\"TREE\", \"matrix.Image.TREE\"],[\"PACMAN\", \"matrix.Image.PACMAN\"],[\"TARGET\", \"matrix.Image.TARGET\"],[\"TSHIRT\", \"matrix.Image.TSHIRT\"],[\"ROLLERSKATE\", \"matrix.Image.ROLLERSKATE\"],[\"DUCK\", \"matrix.Image.DUCK\"],[\"HOUSE\", \"matrix.Image.HOUSE\"],[\"TORTOISE\", \"matrix.Image.TORTOISE\"],[\"BUTTERFLY\", \"matrix.Image.BUTTERFLY\"],[\"STICKFIGURE\", \"matrix.Image.STICKFIGURE\"],[\"GHOST\", \"matrix.Image.GHOST\"],[\"PITCHFORK\", \"matrix.Image.PITCHFORK\"],[\"MUSIC_QUAVERS\", \"matrix.Image.MUSIC_QUAVERS\"],[\"MUSIC_QUAVER\", \"matrix.Image.MUSIC_QUAVER\"],[\"MUSIC_CROTCHET\", \"matrix.Image.MUSIC_CROTCHET\"],[\"COW\", \"matrix.Image.COW\"],[\"RABBIT\", \"matrix.Image.RABBIT\"],[\"SQUARE_SMALL\", \"matrix.Image.SQUARE_SMALL\"],[\"SQUARE\", \"matrix.Image.SQUARE\"],[\"DIAMOND_SMALL\", \"matrix.Image.DIAMOND_SMALL\"],[\"DIAMOND\", \"matrix.Image.DIAMOND\"],[\"CHESSBOARD\", \"matrix.Image.CHESSBOARD\"],[\"TRIANGLE_LEFT\", \"matrix.Image.TRIANGLE_LEFT\"],[\"TRIANGLE\", \"matrix.Image.TRIANGLE\"],[\"SNAKE\", \"matrix.Image.SNAKE\"],[\"UMBRELLA\", \"matrix.Image.UMBRELLA\"],[\"SKULL\", \"matrix.Image.SKULL\"],[\"GIRAFFE\", \"matrix.Image.GIRAFFE\"],[\"SWORD\", \"matrix.Image.SWORD\"]],\n builtinimg: [[\"HEART\", \"onboard_matrix.HEART\"], [\"HEART_SMALL\", \"onboard_matrix.HEART_SMALL\"], [\"HAPPY\", \"onboard_matrix.HAPPY\"], [\"SAD\", \"onboard_matrix.SAD\"], [\"SMILE\", \"onboard_matrix.SMILE\"], [\"ANGRY\", \"onboard_matrix.ANGRY\"], [\"NO\", \"onboard_matrix.NO\"], [\"YES\", \"onboard_matrix.YES\"], [\"DOOR_OPEN\", \"onboard_matrix.DOOR_OPEN\"], [\"DOOR_OPENING\", \"onboard_matrix.DOOR_OPENING\"], [\"DOOR_CLOSE\", \"onboard_matrix.DOOR_CLOSE\"]],\n builtinimg_extern: [[\"HEART\", \"matrix32x12.Matrix.HEART\"], [\"HEART_SMALL\", \"matrix32x12.Matrix.HEART_SMALL\"], [\"HAPPY\", \"matrix32x12.Matrix.HAPPY\"], [\"SAD\", \"matrix32x12.Matrix.SAD\"], [\"SMILE\", \"matrix32x12.Matrix.SMILE\"], [\"SILLY\", \"matrix32x12.Matrix.SILLY\"], [\"FABULOUS\", \"matrix32x12.Matrix.FABULOUS\"], [\"SURPRISED\", \"matrix32x12.Matrix.SURPRISED\"], [\"ASLEEP\", \"matrix32x12.Matrix.ASLEEP\"], [\"ANGRY\", \"matrix32x12.Matrix.ANGRY\"], [\"CONFUSED\", \"matrix32x12.Matrix.CONFUSED\"], [\"NO\", \"matrix32x12.Matrix.NO\"], [\"YES\", \"matrix32x12.Matrix.YES\"], [\"LEFT_ARROW\", \"matrix32x12.Matrix.LEFT_ARROW\"], [\"RIGHT_ARROW\", \"matrix32x12.Matrix.RIGHT_ARROW\"], [\"DRESS\", \"matrix32x12.Matrix.DRESS\"], [\"TRANSFORMERS\", \"matrix32x12.Matrix.TRANSFORMERS\"], [\"SCISSORS\", \"matrix32x12.Matrix.SCISSORS\"], [\"EXIT\", \"matrix32x12.Matrix.EXIT\"], [\"TREE\", \"matrix32x12.Matrix.TREE\"], [\"PACMAN\", \"matrix32x12.Matrix.PACMAN\"], [\"TARGET\", \"matrix32x12.Matrix.TARGET\"], [\"TSHIRT\", \"matrix32x12.Matrix.TSHIRT\"], [\"ROLLERSKATE\", \"matrix32x12.Matrix.ROLLERSKATE\"], [\"DUCK\", \"matrix32x12.Matrix.DUCK\"], [\"HOUSE\", \"matrix32x12.Matrix.HOUSE\"], [\"TORTOISE\", \"matrix32x12.Matrix.TORTOISE\"], [\"BUTTERFLY\", \"matrix32x12.Matrix.BUTTERFLY\"], [\"STICKFIGURE\", \"matrix32x12.Matrix.STICKFIGURE\"], [\"GHOST\", \"matrix32x12.Matrix.GHOST\"], [\"PITCHFORK\", \"matrix32x12.Matrix.PITCHFORK\"], [\"onboard_music_QUAVERS\", \"matrix32x12.Matrix.onboard_music_QUAVERS\"], [\"onboard_music_QUAVER\", \"matrix32x12.Matrix.onboard_music_QUAVER\"], [\"onboard_music_CROTCHET\", \"matrix32x12.Matrix.onboard_music_CROTCHET\"], [\"COW\", \"matrix32x12.Matrix.COW\"], [\"RABBIT\", \"matrix32x12.Matrix.RABBIT\"], [\"SQUARE_SMALL\", \"matrix32x12.Matrix.SQUARE_SMALL\"], [\"SQUARE\", \"matrix32x12.Matrix.SQUARE\"], [\"DIAMOND_SMALL\", \"matrix32x12.Matrix.DIAMOND_SMALL\"], [\"DIAMOND\", \"matrix32x12.Matrix.DIAMOND\"], [\"CHESSBOARD\", \"matrix32x12.Matrix.CHESSBOARD\"], [\"TRIANGLE_LEFT\", \"matrix32x12.Matrix.TRIANGLE_LEFT\"], [\"TRIANGLE\", \"matrix32x12.Matrix.TRIANGLE\"], [\"SNAKE\", \"matrix32x12.Matrix.SNAKE\"], [\"UMBRELLA\", \"matrix32x12.Matrix.UMBRELLA\"], [\"SKULL\", \"matrix32x12.Matrix.SKULL\"], [\"GIRAFFE\", \"matrix32x12.Matrix.GIRAFFE\"], [\"SWORD\", \"matrix32x12.Matrix.SWORD\"]],\n imglist: [[\"ALL_CLOCKS\", \"matrix.Image.ALL_CLOCKS\"], [\"ALL_ARROWS\", \"matrix.Image.ALL_ARROWS\"]],\n playlist: [[\"DADADADUM\", \"onboard_music.DADADADUM\"], [\"BIRTHDAY\", \"onboard_music.BIRTHDAY\"], [\"BA_DING\", \"onboard_music.BA_DING\"], [\"JUMP_UP\", \"onboard_music.JUMP_UP\"], [\"JUMP_DOWN\", \"onboard_music.JUMP_DOWN\"], [\"POWER_UP\", \"onboard_music.POWER_UP\"], [\"POWER_DOWN\", \"onboard_music.POWER_DOWN\"]],\n playlist_extern: [[\"DADADADUM\", \"DADADADUM\"], [\"ENTERTAINER\", \"ENTERTAINER\"], [\"PRELUDE\", \"PRELUDE\"], [\"ODE\", \"ODE\"], [\"NYAN\", \"NYAN\"], [\"RINGTONE\", \"RINGTONE\"], [\"FUNK\", \"FUNK\"], [\"BLUES\", \"BLUES\"], [\"BIRTHDAY\", \"BIRTHDAY\"], [\"WEDDING\", \"WEDDING\"], [\"FUNERAL\", \"FUNERAL\"], [\"PUNCHLINE\", \"PUNCHLINE\"], [\"PYTHON\", \"PYTHON\"], [\"BADDY\", \"BADDY\"], [\"CHASE\", \"CHASE\"], [\"BA_DING\", \"BA_DING\"], [\"WAWAWAWAA\", \"WAWAWAWAA\"], [\"JUMP_UP\", \"JUMP_UP\"], [\"JUMP_DOWN\", \"JUMP_DOWN\"], [\"POWER_UP\", \"POWER_UP\"], [\"POWER_DOWN\", \"POWER_DOWN\"]],\n tone_notes: [\n [\"NOTE_C3\", \"131\"], [\"NOTE_D3\", \"147\"], [\"NOTE_E3\", \"165\"], [\"NOTE_F3\", \"175\"], [\"NOTE_G3\", \"196\"], [\"NOTE_A3\", \"220\"], [\"NOTE_B3\", \"247\"],\n [\"NOTE_C4\", \"262\"], [\"NOTE_D4\", \"294\"], [\"NOTE_E4\", \"330\"], [\"NOTE_F4\", \"349\"], [\"NOTE_G4\", \"392\"], [\"NOTE_A4\", \"440\"], [\"NOTE_B4\", \"494\"],\n [\"NOTE_C5\", \"523\"], [\"NOTE_D5\", \"587\"], [\"NOTE_E5\", \"659\"], [\"NOTE_F5\", \"698\"], [\"NOTE_G5\", \"784\"], [\"NOTE_A5\", \"880\"], [\"NOTE_B5\", \"988\"]\n ],\n serial_pin: [[\"pin0\", \"0\"], [\"pin1\", \"1\"], [\"pin2\", \"2\"], [\"pin8\", \"8\"], [\"pin12\", \"12\"], [\"pin13\", \"13\"], [\"pin14\", \"14\"], [\"pin15\", \"15\"], [\"pin16\", \"16\"]],\n radio_power: [['0', '0'], ['1', '1'], ['2', '2'], ['3', '3'], ['4', '4'], ['5', '5'], ['6', '6'], ['7', '7']],\n radio_datarate: [[\"1Mbit\", \"RATE_1MBIT\"], [\"250Kbit\", \"RATE_250KBIT\"], [\"2Mbit\", \"RATE_2MBIT\"]],\n one_more: [[\"ONE_SHOT\", \"ONE_SHOT\"], [\"PERIODIC\", \"PERIODIC\"]],\n digital_dot: [[\"0\", \"0\"], [\"1\", \"1\"], [\"2\", \"2\"]]\n};\n\npins[\"ESP32C2 Generic(2M)\"] = {\n description: \"MicroPython[ESP32C3 MixGo CC]\",\n digital_pin: Profile.generate(['0-11', '18-21']),\n input_pin: Profile.generate(['0-11', '18-21']),\n output_pin: Profile.generate(['0-11', '18-21']),\n pwm_input: Profile.generate(['0-11', '18-21'], 'pwm', 'pwm'),\n analog_input: Profile.generate(['0-5'], 'adc', 'adc'),\n pwm_output: Profile.generate(['0-11', '18-21'], 'pwm', 'pwm'),\n analog_output: Profile.generate(['0-5'], 'adc', 'adc'),\n espnow_channel: Profile.generate(['1-13']),\n haskylens_model: Profile.generate(['0-4']),\n digital: Profile.generate(['0-11', '18-21'], 'pin', 'pin'),\n pwm_pin: Profile.generate(['0-11', '18-21']),\n pwm: Profile.generate(['0-11', '18-21'], 'pwm', 'pwm'),\n analog_pin: Profile.generate(['0-5']),\n analog: Profile.generate(['0-5'], 'adc', 'adc'),\n button: [[\"B1\", \"B1key\"], [\"B2\", \"B2key\"], [\"A1\", \"A1key\"], [\"A2\", \"A2key\"], [\"A3\", \"A3key\"], [\"A4\", \"A4key\"]],\n buttonB: [[\"B1\", \"B1key\"], [\"B2\", \"B2key\"]],\n axis: Profile.generate(['0-4']),\n exlcdh: Profile.generate(['0-31']),\n exlcdv: Profile.generate(['0-11']),\n brightness: Profile.generate(['0-9']),\n tts_voice: Profile.generate(['0-16']),\n tts_builtin_music: Profile.generate(['0-47']),\n tts_bgmusic: Profile.generate(['0-15']),\n //builtinimg: [[\"HEART\", \"matrix.Image.HEART\"],[\"HEART_SMALL\", \"matrix.Image.HEART_SMALL\"],[\"HAPPY\", \"matrix.Image.HAPPY\"],[\"SAD\", \"matrix.Image.SAD\"],[\"SMILE\", \"matrix.Image.SMILE\"],[\"SILLY\", \"matrix.Image.SILLY\"],[\"FABULOUS\", \"matrix.Image.FABULOUS\"],[\"SURPRISED\", \"matrix.Image.SURPRISED\"],[\"ASLEEP\", \"matrix.Image.ASLEEP\"],[\"ANGRY\", \"matrix.Image.ANGRY\"],[\"CONFUSED\", \"matrix.Image.CONFUSED\"],[\"NO\", \"matrix.Image.NO\"],[\"YES\", \"matrix.Image.YES\"],[\"LEFT_ARROW\", \"matrix.Image.LEFT_ARROW\"],[\"RIGHT_ARROW\", \"matrix.Image.RIGHT_ARROW\"],[\"DRESS\", \"matrix.Image.DRESS\"],[\"TRANSFORMERS\", \"matrix.Image.TRANSFORMERS\"],[\"SCISSORS\", \"matrix.Image.SCISSORS\"],[\"EXIT\", \"matrix.Image.EXIT\"],[\"TREE\", \"matrix.Image.TREE\"],[\"PACMAN\", \"matrix.Image.PACMAN\"],[\"TARGET\", \"matrix.Image.TARGET\"],[\"TSHIRT\", \"matrix.Image.TSHIRT\"],[\"ROLLERSKATE\", \"matrix.Image.ROLLERSKATE\"],[\"DUCK\", \"matrix.Image.DUCK\"],[\"HOUSE\", \"matrix.Image.HOUSE\"],[\"TORTOISE\", \"matrix.Image.TORTOISE\"],[\"BUTTERFLY\", \"matrix.Image.BUTTERFLY\"],[\"STICKFIGURE\", \"matrix.Image.STICKFIGURE\"],[\"GHOST\", \"matrix.Image.GHOST\"],[\"PITCHFORK\", \"matrix.Image.PITCHFORK\"],[\"MUSIC_QUAVERS\", \"matrix.Image.MUSIC_QUAVERS\"],[\"MUSIC_QUAVER\", \"matrix.Image.MUSIC_QUAVER\"],[\"MUSIC_CROTCHET\", \"matrix.Image.MUSIC_CROTCHET\"],[\"COW\", \"matrix.Image.COW\"],[\"RABBIT\", \"matrix.Image.RABBIT\"],[\"SQUARE_SMALL\", \"matrix.Image.SQUARE_SMALL\"],[\"SQUARE\", \"matrix.Image.SQUARE\"],[\"DIAMOND_SMALL\", \"matrix.Image.DIAMOND_SMALL\"],[\"DIAMOND\", \"matrix.Image.DIAMOND\"],[\"CHESSBOARD\", \"matrix.Image.CHESSBOARD\"],[\"TRIANGLE_LEFT\", \"matrix.Image.TRIANGLE_LEFT\"],[\"TRIANGLE\", \"matrix.Image.TRIANGLE\"],[\"SNAKE\", \"matrix.Image.SNAKE\"],[\"UMBRELLA\", \"matrix.Image.UMBRELLA\"],[\"SKULL\", \"matrix.Image.SKULL\"],[\"GIRAFFE\", \"matrix.Image.GIRAFFE\"],[\"SWORD\", \"matrix.Image.SWORD\"]],\n builtinimg: [[\"HEART\", \"onboard_matrix.HEART\"], [\"HEART_SMALL\", \"onboard_matrix.HEART_SMALL\"], [\"HAPPY\", \"onboard_matrix.HAPPY\"], [\"SAD\", \"onboard_matrix.SAD\"], [\"SMILE\", \"onboard_matrix.SMILE\"], [\"SILLY\", \"onboard_matrix.SILLY\"], [\"FABULOUS\", \"onboard_matrix.FABULOUS\"], [\"SURPRISED\", \"onboard_matrix.SURPRISED\"], [\"ASLEEP\", \"onboard_matrix.ASLEEP\"], [\"ANGRY\", \"onboard_matrix.ANGRY\"], [\"CONFUSED\", \"onboard_matrix.CONFUSED\"], [\"NO\", \"onboard_matrix.NO\"], [\"YES\", \"onboard_matrix.YES\"]],\n builtinimg_extern: [[\"HEART\", \"matrix32x12.Matrix.HEART\"], [\"HEART_SMALL\", \"matrix32x12.Matrix.HEART_SMALL\"], [\"HAPPY\", \"matrix32x12.Matrix.HAPPY\"], [\"SAD\", \"matrix32x12.Matrix.SAD\"], [\"SMILE\", \"matrix32x12.Matrix.SMILE\"], [\"SILLY\", \"matrix32x12.Matrix.SILLY\"], [\"FABULOUS\", \"matrix32x12.Matrix.FABULOUS\"], [\"SURPRISED\", \"matrix32x12.Matrix.SURPRISED\"], [\"ASLEEP\", \"matrix32x12.Matrix.ASLEEP\"], [\"ANGRY\", \"matrix32x12.Matrix.ANGRY\"], [\"CONFUSED\", \"matrix32x12.Matrix.CONFUSED\"], [\"NO\", \"matrix32x12.Matrix.NO\"], [\"YES\", \"matrix32x12.Matrix.YES\"], [\"LEFT_ARROW\", \"matrix32x12.Matrix.LEFT_ARROW\"], [\"RIGHT_ARROW\", \"matrix32x12.Matrix.RIGHT_ARROW\"], [\"DRESS\", \"matrix32x12.Matrix.DRESS\"], [\"TRANSFORMERS\", \"matrix32x12.Matrix.TRANSFORMERS\"], [\"SCISSORS\", \"matrix32x12.Matrix.SCISSORS\"], [\"EXIT\", \"matrix32x12.Matrix.EXIT\"], [\"TREE\", \"matrix32x12.Matrix.TREE\"], [\"PACMAN\", \"matrix32x12.Matrix.PACMAN\"], [\"TARGET\", \"matrix32x12.Matrix.TARGET\"], [\"TSHIRT\", \"matrix32x12.Matrix.TSHIRT\"], [\"ROLLERSKATE\", \"matrix32x12.Matrix.ROLLERSKATE\"], [\"DUCK\", \"matrix32x12.Matrix.DUCK\"], [\"HOUSE\", \"matrix32x12.Matrix.HOUSE\"], [\"TORTOISE\", \"matrix32x12.Matrix.TORTOISE\"], [\"BUTTERFLY\", \"matrix32x12.Matrix.BUTTERFLY\"], [\"STICKFIGURE\", \"matrix32x12.Matrix.STICKFIGURE\"], [\"GHOST\", \"matrix32x12.Matrix.GHOST\"], [\"PITCHFORK\", \"matrix32x12.Matrix.PITCHFORK\"], [\"onboard_music_QUAVERS\", \"matrix32x12.Matrix.onboard_music_QUAVERS\"], [\"onboard_music_QUAVER\", \"matrix32x12.Matrix.onboard_music_QUAVER\"], [\"onboard_music_CROTCHET\", \"matrix32x12.Matrix.onboard_music_CROTCHET\"], [\"COW\", \"matrix32x12.Matrix.COW\"], [\"RABBIT\", \"matrix32x12.Matrix.RABBIT\"], [\"SQUARE_SMALL\", \"matrix32x12.Matrix.SQUARE_SMALL\"], [\"SQUARE\", \"matrix32x12.Matrix.SQUARE\"], [\"DIAMOND_SMALL\", \"matrix32x12.Matrix.DIAMOND_SMALL\"], [\"DIAMOND\", \"matrix32x12.Matrix.DIAMOND\"], [\"CHESSBOARD\", \"matrix32x12.Matrix.CHESSBOARD\"], [\"TRIANGLE_LEFT\", \"matrix32x12.Matrix.TRIANGLE_LEFT\"], [\"TRIANGLE\", \"matrix32x12.Matrix.TRIANGLE\"], [\"SNAKE\", \"matrix32x12.Matrix.SNAKE\"], [\"UMBRELLA\", \"matrix32x12.Matrix.UMBRELLA\"], [\"SKULL\", \"matrix32x12.Matrix.SKULL\"], [\"GIRAFFE\", \"matrix32x12.Matrix.GIRAFFE\"], [\"SWORD\", \"matrix32x12.Matrix.SWORD\"]],\n imglist: [[\"ALL_CLOCKS\", \"matrix.Image.ALL_CLOCKS\"], [\"ALL_ARROWS\", \"matrix.Image.ALL_ARROWS\"]],\n playlist: [[\"DADADADUM\", \"onboard_music.DADADADUM\"], [\"ENTERTAINER\", \"onboard_music.ENTERTAINER\"], [\"PRELUDE\", \"onboard_music.PRELUDE\"], [\"ODE\", \"onboard_music.ODE\"], [\"NYAN\", \"onboard_music.NYAN\"], [\"RINGTONE\", \"onboard_music.RINGTONE\"], [\"FUNK\", \"onboard_music.FUNK\"], [\"BLUES\", \"onboard_music.BLUES\"], [\"BIRTHDAY\", \"onboard_music.BIRTHDAY\"], [\"WEDDING\", \"onboard_music.WEDDING\"], [\"FUNERAL\", \"onboard_music.FUNERAL\"], [\"PUNCHLINE\", \"onboard_music.PUNCHLINE\"], [\"PYTHON\", \"onboard_music.PYTHON\"], [\"BADDY\", \"onboard_music.BADDY\"], [\"CHASE\", \"onboard_music.CHASE\"], [\"BA_DING\", \"onboard_music.BA_DING\"], [\"WAWAWAWAA\", \"onboard_music.WAWAWAWAA\"], [\"JUMP_UP\", \"onboard_music.JUMP_UP\"], [\"JUMP_DOWN\", \"onboard_music.JUMP_DOWN\"], [\"POWER_UP\", \"onboard_music.POWER_UP\"], [\"POWER_DOWN\", \"onboard_music.POWER_DOWN\"]],\n playlist_extern: [[\"DADADADUM\", \"DADADADUM\"], [\"ENTERTAINER\", \"ENTERTAINER\"], [\"PRELUDE\", \"PRELUDE\"], [\"ODE\", \"ODE\"], [\"NYAN\", \"NYAN\"], [\"RINGTONE\", \"RINGTONE\"], [\"FUNK\", \"FUNK\"], [\"BLUES\", \"BLUES\"], [\"BIRTHDAY\", \"BIRTHDAY\"], [\"WEDDING\", \"WEDDING\"], [\"FUNERAL\", \"FUNERAL\"], [\"PUNCHLINE\", \"PUNCHLINE\"], [\"PYTHON\", \"PYTHON\"], [\"BADDY\", \"BADDY\"], [\"CHASE\", \"CHASE\"], [\"BA_DING\", \"BA_DING\"], [\"WAWAWAWAA\", \"WAWAWAWAA\"], [\"JUMP_UP\", \"JUMP_UP\"], [\"JUMP_DOWN\", \"JUMP_DOWN\"], [\"POWER_UP\", \"POWER_UP\"], [\"POWER_DOWN\", \"POWER_DOWN\"]],\n tone_notes: [\n [\"NOTE_C3\", \"131\"], [\"NOTE_D3\", \"147\"], [\"NOTE_E3\", \"165\"], [\"NOTE_F3\", \"175\"], [\"NOTE_G3\", \"196\"], [\"NOTE_A3\", \"220\"], [\"NOTE_B3\", \"247\"],\n [\"NOTE_C4\", \"262\"], [\"NOTE_D4\", \"294\"], [\"NOTE_E4\", \"330\"], [\"NOTE_F4\", \"349\"], [\"NOTE_G4\", \"392\"], [\"NOTE_A4\", \"440\"], [\"NOTE_B4\", \"494\"],\n [\"NOTE_C5\", \"523\"], [\"NOTE_D5\", \"587\"], [\"NOTE_E5\", \"659\"], [\"NOTE_F5\", \"698\"], [\"NOTE_G5\", \"784\"], [\"NOTE_A5\", \"880\"], [\"NOTE_B5\", \"988\"]\n ],\n serial_pin: [[\"pin0\", \"0\"], [\"pin1\", \"1\"], [\"pin2\", \"2\"], [\"pin8\", \"8\"], [\"pin12\", \"12\"], [\"pin13\", \"13\"], [\"pin14\", \"14\"], [\"pin15\", \"15\"], [\"pin16\", \"16\"]],\n radio_power: [['0', '0'], ['1', '1'], ['2', '2'], ['3', '3'], ['4', '4'], ['5', '5'], ['6', '6'], ['7', '7']],\n radio_datarate: [[\"1Mbit\", \"RATE_1MBIT\"], [\"250Kbit\", \"RATE_250KBIT\"], [\"2Mbit\", \"RATE_2MBIT\"]],\n one_more: [[\"ONE_SHOT\", \"ONE_SHOT\"], [\"PERIODIC\", \"PERIODIC\"]],\n digital_dot: [[\"0\", \"0\"], [\"1\", \"1\"], [\"2\", \"2\"]],\n};\n\nexport default pins;","import * as Blockly from 'blockly/core';\n\nconst BASE_HUE = 20; //'#ae3838';//40;\n\nexport const inout_highlow = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_HIGH, \"HIGH\"],\n [Blockly.Msg.MIXLY_LOW, \"LOW\"]\n ]), 'BOOL')\n this.setOutput(true, Boolean);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_HIGHLOW_TOOLTIP);\n }\n};\n\nexport const inout_digital_write = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_Digital_PINMODEOUT)\n .setCheck(Number);\n this.appendValueInput(\"STAT\")\n .appendField(Blockly.Msg.MIXLY_STAT)\n .setCheck([Number, Boolean]);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_DIGITAL_WRITE_TOOLTIP);\n }\n};\n\nexport const inout_digital_read = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(Blockly.Msg.MIXLY_Digital_PINMODEIN)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)\n this.setInputsInline(true);\n this.setOutput(true, [Boolean, Number]);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_DIGITAL_READ_TOOLTIP);\n }\n};\n\nexport const inout_analog_write = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(\"DAC\" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n .setCheck(Number);\n this.appendValueInput(\"NUM\", Number)\n .appendField(Blockly.Msg.MIXLY_VALUE2)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_TOOLTIP);\n }\n};\n\nexport const inout_analog_write_set = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_PERIOD_MIL)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_mSecond, \"period\"],\n [Blockly.Msg.MIXLY_uSecond, \"period_microseconds\"]\n ]), \"key\");\n this.appendValueInput(\"NUM\", Number)\n .appendField(Blockly.Msg.MIXLY_STAT)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_SET_TOOLTIP);\n }\n};\n\nexport const inout_analog_atten = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_Analog_PINMODEIN)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_ESP32_REF_VOLTAGE + Blockly.Msg.MIXLY_STAT)\n .appendField(new Blockly.FieldDropdown([\n [\"3.3V\", \"machine.ADC.ATTN_11DB\"],\n [\"2.2V\", \"machine.ADC.ATTN_6DB\"],\n [\"1.5V\", \"machine.ADC.ATTN_2_5DB\"],\n [\"1.2V\", \"machine.ADC.ATTN_0DB\"]\n ]), \"atten\");\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_ATTEN_TOOLTIP);\n }\n};\n\n\nexport const inout_pin_pressed = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput('pin')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR);\n // this.appendDummyInput()\n // .appendField(Blockly.Msg.MIXLY_IS_TOUCHED);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_TOOLTIP);\n }\n};\n\nexport const inout_pin_attachInterrupt = {\n init: function () {\n this.setColour(20);\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_ATTACHINTERRUPT_PIN)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MODE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_RISING, \"machine.Pin.IRQ_RISING\"],\n [Blockly.Msg.MIXLY_FALLING, \"machine.Pin.IRQ_FALLING\"],\n [Blockly.Msg.MIXLY_CHANGE, \"(machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING)\"]\n ]), \"mode\");\n this.appendValueInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_ATTACHINTERRUPT_TOOLTIP);\n }\n};\n\nexport const inout_digital_init = {\n init: function () {\n this.setColour(20);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .appendField(new Blockly.FieldTextInput('pin#'), 'PIN_OBJ');\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)\n // .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE+Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_Digital_PINMODEOUT, \"machine.Pin.OUT\"],\n [Blockly.Msg.MIXLY_Digital_PINMODEIN, \"machine.Pin.IN\"],\n [Blockly.Msg.MIXLY_PINMODEPULLUP, \"machine.Pin.IN, machine.Pin.PULL_UP\"],\n [Blockly.Msg.MIXLY_PINMODEPULLDOWN, \"machine.Pin.IN, machine.Pin.PULL_DOWN\"]\n ]), \"MODE\")\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_DIGITAL_INIT_TOOLTIP);\n },\n getVars: function () {\n return [this.getFieldValue('PIN_OBJ') == 'pin#' ? null : this.getFieldValue('PIN_OBJ')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {\n this.setTitleValue(newName, 'PIN_OBJ');\n }\n }\n};\n\nexport const inout_analog_write_init = {\n init: function () {\n this.setColour(BASE_HUE);\n // this.appendValueInput(\"PIN\", Number)\n // .appendField(Blockly.Msg.MIXLY_SETUP)\n // .appendField(\"PWM\"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n // .appendField('pwm')\n // .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .appendField(new Blockly.FieldTextInput('dac#'), 'PIN_OBJ')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)\n this.appendDummyInput(\"\")\n .appendField(\"DAC\" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n // .appendField('dac')\n // .appendField(new Blockly.FieldDropdown(profile.default.dac_pin),\"PIN\")\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_INIT_TOOLTIP);\n },\n getVars: function () {\n return [this.getFieldValue('PIN_OBJ') == 'dac#' ? null : this.getFieldValue('PIN_OBJ')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {\n this.setTitleValue(newName, 'PIN_OBJ');\n }\n }\n};\n\nexport const inout_pin_pressed_init = {\n init: function () {\n this.setColour(BASE_HUE);\n // this.appendValueInput(\"PIN\", Number)\n // .appendField(Blockly.Msg.MIXLY_SETUP)\n // .appendField(\"PWM\"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n // .appendField('pwm')\n // .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP)\n .appendField(new Blockly.FieldTextInput('tc#'), 'PIN_OBJ')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR)\n // .appendField('tc')\n // .appendField(new Blockly.FieldDropdown(profile.default.tc_pin),\"PIN\")\n this.appendValueInput(\"PIN\", Number)\n .appendField(Blockly.Msg.MIXLY_PIN)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_INIT_TOOLTIP);\n },\n getVars: function () {\n return [this.getFieldValue('PIN_OBJ') == 'tc#' ? null : this.getFieldValue('PIN_OBJ')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {\n this.setTitleValue(newName, 'PIN_OBJ');\n }\n }\n};\n\nexport const inout_analog_write_set_freq = {\n init: function () {\n this.setColour(BASE_HUE);\n this.appendValueInput(\"PIN\", Number)\n .appendField(\"PWM\" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)\n .setCheck(Number);\n this.appendValueInput(\"NUM\", Number)\n .appendField(Blockly.Msg.MIXLY_FREQUENCY + Blockly.Msg.MIXLY_STAT)\n .setCheck(Number);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PWM_ANALOG_WRITE_SET_FREQ_TOOLTIP);\n }\n};\n\nexport const inout_pinMode = inout_digital_init;\nexport const pin_pressed_init = inout_pin_pressed_init;\nexport const pin_pressed = inout_pin_pressed;\nexport const controls_pin_attachInterrupt = inout_pin_attachInterrupt;\n","import * as Blockly from 'blockly/core';\n\nconst MEGO_HUE = 100;\n\n// LED\nexport const me_go_light_number = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXGO_LEFT_FRONT + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, \"GLED[0]\"],\n [Blockly.Msg.MIXGO_RIGHT_FRONT + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, \"GLED[1]\"],\n [Blockly.Msg.MIXGO_LEFT_BACK + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, \"GLED[3]\"],\n [Blockly.Msg.MIXGO_RIGHT_BACK + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, \"GLED[2]\"],\n [Blockly.Msg.MIXGO_LEFT_FRONT + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, \"RLED[0]\"],\n [Blockly.Msg.MIXGO_RIGHT_FRONT + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, \"RLED[1]\"],\n [Blockly.Msg.MIXGO_LEFT_BACK + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, \"RLED[3]\"],\n [Blockly.Msg.MIXGO_RIGHT_BACK + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, \"RLED[2]\"],\n [Blockly.Msg.ME_GO_LIGHT_HEADLIGHT, \"WLED\"]\n ]), 'op')\n this.setOutput(true);\n }\n};\n\nexport const me_go_led_bright = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING);\n this.appendValueInput('led')\n .appendField('ME GO')\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_SETONOFF);\n }\n};\n\nexport const me_go_get_led_bright = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);\n this.appendValueInput('led')\n .appendField('ME GO')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_BRIGHTNESS)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);\n }\n};\n\nexport const me_go_get_led_state = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);\n this.appendValueInput('led')\n .appendField('ME GO')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);\n }\n};\n\nexport const me_go_led_brightness = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETTING);\n this.appendValueInput('led')\n .appendField('ME GO')\n this.appendValueInput('bright')\n .appendField(Blockly.Msg.MIXLY_BRIGHTNESS)\n this.appendDummyInput(\"\")\n .appendField(\"%\")\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_BUILDIN_LED + Blockly.Msg.MIXLY_BRIGHTNESS + '(0-10)');\n }\n};\n\nexport const me_go_stepper_keep = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(\"ME GO\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.blockpy_forward, \"F\"],\n [Blockly.Msg.blockpy_backward, \"B\"],\n [Blockly.Msg.blockpy_left, \"L\"],\n [Blockly.Msg.blockpy_right, \"R\"]\n ]), \"VAR\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);\n this.appendDummyInput(\"\")\n .appendField(\"%\")\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const me_go_stepper_stop = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(\"ME GO\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MOTOR_P, \"P\"],\n [Blockly.Msg.MOTOR_N, \"N\"]\n ]), \"VAR\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const me_go_dc_motor = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(\"ME GO\")\n .appendField(Blockly.Msg.MOTOR_DC)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLYCAR_WHEEL_LEFT, \"0\"],\n [Blockly.Msg.MIXLYCAR_WHEEL_RIGHT, \"1\"],\n [Blockly.Msg.ME_GO_MOTOR_EXTERN, \"2\"]\n ]), \"wheel\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.ROTATION_FORWARD, \"CW\"],\n [Blockly.Msg.ROTATION_BACKWARD, \"CCW\"],\n [Blockly.Msg.MOTOR_P, \"P\"],\n [Blockly.Msg.MOTOR_N, \"N\"]\n ]), \"direction\");\n this.appendValueInput('speed')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);\n this.appendDummyInput(\"\")\n .appendField(\"%\")\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n}\n\nexport const me_go_hall_attachInterrupt = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_ESP32_INTERRUPT)\n .appendField(Blockly.Msg.ME_GO_HALL_SENSOR)\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, \"A\"], [Blockly.Msg.TEXT_TRIM_RIGHT, \"B\"]]), \"mode\");\n this.appendValueInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};\n\nexport const me_go_hall_initialize = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.ME_GO_HALL_SENSOR)\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, \"A\"], [Blockly.Msg.TEXT_TRIM_RIGHT, \"B\"]]), \"mode\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP)\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([['turns', \"turns\"], ['distance', \"distance\"], ['turns,distance', 'all']]), \"args\");\n this.appendValueInput('num')\n .setCheck(Number)\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n};\n\nexport const me_go_hall_data = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.ME_GO_HALL_SENSOR)\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, \"A\"], [Blockly.Msg.TEXT_TRIM_RIGHT, \"B\"]]), \"mode\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([['turns', \"turns\"], ['distance', \"distance\"], ['speed', 'speed']]), \"args\");\n this.setOutput(true);\n this.setInputsInline(true);\n }\n};\n\nexport const me_go_pin_near_line = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.TEXT_TRIM_LEFT, \"[0]\"],\n [Blockly.Msg.MIXGO_LEFT_MID, \"[1]\"],\n [Blockly.Msg.MIXGO_RIGHT_MID, \"[2]\"],\n [Blockly.Msg.TEXT_TRIM_RIGHT, \"[3]\"],\n [Blockly.Msg.MIXLY_ALL, \"\"]\n ]), \"key\")\n .appendField(Blockly.Msg.MIXGO_LINE_SENSOR_VAL);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(function () {\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;\n return mode0 + mode1\n });\n }\n};\n\nexport const me_go_pin_near = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXGO_LEFT_FRONT, \"[0]\"],\n [Blockly.Msg.MIXGO_RIGHT_FRONT, \"[1]\"],\n [Blockly.Msg.MIXGO_LEFT_BACK, \"[3]\"],\n [Blockly.Msg.MIXGO_RIGHT_BACK, \"[2]\"],\n [Blockly.Msg.MIXLY_ALL, \"\"]\n ]), \"key\")\n .appendField(Blockly.Msg.MIXGO_PROXIMITY_SENSOR);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(function () {\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;\n return mode0 + mode1\n });\n }\n};\n\nexport const me_go_pin_near_state_change = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MIXGO_CAR_SENSOR_ONBOARD_CHANGE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_ME_GO_CAR_SENSOR_ONBOARD_AUTO_CHANGE, \"AS\"],\n [Blockly.Msg.MIXLY_MIXGO_CAR_USE_LINE_ONLY, \"LP\"],\n [Blockly.Msg.MIXLY_MIXGO_CAR_USE_PROXIMITY_ONLY, \"OA\"],\n [Blockly.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_ONLY, \"LS\"],\n [Blockly.Msg.ME_GO_SENSOR_MODE_OFF, \"CL\"]\n ]), \"key\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n }\n};\n\nexport const sensor_mixgome_eulerangles = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_GET_GESTURE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.ME_GO_PITCH, '[0]'],\n [Blockly.Msg.ME_GO_ROLL, '[1]'],\n [Blockly.Msg.ME_GO_PITCH + ', ' + Blockly.Msg.ME_GO_ROLL, '']\n ]), 'angle');\n // this.appendDummyInput(\"\")\n // .appendField(Blockly.Msg.BOARD_DIRECTION)\n // .appendField(new Blockly.FieldDropdown([\n // [Blockly.Msg.OLED_VER,'True'],\n // [Blockly.Msg.OLED_HOR,'False'],\n // ]),'dir');\n this.appendDummyInput(\"\")\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const me_go_pin_light = {\n init: function () {\n this.setColour(MEGO_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.TEXT_TRIM_LEFT, \"[0]\"],\n [Blockly.Msg.MIXGO_LEFT_MID, \"[1]\"],\n [Blockly.Msg.MIXGO_RIGHT_MID, \"[2]\"],\n [Blockly.Msg.TEXT_TRIM_RIGHT, \"[3]\"],\n [Blockly.Msg.MIXLY_ALL, \"\"]\n ]), \"key\")\n .appendField(Blockly.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_SENSOR);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(function () {\n var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;\n var mode1 = Blockly.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_SENSOR;\n return mode0 + mode1\n });\n }\n};","import * as Blockly from 'blockly/core';\nimport { Boards } from 'mixly';\n\nconst MEG1_HUE = 40;\n\nexport const mini_g2_aht11 = {\n init: function () {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\") { var name = 'ME G1' }\n this.setColour(MEG1_HUE);\n this.appendDummyInput(\"\")\n .appendField(name)\n .appendField(Blockly.Msg.MIXLY_TEM_HUM + \" AHT21\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GETTEMPERATUE, \"temperature\"],\n [Blockly.Msg.MIXLY_GETHUMIDITY, \"humidity\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('key');\n var TOOLTIPS = {\n \"temperature\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,\n \"relative_humidity\": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP\n };\n return TOOLTIPS[mode]\n });\n }\n};\n\nexport const mini_g2_hp203 = {\n init: function () {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\") { var name = 'ME G1' }\n this.setColour(MEG1_HUE);\n this.appendDummyInput(\"\")\n .appendField(name)\n .appendField(Blockly.Msg.MIXLY_Altitude + Blockly.Msg.MSG.catSensor + \" HP203X\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_GETPRESSURE, \"pressure()\"],\n [Blockly.Msg.MIXLY_GETTEMPERATUE, \"temperature()\"],\n [Blockly.Msg.MIXLY_GET_ALTITUDE, \"altitude()\"],\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const mini_g2_varistor = {\n init: function () {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\") { var name = 'ME G1' }\n this.setColour(MEG1_HUE);\n this.appendDummyInput()\n .appendField(name)\n .appendField(Blockly.Msg.MIXLY_MIXGO_NOVA_POTENTIAL_NUM);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const mini_g2_rfid_readid = {\n init: function () {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\") { var name = 'ME G1' }\n this.setColour(MEG1_HUE);\n this.appendDummyInput()\n .appendField(name)\n .appendField(\"RFID\" + Blockly.Msg.MIXLY_RFID_READ_CARD);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_RFID_READ_CARD_UID);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const mini_g2_rfid_readcontent = {\n init: function () {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\") { var name = 'ME G1' }\n this.setColour(MEG1_HUE);\n this.appendDummyInput()\n .appendField(name)\n .appendField(\"RFID\" + Blockly.Msg.MIXLY_RFID_READ_CARD);\n this.appendValueInput('SECTOR')\n .appendField(Blockly.Msg.MIXLY_LIST_INDEX)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};\n\nexport const mini_g2_rfid_write = {\n init: function () {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\") { var name = 'ME G1' }\n this.setColour(MEG1_HUE);\n this.appendDummyInput()\n .appendField(name)\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_RFID_WRITE);\n this.appendValueInput('SECTOR')\n .appendField(Blockly.Msg.MIXLY_LIST_INDEX)\n this.appendValueInput('CONTENT')\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_WRITE_NUM)\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n }\n};\n\nexport const mini_g2_rfid_write_outcome = {\n init: function () {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\") { var name = 'ME G1' }\n this.setColour(MEG1_HUE);\n this.appendDummyInput()\n .appendField(name)\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_RFID_WRITE);\n this.appendValueInput('SECTOR')\n .appendField(Blockly.Msg.MIXLY_LIST_INDEX)\n this.appendValueInput('CONTENT')\n .appendField(Blockly.Msg.MIXLY_COMMUNICATION_WRITE_NUM)\n this.appendDummyInput()\n .appendField(Blockly.Msg.RETURN_SUCCESS_OR_NOT)\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const mini_g2_rfid_status = {\n init: function () {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n if (version == \"mixgo_me\") { var name = 'ME G1' }\n this.setColour(MEG1_HUE);\n this.appendDummyInput()\n .appendField(name)\n .appendField(\"RFID\");\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_RFID_SCAN_OK, \"True\"],\n [Blockly.Msg.MIXLY_RFID_SCAN_NOTAGERR, \"None\"],\n [Blockly.Msg.MIXLY_RFID_SCAN_ERROR, \"False\"]\n ]), \"key\");\n this.setOutput(true, Number);\n this.setInputsInline(true);\n }\n};","import * as Blockly from 'blockly/core';\nimport { Profile } from 'mixly';\n\nconst PINS_HUE = 230;\n\nexport const pins_digital = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.digital), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_digital_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.digital_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_input_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.input_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_output_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.output_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const espnow_channel = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.espnow_channel), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const haskylens_model = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.haskylens_model), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pwm_input = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.pwm_input), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const analog_input = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.analog_input), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pwm_output = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.pwm_output), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const analog_output = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.analog_output), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const i2c_A_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.i2c_A_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const i2c_B_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.i2c_B_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\n\nexport const spi_A_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.spi_A_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const spi_B_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.spi_B_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const spi_C_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.spi_C_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const spi_D_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.spi_D_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_analog = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.analog), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_analog_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.analog_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_dac = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.dac), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_dac_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.dac_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_button = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.button), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_buttonB = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.buttonB), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_pwm = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.pwm), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_pwm_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.pwm_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_touch_pin = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.touch_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_touch = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.touch), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_serial = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.serial_pin), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_builtinimg = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.builtinimg), 'PIN');\n this.setOutput(true, \"esp32_image\");\n }\n};\n\nexport const pins_builtinimg_extern = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.builtinimg_extern), 'PIN');\n this.setOutput(true, \"esp32_image\");\n }\n};\n\nexport const pins_imglist = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.imglist), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_playlist = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.playlist), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_playlist_extern = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.playlist_extern), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_exlcdh = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.exlcdh), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_exlcdv = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.exlcdv), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_axis = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.axis), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_brightness = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.brightness), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_tts_voice = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.tts_voice), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_tts_builtin_music = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.tts_builtin_music), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_tts_bgmusic = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.tts_bgmusic), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_tone_notes = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.tone_notes), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_radio_power = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.radio_power), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_radio_datarate = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.radio_datarate), 'PIN');\n this.setOutput(true, Number);\n }\n};\n\nexport const pins_one_more = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.one_more), 'PIN');\n this.setOutput(true);\n }\n};\n\nexport const pins_digital_dot = {\n init: function () {\n this.setColour(PINS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(Profile.default.digital_dot), 'PIN');\n this.setOutput(true, Number);\n }\n};","import MicropythonESP32C2Pins from './blocks/esp32_profile';\nimport * as MicropythonESP32C2InoutBlocks from './blocks/inout';\nimport * as MicropythonESP32C2MiniG2Blocks from './blocks/mini_g2';\nimport * as MicropythonESP32C2MEGOBlocks from './blocks/me_go';\nimport * as MicropythonESP32C2PinsBlocks from './blocks/pins';\nimport * as MicropythonESP32C2InoutGenerators from './generators/inout';\nimport * as MicropythonESP32C2MiniG2Generators from './generators/mini_g2';\nimport * as MicropythonESP32C2MEGOGenerators from './generators/me_go';\nimport * as MicropythonESP32C2PinsGenerators from './generators/pins';\n\nexport {\n MicropythonESP32C2Pins,\n MicropythonESP32C2InoutBlocks,\n MicropythonESP32C2MiniG2Blocks,\n MicropythonESP32C2MEGOBlocks,\n MicropythonESP32C2PinsBlocks,\n MicropythonESP32C2InoutGenerators,\n MicropythonESP32C2MiniG2Generators,\n MicropythonESP32C2MEGOGenerators,\n MicropythonESP32C2PinsGenerators\n};","import * as Blockly from 'blockly/core';\n\n// ok\nexport const inout_highlow = function (_, generator) {\n // Boolean values HIGH and LOW.\n var code = (this.getFieldValue('BOOL') == 'HIGH') ? '1' : '0';\n return [code, generator.ORDER_ATOMIC];\n}\n\n// ok\nexport const inout_digital_write = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);\n var code = \"\";\n code += dropdown_pin + '.value(' + dropdown_stat + ')\\n'\n return code;\n}\n\n// ok\nexport const inout_digital_read = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var code = \"\";\n code = dropdown_pin + '.value()';\n return [code, generator.ORDER_ATOMIC];\n}\n\n//ok\nexport const inout_analog_write = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n //var dropdown_stat = this.getFieldValue('STAT');\n var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);\n //generator.setups_['setup_output'+dropdown_pin] = 'pinMode('+dropdown_pin+', OUTPUT);';\n var code = dropdown_pin + '.write(' + value_num + ')\\n';\n return code;\n}\n\n//ok\nexport const inout_analog_write_set = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);\n var key = this.getFieldValue('key');\n var code = dropdown_pin + '.set_analog_' + key + '(' + value_num + ')\\n';\n //var code = 'pin' + dropdown_pin + '.set_analog_period(' + value_num + ')\\n';\n return code;\n}\n\n//ok\nexport const inout_pin_pressed = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var pin = generator.valueToCode(this, 'pin', generator.ORDER_ATOMIC);\n var code = pin + '.read()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const inout_pin_attachInterrupt = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var dropdown_mode = this.getFieldValue('mode');\n var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);\n var code = 'machine.Pin(' + dropdown_pin + ').irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\\n'\n //var funcName = 'attachInterrupt_func_' + dropdown_pin;\n //var branch = generator.statementToCode(this, 'DO') || generator.PASS;\n //var code2 = 'def' + ' ' + funcName + '(p):\\n' + branch + '\\n';\n //generator.setups_[funcName] = code2;\n return code;\n}\n\nexport const inout_digital_init = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var pin_obj = this.getFieldValue('PIN_OBJ') || 'pin#';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var dropdown_mode = this.getFieldValue('MODE');\n var varName = (pin_obj == 'pin#') ? 'pin' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);\n var code = varName + ' = machine.Pin(' + dropdown_pin + ', ' + dropdown_mode + ')\\n';\n return code;\n}\n\n//ok\nexport const inout_analog_write_init = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var pin_obj = this.getFieldValue('PIN_OBJ') || 'dac#';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var varName = (pin_obj == 'dac#') ? 'dac' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);\n var code = varName + ' = machine.DAC(machine.Pin(' + dropdown_pin + '))\\n';\n return code;\n}\n\nexport const inout_analog_atten = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n //var dropdown_stat = this.getFieldValue('STAT');\n var value_atten = this.getFieldValue('atten')\n var code = dropdown_pin + '.atten(' + value_atten + ')\\n';\n return code;\n}\n\n//ok\nexport const inout_pin_pressed_init = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var pin_obj = this.getFieldValue('PIN_OBJ') || 'tc#';\n var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);\n var varName = (pin_obj == 'tc#') ? 'tc' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);\n var code = varName + ' = machine.TouchPad(machine.Pin(' + dropdown_pin + '))\\n';\n return code;\n}","export const me_go_light_number = function (_, generator) {\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n var code = 'car.' + this.getFieldValue('op');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const me_go_led_bright = function (_, generator) {\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var code = \"car.setonoff(\" + op + \",\" + bright + \")\\n\";\n return code;\n}\n\nexport const me_go_get_led_bright = function (_, generator) {\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n var code = \"car.getrightness(\" + op + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const me_go_get_led_state = function (_, generator) {\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n var code = \"car.getonoff(\" + op + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const me_go_led_brightness = function (_, generator) {\n var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);\n var code = \"car.setbrightness(\" + op + \",\" + flag + \")\\n\";\n return code;\n}\n\nexport const me_go_stepper_keep = function (_, generator) {\n var v = this.getFieldValue('VAR');\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);\n var code = 'car.move(\"' + v + '\",' + speed + \")\\n\";\n return code;\n}\n\nexport const me_go_stepper_stop = function (_, generator) {\n var v = this.getFieldValue('VAR');\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n var code = 'car.move(\"' + v + '\")\\n';\n return code;\n}\n\nexport const me_go_dc_motor = function (_, generator) {\n var wheel = this.getFieldValue('wheel');\n generator.definitions_['import_me_go_car'] = 'from me_go import car';\n var v = this.getFieldValue('direction');\n if (wheel == 0) {\n if (v == 'CW') { v = 'CCW' }\n else if (v == 'CCW') { v = 'CW' }\n }\n var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);\n var code = \"car.motor(car.MOTO[\" + wheel + '],\"' + v + '\",' + speed + \")\\n\";\n return code;\n}\n\nexport const me_go_hall_attachInterrupt = function (_, generator) {\n var dropdown_mode = this.getFieldValue('mode');\n generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;\n var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);\n var code = 'hall_' + dropdown_mode + '.irq_cb(' + atta + ')\\n'\n return code;\n}\n\nexport const me_go_hall_initialize = function (_, generator) {\n var dropdown_mode = this.getFieldValue('mode');\n var args = this.getFieldValue('args');\n generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;\n var num = generator.valueToCode(this, 'num', generator.ORDER_ATOMIC);\n if (args == 'all') {\n var code = 'hall_' + dropdown_mode + '.initial(' + 'turns' + '=' + num + ',distance=' + num + ')\\n'\n return code;\n }\n var code = 'hall_' + dropdown_mode + '.initial(' + args + '=' + num + ')\\n'\n return code;\n}\n\nexport const me_go_hall_data = function (_, generator) {\n var dropdown_mode = this.getFieldValue('mode');\n var args = this.getFieldValue('args');\n generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;\n var code = 'hall_' + dropdown_mode + '.' + args + '';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const me_go_pin_near_line = function (_, generator) {\n var key = this.getFieldValue('key');\n generator.definitions_['import_me_go_hall'] = 'from me_go import car';\n var code = 'car.patrol()' + key + '';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const me_go_pin_near = function (_, generator) {\n var key = this.getFieldValue('key');\n generator.definitions_['import_me_go_hall'] = 'from me_go import car';\n var code = 'car.obstacle()' + key + '';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const me_go_pin_near_state_change = function (_, generator) {\n var key = this.getFieldValue('key');\n generator.definitions_['import_me_go_hall'] = 'from me_go import car';\n var code = 'car.ir_mode(car.' + key + ')\\n';\n return code;\n}\n\nexport const sensor_mixgome_eulerangles = function (_, generator) {\n generator.definitions_['import_mixgo_me_onboard_mxc6655xa'] = \"from mixgo_me import onboard_mxc6655xa\";\n var angle = this.getFieldValue('angle');\n var code = 'onboard_mxc6655xa.eulerangles(upright=True)' + angle;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const me_go_pin_light = function (_, generator) {\n var key = this.getFieldValue('key');\n generator.definitions_['import_me_go_hall'] = 'from me_go import car';\n var code = 'car.light()' + key + '';\n return [code, generator.ORDER_ATOMIC];\n}","import { Boards } from 'mixly';\n\nexport const mini_g2_aht11 = function (_, generator) {\n var key = this.getFieldValue('key');\n generator.definitions_['import_mini_g2'] = 'import mini_g2';\n var code = 'mini_g2.ext_ahtx0.' + key + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const mini_g2_hp203 = function (_, generator) {\n var key = this.getFieldValue('key');\n generator.definitions_['import_mini_g2'] = 'import mini_g2';\n var code = 'mini_g2.ext_hp203x.' + key;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const mini_g2_varistor = function (_, generator) {\n generator.definitions_['import_mini_g2'] = 'import mini_g2';\n var code = 'mini_g2.varistor()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const mini_g2_rfid_readid = function (_, generator) {\n generator.definitions_['import_mini_g2'] = 'import mini_g2';\n var version = Boards.getSelectedBoardKey().split(':')[2];\n if (version == \"mixgo_mini\") {\n generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';\n var code = 'ext_rfid.read_card(0, x=\"id\")';\n } else {\n generator.definitions_['import_mini_g2'] = 'import mini_g2';\n var code = 'mini_g2.ext_rc522.read_card(0, x=\"id\")';\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const mini_g2_rfid_readcontent = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);\n if (version == \"mixgo_mini\") {\n generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';\n var code = 'ext_rfid.read_card(' + sector + ')';\n } else {\n generator.definitions_['import_mini_g2'] = 'import mini_g2';\n var code = 'mini_g2.ext_rc522.read_card(' + sector + ')';\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const mini_g2_rfid_write = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);\n var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);\n if (version == \"mixgo_mini\") {\n generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';\n var code = 'ext_rfid.write_card(' + cnt + ',' + sector + ')\\n';\n } else {\n generator.definitions_['import_mini_g2'] = 'import mini_g2';\n var code = 'mini_g2.ext_rc522.write_card(' + cnt + ',' + sector + ')\\n';\n }\n return code;\n}\n\nexport const mini_g2_rfid_write_outcome = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);\n var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);\n if (version == \"mixgo_mini\") {\n generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';\n var code = 'ext_rfid.write_card(' + cnt + ',' + sector + ')';\n } else {\n generator.definitions_['import_mini_g2'] = 'import mini_g2';\n var code = 'mini_g2.ext_rc522.write_card(' + cnt + ',' + sector + ')';\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const mini_g2_rfid_status = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2];\n var key = this.getFieldValue('key');\n if (version == \"mixgo_mini\") {\n generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';\n var code = 'ext_rfid.scan_card()==' + key;\n } else {\n generator.definitions_['import_mini_g2'] = 'import mini_g2';\n var code = 'mini_g2.ext_rc522.scan_card()==' + key;\n }\n return [code, generator.ORDER_ATOMIC];\n}","export const pins_digital = function (_, generator) {\n var code = this.getFieldValue('PIN');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const pins_button = pins_digital;\nexport const pins_buttonB = pins_digital;\nexport const pins_digital_pin = pins_digital;\nexport const pins_input_pin = pins_digital;\nexport const pins_output_pin = pins_digital;\nexport const pins_pwm_input = pins_digital;\nexport const espnow_channel = pins_digital;\nexport const haskylens_model = pins_digital;\nexport const analog_input = pins_digital;\nexport const pwm_output = pins_digital;\nexport const analog_output = pins_digital;\nexport const i2c_A_pin = pins_digital;\nexport const i2c_B_pin = pins_digital;\nexport const spi_A_pin = pins_digital;\nexport const spi_B_pin = pins_digital;\nexport const spi_C_pin = pins_digital;\nexport const spi_D_pin = pins_digital;\nexport const pins_analog_pin = pins_digital;\nexport const pins_analog = pins_digital;\nexport const pins_pwm_pin = pins_digital;\nexport const pins_pwm = pins_digital;\nexport const pins_dac_pin = pins_digital;\nexport const pins_dac = pins_digital;\nexport const pins_touch_pin = pins_digital;\nexport const pins_touch = pins_digital;\nexport const pins_interrupt = pins_digital;\nexport const pins_serial = pins_digital;\nexport const pins_builtinimg = pins_digital;\nexport const pins_builtinimg_extern = pins_digital;\nexport const pins_imglist = pins_digital;\nexport const pins_playlist = pins_digital;\nexport const pins_playlist_extern = pins_digital;\nexport const pins_axis = pins_digital;\nexport const pins_exlcdh = pins_digital;\nexport const pins_exlcdv = pins_digital;\nexport const pins_brightness = pins_digital;\nexport const pins_tts_voice = pins_digital;\nexport const pins_tts_builtin_music = pins_digital;\nexport const pins_tts_bgmusic = pins_digital;\nexport const pins_tone_notes = pins_digital;\nexport const pins_radio_power = pins_digital;\nexport const pins_radio_datarate = pins_digital;\nexport const pins_one_more = pins_digital;\nexport const pins_digital_dot = pins_digital;","import * as Blockly from 'blockly/core';\n\nconst LOOPS_HUE = 120;\n\nexport const controls_main = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PYTHON_NAME_MAIN);\n this.appendStatementInput('DO')\n .appendField('');\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_SETUP);\n }\n};\n\nexport const base_setup = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_SETUP);\n this.appendStatementInput('DO')\n .appendField('');\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_SETUP);\n }\n};\n\nexport const controls_delay = {\n init: function () {\n var UNIT = [\n [Blockly.Msg.MIXLY_mSecond, 'delay'],\n [Blockly.Msg.MIXLY_uSecond, 'delayMicroseconds']\n ];\n this.setColour(LOOPS_HUE);\n this.appendValueInput(\"DELAY_TIME\", Number)\n .appendField(Blockly.Msg.MIXLY_DELAY)\n .appendField(new Blockly.FieldDropdown(UNIT), 'UNIT')\n .setCheck(Number);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_DELAY);\n this.setHelpUrl(\"https://mixly.readthedocs.io/zh_CN/latest/arduino/03.Control.html#id9\");\n this.wiki = {\n 'zh-hans': {\n page: ['Arduino AVR', '控制', '延时']\n }\n };\n }\n};\n\nexport const controls_end_program = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_CONTROL_END_PROGRAM);\n this.setPreviousStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_CONTROL_END_TOOLTIP);\n }\n};\n\nexport const controls_if = {\n /**\n * Block for if/elseif/else condition.\n * @this Blockly.Block\n */\n init: function () {\n //this.setHelpUrl(Blockly.Msg.CONTROLS_IF_HELPURL);\n this.setColour(LOOPS_HUE);\n this.appendValueInput('IF0')\n .setCheck([Boolean, Number])\n .appendField(Blockly.Msg.CONTROLS_IF_MSG_IF);\n this.appendStatementInput('DO0')\n .appendField(Blockly.Msg.CONTROLS_IF_MSG_THEN);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setHelpUrl(\"https://mixly.readthedocs.io/zh_CN/latest/arduino/03.Control.html#if\");\n this.setMutator(new Blockly.icons.MutatorIcon(['controls_if_elseif',\n 'controls_if_else'], this));\n // Assign 'this' to a variable for use in the tooltip closure below.\n var thisBlock = this;\n this.setTooltip(function () {\n if (!thisBlock.elseifCount_ && !thisBlock.elseCount_) {\n return Blockly.Msg.CONTROLS_IF_TOOLTIP_1;\n } else if (!thisBlock.elseifCount_ && thisBlock.elseCount_) {\n return Blockly.Msg.CONTROLS_IF_TOOLTIP_2;\n } else if (thisBlock.elseifCount_ && !thisBlock.elseCount_) {\n return Blockly.Msg.CONTROLS_IF_TOOLTIP_3;\n } else if (thisBlock.elseifCount_ && thisBlock.elseCount_) {\n return Blockly.Msg.CONTROLS_IF_TOOLTIP_4;\n }\n return '';\n });\n this.elseifCount_ = 0;\n this.elseCount_ = 0;\n },\n /**\n * Create XML to represent the number of else-if and else inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n if (!this.elseifCount_ && !this.elseCount_) {\n return null;\n }\n var container = document.createElement('mutation');\n if (this.elseifCount_) {\n container.setAttribute('elseif', this.elseifCount_);\n }\n if (this.elseCount_) {\n container.setAttribute('else', 1);\n }\n return container;\n },\n /**\n * Parse XML to restore the else-if and else inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n var containerBlock = this;\n var valueConnections = [];\n var statementConnections = [];\n // var elseStatementConnection = null;\n if (this.elseCount_) {\n // if (containerBlock.getInputTargetBlock('ELSE') && containerBlock.getInputTargetBlock('ELSE').previousConnection)\n // elseStatementConnection = containerBlock.getInputTargetBlock('ELSE').previousConnection;\n this.removeInput('ELSE');\n }\n for (var i = this.elseifCount_; i > 0; i--) {\n if (containerBlock.getInputTargetBlock('IF' + i) && containerBlock.getInputTargetBlock('IF' + i).previousConnection)\n valueConnections[i] = (containerBlock.getInputTargetBlock('IF' + i).previousConnection);\n else\n valueConnections[i] = null;\n this.removeInput('IF' + i);\n if (containerBlock.getInputTargetBlock('DO' + i) && containerBlock.getInputTargetBlock('DO' + i).previousConnection)\n statementConnections[i] = (containerBlock.getInputTargetBlock('DO' + i).previousConnection);\n else\n statementConnections[i] = null;\n this.removeInput('DO' + i);\n }\n this.elseifCount_ = parseInt(xmlElement.getAttribute('elseif'), 10);\n this.elseCount_ = parseInt(xmlElement.getAttribute('else'), 10);\n //this.compose(containerBlock);\n for (var i = 1; i <= this.elseifCount_; i++) {\n this.appendValueInput('IF' + i)\n .setCheck([Boolean, Number])\n .appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSEIF);\n this.appendStatementInput('DO' + i)\n .appendField(Blockly.Msg.CONTROLS_IF_MSG_THEN);\n }\n if (this.elseCount_) {\n this.appendStatementInput('ELSE')\n .appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSE);\n }\n for (var i = valueConnections.length - 2; i > 0; i--) {\n if (valueConnections[i])\n valueConnections[i].reconnect(this, 'IF' + i);\n }\n for (var i = statementConnections.length - 2; i > 0; i--) {\n if (statementConnections[i])\n statementConnections[i].reconnect(this, 'DO' + i);\n }\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock = workspace.newBlock('controls_if_if');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 1; i <= this.elseifCount_; i++) {\n var elseifBlock = workspace.newBlock('controls_if_elseif');\n elseifBlock.initSvg();\n connection.connect(elseifBlock.previousConnection);\n connection = elseifBlock.nextConnection;\n }\n if (this.elseCount_) {\n var elseBlock = workspace.newBlock('controls_if_else');\n elseBlock.initSvg();\n connection.connect(elseBlock.previousConnection);\n }\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n // Disconnect the else input blocks and remove the inputs.\n if (this.elseCount_) {\n this.removeInput('ELSE');\n }\n this.elseCount_ = 0;\n // Disconnect all the elseif input blocks and remove the inputs.\n for (var i = this.elseifCount_; i > 0; i--) {\n this.removeInput('IF' + i);\n this.removeInput('DO' + i);\n }\n this.elseifCount_ = 0;\n // Rebuild the block's optional inputs.\n var clauseBlock = containerBlock.getInputTargetBlock('STACK');\n var valueConnections = [null];\n var statementConnections = [null];\n var elseStatementConnection = null;\n while (clauseBlock) {\n switch (clauseBlock.type) {\n case 'controls_if_elseif':\n this.elseifCount_++;\n valueConnections.push(clauseBlock.valueConnection_);\n statementConnections.push(clauseBlock.statementConnection_);\n break;\n case 'controls_if_else':\n this.elseCount_++;\n elseStatementConnection = clauseBlock.statementConnection_;\n break;\n default:\n throw Error('Unknown block type: ' + clauseBlock.type);\n }\n clauseBlock = clauseBlock.nextConnection &&\n clauseBlock.nextConnection.targetBlock();\n }\n\n this.updateShape_();\n // Reconnect any child blocks.\n this.reconnectChildBlocks_(valueConnections, statementConnections, elseStatementConnection);\n\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n var clauseBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 1;\n while (clauseBlock) {\n switch (clauseBlock.type) {\n case 'controls_if_elseif':\n var inputIf = this.getInput('IF' + i);\n var inputDo = this.getInput('DO' + i);\n clauseBlock.valueConnection_ =\n inputIf && inputIf.connection.targetConnection;\n clauseBlock.statementConnection_ =\n inputDo && inputDo.connection.targetConnection;\n i++;\n break;\n case 'controls_if_else':\n var inputDo = this.getInput('ELSE');\n clauseBlock.statementConnection_ =\n inputDo && inputDo.connection.targetConnection;\n break;\n default:\n throw 'Unknown block type.';\n }\n clauseBlock = clauseBlock.nextConnection &&\n clauseBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Reconstructs the block with all child blocks attached.\n */\n rebuildShape_: function () {\n var valueConnections = [null];\n var statementConnections = [null];\n var elseStatementConnection = null;\n\n if (this.getInput('ELSE')) {\n elseStatementConnection = this.getInput('ELSE').connection.targetConnection;\n }\n var i = 1;\n while (this.getInput('IF' + i)) {\n var inputIf = this.getInput('IF' + i);\n var inputDo = this.getInput('DO' + i);\n console.log(inputIf.connection.targetConnection);\n valueConnections.push(inputIf.connection.targetConnection);\n statementConnections.push(inputDo.connection.targetConnection);\n i++;\n }\n this.updateShape_();\n this.reconnectChildBlocks_(valueConnections, statementConnections, elseStatementConnection);\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @this Blockly.Block\n * @private\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('ELSE')) {\n this.removeInput('ELSE');\n }\n var i = 1;\n while (this.getInput('IF' + i)) {\n this.removeInput('IF' + i);\n this.removeInput('DO' + i);\n i++;\n }\n // Rebuild block.\n for (var i = 1; i <= this.elseifCount_; i++) {\n this.appendValueInput('IF' + i)\n .setCheck([Number, Boolean])\n .appendField(Blockly.Msg['CONTROLS_IF_MSG_ELSEIF']);\n this.appendStatementInput('DO' + i)\n .appendField(Blockly.Msg['CONTROLS_IF_MSG_THEN']);\n }\n if (this.elseCount_) {\n this.appendStatementInput('ELSE')\n .appendField(Blockly.Msg['CONTROLS_IF_MSG_ELSE']);\n }\n },\n /**\n * Reconnects child blocks.\n * @param {!Array} valueConnections List of value\n * connectsions for if input.\n * @param {!Array} statementConnections List of\n * statement connections for do input.\n * @param {?Blockly.RenderedConnection} elseStatementConnection Statement\n * connection for else input.\n */\n reconnectChildBlocks_: function (valueConnections, statementConnections,\n elseStatementConnection) {\n for (var i = 1; i <= this.elseifCount_; i++) {\n valueConnections[i] && valueConnections[i].reconnect(this, 'IF' + i);\n statementConnections[i] && statementConnections[i].reconnect(this, 'DO' + i);\n }\n elseStatementConnection && elseStatementConnection.reconnect(this, 'ELSE');\n }\n};\n\n\nexport const controls_range = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendValueInput('FROM')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PYTHON_RANGE)\n .appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_FROM);\n this.appendValueInput('TO')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_TO);\n this.appendValueInput('STEP')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.PYTHON_RANGE_STEP);\n this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_CONTROLS_RANGE_TOOLTIP);\n }\n};\n\n\nexport const controls_forEach = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendValueInput('LIST')\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.CONTROLS_FOREACH_INPUT);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.CONTROLS_FOREACH_INPUT_ITEM)\n // .appendField(new Blockly.FieldTextInput('i'), 'VAR');\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(function () {\n return Blockly.Msg.CONTROLS_FOR_TOOLTIP.replace('“%1”', '');\n });\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n};\n\nexport const controls_whileUntil = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendValueInput('BOOL')\n .setCheck([Boolean, Number])\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT)\n .appendField(new Blockly.FieldDropdown(this.OPERATORS), 'MODE')\n // this.appendDummyInput()\n // .appendField(Blockly.Msg.CONTROLS_WHILE_SHI);\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.LANG_CONTROLS_WHILEUNTIL_TITLE_REPEAT + Blockly.Msg.MIXLY_DO);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var op = thisBlock.getFieldValue('MODE');\n var TOOLTIPS = {\n 'WHILE': Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_WHILE,\n 'UNTIL': Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL\n };\n return TOOLTIPS[op];\n });\n }\n};\n\nexport const controls_try_finally = {\n /**\n * Block for if/elseif/else condition.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PYTHON_TRY);\n this.appendStatementInput('try');\n this.appendValueInput('IF1')\n .appendField(Blockly.Msg.MIXLY_PYTHON_EXCEPT);\n this.appendStatementInput('DO1')\n .appendField('');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['controls_except', 'controls_finally'], this));\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_CONTROL_TRY_TOOLTIP);\n this.elseifCount_ = 1;\n this.elseCount_ = 0;\n },\n /**\n * Create XML to represent the number of else-if and else inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n if (!this.elseifCount_ && !this.elseCount_) {\n return null;\n }\n var container = document.createElement('mutation');\n if (this.elseifCount_) {\n container.setAttribute('elseif', this.elseifCount_);\n }\n if (this.elseCount_) {\n container.setAttribute('else', 1);\n }\n return container;\n },\n /**\n * Parse XML to restore the else-if and else inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n var containerBlock = this;\n var valueConnections = [];\n var statementConnections = [];\n // var elseStatementConnection = null;\n if (this.elseCount_) {\n // if (containerBlock.getInputTargetBlock('ELSE') && containerBlock.getInputTargetBlock('ELSE').previousConnection)\n // elseStatementConnection = containerBlock.getInputTargetBlock('ELSE').previousConnection;\n this.removeInput('ELSE');\n }\n for (var i = this.elseifCount_; i > 0; i--) {\n if (containerBlock.getInputTargetBlock('IF' + i) && containerBlock.getInputTargetBlock('IF' + i).previousConnection)\n valueConnections[i] = (containerBlock.getInputTargetBlock('IF' + i).previousConnection);\n else\n valueConnections[i] = null;\n this.removeInput('IF' + i);\n if (containerBlock.getInputTargetBlock('DO' + i) && containerBlock.getInputTargetBlock('DO' + i).previousConnection)\n statementConnections[i] = (containerBlock.getInputTargetBlock('DO' + i).previousConnection);\n else\n statementConnections[i] = null;\n this.removeInput('DO' + i);\n }\n this.elseifCount_ = parseInt(xmlElement.getAttribute('elseif'), 10);\n this.elseCount_ = parseInt(xmlElement.getAttribute('else'), 10);\n //this.compose(containerBlock);\n for (var i = 1; i <= this.elseifCount_; i++) {\n this.appendValueInput('IF' + i)\n .setCheck([Boolean, Number])\n .appendField(Blockly.Msg.MIXLY_PYTHON_EXCEPT);\n this.appendStatementInput('DO' + i)\n .appendField(\"\");\n }\n if (this.elseCount_) {\n this.appendStatementInput('ELSE')\n .appendField(Blockly.Msg.MIXLY_PYTHON_FINALLY);\n }\n for (var i = valueConnections.length - 2; i > 0; i--) {\n if (valueConnections[i])\n valueConnections[i].reconnect(this, 'IF' + i);\n }\n for (var i = statementConnections.length - 2; i > 0; i--) {\n if (statementConnections[i])\n statementConnections[i].reconnect(this, 'DO' + i);\n }\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock = workspace.newBlock('controls_try');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 1; i <= this.elseifCount_; i++) {\n var elseifBlock = workspace.newBlock('controls_except');\n elseifBlock.initSvg();\n connection.connect(elseifBlock.previousConnection);\n connection = elseifBlock.nextConnection;\n }\n if (this.elseCount_) {\n var elseBlock = workspace.newBlock('controls_finally');\n elseBlock.initSvg();\n connection.connect(elseBlock.previousConnection);\n }\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n // Disconnect the else input blocks and remove the inputs.\n if (this.elseCount_) {\n this.removeInput('ELSE');\n }\n this.elseCount_ = 0;\n // Disconnect all the elseif input blocks and remove the inputs.\n for (var i = this.elseifCount_; i > 0; i--) {\n this.removeInput('IF' + i);\n this.removeInput('DO' + i);\n }\n this.elseifCount_ = 0;\n // Rebuild the block's optional inputs.\n var clauseBlock = containerBlock.getInputTargetBlock('STACK');\n var valueConnections = [null];\n var statementConnections = [null];\n var elseStatementConnection = null;\n while (clauseBlock) {\n switch (clauseBlock.type) {\n case 'controls_except':\n this.elseifCount_++;\n valueConnections.push(clauseBlock.valueConnection_);\n statementConnections.push(clauseBlock.statementConnection_);\n break;\n case 'controls_finally':\n this.elseCount_++;\n elseStatementConnection = clauseBlock.statementConnection_;\n break;\n default:\n throw Error('Unknown block type: ' + clauseBlock.type);\n }\n clauseBlock = clauseBlock.nextConnection &&\n clauseBlock.nextConnection.targetBlock();\n }\n\n this.updateShape_();\n // Reconnect any child blocks.\n this.reconnectChildBlocks_(valueConnections, statementConnections, elseStatementConnection);\n\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n var clauseBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 1;\n while (clauseBlock) {\n switch (clauseBlock.type) {\n case 'controls_except':\n var inputIf = this.getInput('IF' + i);\n var inputDo = this.getInput('DO' + i);\n clauseBlock.valueConnection_ =\n inputIf && inputIf.connection.targetConnection;\n clauseBlock.statementConnection_ =\n inputDo && inputDo.connection.targetConnection;\n i++;\n break;\n case 'controls_finally':\n var inputDo = this.getInput('ELSE');\n clauseBlock.statementConnection_ =\n inputDo && inputDo.connection.targetConnection;\n break;\n default:\n throw 'Unknown block type.';\n }\n clauseBlock = clauseBlock.nextConnection &&\n clauseBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Reconstructs the block with all child blocks attached.\n */\n rebuildShape_: function () {\n var valueConnections = [null];\n var statementConnections = [null];\n var elseStatementConnection = null;\n\n if (this.getInput('ELSE')) {\n elseStatementConnection = this.getInput('ELSE').connection.targetConnection;\n }\n var i = 1;\n while (this.getInput('IF' + i)) {\n var inputIf = this.getInput('IF' + i);\n var inputDo = this.getInput('DO' + i);\n console.log(inputIf.connection.targetConnection);\n valueConnections.push(inputIf.connection.targetConnection);\n statementConnections.push(inputDo.connection.targetConnection);\n i++;\n }\n this.updateShape_();\n this.reconnectChildBlocks_(valueConnections, statementConnections, elseStatementConnection);\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @this Blockly.Block\n * @private\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('ELSE')) {\n this.removeInput('ELSE');\n }\n var i = 1;\n while (this.getInput('IF' + i)) {\n this.removeInput('IF' + i);\n this.removeInput('DO' + i);\n i++;\n }\n // Rebuild block.\n for (var i = 1; i <= this.elseifCount_; i++) {\n this.appendValueInput('IF' + i)\n .setCheck([Number, Boolean])\n .appendField(Blockly.Msg.MIXLY_PYTHON_EXCEPT);\n this.appendStatementInput('DO' + i)\n .appendField('');\n }\n if (this.elseCount_) {\n this.appendStatementInput('ELSE')\n .appendField(Blockly.Msg.MIXLY_PYTHON_FINALLY);\n }\n },\n /**\n * Reconnects child blocks.\n * @param {!Array} valueConnections List of value\n * connectsions for if input.\n * @param {!Array} statementConnections List of\n * statement connections for do input.\n * @param {?Blockly.RenderedConnection} elseStatementConnection Statement\n * connection for else input.\n */\n reconnectChildBlocks_: function (valueConnections, statementConnections,\n elseStatementConnection) {\n for (var i = 1; i <= this.elseifCount_; i++) {\n valueConnections[i] && valueConnections[i].reconnect(this, 'IF' + i);\n statementConnections[i] && statementConnections[i].reconnect(this, 'DO' + i);\n }\n elseStatementConnection && elseStatementConnection.reconnect(this, 'ELSE');\n }\n};\n\nexport const controls_flow_statements = {\n init: function () {\n this.setColour(LOOPS_HUE);\n var dropdown = new Blockly.FieldDropdown(this.OPERATORS);\n this.appendDummyInput()\n .appendField(dropdown, 'FLOW')\n .appendField(Blockly.Msg.LANG_CONTROLS_FLOW_STATEMENTS_INPUT_OFLOOP);\n this.setPreviousStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_CONTROLS_FLOW_STATEMENTS_TOOLTIP);\n var thisBlock = this;\n this.setTooltip(function () {\n var op = thisBlock.getFieldValue('FLOW');\n var TOOLTIPS = {\n 'BREAK': Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK,\n 'CONTINUE': Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE\n };\n return TOOLTIPS[op];\n });\n },\n onchange: function () {\n if (!this.workspace) {\n // Block has been deleted.\n return;\n }\n var legal = false;\n // Is the block nested in a control statement?\n var block = this;\n do {\n if (block.type == 'controls_repeat' ||\n block.type == 'controls_for' ||\n block.type == 'controls_forEach' ||\n block.type == 'controls_repeat_ext' ||\n block.type == 'controls_whileUntil' ||\n block.type == 'do_while') {\n legal = true;\n break;\n }\n block = block.getSurroundParent();\n } while (block);\n if (legal) {\n this.setWarningText(null);\n } else {\n this.setWarningText(Blockly.Msg.LANG_CONTROLS_FLOW_STATEMENTS_WARNING);\n }\n }\n};\n\n\nexport const controls_for = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_WITH)\n .appendField(new Blockly.FieldTextInput('i'), 'VAR');\n this.appendValueInput('FROM')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_FROM);\n this.appendValueInput('TO')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_TO);\n this.appendValueInput('STEP')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_STEP);\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n return Blockly.Msg.CONTROLS_FOR_TOOLTIP.replace('%1',\n thisBlock.getFieldValue('VAR'));\n });\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n};\n\nexport const controls_for_range = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_WITH)\n .appendField(new Blockly.FieldTextInput('i'), 'VAR');\n this.appendValueInput('FROM')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_FROM);\n this.appendValueInput('TO')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_TO);\n this.appendValueInput('STEP')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.MIXLY_STEP);\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_DO);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n return Blockly.Msg.MIXLY_PYTHON_CONTROLS_FOR_RANGE_TOOLTIP.replace('%1',\n thisBlock.getFieldValue('VAR'));\n });\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n};\n\n\ncontrols_whileUntil.OPERATORS = [\n [Blockly.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_WHILE, 'WHILE'],\n [Blockly.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_UNTIL, 'UNTIL']\n];\n\n\n\ncontrols_flow_statements.OPERATORS = [\n [Blockly.Msg.LANG_CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK, 'BREAK'],\n [Blockly.Msg.LANG_CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE, 'CONTINUE']\n];\n\n\n\nexport const controls_if_if = {\n /**\n * Mutator block for if container.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.CONTROLS_IF_IF_TITLE_IF);\n this.appendStatementInput('STACK');\n this.setTooltip(Blockly.Msg.CONTROLS_IF_IF_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const controls_if_elseif = {\n /**\n * Mutator bolck for else-if condition.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.CONTROLS_IF_ELSEIF_TITLE_ELSEIF);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.CONTROLS_IF_ELSEIF_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const controls_if_else = {\n /**\n * Mutator block for else condition.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE);\n this.setPreviousStatement(true);\n this.setTooltip(Blockly.Msg.CONTROLS_IF_ELSE_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\n\n\nexport const controls_try = {\n /**\n * Mutator block for if container.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField('try');\n this.appendStatementInput('STACK');\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.contextMenu = false;\n }\n};\n\nexport const controls_except = {\n /**\n * Mutator bolck for else-if condition.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PYTHON_EXCEPT);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.contextMenu = false;\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_CONTROL_EXCEPT_TOOLTIP);\n }\n};\n\nexport const controls_finally = {\n /**\n * Mutator block for else condition.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PYTHON_FINALLY);\n this.setPreviousStatement(true);\n this.contextMenu = false;\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_CONTROL_FINALLY_TOOLTIP);\n }\n};\n\n\n\nexport const controls_repeat_ext = {\n /**\n * Block for repeat n times (external number).\n * @this Blockly.Block\n */\n init: function () {\n this.jsonInit({\n \"message0\": Blockly.Msg.CONTROLS_REPEAT_TITLE,\n \"args0\": [\n {\n \"type\": \"input_value\",\n \"name\": \"TIMES\",\n // \"check\": \"Number\"\n }\n ],\n \"previousStatement\": null,\n \"nextStatement\": null,\n \"colour\": LOOPS_HUE,\n \"tooltip\": Blockly.Msg.CONTROLS_REPEAT_TOOLTIP,\n \"helpUrl\": Blockly.Msg.CONTROLS_REPEAT_HELPURL\n });\n this.appendStatementInput('DO');\n }\n};\n\n\n\nexport const controls_lambda = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendValueInput('BOOL')\n .appendField('lambda')\n //.appendField(new Blockly.FieldDropdown(this.OPERATORS), 'MODE');\n this.appendStatementInput('DO')\n .appendField(Blockly.Msg.MIXLY_STAT);\n this.setOutput(true);\n // this.setNextStatement(true);\n }\n};\n\nexport const controls_pass = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PYTHON_PASS);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_CONTROLS_PASS_TOOLTIP);\n }\n};\n\nexport const controls_thread = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PYTHON_CONTROLS_THREAD_START)\n this.appendValueInput('callback')\n .appendField(Blockly.Msg.MIXLY_PYTHON_CONTROLS_THREAD_USE)\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_PARAMS);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_CONTROLS_THREAD_TOOLTIP);\n }\n};\n\n//do-while循环\nexport const do_while = {\n init: function () {\n this.appendDummyInput()\n .appendField(Blockly.Msg.CONTROLS_REPEAT_TITLE_REPEAT + Blockly.Msg.MIXLY_DO);\n this.appendStatementInput(\"input_data\")\n .setCheck(null)\n this.appendValueInput(\"select_data\")\n .setCheck(null)\n .appendField(Blockly.Msg.CONTROLS_OPERATOR_UNTIL)\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_WHILE, \"true\"], [Blockly.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_UNTIL, \"false\"]]), \"type\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setColour(LOOPS_HUE);\n this.setTooltip(\"do-while loop\");\n this.setHelpUrl(\"\");\n }\n};\n\nexport const garbage_collection = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_OP_GARBAGE_COLLECT);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\n\nexport const get_mem_alloc = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET_MEM_ALLOC);\n this.setOutput(true)\n }\n};\n\nexport const get_mem_free = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET_MEM_FREE);\n this.setOutput(true)\n }\n};\n\nexport const get_unique_identifier = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_DEVICE + 'ID');\n this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + Blockly.Msg.MIXLY_GET_UNIQUE_IDEN);\n }\n};\n\n// export const base_type = controls_type;\n// export const controls_TypeLists = controls_typeLists;\n\nexport const datetime_fromtimestamp = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_RTC_TIMESTAMP);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_TIMESTAMP_TO_DATA);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n }\n};\n\n\nexport const gene_unique_identifier = {\n init: function () {\n this.setColour(LOOPS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_GET_UNIQUE_IDEN);\n this.setOutput(true)\n }\n};","/**\n * @license\n * Visual Blocks Editor\n *\n * Copyright 2012 Google Inc.\n * https://developers.google.com/blockly/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Dictionary blocks for Blockly.\n * @author acbart@vt.edu (Austin Cory Bart)\n */\nimport * as Blockly from 'blockly/core';\n\nconst DICTS_HUE = 345;\n\nexport const dicts_create_with = {\n\n /**\n * Block for creating a list with any number of elements of any type.\n * @this Blockly.Block\n */\n\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldTextInput('mydict'), 'VAR')\n .appendField(new Blockly.FieldLabel(Blockly.Msg.DICTS_CREATE_WITH_INPUT_WITH), 'TIP')\n this.itemCount_ = 3;\n this.updateShape_();\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['dicts_create_with_item'], this));\n this.setTooltip(Blockly.Msg.DICTS_CREATE_WITH_TOOLTIP);\n },\n\n /**\n * Create XML to represent list inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n\n /**\n * Parse XML to restore the list inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('dicts_create_with_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('dicts_create_with_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i).connection.connect(connections[i]);\n }\n }\n },\n\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n\n /**\n * Modify this block to have the correct number of inputs.\n * @private\n * @this Blockly.Block\n */\n\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n }\n\n var keyNames = [];\n for (var i = 0; this.getInput('ADD' + i); i++) {\n //this.getInput('VALUE' + i).removeField(\"KEY\"+i);\n keyNames.push(this.getFieldValue(\"KEY\" + i))\n this.removeInput('ADD' + i);\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.getField('TIP').setValue(Blockly.Msg.DICTS_CREATE_EMPTY_TITLE);\n } else {\n this.getField('TIP').setValue(Blockly.Msg.DICTS_CREATE_WITH_INPUT_WITH);\n for (var i = 0; i < this.itemCount_; i++) {\n this.appendValueInput('ADD' + i)\n .setCheck(null)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\n new Blockly.FieldTextInput(\n keyNames.length > i\n ? keyNames[i]\n : (i == 0 ? '\"key\"' : '\"key' + (i + 1) + '\"')),\n 'KEY' + i)\n .appendField(\":\")\n }\n }\n }, getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n};\n\n\n\nexport const dicts_create_with_container = {\n\n /**\n * Mutator block for list container.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT);\n this.appendStatementInput('STACK');\n this.setTooltip(Blockly.Msg.DICTS_CREATE_WITH_CONTAINER_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const dicts_create_with_item = {\n /**\n * Mutator bolck for adding items.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.DICTS_CREATE_WITH_ITEM_TITLE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.DICTS_CREATE_WITH_ITEM_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const dicts_keys = {\n /**\n * Block for list length.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT')\n .setCheck('Dict')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.DICT_KEYS);\n this.setTooltip(Blockly.Msg.DICTS_KEYS_TOOLTIP);\n this.setOutput(true, 'List');\n }\n};\n\nexport const dicts_get = {\n init: function () {\n this.setColour(DICTS_HUE);\n // this.appendDummyInput(\"\")\n\n // .appendField(Blockly.Msg.DICTS_GET_FROM_DICTS)\n\n this.appendValueInput('DICT')\n .setCheck('Dict')\n this.appendValueInput('KEY')\n .appendField(Blockly.Msg.DICTS_GET_IN)\n this.appendDummyInput(\"\")\n // .appendField(new Blockly.FieldTextInput('\"key\"'), 'KEY')\n .appendField(Blockly.Msg.DICTS_ADD_VALUE);\n\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.DICTS_GET_TOOLTIP);\n }\n};\n\nexport const dicts_get_default = {\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT')\n .setCheck('Dict')\n this.appendValueInput('KEY')\n .appendField(Blockly.Msg.DICTS_GET_IN)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.DICTS_ADD_VALUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.DICTS_DEFAULT_VALUE);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.DICTS_GET_DEFAULT_TOOLTIP);\n }\n};\n\nexport const dicts_add_or_change = {\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT')\n this.appendValueInput('KEY')\n .appendField(Blockly.Msg.DICTS_ADD)\n // .appendField(new Blockly.FieldTextInput('\"key\"'), 'KEY')\n this.appendDummyInput()\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.DICTS_ADD_VALUE);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.DICTS_ADD_OR_CHANGE_TOOLTIP);\n }\n};\n\n\nexport const dicts_delete = {\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT')\n this.appendValueInput('KEY')\n .appendField(Blockly.Msg.DICTS_DELETE_IN)\n this.appendDummyInput(\"\")\n // .appendField(new Blockly.FieldTextInput('\"key\"'), 'KEY')\n .appendField(Blockly.Msg.DICTS_DELETE_VALUE);\n\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.DICTS_DELETE_TOOLTIP);\n }\n};\n\n\nexport const dicts_update = {\n /**\n * Block for list length.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT2')\n .setCheck('Dict')\n .appendField(Blockly.Msg.MAKE_DICT)\n this.appendValueInput('DICT')\n .setCheck('Dict')\n .appendField(Blockly.Msg.DICT_UPDATE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MID);\n this.setTooltip(Blockly.Msg.DICTS_UPDATE_TOOLTIP);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const dicts_clear = {\n /**\n * Block for list length.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT')\n .setCheck('Dict')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.DICT_CLEAR);\n this.setTooltip(Blockly.Msg.DICTS_CLEAR_TOOLTIP);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const dicts_items = {\n /**\n * Block for list length.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT')\n .setCheck('Dict')\n this.appendDummyInput(\"\")\n\n .appendField(Blockly.Msg.DICT_ITEMS);\n this.setTooltip(Blockly.Msg.DICTS_ITEMS_TOOLTIP);\n this.setOutput(true, 'List');\n }\n};\n\nexport const dicts_values = {\n /**\n * Block for list length.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT')\n .setCheck('Dict')\n this.appendDummyInput(\"\")\n\n .appendField(Blockly.Msg.DICT_VALUES);\n this.setTooltip(Blockly.Msg.DICTS_VALUES_TOOLTIP);\n this.setOutput(true, 'List');\n }\n};\n\nexport const dicts_length = {\n /**\n * Block for list length.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT')\n .setCheck('Dict')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_LENGTH)\n\n this.setTooltip(Blockly.Msg.DICT_LENGTH_TOOLTIP);\n this.setOutput(true, Number);\n }\n};\n\nexport const dicts_deldict = {\n /**\n * Block for list length.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT')\n .setCheck('Dict')\n this.appendDummyInput(\"\")\n\n .appendField(Blockly.Msg.DICT_DELDICT);\n this.setTooltip(Blockly.Msg.DICTS_DEL_TOOLTIP);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const dicts_add_change_del = {\n /**\n * Block for getting sublist.\n * @this Blockly.Block\n */\n init: function () {\n\n this['MODE'] = [\n [Blockly.Msg.DICTS_ADD_OR_CHANGE, 'INSERT'],\n [Blockly.Msg.MIXLY_MICROBIT_JS_DELETE_VAR, 'DELETE']\n ];\n this.setHelpUrl(Blockly.Msg.LISTS_GET_SUBLIST_HELPURL);\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT')\n .setCheck('Dict')\n this.appendDummyInput('AT2')\n this.appendValueInput('KEY')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n // .appendField(new Blockly.FieldTextInput('\"key\"'), 'KEY')\n .appendField(Blockly.Msg.DICTS_ADD_VALUE);\n this.updateAt_(true);\n this.setInputsInline(true);\n this.setOutput(false);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n var b = this;\n this.setTooltip(function () {\n var e = b.getFieldValue(\"WHERE\"),\n d = \"\";\n switch (e) {\n case \"INSERT\":\n d = Blockly.Msg.DICTS_ADD_TOOLTIP;\n break;\n case \"DELETE\":\n d = Blockly.Msg.DICTS_DELETE_TOOLTIP;\n break;\n }\n //if (\"FROM_START\" == e || \"FROM_END\" == e) d += \" \" + Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP.replace(\"%1\", ONE_BASED_INDEXING ? \"#1\": \"#0\");\n return d\n })\n\n },\n /**\n * Create XML to represent whether there are 'AT' inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n var isAt = this.getInput('AT2').type == Blockly.INPUT_VALUE;\n container.setAttribute('at2', isAt);\n return container;\n },\n /**\n * Parse XML to restore the 'AT' inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n var isAt = (xmlElement.getAttribute('at2') == 'true');\n this.updateAt_(isAt);\n },\n /**\n * Create or delete an input for a numeric index.\n * This block has two such inputs, independant of each other.\n * @param {number} n Specify first or second input (1 or 2).\n * @param {boolean} isAt True if the input should exist.\n * @private\n * @this Blockly.Block\n */\n updateAt_: function (isAt) {\n // Create or delete an input for the numeric index.\n // Destroy old 'AT' and 'ORDINAL' inputs.\n this.removeInput('AT2');\n this.removeInput('ORDINAL', true);\n // Create either a value 'AT' input or a dummy input.\n if (isAt) {\n this.appendValueInput('AT2').setCheck(Number);\n } else {\n this.appendDummyInput('AT2');\n }\n var menu = new Blockly.FieldDropdown(this['MODE'],\n function (value) {\n var newAt = (value == 'INSERT');\n // The 'isAt' variable is available due to this function being a\n // closure.\n if (newAt != isAt) {\n var block = this.sourceBlock_;\n block.updateAt_(newAt);\n // This menu has been destroyed and replaced.\n // Update the replacement.\n block.setFieldValue(value, 'WHERE');\n return null;\n }\n return undefined;\n });\n\n this.getInput('AT2')\n .appendField(menu, 'WHERE');\n\n // this.moveInputBefore('AT2','LIST');\n }\n};\n\nexport const dicts_pop = {\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT')\n .setCheck('Dict')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_DICT_POP)\n this.appendValueInput('KEY')\n this.appendDummyInput(\"\")\n // .appendField(new Blockly.FieldTextInput('\"key\"'), 'KEY')\n .appendField(Blockly.Msg.DICTS_ADD_VALUE);\n this.setTooltip(Blockly.Msg.DICT_POP_TOOLTIP);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const dicts_setdefault = {\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT')\n .setCheck('Dict');\n this.appendValueInput('KEY')\n .appendField(Blockly.Msg.DICTS_SET_DEFAULT)\n this.appendDummyInput(\"\")\n // .appendField(new Blockly.FieldTextInput('\"key\"'), 'KEY')\n .appendField(Blockly.Msg.DICTS_DEFAULT_VALUE);\n this.appendValueInput('VAR')\n\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.DICTS_SETDEFAULT_TOOLTIP);\n }\n};\n\nexport const dicts_create_with_noreturn = {\n /**\n * Block for creating a list with any number of elements of any type.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendDummyInput(\"\")\n // .appendField(new Blockly.FieldTextInput('mydict'), 'VAR')\n .appendField(new Blockly.FieldLabel(Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT), 'TIP')\n .appendField(' ')\n this.itemCount_ = 3;\n this.updateShape_();\n this.setOutput(true, \"Dict\")\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setMutator(new Blockly.icons.MutatorIcon(['dicts_create_with_item'], this));\n this.setTooltip(Blockly.Msg.DICTS_CREATE_WITH_TOOLTIP);\n },\n\n /**\n * Create XML to represent list inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n\n /**\n * Parse XML to restore the list inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('dicts_create_with_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('dicts_create_with_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i).connection.connect(connections[i]);\n }\n }\n },\n\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n\n /**\n * Modify this block to have the correct number of inputs.\n * @private\n * @this Blockly.Block\n */\n\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n }\n\n var keyNames = [];\n for (var i = 0; this.getInput('ADD' + i); i++) {\n //this.getInput('VALUE' + i).removeField(\"KEY\"+i);\n keyNames.push(this.getFieldValue(\"KEY\" + i))\n this.removeInput('ADD' + i);\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.getField('TIP').setValue(Blockly.Msg.LOGIC_NULL + Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT);\n } else {\n this.getField('TIP').setValue(Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT);\n for (var i = 0; i < this.itemCount_; i++) {\n this.appendValueInput('ADD' + i)\n .setCheck(null)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(\n new Blockly.FieldTextInput(\n keyNames.length > i\n ? keyNames[i]\n : (i == 0 ? '\"key\"' : '\"key' + (i + 1) + '\"')),\n 'KEY' + i)\n .appendField(\":\")\n }\n\n }\n }, getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n};\n\nexport const dicts_todict = {\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_TODICT);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_TOOLTIP_TODICT);\n }\n};\n\nexport const dicts_to_json = {\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT')\n .setCheck('Dict');\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_TO_JSON);\n this.setTooltip(Blockly.Msg.MIXLY_TO_JSON_TOOLTIP);\n this.setOutput(true);\n }\n};\n\nexport const json_to_dicts = {\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('VAR');\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_CONVERT_TO_JSON);\n this.setTooltip(Blockly.Msg.MIXLY_CONVERT_TO_JSON_TOOLTIP);\n this.setOutput(true);\n }\n};\n\nexport const dicts_to_to ={\n init:function(){\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT')\n .setCheck('Dict');\n this.appendValueInput('VAR1')\n .appendField('key1');\n this.appendValueInput('VAR2')\n .appendField('index');\n this.appendValueInput('VAR3')\n .appendField('key2');\n this.appendValueInput('VAR4')\n .appendField('key3');\n this.setInputsInline(true)\n this.setTooltip(Blockly.Msg.MIXLY_CONVERT_TO_JSON_TOOLTIP);\n this.setOutput(true);\n }\n}\n\nexport const dicts_to_json2 = {\n init: function () {\n this.setColour(DICTS_HUE);\n this.appendValueInput('DICT');\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_TO_JSON);\n this.setTooltip(Blockly.Msg.MIXLY_TO_JSON_TOOLTIP);\n this.setOutput(true);\n }\n};","import * as Blockly from 'blockly/core';\n\nconst HTML_HUE = '#1ec1e4';\n\nexport const html_document = {\n init: function () {\n this.setColour(HTML_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.HTML_DOCUMENT);\n this.appendStatementInput('HEAD')\n .appendField(Blockly.Msg.HTML_HEAD);\n this.appendStatementInput('BODY')\n .appendField(Blockly.Msg.HTML_BODY);\n this.setOutput(true);\n }\n};\n\nexport const html_title = {\n init: function () {\n this.setColour(HTML_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.HTML_LEVEL)\n .appendField(new Blockly.FieldDropdown([[\"1\", \"1\"], [\"2\", \"2\"], [\"3\", \"3\"], [\"4\", \"4\"], [\"5\", \"5\"], [\"6\", \"6\"]]), 'LEVEL');\n this.appendStatementInput('DO')\n .appendField('');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const html_head_body = {\n init: function () {\n this.setColour(HTML_HUE);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.HTML_HEAD, \"head\"],\n [Blockly.Msg.HTML_BODY, \"body\"]\n ]), 'LEVEL');\n this.appendStatementInput('DO')\n .appendField('');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const html_content = {\n init: function () {\n this.setColour(HTML_HUE);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.HTML_P, \"p\"],\n [Blockly.Msg.HTML_SPAN, \"span\"],\n [Blockly.Msg.HTML_FORM, \"form\"],\n [Blockly.Msg.HTML_TABLE, \"table\"],\n [Blockly.Msg.HTML_LINE, \"tr\"],\n [Blockly.Msg.HTML_CELL, \"td\"],\n [Blockly.Msg.HTML_OL, \"ol\"],\n [Blockly.Msg.HTML_UL, \"ul\"],\n [Blockly.Msg.HTML_LI, \"li\"]\n ]), 'LEVEL')\n // this.appendValueInput('style')\n // .appendField(Blockly.Msg.MIXLY_AIP_ATTR)\n // .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendStatementInput('DO')\n .appendField('');\n this.setInputsInline(false);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const html_content_more = {\n init: function () {\n this.setColour(HTML_HUE);\n this.appendDummyInput()\n .appendField('<')\n .appendField(new Blockly.FieldTextInput('tag'), \"LEVEL\")\n .appendField('>')\n this.appendValueInput('style')\n .appendField(Blockly.Msg.MIXLY_AIP_ATTR)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.appendStatementInput('DO')\n .appendField('');\n this.setInputsInline(false);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const html_style = {\n init: function () {\n this.setColour(HTML_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.HTML_STYLE)\n this.appendStatementInput('STYLE');\n this.setOutput(true);\n }\n};\n\nexport const html_form = {\n init: function () {\n this.setColour(HTML_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.HTML_FORM_CONTENT)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.HTML_TEXT, \"text\"],\n [Blockly.Msg.HTML_EMAIL, \"email\"],\n [Blockly.Msg.HTML_NUMBER, \"number\"],\n [Blockly.Msg.HTML_PASSWORD, \"password\"],\n [Blockly.Msg.HTML_CHECKBOX, \"checkbox\"],\n [Blockly.Msg.HTML_RADIOBUTTON, \"radiobutton\"],\n [Blockly.Msg.HTML_BUTTON, \"button\"],\n [Blockly.Msg.HTML_COLOUR, \"colour\"],\n [Blockly.Msg.HTML_DATE, \"date\"],\n [Blockly.Msg.HTML_LOCALTIME, \"local time\"],\n [Blockly.Msg.HTML_FILE, \"file\"],\n [Blockly.Msg.HTML_HIDDEN, \"hidden\"],\n [Blockly.Msg.HTML_IMAGE, \"image\"],\n [Blockly.Msg.HTML_MONTH, \"month\"],\n [Blockly.Msg.HTML_RANGE, \"range\"],\n [Blockly.Msg.HTML_RESET, \"reset\"],\n [Blockly.Msg.HTML_SEARCH, \"search\"],\n [Blockly.Msg.HTML_SUBMIT, \"submit\"],\n [Blockly.Msg.HTML_TELEPHONENUMBER, \"telephone number\"],\n [Blockly.Msg.HTML_TIME, \"time\"],\n [Blockly.Msg.HTML_URL, \"url\"],\n [Blockly.Msg.HTML_WEEK, \"week\"]\n ]), 'LEVEL')\n this.appendDummyInput()\n .appendField(Blockly.Msg.HTML_NAME)\n .appendField(new Blockly.FieldTextInput('car'), \"NAME\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.HTML_VALUE)\n .appendField(new Blockly.FieldTextInput('go'), \"VALUE\")\n this.appendValueInput('style')\n .appendField(Blockly.Msg.MIXLY_AIP_ATTR)\n .setAlign(Blockly.inputs.Align.RIGHT);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const html_style_content = {\n init: function () {\n this.setColour(HTML_HUE);\n this.appendDummyInput()\n .appendField(new Blockly.FieldTextInput('property'), \"KEY\")\n .appendField(':')\n .appendField(new Blockly.FieldTextInput('value'), \"VALUE\")\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const html_style_color = {\n init: function () {\n this.setColour(HTML_HUE);\n this.appendDummyInput()\n .appendField(new Blockly.FieldTextInput('property'), \"KEY\")\n .appendField(':')\n .appendField(new Blockly.FieldColour(\"#ff0000\"), \"RGB_LED_COLOR\");\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const html_text = {\n init: function () {\n this.setColour(HTML_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.HTML_TEXT)\n .appendField(new Blockly.FieldTextInput('text'), \"TEXT\");\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};","import * as Blockly from 'blockly/core';\n\nconst LISTS_HUE = 260; //'#70b234'//260;\n\nexport const lists_get_index = {\n init: function () {\n this.setHelpUrl(Blockly.Msg.LISTS_GET_INDEX_HELPURL);\n this.setColour(LISTS_HUE);\n this.appendValueInput(\"LIST\")\n this.appendValueInput(\"AT\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + \" \" + Blockly.Msg.LISTS_GET_INDEX_FROM_START)\n this.appendDummyInput()\n .appendField(Blockly.Msg.TEXT_CHARAT_TAIL);\n this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM);\n }\n}\n\n\nexport const lists_get_sublist = {\n /**\n * Block for getting sublist.\n * @this Blockly.Block\n */\n init: function () {\n this.setHelpUrl(Blockly.Msg.LISTS_GET_SUBLIST_HELPURL);\n this.setColour(LISTS_HUE);\n this.appendValueInput('LIST')\n this.appendDummyInput('')\n this.appendValueInput('AT1')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + \" \" + Blockly.Msg.LISTS_GET_INDEX_FROM_START);\n this.appendValueInput('AT2')\n .appendField(Blockly.Msg.TEXT_CHARAT_TAIL + \" \" + Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_START);\n this.appendDummyInput()\n .appendField(Blockly.Msg.TEXT_CHARAT_TAIL);\n this.setInputsInline(true);\n this.setOutput(true, 'List');\n this.setTooltip(Blockly.Msg.PYTHON_LISTS_GET_SUBLIST_TOOLTIP);\n }\n}\n\nexport const lists_2d_get_data_with_col_row = {\n init: function () {\n this.appendValueInput(\"LIST\")\n .setCheck(null);\n this.appendValueInput(\"row\")\n .setCheck(null)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + \" \" + Blockly.Msg.DATAFRAME_RAW);\n this.appendValueInput(\"col\")\n .setCheck(null)\n .appendField(Blockly.Msg.DATAFRAME_COLUMN);\n this.setInputsInline(true);\n this.setOutput(true, null);\n this.setColour(LISTS_HUE);\n this.setTooltip(\"\");\n this.setHelpUrl(\"\");\n }\n};\n\nexport const lists_2d_get_col_row_data = {\n init: function () {\n this.appendValueInput(\"LIST\")\n .setCheck(null);\n this.appendValueInput(\"row_start\")\n .setCheck(null)\n .appendField(Blockly.Msg.MIXLY_GET + \" \" + Blockly.Msg.DATAFRAME_RAW + \" [\");\n this.appendValueInput(\"row_end\")\n .setCheck(null)\n .appendField(\",\");\n this.appendValueInput(\"col_start\")\n .setCheck(null)\n .appendField(\") \" + Blockly.Msg.DATAFRAME_COLUMN + \" [\");\n this.appendValueInput(\"col_end\")\n .setCheck(null)\n .appendField(\",\");\n this.appendDummyInput()\n .appendField(\") \" + Blockly.Msg.DICTS_ADD_VALUE);\n this.setInputsInline(true);\n this.setOutput(true, 'List');\n this.setColour(LISTS_HUE);\n this.setTooltip(\"\");\n this.setHelpUrl(\"\");\n }\n};\n\nexport const lists_create_with = {\n /**\n * Block for creating a list with any number of elements of any type.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendDummyInput(\"\")\n //don't need to specify the data type in Python\n // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'Array'], [Blockly.Msg.LANG_MATH_STRING, 'Array'], [Blockly.Msg.LANG_MATH_BOOLEAN, 'Array']]), 'TYPE')\n // .appendField(' ')\n .appendField(new Blockly.FieldTextInput('mylist'), 'VAR')\n .appendField('[')\n //.appendField(new Blockly.FieldTextInput('3',Blockly.FieldTextInput.math_number_validator), 'SIZE')\n .appendField(']');\n this.itemCount_ = 3;\n this.updateShape_();\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['lists_create_with_item'], this));\n this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_PYTHON_TOOLTIP);\n },\n /**\n * Create XML to represent list inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n /**\n * Parse XML to restore the list inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('lists_create_with_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('lists_create_with_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i).connection.connect(connections[i]);\n }\n }\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @private\n * @this Blockly.Block\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n var i = 0;\n while (this.getInput('ADD' + i)) {\n this.removeInput('ADD' + i);\n i++;\n }\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.appendDummyInput('EMPTY')\n .appendField(Blockly.Msg.LISTS_CREATE_PYTHON_EMPTY_TITLE);\n } else {\n for (var i = 0; i < this.itemCount_; i++) {\n var input = this.appendValueInput('ADD' + i);\n if (i == 0) {\n input.appendField(Blockly.Msg.blockpy_LISTS_CREATE_WITH_INPUT_WITH);\n }\n }\n }\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n};\n\n\nexport const lists_create_with_text = {\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendDummyInput(\"\")\n //don't need to specify the data type in Python\n // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'Array']]), 'TYPE')\n // .appendField(' ')\n // .appendField(Blockly.Msg.blockpy_MIXLY_SPLITBYDOU)\n .appendField(new Blockly.FieldTextInput('mylist'), 'VAR')\n //.appendField(new Blockly.FieldTextInput('3',Blockly.FieldTextInput.math_number_validator), 'SIZE')\n // .appendField(Blockly.Msg.MIXLY_MAKELISTFROM)\n // .appendField(this.newQuote_(true))\n .appendField(' = [')\n .appendField(new Blockly.FieldTextInput('0,0,0'), 'TEXT')\n .appendField(']');\n // .appendField(this.newQuote_(false))\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_LISTS_CREATE_WITH_TEXT2);\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n}\n\n\nexport const lists_create_with_container = {\n /**\n * Mutator block for list container.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_TYPE_LIST);\n this.appendStatementInput('STACK');\n this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const lists_create_with_item = {\n /**\n * Mutator bolck for adding items.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\n\nexport const lists_set_index = {\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendValueInput('LIST');\n this.appendValueInput('AT')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_LIST_ASSIGN_AT);\n this.appendValueInput('TO')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_LIST_VALUE);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.LANG_LISTS_SET_INDEX_TOOLTIP);\n }\n};\n\nexport const lists_append_extend = {\n init: function () {\n this.setColour(LISTS_HUE);\n this['TYPE'] = [\n [Blockly.Msg.MIXLY_blockpy_set_add, 'append'],\n [Blockly.Msg.MIXLY_MICROBIT_LIST_EXTEND, 'extend']\n ];\n\n this.appendValueInput('LIST')\n .setCheck('List')\n this.appendValueInput('DATA')\n .appendField(new Blockly.FieldDropdown(this['TYPE']), 'OP')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_LIST_A_ITEM)\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_LIST_TO_END);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'append': Blockly.Msg.MIXLY_TOOLTIP_LIST_APPEND,\n 'extend': Blockly.Msg.LISTS_EXTEND_TOOLTIP\n\n };\n return TOOLTIPS[mode];\n });\n }\n\n};\n\nexport const lists_get_random_item = {\n /**\n * Block for get a random item from list.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendValueInput(\"LIST\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + \" \" + Blockly.Msg.LISTS_GET_INDEX_RANDOM)\n this.setTooltip(Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM);\n this.setOutput(true);\n }\n};\n\nexport const lists_get_random_sublist = {\n /**\n * Block for get a random item from list.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendValueInput(\"LIST\");\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + Blockly.Msg.MIXLY_MICROBIT_RANDOM)\n this.appendDummyInput()\n .appendField(Blockly.Msg.LANG_LISTS_GET_INDEX2 + Blockly.Msg.LISTS_GET_RANDOM_SUBLIST)\n this.setTooltip(Blockly.Msg.LISTS_GET_RANDOM_SUBLIST_TOOLTIP);\n this.setOutput(true, 'List');\n }\n};\n\nexport const lists_insert_value = {\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendValueInput('LIST');\n this.appendValueInput('AT')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_LIST_INSERT_AT);\n this.appendValueInput('VALUE')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_LIST_VALUE);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.LANG_LISTS_SET_INDEX_TOOLTIP);\n this.setTooltip(Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT);\n }\n};\n\nexport const lists_reverse = {\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendValueInput('VAR')\n .setCheck('List') //this.appendDummyInput(\"\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_LIST_REVERSE)\n //.appendField(new Blockly.FieldTextInput('mylist'), 'VAR');\n this.setTooltip(Blockly.Msg.LANG_LISTS_CLEAR_TOOLTIP);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\nexport const lists_clear = {\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendValueInput('VAR')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_CLEAR)\n //.appendField(new Blockly.FieldTextInput('mylist'), 'VAR');\n this.setTooltip(Blockly.Msg.LANG_LISTS_REVERSE_TOOLTIP);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\n\nexport const lists_remove_at = {\n init: function () {\n this.setColour(LISTS_HUE);\n this['TYPE'] = [\n [Blockly.Msg.SERIES_INDEX, 'del'],\n [Blockly.Msg.MIXLY_MICROBIT_JS_I2C_VALUE, 'remove']\n ];\n this.appendValueInput('LIST')\n .setCheck('List')\n this.appendValueInput('DATA')\n .appendField(Blockly.Msg.MIXLY_MIXPY_LISTS_REMOVE)\n .appendField(new Blockly.FieldDropdown(this['TYPE']), 'OP')\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'del': Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_DELETE,\n 'remove': Blockly.Msg.MIXLY_TOOLTIP_LIST_REMOVE\n };\n return TOOLTIPS[mode];\n });\n }\n};\nexport const lists_pop = {\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendValueInput('LIST');\n this.appendValueInput('VALUE')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_LIST_POP);\n this.appendDummyInput()\n .appendField(Blockly.Msg.TEXT_CHARAT_TAIL);\n this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM);\n }\n};\n\nexport const lists_find = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MIXLY_LIST_INDEX, 'INDEX'],\n [Blockly.Msg.MIXLY_LIST_COUNT, 'COUNT']\n ];\n this.setColour(LISTS_HUE);\n this.appendValueInput('VAR')\n .setCheck('List')\n this.appendValueInput('data')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(Blockly.Msg.HTML_VALUE)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_DE)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n //.appendField(new Blockly.FieldTextInput('mylist'), 'VAR')\n this.setInputsInline(true);\n this.setOutput(true, Number);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'INDEX': Blockly.Msg.MIXLY_TOOLTIP_LIST_FIND_INDEX,\n 'COUNT': Blockly.Msg.MIXLY_TOOLTIP_LIST_FIND_COUNT\n\n };\n return TOOLTIPS[mode];\n });\n }\n};\nexport const list_trig = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MIXLY_LIST_LEN, 'LEN'],\n [Blockly.Msg.MATH_ONLIST_OPERATOR_SUM, 'SUM'],\n [Blockly.Msg.MATH_ONLIST_OPERATOR_MAX, 'MAX'],\n [Blockly.Msg.MATH_ONLIST_OPERATOR_MIN, 'MIN'],\n [Blockly.Msg.MATH_ONLIST_OPERATOR_AVERAGE, 'AVERAGE'],\n [Blockly.Msg.MATH_ONLIST_OPERATOR_MEDIAN, 'MEDIAN'],\n [Blockly.Msg.MATH_ONLIST_OPERATOR_MODE, 'MODE'],\n [Blockly.Msg.MATH_ONLIST_OPERATOR_STD_DEV, 'STD_DEV'],\n ];\n //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);\n this.setColour(LISTS_HUE);\n this.setOutput(true, Number);\n this.appendValueInput('data')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setInputsInline(true);\n // Assign 'this' to a variable for use in the tooltip closure below.\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'LEN': Blockly.Msg.LISTS_LENGTH_TOOLTIP,\n 'SUM': Blockly.Msg.MATH_ONLIST_TOOLTIP_SUM,\n 'MAX': Blockly.Msg.MATH_ONLIST_TOOLTIP_MAX,\n 'MIN': Blockly.Msg.MATH_ONLIST_TOOLTIP_MIN,\n 'AVERAGE': Blockly.Msg.MATH_ONLIST_TOOLTIP_AVERAGE,\n 'MEDIAN': Blockly.Msg.MATH_ONLIST_TOOLTIP_MEDIAN,\n 'MODE': Blockly.Msg.MATH_ONLIST_TOOLTIP_MODE,\n 'STD_DEV': Blockly.Msg.MATH_ONLIST_TOOLTIP_STD_DEV\n\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const lists_sort = {\n /**\n * Block for sorting a list.\n * @this Blockly.Block\n */\n init: function () {\n this.jsonInit({\n \"args0\": [\n {\n \"type\": \"input_value\",\n \"name\": \"LIST\",\n \"check\": \"List\"\n },\n {\n \"type\": \"field_dropdown\",\n \"name\": \"TYPE\",\n \"options\": [\n [Blockly.Msg.LISTS_SORT_TYPE_NUMERIC, \"NUMERIC\"],\n [Blockly.Msg.LISTS_SORT_TYPE_TEXT, \"TEXT\"],\n [Blockly.Msg.LISTS_SORT_TYPE_IGNORECASE, \"IGNORE_CASE\"]\n ]\n },\n {\n \"type\": \"field_dropdown\",\n \"name\": \"DIRECTION\",\n \"options\": [\n [Blockly.Msg.LISTS_SORT_ORDER_ASCENDING, \"1\"],\n [Blockly.Msg.LISTS_SORT_ORDER_DESCENDING, \"-1\"]\n ]\n },\n ],\n \"message0\": Blockly.Msg.LISTS_SORT_TITLE,\n \"inputsInline\": true,\n \"output\": \"List\",\n \"colour\": LISTS_HUE,\n \"tooltip\": Blockly.Msg.LISTS_SORT_TOOLTIP,\n \"helpUrl\": Blockly.Msg.LISTS_SORT_HELPURL\n });\n }\n};\n\nexport const lists_change_to = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_TUPLE, 'tuple'],\n [Blockly.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD, 'set'],\n [Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TITLE_ADD, 'array']\n ];\n this.setColour(LISTS_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"List\")\n // .appendField(Blockly.Msg.blockpy_USE_LIST);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.A_TO_B)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'tuple': Blockly.Msg.MIXLY_TOOLTIP_CONVERT_LIST_TO_TUPLE,\n 'set': Blockly.Msg.MIXLY_TOOLTIP_CONVERT_LIST_TO_SET,\n 'array': Blockly.Msg.MIXLY_TOOLTIP_CONVERT_LIST_TO_ARRAY\n };\n return TOOLTIPS[mode];\n });\n\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const list_many_input = {\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendDummyInput(\"\")\n .appendField('[')\n .appendField(new Blockly.FieldTextInput('0,0,0'), \"CONTENT\")\n .appendField(']');\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const lists_create_with_noreturn = {\n /**\n * Block for creating a list with any number of elements of any type.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LISTS_HUE);\n this.itemCount_ = 3;\n this.updateShape_();\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setOutput(true, \"List\")\n this.setMutator(new Blockly.icons.MutatorIcon(['lists_create_with_item'], this));\n this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_PYTHON_TOOLTIP);\n },\n /**\n * Create XML to represent list inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n /**\n * Parse XML to restore the list inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('lists_create_with_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('lists_create_with_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i).connection.connect(connections[i]);\n }\n }\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @private\n * @this Blockly.Block\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n var i = 0;\n while (this.getInput('ADD' + i)) {\n this.removeInput('ADD' + i);\n i++;\n }\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.appendDummyInput('EMPTY')\n .appendField(Blockly.Msg.LISTS_CREATE_PYTHON_EMPTY_TITLE);\n } else {\n for (var i = 0; i < this.itemCount_; i++) {\n var input = this.appendValueInput('ADD' + i);\n if (i == 0) {\n input.appendField(Blockly.Msg.blockpy_LISTS_CREATE_WITH_INPUT_WITH);\n }\n }\n }\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n}\n\nexport const lists_change_to_general = {\n init: function () {\n var OPERATORS =\n [\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_LIST, 'list'],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_TUPLE, 'tuple'],\n [Blockly.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD, 'set']\n ];\n this.setColour(LISTS_HUE);\n this.appendValueInput('VAR');\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.A_TO_B)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const lists_del_general = {\n /**\n * Block for list length.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendValueInput('TUP')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.OBJECT_DELETE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const list_tolist = {\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_TOLIST);\n this.setOutput(true, 'List');\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_TOOLTIP_TOLIST);\n }\n};\n\nexport const lists_create_with2 = lists_create_with\nexport const lists_create_with_text2 = lists_create_with_text\nexport const lists_getIndex3 = lists_get_index\nexport const lists_getSublist3 = lists_get_sublist\nexport const lists_setIndex3 = lists_set_index\nexport const lists_insert_value2 = lists_insert_value\nexport const lists_remove_at2 = lists_remove_at\nexport const list_tolist2 = list_tolist;\n\n\nexport const ENUMERATE ={\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.blockpy_USE_LIST);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_TO_INDEX_SEQUENCE);\n // this.appendValueInput('VAR_N')\n // .appendField(Blockly.Msg.MIXLY_INDEX+Blockly.Msg.MIXLY_STARTSWITH);\n this.setInputsInline(true);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_TOTO_INDEX_SEQUENC_TOOLTIP);\n }\n};\n\nexport const enumerate = {\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.blockpy_USE_LIST);\n this.appendValueInput('LIST');\n this.appendValueInput('VALUE')\n .appendField(Blockly.Msg.MIXLY_TO_INDEX_SEQUENCE)\n .appendField(Blockly.Msg.MIXLY_INDEX+Blockly.Msg.MIXLY_STARTSWITH);\n this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOTO_INDEX_SEQUENC_TOOLTIP);\n }\n};\n\nexport const content_in_lists = {\n init: function () {\n this.setColour(LISTS_HUE);\n this.appendValueInput(\"CON\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_MIXGO_MUSIC_SHOW_IN);\n this.appendValueInput(\"LIST\")\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MID);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n}","import * as Blockly from 'blockly/core';\n\nconst LOGIC_HUE = 210;\n\nexport const logic_compare = {\n /**\n * Block for comparison operator.\n * @this Blockly.Block\n */\n init: function () {\n var OPERATORS = Blockly.RTL ? [\n ['=', 'EQ'],\n ['\\u2260', 'NEQ'],\n ['>', 'LT'],\n ['\\u2265', 'LTE'],\n ['<', 'GT'],\n ['\\u2264', 'GTE']\n ] : [\n ['=', 'EQ'],\n ['\\u2260', 'NEQ'],\n ['<', 'LT'],\n ['\\u2264', 'LTE'],\n ['>', 'GT'],\n ['\\u2265', 'GTE']\n ];\n //this.setHelpUrl(Blockly.Msg.LOGIC_COMPARE_HELPURL);\n this.setColour(LOGIC_HUE);\n this.setOutput(true, Boolean);\n this.appendValueInput('A');\n this.appendValueInput('B')\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setInputsInline(true);\n // Assign 'this' to a variable for use in the tooltip closure below.\n var thisBlock = this;\n this.setTooltip(function () {\n var op = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'EQ': Blockly.Msg.LOGIC_COMPARE_TOOLTIP_EQ,\n 'NEQ': Blockly.Msg.LOGIC_COMPARE_TOOLTIP_NEQ,\n 'LT': Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LT,\n 'LTE': Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LTE,\n 'GT': Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GT,\n 'GTE': Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GTE\n };\n return TOOLTIPS[op];\n });\n this.prevBlocks_ = [null, null];\n },\n /**\n * Called whenever anything on the workspace changes.\n * Prevent mismatched types from being compared.\n * @this Blockly.Block\n */\n /*onchange: function(e) {\n var blockA = this.getInputTargetBlock('A');\n var blockB = this.getInputTargetBlock('B');\n // Disconnect blocks that existed prior to this change if they don't match.\n if (blockA && blockB &&\n !blockA.outputConnection.checkType_(blockB.outputConnection)) {\n // Mismatch between two inputs. Disconnect previous and bump it away.\n // Ensure that any disconnections are grouped with the causing event.\n Blockly.Events.setGroup(e.group);\n for (var i = 0; i < this.prevBlocks_.length; i++) {\n var block = this.prevBlocks_[i];\n if (block === blockA || block === blockB) {\n block.unplug();\n block.bumpNeighbours_();\n }\n }\n Blockly.Events.setGroup(false);\n }\n this.prevBlocks_[0] = blockA;\n this.prevBlocks_[1] = blockB;\n }*/\n};\n\nexport const logic_compare_continous = {\n\n init: function () {\n var OPERATORS1 = Blockly.RTL ? [\n ['>', 'LT'],\n ['\\u2265', 'LTE'],\n ['<', 'GT'],\n ['\\u2264', 'GTE']\n ] : [\n ['<', 'LT'],\n ['\\u2264', 'LTE'],\n ['>', 'GT'],\n ['\\u2265', 'GTE']\n ];\n var OPERATORS2 = Blockly.RTL ? [\n ['>', 'LT'],\n ['\\u2265', 'LTE'],\n ['<', 'GT'],\n ['\\u2264', 'GTE']\n ] : [\n ['<', 'LT'],\n ['\\u2264', 'LTE'],\n ['>', 'GT'],\n ['\\u2265', 'GTE']\n ];\n //this.setHelpUrl(Blockly.Msg.LOGIC_COMPARE_HELPURL);\n this.setColour(LOGIC_HUE);\n this.setOutput(true, Boolean);\n this.appendValueInput('A');\n this.appendValueInput('B')\n .appendField(new Blockly.FieldDropdown(OPERATORS1), 'OP1');\n this.appendValueInput('C')\n .appendField(new Blockly.FieldDropdown(OPERATORS2), 'OP2');\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_LOGIC_COMPARE_CONTINOUS_TOOLTIP);\n\n }\n};\n\nexport const logic_operation = {\n /**\n * Block for logical operations: 'and', 'or'.\n * @this Blockly.Block\n */\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.LOGIC_OPERATION_AND, 'AND'],\n [Blockly.Msg.LOGIC_OPERATION_OR, 'OR'],\n [Blockly.Msg.LOGIC_OPERATION_NOR, 'NOR'],\n [Blockly.Msg.LOGIC_OPERATION_XOR, 'XOR']\n ];\n //this.setHelpUrl(Blockly.Msg.LOGIC_OPERATION_HELPURL);\n this.setColour(LOGIC_HUE);\n this.setOutput(true, Boolean);\n this.appendValueInput('A')\n .setCheck([Boolean, Number]);\n this.appendValueInput('B')\n .setCheck([Boolean, Number])\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setInputsInline(true);\n // Assign 'this' to a variable for use in the tooltip closure below.\n var thisBlock = this;\n this.setTooltip(function () {\n var op = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'AND': Blockly.Msg.LOGIC_OPERATION_TOOLTIP_AND,\n 'OR': Blockly.Msg.LOGIC_OPERATION_TOOLTIP_OR,\n 'NOR': Blockly.Msg.LOGIC_OPERATION_TOOLTIP_NOR,\n 'XOR': Blockly.Msg.LOGIC_OPERATION_TOOLTIP_XOR\n };\n return TOOLTIPS[op];\n });\n }\n};\n\nexport const logic_negate = {\n /**\n * Block for negation.\n * @this Blockly.Block\n */\n init: function () {\n //this.setHelpUrl(Blockly.Msg.LOGIC_NEGATE_HELPURL);\n this.setColour(LOGIC_HUE);\n this.setOutput(true, Boolean);\n this.appendValueInput('BOOL')\n .setCheck([Number, Boolean])\n .appendField(Blockly.Msg.LOGIC_NEGATE_TITLE);\n //this.interpolateMsg(Blockly.Msg.LOGIC_NEGATE_TITLE,\n // ['BOOL', Boolean, Blockly.inputs.Align.RIGHT],\n // Blockly.inputs.Align.RIGHT);\n this.setTooltip(Blockly.Msg.LOGIC_NEGATE_TOOLTIP);\n }\n};\n\nexport const logic_boolean = {\n /**\n * Block for boolean data type: true and false.\n * @this Blockly.Block\n */\n init: function () {\n var BOOLEANS = [\n [Blockly.Msg.LOGIC_BOOLEAN_TRUE, 'TRUE'],\n [Blockly.Msg.LOGIC_BOOLEAN_FALSE, 'FALSE']\n ];\n //this.setHelpUrl(Blockly.Msg.LOGIC_BOOLEAN_HELPURL);\n this.setColour(LOGIC_HUE);\n this.setOutput(true, Boolean);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown(BOOLEANS), 'BOOL');\n this.setTooltip(Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP);\n }\n};\n\nexport const logic_null = {\n /**\n * Block for null data type.\n * @this Blockly.Block\n */\n init: function () {\n //this.setHelpUrl(Blockly.Msg.LOGIC_NULL_HELPURL);\n this.setColour(LOGIC_HUE);\n this.setOutput(true);\n this.appendDummyInput()\n .appendField(Blockly.Msg.LOGIC_NULL);\n this.setTooltip(Blockly.Msg.LOGIC_NULL_TOOLTIP);\n }\n};\n\nexport const logic_true_or_false = {\n init: function () {\n this.setColour(LOGIC_HUE);\n this.appendValueInput('A');\n this.appendValueInput('B')\n .appendField(Blockly.Msg.LOGIC_TERNARY_IF_TRUE);\n this.appendValueInput('C')\n .appendField(Blockly.Msg.LOGIC_TERNARY_IF_FALSE);\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_LOGIT_TRUEORFALSE);\n }\n};\n\nexport const logic_is_in = {\n init: function () {\n var BOOLEANS = [\n [Blockly.Msg.TEXT_APPEND_TO, 'in'],\n [Blockly.Msg.MIXLY_PYTHON_LOGIC_IS_NOT_IN, 'not in']\n ];\n this.setColour(LOGIC_HUE);\n this.appendValueInput('A');\n this.appendValueInput('B')\n .setCheck([String, 'List'])\n //.appendField(Blockly.Msg.TEXT_APPEND_TO)\n .appendField(new Blockly.FieldDropdown(BOOLEANS), 'BOOL');\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MICROBIT_LOGIC_IS_IN);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.IN);\n }\n};\n\nexport const logic_is = {\n init: function () {\n var BOOLEANS = [\n [Blockly.Msg.MIXLY_PYTHON_LOGIC_IS, 'is'],\n [Blockly.Msg.MIXLY_PYTHON_LOGIC_IS_NOT, 'is not']\n ];\n this.setColour(LOGIC_HUE);\n this.appendValueInput('A');\n this.appendValueInput('B')\n .appendField(new Blockly.FieldDropdown(BOOLEANS), 'BOOL');\n //.appendField(Blockly.Msg.MIXLY_PYTHON_LOGIC_IS);\n this.setOutput(true, Boolean);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_LOGIC_IS_TOOLTIP);\n }\n};\n\nexport const logic_tobool = {\n init: function () {\n this.setColour(LOGIC_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_TOBOOL);\n this.setOutput(true, Boolean);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_TOOLTIP_TOBOOL);\n }\n};","import * as Blockly from 'blockly/core';\n\nconst MATH_HUE = 230; //'#e49f16';\n\nBlockly.FieldTextInput.math_number_validator = function (text) {\n //return window.isNaN(text) ? null : String(text);\n // var pattern = /^-?(0X|0x|0O|0o|0B|0b)?[a-fA-F0-9]{1,}(\\.[a-fA-F0-9]+)?$/;\n // return pattern.test(text) ? String(text) : null;//校验,二 八 十 十六进制匹配\n return String(text);//不再校验\n};\n\nBlockly.FieldTextInput.math_number_validator_include_blank = function (text) {\n if (text === \"\") {\n return \"\";\n }\n var pattern = /^-?(0X|0x|0O|0o|0B|0b)?[a-fA-F0-9]{1,}(\\.[a-fA-F0-9]+)?$/;\n return pattern.test(text) ? String(text) : null;//校验,二 八 十 十六进制匹配\n};\n\nexport const math_number = {\n /**\n * Block for numeric value.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(MATH_HUE);\n this.appendDummyInput()\n .appendField(new Blockly.FieldTextInput('0',\n Blockly.FieldTextInput.math_number_validator), 'NUM');\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MATH_NUMBER_TOOLTIP);\n }\n};\n\nexport const math_constant = {\n init: function () {\n this.setColour(MATH_HUE);\n var constant =\n [['π', 'pi'], ['e', 'e']];\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_PYTHON_MATH_CONSTANT)\n .appendField(new Blockly.FieldDropdown(constant), 'CONSTANT')\n\n this.setOutput(true, Number);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('CONSTANT');\n var TOOLTIPS = {\n 'pi': Blockly.Msg.MIXLY_PYTHON_MATH_CONSTANT_PI_TOOLTIP,\n 'e': Blockly.Msg.MIXLY_PYTHON_MATH_CONSTANT_E_TOOLTIP\n };\n return TOOLTIPS[mode];\n });\n\n }\n};\n\nexport const math_constant_mp = {\n init: function () {\n this.setColour(MATH_HUE);\n var constant =\n [['π', 'pi'], ['e', 'e']];\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_PYTHON_MATH_CONSTANT)\n .appendField(new Blockly.FieldDropdown(constant), 'CONSTANT')\n\n this.setOutput(true, Number);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('CONSTANT');\n var TOOLTIPS = {\n 'pi': Blockly.Msg.MIXLY_PYTHON_MATH_CONSTANT_PI_MP_TOOLTIP,\n 'e': Blockly.Msg.MIXLY_PYTHON_MATH_CONSTANT_E_MP_TOOLTIP\n };\n return TOOLTIPS[mode];\n });\n\n }\n};\n\nexport const math_arithmetic = {\n /**\n * Block for basic arithmetic operator.\n * @this Blockly.Block\n */\n init: function () {\n var OPERATORS = [\n ['+', 'ADD'],\n ['-', 'MINUS'],\n ['×', 'MULTIPLY'],\n ['÷', 'DIVIDE'],\n ['%', 'QUYU'],\n ['//', 'ZHENGCHU'],\n ['**', 'POWER']\n ];\n //this.setHelpUrl(Blockly.Msg.MATH_ARITHMETIC_HELPURL);\n this.setColour(MATH_HUE);\n this.setOutput(true);\n this.appendValueInput('A')\n this.appendValueInput('B')\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setInputsInline(true);\n // Assign 'this' to a variable for use in the tooltip closure below.\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'ADD': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_ADD,\n 'MINUS': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MINUS,\n 'MULTIPLY': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MULTIPLY,\n 'DIVIDE': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,\n 'QUYU': Blockly.Msg.MATH_MODULO_TOOLTIP,\n 'ZHENGCHU': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,\n 'POWER': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_POWER\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const math_selfcalcu = {\n /**\n * Block for basic arithmetic operator.\n * @this Blockly.Block\n */\n init: function () {\n var OPERATORS = [\n ['+=', 'ADD'],\n ['-=', 'MINUS'],\n ['×=', 'MULTIPLY'],\n ['÷=', 'DIVIDE'],\n ['%=', 'QUYU'],\n ['//=', 'ZHENGCHU'],\n ['**=', 'POWER']\n ];\n\n this.setColour(MATH_HUE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.appendValueInput('A')\n this.appendValueInput('B')\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'ADD': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_ADD,\n 'MINUS': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MINUS,\n 'MULTIPLY': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MULTIPLY,\n 'DIVIDE': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,\n 'QUYU': Blockly.Msg.MATH_MODULO_TOOLTIP,\n 'ZHENGCHU': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,\n 'POWER': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_POWER\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const math_bit = {\n init: function () {\n var OPERATORS = [\n ['&', '&'],\n ['|', '|'],\n ['>>', '>>'],\n ['<<', '<<']\n ];\n this.setColour(MATH_HUE);\n this.setOutput(true, Number);\n this.appendValueInput('A')\n .setCheck(Number);\n this.appendValueInput('B')\n .setCheck(Number)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setInputsInline(true);\n this.setTooltip(\"位运算\");\n }\n};\n\nexport const math_trig = {\n /**\n * Block for trigonometry operators.\n * @this Blockly.Block\n */\n init: function () {\n var OPERATORS = [\n ['sin', 'SIN'],\n ['cos', 'COS'],\n ['tan', 'TAN'],\n ['asin', 'ASIN'],\n ['acos', 'ACOS'],\n ['atan', 'ATAN'],\n ['-', '-'],\n ['ln', 'LN'],\n ['log10', 'LOG10'],\n ['e^', 'EXP'],\n ['10^', 'POW10']\n ];\n //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);\n this.setColour(MATH_HUE);\n this.setOutput(true, Number);\n this.appendValueInput('NUM')\n .setCheck(Number)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n // Assign 'this' to a variable for use in the tooltip closure below.\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'SIN': Blockly.Msg.MATH_TRIG_TOOLTIP_SIN,\n 'COS': Blockly.Msg.MATH_TRIG_TOOLTIP_COS,\n 'TAN': Blockly.Msg.MATH_TRIG_TOOLTIP_TAN,\n 'ASIN': Blockly.Msg.MATH_TRIG_TOOLTIP_ASIN,\n 'ACOS': Blockly.Msg.MATH_TRIG_TOOLTIP_ACOS,\n 'ATAN': Blockly.Msg.MATH_TRIG_TOOLTIP_ATAN,\n 'LN': Blockly.Msg.MATH_SINGLE_TOOLTIP_LN\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const math_dec = {\n /**\n * Block for trigonometry operators.\n * @this Blockly.Block\n */\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MATH_BIN, 'bin'],\n [Blockly.Msg.MATH_OCT, 'oct'],\n [Blockly.Msg.MATH_HEX, 'hex'],\n ];\n //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);\n this.setColour(MATH_HUE);\n this.setOutput(true, String);\n this.appendValueInput('NUM')\n .setCheck(Number)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n // Assign 'this' to a variable for use in the tooltip closure below.\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'bin': Blockly.Msg.MATH_DEC_TOOLTIP_BIN,\n 'oct': Blockly.Msg.MATH_DEC_TOOLTIP_OCT,\n 'hex': Blockly.Msg.MATH_DEC_TOOLTIP_HEX,\n\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\n//取整等\nexport const math_to_int = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.LANG_MATH_TO_ROUND, 'round'],\n [Blockly.Msg.LANG_MATH_TO_CEIL, 'ceil'],\n [Blockly.Msg.LANG_MATH_TO_FLOOR, 'floor'],\n [Blockly.Msg.MATH_ABS, 'fabs'],\n // [Blockly.Msg.MATH_SQ, 'pow'],\n [Blockly.Msg.MATH_SQRT, 'sqrt']\n ];\n this.setColour(MATH_HUE);\n this.appendValueInput('A')\n .setCheck(Number)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setOutput(true, Number);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'sqrt': Blockly.Msg.MATH_SINGLE_TOOLTIP_ROOT,\n 'fabs': Blockly.Msg.MATH_SINGLE_TOOLTIP_ABS,\n 'sq': Blockly.Msg.MATH_SINGLE_TOOLTIP_SQ,\n 'round': Blockly.Msg.MATH_SINGLE_TOOLTIP_ROUND,\n 'ceil': Blockly.Msg.MATH_SINGLE_TOOLTIP_CEIL,\n 'floor': Blockly.Msg.MATH_SINGLE_TOOLTIP_FLOOR\n };\n return TOOLTIPS[mode];\n });\n }\n};\n//最大最小值\nexport const math_max_min = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MIXLY_MAX, 'max'],\n [Blockly.Msg.MIXLY_MIN, 'min'],\n ];\n\n this.setColour(MATH_HUE);\n this.appendValueInput('A')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP')\n .appendField('(');\n this.appendValueInput('B')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(',');\n this.appendDummyInput('')\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(')');\n this.setInputsInline(true);\n this.setOutput(true, Number);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'max': Blockly.Msg.MIXLY_TOOLTIP_MATH_MAX,\n 'min': Blockly.Msg.MIXLY_TOOLTIP_MATH_MIN\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const math_number_base_conversion = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MATH_TWO, 'two'],\n [Blockly.Msg.MATH_EIGHT, 'eight'],\n [Blockly.Msg.MATH_TEN, 'ten'],\n [Blockly.Msg.MATH_SIXTEEN, 'sixteen']\n ];\n this.setColour(MATH_HUE);\n this.appendDummyInput('')\n .appendField(Blockly.Msg.MATH_BA)\n this.appendValueInput(\"NUM\")\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP')\n .appendField(Blockly.Msg.MATH_JinZhi)\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MATH_ZHW)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP2')\n .appendField(Blockly.Msg.MATH_JinZhi);\n this.setFieldValue('ten', 'OP2')\n // this.setPreviousStatement(true, null);\n // this.setNextStatement(true, null);\n this.setOutput(true)\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'two': Blockly.Msg.MATH_Before_two,\n 'eight': Blockly.Msg.MATH_Before_eight,\n 'ten': Blockly.Msg.MATH_Before_ten,\n 'sixteen': Blockly.Msg.MATH_Before_sixteen,\n };\n var mode2 = thisBlock.getFieldValue('OP2');\n var TOOLTIPS2 = {\n 'two': Blockly.Msg.MATH_Behind_two,\n 'eight': Blockly.Msg.MATH_Behind_eight,\n 'ten': Blockly.Msg.MATH_Behind_ten,\n 'sixteen': Blockly.Msg.MATH_Behind_sixteen,\n };\n return TOOLTIPS[mode] + TOOLTIPS2[mode2];\n });\n }\n};\n\n\nexport const math_random = {\n init: function () {\n var INT_FLOAT = [[Blockly.Msg.LANG_MATH_INT, 'int'], [Blockly.Msg.LANG_MATH_FLOAT, 'float']];\n this.setColour(MATH_HUE);\n this.setOutput(true, Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_RANDOM)\n .appendField(new Blockly.FieldDropdown(INT_FLOAT), 'TYPE');\n this.appendValueInput('FROM')\n .setCheck(Number)\n .appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_FROM);\n this.appendValueInput('TO')\n .setCheck(Number)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg.LANG_MATH_RANDOM_INT_INPUT_TO);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('TYPE');\n var TOOLTIPS = {\n 'int': Blockly.Msg.LANG_MATH_INT,\n 'float': Blockly.Msg.LANG_MATH_FLOAT_RANDOM\n };\n return Blockly.Msg.MATH_RANDOM_INT_TOOLTIP + TOOLTIPS[mode];\n });\n }\n};\n\n\nexport const math_constrain = {\n /**\n * Block for constraining a number between two limits.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(MATH_HUE);\n this.setOutput(true, Number);\n this.appendValueInput('VALUE')\n .setCheck(Number)\n .appendField(Blockly.Msg.LANG_MATH_CONSTRAIN_INPUT_CONSTRAIN);\n this.appendValueInput('LOW')\n .setCheck(Number)\n .appendField(Blockly.Msg.LANG_MATH_CONSTRAIN_INPUT_LOW);\n this.appendValueInput('HIGH')\n .setCheck(Number)\n .appendField(Blockly.Msg.LANG_MATH_CONSTRAIN_INPUT_HIGH);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MATH_CONSTRAIN_TOOLTIP);\n }\n};\n\nexport const math_map = {\n init: function () {\n this.setColour(MATH_HUE);\n this.appendValueInput(\"NUM\", Number)\n .appendField(Blockly.Msg.MIXLY_MAP)\n .setCheck(Number);\n this.appendValueInput(\"fromLow\", Number)\n .appendField(Blockly.Msg.MIXLY_MAP_FROM)\n .setCheck(Number);\n this.appendValueInput(\"fromHigh\", Number)\n .appendField(\",\")\n .setCheck(Number);\n this.appendValueInput(\"toLow\", Number)\n .appendField(Blockly.Msg.MIXLY_MAP_TO)\n .setCheck(Number);\n this.appendValueInput(\"toHigh\", Number)\n .appendField(\",\")\n .setCheck(Number);\n this.appendDummyInput(\"\")\n .appendField(\"]\");\n this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_MATH_MAP);\n }\n};\n\nexport const math_indexer_number = {\n /**\n * Block for numeric value.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(MATH_HUE);\n this.appendDummyInput()\n .appendField(new Blockly.FieldTextInput('0', Blockly.FieldTextInput.math_number_validator_include_blank), 'NUM');\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MATH_NUMBER_TOOLTIP);\n }\n};\n\nexport const math_random_seed = {\n init: function () {\n this.setColour(MATH_HUE);\n this.appendValueInput('NUM')\n .setCheck(Number)\n .appendField(Blockly.Msg.LANG_MATH_RANDOM_SEED);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_MATH_RANDOM_SEED);\n }\n};\n\nexport const math_round = {\n\n init: function () {\n this.setColour(MATH_HUE);\n this.setOutput(true, Number);\n this.appendValueInput('VALUE')\n .setCheck(Number)\n this.appendValueInput('VAR')\n .setCheck(Number)\n .appendField(Blockly.Msg.MATH_ROUND)\n .appendField(Blockly.Msg.TEXT_KEEP);\n this.appendDummyInput()\n .appendField(Blockly.Msg.TEXT_DECIMAL);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MATH_ROUND_NEW_TOOLTIP);\n }\n};\n\nexport const text_to_number = {\n init: function () {\n var TO_INT_FLOAT =\n [[Blockly.Msg.MIXLY_TO_INT, 'int'], [Blockly.Msg.MIXLY_TO_FLOAT, 'float'], [Blockly.Msg.MIXLY_TO_BITES, 'b'], [Blockly.Msg.LANG_MATH_BYTE + Blockly.Msg.MIXLY_TO_INT, 'bti']];\n this.setColour(MATH_HUE);\n this.appendValueInput('VAR')\n .appendField(new Blockly.FieldDropdown(TO_INT_FLOAT), 'TOWHAT');\n this.setOutput(true, Number);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('TOWHAT');\n var TOOLTIPS = {\n 'int': Blockly.Msg.MIXLY_PYTHON_TOOLTIP_TOINT,\n 'float': Blockly.Msg.MIXLY_PYTHON_TOOLTIP_TOFLOAT,\n 'b': Blockly.Msg.MIXLY_TOOLTIP_TEXT_TOBYTE\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const text_to_number_skulpt = {\n init: function () {\n var TO_INT_FLOAT =\n [[Blockly.Msg.MIXLY_TO_INT, 'int'], [Blockly.Msg.MIXLY_TO_FLOAT, 'float']];\n this.setColour(MATH_HUE);\n this.appendValueInput('VAR')\n .appendField(new Blockly.FieldDropdown(TO_INT_FLOAT), 'TOWHAT');\n this.setOutput(true, Number);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('TOWHAT');\n var TOOLTIPS = {\n 'int': Blockly.Msg.MIXLY_TOOLTIP_TEXT_TOINT,\n 'float': Blockly.Msg.MIXLY_TOOLTIP_TEXT_TOFLOAT\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const base_map = math_map\n\nexport const turn_to_int = {\n init: function () {\n this.setColour(MATH_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.LANG_MATH_BYTE + Blockly.Msg.MIXLY_TO_HEX);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_TOOLTIP_TOHEX)\n }\n};\n\nexport const generate_cartesian_product = {\n /**\n * Block for creating a list with any number of elements of any type.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(MATH_HUE);\n this.itemCount_ = 1;\n this.setMutator(new Blockly.icons.MutatorIcon(['lists_create_with_item'], this));\n this.appendDummyInput('DUMMY')\n .appendField(Blockly.Msg.MIXLY_PRODUCT + Blockly.Msg.MIXLY_GENERATE_CARTESIAN_PRODUCT);\n this.appendValueInput('REPEAT')\n .appendField(Blockly.Msg.MIXLY_EVERY_PER_ELEPER_ELEMENT);\n this.appendDummyInput()\n .appendField(Blockly.Msg.CONTROLS_REPEAT_TITLE_TIMES);\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_PYTHON_TOOLTIP);\n this.updateShape_();\n },\n /**\n * Create XML to represent list inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n /**\n * Parse XML to restore the list inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('lists_create_with_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('lists_create_with_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput(`ADD${i}`).connection.connect(connections[i]);\n }\n }\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput(`ADD${i}`);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @private\n * @this Blockly.Block\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n let i = 0;\n while (this.getInput(`ADD${i}`)) {\n this.removeInput(`ADD${i}`);\n i++;\n }\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.appendDummyInput('EMPTY')\n .appendField(Blockly.Msg.MIXLY_EMPTY_REMINDER);\n } else {\n for (let i = 0; i < this.itemCount_; i++) {\n this.appendValueInput(`ADD${i}`);\n this.moveInputBefore(`ADD${i}`, 'REPEAT');\n }\n }\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n}","/**\n * @license\n * Copyright 2012 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Procedure blocks for Blockly.\n * @author fraser@google.com (Neil Fraser)\n */\nimport * as Blockly from 'blockly/core';\nimport Procedures from '../others/procedures';\n\nexport const procedures_defnoreturn = {\n /**\n * Block for defining a procedure with no return value.\n * @this {Blockly.Block}\n */\n init: function () {\n var initName = Procedures.findLegalName('', this);\n var nameField = new Blockly.FieldTextInput(initName,\n Procedures.rename);\n nameField.setSpellcheck(false);\n this.appendDummyInput()\n // .appendField(Blockly.Msg['PROCEDURES_DEFNORETURN_TITLE'])\n .appendField(nameField, 'NAME')\n .appendField('', 'PARAMS');\n this.setMutator(new Blockly.icons.MutatorIcon(['procedures_mutatorarg'], this));\n if ((this.workspace.options.comments ||\n (this.workspace.options.parentWorkspace &&\n this.workspace.options.parentWorkspace.options.comments)) &&\n Blockly.Msg['PROCEDURES_DEFNORETURN_COMMENT']) {\n this.setCommentText(Blockly.Msg['PROCEDURES_DEFNORETURN_COMMENT']);\n }\n this.setStyle('procedure_blocks');\n this.setTooltip(Blockly.Msg['PROCEDURES_DEFNORETURN_TOOLTIP']);\n this.setHelpUrl(Blockly.Msg['PROCEDURES_DEFNORETURN_HELPURL']);\n this.arguments_ = [];\n this.argumentVarModels_ = [];\n this.setStatements_(true);\n this.statementConnection_ = null;\n },\n /**\n * Add or remove the statement block from this function definition.\n * @param {boolean} hasStatements True if a statement block is needed.\n * @this {Blockly.Block}\n */\n setStatements_: function (hasStatements) {\n if (this.hasStatements_ === hasStatements) {\n return;\n }\n if (hasStatements) {\n this.appendStatementInput('STACK')\n .appendField(Blockly.Msg['PROCEDURES_DEFNORETURN_DO']);\n if (this.getInput('RETURN')) {\n this.moveInputBefore('STACK', 'RETURN');\n }\n } else {\n this.removeInput('STACK', true);\n }\n this.hasStatements_ = hasStatements;\n },\n /**\n * Update the display of parameters for this procedure definition block.\n * @private\n * @this {Blockly.Block}\n */\n updateParams_: function () {\n\n // Merge the arguments into a human-readable list.\n var paramString = '';\n if (this.arguments_.length) {\n paramString = Blockly.Msg['PROCEDURES_BEFORE_PARAMS'] +\n ' ' + this.arguments_.join(', ');\n }\n // The params field is deterministic based on the mutation,\n // no need to fire a change event.\n Blockly.Events.disable();\n try {\n this.setFieldValue(paramString, 'PARAMS');\n } finally {\n Blockly.Events.enable();\n }\n },\n /**\n * Create XML to represent the argument inputs.\n * @param {boolean=} opt_paramIds If true include the IDs of the parameter\n * quarks. Used by Procedures.mutateCallers for reconnection.\n * @return {!Element} XML storage element.\n * @this {Blockly.Block}\n */\n mutationToDom: function (opt_paramIds) {\n var container = Blockly.utils.xml.createElement('mutation');\n if (opt_paramIds) {\n container.setAttribute('name', this.getFieldValue('NAME'));\n }\n for (var i = 0; i < this.argumentVarModels_.length; i++) {\n var parameter = Blockly.utils.xml.createElement('arg');\n var argModel = this.argumentVarModels_[i];\n parameter.setAttribute('name', argModel.name);\n parameter.setAttribute('varid', argModel.getId());\n if (opt_paramIds && this.paramIds_) {\n parameter.setAttribute('paramId', this.paramIds_[i]);\n }\n container.appendChild(parameter);\n }\n\n // Save whether the statement input is visible.\n if (!this.hasStatements_) {\n container.setAttribute('statements', 'false');\n }\n return container;\n },\n /**\n * Parse XML to restore the argument inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this {Blockly.Block}\n */\n domToMutation: function (xmlElement) {\n this.arguments_ = [];\n this.argumentVarModels_ = [];\n for (var i = 0, childNode; (childNode = xmlElement.childNodes[i]); i++) {\n if (childNode.nodeName.toLowerCase() == 'arg') {\n var varName = childNode.getAttribute('name');\n var varId = childNode.getAttribute('varid') || childNode.getAttribute('varId');\n this.arguments_.push(varName);\n var variable = Blockly.Variables.getOrCreateVariablePackage(\n this.workspace, varId, varName, '');\n if (variable != null) {\n this.argumentVarModels_.push(variable);\n } else {\n console.log('Failed to create a variable with name ' + varName + ', ignoring.');\n }\n }\n }\n this.updateParams_();\n Procedures.mutateCallers(this);\n\n // Show or hide the statement input.\n this.setStatements_(xmlElement.getAttribute('statements') !== 'false');\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this {Blockly.Block}\n */\n decompose: function (workspace) {\n /*\n * Creates the following XML:\n * \n * \n * \n * arg1_name\n * etc...\n * \n * \n * \n */\n\n var containerBlockNode = Blockly.utils.xml.createElement('block');\n containerBlockNode.setAttribute('type', 'procedures_mutatorcontainer');\n var statementNode = Blockly.utils.xml.createElement('statement');\n statementNode.setAttribute('name', 'STACK');\n containerBlockNode.appendChild(statementNode);\n\n var node = statementNode;\n for (var i = 0; i < this.arguments_.length; i++) {\n var argBlockNode = Blockly.utils.xml.createElement('block');\n argBlockNode.setAttribute('type', 'procedures_mutatorarg');\n var fieldNode = Blockly.utils.xml.createElement('field');\n fieldNode.setAttribute('name', 'NAME');\n var argumentName = Blockly.utils.xml.createTextNode(this.arguments_[i]);\n fieldNode.appendChild(argumentName);\n argBlockNode.appendChild(fieldNode);\n var nextNode = Blockly.utils.xml.createElement('next');\n argBlockNode.appendChild(nextNode);\n\n node.appendChild(argBlockNode);\n node = nextNode;\n }\n\n var containerBlock = Blockly.Xml.domToBlock(containerBlockNode, workspace);\n\n if (this.type == 'procedures_defreturn') {\n containerBlock.setFieldValue(this.hasStatements_, 'STATEMENTS');\n } else {\n containerBlock.removeInput('STATEMENT_INPUT');\n }\n\n // Initialize procedure's callers with blank IDs.\n Procedures.mutateCallers(this);\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this {Blockly.Block}\n */\n compose: function (containerBlock) {\n // Parameter list.\n this.arguments_ = [];\n this.paramIds_ = [];\n this.argumentVarModels_ = [];\n var paramBlock = containerBlock.getInputTargetBlock('STACK');\n while (paramBlock && !paramBlock.isInsertionMarker()) {\n var varName = paramBlock.getFieldValue('NAME');\n this.arguments_.push(varName);\n var variable = this.workspace.getVariable(varName, '');\n this.argumentVarModels_.push(variable);\n\n this.paramIds_.push(paramBlock.id);\n paramBlock = paramBlock.nextConnection &&\n paramBlock.nextConnection.targetBlock();\n }\n this.updateParams_();\n Procedures.mutateCallers(this);\n\n // Show/hide the statement input.\n var hasStatements = containerBlock.getFieldValue('STATEMENTS');\n if (hasStatements !== null) {\n hasStatements = hasStatements == 'TRUE';\n if (this.hasStatements_ != hasStatements) {\n if (hasStatements) {\n this.setStatements_(true);\n // Restore the stack, if one was saved.\n this.statementConnection_ && this.statementConnection_.reconnect(this, 'STACK');\n this.statementConnection_ = null;\n } else {\n // Save the stack, then disconnect it.\n var stackConnection = this.getInput('STACK').connection;\n this.statementConnection_ = stackConnection.targetConnection;\n if (this.statementConnection_) {\n var stackBlock = stackConnection.targetBlock();\n stackBlock.unplug();\n stackBlock.bumpNeighbours();\n }\n this.setStatements_(false);\n }\n }\n }\n },\n /**\n * Return the signature of this procedure definition.\n * @return {!Array} Tuple containing three elements:\n * - the name of the defined procedure,\n * - a list of all its arguments,\n * - that it DOES NOT have a return value.\n * @this {Blockly.Block}\n */\n getProcedureDef: function () {\n return [this.getFieldValue('NAME'), this.arguments_, false];\n },\n /**\n * Return all variables referenced by this block.\n * @return {!Array} List of variable names.\n * @this {Blockly.Block}\n */\n getVars: function () {\n return this.arguments_;\n },\n /**\n * Return all variables referenced by this block.\n * @return {!Array} List of variable models.\n * @this {Blockly.Block}\n */\n getVarModels: function () {\n return this.argumentVarModels_;\n },\n /**\n * Notification that a variable is renaming.\n * If the ID matches one of this block's variables, rename it.\n * @param {string} oldId ID of variable to rename.\n * @param {string} newId ID of new variable. May be the same as oldId, but\n * with an updated name. Guaranteed to be the same type as the old\n * variable.\n * @override\n * @this {Blockly.Block}\n */\n renameVarById: function (oldId, newId) {\n var oldVariable = this.workspace.getVariableById(oldId);\n if (oldVariable.type != '') {\n // Procedure arguments always have the empty type.\n return;\n }\n var oldName = oldVariable.name;\n var newVar = this.workspace.getVariableById(newId);\n\n var change = false;\n for (var i = 0; i < this.argumentVarModels_.length; i++) {\n if (this.argumentVarModels_[i].getId() == oldId) {\n this.arguments_[i] = newVar.name;\n this.argumentVarModels_[i] = newVar;\n change = true;\n }\n }\n if (change) {\n this.displayRenamedVar_(oldName, newVar.name);\n Procedures.mutateCallers(this);\n }\n },\n /**\n * Notification that a variable is renaming but keeping the same ID. If the\n * variable is in use on this block, rerender to show the new name.\n * @param {!Blockly.VariableModel} variable The variable being renamed.\n * @package\n * @override\n * @this {Blockly.Block}\n */\n updateVarName: function (variable) {\n var newName = variable.name;\n var change = false;\n for (var i = 0; i < this.argumentVarModels_.length; i++) {\n if (this.argumentVarModels_[i].getId() == variable.getId()) {\n var oldName = this.arguments_[i];\n this.arguments_[i] = newName;\n change = true;\n }\n }\n if (change) {\n this.displayRenamedVar_(oldName, newName);\n Procedures.mutateCallers(this);\n }\n },\n /**\n * Update the display to reflect a newly renamed argument.\n * @param {string} oldName The old display name of the argument.\n * @param {string} newName The new display name of the argument.\n * @private\n * @this {Blockly.Block}\n */\n displayRenamedVar_: function (oldName, newName) {\n this.updateParams_();\n const mutator = this.getIcon(Blockly.icons.MutatorIcon.TYPE);\n // Update the mutator's variables if the mutator is open.\n if (mutator && mutator.bubbleIsVisible()) {\n var blocks = mutator.getWorkspace().getAllBlocks(false);\n for (var i = 0, block; (block = blocks[i]); i++) {\n if (block.type == 'procedures_mutatorarg' &&\n Blockly.Names.equals(oldName, block.getFieldValue('NAME'))) {\n block.setFieldValue(newName, 'NAME');\n }\n }\n }\n },\n /**\n * Add custom menu options to this block's context menu.\n * @param {!Array} options List of menu options to add to.\n * @this {Blockly.Block}\n */\n customContextMenu: function (options) {\n if (this.isInFlyout) {\n return;\n }\n // Add option to create caller.\n var option = { enabled: true };\n var name = this.getFieldValue('NAME');\n option.text = Blockly.Msg['PROCEDURES_CREATE_DO'].replace('%1', name);\n var xmlMutation = Blockly.utils.xml.createElement('mutation');\n xmlMutation.setAttribute('name', name);\n for (var i = 0; i < this.arguments_.length; i++) {\n var xmlArg = Blockly.utils.xml.createElement('arg');\n xmlArg.setAttribute('name', this.arguments_[i]);\n xmlMutation.appendChild(xmlArg);\n }\n var xmlBlock = Blockly.utils.xml.createElement('block');\n xmlBlock.setAttribute('type', this.callType_);\n xmlBlock.appendChild(xmlMutation);\n option.callback = Blockly.ContextMenu.callbackFactory(this, xmlBlock);\n options.push(option);\n\n // Add options to create getters for each parameter.\n if (!this.isCollapsed()) {\n for (var i = 0; i < this.argumentVarModels_.length; i++) {\n var argOption = { enabled: true };\n var argVar = this.argumentVarModels_[i];\n argOption.text = Blockly.Msg['VARIABLES_SET_CREATE_GET']\n .replace('%1', argVar.name);\n\n var argXmlField = Blockly.Variables.generateVariableFieldDom(argVar);\n var argXmlBlock = Blockly.utils.xml.createElement('block');\n argXmlBlock.setAttribute('type', 'variables_get');\n argXmlBlock.appendChild(argXmlField);\n argOption.callback =\n Blockly.ContextMenu.callbackFactory(this, argXmlBlock);\n options.push(argOption);\n }\n }\n },\n callType_: 'procedures_callnoreturn'\n};\n\nexport const procedures_defreturn = {\n /**\n * Block for defining a procedure with a return value.\n * @this {Blockly.Block}\n */\n init: function () {\n var initName = Procedures.findLegalName('', this);\n var nameField = new Blockly.FieldTextInput(initName,\n Procedures.rename);\n nameField.setSpellcheck(false);\n this.appendDummyInput()\n // .appendField(Blockly.Msg['PROCEDURES_DEFRETURN_TITLE'])\n .appendField(nameField, 'NAME')\n .appendField('', 'PARAMS');\n this.appendValueInput('RETURN')\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(Blockly.Msg['PROCEDURES_DEFRETURN_RETURN']);\n this.setMutator(new Blockly.icons.MutatorIcon(['procedures_mutatorarg'], this));\n if ((this.workspace.options.comments ||\n (this.workspace.options.parentWorkspace &&\n this.workspace.options.parentWorkspace.options.comments)) &&\n Blockly.Msg['PROCEDURES_DEFRETURN_COMMENT']) {\n this.setCommentText(Blockly.Msg['PROCEDURES_DEFRETURN_COMMENT']);\n }\n this.setStyle('procedure_blocks');\n this.setTooltip(Blockly.Msg['PROCEDURES_DEFRETURN_TOOLTIP']);\n this.setHelpUrl(Blockly.Msg['PROCEDURES_DEFRETURN_HELPURL']);\n this.arguments_ = [];\n this.argumentVarModels_ = [];\n this.setStatements_(true);\n this.statementConnection_ = null;\n },\n setStatements_: procedures_defnoreturn.setStatements_,\n updateParams_: procedures_defnoreturn.updateParams_,\n mutationToDom: procedures_defnoreturn.mutationToDom,\n domToMutation: procedures_defnoreturn.domToMutation,\n decompose: procedures_defnoreturn.decompose,\n compose: procedures_defnoreturn.compose,\n /**\n * Return the signature of this procedure definition.\n * @return {!Array} Tuple containing three elements:\n * - the name of the defined procedure,\n * - a list of all its arguments,\n * - that it DOES have a return value.\n * @this {Blockly.Block}\n */\n getProcedureDef: function () {\n return [this.getFieldValue('NAME'), this.arguments_, true];\n },\n getVars: procedures_defnoreturn.getVars,\n getVarModels: procedures_defnoreturn.getVarModels,\n renameVarById: procedures_defnoreturn.renameVarById,\n updateVarName: procedures_defnoreturn.updateVarName,\n displayRenamedVar_: procedures_defnoreturn.displayRenamedVar_,\n customContextMenu: procedures_defnoreturn.customContextMenu,\n callType_: 'procedures_callreturn'\n};\n\nexport const procedures_mutatorcontainer = {\n /**\n * Mutator block for procedure container.\n * @this {Blockly.Block}\n */\n init: function () {\n this.appendDummyInput()\n .appendField(Blockly.Msg['PROCEDURES_MUTATORCONTAINER_TITLE']);\n this.appendStatementInput('STACK');\n this.appendDummyInput('STATEMENT_INPUT')\n .appendField(Blockly.Msg['PROCEDURES_ALLOW_STATEMENTS'])\n .appendField(new Blockly.FieldCheckbox('TRUE'), 'STATEMENTS');\n this.setStyle('procedure_blocks');\n this.setTooltip(Blockly.Msg['PROCEDURES_MUTATORCONTAINER_TOOLTIP']);\n this.contextMenu = false;\n },\n};\n\nexport const procedures_mutatorarg = {\n /**\n * Mutator block for procedure argument.\n * @this {Blockly.Block}\n */\n init: function () {\n var field = new Blockly.FieldTextInput(\n Procedures.DEFAULT_ARG, this.validator_);\n // Hack: override showEditor to do just a little bit more work.\n // We don't have a good place to hook into the start of a text edit.\n field.oldShowEditorFn_ = field.showEditor_;\n var newShowEditorFn = function () {\n this.createdVariables_ = [];\n this.oldShowEditorFn_();\n };\n field.showEditor_ = newShowEditorFn;\n\n this.appendDummyInput()\n .appendField(Blockly.Msg.PROCEDURES_BEFORE_PARAMS)\n .appendField(field, 'NAME');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setStyle('procedure_blocks');\n this.setTooltip(Blockly.Msg['PROCEDURES_MUTATORARG_TOOLTIP']);\n this.contextMenu = false;\n\n // Create the default variable when we drag the block in from the flyout.\n // Have to do this after installing the field on the block.\n field.onFinishEditing_ = this.deleteIntermediateVars_;\n // Create an empty list so onFinishEditing_ has something to look at, even\n // though the editor was never opened.\n field.createdVariables_ = [];\n field.onFinishEditing_('x');\n },\n /**\n * Obtain a valid name for the procedure argument. Create a variable if\n * necessary.\n * Merge runs of whitespace. Strip leading and trailing whitespace.\n * Beyond this, all names are legal.\n * @param {string} varName User-supplied name.\n * @return {?string} Valid name, or null if a name was not specified.\n * @private\n * @this Blockly.FieldTextInput\n */\n validator_: function (varName) {\n var sourceBlock = this.getSourceBlock();\n\n var outerWs = sourceBlock.workspace.getRootWorkspace();\n varName = varName.replace(/[\\s\\xa0]+/g, ' ').replace(/^ | $/g, '');\n if (!varName) {\n return null;\n }\n\n // Prevents duplicate parameter names in functions\n var workspace = sourceBlock.workspace.targetWorkspace ||\n sourceBlock.workspace;\n var blocks = workspace.getAllBlocks(false);\n var caselessName = varName.toLowerCase();\n for (var i = 0; i < blocks.length; i++) {\n if (blocks[i].id == this.getSourceBlock().id) {\n continue;\n }\n // Other blocks values may not be set yet when this is loaded.\n var otherVar = blocks[i].getFieldValue('NAME');\n if (otherVar && otherVar.toLowerCase() == caselessName) {\n return null;\n }\n }\n\n // Don't create variables for arg blocks that\n // only exist in the mutator's flyout.\n if (sourceBlock.isInFlyout) {\n return varName;\n }\n\n var model = outerWs.getVariable(varName, '');\n if (model && model.name != varName) {\n // Rename the variable (case change)\n outerWs.renameVariableById(model.getId(), varName);\n }\n if (!model) {\n model = outerWs.createVariable(varName, '');\n if (model && this.createdVariables_) {\n this.createdVariables_.push(model);\n }\n }\n return varName;\n },\n\n /**\n * Called when focusing away from the text field.\n * Deletes all variables that were created as the user typed their intended\n * variable name.\n * @param {string} newText The new variable name.\n * @private\n * @this Blockly.FieldTextInput\n */\n deleteIntermediateVars_: function (newText) {\n var outerWs = this.getSourceBlock().workspace.getRootWorkspace();\n if (!outerWs) {\n return;\n }\n for (var i = 0; i < this.createdVariables_.length; i++) {\n var model = this.createdVariables_[i];\n if (model.name != newText) {\n outerWs.deleteVariableById(model.getId());\n }\n }\n }\n};\n\nexport const procedures_callnoreturn = {\n /**\n * Block for calling a procedure with no return value.\n * @this {Blockly.Block}\n */\n init: function () {\n this.appendDummyInput('TOPROW')\n .appendField('', 'NAME');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setStyle('procedure_blocks');\n // Tooltip is set in renameProcedure.\n this.setHelpUrl(Blockly.Msg['PROCEDURES_CALLNORETURN_HELPURL']);\n this.arguments_ = [];\n this.argumentVarModels_ = [];\n this.quarkConnections_ = {};\n this.quarkIds_ = null;\n this.previousEnabledState_ = true;\n },\n\n /**\n * Returns the name of the procedure this block calls.\n * @return {string} Procedure name.\n * @this {Blockly.Block}\n */\n getProcedureCall: function () {\n // The NAME field is guaranteed to exist, null will never be returned.\n return /** @type {string} */ (this.getFieldValue('NAME'));\n },\n /**\n * Notification that a procedure is renaming.\n * If the name matches this block's procedure, rename it.\n * @param {string} oldName Previous name of procedure.\n * @param {string} newName Renamed procedure.\n * @this {Blockly.Block}\n */\n renameProcedure: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getProcedureCall())) {\n this.setFieldValue(newName, 'NAME');\n var baseMsg = this.outputConnection ?\n Blockly.Msg['PROCEDURES_CALLRETURN_TOOLTIP'] :\n Blockly.Msg['PROCEDURES_CALLNORETURN_TOOLTIP'];\n this.setTooltip(baseMsg.replace('%1', newName));\n }\n },\n /**\n * Notification that the procedure's parameters have changed.\n * @param {!Array} paramNames New param names, e.g. ['x', 'y', 'z'].\n * @param {!Array} paramIds IDs of params (consistent for each\n * parameter through the life of a mutator, regardless of param renaming),\n * e.g. ['piua', 'f8b_', 'oi.o'].\n * @private\n * @this {Blockly.Block}\n */\n setProcedureParameters_: function (paramNames, paramIds) {\n // Data structures:\n // this.arguments = ['x', 'y']\n // Existing param names.\n // this.quarkConnections_ {piua: null, f8b_: Blockly.Connection}\n // Look-up of paramIds to connections plugged into the call block.\n // this.quarkIds_ = ['piua', 'f8b_']\n // Existing param IDs.\n // Note that quarkConnections_ may include IDs that no longer exist, but\n // which might reappear if a param is reattached in the mutator.\n var defBlock = Procedures.getDefinition(this.getProcedureCall(),\n this.workspace);\n const mutatorIcon = defBlock && defBlock.getIcon(Blockly.icons.MutatorIcon.TYPE);\n const mutatorOpen =\n mutatorIcon && mutatorIcon.bubbleIsVisible();\n if (!mutatorOpen) {\n this.quarkConnections_ = {};\n this.quarkIds_ = null;\n }\n if (!paramIds) {\n // Reset the quarks (a mutator is about to open).\n return;\n }\n // Test arguments (arrays of strings) for changes. '\\n' is not a valid\n // argument name character, so it is a valid delimiter here.\n if (paramNames.join('\\n') == this.arguments_.join('\\n')) {\n // No change.\n this.quarkIds_ = paramIds;\n return;\n }\n if (paramIds.length != paramNames.length) {\n throw Error('paramNames and paramIds must be the same length.');\n }\n this.setCollapsed(false);\n if (!this.quarkIds_) {\n // Initialize tracking for this block.\n this.quarkConnections_ = {};\n this.quarkIds_ = [];\n }\n // Switch off rendering while the block is rebuilt.\n var savedRendered = this.rendered;\n this.rendered = false;\n // Update the quarkConnections_ with existing connections.\n for (var i = 0; i < this.arguments_.length; i++) {\n var input = this.getInput('ARG' + i);\n if (input) {\n var connection = input.connection.targetConnection;\n this.quarkConnections_[this.quarkIds_[i]] = connection;\n if (mutatorOpen && connection &&\n paramIds.indexOf(this.quarkIds_[i]) == -1) {\n // This connection should no longer be attached to this block.\n connection.disconnect();\n connection.getSourceBlock().bumpNeighbours();\n }\n }\n }\n // Rebuild the block's arguments.\n this.arguments_ = [].concat(paramNames);\n // And rebuild the argument model list.\n this.argumentVarModels_ = [];\n for (var i = 0; i < this.arguments_.length; i++) {\n var variable = Blockly.Variables.getOrCreateVariablePackage(\n this.workspace, null, this.arguments_[i], '');\n this.argumentVarModels_.push(variable);\n }\n\n this.updateShape_();\n this.quarkIds_ = paramIds;\n // Reconnect any child blocks.\n if (this.quarkIds_) {\n for (var i = 0; i < this.arguments_.length; i++) {\n var quarkId = this.quarkIds_[i];\n if (quarkId in this.quarkConnections_) {\n var connection = this.quarkConnections_[quarkId];\n if (connection && !connection.reconnect(this, 'ARG' + i)) {\n // Block no longer exists or has been attached elsewhere.\n delete this.quarkConnections_[quarkId];\n }\n }\n }\n }\n // Restore rendering and show the changes.\n this.rendered = savedRendered;\n if (this.rendered) {\n this.render();\n }\n },\n /**\n * Modify this block to have the correct number of arguments.\n * @private\n * @this {Blockly.Block}\n */\n updateShape_: function () {\n for (var i = 0; i < this.arguments_.length; i++) {\n var field = this.getField('ARGNAME' + i);\n if (field) {\n // Ensure argument name is up to date.\n // The argument name field is deterministic based on the mutation,\n // no need to fire a change event.\n Blockly.Events.disable();\n try {\n field.setValue(this.arguments_[i]);\n } finally {\n Blockly.Events.enable();\n }\n } else {\n // Add new input.\n field = new Blockly.FieldLabel(this.arguments_[i]);\n var input = this.appendValueInput('ARG' + i)\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField(field, 'ARGNAME' + i);\n input.init();\n }\n }\n // Remove deleted inputs.\n while (this.getInput('ARG' + i)) {\n this.removeInput('ARG' + i);\n i++;\n }\n // Add 'with:' if there are parameters, remove otherwise.\n var topRow = this.getInput('TOPROW');\n if (topRow) {\n if (this.arguments_.length) {\n if (!this.getField('WITH')) {\n topRow.appendField(Blockly.Msg['PROCEDURES_CALL_BEFORE_PARAMS'], 'WITH');\n topRow.init();\n }\n } else {\n if (this.getField('WITH')) {\n topRow.removeField('WITH');\n }\n }\n }\n },\n /**\n * Create XML to represent the (non-editable) name and arguments.\n * @return {!Element} XML storage element.\n * @this {Blockly.Block}\n */\n mutationToDom: function () {\n var container = Blockly.utils.xml.createElement('mutation');\n container.setAttribute('name', this.getProcedureCall());\n for (var i = 0; i < this.arguments_.length; i++) {\n var parameter = Blockly.utils.xml.createElement('arg');\n parameter.setAttribute('name', this.arguments_[i]);\n container.appendChild(parameter);\n }\n return container;\n },\n /**\n * Parse XML to restore the (non-editable) name and parameters.\n * @param {!Element} xmlElement XML storage element.\n * @this {Blockly.Block}\n */\n domToMutation: function (xmlElement) {\n var name = xmlElement.getAttribute('name');\n this.renameProcedure(this.getProcedureCall(), name);\n var args = [];\n var paramIds = [];\n for (var i = 0, childNode; (childNode = xmlElement.childNodes[i]); i++) {\n if (childNode.nodeName.toLowerCase() == 'arg') {\n args.push(childNode.getAttribute('name'));\n paramIds.push(childNode.getAttribute('paramId'));\n }\n }\n this.setProcedureParameters_(args, paramIds);\n },\n /**\n * Return all variables referenced by this block.\n * @return {!Array} List of variable names.\n * @this {Blockly.Block}\n */\n getVars: function () {\n return this.arguments_;\n },\n /**\n * Return all variables referenced by this block.\n * @return {!Array} List of variable models.\n * @this {Blockly.Block}\n */\n getVarModels: function () {\n return this.argumentVarModels_;\n },\n /**\n * Procedure calls cannot exist without the corresponding procedure\n * definition. Enforce this link whenever an event is fired.\n * @param {!Blockly.Events.Abstract} event Change event.\n * @this {Blockly.Block}\n */\n onchange: function (event) {\n if (!this.workspace || this.workspace.isFlyout) {\n // Block is deleted or is in a flyout.\n return;\n }\n if (!event.recordUndo) {\n // Events not generated by user. Skip handling.\n return;\n }\n if (event.type == Blockly.Events.BLOCK_CREATE &&\n event.ids.indexOf(this.id) != -1) {\n // Look for the case where a procedure call was created (usually through\n // paste) and there is no matching definition. In this case, create\n // an empty definition block with the correct signature.\n var name = this.getProcedureCall();\n var def = Procedures.getDefinition(name, this.workspace);\n if (def && (def.type != this.defType_)) {\n // The signatures don't match.\n def = null;\n }\n if (!def) {\n Blockly.Events.setGroup(event.group);\n /**\n * Create matching definition block.\n * \n * \n * \n * \n * \n * test\n * \n * \n */\n var xml = Blockly.utils.xml.createElement('xml');\n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', this.defType_);\n var xy = this.getRelativeToSurfaceXY();\n var x = xy.x + Blockly.SNAP_RADIUS * (this.RTL ? -1 : 1);\n var y = xy.y + Blockly.SNAP_RADIUS * 2;\n block.setAttribute('x', x);\n block.setAttribute('y', y);\n var mutation = this.mutationToDom();\n block.appendChild(mutation);\n var field = Blockly.utils.xml.createElement('field');\n field.setAttribute('name', 'NAME');\n var callName = this.getProcedureCall();\n if (!callName) {\n // Rename if name is empty string.\n callName = Procedures.findLegalName('', this);\n this.renameProcedure('', callName);\n }\n field.appendChild(Blockly.utils.xml.createTextNode(callName));\n block.appendChild(field);\n xml.appendChild(block);\n Blockly.Xml.domToWorkspace(xml, this.workspace);\n Blockly.Events.setGroup(false);\n } else {\n if (JSON.stringify(def.getVars()) != JSON.stringify(this.arguments_)) {\n let paramNames = def.arguments_;\n let paramIds = [];\n for (var i = 0; i < this.arguments_.length; i++) {\n var input = this.getInput('ARG' + i);\n if (!input) {\n continue;\n }\n var connection = input.connection.targetConnection;\n if (!connection) {\n paramIds.push(null);\n continue;\n }\n paramIds.push(connection.sourceBlock_.id);\n }\n this.setProcedureParameters_(paramNames, paramIds);\n }\n }\n } else if (event.type == Blockly.Events.BLOCK_DELETE) {\n // Look for the case where a procedure definition has been deleted,\n // leaving this block (a procedure call) orphaned. In this case, delete\n // the orphan.\n var name = this.getProcedureCall();\n var def = Procedures.getDefinition(name, this.workspace);\n if (!def) {\n Blockly.Events.setGroup(event.group);\n this.dispose(true);\n Blockly.Events.setGroup(false);\n }\n } else if (event.type == Blockly.Events.CHANGE && event.element == 'disabled') {\n var name = this.getProcedureCall();\n var def = Procedures.getDefinition(name, this.workspace);\n if (def && def.id == event.blockId) {\n // in most cases the old group should be ''\n var oldGroup = Blockly.Events.getGroup();\n if (oldGroup) {\n // This should only be possible programmatically and may indicate a problem\n // with event grouping. If you see this message please investigate. If the\n // use ends up being valid we may need to reorder events in the undo stack.\n console.log('Saw an existing group while responding to a definition change');\n }\n Blockly.Events.setGroup(event.group);\n if (event.newValue) {\n this.previousEnabledState_ = this.isEnabled();\n this.setEnabled(false);\n } else {\n this.setEnabled(this.previousEnabledState_);\n }\n Blockly.Events.setGroup(oldGroup);\n }\n }\n },\n /**\n * Add menu option to find the definition block for this call.\n * @param {!Array} options List of menu options to add to.\n * @this {Blockly.Block}\n */\n customContextMenu: function (options) {\n if (!this.workspace.isMovable()) {\n // If we center on the block and the workspace isn't movable we could\n // loose blocks at the edges of the workspace.\n return;\n }\n\n var option = { enabled: true };\n option.text = Blockly.Msg['PROCEDURES_HIGHLIGHT_DEF'];\n var name = this.getProcedureCall();\n var workspace = this.workspace;\n option.callback = function () {\n var def = Procedures.getDefinition(name, workspace);\n if (def) {\n workspace.centerOnBlock(def.id);\n def.select();\n }\n };\n options.push(option);\n },\n defType_: 'procedures_defnoreturn'\n};\n\nexport const procedures_callreturn = {\n /**\n * Block for calling a procedure with a return value.\n * @this {Blockly.Block}\n */\n init: function () {\n this.appendDummyInput('TOPROW')\n .appendField('', 'NAME');\n this.setOutput(true);\n this.setStyle('procedure_blocks');\n // Tooltip is set in domToMutation.\n this.setHelpUrl(Blockly.Msg['PROCEDURES_CALLRETURN_HELPURL']);\n this.arguments_ = [];\n this.argumentVarModels_ = [];\n this.quarkConnections_ = {};\n this.quarkIds_ = null;\n this.previousEnabledState_ = true;\n },\n\n getProcedureCall: procedures_callnoreturn.getProcedureCall,\n renameProcedure: procedures_callnoreturn.renameProcedure,\n setProcedureParameters_:\n procedures_callnoreturn.setProcedureParameters_,\n updateShape_: procedures_callnoreturn.updateShape_,\n mutationToDom: procedures_callnoreturn.mutationToDom,\n domToMutation: procedures_callnoreturn.domToMutation,\n getVars: procedures_callnoreturn.getVars,\n getVarModels: procedures_callnoreturn.getVarModels,\n onchange: procedures_callnoreturn.onchange,\n customContextMenu:\n procedures_callnoreturn.customContextMenu,\n defType_: 'procedures_defreturn'\n};\n\nexport const procedures_ifreturn = {\n /**\n * Block for conditionally returning a value from a procedure.\n * @this {Blockly.Block}\n */\n init: function () {\n this.appendValueInput('CONDITION')\n .setCheck('Boolean')\n .appendField(Blockly.Msg['CONTROLS_IF_MSG_IF']);\n this.appendValueInput('VALUE')\n .appendField(Blockly.Msg['PROCEDURES_DEFRETURN_RETURN']);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setStyle('procedure_blocks');\n this.setTooltip(Blockly.Msg['PROCEDURES_IFRETURN_TOOLTIP']);\n this.setHelpUrl(Blockly.Msg['PROCEDURES_IFRETURN_HELPURL']);\n this.hasReturnValue_ = true;\n },\n /**\n * Create XML to represent whether this block has a return value.\n * @return {!Element} XML storage element.\n * @this {Blockly.Block}\n */\n mutationToDom: function () {\n var container = Blockly.utils.xml.createElement('mutation');\n container.setAttribute('value', Number(this.hasReturnValue_));\n return container;\n },\n /**\n * Parse XML to restore whether this block has a return value.\n * @param {!Element} xmlElement XML storage element.\n * @this {Blockly.Block}\n */\n domToMutation: function (xmlElement) {\n var value = xmlElement.getAttribute('value');\n this.hasReturnValue_ = (value == 1);\n if (!this.hasReturnValue_) {\n this.removeInput('VALUE');\n this.appendDummyInput('VALUE')\n .appendField(Blockly.Msg['PROCEDURES_DEFRETURN_RETURN']);\n }\n },\n /**\n * Called whenever anything on the workspace changes.\n * Add warning if this flow block is not nested inside a loop.\n * @param {!Blockly.Events.Abstract} _e Change event.\n * @this {Blockly.Block}\n */\n onchange: function () {\n if (!this.workspace.isDragging || this.workspace.isDragging()) {\n return; // Don't change state at the start of a drag.\n }\n var legal = false;\n // Is the block nested in a procedure?\n var block = this;\n do {\n if (this.FUNCTION_TYPES.indexOf(block.type) != -1) {\n legal = true;\n break;\n }\n block = block.getSurroundParent();\n } while (block);\n if (legal) {\n // If needed, toggle whether this block has a return value.\n if (block.type == 'procedures_defnoreturn' && this.hasReturnValue_) {\n this.removeInput('VALUE');\n this.appendDummyInput('VALUE')\n .appendField(Blockly.Msg['PROCEDURES_DEFRETURN_RETURN']);\n this.hasReturnValue_ = false;\n } else if (block.type == 'procedures_defreturn' &&\n !this.hasReturnValue_) {\n this.removeInput('VALUE');\n this.appendValueInput('VALUE')\n .appendField(Blockly.Msg['PROCEDURES_DEFRETURN_RETURN']);\n this.hasReturnValue_ = true;\n }\n this.setWarningText(null);\n if (!this.isInFlyout) {\n this.setEnabled(true);\n }\n } else {\n this.setWarningText(Blockly.Msg['PROCEDURES_IFRETURN_WARNING']);\n if (!this.isInFlyout && !this.getInheritedDisabled()) {\n this.setEnabled(false);\n }\n }\n },\n /**\n * List of block types that are functions and thus do not need warnings.\n * To add a new function type add this to your code:\n * procedures_ifreturn.FUNCTION_TYPES.push('custom_func');\n */\n FUNCTION_TYPES: ['procedures_defnoreturn', 'procedures_defreturn']\n};\n\nexport const procedures_return = {\n /**\n * Block for conditionally returning a value from a procedure.\n * @this Blockly.Block\n */\n init: function () {\n this.setStyle('procedure_blocks');\n // this.appendValueInput('CONDITION')\n // .setCheck(Boolean)\n // .appendField(Blockly.Msg.CONTROLS_IF_MSG_IF);\n this.appendValueInput('VALUE')\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.PROCEDURES_IFRETURN_TOOLTIP);\n this.hasReturnValue_ = true;\n },\n /**\n * Create XML to represent whether this block has a return value.\n * @return {!Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('value', Number(this.hasReturnValue_));\n return container;\n },\n /**\n * Parse XML to restore whether this block has a return value.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n var value = xmlElement.getAttribute('value');\n this.hasReturnValue_ = (value == 1);\n if (!this.hasReturnValue_) {\n this.removeInput('VALUE');\n this.appendDummyInput('VALUE')\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN);\n }\n },\n /**\n * Called whenever anything on the workspace changes.\n * Add warning if this flow block is not nested inside a loop.\n * @param {!Blockly.Events.Abstract} e Change event.\n * @this Blockly.Block\n */\n onchange: function () {\n var legal = false;\n // Is the block nested in a procedure?\n var block = this;\n do {\n if (this.FUNCTION_TYPES.indexOf(block.type) != -1) {\n legal = true;\n break;\n }\n block = block.getSurroundParent();\n } while (block);\n if (legal) {\n // If needed, toggle whether this block has a return value.\n if (block.type == 'procedures_defnoreturn' && this.hasReturnValue_) {\n this.removeInput('VALUE');\n this.appendDummyInput('VALUE')\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN);\n this.hasReturnValue_ = false;\n } else if (block.type == 'procedures_defreturn' &&\n !this.hasReturnValue_) {\n this.removeInput('VALUE');\n this.appendValueInput('VALUE')\n .appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN);\n this.hasReturnValue_ = true;\n }\n this.setWarningText(null);\n } else {\n this.setWarningText(Blockly.Msg.PROCEDURES_IFRETURN_WARNING);\n }\n },\n /**\n * List of block types that are functions and thus do not need warnings.\n * To add a new function type add this to your code:\n * procedures_ifreturn.FUNCTION_TYPES.push('custom_func');\n */\n FUNCTION_TYPES: ['procedures_defnoreturn', 'procedures_defreturn', 'method_procedures_defnoreturn', 'method_procedures_defreturn']\n};","import * as Blockly from 'blockly/core';\n\nconst SET_HUE = 100;\n\nexport const set_create_with = {\n /**\n * Block for creating a list with any number of elements of any type.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(SET_HUE);\n this.appendDummyInput(\"\")\n //don't need to specify the data type in Python\n // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'Array'], [Blockly.Msg.LANG_MATH_STRING, 'Array'], [Blockly.Msg.LANG_MATH_BOOLEAN, 'Array']]), 'TYPE')\n // .appendField(' ')\n .appendField(new Blockly.FieldTextInput('s1'), 'VAR')\n\n this.itemCount_ = 3;\n this.updateShape_();\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['set_create_with_item'], this));\n this.setTooltip(Blockly.Msg.blockpy_SET_CREATE_WITH_TOOLTIP);\n },\n /**\n * Create XML to represent list inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n /**\n * Parse XML to restore the list inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('set_create_with_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('set_create_with_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i).connection.connect(connections[i]);\n }\n }\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @private\n * @this Blockly.Block\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n var i = 0;\n while (this.getInput('ADD' + i)) {\n this.removeInput('ADD' + i);\n i++;\n }\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.appendDummyInput('EMPTY')\n .appendField(Blockly.Msg.blockpy_SET_CREATE_EMPTY_TITLE);\n } else {\n for (var i = 0; i < this.itemCount_; i++) {\n var input = this.appendValueInput('ADD' + i);\n if (i == 0) {\n input.appendField(Blockly.Msg.blockpy_SET_CREATE_WITH_INPUT_WITH);\n }\n }\n }\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n};\n\nexport const set_create_with_container = {\n /**\n * Mutator block for list container.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(SET_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD);\n this.appendStatementInput('STACK');\n this.setTooltip(Blockly.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const set_create_with_item = {\n /**\n * Mutator bolck for adding items.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(SET_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.blockpy_SET_VARIABLES_NAME);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.blockpy_SET_CREATE_WITH_ITEM_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const set_length = {\n\n init: function () {\n this.setColour(SET_HUE);\n this.appendValueInput('SET');\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_LENGTH);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.SET_LENGTH_TOOLTIP);\n this.setOutput(true, Number);\n }\n};\n\nexport const set_pop = {\n init: function () {\n this.setColour(SET_HUE);\n this.appendValueInput('SET')\n .setCheck('Set')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_SET_GET_AND_REMOVE_LAST);\n this.setTooltip(Blockly.Msg.SET_POP_TOOLTIP);\n this.setInputsInline(true);\n this.setOutput(true);\n }\n};\n\nexport const set_clear = {\n /**\n * Block for list length.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(SET_HUE);\n this.appendValueInput('SET')\n .setCheck('Set')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.SET_CLEAR);\n\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n }\n};\n\nexport const set_operate = {\n init: function () {\n\n\n this.appendValueInput('SET1')\n .setCheck('Set')\n var operate = [\n [Blockly.Msg.blockpy_set_union, 'union'],\n [Blockly.Msg.blockpy_set_intersection, 'intersection'],\n [Blockly.Msg.blockpy_set_difference, 'difference']\n ];\n this.setColour(SET_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_and_set)\n this.appendValueInput('SET2')\n .setCheck('Set')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_set_get_operate)\n .appendField(new Blockly.FieldDropdown(operate), 'OPERATE')\n\n this.setInputsInline(true);\n this.setOutput(true, \"set\");\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OPERATE');\n var TOOLTIPS = {\n 'union': Blockly.Msg.MIXLY_TOOLTIP_SET_UNION,\n 'intersection': Blockly.Msg.MIXLY_TOOLTIP_SET_INTERSECTION,\n 'difference': Blockly.Msg.MIXLY_TOOLTIP_SET_DIFFERENCE\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const set_operate_update = {\n init: function () {\n\n this.appendValueInput('SET1')\n .setCheck('Set')\n var operate_update = [\n [Blockly.Msg.blockpy_set_union, 'update'],\n [Blockly.Msg.blockpy_set_intersection, 'intersection_update'],\n [Blockly.Msg.blockpy_set_difference, 'difference_update']\n ];\n this.setColour(SET_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_and_set)\n this.appendValueInput('SET2')\n .setCheck('Set')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_set_get_operate)\n .appendField(new Blockly.FieldDropdown(operate_update), 'OPERATE')\n\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_set_update)\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OPERATE');\n var TOOLTIPS = {\n 'update': Blockly.Msg.MIXLY_TOOLTIP_SET_UPDATE,\n 'intersection_update': Blockly.Msg.MIXLY_TOOLTIP_SET_INTERSECTION_UPDATE,\n 'difference_update': Blockly.Msg.MIXLY_TOOLTIP_SET_DIFFERENCE_UPDATE\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const set_add_discard = {\n init: function () {\n this.appendValueInput('SET')\n .setCheck('Set')\n var changenum =\n [[Blockly.Msg.MIXLY_blockpy_set_add, 'add'], [Blockly.Msg.MIXLY_blockpy_set_discard, 'discard']];\n this.setColour(SET_HUE);\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldDropdown(changenum), 'OPERATE')\n this.appendValueInput('data')\n .appendField(Blockly.Msg.blockpy_SET_VARIABLES_NAME)\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OPERATE');\n var TOOLTIPS = {\n 'add': Blockly.Msg.SET_ADD_TOOLTIP,\n 'discard': Blockly.Msg.SET_DISCARD_TOOLTIP,\n\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const set_sub = {\n init: function () {\n\n this.appendValueInput('SET1')\n .setCheck('Set')\n var sub_super = [\n [Blockly.Msg.blockpy_set_sub, 'issubset'],\n [Blockly.Msg.blockpy_set_super, 'issuperset']\n ];\n this.setColour(SET_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_is_set)\n this.appendValueInput('SET2')\n .setCheck('Set')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.blockpy_set_of)\n .appendField(new Blockly.FieldDropdown(sub_super), 'OPERATE')\n\n\n this.setInputsInline(true);\n this.setOutput(true, Boolean);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OPERATE');\n var TOOLTIPS = {\n 'issubset': Blockly.Msg.MIXLY_TOOLTIP_SET_SUB,\n 'issuperset': Blockly.Msg.MIXLY_TOOLTIP_SET_SUPER\n\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const set_update = {\n init: function () {\n this.appendValueInput('SET')\n .setCheck('Set')\n this.setColour(SET_HUE);\n this.appendValueInput('VAR')\n .setCheck([String, 'List'])\n .appendField(Blockly.Msg.blockpy_set_add_update);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.SET_UPDATE_TOOLTIP);\n }\n};\n\n// export const set_change_to = {\n// init: function() {\n// var OPERATORS =\n// [[Blockly.Msg.MIXLY_MICROBIT_TYPE_LIST, 'list'],\n// [Blockly.Msg.MIXLY_MICROBIT_TYPE_TUPLE, 'tuple']\n// ];\n// this.setColour(SET_HUE);\n// this.appendValueInput('VAR')\n// .setCheck(\"Set\")\n// // .appendField(Blockly.Msg.blockpy_USE_LIST);\n// this.appendDummyInput(\"\")\n// .appendField(Blockly.Msg.A_TO_B)\n// .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n// this.setInputsInline(true);\n// this.setOutput(true);\n// var thisBlock = this;\n// this.setTooltip(function() {\n// var mode = thisBlock.getFieldValue('OP');\n// var TOOLTIPS = {\n// 'list': Blockly.Msg.SET_TO_LISTS,\n// 'tuple': Blockly.Msg.SET_TO_TUPLE,\n// };\n// return TOOLTIPS[mode];\n// });\n// }\n// };\n\nexport const set_create_with_text_return = {\n init: function () {\n this.setColour(SET_HUE);\n this.appendDummyInput(\"\")\n .appendField('{')\n .appendField(new Blockly.FieldTextInput('0,0,0'), 'TEXT')\n .appendField('}');\n // .appendField(this.newQuote_(false))\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXPY_TOOLTIP_SET_CREATE_WITH_TEXT);\n }\n}\n\nexport const set_toset = {\n init: function () {\n this.setColour(SET_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_TOSET);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_TOOLTIP_TOSET);\n }\n};","import * as Blockly from 'blockly/core';\n\nconst STORAGE_HUE = 0; //'#5d69c5'//0;\n\nexport const storage_open_file_with_os = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput('fn')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_PYTHON_STORAGE_OPEN_FILE_WITH_OS + \"(For Windows)\");\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n }\n}\n\nexport const storage_fileopen = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILENAME\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE);\n //.appendField(new Blockly.FieldTextInput('filename.txt'), 'FILENAME');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_READ, 'r'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE, 'w'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ, 'rb'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE, 'wb']\n ]), 'MODE');\n this.appendValueInput(\"FILE\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_AS);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('MODE');\n var mode0 = Blockly.Msg.MIXLY_USE;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE;\n var mode3 = Blockly.Msg.MIXLY_BELONG;\n var TOOLTIPS = {\n 'r': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_READ,\n 'w': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE,\n 'rb': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ,\n 'wb': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE\n };\n return mode0 + TOOLTIPS[mode] + mode3 + mode1 + mode2;\n });\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n};\n\n\nexport const storage_fileopen_new = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILENAME\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE);\n //.appendField(new Blockly.FieldTextInput('filename.txt'), 'FILENAME');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_READ, 'r'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE, 'w'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ, 'rb'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE, 'wb']\n ]), 'MODE');\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setInputsInline(true);\n this.setOutput(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('MODE');\n var mode0 = Blockly.Msg.MIXLY_USE;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE;\n var mode3 = Blockly.Msg.MIXLY_BELONG;\n var mode4 = Blockly.Msg.PY_STORAGE_FILE_OBJECT;\n var TOOLTIPS = {\n 'r': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_READ,\n 'w': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE,\n 'rb': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ,\n 'wb': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE\n };\n return mode0 + TOOLTIPS[mode] + mode3 + mode1 + mode2 + mode4;\n });\n }\n};\n\nexport const storage_fileopen_new_encoding = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILENAME\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE);\n //.appendField(new Blockly.FieldTextInput('filename.txt'), 'FILENAME');\n var code =\n [['ANSI', 'ANSI'], ['gbk', 'gbk'], ['utf-8', 'utf-8']];\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_READ, 'r'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE, 'w'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ, 'rb'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE, 'wb']\n ]), 'MODE');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXPY_TEXT_ENCODE)\n .appendField(new Blockly.FieldDropdown(code), 'CODE')\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setInputsInline(true);\n this.setOutput(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('MODE');\n var mode0 = Blockly.Msg.MIXLY_USE;\n var mode1 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_OPEN_FILE;\n var mode3 = Blockly.Msg.MIXLY_BELONG;\n var mode4 = Blockly.Msg.PY_STORAGE_FILE_OBJECT;\n var TOOLTIPS = {\n 'r': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_READ,\n 'w': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_WRITE,\n 'rb': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_READ,\n 'wb': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_BIT_WRITE\n };\n return mode0 + TOOLTIPS[mode] + mode3 + mode1 + mode2 + mode4;\n });\n }\n};\n\nexport const storage_file_write = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput('data')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE);\n this.appendValueInput(\"FILE\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_WRITE);\n // .appendField(new Blockly.FieldTextInput('f'), 'FILE');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE + Blockly.Msg.MIXLY_MICROBIT_TYPE_STRING + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_WRITE);\n }\n}\n\nexport const storage_get_contents_without_para = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILE\")\n .setCheck('Variable')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FROM_FILE);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL, 'read'], [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_ONE_LINE, 'readline'], [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL_LINES, 'readlines']]), 'MODE');\n this.setInputsInline(true);\n this.setPreviousStatement(false); //in front of the block has something\n this.setNextStatement(false); //beyond the ... has something\n this.setOutput(true, String);\n }\n};\n\nexport const storage_get_contents = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILE\")\n .setCheck('Variable')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FROM_FILE);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_NO_MORE_THAN_SIZE, 'read'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_ONE_LINE_NO_MORE_THAN_SIZE, 'readline'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL_LINES_NO_MORE_THAN_SIZE, 'readlines']\n ]), 'MODE');\n this.appendValueInput(\"SIZE\")\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER);\n this.setInputsInline(true);\n this.setPreviousStatement(false); //in front of the block has something\n this.setNextStatement(false); //beyond the ... has something\n this.setOutput(true, String);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('MODE');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FROM_FILE;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER;\n var TOOLTIPS = {\n 'read': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_NO_MORE_THAN_SIZE,\n 'readline': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_ONE_LINE_NO_MORE_THAN_SIZE,\n 'readlines': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL_LINES_NO_MORE_THAN_SIZE\n };\n return mode0 + TOOLTIPS[mode] + 'x' + mode2;\n });\n }\n};\n\nexport const storage_get_a_line = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILE\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FROM_FILE);\n this.setNextStatement(true);\n this.appendValueInput(\"SIZE\")\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_ONE_LINE_NO_MORE_THAN_SIZE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER);\n this.setInputsInline(true);\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setOutput(true, String);\n this.setTooltip(Blockly.Msg.MICROBIT_PYTHON_TYPE);\n }\n};\n\nexport const storage_can_write_ornot = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILE\")\n .appendField(Blockly.Msg.HTML_FILE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CAN_WRITE_ORNOT);\n this.setInputsInline(true);\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setOutput(true, Boolean);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CAN_WRITE_ORNOT1);\n }\n};\n\nexport const storage_get_filename = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILE\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FILENAME);\n this.setInputsInline(true);\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setOutput(true, String);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_FILENAME);\n }\n};\n\nexport const storage_close_file = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILE\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CLOSE_FILE);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setOutput(false);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CLOSE_FILE);\n }\n};\n\nexport const storage_list_all_files = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_LIST_ALL_FILES);\n this.setInputsInline(true);\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setOutput(true, 'List');\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_LIST_ALL_FILES);\n }\n};\nBlockly.Msg.MIXLY_MICROBIT_PY_STORAGE_DELETE_FILE\nexport const storage_delete_file = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_DELETE_FILE, 'remove'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_DELETE_DIRS, 'removedirs']\n ]), 'MODE');\n this.appendValueInput(\"FILE\")\n .setCheck(String);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setOutput(false);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_DELETE_FILE);\n }\n};\n\nexport const storage_get_file_size = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILE\")\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_FILE_SIZE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_SIZE);\n this.setInputsInline(true);\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_FILE_SIZE + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_SIZE);\n }\n};\n\nexport const storage_file_tell = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILE\")\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_RETURN_FILE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_PRESENT_LOCATION);\n this.setInputsInline(true);\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_TELL);\n }\n};\n\nexport const storage_file_seek = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILE\")\n .setCheck('Variable')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_SET_FILE_POSITION);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CURRENT_POSITION);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_START, 'start'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_CURRENT, 'current'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_END, 'end']\n ]), 'MODE');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_OFFSET);\n this.appendValueInput(\"SIZE\")\n .setCheck(Number);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER);\n this.setInputsInline(true);\n this.setPreviousStatement(true); //in front of the block has something\n this.setNextStatement(true); //beyond the ... has something\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('MODE');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_SET_FILE_POSITION + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CURRENT_POSITION;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER;\n var mode3 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_OFFSET;\n var TOOLTIPS = {\n 'start': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_START,\n 'current': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_CURRENT,\n 'end': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_FILE_SEEK_END\n };\n return mode0 + \" \" + TOOLTIPS[mode] + mode3 + 'x' + mode2;\n });\n }\n};\n\nexport const storage_get_current_dir = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_CURRENT_DIR);\n this.setInputsInline(true);\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setOutput(true, 'List');\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET_CURRENT_DIR);\n }\n};\n\nexport const storage_make_dir = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"PATH\")\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_PATH);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_ESP32_SET);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MKDIR, 'mkdir'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MAKEDIRS, 'makedirs']\n ]), 'MODE');\n this.setInputsInline(true);\n this.setPreviousStatement(true); //in front of the block has something\n this.setNextStatement(true); //beyond the ... has something\n this.setOutput(false);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('MODE');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_PATH;\n var mode2 = Blockly.Msg.MIXLY_ESP32_SET;\n var TOOLTIPS = {\n 'mkdir': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MKDIR,\n 'makedirs': Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKEDIRS\n };\n return mode0 + 'x' + mode2 + TOOLTIPS[mode];\n });\n }\n};\n\nexport const storage_rename = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILE\")\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_RENAME);\n this.appendValueInput(\"NEWFILE\")\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_AS);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setOutput(false);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_RENAME);\n }\n};\n\nexport const storage_change_dir = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILE\")\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CHANGE_DIR);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setOutput(false);\n this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CHANGE_DIR);\n }\n};\n\nexport const storage_is_file = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput(\"FILE\")\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_IS_OR_NOT);\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.HTML_FILE, 'isfile'],\n [Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_IS_DIR, 'isdir']\n ]), 'MODE');\n this.setInputsInline(true);\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setOutput(true, Boolean);\n let thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('MODE');\n var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH;\n var mode2 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_IS_OR_NOT;\n var TOOLTIPS = {\n 'isfile': Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MKDIR,\n 'isdir': Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKEDIRS\n };\n return mode0 + 'x' + mode2 + TOOLTIPS[mode];\n });\n }\n};\n\nexport const sdcard_use_spi_init = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput('SPISUB')\n .appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + \"SPI\")\n .setCheck(\"var\");\n this.appendValueInput('PINSUB')\n .appendField(\"CS\")\n this.appendValueInput('SUB')\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)\n .setCheck(\"var\");\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .appendField(Blockly.Msg.MIXLY_SD_CARD);\n this.setInputsInline(true);\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n }\n};\n\nexport const sdcard_mount = {\n init: function () {\n this.setColour(STORAGE_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_SD_CARD);\n this.appendValueInput(\"DIR\")\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_SDCARD_MOUNT);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setInputsInline(true);\n this.setTooltip();\n }\n}","import * as Blockly from 'blockly/core';\n\nconst TEXTS_HUE = 160//'#9ec440'//160;\n\nexport const text = {\n /**\n * Block for text value.\n * @this Blockly.Block\n */\n init: function () {\n //this.setHelpUrl(Blockly.Msg.TEXT_TEXT_HELPURL);\n this.setColour(TEXTS_HUE);\n this.appendDummyInput()\n .appendField(this.newQuote_(true))\n .appendField(new Blockly.FieldTextInput(''), 'TEXT')\n .appendField(this.newQuote_(false));\n this.setOutput(true, String);\n this.setTooltip(Blockly.Msg.TEXT_TEXT_TOOLTIP);\n },\n /**\n * Create an image of an open or closed quote.\n * @param {boolean} open True if open quote, false if closed.\n * @return {!Blockly.FieldImage} The field image of the quote.\n * @private\n */\n newQuote_: function (open) {\n if (open == this.RTL) {\n var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==';\n } else {\n var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC';\n }\n return new Blockly.FieldImage(file, 12, 12, '\"');\n }\n};\n\nexport const text_textarea = {\n /**\n * Block for text value.\n * @this Blockly.Block\n */\n init: function () {\n //this.setHelpUrl(Blockly.Msg.TEXT_TEXT_HELPURL);\n this.setColour(TEXTS_HUE);\n this.appendDummyInput()\n .appendField(this.newQuote_(true))\n .appendField(new Blockly.FieldMultilineInput('Hello\\nMixly'), 'VALUE')\n // .appendField(new Blockly.FieldTextInput(''), 'TEXT')\n .appendField(this.newQuote_(false));\n this.setOutput(true, String);\n this.setTooltip(Blockly.Msg.TEXT_LINES_TOOLTIP);\n },\n /**\n * Create an image of an open or closed quote.\n * @param {boolean} open True if open quote, false if closed.\n * @return {!Blockly.FieldImage} The field image of the quote.\n * @private\n */\n newQuote_: function (open) {\n if (open == this.RTL) {\n var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==';\n } else {\n var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC';\n }\n return new Blockly.FieldImage(file, 12, 12, '\"');\n }\n};\n\nBlockly.FieldTextInput.char_validator = function (text) {\n if (text.length > 1) {\n if (text.charAt(0) === \"\\\\\") {\n var charAtOne = text.charAt(1);\n if (charAtOne === \"0\" ||\n charAtOne === \"b\" ||\n charAtOne === \"f\" ||\n charAtOne === \"n\" ||\n charAtOne === \"r\" ||\n charAtOne === \"t\" ||\n charAtOne === \"\\\\\" ||\n charAtOne === \"'\") {\n return String(text).substring(0, 2);\n } else if (charAtOne === \"x\" && text.charAt(2) === \"0\" && text.charAt(3) === \"B\") {\n return String(text).substring(0, 4);\n }\n }\n }\n return String(text).substring(0, 1);\n};\n\nexport const text_char = {\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendDummyInput()\n .appendField(this.newQuote_(true))\n .appendField(new Blockly.FieldTextInput('', Blockly.FieldTextInput.char_validator), 'TEXT')\n .appendField(this.newQuote_(false));\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.TEXT_CHAR_TOOLTIP);\n },\n newQuote_: function (open) {\n if (open == true) {\n var file = '../../media/quote2.png';\n } else {\n var file = '../../media/quote3.png';\n }\n return new Blockly.FieldImage(file, 7, 12, '\"');\n }\n};\n\n\nexport const text_join = {\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendValueInput('A')\n .setCheck([String, Number]);\n this.appendValueInput('B')\n .setCheck([String, Number])\n .appendField(Blockly.Msg.MIXLY_TEXT_JOIN);\n this.setInputsInline(true);\n this.setOutput(true, String);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_TEXT_JOIN);\n }\n};\n\nexport const ascii_to_char = {\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendValueInput('VAR')\n .setCheck(Number)\n .appendField(Blockly.Msg.MIXLY_TOCHAR);\n this.setOutput(true, String);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_TEXT_TOCHAR);\n }\n};\n\nexport const char_to_ascii = {\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendValueInput('VAR')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_TOASCII);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_TEXT_TOASCII);\n }\n};\n\nexport const number_to_text = {\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_TOSTRING);\n this.setOutput(true, String);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_TOOLTIP_TOTEXT);\n }\n};\n\nexport const text_length = {\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendValueInput(\"VAR\")\n .appendField(Blockly.Msg.MIXLY_LENGTH);\n this.setOutput(true, Number);\n this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_TEXT_LENGTH);\n }\n}\n\n\n\nexport const text_char_at2 = {\n init: function () {\n this.WHERE_OPTIONS = [\n [Blockly.Msg.LISTS_GET_INDEX_FROM_START, \"FROM_START\"],\n [Blockly.Msg.LISTS_GET_INDEX_FROM_END, \"FROM_END\"],\n [Blockly.Msg.TEXT_GET_INDEX_RANDOM + 1 + Blockly.Msg.TEXT_CHARAT2, \"RANDOM\"]\n ];\n this.setHelpUrl(Blockly.Msg.LISTS_GET_INDEX_HELPURL);\n this.setColour(TEXTS_HUE);\n this.appendValueInput(\"VAR\")\n .setCheck(String)\n // .appendField(Blockly.Msg.MIXLY_MICROBIT_TYPE_LIST)\n this.appendValueInput(\"AT\")\n .setCheck(Number)\n this.appendDummyInput()\n //.appendField(Blockly.Msg.MIXLY_MID)\n .appendField(Blockly.Msg.LISTS_GET_INDEX_GET, \"MODE\");\n // .appendField(\"\", \"SPACE\");\n Blockly.Msg.LISTS_GET_INDEX_TAIL && this.appendDummyInput(\"TAIL\").appendField(Blockly.Msg.LISTS_GET_INDEX_TAIL);\n // this.appendDummyInput().appendField(Blockly.Msg.MIXLY_DE);\n this.setInputsInline(!0);\n this.setOutput(!0);\n this.updateAt_(!0);\n var b = this;\n this.setTooltip(function () {\n var a = b.getFieldValue(\"MODE\"),\n e = b.getFieldValue(\"WHERE\"),\n d = \"\";\n switch (a + \" \" + e) {\n case \"GET FROM_START\":\n case \"GET FROM_END\":\n d = Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM;\n break;\n case \"GET RANDOM\":\n d = Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM;\n break;\n case \"GET_REMOVE FROM_START\":\n case \"GET_REMOVE FROM_END\":\n d = Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM;\n break;\n case \"GET_REMOVE RANDOM\":\n d = Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM;\n break;\n }\n if (\"FROM_START\" == e || \"FROM_END\" == e) d += \" \" + Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP.replace(\"%1\", Blockly.Msg.ONE_BASED_INDEXING ? \"#1\" : \"#0\");\n return d\n })\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('WHERE');\n var TOOLTIPS = {\n 'FROM_START': Blockly.Msg.LISTS_GET_INDEX_FROM_START,\n 'FROM_END': Blockly.Msg.LISTS_GET_INDEX_FROM_END,\n 'RANDOM': Blockly.Msg.TEXT_GET_INDEX_RANDOM\n };\n return Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + Blockly.Msg.MIXLY_MICROBIT_TYPE_STRING + TOOLTIPS[mode] + 'n' + Blockly.Msg.TEXT_CHARAT2;\n });\n },\n mutationToDom: function () {\n var a = document.createElement(\"mutation\");\n a.setAttribute(\"statement\", !this.outputConnection);\n var b = this.getInput(\"AT\").type == Blockly.INPUT_VALUE;\n a.setAttribute(\"at\", b);\n return a\n },\n domToMutation: function (a) {\n var b = \"true\" == a.getAttribute(\"statement\");\n this.updateStatement_(b);\n a = \"false\" != a.getAttribute(\"at\");\n this.updateAt_(a)\n },\n updateStatement_: function (a) {\n 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)))\n },\n updateAt_: function (a) {\n this.removeInput(\"AT\");\n this.removeInput(\"ORDINAL\", !0);\n a ? (this.appendValueInput(\"AT\").setCheck(Number), Blockly.Msg.TEXT_CHARAT2 && this.appendDummyInput(\"ORDINAL\").appendField(Blockly.Msg.TEXT_CHARAT2)) : this.appendDummyInput(\"AT\");\n var b = new Blockly.FieldDropdown(this.WHERE_OPTIONS,\n function (b) {\n var e = \"FROM_START\" == b || \"FROM_END\" == b;\n if (e != a) {\n var d = this.sourceBlock_;\n d.updateAt_(e);\n d.setFieldValue(b, \"WHERE\");\n return null\n }\n });\n this.getInput(\"AT\").appendField(b, \"WHERE\");\n Blockly.Msg.LISTS_GET_INDEX_TAIL && this.moveInputBefore(\"TAIL\", null)\n }\n};\n\n\nexport const text_char_at = {\n init: function () {\n this.setHelpUrl(Blockly.Msg.LISTS_GET_INDEX_HELPURL);\n this.setColour(TEXTS_HUE);\n this.appendValueInput(\"VAR\")\n .setCheck(String);\n this.appendValueInput(\"AT\")\n .setCheck(Number)\n .appendField(Blockly.Msg.LISTS_GET_INDEX_GET + \" \" + Blockly.Msg.LISTS_GET_INDEX_FROM_START);\n this.appendDummyInput()\n .appendField(Blockly.Msg.TEXT_CHARAT2);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + Blockly.Msg.MIXLY_MICROBIT_TYPE_STRING + Blockly.Msg.LISTS_GET_INDEX_FROM_START + 'n' + Blockly.Msg.TEXT_CHARAT2);\n }\n}\n\n\nexport const text_random_char = {\n init: function () {\n this.setHelpUrl(Blockly.Msg.LISTS_GET_INDEX_HELPURL);\n this.setColour(TEXTS_HUE);\n this.appendValueInput(\"VAR\")\n .setCheck(String);\n this.appendDummyInput()\n .appendField(Blockly.Msg.TEXT_RANDOM_CHAR);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.TEXT_RANDOM_CHAR_TOOLTIP);\n }\n}\n\n\nexport const text_substring2 = {\n /**\n * Block for getting sublist.\n * @this Blockly.Block\n */\n init: function () {\n this['WHERE_OPTIONS_1'] = [\n [Blockly.Msg.LISTS_GET_INDEX_FROM_START, 'FROM_START'],\n [Blockly.Msg.LISTS_GET_INDEX_FROM_END, 'FROM_END'],\n [Blockly.Msg.LISTS_GET_SUBLIST_START_FIRST, 'FIRST']\n ];\n this['WHERE_OPTIONS_2'] = [\n [Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_START, 'FROM_START'],\n [Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_END, 'FROM_END'],\n [Blockly.Msg.LISTS_GET_SUBLIST_END_LAST, 'LAST']\n ];\n this.setHelpUrl(Blockly.Msg.LISTS_GET_SUBLIST_HELPURL);\n this.setColour(TEXTS_HUE);\n this.appendValueInput(\"VAR\")\n .setCheck(String)\n //.appendField(Blockly.Msg.LISTS_GET_SUBLIST_TAIL)\n // if (Blockly.Msg.LISTS_GET_SUBLIST_TAIL) {\n // this.appendDummyInput('TAIL')\n // .appendField(Blockly.Msg.LISTS_GET_SUBLIST_TAIL);\n // }\n this.appendDummyInput('')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);\n this.appendDummyInput('AT1');\n this.appendDummyInput('AT2');\n this.setInputsInline(true);\n this.setOutput(true, 'List');\n this.updateAt_(1, true);\n this.updateAt_(2, true);\n this.setTooltip(Blockly.Msg._GET_TEXT_SUBLIST_TOOLTIP);\n },\n /**\n * Create XML to represent whether there are 'AT' inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n var isAt1 = this.getInput('AT1').type == Blockly.INPUT_VALUE;\n container.setAttribute('at1', isAt1);\n var isAt2 = this.getInput('AT2').type == Blockly.INPUT_VALUE;\n container.setAttribute('at2', isAt2);\n return container;\n },\n /**\n * Parse XML to restore the 'AT' inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n var isAt1 = (xmlElement.getAttribute('at1') == 'true');\n var isAt2 = (xmlElement.getAttribute('at2') == 'true');\n this.updateAt_(1, isAt1);\n this.updateAt_(2, isAt2);\n },\n /**\n * Create or delete an input for a numeric index.\n * This block has two such inputs, independant of each other.\n * @param {number} n Specify first or second input (1 or 2).\n * @param {boolean} isAt True if the input should exist.\n * @private\n * @this Blockly.Block\n */\n updateAt_: function (n, isAt) {\n // Create or delete an input for the numeric index.\n // Destroy old 'AT' and 'ORDINAL' inputs.\n this.removeInput('AT' + n);\n this.removeInput('ORDINAL' + n, true);\n // Create either a value 'AT' input or a dummy input.\n if (isAt) {\n this.appendValueInput('AT' + n).setCheck(Number);\n if (Blockly.Msg.TEXT_CHARAT2) {\n this.appendDummyInput('ORDINAL' + n)\n .appendField(Blockly.Msg.TEXT_CHARAT2);\n }\n } else {\n this.appendDummyInput('AT' + n);\n }\n var menu = new Blockly.FieldDropdown(this['WHERE_OPTIONS_' + n],\n function (value) {\n var newAt = (value == 'FROM_START') || (value == 'FROM_END');\n // The 'isAt' variable is available due to this function being a\n // closure.\n if (newAt != isAt) {\n var block = this.sourceBlock_;\n block.updateAt_(n, newAt);\n // This menu has been destroyed and replaced.\n // Update the replacement.\n block.setFieldValue(value, 'WHERE' + n);\n return null;\n }\n return undefined;\n });\n this.getInput('AT' + n)\n .appendField(menu, 'WHERE' + n);\n if (n == 1) {\n this.moveInputBefore('AT1', 'AT2');\n if (this.getInput('ORDINAL1')) {\n this.moveInputBefore('ORDINAL1', 'AT2');\n }\n }\n // if (Blockly.Msg.LISTS_GET_SUBLIST_TAIL) {\n // this.moveInputBefore('TAIL', null);\n // }\n }\n};\n\nexport const text_substring = {\n /**\n * Block for getting sublist.\n * @this Blockly.Block\n */\n init: function () {\n this.setHelpUrl(Blockly.Msg.LISTS_GET_SUBLIST_HELPURL);\n this.setColour(TEXTS_HUE);\n this.appendValueInput(\"VAR\")\n .setCheck(String)\n this.appendValueInput('AT1')\n .appendField(Blockly.Msg.LISTS_GET_INDEX_GET + \" \" + Blockly.Msg.LISTS_GET_INDEX_FROM_START);\n this.appendValueInput('AT2')\n .appendField(Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_START);\n this.appendDummyInput()\n .appendField(Blockly.Msg.TEXT_CHARAT2);\n this.setInputsInline(true);\n this.setOutput(true, ['List', String]);\n this.setTooltip(Blockly.Msg._GET_TEXT_SUBLIST_TOOLTIP);\n }\n}\n\nexport const text_equals_starts_ends = {\n init: function () {\n var TEXT_DOWHAT = [\n [Blockly.Msg.MIXLY_EQUALS, '==='],\n [Blockly.Msg.MIXLY_STARTSWITH, 'startswith'],\n [Blockly.Msg.MIXLY_ENDSWITH, 'endswith']\n ];\n this.setColour(TEXTS_HUE);\n this.appendValueInput(\"STR1\")\n .setCheck(String);\n this.appendValueInput(\"STR2\")\n .appendField(new Blockly.FieldDropdown(TEXT_DOWHAT), 'DOWHAT')\n .setCheck(String);\n this.setOutput(true, [Boolean, Number]);\n this.setInputsInline(true);\n }\n}\n\nexport const text_compare_to = {\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendValueInput(\"STR1\")\n .setCheck(String);\n this.appendValueInput(\"STR2\")\n .appendField(Blockly.Msg.MIXLY_COMPARETO)\n .setCheck(String);\n this.setOutput(true, Number);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXLY_COMPARETO_HELP);\n }\n}\n\nexport const text_capital = {\n init: function () {\n var TEXT_CAPITAL = [\n [Blockly.Msg.TEXT_UPPER, 'upper'],\n [Blockly.Msg.TEXT_TITLE, 'title'],\n [Blockly.Msg.TEXT_CAPITALIZE, 'capitalize'],\n [Blockly.Msg.TEXT_SWAPCASE, 'swapcase'],\n [Blockly.Msg.TEXT_LOWER, 'lower']\n ];\n this.setColour(TEXTS_HUE);\n this.appendValueInput(\"VAR\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown(TEXT_CAPITAL), 'CAPITAL')\n .setCheck(String);\n this.setOutput(true, String);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('CAPITAL');\n var TOOLTIPS = {\n 'upper': Blockly.Msg.MIXLY_MIXPY_TEXT_UPPER_TOOLTIP,\n 'title': Blockly.Msg.MIXLY_MIXPY_TEXT_TITLE_TOOLTIP,\n 'swapcase': Blockly.Msg.MIXLY_MIXPY_TEXT_SWAPCASE_TOOLTIP,\n 'capitalize': Blockly.Msg.MIXLY_MIXPY_TEXT_CAPITALIZE_TOOLTIP,\n 'lower': Blockly.Msg.MIXLY_MIXPY_TEXT_LOWER_TOOLTIP\n };\n return TOOLTIPS[mode];\n });\n }\n}\n\nexport const text_center = {\n init: function () {\n var TEXT_CENTER = [\n [Blockly.Msg.TEXT_LJUST, 'ljust'],\n [Blockly.Msg.TEXT_CENTER, 'center'],\n [Blockly.Msg.TEXT_RJUST, 'rjust']\n ];\n this.setColour(TEXTS_HUE);\n this.appendValueInput(\"VAR\")\n .appendField(new Blockly.FieldDropdown(TEXT_CENTER), 'CENTER')\n .setCheck(String);\n this.appendValueInput(\"WID\")\n .appendField(Blockly.Msg.MIXLY_WIDTH)\n .setCheck(Number);\n this.appendValueInput(\"Symbol\")\n .appendField(Blockly.Msg.MIXLY_RECT_Fill)\n .setCheck(String);\n this.setInputsInline(true);\n this.setOutput(true, String);\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_TEXT_CENTER_TOOLTIP);\n }\n}\n\nexport const text_find = {\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendValueInput(\"VAR\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .setCheck(String);\n this.appendValueInput(\"STR\")\n .appendField(Blockly.Msg.MIXLY_MID + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_CHARACTER)\n .setCheck(String);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_LIST_INDEX);\n this.setInputsInline(true);\n this.setOutput(true, String);\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_TEXT_FIND_TOOLTIP);\n }\n}\n\nexport const text_join_seq = {\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendValueInput(\"VAR\")\n .appendField(Blockly.Msg.MIXLY_PYTHON_TEXT_JOIN_SEQ_USE_STR)\n .setCheck(String);\n this.appendValueInput('LIST')\n .appendField(Blockly.Msg.MIXLY_PYTHON_TEXT_JOIN_SEQ_SEQ)\n .setCheck('List', 'Tuple', 'Set', 'Dict');\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PYTHON_TEXT_JOIN_SEQ_GET_STR);\n this.setInputsInline(true);\n this.setOutput(true, String);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_TEXT_JOIN_SEQ_TOOLTIP);\n }\n}\n\nexport const text_replace = {\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendValueInput(\"VAR\")\n .setCheck(String);\n this.appendValueInput(\"STR1\")\n .appendField(Blockly.Msg.MIXLY_MIXPY_REPLACE)\n .setCheck(String);\n this.appendValueInput(\"STR2\")\n .appendField(Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)\n .setCheck(String);\n this.setInputsInline(true);\n this.setOutput(true, String);\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_TEXT_REPLACE_TOOLTIP);\n }\n}\n\nexport const text_split = {\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendValueInput(\"VAR\");\n this.appendValueInput(\"VAL\")\n .appendField(Blockly.Msg.LIST_SPLIT_AS);\n this.appendDummyInput('')\n .appendField(Blockly.Msg.LIST_SPLIT);\n this.setOutput(true, \"List\");\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_TEXT_SPLIT_TOOLTIP);\n this.setInputsInline(true);\n }\n}\n\nexport const text_strip = {\n init: function () {\n var STRIP =\n [[Blockly.Msg.TEXT_TRIM_BOTH, 'strip'], [Blockly.Msg.TEXT_TRIM_LEFT, 'lstrip'], [Blockly.Msg.TEXT_TRIM_RIGHT, 'rstrip']];\n this.setColour(TEXTS_HUE);\n this.appendValueInput('VAR')\n this.appendDummyInput('')\n .appendField(Blockly.Msg.TEXT_STRIM);\n this.appendDummyInput('')\n .appendField(new Blockly.FieldDropdown(STRIP), 'TOWHAT');\n this.appendDummyInput('')\n .appendField(Blockly.Msg.TEXT_BLANK);\n this.setOutput(true, String);\n this.setInputsInline(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('TOWHAT');\n var TOOLTIPS = {\n 'strip': Blockly.Msg.TEXT_TRIM_BOTH_TOOLTIP,\n 'lstrip': Blockly.Msg.TEXT_TRIM_LEFT_TOOLTIP,\n 'rstrip': Blockly.Msg.TEXT_TRIM_RIGHT_TOOLTIP\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const text_format = {\n /**\n * Block for creating a list with any number of elements of any type.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_FORMAT)\n //don't need to specify the data type in Python\n // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'Array'], [Blockly.Msg.LANG_MATH_STRING, 'Array'], [Blockly.Msg.LANG_MATH_BOOLEAN, 'Array']]), 'TYPE')\n // .appendField(' ')\n this.appendDummyInput(\"\")\n .appendField(new Blockly.FieldTextInput('str'), 'VAR');\n this.itemCount_ = 1;\n this.updateShape_();\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setInputsInline(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['text_create_with_item'], this));\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_TEXT_FORMAT_TOOLTIP);\n },\n /**\n * Create XML to represent list inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n /**\n * Parse XML to restore the list inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('text_create_with_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('text_create_with_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i).connection.connect(connections[i]);\n }\n }\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @private\n * @this Blockly.Block\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n var i = 0;\n while (this.getInput('ADD' + i)) {\n this.removeInput('ADD' + i);\n i++;\n }\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.appendDummyInput('EMPTY')\n .appendField();\n } else {\n for (var i = 0; i < this.itemCount_; i++) {\n var input = this.appendValueInput('ADD' + i);\n if (i == 0) {\n input.appendField(Blockly.Msg.PROCEDURES_BEFORE_PARAMS);\n }\n }\n }\n },\n getVars: function () {\n if (this.getFieldValue('VAR') != null) {\n if ((this.getFieldValue('VAR').indexOf(\"'\") == -1) && (this.getFieldValue('VAR').indexOf('\"') == -1)) {\n return [this.getFieldValue('VAR')];\n }\n return [];\n }\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n\n }\n};\n\nexport const text_create_with_container = {\n /**\n * Mutator block for list container.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TITLE);\n this.appendStatementInput('STACK');\n this.setTooltip(Blockly.Msg.TUPLE_CREATE_WITH_CONTAINER_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const text_create_with_item = {\n /**\n * Mutator bolck for adding items.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.blockpy_SET_VARIABLES_NAME);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.TUPLE_CREATE_WITH_ITEM_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const text_substring3 = text_substring\nexport const text_compareTo = text_compare_to\nexport const text_char_at3 = text_char_at\n\nexport const text_format_noreturn = {\n /**\n * Block for creating a list with any number of elements of any type.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROPYTHON_FORMAT)\n //don't need to specify the data type in Python\n // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'Array'], [Blockly.Msg.LANG_MATH_STRING, 'Array'], [Blockly.Msg.LANG_MATH_BOOLEAN, 'Array']]), 'TYPE')\n // .appendField(' ')\n this.appendValueInput(\"VAR\")\n .setCheck(String);\n this.itemCount_ = 1;\n this.updateShape_();\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setInputsInline(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['text_create_with_item'], this));\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_TEXT_FORMAT_TOOLTIP);\n },\n /**\n * Create XML to represent list inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n /**\n * Parse XML to restore the list inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('text_create_with_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('text_create_with_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i).connection.connect(connections[i]);\n }\n }\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @private\n * @this Blockly.Block\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n var i = 0;\n while (this.getInput('ADD' + i)) {\n this.removeInput('ADD' + i);\n i++;\n }\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.appendDummyInput('EMPTY')\n .appendField();\n } else {\n for (var i = 0; i < this.itemCount_; i++) {\n var input = this.appendValueInput('ADD' + i);\n if (i == 0) {\n input.appendField(Blockly.Msg.PROCEDURES_BEFORE_PARAMS);\n }\n }\n }\n }\n};\n\n\n\nexport const text_encode = {\n init: function () {\n this.setColour(TEXTS_HUE);\n var encode_decode =\n [[Blockly.Msg.MIXPY_TEXT_ENCODE, 'encode'], [Blockly.Msg.MIXPY_TEXT_DECODE, 'decode']];\n var code =\n [['ASCII', 'ASCII'], ['gb2312', 'gb2312'], ['gbk', 'gbk'], ['utf-8', 'utf-8'], ['utf-16', 'utf-16'], ['utf-32', 'utf-32']];\n this.appendDummyInput()\n .appendField(new Blockly.FieldDropdown(code), 'CODE')\n .appendField(' ')\n this.appendValueInput(\"VAR\")\n .appendField(new Blockly.FieldDropdown(encode_decode), 'DIR')\n .appendField(Blockly.Msg.LANG_MATH_STRING);\n this.setOutput(true, String);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXPY_TEXT_ENCODE_DECODE_TOOLTIP);\n\n }\n};\n\n\nexport const text_eval = {\n init: function () {\n\n this.setColour(TEXTS_HUE);\n this.appendValueInput('VAR')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_PYTHON_TEXT_EVAL);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PYTHON_TEXT_EVAL_RESULT);\n this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_TEXT_EVAL_TOOLTIP);\n }\n};\n\nexport const os_system = {\n init: function () {\n this.setColour(TEXTS_HUE);\n this.appendValueInput('VAR')\n .setCheck(String)\n .appendField(Blockly.Msg.MIXLY_PYTHON_OS_SYSTEM);\n this.setInputsInline(true);\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_OS_SYSTEM_TOOLTIP);\n }\n};","import * as Blockly from 'blockly/core';\n\nconst TUPLE_HUE = 195; //'#5ec73d'//195;\n\nexport const tuple_create_with = {\n /**\n * Block for creating a list with any number of elements of any type.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(TUPLE_HUE);\n this.appendDummyInput(\"\")\n //don't need to specify the data type in Python\n // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'Array'], [Blockly.Msg.LANG_MATH_STRING, 'Array'], [Blockly.Msg.LANG_MATH_BOOLEAN, 'Array']]), 'TYPE')\n // .appendField(' ')\n .appendField(new Blockly.FieldTextInput('mytup'), 'VAR');\n this.itemCount_ = 3;\n this.updateShape_();\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['tuple_create_with_item'], this));\n this.setTooltip(Blockly.Msg.TUPLE_CREATE_WITH_TOOLTIP);\n },\n /**\n * Create XML to represent list inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n /**\n * Parse XML to restore the list inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('tuple_create_with_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('tuple_create_with_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i).connection.connect(connections[i]);\n }\n }\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @private\n * @this Blockly.Block\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n var i = 0;\n while (this.getInput('ADD' + i)) {\n this.removeInput('ADD' + i);\n i++;\n }\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.appendDummyInput('EMPTY')\n .appendField(Blockly.Msg.TUPLE_CREATE_EMPTY_TITLE);\n } else {\n for (var i = 0; i < this.itemCount_; i++) {\n var input = this.appendValueInput('ADD' + i);\n if (i == 0) {\n input.appendField(Blockly.Msg.TUPLE_CREATE_WITH_INPUT_WITH);\n }\n }\n }\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n};\n\nexport const tuple_create_with_container = {\n /**\n * Mutator block for list container.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(TUPLE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.TUPLE_CREATE_WITH_CONTAINER_TITLE_ADD);\n this.appendStatementInput('STACK');\n this.setTooltip(Blockly.Msg.TUPLE_CREATE_WITH_CONTAINER_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const tuple_create_with_item = {\n /**\n * Mutator bolck for adding items.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(TUPLE_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.blockpy_SET_VARIABLES_NAME);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.TUPLE_CREATE_WITH_ITEM_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const tuple_create_with_text2 = {\n init: function () {\n this.setColour(TUPLE_HUE);\n this.appendDummyInput(\"\")\n //don't need to specify the data type in Python\n // .appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'Array']]), 'TYPE')\n // .appendField(' ')\n // .appendField(Blockly.Msg.blockpy_MIXLY_TUPLE_CREATE)\n .appendField(new Blockly.FieldTextInput('mytup'), 'VAR')\n //.appendField(new Blockly.FieldTextInput('3',Blockly.FieldTextInput.math_number_validator), 'SIZE')\n // .appendField(Blockly.Msg.MIXLY_MAKELISTFROM)\n // .appendField(this.newQuote_(true))\n .appendField(' = (')\n .appendField(new Blockly.FieldTextInput('0,0,0'), 'TEXT')\n .appendField(')');\n // .appendField(this.newQuote_(false))\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXPY_TOOLTIP_TUPLE_CREATE_WITH_TEXT);\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n // newQuote_: function(open) {\n // if (open == this.RTL) {\n // var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==';\n // } else {\n // var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC';\n // }\n // return new Blockly.FieldImage(file, 12, 12, '\"');\n // }\n}\n\nexport const tuple_create_with_text_return = {\n init: function () {\n this.setColour(TUPLE_HUE);\n this.appendDummyInput(\"\")\n .appendField('(')\n .appendField(new Blockly.FieldTextInput('0,0,0'), 'TEXT')\n .appendField(')');\n // .appendField(this.newQuote_(false))\n this.setOutput(true);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.MIXPY_TOOLTIP_TUPLE_CREATE_WITH_TEXT);\n // },\n // getVars: function() {\n // return [this.getFieldValue('VAR')];\n // },\n // renameVar: function(oldName, newName) {\n // if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n // this.setTitleValue(newName, 'VAR');\n // }\n }\n // newQuote_: function(open) {\n // if (open == this.RTL) {\n // var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==';\n // } else {\n // var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC';\n // }\n // return new Blockly.FieldImage(file, 12, 12, '\"');\n // }\n}\n\nexport const tuple_getIndex = {\n init: function () {\n this.setColour(TUPLE_HUE);\n this.setOutput(true);\n this.appendValueInput('TUP')\n .setCheck('Tuple')\n this.appendValueInput('AT')\n .setCheck(Number)\n\n .appendField(Blockly.Msg.LANG_LISTS_GET_INDEX1);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.LANG_LISTS_GET_INDEX2);\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.TUPLE_GET_INDEX_TOOLTIP);\n }\n};\n\nexport const tuple_length = {\n /**\n * Block for list length.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(TUPLE_HUE);\n this.appendValueInput('TUP');\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_LENGTH);\n\n this.setTooltip(Blockly.Msg.TUPLE_LENGTH_TOOLTIP);\n this.setOutput(true, Number);\n }\n};\n\nexport const tuple_del = {\n /**\n * Block for list length.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(TUPLE_HUE);\n this.appendValueInput('TUP')\n .setCheck('Tuple')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.TUPLE_DEL);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.TUPLE_DEL_TOOLTIP);\n }\n};\n\nexport const tuple_join = {\n /**\n * Block for list length.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(TUPLE_HUE);\n this.appendValueInput('TUP1')\n .setCheck('Tuple')\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.TUPLE_JOIN)\n this.appendValueInput('TUP2')\n .setCheck('Tuple')\n this.setInputsInline(true);\n this.setTooltip(Blockly.Msg.TUPLE_JOIN_TOOLTIP);\n this.setOutput(true, \"Tuple\");\n }\n};\n\n\nexport const tuple_max = {\n init: function () {\n this.appendValueInput('TUP')\n .setCheck('Tuple')\n var max_min =\n [[Blockly.Msg.blockpy_TUPLE_MAX, 'max'], [Blockly.Msg.blockpy_TUPLE_MIN, 'min'], [Blockly.Msg.MATH_ONLIST_OPERATOR_SUM, 'sum']];\n this.setColour(TUPLE_HUE);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET)\n .appendField(new Blockly.FieldDropdown(max_min), 'DIR')\n\n\n this.setInputsInline(true);\n this.setOutput(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('DIR');\n var TOOLTIPS = {\n 'max': Blockly.Msg.MIXLY_TOOLTIP_TUPLE_MAX,\n 'min': Blockly.Msg.MIXLY_TOOLTIP_TUPLE_MIN,\n 'sum': Blockly.Msg.MIXLY_TOOLTIP_TUPLE_SUM\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const tuple_change_to = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_LIST, 'list'],\n [Blockly.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD, 'set']\n ];\n this.setColour(TUPLE_HUE);\n this.appendValueInput('VAR')\n .setCheck(\"Tuple\")\n // .appendField(Blockly.Msg.blockpy_USE_LIST);\n this.appendDummyInput(\"\")\n .appendField(Blockly.Msg.A_TO_B)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setInputsInline(true);\n this.setOutput(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'list': Blockly.Msg.TUPLE_TO_LISTS,\n 'set': Blockly.Msg.TUPLE_TO_SET,\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const tuple_find = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MIXLY_LIST_INDEX, 'INDEX'],\n [Blockly.Msg.MIXLY_LIST_COUNT, 'COUNT']\n ];\n this.setColour(TUPLE_HUE);\n this.appendValueInput('VAR')\n .setCheck('List')\n this.appendValueInput('data')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(Blockly.Msg.HTML_VALUE)\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_DE)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n //.appendField(new Blockly.FieldTextInput('mylist'), 'VAR')\n this.setInputsInline(true);\n this.setOutput(true, Number);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'INDEX': Blockly.Msg.MIXLY_TOOLTIP_TUPLE_FIND_INDEX,\n 'COUNT': Blockly.Msg.MIXLY_TOOLTIP_TUPLE_FIND_COUNT\n\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const tuple_trig = {\n init: function () {\n var OPERATORS = [\n [Blockly.Msg.MIXLY_LIST_LEN, 'LEN'],\n [Blockly.Msg.MATH_ONLIST_OPERATOR_SUM, 'SUM'],\n [Blockly.Msg.MATH_ONLIST_OPERATOR_MAX, 'MAX'],\n [Blockly.Msg.MATH_ONLIST_OPERATOR_MIN, 'MIN'],\n [Blockly.Msg.MATH_ONLIST_OPERATOR_AVERAGE, 'AVERAGE'],\n [Blockly.Msg.MATH_ONLIST_OPERATOR_MEDIAN, 'MEDIAN'],\n [Blockly.Msg.MATH_ONLIST_OPERATOR_MODE, 'MODE'],\n [Blockly.Msg.MATH_ONLIST_OPERATOR_STD_DEV, 'STD_DEV'],\n ];\n //this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);\n this.setColour(TUPLE_HUE);\n this.setOutput(true, Number);\n this.appendValueInput('data')\n .setCheck('List')\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)\n .appendField(new Blockly.FieldDropdown(OPERATORS), 'OP');\n this.setInputsInline(true);\n // Assign 'this' to a variable for use in the tooltip closure below.\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('OP');\n var TOOLTIPS = {\n 'LEN': Blockly.Msg.TUPLE_LENGTH_TOOLTIP,\n 'SUM': Blockly.Msg.MATH_ONLIST_TOOLTIP_TUPLE_SUM,\n 'MAX': Blockly.Msg.MATH_ONLIST_TOOLTIP_TUPLE_MAX,\n 'MIN': Blockly.Msg.MATH_ONLIST_TOOLTIP_TUPLE_MIN,\n 'AVERAGE': Blockly.Msg.MATH_ONLIST_TOOLTIP_TUPLE_AVERAGE,\n 'MEDIAN': Blockly.Msg.MATH_ONLIST_TOOLTIP_TUPLE_MEDIAN,\n 'MODE': Blockly.Msg.MATH_ONLIST_TOOLTIP_TUPLE_MODE,\n 'STD_DEV': Blockly.Msg.MATH_ONLIST_TOOLTIP_TUPLE_STD_DEV\n\n };\n return TOOLTIPS[mode];\n });\n }\n};\n\nexport const tuple_getSublist = {\n /**\n * Block for getting sublist.\n * @this Blockly.Block\n */\n init: function () {\n this['WHERE_OPTIONS_1'] = [\n [Blockly.Msg.LISTS_GET_INDEX_FROM_START, 'FROM_START'],\n [Blockly.Msg.LISTS_GET_INDEX_FROM_END, 'FROM_END'],\n [Blockly.Msg.LISTS_GET_SUBLIST_START_FIRST, 'FIRST']\n ];\n this['WHERE_OPTIONS_2'] = [\n [Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_START, 'FROM_START'],\n [Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_END, 'FROM_END'],\n [Blockly.Msg.LISTS_GET_SUBLIST_END_LAST, 'LAST']\n ];\n this.setHelpUrl(Blockly.Msg.LISTS_GET_SUBLIST_HELPURL);\n this.setColour(TUPLE_HUE);\n this.appendValueInput('LIST')\n .setCheck('List')\n //.appendField(Blockly.Msg.LISTS_GET_SUBLIST_TAIL)\n // if (Blockly.Msg.LISTS_GET_SUBLIST_TAIL) {\n // this.appendDummyInput('TAIL')\n // .appendField(Blockly.Msg.LISTS_GET_SUBLIST_TAIL);\n // }\n this.appendDummyInput('')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);\n this.appendDummyInput('AT1');\n this.appendDummyInput('AT2');\n this.setInputsInline(true);\n this.setOutput(true, 'List');\n this.updateAt_(1, true);\n this.updateAt_(2, true);\n this.setTooltip(Blockly.Msg.PYTHON_TUPLE_GET_SUBLIST_TOOLTIP);\n },\n /**\n * Create XML to represent whether there are 'AT' inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n var isAt1 = this.getInput('AT1').type == Blockly.INPUT_VALUE;\n container.setAttribute('at1', isAt1);\n var isAt2 = this.getInput('AT2').type == Blockly.INPUT_VALUE;\n container.setAttribute('at2', isAt2);\n return container;\n },\n /**\n * Parse XML to restore the 'AT' inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n var isAt1 = (xmlElement.getAttribute('at1') == 'true');\n var isAt2 = (xmlElement.getAttribute('at2') == 'true');\n this.updateAt_(1, isAt1);\n this.updateAt_(2, isAt2);\n },\n /**\n * Create or delete an input for a numeric index.\n * This block has two such inputs, independant of each other.\n * @param {number} n Specify first or second input (1 or 2).\n * @param {boolean} isAt True if the input should exist.\n * @private\n * @this Blockly.Block\n */\n updateAt_: function (n, isAt) {\n // Create or delete an input for the numeric index.\n // Destroy old 'AT' and 'ORDINAL' inputs.\n this.removeInput('AT' + n);\n this.removeInput('ORDINAL' + n, true);\n // Create either a value 'AT' input or a dummy input.\n if (isAt) {\n this.appendValueInput('AT' + n).setCheck(Number);\n if (Blockly.Msg.TEXT_CHARAT_TAIL) {\n this.appendDummyInput('ORDINAL' + n)\n .appendField(Blockly.Msg.TEXT_CHARAT_TAIL);\n }\n } else {\n this.appendDummyInput('AT' + n);\n }\n var menu = new Blockly.FieldDropdown(this['WHERE_OPTIONS_' + n],\n function (value) {\n var newAt = (value == 'FROM_START') || (value == 'FROM_END');\n // The 'isAt' variable is available due to this function being a\n // closure.\n if (newAt != isAt) {\n var block = this.sourceBlock_;\n block.updateAt_(n, newAt);\n // This menu has been destroyed and replaced.\n // Update the replacement.\n block.setFieldValue(value, 'WHERE' + n);\n return null;\n }\n return undefined;\n });\n this.getInput('AT' + n)\n .appendField(menu, 'WHERE' + n);\n if (n == 1) {\n this.moveInputBefore('AT1', 'AT2');\n if (this.getInput('ORDINAL1')) {\n this.moveInputBefore('ORDINAL1', 'AT2');\n }\n }\n // if (Blockly.Msg.LISTS_GET_SUBLIST_TAIL) {\n // this.moveInputBefore('TAIL', null);\n // }\n }\n};\n\nexport const tuple_create_with_noreturn = {\n /**\n * Block for creating a list with any number of elements of any type.\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(TUPLE_HUE);\n this.itemCount_ = 3;\n this.updateShape_();\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setOutput(true, \"Tuple\")\n this.setMutator(new Blockly.icons.MutatorIcon(['tuple_create_with_item'], this));\n this.setTooltip(Blockly.Msg.TUPLE_CREATE_WITH_TOOLTIP);\n },\n /**\n * Create XML to represent list inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n /**\n * Parse XML to restore the list inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('tuple_create_with_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('tuple_create_with_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i).connection.connect(connections[i]);\n }\n }\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @private\n * @this Blockly.Block\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n var i = 0;\n while (this.getInput('ADD' + i)) {\n this.removeInput('ADD' + i);\n i++;\n }\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.appendDummyInput('EMPTY')\n .appendField(Blockly.Msg.TUPLE_CREATE_EMPTY_TITLE);\n } else {\n for (var i = 0; i < this.itemCount_; i++) {\n var input = this.appendValueInput('ADD' + i);\n if (i == 0) {\n input.appendField(Blockly.Msg.TUPLE_CREATE_WITH_INPUT_WITH);\n }\n }\n }\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setTitleValue(newName, 'VAR');\n }\n }\n};\n\nexport const tuple_get_sublist = {\n /**\n * Block for getting sublist.\n * @this Blockly.Block\n */\n init: function () {\n this.setHelpUrl(Blockly.Msg.LISTS_GET_SUBLIST_HELPURL);\n this.setColour(TUPLE_HUE);\n this.appendValueInput('LIST')\n this.appendDummyInput('')\n this.appendValueInput('AT1')\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + \" \" + Blockly.Msg.LISTS_GET_INDEX_FROM_START);\n this.appendValueInput('AT2')\n .appendField(Blockly.Msg.TEXT_CHARAT_TAIL + \" \" + Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_START);\n this.appendDummyInput()\n .appendField(Blockly.Msg.TEXT_CHARAT_TAIL);\n this.setInputsInline(true);\n this.setOutput(true, 'Tuple');\n this.setTooltip(Blockly.Msg.PYTHON_TUPLE_GET_SUBLIST_TOOLTIP);\n }\n}\n\nexport const tuple_get_random_item = {\n init: function () {\n this.setColour(TUPLE_HUE);\n this.appendValueInput(\"TUP\");\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + \" \" + Blockly.Msg.LISTS_GET_INDEX_RANDOM)\n this.setTooltip(Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM);\n this.setOutput(true);\n }\n};\n\nexport const tuple_totuple = {\n init: function () {\n this.setColour(TUPLE_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_TOTUPLE);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_TOOLTIP_TOTUPLE);\n }\n};\n\nexport const tuple_input = {\n init: function () {\n this.setColour(TUPLE_HUE);\n this.appendDummyInput(\"\")\n .appendField('(')\n .appendField(new Blockly.FieldTextInput('0,0,0'),\"CONTENT\")\n .appendField(')');\n this.setOutput(true);\n }\n};","/**\n * @license\n * Visual Blocks Editor\n *\n * Copyright 2012 Google Inc.\n * https://developers.google.com/blockly/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utility blocks for Blockly.\n * @author acbart@vt.edu (Austin Cory Bart)\n */\nimport * as Blockly from 'blockly/core';\n\nconst UTILITY_HUE = 160;\n\nexport const raw_table = {\n // Container.\n init: function () {\n this.setColour(UTILITY_HUE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.appendDummyInput()\n .appendField('Tabular Abstraction:');\n this.appendDummyInput()\n .appendField(new Blockly.FieldTable(''), 'TEXT');\n }\n};\n\nexport const raw_block = {\n // Container.\n init: function () {\n this.setColour(UTILITY_HUE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.appendDummyInput()\n .appendField('Code Block:');\n this.appendDummyInput()\n .appendField(new Blockly.FieldMultilineInput(''), 'TEXT');\n }\n};\n\nexport const raw_expression = {\n // Container.\n init: function () {\n this.setColour(UTILITY_HUE);\n this.appendDummyInput()\n .appendField('Code Expression:');\n this.appendDummyInput()\n .appendField(new Blockly.FieldMultilineInput(''), 'TEXT');\n this.setOutput(true);\n }\n};\n\nexport const raw_empty = {\n // Container.\n init: function () {\n this.setColour(UTILITY_HUE);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.appendValueInput('VALUE')\n .appendField('');\n this.setInputsInline(false);\n }\n};\n\nexport const text_comment = {\n // Text value.\n init: function () {\n this.setColour(UTILITY_HUE);\n this.appendDummyInput()\n .appendTitle('Comment:')\n .appendTitle(new Blockly.FieldTextInput(''), 'TEXT');\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip('This comment will be ignored by Python');\n }\n};\n\nexport const type_check = {\n // Set element at index.\n init: function () {\n this.setColour(UTILITY_HUE);\n this.appendValueInput('VALUE')\n .appendField(Blockly.Msg.TYPE_CHECK);\n this.setInputsInline(false);\n this.setOutput(true, 'Type');\n //this.setPreviousStatement(true);\n //this.setNextStatement(true);\n }\n};\n\n\nexport const text_print_multiple = {\n /**\n * Block for printing multiple things (including nothing)\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(UTILITY_HUE);\n this.itemCount_ = 1;\n this.updateShape_();\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setMutator(new Blockly.icons.MutatorIcon(['text_print_multiple_item'], this));\n this.setTooltip(Blockly.Msg.TEXT_PRINT_TOOLTIP);\n },\n /**\n * Create XML to represent print inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n /**\n * Parse XML to restore the list inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock = Blockly.Block.obtain(workspace,\n 'text_print_multiple_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var x = 0; x < this.itemCount_; x++) {\n var itemBlock = workspace.newBlock('text_print_multiple_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('PRINT' + i).connection.connect(connections[i]);\n }\n }\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n // Store a pointer to any connected child blocks.\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var x = 0;\n while (itemBlock) {\n var input = this.getInput('PRINT' + x);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n x++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @private\n * @this Blockly.Block\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n var i = 0;\n while (this.getInput('PRINT' + i)) {\n this.removeInput('PRINT' + i);\n i++;\n }\n }\n\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.appendDummyInput('EMPTY')\n .appendField(\"print\");\n } else {\n for (var i = 0; i < this.itemCount_; i++) {\n var input = this.appendValueInput('PRINT' + i);\n if (i == 0) {\n input.appendField(\"print\");\n }\n }\n }\n }\n};\n\nexport const text_print_multiple_container = {\n // Container.\n init: function () {\n this.setColour(UTILITY_HUE);\n this.appendDummyInput()\n .appendField('print');\n this.appendStatementInput('STACK');\n this.setTooltip('');\n this.contextMenu = false;\n }\n};\nexport const text_print_multiple_item = {\n // Add items.\n init: function () {\n this.setColour(UTILITY_HUE);\n this.appendDummyInput()\n .appendField('item');\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip('');\n this.contextMenu = false;\n }\n};\n\nexport const function_call = {\n /**\n * Block for printing multiple things (including nothing)\n * @this Blockly.Block\n */\n init: function () {\n this.setColour(UTILITY_HUE);\n this.itemCount_ = 1;\n this.hasReturn_ = false;\n this.appendDummyInput()\n .appendField(new Blockly.FieldTextInput(\"str\"), 'NAME');\n this.updateShape_();\n this.setMutator(new Blockly.icons.MutatorIcon(['function_call_item'], this));\n this.setTooltip(\"Can be used to call any function\");\n },\n /**\n * Create XML to represent print inputs.\n * @return {Element} XML storage element.\n * @this Blockly.Block\n */\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n container.setAttribute('hasReturn', this.hasReturn_ ? \"TRUE\" : \"FALSE\");\n return container;\n },\n /**\n * Parse XML to restore the list inputs.\n * @param {!Element} xmlElement XML storage element.\n * @this Blockly.Block\n */\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.hasReturn_ = xmlElement.getAttribute('hasReturn') === \"TRUE\";\n this.updateShape_();\n },\n /**\n * Populate the mutator's dialog with this block's components.\n * @param {!Blockly.Workspace} workspace Mutator's workspace.\n * @return {!Blockly.Block} Root block in mutator.\n * @this Blockly.Block\n */\n decompose: function (workspace) {\n var containerBlock = Blockly.Block.obtain(workspace,\n 'function_call_container');\n containerBlock.initSvg();\n\n containerBlock.setFieldValue(this.hasStatements_ ? 'TRUE' : 'FALSE',\n 'RETURN');\n\n var connection = containerBlock.getInput('STACK').connection;\n for (var x = 0; x < this.itemCount_; x++) {\n var itemBlock = workspace.newBlock('function_call_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n /**\n * Notification that the procedure's return state has changed.\n * @param {boolean} returnState New return state\n * @this Blockly.Block\n */\n setReturn: function (returnState) {\n this.unplug(true, true);\n this.setOutput(returnState);\n this.setPreviousStatement(!returnState);\n this.setNextStatement(!returnState);\n if (this.rendered) {\n this.render();\n }\n },\n /**\n * Reconfigure this block based on the mutator dialog's components.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n\n this.hasReturn_ = containerBlock.getFieldValue(\"RETURN\") === \"TRUE\";\n\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ARGUMENT' + i).connection.connect(connections[i]);\n }\n }\n },\n /**\n * Store pointers to any connected child blocks.\n * @param {!Blockly.Block} containerBlock Root block in mutator.\n * @this Blockly.Block\n */\n saveConnections: function (containerBlock) {\n // Store a pointer to any connected child blocks.\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var x = 0;\n while (itemBlock) {\n var input = this.getInput('ARGUMENT' + x);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n x++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n /**\n * Modify this block to have the correct number of inputs.\n * @private\n * @this Blockly.Block\n */\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n var i = 0;\n while (this.getInput('ARGUMENT' + i)) {\n this.removeInput('ARGUMENT' + i);\n i++;\n }\n }\n\n // Rebuild block.\n for (var i = 0; i < this.itemCount_; i++) {\n this.appendValueInput('ARGUMENT' + i);\n }\n\n // Set whether returns anything\n this.setReturn(this.hasReturn_);\n }\n};\n\nexport const function_call_container = {\n // Container.\n init: function () {\n this.setColour(UTILITY_HUE);\n this.appendDummyInput()\n .appendField('Arguments');\n this.appendStatementInput('STACK');\n this.appendDummyInput()\n .setAlign(Blockly.inputs.Align.RIGHT)\n .appendField('has return')\n .appendField(new Blockly.FieldCheckbox('TRUE'),\n 'RETURN');\n this.setTooltip('');\n this.contextMenu = false;\n }\n};\nexport const function_call_item = {\n // Add items.\n init: function () {\n this.setColour(UTILITY_HUE);\n this.appendDummyInput()\n .appendField('argument');\n this.setInputsInline(true);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip('');\n this.contextMenu = false;\n }\n};\n\nexport const attribute_access = {\n init: function () {\n this.appendValueInput(\"MODULE\")\n .setCheck(null);\n this.appendValueInput(\"NAME\")\n .setCheck(null)\n .appendField(\".\");\n this.setInputsInline(true);\n this.setOutput(true, null);\n this.setColour(230);\n this.setTooltip('');\n this.setHelpUrl('');\n }\n};\n","import * as Blockly from 'blockly/core';\nimport Names from '../others/names';\n\nconst VARIABLES_HUE = 330//'#af5180'//330;\n\n// ************************************************************************\n// THIS SECTION IS INSERTED INTO BLOCKLY BY BLOCKLYDUINO.\n// export const variables_declare = {\n// // Variable setter.\n// init: function() {\n// this.setColour(VARIABLES_HUE);\n// this.appendValueInput('VALUE', null)\n// .appendField(Blockly.Msg.MIXLY_DECLARE)\n// .appendField(new Blockly.FieldTextInput(''), 'VAR')\n// //.appendField(Blockly.Msg.MIXLY_AS)\n// //.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_NUMBER, 'number'], [Blockly.Msg.LANG_MATH_STRING, 'string'], [Blockly.Msg.LANG_MATH_BOOLEAN, 'boolean']]), 'TYPE')\n// \t .appendField(Blockly.Msg.MIXLY_VALUE);\n// this.setPreviousStatement(true);\n// this.setNextStatement(true);\n// this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_VARIABLES_DECLARE);\n// },\n// getVars: function() {\n// return [this.getFieldValue('VAR')];\n// },\n// renameVar: function(oldName, newName) {\n// if (Names.equals(oldName, this.getFieldValue('VAR'))) {\n// this.setTitleValue(newName, 'VAR');\n// }\n// }\n// };\n// ************************************************************************\n\nexport const variables_get = {\n init: function () {\n this.setColour(VARIABLES_HUE);\n this.appendDummyInput()\n .appendField(new Blockly.FieldTextInput(''), 'VAR')\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.VARIABLES_GET_TOOLTIP);\n },\n getVars: function () {\n return [this.getFieldValue('VAR')];\n },\n renameVar: function (oldName, newName) {\n if (Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setFieldValue(newName, 'VAR');\n }\n }/*,\n onchange: function() {\n\t var varName = Blockly.Arduino.variableDB_.getName(this.getFieldValue('VAR'),Blockly.Variables.NAME_TYPE);\n\t if(Blockly.Arduino.definitions_['var_declare'+varName]){\n\t\t this.setWarningText(null);\n\t }else{\n\t\t this.setWarningText(Blockly.Msg.MIXLY_WARNING_NOT_DECLARE);\n\t }\n }*/\n};\n\n// export const variables_set = {\n// init: function() {\n// this.setColour(VARIABLES_HUE);\n// this.appendValueInput('VALUE')\n// .appendField(new Blockly.FieldTextInput(''), 'VAR')\n// \t\t.appendField(Blockly.Msg.MIXLY_VALUE2);\n// this.setPreviousStatement(true);\n// this.setNextStatement(true);\n// this.setTooltip(Blockly.Msg.VARIABLES_SET_TOOLTIP);\n// },\n// getVars: function() {\n// return [this.getFieldValue('VAR')];\n// },\n// renameVar: function(oldName, newName) {\n// if (Names.equals(oldName, this.getFieldValue('VAR'))) {\n// this.setFieldValue(newName, 'VAR');\n// }\n// }/*,\n// onchange: function() {\n// \t var varName = Blockly.Arduino.variableDB_.getName(this.getFieldValue('VAR'),Blockly.Variables.NAME_TYPE);\n// \t if(Blockly.Arduino.definitions_['var_declare'+varName]){\n// \t\t this.setWarningText(null);\n// \t }else{\n// \t\t this.setWarningText(Blockly.Msg.MIXLY_WARNING_NOT_DECLARE);\n// \t }\n// }*/\n// };\nexport const variables_set = {\n init: function () {\n this.setColour(VARIABLES_HUE);\n this.appendValueInput('VALUE')\n .appendField(new Blockly.FieldTextInput(''), 'VAR')\n .appendField(Blockly.Msg.MIXLY_VALUE2);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.VARIABLES_SET_TOOLTIP);\n },\n getVars: function () {\n var varValue = this.getFieldValue('VAR');\n if (varValue == null) {\n return [];\n }\n return varValue.split(\",\");\n },\n renameVar: function (oldName, newName) {\n if (Names.equals(oldName, this.getFieldValue('VAR'))) {\n this.setFieldValue(newName, 'VAR');\n }\n }\n};\n/**\n * Block for basic data type change.\n * @this Blockly.Block\n */\nexport const variables_change = {\n init: function () {\n this.setColour(VARIABLES_HUE);\n var DATATYPES =\n [\n [Blockly.Msg.LANG_MATH_INT, \"int\"],\n [Blockly.Msg.LANG_MATH_FLOAT, \"float\"],\n [Blockly.Msg.LANG_MATH_BOOLEAN, \"bool\"],\n // [Blockly.Msg.MIXLY_MICROPYTHON_TYPE_COMPLEX, \"complex\"],\n [Blockly.Msg.LANG_MATH_STRING, \"str\"],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_LIST, \"list\"],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_TUPLE, \"tuple\"],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT, \"dict\"],\n [Blockly.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD, \"set\"],\n [Blockly.Msg.LANG_MATH_BYTE, \"bytes\"]\n ];\n this.appendValueInput('MYVALUE')\n .appendField(new Blockly.FieldDropdown(DATATYPES), 'OP');\n // Assign 'this' to a variable for use in the tooltip closure below.\n this.setOutput(true);\n // this.setInputsInline(true);\n\n }\n};\n\n\nexport const variables_global = {\n init: function () {\n this.setColour(VARIABLES_HUE);\n this.appendValueInput(\"VAR\")\n .appendField(Blockly.Msg.MIXLY_PYTHON_GLOBAL)\n .setCheck(\"var\");\n this.setPreviousStatement(true, null);\n this.setNextStatement(true, null);\n this.setTooltip(Blockly.Msg.TEXT_PRINT_TOOLTIP);\n }\n};\n\n\nexport const controls_type = {\n init: function () {\n this.setColour(VARIABLES_HUE);\n this.appendValueInput(\"DATA\")\n .appendField(Blockly.Msg.MICROBIT_PYTHON_TYPE);\n // this.setInputsInline(true);\n this.setOutput(true);\n this.setTooltip(Blockly.Msg.MICROBIT_PYTHON_TYPE);\n }\n};\n\n\nexport const controls_typeLists = {\n init: function () {\n this.setColour(VARIABLES_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_CONTORL_GET_TYPE)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.LANG_MATH_INT, \"int\"],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_FLOAT, \"float\"],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_STRING, \"str\"],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_LIST, \"list\"],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_TUPLE, \"tuple\"],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT, \"dict\"],\n [Blockly.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD, \"set\"],\n [Blockly.Msg.LANG_MATH_BYTE, \"bytes\"],\n // [Blockly.Msg.MIXLY_MICROBIT_IMAGE,\"image\"],\n [Blockly.Msg.LOGIC_NULL, \"type(None)\"]]), \"type\");\n //整数、浮点数、字符串、列表、元组、字典、集合、图像不太对, unfinished\n this.setInputsInline(true);\n this.setOutput(true);\n var thisBlock = this;\n this.setTooltip(function () {\n var mode = thisBlock.getFieldValue('type');\n var mode0 = Blockly.Msg.MICROBIT_controls_TypeLists;\n var TOOLTIPS = {\n 'int': Blockly.Msg.LANG_MATH_INT,\n 'float': Blockly.Msg.MIXLY_MICROBIT_TYPE_FLOAT,\n 'str': Blockly.Msg.MIXLY_MICROBIT_TYPE_STRING,\n 'list': Blockly.Msg.MIXLY_MICROBIT_TYPE_LIST,\n 'tuple': Blockly.Msg.MIXLY_MICROBIT_TYPE_TUPLE,\n 'dict': Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT,\n 'set': Blockly.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD,\n 'image': Blockly.Msg.MIXLY_MICROBIT_IMAGE,\n 'bytes': Blockly.Msg.LANG_MATH_BYTE,\n 'NoneType': Blockly.Msg.LOGIC_NULL\n };\n return mode0 + TOOLTIPS[mode];\n });\n }\n};\n\nexport const lists_zip = {\n init: function () {\n this.setColour(VARIABLES_HUE);\n\n this.itemCount_ = 2;\n this.updateShape_();\n this.setInputsInline(true);\n this.setPreviousStatement(false);\n this.setNextStatement(false);\n this.setOutput(true, \"List\")\n this.setMutator(new Blockly.icons.MutatorIcon(['lists_zip_item'], this));\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_LISTS_ZIP_TOOLTIP);\n },\n\n mutationToDom: function () {\n var container = document.createElement('mutation');\n container.setAttribute('items', this.itemCount_);\n return container;\n },\n\n domToMutation: function (xmlElement) {\n this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);\n this.updateShape_();\n },\n\n decompose: function (workspace) {\n var containerBlock =\n workspace.newBlock('lists_zip_container');\n containerBlock.initSvg();\n var connection = containerBlock.getInput('STACK').connection;\n for (var i = 0; i < this.itemCount_; i++) {\n var itemBlock = workspace.newBlock('lists_zip_item');\n itemBlock.initSvg();\n connection.connect(itemBlock.previousConnection);\n connection = itemBlock.nextConnection;\n }\n return containerBlock;\n },\n\n compose: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n // Count number of inputs.\n var connections = [];\n var i = 0;\n while (itemBlock) {\n connections[i] = itemBlock.valueConnection_;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n i++;\n }\n this.itemCount_ = i;\n this.updateShape_();\n // Reconnect any child blocks.\n for (var i = 0; i < this.itemCount_; i++) {\n if (connections[i]) {\n this.getInput('ADD' + i).connection.connect(connections[i]);\n }\n }\n },\n\n saveConnections: function (containerBlock) {\n var itemBlock = containerBlock.getInputTargetBlock('STACK');\n var i = 0;\n while (itemBlock) {\n var input = this.getInput('ADD' + i);\n itemBlock.valueConnection_ = input && input.connection.targetConnection;\n i++;\n itemBlock = itemBlock.nextConnection &&\n itemBlock.nextConnection.targetBlock();\n }\n },\n\n updateShape_: function () {\n // Delete everything.\n if (this.getInput('EMPTY')) {\n this.removeInput('EMPTY');\n } else {\n var i = 0;\n while (this.getInput('ADD' + i)) {\n this.removeInput('ADD' + i);\n i++;\n }\n }\n // Rebuild block.\n if (this.itemCount_ == 0) {\n this.appendDummyInput('EMPTY')\n .appendField(Blockly.Msg.MIXLY_PYTHON_LISTS_ZIP);\n } else {\n for (var i = 0; i < this.itemCount_; i++) {\n var input = this.appendValueInput('ADD' + i);\n if (i == 0) {\n input.appendField(Blockly.Msg.MIXLY_PYTHON_LISTS_ZIP);\n }\n }\n }\n }\n};\nexport const lists_zip_container = {\n init: function () {\n this.setColour(VARIABLES_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PYTHON_LISTS_ZIP)\n .appendField('[]');\n this.appendStatementInput('STACK');\n this.setTooltip(Blockly.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_CONTAINER_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const lists_zip_item = {\n init: function () {\n this.setColour(VARIABLES_HUE);\n this.appendDummyInput()\n .appendField(Blockly.Msg.MIXLY_PYTHON_LISTS_ZIP_ITEM);\n this.setPreviousStatement(true);\n this.setNextStatement(true);\n this.setTooltip(Blockly.Msg.MIXLY_PYTHON_LISTS_ZIP_ITEM_TOOLTIP);\n this.contextMenu = false;\n }\n};\n\nexport const unpack_iterable_object = {\n init: function () {\n this.setColour(VARIABLES_HUE);\n this.appendValueInput('VAR')\n .appendField(Blockly.Msg.MIXLY_VARIABLE_UNPACK)\n .appendField(new Blockly.FieldDropdown([\n [Blockly.Msg.MIXLY_PYTHON_LISTS_ZIP_ITEM, '*'],\n [Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT, '**']\n ]), 'TYPE');\n this.setTooltip('');\n this.setOutput(true);\n }\n};","import * as PythonVariablesBlocks from './blocks/variables';\nimport * as PythonControlBlocks from './blocks/control';\nimport * as PythonMathBlocks from './blocks/math';\nimport * as PythonTextBlocks from './blocks/text';\nimport * as PythonListsBlocks from './blocks/lists';\nimport * as PythonDictsBlocks from './blocks/dicts';\nimport * as PythonLogicBlocks from './blocks/logic';\nimport * as PythonStorageBlocks from './blocks/storage';\nimport * as PythonProceduresBlocks from './blocks/procedures';\nimport * as PythonTupleBlocks from './blocks/tuple';\nimport * as PythonSetBlocks from './blocks/set';\nimport * as PythonHtmlBlocks from './blocks/html';\nimport * as PythonUtilityBlocks from './blocks/utility';\n\nimport * as PythonVariablesGenerators from './generators/variables';\nimport * as PythonControlGenerators from './generators/control';\nimport * as PythonMathGenerators from './generators/math';\nimport * as PythonTextGenerators from './generators/text';\nimport * as PythonListsGenerators from './generators/lists';\nimport * as PythonDictsGenerators from './generators/dicts';\nimport * as PythonLogicGenerators from './generators/logic';\nimport * as PythonStorageGenerators from './generators/storage';\nimport * as PythonProceduresGenerators from './generators/procedures';\nimport * as PythonTupleGenerators from './generators/tuple';\nimport * as PythonSetGenerators from './generators/set';\nimport * as PythonHtmlGenerators from './generators/html';\nimport * as PythonUtilityGenerators from './generators/utility';\n\nimport Names from './others/names';\nimport Procedures from './others/procedures';\nimport Variables from './others/variables';\nimport { Python } from './python_generator';\n\nexport {\n PythonVariablesBlocks,\n PythonControlBlocks,\n PythonMathBlocks,\n PythonTextBlocks,\n PythonListsBlocks,\n PythonDictsBlocks,\n PythonLogicBlocks,\n PythonStorageBlocks,\n PythonProceduresBlocks,\n PythonTupleBlocks,\n PythonSetBlocks,\n PythonHtmlBlocks,\n PythonUtilityBlocks,\n PythonVariablesGenerators,\n PythonControlGenerators,\n PythonMathGenerators,\n PythonTextGenerators,\n PythonListsGenerators,\n PythonDictsGenerators,\n PythonLogicGenerators,\n PythonStorageGenerators,\n PythonProceduresGenerators,\n PythonTupleGenerators,\n PythonSetGenerators,\n PythonHtmlGenerators,\n PythonUtilityGenerators,\n Names,\n Procedures,\n Variables,\n Python\n};","import * as Blockly from 'blockly/core';\nimport { Boards } from 'mixly';\n\nexport const controls_main = function (a, generator) {\n var d = generator.statementToCode(a, \"DO\"),\n d = generator.addLoopTrap(d, a.id) || generator.PASS;\n return \"if __name__ == '__main__':\\n\" + d;\n}\n\nexport const base_setup = function (_, generator) {\n var branch = generator.statementToCode(this, 'DO');\n branch = branch.replace(/(^\\s*)|(\\s*$)/g, \"\").replace(/\\n {4}/g, '\\n');//去除两端空格\n if (branch.endsWith('\\n')) {\n generator.setups_['setup_setup'] = branch;\n }\n else {\n generator.setups_['setup_setup'] = branch + '\\n';\n }\n return '';\n}\n\n// ok\nexport const controls_if = function (a, generator) {\n var b = 0,\n c = \"\",\n d,\n e;\n do\n e = generator.valueToCode(a, \"IF\" + b, generator.ORDER_NONE) || \"False\", d = generator.statementToCode(a, \"DO\" + b) || generator.PASS, c += (0 == b ? \"if \" : \"elif \") + e + \":\\n\" + d, ++b;\n while (a.getInput(\"IF\" + b));\n a.getInput(\"ELSE\") && (d = generator.statementToCode(a, \"ELSE\") || generator.PASS, c += \"else:\\n\" + d);\n return c\n}\n\nexport const controls_try_finally = function (_, generator) {\n var n = 1;\n var argument = generator.valueToCode(this, 'IF' + n,\n generator.ORDER_NONE) || 'null';\n var branch = '';\n var t = generator.statementToCode(this, 'try') || ' pass\\n';\n var code = 'try:\\n' + t;\n for (n = 1; n <= this.elseifCount_; n++) {\n argument = generator.valueToCode(this, 'IF' + n,\n generator.ORDER_NONE) || '';\n if (argument !== '')\n argument = ' ' + argument\n branch = generator.statementToCode(this, 'DO' + n) || ' pass\\n';\n code += 'except' + argument + ': \\n' + branch;\n }\n if (this.elseCount_) {\n branch = generator.statementToCode(this, 'ELSE') || ' pass\\n';\n code += 'finally:\\n' + branch;\n }\n // code += '}';\n return code;\n}\n\n// ok\nexport const controls_for = function (a, generator) {\n var b = generator.variableDB_.getName(a.getFieldValue(\"VAR\"), Blockly.Variables.NAME_TYPE),\n //var b = generator.valueToCode(a, \"VAR\", generator.ORDER_MEMBER) || \"''\",\n c = generator.valueToCode(a, \"FROM\", generator.ORDER_NONE) || \"0\",\n d = generator.valueToCode(a, \"TO\", generator.ORDER_NONE) || \"0\",\n e = generator.valueToCode(a, \"STEP\", generator.ORDER_NONE) || \"1\",\n f = generator.statementToCode(a, \"DO\"),\n f = generator.addLoopTrap(f, a.id) || generator.PASS,\n g = \"\",\n h = function (_, generator) {\n return generator.provideFunction_(\"upRange\",\n [\"def \" + generator.FUNCTION_NAME_PLACEHOLDER_ + \"(start, stop, step):\", \" while start <= stop:\", \" yield start\", \" start += abs(step)\"])\n },\n k = function (_, generator) {\n return generator.provideFunction_(\"downRange\", [\"def \" + generator.FUNCTION_NAME_PLACEHOLDER_ + \"(start, stop, step):\", \" while start >= stop:\", \" yield start\", \" start -= abs(step)\"])\n }\n a = function (a, b, c) {\n return \"(\" + a + \" <= \" + b + \") and \" + h() + \"(\" + a + \", \" + b + \", \" + c + \") or \" + k() + \"(\" + a + \", \" + b + \", \" + c + \")\"\n }\n if (Blockly.isNumber(c) && Blockly.isNumber(d) &&\n Blockly.isNumber(e))\n c = parseFloat(c), d = parseFloat(d), e = Math.abs(parseFloat(e)), 0 === c % 1 && 0 === d % 1 && 0 === e % 1 ? (c <= d ? (d++, a = 0 == c && 1 == e ? d : c + \", \" + d, 1 != e && (a += \", \" + e)) : (d--, a = c + \", \" + d + \", -\" + e), a = \"range(\" + a + \")\") : (a = c < d ? h() : k(), a += \"(\" + c + \", \" + d + \", \" + e + \")\");\n else {\n var l = function (a, c) {\n if (Blockly.isNumber(a))\n a = parseFloat(a);\n else {\n var d = generator.variableDB_.getDistinctName(b + c, Blockly.Variables.NAME_TYPE);\n g += d + \" = \" + a + \"\\n\";\n a = d\n }\n return a\n },\n c = l(c, \"_start\"),\n d = l(d, \"_end\");\n l(e, \"_inc\");\n a = \"number\" == typeof c && \"number\" == typeof d ? c < d ? h(c, d, e) : k(c, d, e) : a(c, d, e)\n }\n return g += \"for \" + b + \" in \" + a + \":\\n\" + f\n}\n\nexport const controls_for_range = function (block, generator) {\n var iter = generator.variableDB_.getName(block.getFieldValue(\"VAR\"), Blockly.Variables.NAME_TYPE),\n from = generator.valueToCode(block, \"FROM\", generator.ORDER_NONE) || \"0\",\n end = generator.valueToCode(block, \"TO\", generator.ORDER_NONE) || \"0\",\n step = generator.valueToCode(block, \"STEP\", generator.ORDER_NONE) || \"1\",\n dostatement = generator.statementToCode(block, \"DO\"),\n pass = generator.addLoopTrap(dostatement, block.id) || generator.PASS;\n generator.setups_[\"mixly_range\"] = \"def mixly_range(start, stop, step):\\n\" +\n \" for i in range(start, stop + 1, step):\\n\" +\n \" yield i\\n\\n\";\n return \"for \" + iter + \" in mixly_range(\" + from + \", \" + end + \", \" + step + \"):\\n\" + pass;\n}\n\nexport const controls_whileUntil = function (a, generator) {\n var b = \"UNTIL\" == a.getFieldValue(\"MODE\"),\n c = generator.valueToCode(a, \"BOOL\", generator.ORDER_NONE) || \"False\",\n d = generator.statementToCode(a, \"DO\"),\n d = generator.addLoopTrap(d, a.id) || generator.PASS;\n b && (c = \"not \" + c);\n return \"while \" + c + \":\\n\" + d\n}\n\n// export const controls_flow_statements = function (_, generator) {\n// // Flow statements: continue, break.\n// switch (this.getFieldValue('FLOW')) {\n// case 'BREAK':\n// return 'break;\\n';\n// case 'CONTINUE':\n// return 'continue;\\n';\n// }\n// throw 'Unknown flow statement.';\n// }\n\n//ok\nexport const controls_flow_statements = function (a) {\n switch (a.getFieldValue(\"FLOW\")) {\n case \"BREAK\":\n return \"break\\n\";\n case \"CONTINUE\":\n return \"continue\\n\"\n }\n throw \"Unknown flow statement.\";\n}\n\n// ok\nexport const controls_delay = function (_, generator) {\n var delay_time = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ATOMIC) || '1000'\n var code = 'sleep(' + delay_time + ')\\n';\n return code;\n}\n\n// ok\nexport const Panic_with_status_code = function (_, generator) {\n var status_code = generator.valueToCode(this, 'STATUS_CODE', generator.ORDER_ATOMIC) || '1000'\n var code = 'panic(' + status_code + ')\\n';\n return code;\n}\n\n// ok\nexport const controls_millis = function (_, generator) {\n generator.definitions_.import_time = \"import time\";\n var code = 'time.time()';\n return [code, generator.ORDER_ATOMIC];\n}\n\n// ok\nexport const reset = function (_, generator) {\n generator.definitions_['import_microbit'] = 'from microbit import *'\n return 'reset()\\n';\n}\nexport const controls_interrupts = function () {\n return 'interrupts();\\n';\n}\n\nexport const controls_nointerrupts = function () {\n return 'noInterrupts();\\n';\n}\n\n\nexport const controls_forEach = function (block, generator) {\n // For each loop.\n var variable0 = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '\\'\\'';\n var argument0 = generator.valueToCode(block, 'LIST',\n generator.ORDER_RELATIONAL) || '[]';\n var branch = generator.statementToCode(block, 'DO');\n branch = generator.addLoopTrap(branch, block.id) ||\n generator.PASS;\n var code = 'for ' + variable0 + ' in ' + argument0 + ':\\n' + branch;\n return code;\n}\n\nexport const controls_range = function (_, generator) {\n var from = generator.valueToCode(this, \"FROM\", generator.ORDER_NONE) || \"0\";\n var end = generator.valueToCode(this, \"TO\", generator.ORDER_NONE) || \"0\";\n var step = generator.valueToCode(this, \"STEP\", generator.ORDER_NONE) || \"1\";\n var code = \"range(\" + from + \", \" + end + \", \" + step + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const controls_lambda = function (a, generator) {\n var c = generator.valueToCode(a, \"BOOL\", generator.ORDER_NONE) || \"None\",\n d = generator.statementToCode(a, \"DO\") || \"pass\";\n var code = \"lambda \" + c + \": \" + d;\n code = code.replace('\\n', '').replace(' ', '')\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const time_sleep = function (_, generator) {\n generator.definitions_['import_time'] = 'import time';\n var delay_time = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ATOMIC) || '1000'\n var code = 'time.sleep(' + delay_time + ')\\n';\n return code;\n}\n\nexport const controls_pass = function () {\n return 'pass\\n';\n}\n\nexport const controls_thread = function (_, generator) {\n generator.definitions_['import__thread'] = 'import _thread';\n var v = generator.valueToCode(this, \"VAR\", generator.ORDER_NONE) || \"None\";\n var callback = generator.variableDB_.getName(\n generator.valueToCode(this, \"callback\", generator.ORDER_NONE) || \"None\",\n Blockly.Procedures.NAME_TYPE\n );\n var code = \"_thread.start_new_thread(\" + callback + \", \" + v + \")\\n\";\n return code;\n}\n\n// do-while循环\nexport const do_while = function (_, generator) {\n var value_select_data = generator.valueToCode(this, 'select_data', generator.ORDER_NONE) || \"False\";\n var statements_input_data = generator.statementToCode(this, 'input_data')\n var dropdown_type = this.getFieldValue('type');\n if (dropdown_type == 'true') {\n statements_input_data = statements_input_data + ' if (' + value_select_data + '):\\n' + ' break\\n';\n }\n else {\n statements_input_data = statements_input_data + ' if not (' + value_select_data + '):\\n' + ' break\\n';\n }\n statements_input_data = generator.addLoopTrap(statements_input_data, this.id) || generator.PASS;\n //var dropdown_type = this.getFieldValue('type');\n var code = 'while True:\\n' + statements_input_data;\n return code;\n}\n\n// export const base_type = controls_type;\n// export const controls_TypeLists = controls_typeLists;\n\nexport const controls_repeat_ext = function (a, generator) {\n var times = generator.valueToCode(this, 'TIMES', generator.ORDER_ATOMIC);\n var d = generator.statementToCode(a, \"DO\"),\n d = generator.addLoopTrap(d, a.id) || generator.PASS;\n return 'for _my_variable in range(' + times + '):\\n' + d;\n}\n\n\nexport const garbage_collection = function (_, generator) {\n generator.definitions_['import_gc'] = 'import gc';\n var code = 'gc.collect()\\n'\n return code;\n}\n\nexport const get_mem_alloc = function (_, generator) {\n generator.definitions_['import_gc'] = 'import gc';\n var code = 'gc.mem_alloc()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const get_mem_free = function (_, generator) {\n generator.definitions_['import_gc'] = 'import gc';\n var code = 'gc.mem_free()';\n return [code, generator.ORDER_ATOMIC]\n}\n\nexport const get_unique_identifier = function (_, generator) {\n generator.definitions_['import_machine'] = 'import machine';\n var code = 'machine.unique_id()';\n return [code, generator.ORDER_ATOMIC];\n}\n\n// ok\nexport const controls_repeat = controls_repeat_ext;\n\nexport const datetime_fromtimestamp = function(_,generator){\n generator.definitions_['import_datatime'] = 'import datatime';\n var ts = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = 'datatime.datatime.fromtimestamp(' + ts + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const gene_unique_identifier = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n generator.definitions_['import_' + version + 'uuid'] = 'from ' + version + ' import uuid';\n var code = 'uuid()';\n return [code, generator.ORDER_ATOMIC]\n}","/**\n * @license\n * Visual Blocks Language\n *\n * Copyright 2012 Google Inc.\n * https://developers.google.com/blockly/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Generating Python for dictionary blocks.\n * @author acbart@vt.edu (Austin Cory Bart)\n */\nimport * as Blockly from 'blockly/core';\nimport { Boards } from 'mixly';\n\nexport const dicts_create_with = function (_, generator) {\n // Create a list with any number of elements of any type.\n //var dropdown_type = this.getFieldValue('TYPE');\n var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),\n Blockly.Variables.NAME_TYPE);\n //var size=window.parseFloat(this.getFieldValue('SIZE'));\n var code = new Array(this.itemCount_);\n var default_value = '0';\n for (var n = 0; n < this.itemCount_; n++) {\n var keyName = this.getFieldValue('KEY' + n);\n code[n] = keyName + \":\" + (generator.valueToCode(this, 'ADD' + n, generator.ORDER_NONE) || default_value);\n }\n var code = varName + '= ' + '{' + code.join(', ') + '}\\n';\n //var code =''+varName+'['+size+\"]\"+'='+ '{' + code.join(', ') + '}\\n';\n //generator.setups_['setup_lists'+varName] = code;\n return code;\n}\n\nexport const dicts_keys = function (_, generator) {\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName + '.keys()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const dicts_get = function (_, generator) {\n var version = Boards.getSelectedBoardKey().split(':')[2]\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';\n //var size=window.parseFloat(this.getFieldValue('SIZE'));\n var text = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);\n // var text=this.getFieldValue('KEY');\n if (version=='educore'){\n var code = varName+'.get('+text+')';\n }else{\n var code = varName + \"[\" + text + \"]\";\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const dicts_get_default = function (_, generator) {\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';\n //var size=window.parseFloat(this.getFieldValue('SIZE'));\n var text = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);\n var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n // var text=this.getFieldValue('KEY');\n var code = varName + \".get(\" + text + ',' + argument + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const dicts_add_or_change = function (_, generator) {\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || 'mydict';\n var text = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);\n // var text=this.getFieldValue('KEY');\n var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName + \"[\" + text + \"] = \" + argument + '\\n';\n return code;\n}\n\nexport const dicts_delete = function (_, generator) {\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || 'mydict';\n var text = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);\n // var text=this.getFieldValue('KEY');\n var code = \"del \" + varName + \"[\" + text + \"]\\n\";\n return code;\n}\n\nexport const dicts_update = function (_, generator) {\n var varName2 = generator.valueToCode(this, 'DICT2', generator.ORDER_ASSIGNMENT) || '0';\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName + '.update(' + varName2 + ')\\n';\n return code;\n}\n\nexport const dicts_clear = function (_, generator) {\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName + '.clear()\\n';\n return code;\n}\n\nexport const dicts_items = function (_, generator) {\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName + '.items()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const dicts_values = function (_, generator) {\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName + '.values()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const dicts_length = function (_, generator) {\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';\n var code = 'len(' + varName + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const dicts_deldict = function (_, generator) {\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';\n var code = 'del ' + varName + '\\n';\n return code;\n}\n\nexport const dicts_add_change_del = function (block, generator) {\n var dict = generator.valueToCode(block, 'DICT',\n generator.ORDER_MEMBER) || '[]';\n var mode = block.getFieldValue('WHERE');\n var KEY = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);\n // var text=this.getFieldValue('KEY');\n\n switch (mode) {\n case 'INSERT':\n //var at2 = block.getFieldValue('AT2');\n var at2 = generator.valueToCode(this, 'AT2', generator.ORDER_ASSIGNMENT) || '0';\n var code = dict + \"[\" + KEY + \"] = \" + at2 + '\\n'\n break;\n case 'DELETE':\n var code = 'del ' + dict + \"[\" + KEY + \"]\\n\"\n break;\n default:\n throw 'Unhandled option (lists_setIndex2)';\n }\n return code;\n}\n\nexport const dicts_pop = function (_, generator) {\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';\n var text = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);\n // var text=this.getFieldValue('KEY');\n var code = varName + \".pop(\" + text + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const dicts_setdefault = function (_, generator) {\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || 'mydict';\n var text = generator.valueToCode(this, 'KEY', generator.ORDER_ASSIGNMENT);\n // var text=this.getFieldValue('KEY');\n var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName + \".setdefault\" + \"(\" + text + \",\" + argument + \")\\n\";\n return code;\n}\n\nexport const dicts_create_with_noreturn = function (_, generator) {\n // Create a list with any number of elements of any type.\n // var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),\n // Blockly.Variables.NAME_TYPE);\n //var size=window.parseFloat(this.getFieldValue('SIZE'));\n var code = new Array(this.itemCount_);\n var default_value = '0';\n\n for (var n = 0; n < this.itemCount_; n++) {\n var keyName = this.getFieldValue('KEY' + n);\n code[n] = keyName + \":\" + (generator.valueToCode(this, 'ADD' + n, generator.ORDER_NONE) || default_value);\n }\n // if (this.itemCount_!=1){\n // generator.definitions_['var_declare'+varName] = varName+'= '+ '(' + code.join(', ') + ')\\n';}\n // else {\n // generator.definitions_['var_declare'+varName] = varName+'= '+ '(' + code.join(', ') + ',)\\n';}\n if (this.itemCount_ != 1) {\n var code = '{' + code.join(', ') + '}';\n }\n else {\n var code = '{' + code.join(', ') + ',}';\n }\n\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const dicts_todict = function (_, generator) {\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'\n return ['dict(' + str + ')', generator.ORDER_ATOMIC];\n}\n\nexport const dicts_to_json = function (_, generator) {\n generator.definitions_['import_json'] = 'import json';\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';\n var code = 'json.dumps(' + varName + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const json_to_dicts = function (_, generator) {\n generator.definitions_['import_json'] = 'import json';\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || 'null';\n var code = 'json.loads(' + varName + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const dicts_to_to = function (_, generator) {\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';\n var R = generator.valueToCode(this, 'VAR1', generator.ORDER_ASSIGNMENT) || 'null';\n var I = generator.valueToCode(this, 'VAR2', generator.ORDER_ASSIGNMENT) || 'null';\n var L = generator.valueToCode(this, 'VAR3', generator.ORDER_ASSIGNMENT) || 'null';\n var N = generator.valueToCode(this, 'VAR4', generator.ORDER_ASSIGNMENT) || 'null';\n var code = varName + '['+R+']'+'['+I+']'+'['+L+']'+'['+N+']';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const dicts_to_json2 = function (_, generator) {\n generator.definitions_['import_json'] = 'import json';\n generator.definitions_['import_ujson'] = 'import ujson';\n var varName = generator.valueToCode(this, 'DICT', generator.ORDER_ASSIGNMENT) || '0';\n var code = 'ujson.loads(' + varName + ')';\n return [code, generator.ORDER_ATOMIC];\n}","export const html_document = function (_, generator) {\n var head = generator.statementToCode(this, 'HEAD');\n var body = generator.statementToCode(this, 'BODY');\n var code = \"'''\\n\\n\\n\" + '\\t\\n' + head + \"\\n\\n\" + body + \"\\n\\n'''\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const html_title = function (_, generator) {\n var t = generator.statementToCode(this, 'DO');\n var l = this.getFieldValue('LEVEL');\n var code = \"\\n\" + t + \"\\n\";\n return code;\n}\n\nexport const html_head_body = function (_, generator) {\n var t = generator.statementToCode(this, 'DO');\n var l = this.getFieldValue('LEVEL');\n if (l == 'head') {\n var code = \"<\" + l + '>\\n\\t\\n' + t + \"\" + l + \">\\n\";\n }\n else {\n var code = \"<\" + l + \">\\n\" + t + \"\" + l + \">\\n\";\n }\n return code;\n}\n\nexport const html_content = function (_, generator) {\n var t = generator.statementToCode(this, 'DO');\n // var s = generator.valueToCode(this, 'style');\n var l = this.getFieldValue('LEVEL');\n // var code = \"<\" + l + \" \" + s + \" >\\n\" + t + \"\" + l + \">\\n\";\n var code = \"<\" + l + \">\\n\" + t + \"\" + l + \">\\n\";\n return code;\n}\n\nexport const html_content_more = function (_, generator) {\n var t = generator.statementToCode(this, 'DO');\n var s = generator.valueToCode(this, 'style');\n var l = this.getFieldValue('LEVEL');\n var code = \"<\" + l + \" \" + s + \" >\\n\" + t + \"\" + l + \">\\n\";\n return code;\n}\n\nexport const html_style = function (_, generator) {\n var style = generator.statementToCode(this, 'STYLE');\n var code = 'style=\"' + style + '\"';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const html_form = function (_, generator) {\n var tag = this.getFieldValue('LEVEL');\n var name = this.getFieldValue('NAME');\n var value = this.getFieldValue('VALUE');\n var s = generator.valueToCode(this, 'style') || \"\";\n var code = '';\n return code;\n}\n\nexport const html_style_content = function () {\n var key = this.getFieldValue('KEY');\n var value = this.getFieldValue('VALUE');\n var code = key + ':' + value + \";\";\n return code;\n}\n\nexport const html_text = function () {\n var text = this.getFieldValue('TEXT');\n var code = text + \"\\n\";\n return code;\n}","import * as Blockly from 'blockly/core';\n\nexport const lists_get_sublist = function (_, generator) {\n // Get sublist.\n var list = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';\n var at1 = generator.valueToCode(this, 'AT1', generator.ORDER_ADDITIVE);\n var at2 = generator.valueToCode(this, 'AT2', generator.ORDER_ADDITIVE);\n var code = list + '[' + at1 + ' : ' + at2 + ']';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const lists_2d_get_data_with_col_row = function (_, generator) {\n var value_LIST = generator.valueToCode(this, 'LIST', generator.ORDER_ATOMIC) || 'mylist';\n var value_row = generator.valueToCode(this, 'row', generator.ORDER_ATOMIC) || 0;\n var value_col = generator.valueToCode(this, 'col', generator.ORDER_ATOMIC) || 0;\n var code = value_LIST + '[' + value_row + ',' + value_col + ']';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const lists_2d_get_col_row_data = function (_, generator) {\n var value_LIST = generator.valueToCode(this, 'LIST', generator.ORDER_ATOMIC) || 'mylist';\n var value_row_start = generator.valueToCode(this, 'row_start', generator.ORDER_ATOMIC) || 0;\n var value_row_end = generator.valueToCode(this, 'row_end', generator.ORDER_ATOMIC) || 1;\n var value_col_start = generator.valueToCode(this, 'col_start', generator.ORDER_ATOMIC) || 0;\n var value_col_end = generator.valueToCode(this, 'col_end', generator.ORDER_ATOMIC) || 1;\n var code = value_LIST + '[' + value_row_start + ' : ' + value_row_end + ',' + value_col_start + ' : ' + value_col_end + ']';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const lists_create_with = function (_, generator) {\n // Create a list with any number of elements of any type.\n var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),\n Blockly.Variables.NAME_TYPE);\n //var size=window.parseFloat(this.getFieldValue('SIZE'));\n var code = new Array(this.itemCount_);\n var default_value = '0';\n for (var n = 0; n < this.itemCount_; n++) {\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || default_value;\n }\n //generator.setups_['var_declare'+varName] = varName+' = '+ '[' + code.join(', ') + ']\\n';\n var code = varName + ' = ' + '[' + code.join(', ') + ']\\n';\n return code;\n}\n\nexport const lists_create_with_text = function (_, generator) {\n var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),\n Blockly.Variables.NAME_TYPE);\n //var size=window.parseFloat(this.getFieldValue('SIZE'));\n var text = this.getFieldValue('TEXT');\n // generator.setups_['var_declare'+varName] = varName+' = '+ '[' + text + ']\\n';\n var code = varName + ' = ' + '[' + text + ']\\n';\n return code;\n}\n\nexport const lists_get_index = function (_, generator) {\n // Indexing into a list is the same as indexing into a string.\n var list = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';\n var argument0 = generator.valueToCode(this, 'AT', generator.ORDER_ADDITIVE) || 0;\n var code = list + '[' + argument0 + ']';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const lists_set_index = function (_, generator) {\n // Set element at index.\n var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';\n var argument0 = generator.valueToCode(this, 'AT',\n generator.ORDER_ADDITIVE) || '0';\n var argument2 = generator.valueToCode(this, 'TO',\n generator.ORDER_ASSIGNMENT) || '0';\n // Blockly uses one-based indicies.\n return varName + '[' + argument0 + '] = ' + argument2 + '\\n';\n}\n\nexport const lists_append_extend = function (_, generator) {\n var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT) || '0';\n var argument = generator.valueToCode(this, 'DATA', generator.ORDER_ASSIGNMENT) || '0';\n var op = this.getFieldValue('OP');\n var code = varName + '.' + op + '(' + argument + ')\\n';\n return code;\n}\n\nexport const lists_get_random_item = function (_, generator) {\n generator.definitions_['import_random'] = 'import random';\n var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';\n var code = 'random.choice(' + varName + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const lists_get_random_sublist = function (_, generator) {\n generator.definitions_['import_random'] = 'import random';\n var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';\n var VALUE = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n var code = 'random.sample(' + varName + ',' + VALUE + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const lists_insert_value = function (_, generator) {\n var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT) || '0';\n var at = generator.valueToCode(this, 'AT', generator.ORDER_ADDITIVE) || '0';\n var VALUE = generator.valueToCode(this, 'VALUE', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName + '.insert(' + at + ', ' + VALUE + ')\\n';\n return code;\n}\n\nexport const lists_reverse = function (_, generator) {\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName + '.reverse()\\n';\n return code;\n}\nexport const lists_clear = function (_, generator) {\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName + '.clear()\\n';\n return code;\n}\n\nexport const lists_find = function (_, generator) {\n var op = this.getFieldValue('OP');\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';\n if (op == 'INDEX')\n var code = varName + '.index(' + argument + ')';\n else if (op == 'COUNT')\n var code = varName + '.count(' + argument + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const lists_remove_at = function (_, generator) {\n var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT) || '0';\n var argument = generator.valueToCode(this, 'DATA', generator.ORDER_ASSIGNMENT) || '0';\n var op = this.getFieldValue('OP');\n var code = \"\";\n if (op == \"del\") {\n code = 'del ' + varName + '[' + argument + ']\\n';\n } else {\n code = varName + '.remove' + '(' + argument + ')\\n';\n }\n return code;\n}\n\nexport const lists_pop = function (_, generator) {\n var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';\n var argument = generator.valueToCode(this, 'VALUE', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName + '.pop(' + argument + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const list_trig = function (a, generator) {\n var b = a.getFieldValue(\"OP\"), c;\n generator.definitions_['import_math'] = \"import math\";\n a = generator.valueToCode(a, 'data', generator.ORDER_NONE)\n switch (b) {\n case \"LEN\":\n c = \"len(\" + a + \")\";\n break;\n case \"SUM\":\n c = \"sum(\" + a + \")\";\n break;\n case \"MIN\":\n c = \"min(\" + a + \")\";\n break;\n case \"MAX\":\n c = \"max(\" + a + \")\";\n break;\n case 'AVERAGE':\n generator.definitions_['import_mixpy_math_mean'] = \"from mixpy import math_mean\";\n c = 'math_mean(' + a + ')';\n break;\n case 'MEDIAN':\n generator.definitions_['import_mixpy_math_median'] = \"from mixpy import math_median\";\n c = 'math_median(' + a + ')';\n break;\n case 'MODE':\n generator.definitions_['import_mixpy_math_modes'] = \"from mixpy import math_modes\";\n c = 'math_modes(' + a + ')';\n break;\n case 'STD_DEV':\n generator.definitions_['import_mixpy_math_standard_deviation'] = \"from mixpy import math_standard_deviation\";\n c = 'math_standard_deviation(' + a + ')';\n break;\n default:\n throw 'Unknown operator: ' + b;\n }\n if (c)\n return [c, generator.ORDER_ATOMIC];\n\n}\n\nexport const lists_sort = function (block, generator) {\n // Block for sorting a list.\n generator.definitions_['import_mixpy_lists_sort'] = \"from mixpy import lists_sort\";\n var list = (generator.valueToCode(block, 'LIST',\n generator.ORDER_NONE) || '[]');\n var type = block.getFieldValue('TYPE');\n var reverse = block.getFieldValue('DIRECTION') === '1' ? 'False' : 'True';\n var code = 'lists_sort(' + list + ', \"' + type + '\", ' + reverse + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const lists_change_to = function (_, generator) {\n var op = this.getFieldValue('OP');\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n var code = '';\n if (op == 'array') {\n generator.definitions_['import_numpy'] = 'import numpy';\n code = 'numpy.array(' + varName + ')';\n }\n else {\n code = op + '(' + varName + ')';\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const list_many_input = function (_, generator) {\n var text = this.getFieldValue('CONTENT');\n var code = '[' + text + ']'\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const lists_create_with_noreturn = function (_, generator) {\n // Create a list with any number of elements of any type.\n var code = new Array(this.itemCount_);\n var default_value = '0';\n for (var n = 0; n < this.itemCount_; n++) {\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || default_value;\n }\n var code = '[' + code.join(', ') + ']';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const lists_change_to_general = lists_change_to;\n\nexport const lists_del_general = function (_, generator) {\n var varName = generator.valueToCode(this, 'TUP', generator.ORDER_ASSIGNMENT) || '0';\n var code = 'del ' + varName + '\\n';\n return code;\n}\n\nexport const lists_create_with2 = lists_create_with\nexport const lists_create_with_text2 = lists_create_with_text\nexport const lists_getIndex3 = lists_get_index\nexport const lists_getSublist3 = lists_get_sublist\nexport const lists_setIndex3 = lists_set_index\nexport const lists_insert_value2 = lists_insert_value\nexport const lists_remove_at2 = lists_remove_at\n\nexport const list_tolist = function (_, generator) {\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'\n return ['list(' + str + ')', generator.ORDER_ATOMIC];\n}\n\nexport const list_tolist2 = function (_, generator) {\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'\n return [str + '.tolist()', generator.ORDER_ATOMIC];\n}\n\nexport const enumerate = function (_, generator) {\n var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';\n var argument = generator.valueToCode(this, 'VALUE', generator.ORDER_ASSIGNMENT) || '0';\n var code = 'enumerate(' +varName+',start='+ argument + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const content_in_lists = function (_, generator) {\n var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || 'mylist';\n var con = generator.valueToCode(this, 'CON', generator.ORDER_ASSIGNMENT) || '0';\n var code = con +' in '+varName;\n return [code, generator.ORDER_ATOMIC];\n}","export const logic_compare = function (_, generator) {\n // Comparison operator.\n var mode = this.getFieldValue('OP');\n var operator = logic_compare.OPERATORS[mode];\n var order = (operator == '==' || operator == '!=') ?\n generator.ORDER_EQUALITY : generator.ORDER_RELATIONAL;\n var argument0 = generator.valueToCode(this, 'A', order) || '0';\n var argument1 = generator.valueToCode(this, 'B', order) || '0';\n var code = argument0 + ' ' + operator + ' ' + argument1;\n return [code, order];\n}\n\nexport const logic_compare_continous = function (_, generator) {\n // Comparison operator.\n var mode1 = this.getFieldValue('OP1');\n var operator1 = logic_compare.OPERATORS[mode1];\n var mode2 = this.getFieldValue('OP2');\n var operator2 = logic_compare.OPERATORS[mode2];\n var argument0 = generator.valueToCode(this, 'A', generator.ORDER_RELATIONAL) || '0';\n var argument1 = generator.valueToCode(this, 'B', generator.ORDER_RELATIONAL) || '0';\n var argument2 = generator.valueToCode(this, 'C', generator.ORDER_RELATIONAL) || '0';\n var code = argument0 + ' ' + operator1 + ' ' + argument1 + ' ' + operator2 + ' ' + argument2;\n return [code, generator.ORDER_RELATIONAL];\n}\n\nlogic_compare.OPERATORS = {\n EQ: '==',\n NEQ: '!=',\n LT: '<',\n LTE: '<=',\n GT: '>',\n GTE: '>='\n};\n\nexport const logic_operation = function (_, generator) {\n // Operations 'and', 'or'.\n var operator = this.getFieldValue('OP');\n var order = (operator == '&&') ? generator.ORDER_LOGICAL_AND :\n generator.ORDER_LOGICAL_OR;\n var argument0 = generator.valueToCode(this, 'A', order) || 'False';\n var argument1 = generator.valueToCode(this, 'B', order) || 'False';\n if (operator == 'AND') {\n var code = argument0 + ' and ' + argument1;\n } else if (operator == 'OR') {\n var code = argument0 + ' or ' + argument1;\n } else if (operator == 'NOR') {\n // var code = '('+argument0+' and '+argument1+' ) or ((not '+argument0+') and (not '+argument1+'))';\n var code = 'not(' + argument0 + '^' + argument1 + ')';\n } else {\n // var code = '((not '+argument0+') and '+argument1+' ) or ( '+argument0+' and (not '+argument1+'))';\n var code = argument0 + '^' + argument1;\n }\n return [code, order];\n}\n\nexport const logic_negate = function (_, generator) {\n // Negation.\n var order = generator.ORDER_UNARY_PREFIX;\n var argument0 = generator.valueToCode(this, 'BOOL', order) || 'False';\n var code = 'not ' + argument0;\n return [code, order];\n}\n\nexport const logic_boolean = function (_, generator) {\n // Boolean values true and false.\n var code = (this.getFieldValue('BOOL') == 'TRUE') ? 'True' : 'False';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const logic_null = function (_, generator) {\n var code = 'None';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const logic_true_or_false = function (_, generator) {\n var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || 'False';\n var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || 'False';\n var c = generator.valueToCode(this, 'C', generator.ORDER_ATOMIC) || 'False';\n var code = '(' + b + ' if ' + a + ' else ' + c + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const logic_is_in = function (_, generator) {\n var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\\'\\'';\n var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\\'\\'';\n var bool = this.getFieldValue('BOOL');\n var code = a + ' ' + bool + ' ' + b;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const logic_is = function (_, generator) {\n var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC) || '\\'\\'';\n var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC) || '\\'\\'';\n var bool = this.getFieldValue('BOOL');\n var code = a + ' ' + bool + ' ' + b;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const logic_tobool = function (_, generator) {\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'\n return ['bool(' + str + ')', generator.ORDER_ATOMIC];\n}","// export const math_number = function() {\n// // Numeric value.\n// var code = (this.getFieldValue('NUM'));\n// // -4.abs() returns -4 in Dart due to strange order of operation choices.\n// // -4 is actually an operator and a number. Reflect this in the order.\n// var order = code < 0 ?\n// generator.ORDER_UNARY_PREFIX : generator.ORDER_ATOMIC;\n// return [code, order];\n// }\n\n// generator.math = {}\n// generator.addReservedWords(\"math,random,Number\");\n\nexport const math_number = function (_, generator) {\n // a = parseFloat(a.getFieldValue(\"NUM\"));\n // var b;\n // Infinity == a ? (a = 'float(\"inf\")', b = generator.ORDER_FUNCTION_CALL) : -Infinity == a ? (a = '-float(\"inf\")', b = generator.ORDER_UNARY_SIGN) : b = 0 > a ? generator.ORDER_UNARY_SIGN : generator.ORDER_ATOMIC;\n // return [a, b]\n\n var code = this.getFieldValue('NUM');\n // -4.abs() returns -4 in Dart due to strange order of operation choices.\n // -4 is actually an operator and a number. Reflect this in the order.\n var order = code < 0 ?\n generator.ORDER_UNARY_PREFIX : generator.ORDER_ATOMIC;\n return [code, order];\n}\n\nexport const math_constant = function (_, generator) {\n generator.definitions_.import_math = \"import math\";\n var name = this.getFieldValue('CONSTANT');\n var code = 'math.' + name;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const math_constant_mp = function (_, generator) {\n generator.definitions_.import_math = \"import math\";\n var name = this.getFieldValue('CONSTANT');\n var code = 'math.' + name;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const math_bit = function (_, generator) {\n var operator = this.getFieldValue('OP');\n var order = generator.ORDER_ATOMIC;\n var argument0 = generator.valueToCode(this, 'A', order) || '0';\n var argument1 = generator.valueToCode(this, 'B', order) || '0';\n var code = '(' + argument0 + operator + argument1 + ')';\n return [code, order];\n}\n\nexport const math_arithmetic = function (a, generator) {\n var b = {\n ADD: [\" + \", generator.ORDER_ADDITIVE],\n MINUS: [\" - \", generator.ORDER_ADDITIVE],\n MULTIPLY: [\" * \", generator.ORDER_MULTIPLICATIVE],\n DIVIDE: [\" / \", generator.ORDER_MULTIPLICATIVE],\n QUYU: [' % ', generator.ORDER_MULTIPLICATIVE],//增加取余操作\n ZHENGCHU: [' // ', generator.ORDER_MULTIPLICATIVE],//增加整除操作\n POWER: [\" ** \", generator.ORDER_EXPONENTIATION]\n }[a.getFieldValue(\"OP\")];\n var c = b[0],\n b = b[1],\n d = generator.valueToCode(a, \"A\", b) || \"0\";\n a = generator.valueToCode(a, \"B\", b) || \"0\";\n return [d + c + a, b]\n}\n\nexport const math_selfcalcu = function (_, generator) {\n var argument0 = generator.valueToCode(this, 'A', generator.ORDER_RELATIONAL) || '0';\n var argument1 = generator.valueToCode(this, 'B', generator.ORDER_RELATIONAL) || '0';\n var operator = this.getFieldValue('OP');\n switch (operator) {\n case 'ADD': var op = '+='; break;\n case 'MINUS': var op = '-='; break;\n case 'MULTIPLY': var op = '*='; break;\n case 'DIVIDE': var op = '/='; break;\n case 'QUYU': var op = '%='; break;\n case 'ZHENGCHU': var op = '//='; break;\n case 'POWER': var op = '**='; break;\n }\n var code = argument0 + ' ' + op + ' ' + argument1 + '\\n';\n return code;\n}\n\nexport const math_single = function (a, generator) {\n var b = a.getFieldValue(\"OP\"),\n c;\n if (\"NEG\" == b)\n return c = generator.valueToCode(a, \"NUM\", generator.ORDER_UNARY_SIGN) || \"0\", [\"-\" + c, generator.ORDER_UNARY_SIGN];\n generator.definitions_['import_math'] = \"import math\";\n a = \"SIN\" == b || \"COS\" == b || \"TAN\" == b ? generator.valueToCode(a, \"NUM\", generator.ORDER_MULTIPLICATIVE) || \"0\" : generator.valueToCode(a, \"NUM\", generator.ORDER_NONE) || \"0\";\n switch (b) {\n case \"ABS\":\n c = \"math.fabs(\" + a + \")\";\n break;\n case \"ROOT\":\n c = \"math.sqrt(\" +\n a + \")\";\n break;\n case \"LN\":\n c = \"math.log(\" + a + \")\";\n break;\n case \"LOG10\":\n c = \"math.log10(\" + a + \")\";\n break;\n case \"EXP\":\n c = \"math.exp(\" + a + \")\";\n break;\n case \"POW10\":\n c = \"math.pow(10,\" + a + \")\";\n break;\n case \"ROUND\":\n c = \"round(\" + a + \")\";\n break;\n case \"ROUNDUP\":\n c = \"math.ceil(\" + a + \")\";\n break;\n case \"ROUNDDOWN\":\n c = \"math.floor(\" + a + \")\";\n break;\n case \"SIN\":\n c = \"math.sin(\" + a + \")\";\n break;\n case \"COS\":\n c = \"math.cos(\" + a + \")\";\n break;\n case \"TAN\":\n c = \"math.tan(\" + a + \")\";\n break;\n case \"++\":\n c = \"++(\" + a + \")\";\n break;\n case \"--\":\n c = \"--(\" + a + \")\";\n break;\n case \"-\":\n c = \"-(\" + a + \")\";\n break;\n default:\n }\n if (c)\n return [c, generator.ORDER_EXPONENTIATION];\n switch (b) {\n case \"ASIN\":\n c = \"math.degrees(math.asin(\" + a + \"))\";\n break;\n case \"ACOS\":\n c = \"math.degrees(math.acos(\" + a + \"))\";\n break;\n case \"ATAN\":\n c = \"math.degrees(math.atan(\" + a + \"))\";\n break;\n }\n return [c, generator.ORDER_MULTIPLICATIVE]\n}\n\nexport const math_trig = math_single;\n\nexport const math_dec = function (_, generator) {\n var argument0 = generator.valueToCode(this, 'NUM', generator.ORDER_NONE) || '0';\n var operator = this.getFieldValue('OP');\n var code = operator + '(' + argument0 + ')';\n return [code, generator.ORDER_ATOMIC];\n\n}\n\nexport const math_to_int = function (_, generator) {\n var argument0 = generator.valueToCode(this, 'A', generator.ORDER_NONE) || '0';\n var operator = this.getFieldValue('OP');\n var code = \"\";\n if (operator === \"round\") {\n code = operator + '(' + argument0 + ')';\n } else {\n code = \"math.\" + operator + '(' + argument0 + ')';\n generator.definitions_.import_math = \"import math\";\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const math_max_min = function (_, generator) {\n var a = generator.valueToCode(this, 'A', generator.ORDER_NONE) || '0';\n var b = generator.valueToCode(this, 'B', generator.ORDER_NONE) || '0';\n var operator = this.getFieldValue('OP');\n var code = operator + '(' + a + ', ' + b + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const math_random = function (_, generator) {\n generator.definitions_.import_random = \"import random\";\n // Random integer between [X] and [Y].\n var type = this.getFieldValue('TYPE');\n var argument0 = generator.valueToCode(this, 'FROM',\n generator.ORDER_NONE) || '0';\n var argument1 = generator.valueToCode(this, 'TO',\n generator.ORDER_NONE) || '0';\n if (type == 'int') {\n var code = 'random.randint(' + argument0 + ', ' + argument1 + ')';\n } else if (type == 'float') {\n var code = 'random.uniform(' + argument0 + ', ' + argument1 + ')';\n }\n return [code, generator.ORDER_UNARY_POSTFIX];\n}\n\nexport const math_map = function (_, generator) {\n var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_NONE);\n var value_fl = generator.valueToCode(this, 'fromLow', generator.ORDER_ATOMIC);\n var value_fh = generator.valueToCode(this, 'fromHigh', generator.ORDER_ATOMIC);\n var value_tl = generator.valueToCode(this, 'toLow', generator.ORDER_ATOMIC);\n var value_th = generator.valueToCode(this, 'toHigh', generator.ORDER_ATOMIC);\n generator.definitions_['import_mixpy_math_map'] = \"from mixpy import math_map\";\n var code = 'math_map(' + value_num + ', ' + value_fl + ', ' + value_fh + ', ' + value_tl + ', ' + value_th + ')';\n return [code, generator.ORDER_NONE];\n}\n\nexport const math_constrain = function (_, generator) {\n // Constrain a number between two limits.\n var argument0 = generator.valueToCode(this, 'VALUE',\n generator.ORDER_NONE) || '0';\n var argument1 = generator.valueToCode(this, 'LOW',\n generator.ORDER_NONE) || '0';\n var argument2 = generator.valueToCode(this, 'HIGH',\n generator.ORDER_NONE) || '0';\n var code = 'min(max(' + argument0 + ', ' + argument1 + '), ' + argument2 + ')';\n return [code, generator.ORDER_UNARY_POSTFIX];\n}\n\nexport const math_number_base_conversion = function (a, generator) {\n var c1 = a.getFieldValue(\"OP\");\n var d = generator.valueToCode(this, 'NUM', generator.ORDER_NONE) || '0';\n var c2 = a.getFieldValue(\"OP2\");\n generator.definitions_['import_math'] = \"import math\";\n var param1 = \"\";\n var param2 = \"10\";\n if (c1 == \"two\") {\n param2 = '2';\n } else if (c1 == \"eight\") {\n param2 = '8'\n } else if (c1 == \"ten\") {\n param2 = '10'\n } else if (c1 == \"sixteen\") {\n param2 = '16'\n }\n\n if (c2 == \"two\") {\n param1 = 'bin';\n } else if (c2 == \"eight\") {\n param1 = 'oct'\n } else if (c2 == \"ten\") {\n param1 = ''\n } else if (c2 == \"sixteen\") {\n param1 = 'hex'\n }\n if (param1 == \"\") {\n var code = \"int(str(\" + d + \"), \" + param2 + \")\";\n } else {\n var code = param1 + \"(int(str(\" + d + \"), \" + param2 + \"))\";\n\n }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const math_random_seed = function (_, generator) {\n // Random integer between [X] and [Y].\n generator.definitions_.import_random = \"import random\";\n var a = generator.valueToCode(this, 'NUM', generator.ORDER_NONE) || '0';\n var code = 'random.seed(' + a + ');' + '\\n';\n return code;\n}\n\nexport const math_indexer_number = function (_, generator) {\n var code = this.getFieldValue('NUM');\n // -4.abs() returns -4 in Dart due to strange order of operation choices.\n // -4 is actually an operator and a number. Reflect this in the order.\n var order = code < 0 ?\n generator.ORDER_UNARY_PREFIX : generator.ORDER_ATOMIC;\n return [code, order];\n}\n\nexport const math_round = function (_, generator) {\n var argument0 = generator.valueToCode(this, 'VALUE',\n generator.ORDER_NONE) || '0';\n var argument1 = generator.valueToCode(this, 'VAR',\n generator.ORDER_NONE) || '0';\n\n var code = 'round(' + argument0 + ', ' + argument1 + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const text_to_number = function (_, generator) {\n var towhat = this.getFieldValue('TOWHAT');\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n if (towhat == 'b') return ['' + str + '.encode(\"utf-8\")', generator.ORDER_ATOMIC];\n else if (towhat == 'bti') return ['int.from_bytes(' + str + ',\"big\")', generator.ORDER_ATOMIC];\n return [towhat + \"(\" + str + ')', generator.ORDER_ATOMIC];\n}\n\nexport const text_to_number_skulpt = function (_, generator) {\n var towhat = this.getFieldValue('TOWHAT');\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n if (towhat == 'b') return ['' + str + '.encode(\"utf-8\")', generator.ORDER_ATOMIC];\n return [towhat + \"(\" + str + ')', generator.ORDER_ATOMIC];\n}\n\nexport const base_map = math_map;\n\nexport const turn_to_int = function (_, generator) {\n generator.definitions_.import_hexlify = \"from ubinascii import hexlify\";\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n return [\"hexlify(\" + str + ').decode()', generator.ORDER_ATOMIC];\n}\n\nexport const generate_cartesian_product = function (_, generator) {\n generator.definitions_.import_itertools = 'import itertools';\n let re = generator.valueToCode(this, 'REPEAT', generator.ORDER_ATOMIC);\n let items = new Array(this.itemCount_);\n for (let n = 0; n < this.itemCount_; n++) {\n items[n] = generator.valueToCode(this, `ADD${n}`, generator.ORDER_NONE) || '0';\n }\n let code = '';\n if (this.itemCount_) {\n code = `itertools.product(${items.join(', ')}, repeat=${re})`;\n }\n return [code, generator.ORDER_ATOMIC];\n}","import * as Blockly from 'blockly/core';\n\nexport const procedures_defreturn = function (_, generator) {\n // Define a procedure with a return value.\n var funcName = generator.variableDB_.getName(this.getFieldValue('NAME'),\n Blockly.Procedures.NAME_TYPE);\n var branch = (this.getInput('STACK') && generator.statementToCode(this, 'STACK')) ?? ' pass\\n';\n if (generator.INFINITE_LOOP_TRAP) {\n branch = generator.INFINITE_LOOP_TRAP.replace(/%1/g,\n '\\'' + this.id + '\\'') + branch;\n }\n var returnValue = generator.valueToCode(this, 'RETURN',\n generator.ORDER_NONE) || '';\n //var type=this.getFieldValue('TYPE');\n if (returnValue) {\n returnValue = ' return ' + returnValue + '\\n';\n }\n //var returnType = returnValue ? type : 'void';\n var args = [];\n for (var x = 0; x < this.arguments_.length; x++) {\n var varName = generator.variableDB_.getName(this.arguments_[x], Blockly.Variables.NAME_TYPE);\n args[x] = varName;\n }\n var code = 'def ' + funcName + '(' + args.join(', ') + '):\\n' +\n branch + returnValue + '\\n';\n code = generator.scrub_(this, code);\n generator.setups_[funcName] = code;\n return null;\n}\n\nexport const procedures_defnoreturn = function (_, generator) {\n // Define a procedure with a return value.\n var funcName = generator.variableDB_.getName(this.getFieldValue('NAME'),\n Blockly.Procedures.NAME_TYPE);\n var branch = (this.getInput('STACK') && generator.statementToCode(this, 'STACK')) ?? ' pass\\n';\n if (generator.INFINITE_LOOP_TRAP) {\n branch = generator.INFINITE_LOOP_TRAP.replace(/%1/g,\n '\\'' + this.id + '\\'') + branch;\n }\n //var returnType = returnValue ? type : 'void';\n var args = [];\n for (var x = 0; x < this.arguments_.length; x++) {\n var varName = generator.variableDB_.getName(this.arguments_[x], Blockly.Variables.NAME_TYPE);\n args[x] = varName;\n }\n var code = 'def ' + funcName + '(' + args.join(', ') + '):\\n' +\n branch + '\\n';\n code = generator.scrub_(this, code);\n generator.setups_[funcName] = code;\n return null;\n}\n\nexport const procedures_callreturn = function (_, generator) {\n // Call a procedure with a return value.\n var funcName = generator.variableDB_.getName(this.getFieldValue('NAME'),\n Blockly.Procedures.NAME_TYPE);\n var args = [];\n for (var x = 0; x < this.arguments_.length; x++) {\n args[x] = generator.valueToCode(this, 'ARG' + x,\n generator.ORDER_NONE) || 'null';\n }\n var code = funcName + '(' + args.join(', ') + ')';\n return [code, generator.ORDER_UNARY_POSTFIX];\n}\n\nexport const procedures_callnoreturn = function (_, generator) {\n // Call a procedure with no return value.\n var funcName = generator.variableDB_.getName(this.getFieldValue('NAME'),\n Blockly.Procedures.NAME_TYPE);\n var args = [];\n for (var x = 0; x < this.arguments_.length; x++) {\n args[x] = generator.valueToCode(this, 'ARG' + x,\n generator.ORDER_NONE) || 'null';\n }\n var code = funcName + '(' + args.join(', ') + ')\\n';\n return code;\n}\n\nexport const procedures_ifreturn = function (_, generator) {\n // Conditionally return value from a procedure.\n var condition = generator.valueToCode(this, 'CONDITION',\n generator.ORDER_NONE) || 'False';\n var code = 'if (' + condition + ') :\\n';\n if (this.hasReturnValue_) {\n var value = generator.valueToCode(this, 'VALUE',\n generator.ORDER_NONE) || 'None';\n code += ' return ' + value;\n } else {\n code += ' return None';\n }\n code += '\\n';\n return code;\n}\n\nexport const procedures_return = function (_, generator) {\n // Conditionally return value from a procedure.\n var code = \"\"\n if (this.hasReturnValue_) {\n var value = generator.valueToCode(this, 'VALUE',\n generator.ORDER_NONE) || 'None';\n code += 'return ' + value;\n } else {\n code += 'return None';\n }\n code += '\\n';\n return code;\n}","import * as Blockly from 'blockly/core';\n\nexport const set_create_with = function (_, generator) {\n var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),\n Blockly.Variables.NAME_TYPE);\n var code = new Array(this.itemCount_);\n var default_value = '0';\n for (var n = 0; n < this.itemCount_; n++) {\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || default_value;\n }\n //generator.definitions_['var_declare'+varName] = varName+'= '+ '{' + code.join(', ') + '}\\n';\n code = varName + '= ' + '{' + code.join(', ') + '}\\n';\n if (this.itemCount_ == 0) { code = varName + ' = ' + 'set()\\n' }\n return code;\n}\n\nexport const set_length = function (_, generator) {\n var varName = generator.valueToCode(this, 'SET', generator.ORDER_ASSIGNMENT) || '0';\n var code = 'len(' + varName + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const set_pop = function (_, generator) {\n var varName = generator.valueToCode(this, 'SET', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName + '.pop()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const set_clear = function (_, generator) {\n var varName = generator.valueToCode(this, 'SET', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName + '.clear()\\n';\n return code;\n}\n\nexport const set_operate = function (_, generator) {\n var vars1 = generator.valueToCode(this, 'SET1', generator.ORDER_ASSIGNMENT) || '0';\n var vars2 = generator.valueToCode(this, 'SET2', generator.ORDER_ASSIGNMENT) || '0';\n var operate = this.getFieldValue('OPERATE');\n //var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = vars1 + \".\" + operate + \"(\" + vars2 + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const set_operate_update = function (_, generator) {\n var vars1 = generator.valueToCode(this, 'SET1', generator.ORDER_ASSIGNMENT) || '0';\n var vars2 = generator.valueToCode(this, 'SET2', generator.ORDER_ASSIGNMENT) || '0';\n var operate = this.getFieldValue('OPERATE');\n //var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = vars1 + \".\" + operate + \"(\" + vars2 + ')\\n';\n return code;\n}\n\nexport const set_add_discard = function (_, generator) {\n var vars1 = generator.valueToCode(this, 'SET', generator.ORDER_ASSIGNMENT) || '0';\n var operate = this.getFieldValue('OPERATE');\n var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';\n var code = vars1 + \".\" + operate + \"(\" + argument + ')\\n';\n return code;\n}\n\nexport const set_sub = function (_, generator) {\n var vars1 = generator.valueToCode(this, 'SET1', generator.ORDER_ASSIGNMENT) || '0';\n var vars2 = generator.valueToCode(this, 'SET2', generator.ORDER_ASSIGNMENT) || '0';\n var operate = this.getFieldValue('OPERATE');\n //var num = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = vars1 + \".\" + operate + \"(\" + vars2 + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const set_update = function (_, generator) {\n var varName = generator.valueToCode(this, 'SET', generator.ORDER_ASSIGNMENT) || '0';\n var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n //var color = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName + \".\" + 'update' + '(' + color + ')\\n';\n return code;\n}\n\n// export const set_change_to = function(){\n// var op = this.getFieldValue('OP');\n// var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n// var code = op + '(' + varName + ')\\n';\n// return [code, generator.ORDER_ATOMIC];\n// }\n\nexport const set_create_with_text_return = function (_, generator) {\n var text = this.getFieldValue('TEXT');\n var code = '{' + text + '}';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const set_toset = function (_, generator) {\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'\n return ['set(' + str + ')', generator.ORDER_ATOMIC];\n}","export const storage_open_file_with_os = function (_, generator) {\n generator.definitions_['import_os'] = 'import os';\n var fn = generator.valueToCode(this, 'fn', generator.ORDER_ATOMIC);\n return \"os.startfile(\" + fn + \")\\n\";\n}\n\nexport const storage_fileopen = function (_, generator) {\n // For each loop.\n var variable0 = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n var fn = generator.valueToCode(this, 'FILENAME', generator.ORDER_ATOMIC);\n var mode = this.getFieldValue('MODE');\n var code = variable0 + ' = open(' + fn + ', \\'' + mode + '\\')\\n';\n return code;\n}\n\nexport const storage_fileopen_new = function (_, generator) { // For each loop.\n var fn = generator.valueToCode(this, 'FILENAME', generator.ORDER_ATOMIC);\n var mode = this.getFieldValue('MODE');\n var code = 'open(' + fn + ', \\'' + mode + '\\')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const storage_fileopen_new_encoding = function (_, generator) { // For each loop.\n var fn = generator.valueToCode(this, 'FILENAME', generator.ORDER_ATOMIC);\n var mode = this.getFieldValue('MODE');\n var encode = this.getFieldValue('CODE');\n var code = 'open(' + fn + ', \\'' + mode + '\\', encoding=\"' + encode + '\")';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const storage_file_write = function (_, generator) {\n var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);\n var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n return file + \".write(\" + data + \")\\n\";\n}\n\nexport const storage_get_contents_without_para = function (_, generator) {\n var mode = this.getFieldValue('MODE');\n var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n var code = file + '.' + mode + '()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const storage_get_contents = function (_, generator) {\n var mode = this.getFieldValue('MODE');\n var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n var size = generator.valueToCode(this, 'SIZE', generator.ORDER_ATOMIC);\n var code = file + '.' + mode + '(' + size + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const storage_get_a_line = function (_, generator) {\n var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n var size = generator.valueToCode(this, 'SIZE', generator.ORDER_ATOMIC);\n var code = file + \".readline(\" + size + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const storage_can_write_ornot = function (_, generator) {\n var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n var code = file + \".writable()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const storage_get_filename = function (_, generator) {\n var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n var code = file + \".name()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const storage_close_file = function (_, generator) {\n var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n var code = file + \".close()\\n\";\n return code;\n}\n\nexport const storage_list_all_files = function (_, generator) {\n generator.definitions_['import_os'] = 'import os';\n var code = 'os.listdir()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const storage_delete_file = function (_, generator) {\n generator.definitions_['import_os'] = 'import os';\n var mode = this.getFieldValue('MODE');\n var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n var code = \"os.\" + mode + \"(\" + file + \")\\n\";\n return code;\n}\n\nexport const storage_get_file_size = function (_, generator) {\n generator.definitions_['import_os'] = 'import os';\n var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n var code = \"os.path.getsize(\" + file + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const storage_file_tell = function (_, generator) {\n var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n var code = file + \".tell()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const storage_file_seek = function (_, generator) {\n var mode = this.getFieldValue('MODE');\n var mode_num = 0;\n if (mode == 'start') {\n mode_num = 0;\n }\n else if (mode == 'current') {\n mode_num = 1;\n }\n else {\n mode_num = 2;\n }\n var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n var size = generator.valueToCode(this, 'SIZE', generator.ORDER_ATOMIC);\n var code = file + '.seek(' + size + ',' + mode_num + ')\\n';\n return code;\n}\n\nexport const storage_change_dir = function (_, generator) {\n generator.definitions_['import_os'] = 'import os';\n var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n var code = \"os.chdir(\" + file + \")\\n\";\n return code;\n}\n\nexport const storage_get_current_dir = function (_, generator) {\n generator.definitions_['import_os'] = 'import os';\n var code = 'os.getcwd()';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const storage_make_dir = function (_, generator) {\n generator.definitions_['import_os'] = 'import os';\n var mode = this.getFieldValue('MODE');\n var path = generator.valueToCode(this, 'PATH', generator.ORDER_ATOMIC);\n var code = 'os.' + mode + '(' + path + ')\\n';\n return code;\n}\n\nexport const storage_rename = function (_, generator) {\n generator.definitions_['import_os'] = 'import os';\n var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n var file1 = generator.valueToCode(this, 'NEWFILE', generator.ORDER_ATOMIC);\n var code = \"os.rename(\" + file + \",\" + file1 + \")\\n\";\n return code;\n}\n\nexport const storage_is_file = function (_, generator) {\n generator.definitions_['import_os'] = 'import os';\n var file = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC);\n var mode = this.getFieldValue('MODE');\n var code = \"os.\" + mode + \"(\" + file + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const sdcard_use_spi_init = function (_, generator) {\n generator.definitions_['import_os'] = 'import os';\n generator.definitions_['import_sdcard'] = 'import sdcard';\n var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);\n var sv = generator.valueToCode(this, 'SPISUB', generator.ORDER_ATOMIC);\n var pv = generator.valueToCode(this, 'PINSUB', generator.ORDER_ATOMIC);\n var code = v + ' = sdcard.SDCard(' + sv + ',' + pv + ')\\n';\n return code;\n}\n\nexport const sdcard_mount = function (_, generator) {\n generator.definitions_['import_os'] = 'import os';\n generator.definitions_['import_sdcard'] = 'import sdcard';\n var sd = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var dir = generator.valueToCode(this, 'DIR', generator.ORDER_ATOMIC);\n return \"os.mount(\" + sd + ',' + dir + \")\\n\";\n}","import * as Blockly from 'blockly/core';\n\nexport const text = function (_, generator) {\n // Text value.\n //var code = 'String('+generator.quote_(this.getFieldValue('TEXT'))+')';\n var code = generator.quote_(this.getFieldValue('TEXT'));\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const text_textarea = function (_, generator) {\n // Text value.\n //var code = 'String('+generator.quote_(this.getFieldValue('TEXT'))+')';\n var code = '\"\"\"' + (this.getFieldValue('VALUE')) + '\"\"\"';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const text_char = function (_, generator) {\n var code = '\\'' + this.getFieldValue('TEXT') + '\\'';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const text_join = function (_, generator) {\n // Text value.\n var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC);\n var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC);\n return [a + ' + ' + b, generator.ORDER_ADDITIVE];\n}\n\nexport const ascii_to_char = function (_, generator) {\n var asciivalue = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'\n return ['chr(' + asciivalue + ')', generator.ORDER_ATOMIC];\n}\n\nexport const char_to_ascii = function (_, generator) {\n var charvalue = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || 'a';\n return ['ord(' + charvalue + ')', generator.ORDER_ATOMIC];\n}\n\nexport const number_to_text = function (_, generator) {\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0';\n return ['str(' + str + ')', generator.ORDER_ATOMIC];\n}\n\nexport const text_length = function (_, generator) {\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '\"\"';\n return ['len(' + str + ')', generator.ORDER_ATOMIC];\n}\n\nexport const text_char_at2 = function (a, generator) {\n var c = a.getFieldValue(\"WHERE\") || \"FROM_START\",\n str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '\"\"';\n switch (c) {\n case \"FROM_START\":\n a = generator.getAdjustedInt(a, \"AT\");\n return [str + \"[\" + a + \"]\", generator.ORDER_ATOMIC];\n case \"FROM_END\":\n a = generator.getAdjustedInt(a, \"AT\", 1, !0);\n return [str + \"[\" + a + \"]\", generator.ORDER_ATOMIC];\n case \"RANDOM\":\n generator.definitions_.import_random = \"import random\";\n return [\"random.choice(\" + str + \")\", generator.ORDER_FUNCTION_CALL];\n }\n throw \"Unhandled combination (lists_getIndex).\";\n}\n\nexport const text_char_at = function (_, generator) {\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '\"\"';\n var at = generator.valueToCode(this, 'AT', generator.ORDER_ATOMIC) || 0;\n return [str + \"[\" + at + \"]\", generator.ORDER_ATOMIC];\n}\n\nexport const text_random_char = function (_, generator) {\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '\"\"';\n generator.definitions_.import_random = \"import random\";\n return [\"random.choice(\" + str + \")\", generator.ORDER_FUNCTION_CALL];\n}\n\nexport const text_equals_starts_ends = function (_, generator) {\n var str1 = (generator.valueToCode(this, 'STR1', generator.ORDER_ATOMIC) || '\"\"');\n var str2 = (generator.valueToCode(this, 'STR2', generator.ORDER_ATOMIC) || '\"\"');\n var dowhat = this.getFieldValue('DOWHAT');\n if (dowhat === '===')\n return [str1 + ' == ' + str2, generator.ORDER_ATOMIC];\n return [str1 + '.' + dowhat + '(' + str2 + ')', generator.ORDER_ATOMIC];\n}\n\nexport const text_compare_to = function (_, generator) {\n var str1 = (generator.valueToCode(this, 'STR1', generator.ORDER_ATOMIC) || '\"\"');\n var str2 = (generator.valueToCode(this, 'STR2', generator.ORDER_ATOMIC) || '\"\"');\n return ['cmp(' + str1 + ',' + str2 + ')', generator.ORDER_ATOMIC];\n}\n\nexport const text_substring2 = function (block, generator) {\n // Get sublist.\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '\"\"';\n var where1 = block.getFieldValue('WHERE1');\n var where2 = block.getFieldValue('WHERE2');\n switch (where1) {\n case 'FROM_START':\n var at1 = generator.getAdjustedInt(block, 'AT1');\n if (at1 == '0') {\n at1 = '';\n }\n break;\n case 'FROM_END':\n var at1 = generator.getAdjustedInt(block, 'AT1', 0, true);\n break;\n case 'FIRST':\n var at1 = '0';\n break;\n default:\n throw 'Unhandled option (lists_getSublist)';\n }\n switch (where2) {\n case 'FROM_START':\n var at2 = generator.getAdjustedInt(block, 'AT2');\n break;\n case 'FROM_END':\n var at2 = generator.getAdjustedInt(block, 'AT2', 0, true);\n // Ensure that if the result calculated is 0 that sub-sequence will\n // include all elements as expected.\n if (!Blockly.isNumber(String(at2))) {\n generator.definitions_['import_sys'] = 'import sys';\n at2 += ' or sys.maxsize';\n } else if (at2 == '0') {\n at2 = '';\n }\n break;\n case 'LAST':\n var at2 = '-1';\n break;\n default:\n throw 'Unhandled option (lists_getSublist)';\n }\n var code = str + '[' + at1 + ' : ' + at2 + ']';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const text_substring = function (_, generator) {\n // Get sublist.\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '\"\"';\n var at1 = generator.valueToCode(this, 'AT1', generator.ORDER_ATOMIC);\n var at2 = generator.valueToCode(this, 'AT2', generator.ORDER_ATOMIC);\n var code = str + '[' + at1 + ' : ' + at2 + ']';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const text_capital = function (_, generator) {\n var capital = this.getFieldValue('CAPITAL');\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n return ['' + str + '.' + capital + '()', generator.ORDER_ATOMIC];\n}\n\nexport const text_center = function (_, generator) {\n var center = this.getFieldValue('CENTER');\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var width = generator.valueToCode(this, 'WID', generator.ORDER_ATOMIC);\n var symbol = generator.valueToCode(this, 'Symbol', generator.ORDER_ATOMIC);\n return ['' + str + '.' + center + '(' + width + ',' + symbol + ')', generator.ORDER_ATOMIC];\n}\n\nexport const text_find = function (_, generator) {\n var sentence = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var str = generator.valueToCode(this, 'STR', generator.ORDER_ATOMIC);\n return ['' + sentence + '.find(' + str + ')', generator.ORDER_ATOMIC];\n}\n\nexport const text_join_seq = function (_, generator) {\n var sentence = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT) || '0';\n return [sentence + '.join(' + varName + ')', generator.ORDER_ATOMIC];\n}\n\nexport const text_replace = function (_, generator) {\n var sentence = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var str1 = generator.valueToCode(this, 'STR1', generator.ORDER_ATOMIC);\n var str2 = generator.valueToCode(this, 'STR2', generator.ORDER_ATOMIC);\n return ['' + sentence + '.replace(' + str1 + ',' + str2 + ')', generator.ORDER_ATOMIC];\n}\n\nexport const text_split = function (_, generator) {\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '\"\"';\n var argument = generator.valueToCode(this, 'VAL', generator.ORDER_ATOMIC) || '\"\"';\n var code = str + \".split(\" + argument + \")\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const text_strip = function (_, generator) {\n var towhat = this.getFieldValue('TOWHAT');\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = str + \".\" + towhat + \"()\";\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const text_format = function (_, generator) {\n // Create a list with any number of elements of any type.\n var s = this.getFieldValue('VAR');\n var code = new Array(this.itemCount_);\n var default_value = '0';\n for (var n = 0; n < this.itemCount_; n++) {\n\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || default_value;\n }\n var code = s + '.format(' + code.join(', ') + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const text_format_noreturn = function (_, generator) {\n // Create a list with any number of elements of any type.\n var s = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = new Array(this.itemCount_);\n var default_value = '0';\n for (var n = 0; n < this.itemCount_; n++) {\n\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || default_value;\n }\n var code = s + '.format(' + code.join(', ') + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const text_substring3 = text_substring\nexport const text_compareTo = text_compare_to\nexport const text_char_at3 = text_char_at\n\nexport const text_encode = function (_, generator) {\n var code = this.getFieldValue('DIR');\n var varName = this.getFieldValue('CODE')\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '\"\"';\n return [str + '.' + code + '(\"' + varName + '\")', generator.ORDER_ATOMIC];\n}\n\nexport const text_eval = function (_, generator) {\n var codestr = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = \"eval\" + '(' + codestr + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const os_system = function (_, generator) {\n generator.definitions_['import_os'] = 'import os';\n var codestr = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);\n var code = \"os.system\" + '(' + codestr + ')\\n';\n return code;\n}","import * as Blockly from 'blockly/core';\n\nexport const tuple_create_with = function (_, generator) {\n // Create a list with any number of elements of any type.\n var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),\n Blockly.Variables.NAME_TYPE);\n //var size=window.parseFloat(this.getFieldValue('SIZE'));\n var code = new Array(this.itemCount_);\n var default_value = '0';\n for (var n = 0; n < this.itemCount_; n++) {\n\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || default_value;\n }\n // if (this.itemCount_!=1){\n // generator.definitions_['var_declare'+varName] = varName+'= '+ '(' + code.join(', ') + ')\\n';}\n // else {\n // generator.definitions_['var_declare'+varName] = varName+'= '+ '(' + code.join(', ') + ',)\\n';}\n if (this.itemCount_ != 1) {\n var code = varName + '= ' + '(' + code.join(', ') + ')\\n';\n }\n else {\n var code = varName + '= ' + '(' + code.join(', ') + ',)\\n';\n }\n return code;\n}\n\nexport const tuple_create_with_text2 = function (_, generator) {\n var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),\n Blockly.Variables.NAME_TYPE);\n //var size=window.parseFloat(this.getFieldValue('SIZE'));\n var text = this.getFieldValue('TEXT');\n //generator.definitions_['var_declare'+varName] = varName+'= '+ '(' + text + ')\\n';\n var code = varName + '= ' + '(' + text + ')\\n';\n return code;\n}\n\nexport const tuple_create_with_text_return = function (_, generator) {\n var text = this.getFieldValue('TEXT');\n var code = '(' + text + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const tuple_getIndex = function (_, generator) {\n // Indexing into a list is the same as indexing into a string.\n var varName = generator.valueToCode(this, 'TUP', generator.ORDER_ASSIGNMENT) || '0';\n var argument0 = generator.valueToCode(this, 'AT',\n generator.ORDER_ADDITIVE) || '1';\n if (argument0.match(/^\\d+$/)) {\n // If the index is a naked number, decrement it right now.\n argument0 = parseInt(argument0, 10);\n }\n // else {\n // If the index is dynamic, decrement it in code.\n // argument0;\n // }\n var code = varName + '[' + argument0 + ']';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const tuple_length = function (_, generator) {\n var varName = generator.valueToCode(this, 'TUP', generator.ORDER_ASSIGNMENT) || '0';\n var code = 'len(' + varName + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const tuple_del = function (_, generator) {\n var varName = generator.valueToCode(this, 'TUP', generator.ORDER_ASSIGNMENT) || '0';\n var code = 'del ' + varName + '\\n';\n return code;\n}\n\nexport const tuple_join = function (_, generator) {\n var varName1 = generator.valueToCode(this, 'TUP1', generator.ORDER_ASSIGNMENT) || '0';\n var varName2 = generator.valueToCode(this, 'TUP2', generator.ORDER_ASSIGNMENT) || '0';\n var code = varName1 + \" + \" + varName2;\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const tuple_max = function (_, generator) {\n var varname = generator.valueToCode(this, 'TUP', generator.ORDER_ASSIGNMENT) || '0';\n var maxmin = this.getFieldValue('DIR');\n var code = maxmin + \"(\" + varname + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const tuple_change_to = function (_, generator) {\n var op = this.getFieldValue('OP');\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n var code = op + '(' + varName + ')\\n';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const tuple_find = function (_, generator) {\n var op = this.getFieldValue('OP');\n var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';\n var argument = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT) || '0';\n if (op == 'INDEX')\n var code = varName + '.index(' + argument + ')';\n else if (op == 'COUNT')\n var code = varName + '.count(' + argument + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const tuple_trig = function (a, generator) {\n var b = a.getFieldValue(\"OP\"), c;\n generator.definitions_['import_math'] = \"import math\";\n a = generator.valueToCode(a, 'data', generator.ORDER_NONE)\n switch (b) {\n case \"LEN\":\n c = \"len(\" + a + \")\";\n break;\n case \"SUM\":\n c = \"sum(\" + a + \")\";\n break;\n case \"MIN\":\n c = \"min(\" + a + \")\";\n break;\n case \"MAX\":\n c = \"max(\" + a + \")\";\n break;\n case 'AVERAGE':\n // generator.definitions_['from_numbers_import_Number'] =\n // 'from numbers import Number';\n var functionName = generator.provideFunction_(\n 'math_mean',\n // This operation excludes null and values that aren't int or float:',\n // math_mean([null, null, \"aString\", 1, 9]) == 5.0.',\n ['def ' + generator.FUNCTION_NAME_PLACEHOLDER_ + '(myList):',\n ' localList = [e for e in myList if type(e) == int or type(e) == float]',\n ' if not localList: return',\n ' return float(sum(localList)) / len(localList)']);\n c = functionName + '(' + a + ')';\n break;\n case 'MEDIAN':\n // generator.definitions_['from_numbers_import_Number'] =\n // 'from numbers import Numberd';\n var functionName = generator.provideFunction_(\n 'math_median',\n // This operation excludes null values:\n // math_median([null, null, 1, 3]) == 2.0.\n ['def ' + generator.FUNCTION_NAME_PLACEHOLDER_ + '(myList):',\n ' localList = sorted([e for e in myList if type(e) == int or type(e) == float])',\n ' if not localList: return',\n ' if len(localList) % 2 == 0:',\n ' return (localList[len(localList) // 2 - 1] + ' +\n 'localList[len(localList) // 2]) / 2.0',\n ' else:',\n ' return localList[(len(localList) - 1) // 2]']);\n c = functionName + '(' + a + ')';\n break;\n case 'MODE':\n var functionName = generator.provideFunction_(\n 'math_modes',\n // As a list of numbers can contain more than one mode,\n // the returned result is provided as an array.\n // Mode of [3, 'x', 'x', 1, 1, 2, '3'] -> ['x', 1].\n ['def ' + generator.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 ' +\n '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 c = functionName + '(' + a + ')';\n break;\n case 'STD_DEV':\n generator.definitions_['import_math'] = 'import math';\n var functionName = generator.provideFunction_(\n 'math_standard_deviation',\n ['def ' + generator.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 c = functionName + '(' + a + ')';\n break;\n default:\n throw 'Unknown operator: ' + b;\n }\n if (c)\n return [c, generator.ORDER_FUNCTION_CALL];\n\n}\n\nexport const tuple_getSublist = function (block, generator) {\n // Get sublist.\n var list = generator.valueToCode(block, 'LIST',\n generator.ORDER_MEMBER) || '[]';\n var where1 = block.getFieldValue('WHERE1');\n var where2 = block.getFieldValue('WHERE2');\n switch (where1) {\n case 'FROM_START':\n var at1 = generator.getAdjustedInt(block, 'AT1');\n if (at1 == '0') {\n at1 = '';\n }\n break;\n case 'FROM_END':\n var at1 = generator.getAdjustedInt(block, 'AT1', 1, true);\n break;\n case 'FIRST':\n var at1 = '0';\n break;\n default:\n throw 'Unhandled option (lists_getSublist)';\n }\n switch (where2) {\n case 'FROM_START':\n var at2 = generator.getAdjustedInt(block, 'AT2', 1);\n at2 = at2 - 1;\n break;\n case 'FROM_END':\n var at2 = generator.getAdjustedInt(block, 'AT2', 1, true);\n // Ensure that if the result calculated is 0 that sub-sequence will\n // include all elements as expected.\n if (!Blockly.isNumber(String(at2))) {\n generator.definitions_['import_sys'] = 'import sys';\n at2 += ' or sys.maxsize';\n } else if (at2 == '0') {\n at2 = '';\n }\n break;\n case 'LAST':\n var at2 = '-1';\n break;\n default:\n throw 'Unhandled option (lists_getSublist)';\n }\n var code = list + '[' + at1 + ' : ' + at2 + ']';\n return [code, generator.ORDER_MEMBER];\n}\n\nexport const tuple_create_with_noreturn = function (_, generator) {\n // Create a list with any number of elements of any type.\n var code = new Array(this.itemCount_);\n var default_value = '0';\n\n\n for (var n = 0; n < this.itemCount_; n++) {\n\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || default_value;\n }\n // if (this.itemCount_!=1){\n // generator.definitions_['var_declare'+varName] = varName+'= '+ '(' + code.join(', ') + ')\\n';}\n // else {\n // generator.definitions_['var_declare'+varName] = varName+'= '+ '(' + code.join(', ') + ',)\\n';}\n if (this.itemCount_ != 1) {\n var code = '(' + code.join(', ') + ')';\n }\n else {\n var code = '(' + code.join(', ') + ',)';\n }\n\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const tuple_get_sublist = function (_, generator) {\n // Get sublist.\n var list = generator.valueToCode(this, 'LIST', generator.ORDER_ADDITIVE) || '0';\n var at1 = generator.valueToCode(this, 'AT1', generator.ORDER_ADDITIVE) || '0';\n var at2 = generator.valueToCode(this, 'AT2', generator.ORDER_ADDITIVE) || '0';\n var code = list + '[' + at1 + ' : ' + at2 + ']';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const tuple_get_random_item = function (_, generator) {\n generator.definitions_['import_random'] = 'import random';\n var varName = generator.valueToCode(this, 'TUP', generator.ORDER_ADDITIVE) || 'mytup';\n var code = 'random.choice(' + varName + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const tuple_totuple = function (_, generator) {\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'\n return ['tuple(' + str + ')', generator.ORDER_ATOMIC];\n}\n\nexport const tuple_input = function (_, generator) {\n var text = generator.getFieldValue('CONTENT');\n var code = '(' + text + ')';\n return [code, generator.ORDER_ATOMIC];\n}","/**\n * @license\n * Visual Blocks Language\n *\n * Copyright 2012 Google Inc.\n * https://developers.google.com/blockly/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Generating Python for utility blocks.\n * @author acbart@vt.edu (Austin Cory Bart)\n */\n\nexport const raw_block = function (block) {\n var code = block.getFieldValue('TEXT') + \"\\n\";\n return code;\n}\n\nexport const raw_expression = function (block, generator) {\n var code = block.getFieldValue('TEXT');\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const raw_empty = function (block, generator) {\n var code = generator.valueToCode(block, 'VALUE',\n generator.ORDER_ATOMIC) || '';\n return code + \"\\n\";\n}\n\nexport const raw_table = function () {\n //var code = block.getFieldValue('TEXT')+\"\\n\";\n return '';//code;\n}\n\nexport const type_check = function (block, generator) {\n var value = generator.valueToCode(block, 'VALUE',\n generator.ORDER_MEMBER) || '___';\n var code = 'type(' + value + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const function_call = function (block, generator) {\n var name = block.getFieldValue('NAME');\n var hasReturn = block.hasReturn_;\n var args = new Array(block.itemCount_);\n for (var n = 0; n < block.itemCount_; n++) {\n args[n] = generator.valueToCode(block, 'ARGUMENT' + n,\n generator.ORDER_NONE) || '___';\n }\n var code = name + '(' + args.join(', ') + ')';\n if (hasReturn) {\n return [code, generator.ORDER_ATOMIC];\n }\n return code + '\\n';\n}\n\nexport const attribute_access = function (block, generator) {\n var value_module = generator.valueToCode(block, 'MODULE', generator.ORDER_ATOMIC);\n var value_name = generator.valueToCode(block, 'NAME', generator.ORDER_ATOMIC);\n //去除掉两端的括号,如(val()) --> val()\n value_name = value_name.substring(1, value_name.length - 1);\n // TODO: Assemble JavaScript into code variable.\n var code = value_module + '.' + value_name;\n // TODO: Change ORDER_NONE to the correct strength.\n return [code, generator.ORDER_NONE];\n}","import * as Blockly from 'blockly/core';\n\nexport const variables_get = function (_, generator) {\n // Variable getter.\n var code = generator.variableDB_.getName(this.getFieldValue('VAR'),\n Blockly.Variables.NAME_TYPE);\n return [code, generator.ORDER_ATOMIC];\n}\n\n// export const variables_declare = function() {\n// var dropdown_type = this.getFieldValue('TYPE');\n// var argument0;\n// //TODO: settype to variable\n// argument0 = generator.valueToCode(this, 'VALUE',generator.ORDER_ASSIGNMENT) || 'None';\n// var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),\n// Blockly.Variables.NAME_TYPE);\n\n// if (dropdown_type === 'number')\n// generator.definitions_['var_declare' + varName] = 'let ' + ' ' + varName + ' = 0;';\n// else if(dropdown_type === 'string')\n// generator.definitions_['var_declare' + varName] = 'let ' + ' ' + varName + ' = \\'\\';';\n// else if(dropdown_type === 'boolean')\n// generator.definitions_['var_declare' + varName] = 'let ' + ' ' + varName + ' = true;';\n// else if(dropdown_type.startsWith('Array'))\n// generator.definitions_['var_declare' + varName] = 'let ' + varName + ':' + dropdown_type + ' = [];';\n\n// if(generator.setups_['var_declare' + varName] === undefined) {\n// generator.setups_['var_declare' + varName] = varName + ' = ' + argument0 + '\\n';\n// }else {\n// }\n// return '';\n// }\n\nexport const variables_set = function (_, generator) {\n // Variable setter.\n if (this.getFieldValue('VAR') == \"\") {\n return \" = None\\n\";\n }\n var argument0 = generator.valueToCode(this, 'VALUE',\n generator.ORDER_ASSIGNMENT) || 'None';\n var varName = generator.variableDB_.getName(this.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);\n return varName + ' = ' + argument0 + '\\n';\n}\n\nexport const variables_change = function (_, generator) {\n // Variable setter.\n var operator = this.getFieldValue('OP');\n var varName = generator.valueToCode(this, 'MYVALUE', generator.ORDER_ATOMIC) || 'None';\n if (operator == 'bytes') { var code = operator + '(' + varName + ',\"UTF-8\")'; }\n else { var code = operator + '(' + varName + ')'; }\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const variables_global = function (_, generator) {\n var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || 'None';\n var code = \"global \" + str + '\\n';\n return code;\n}\n\n// ok\nexport const controls_type = function (_, generator) {\n var data = generator.valueToCode(this, 'DATA', generator.ORDER_ATOMIC) || 'None'\n var code = 'type(' + data + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const controls_typeLists = function (_, generator) {\n //generator.definitions_['import_microbit_*'] = 'from microbit import *';\n var type = this.getFieldValue('type');\n // generator.definitions_['func_type' + type] = code;\n return [type, generator.ORDER_ATOMIC];\n}\n\nexport const lists_zip = function (_, generator) {\n var code = new Array(this.itemCount_);\n var default_value = '[]';\n for (var n = 0; n < this.itemCount_; n++) {\n code[n] = generator.valueToCode(this, 'ADD' + n,\n generator.ORDER_NONE) || default_value;\n }\n var code = 'zip(' + code.join(', ') + ')';\n return [code, generator.ORDER_ATOMIC];\n}\n\nexport const unpack_iterable_object = function (_, generator) {\n const varName = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '[]';\n const type = this.getFieldValue('TYPE');\n const code = `${type}(${varName})`;\n return [code, generator.ORDER_ATOMIC];\n}","/**\n * @license\n * Visual Blocks Editor\n *\n * Copyright 2012 Google Inc.\n * https://developers.google.com/blockly/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utility functions for handling variables and procedure names.\n * @author fraser@google.com (Neil Fraser)\n */\nimport Variables from './variables';\n\n/**\n * Class for a database of entity names (variables, functions, etc).\n * @param {string} reservedWords A comma-separated string of words that are\n * illegal for use as names in a language (e.g. 'new,if,this,...').\n * @param {string=} opt_variablePrefix Some languages need a '$' or a namespace\n * before all variable names.\n * @constructor\n */\nclass Names {\n constructor(reservedWords, opt_variablePrefix) {\n this.variablePrefix_ = opt_variablePrefix || '';\n this.reservedDict_ = Object.create(null);\n if (reservedWords) {\n var splitWords = reservedWords.split(',');\n for (var i = 0; i < splitWords.length; i++) {\n this.reservedDict_[splitWords[i]] = true;\n }\n }\n this.reset();\n }\n /**\n * Do the given two entity names refer to the same entity?\n * Blockly names are case-insensitive.\n * @param {string} name1 First name.\n * @param {string} name2 Second name.\n * @return {boolean} True if names are the same.\n */\n static equals(name1, name2) {\n return name1.toLowerCase() == name2.toLowerCase();\n }\n /**\n * When JavaScript (or most other languages) is generated, variable 'foo' and\n * procedure 'foo' would collide. However, Blockly has no such problems since\n * variable get 'foo' and procedure call 'foo' are unambiguous.\n * Therefore, Blockly keeps a separate type name to disambiguate.\n * getName('foo', 'variable') -> 'foo'\n * getName('foo', 'procedure') -> 'foo2'\n */\n /**\n * Empty the database and start from scratch. The reserved words are kept.\n */\n reset() {\n this.db_ = Object.create(null);\n this.dbReverse_ = Object.create(null);\n this.variableMap_ = null;\n }\n /**\n * Set the variable map that maps from variable name to variable object.\n * @param {!Blockly.VariableMap} map The map to track.\n * @package\n */\n setVariableMap(map) {\n this.variableMap_ = map;\n }\n /**\n * Get the name for a user-defined variable, based on its ID.\n * This should only be used for variables of type Variables.NAME_TYPE.\n * @param {string} id The ID to look up in the variable map.\n * @return {?string} The name of the referenced variable, or null if there was\n * no variable map or the variable was not found in the map.\n * @private\n */\n getNameForUserVariable_(id) {\n if (!this.variableMap_) {\n /*\n console.log('Deprecated call to Names.prototype.getName without ' +\n 'defining a variable map. To fix, add the folowing code in your ' +\n 'generator\\'s init() function:\\n' +\n 'Blockly.YourGeneratorName.variableDB_.setVariableMap(' +\n 'workspace.getVariableMap());');\n */\n return null;\n }\n var variable = this.variableMap_.getVariableById(id);\n if (variable) {\n return variable.name;\n }\n return null;\n }\n /**\n * Convert a Blockly entity name to a legal exportable entity name.\n * @param {string} name The Blockly entity name (no constraints).\n * @param {string} type The type of entity in Blockly\n * ('VARIABLE', 'PROCEDURE', 'BUILTIN', etc...).\n * @return {string} An entity name that is legal in the exported language.\n */\n getName(name, type) {\n if (type == Variables.NAME_TYPE) {\n var varName = this.getNameForUserVariable_(name);\n if (varName) {\n name = varName;\n }\n }\n var normalized = name.toLowerCase() + '_' + type;\n\n var isVarType = type == Variables.NAME_TYPE ||\n type == Names.DEVELOPER_VARIABLE_TYPE;\n\n var prefix = isVarType ? this.variablePrefix_ : '';\n if (normalized in this.db_) {\n return prefix + this.db_[normalized];\n }\n var safeName = this.getDistinctName(name, type);\n this.db_[normalized] = safeName.substr(prefix.length);\n return safeName;\n }\n /**\n * Convert a Blockly entity name to a legal exportable entity name.\n * Ensure that this is a new name not overlapping any previously defined name.\n * Also check against list of reserved words for the current language and\n * ensure name doesn't collide.\n * @param {string} name The Blockly entity name (no constraints).\n * @param {string} type The type of entity in Blockly\n * ('VARIABLE', 'PROCEDURE', 'BUILTIN', etc...).\n * @return {string} An entity name that is legal in the exported language.\n */\n getDistinctName(name, type) {\n var safeName = this.safeName_(name);\n var i = '';\n while (this.dbReverse_[safeName + i] ||\n (safeName + i) in this.reservedDict_) {\n // Collision with existing name. Create a unique name.\n i = i ? i + 1 : 2;\n }\n safeName += i;\n this.dbReverse_[safeName] = true;\n var isVarType = type == Variables.NAME_TYPE ||\n type == Names.DEVELOPER_VARIABLE_TYPE;\n var prefix = isVarType ? this.variablePrefix_ : '';\n return prefix + safeName;\n }\n /**\n * Given a proposed entity name, generate a name that conforms to the\n * [_A-Za-z][_A-Za-z0-9]* format that most languages consider legal for\n * variables.\n * @param {string} name Potentially illegal entity name.\n * @return {string} Safe entity name.\n * @private\n */\n safeName_(name) {\n if (!name) {\n name = 'unnamed';\n } else {\n // Unfortunately names in non-latin characters will look like\n // _E9_9F_B3_E4_B9_90 which is pretty meaningless.\n // https://github.com/google/blockly/issues/1654\n name = encodeURI(name.replace(/ /g, '_')).replace(/[^,\\w]/g, '_');\n // Most languages don't allow names with leading numbers.\n if ('0123456789'.indexOf(name[0]) != -1) {\n name = 'my_' + name;\n }\n }\n return name;\n }\n}\n\n/**\n * Constant to separate developer variable names from user-defined variable\n * names when running generators.\n * A developer variable will be declared as a global in the generated code, but\n * will never be shown to the user in the workspace or stored in the variable\n * map.\n */\nNames.DEVELOPER_VARIABLE_TYPE = 'DEVELOPER_VARIABLE';\n\nexport default Names;","/**\n * @license\n * Copyright 2012 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utility functions for handling procedures.\n * @author fraser@google.com (Neil Fraser)\n */\nimport * as Blockly from 'blockly/core';\n\nconst Procedures = {};\n\n/**\n * Constant to separate procedure names from variables and generated functions\n * when running generators.\n * @deprecated Use Blockly.PROCEDURE_CATEGORY_NAME\n */\nProcedures.NAME_TYPE = Blockly.PROCEDURE_CATEGORY_NAME;\n\n/**\n * Find all user-created procedure definitions in a workspace.\n * @param {!Blockly.Workspace} root Root workspace.\n * @return {!Array.>} Pair of arrays, the\n * first contains procedures without return variables, the second with.\n * Each procedure is defined by a three-element list of name, parameter\n * list, and return value boolean.\n */\nProcedures.allProcedures = function (root) {\n var blocks = root.getAllBlocks(false);\n var proceduresReturn = [];\n var proceduresNoReturn = [];\n for (var i = 0; i < blocks.length; i++) {\n if (blocks[i].getProcedureDef) {\n var tuple = blocks[i].getProcedureDef();\n if (tuple) {\n if (tuple[2]) {\n proceduresReturn.push(tuple);\n } else {\n proceduresNoReturn.push(tuple);\n }\n }\n }\n }\n proceduresNoReturn.sort(Procedures.procTupleComparator_);\n proceduresReturn.sort(Procedures.procTupleComparator_);\n return [proceduresNoReturn, proceduresReturn];\n};\n\n/**\n * Comparison function for case-insensitive sorting of the first element of\n * a tuple.\n * @param {!Array} ta First tuple.\n * @param {!Array} tb Second tuple.\n * @return {number} -1, 0, or 1 to signify greater than, equality, or less than.\n * @private\n */\nProcedures.procTupleComparator_ = function (ta, tb) {\n return ta[0].toLowerCase().localeCompare(tb[0].toLowerCase());\n};\n\n/**\n * Ensure two identically-named procedures don't exist.\n * Take the proposed procedure name, and return a legal name i.e. one that\n * is not empty and doesn't collide with other procedures.\n * @param {string} name Proposed procedure name.\n * @param {!Blockly.Block} block Block to disambiguate.\n * @return {string} Non-colliding name.\n */\nProcedures.findLegalName = function (name, block) {\n if (block.isInFlyout) {\n // Flyouts can have multiple procedures called 'do something'.\n return name;\n }\n name = name || Blockly.Msg['UNNAMED_KEY'] || 'unnamed';\n while (!Procedures.isLegalName_(name, block.workspace, block)) {\n // Collision with another procedure.\n var r = name.match(/^(.*?)(\\d+)$/);\n if (!r) {\n name += '2';\n } else {\n name = r[1] + (parseInt(r[2], 10) + 1);\n }\n }\n return name;\n};\n\n/**\n * Does this procedure have a legal name? Illegal names include names of\n * procedures already defined.\n * @param {string} name The questionable name.\n * @param {!Blockly.Workspace} workspace The workspace to scan for collisions.\n * @param {Blockly.Block=} opt_exclude Optional block to exclude from\n * comparisons (one doesn't want to collide with oneself).\n * @return {boolean} True if the name is legal.\n * @private\n */\nProcedures.isLegalName_ = function (name, workspace, opt_exclude) {\n return !Procedures.isNameUsed(name, workspace, opt_exclude);\n};\n\n/**\n * Return if the given name is already a procedure name.\n * @param {string} name The questionable name.\n * @param {!Blockly.Workspace} workspace The workspace to scan for collisions.\n * @param {Blockly.Block=} opt_exclude Optional block to exclude from\n * comparisons (one doesn't want to collide with oneself).\n * @return {boolean} True if the name is used, otherwise return false.\n */\nProcedures.isNameUsed = function (name, workspace, opt_exclude) {\n var blocks = workspace.getAllBlocks(false);\n // Iterate through every block and check the name.\n for (var i = 0; i < blocks.length; i++) {\n if (blocks[i] == opt_exclude) {\n continue;\n }\n if (blocks[i].getProcedureDef) {\n var procName = blocks[i].getProcedureDef();\n if (Blockly.Names.equals(procName[0], name)) {\n return true;\n }\n }\n }\n return false;\n};\n\n/**\n * Rename a procedure. Called by the editable field.\n * @param {string} name The proposed new name.\n * @return {string} The accepted name.\n * @this {Blockly.Field}\n */\nProcedures.rename = function (name) {\n // Strip leading and trailing whitespace. Beyond this, all names are legal.\n name = name.trim();\n\n var legalName = Procedures.findLegalName(name, this.getSourceBlock());\n var oldName = this.getValue();\n if (oldName != name && oldName != legalName) {\n // Rename any callers.\n var blocks = this.getSourceBlock().workspace.getAllBlocks(false);\n for (var i = 0; i < blocks.length; i++) {\n if (blocks[i].renameProcedure) {\n blocks[i].renameProcedure(oldName, legalName);\n }\n }\n }\n return legalName;\n};\n\n/**\n * Construct the blocks required by the flyout for the procedure category.\n * @param {!Blockly.Workspace} workspace The workspace containing procedures.\n * @return {!Array.} Array of XML block elements.\n */\nProcedures.flyoutCategory = function (workspace) {\n var xmlList = [];\n if (Blockly.Blocks['procedures_defnoreturn']) {\n // \n // do something\n // \n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', 'procedures_defnoreturn');\n block.setAttribute('gap', 16);\n var nameField = Blockly.utils.xml.createElement('field');\n nameField.setAttribute('name', 'NAME');\n nameField.appendChild(Blockly.utils.xml.createTextNode(\n Blockly.Msg['PROCEDURES_DEFNORETURN_PROCEDURE']));\n block.appendChild(nameField);\n xmlList.push(block);\n }\n if (Blockly.Blocks['procedures_defreturn']) {\n // \n // do something\n // \n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', 'procedures_defreturn');\n block.setAttribute('gap', 16);\n var nameField = Blockly.utils.xml.createElement('field');\n nameField.setAttribute('name', 'NAME');\n nameField.appendChild(Blockly.utils.xml.createTextNode(\n Blockly.Msg['PROCEDURES_DEFRETURN_PROCEDURE']));\n block.appendChild(nameField);\n xmlList.push(block);\n }\n if (Blockly.Blocks['procedures_return']) {\n // \n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', 'procedures_return');\n block.setAttribute('gap', 16);\n xmlList.push(block);\n }\n if (Blockly.Blocks['procedures_ifreturn']) {\n // \n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', 'procedures_ifreturn');\n block.setAttribute('gap', 16);\n xmlList.push(block);\n }\n if (xmlList.length) {\n // Add slightly larger gap between system blocks and user calls.\n xmlList[xmlList.length - 1].setAttribute('gap', 24);\n }\n\n function populateProcedures(procedureList, templateName) {\n for (var i = 0; i < procedureList.length; i++) {\n var name = procedureList[i][0];\n var args = procedureList[i][1];\n // \n // \n // \n // \n // \n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', templateName);\n block.setAttribute('gap', 16);\n var mutation = Blockly.utils.xml.createElement('mutation');\n mutation.setAttribute('name', name);\n block.appendChild(mutation);\n for (var j = 0; j < args.length; j++) {\n var arg = Blockly.utils.xml.createElement('arg');\n arg.setAttribute('name', args[j]);\n mutation.appendChild(arg);\n }\n xmlList.push(block);\n }\n }\n\n var tuple = Procedures.allProcedures(workspace);\n populateProcedures(tuple[0], 'procedures_callnoreturn');\n populateProcedures(tuple[1], 'procedures_callreturn');\n return xmlList;\n};\n\n/**\n * Find all the callers of a named procedure.\n * @param {string} name Name of procedure.\n * @param {!Blockly.Workspace} workspace The workspace to find callers in.\n * @return {!Array.} Array of caller blocks.\n */\nProcedures.getCallers = function (name, workspace) {\n var callers = [];\n var blocks = workspace.getAllBlocks(false);\n // Iterate through every block and check the name.\n for (var i = 0; i < blocks.length; i++) {\n if (blocks[i].getProcedureCall) {\n var procName = blocks[i].getProcedureCall();\n // Procedure name may be null if the block is only half-built.\n if (procName && Blockly.Names.equals(procName, name)) {\n callers.push(blocks[i]);\n }\n }\n }\n return callers;\n};\n\n/**\n * When a procedure definition changes its parameters, find and edit all its\n * callers.\n * @param {!Blockly.Block} defBlock Procedure definition block.\n */\nProcedures.mutateCallers = function (defBlock) {\n const oldRecordUndo = Blockly.Events.getRecordUndo();\n const procedureBlock = defBlock;\n const name = procedureBlock.getProcedureDef()[0];\n const xmlElement = defBlock.mutationToDom(true);\n const callers = Blockly.Procedures.getCallers(name, defBlock.workspace);\n for (let i = 0, caller; (caller = callers[i]); i++) {\n const oldMutationDom = caller.mutationToDom();\n const oldMutation = oldMutationDom && Blockly.utils.xml.domToText(oldMutationDom);\n if (caller.domToMutation) {\n caller.domToMutation(xmlElement);\n }\n const newMutationDom = caller.mutationToDom();\n const newMutation = newMutationDom && Blockly.utils.xml.domToText(newMutationDom);\n if (oldMutation !== newMutation) {\n // Fire a mutation on every caller block. But don't record this as an\n // undo action since it is deterministically tied to the procedure's\n // definition mutation.\n Blockly.Events.setRecordUndo(false);\n Blockly.Events.fire(\n new (Blockly.Events.get(Blockly.Events.BLOCK_CHANGE))(\n caller,\n 'mutation',\n null,\n oldMutation,\n newMutation,\n ),\n );\n Blockly.Events.setRecordUndo(oldRecordUndo);\n }\n }\n};\n\n/**\n * Find the definition block for the named procedure.\n * @param {string} name Name of procedure.\n * @param {!Blockly.Workspace} workspace The workspace to search.\n * @return {Blockly.Block} The procedure definition block, or null not found.\n */\nProcedures.getDefinition = function (name, workspace) {\n // Assume that a procedure definition is a top block.\n var blocks = workspace.getTopBlocks(false);\n for (var i = 0; i < blocks.length; i++) {\n if (blocks[i].getProcedureDef) {\n var tuple = blocks[i].getProcedureDef();\n if (tuple && Blockly.Names.equals(tuple[0], name)) {\n return blocks[i];\n }\n }\n }\n return null;\n};\n\nexport default Procedures;","/**\n * @license\n * Visual Blocks Editor\n *\n * Copyright 2012 Google Inc.\n * https://developers.google.com/blockly/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utility functions for handling variables.\n * @author fraser@google.com (Neil Fraser)\n */\n\nimport * as Blockly from 'blockly/core';\n\nconst Variables = {};\n\n/**\n * Category to separate variable names from procedures and generated functions.\n */\nVariables.NAME_TYPE = 'VARIABLE';\n\n/**\n * Find all user-created variables.\n * @param {!Blockly.Block|!Blockly.Workspace} root Root block or workspace.\n * @return {!Array.} Array of variable names.\n */\nVariables.allVariables = function (root) {\n var blocks;\n if (root.getDescendants) {\n // Root is Block.\n blocks = root.getDescendants();\n } else if (root.getAllBlocks) {\n // Root is Workspace.\n blocks = root.getAllBlocks();\n } else {\n throw 'Not Block or Workspace: ' + root;\n }\n var variableHash = Object.create(null);\n // Iterate through every block and add each variable to the hash.\n for (var x = 0; x < blocks.length; x++) {\n var blockVariables = blocks[x].getVars();\n for (var y = 0; y < blockVariables.length; y++) {\n var varName = blockVariables[y];\n // Variable name may be null if the block is only half-built.\n if (varName) {\n variableHash[varName.toLowerCase()] = varName;\n }\n }\n }\n // Flatten the hash into a list.\n var variableList = [];\n for (var name in variableHash) {\n variableList.push(variableHash[name]);\n }\n return variableList;\n};\n\n/**\n * Find all instances of the specified variable and rename them.\n * @param {string} oldName Variable to rename.\n * @param {string} newName New variable name.\n * @param {!Blockly.Workspace} workspace Workspace rename variables in.\n */\nVariables.renameVariable = function (oldName, newName, workspace) {\n Blockly.Events.setGroup(true);\n var blocks = workspace.getAllBlocks();\n // Iterate through every block.\n for (var i = 0; i < blocks.length; i++) {\n blocks[i].renameVar(oldName, newName);\n }\n Blockly.Events.setGroup(false);\n};\n\n/**\n * Construct the blocks required by the flyout for the variable category.\n * @param {!Blockly.Workspace} workspace The workspace contianing variables.\n * @return {!Array.} Array of XML block elements.\n */\nVariables.flyoutCategory = function (workspace) {\n var variableList = Variables.allVariables(workspace);\n //variableList.sort(goog.string.caseInsensitiveCompare);\n // In addition to the user's variables, we also want to display the default\n // variable name at the top. We also don't want this duplicated if the\n // user has created a variable of the same name.\n // alert(variableList)\n // goog.array.remove(variableList, Blockly.Msg.VARIABLES_DEFAULT_NAME);\n // variableList.unshift(Blockly.Msg.VARIABLES_DEFAULT_NAME);\n\n var xmlList = [];\n\n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', 'variables_global');\n xmlList.push(block);\n\n if (Blockly.Blocks['variables_set']) {\n //增加variables_declare模块\n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', 'variables_set');\n xmlList.push(block);\n }//change tyep\n /*\n if (Blockly.Blocks['variables_change']) {\n //增加variables_declare模块\n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', 'variables_change');\n xmlList.push(block);\n }*/\n if (Blockly.Blocks['variables_change']) {\n //增加variables_declare模块\n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', 'variables_change');\n xmlList.push(block);\n }\n if (Blockly.Blocks['controls_type']) {\n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', 'controls_type');\n xmlList.push(block);\n }\n if (Blockly.Blocks['controls_typeLists']) {\n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', 'controls_typeLists');\n xmlList.push(block);\n }\n if (Blockly.Blocks['lists_zip']) {\n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', 'lists_zip');\n block.setAttribute('inline', 'false');\n var mutation = Blockly.utils.xml.createElement('mutation');\n mutation.setAttribute('items', 2);\n block.appendChild(mutation);\n for (let i = 0; i < 2; i++) {\n let add = Blockly.utils.xml.createElement('value');\n add.setAttribute('name', `ADD${i}`);\n // let childBlock = Blockly.utils.xml.createElement('block');\n // childBlock.setAttribute('type', 'list_many_input');\n // let field = Blockly.utils.xml.createElement('field');\n // let value = Blockly.utils.xml.createTextNode('0,1,2,3');\n // field.setAttribute('name', 'CONTENT');\n // field.appendChild(value);\n // childBlock.appendChild(field);\n // add.appendChild(childBlock);\n block.appendChild(add);\n }\n xmlList.push(block);\n }\n if (Blockly.Blocks['unpack_iterable_object']) {\n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', 'unpack_iterable_object');\n xmlList.push(block);\n }\n for (var i = 0; i < variableList.length; i++) {\n // alert(variableList)\n // if(i==0&& !(Blockly.Python.setups_['variables_set'+''])){\n // \tcontinue;\n // }\n if (Blockly.Blocks['variables_set']) {\n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', 'variables_set');\n if (Blockly.Blocks['variables_get']) {\n block.setAttribute('gap', 8);\n }\n var field = Blockly.utils.xml.createElement('field', null, variableList[i]);\n field.setAttribute('name', 'VAR');\n var name = Blockly.utils.xml.createTextNode(variableList[i]);\n field.appendChild(name);\n block.appendChild(field);\n xmlList.push(block);\n }\n if (Blockly.Blocks['variables_get']) {\n var block = Blockly.utils.xml.createElement('block');\n block.setAttribute('type', 'variables_get');\n if (Blockly.Blocks['variables_set']) {\n block.setAttribute('gap', 24);\n }\n var field = Blockly.utils.xml.createElement('field', null, variableList[i]);\n field.setAttribute('name', 'VAR');\n var name = Blockly.utils.xml.createTextNode(variableList[i]);\n field.appendChild(name);\n block.appendChild(field);\n xmlList.push(block);\n }\n }\n return xmlList;\n};\n\n/**\n* Return a new variable name that is not yet being used. This will try to\n* generate single letter variable names in the range 'i' to 'z' to start with.\n* If no unique name is located it will try 'i' to 'z', 'a' to 'h',\n* then 'i2' to 'z2' etc. Skip 'l'.\n * @param {!Blockly.Workspace} workspace The workspace to be unique in.\n* @return {string} New variable name.\n*/\nVariables.generateUniqueName = function (workspace) {\n var variableList = Variables.allVariables(workspace);\n var newName = '';\n if (variableList.length) {\n var nameSuffix = 1;\n var letters = 'ijkmnopqrstuvwxyzabcdefgh'; // No 'l'.\n var letterIndex = 0;\n var potName = letters.charAt(letterIndex);\n while (!newName) {\n var inUse = false;\n for (var i = 0; i < variableList.length; i++) {\n if (variableList[i].toLowerCase() == potName) {\n // This potential name is already used.\n inUse = true;\n break;\n }\n }\n if (inUse) {\n // Try the next potential name.\n letterIndex++;\n if (letterIndex == letters.length) {\n // Reached the end of the character sequence so back to 'i'.\n // a new suffix.\n letterIndex = 0;\n nameSuffix++;\n }\n potName = letters.charAt(letterIndex);\n if (nameSuffix > 1) {\n potName += nameSuffix;\n }\n } else {\n // We can use the current potential name.\n newName = potName;\n }\n }\n } else {\n newName = 'i';\n }\n return newName;\n};\n\nexport default Variables;","/*\nOverrides for generic Python code generation.\n*/\nimport * as Blockly from 'blockly/core';\nimport Names from './others/names';\n\n/**\n * Python code generator.\n * @type {!Blockly.Generator}\n */\nexport const Python = new Blockly.Generator('Python');\nPython.INDENT = \" \";\n\n/**\n * List of illegal variable names.\n * This is not intended to be a security feature. Blockly is 100% client-side,\n * so bypassing this list is trivial. This is intended to prevent users from\n * accidentally clobbering a built-in object or function.\n * @private\n */\nPython.addReservedWords(\n // import keyword\n // print(','.join(sorted(keyword.kwlist)))\n // https://docs.python.org/3/reference/lexical_analysis.html#keywords\n // https://docs.python.org/2/reference/lexical_analysis.html#keywords\n 'False,None,True,and,as,assert,break,class,continue,def,del,elif,else,' +\n 'except,exec,finally,for,from,global,if,import,in,is,lambda,nonlocal,not,' +\n 'or,pass,print,raise,return,try,while,with,yield,' +\n // https://docs.python.org/3/library/constants.html\n // https://docs.python.org/2/library/constants.html\n 'NotImplemented,Ellipsis,__debug__,quit,exit,copyright,license,credits,' +\n // >>> print(','.join(sorted(dir(__builtins__))))\n // https://docs.python.org/3/library/functions.html\n // https://docs.python.org/2/library/functions.html\n 'ArithmeticError,AssertionError,AttributeError,BaseException,' +\n 'BlockingIOError,BrokenPipeError,BufferError,BytesWarning,' +\n 'ChildProcessError,ConnectionAbortedError,ConnectionError,' +\n 'ConnectionRefusedError,ConnectionResetError,DeprecationWarning,EOFError,' +\n 'Ellipsis,EnvironmentError,Exception,FileExistsError,FileNotFoundError,' +\n 'FloatingPointError,FutureWarning,GeneratorExit,IOError,ImportError,' +\n 'ImportWarning,IndentationError,IndexError,InterruptedError,' +\n 'IsADirectoryError,KeyError,KeyboardInterrupt,LookupError,MemoryError,' +\n 'ModuleNotFoundError,NameError,NotADirectoryError,NotImplemented,' +\n 'NotImplementedError,OSError,OverflowError,PendingDeprecationWarning,' +\n 'PermissionError,ProcessLookupError,RecursionError,ReferenceError,' +\n 'ResourceWarning,RuntimeError,RuntimeWarning,StandardError,' +\n 'StopAsyncIteration,StopIteration,SyntaxError,SyntaxWarning,SystemError,' +\n 'SystemExit,TabError,TimeoutError,TypeError,UnboundLocalError,' +\n 'UnicodeDecodeError,UnicodeEncodeError,UnicodeError,' +\n 'UnicodeTranslateError,UnicodeWarning,UserWarning,ValueError,Warning,' +\n 'ZeroDivisionError,_,__build_class__,__debug__,__doc__,__import__,' +\n '__loader__,__name__,__package__,__spec__,abs,all,any,apply,ascii,' +\n 'basestring,bin,bool,buffer,bytearray,bytes,callable,chr,classmethod,cmp,' +\n 'coerce,compile,complex,copyright,credits,delattr,dict,dir,divmod,' +\n 'enumerate,eval,exec,execfile,exit,file,filter,float,format,frozenset,' +\n 'getattr,globals,hasattr,hash,help,hex,id,input,int,intern,isinstance,' +\n 'issubclass,iter,len,license,list,locals,long,map,max,memoryview,min,' +\n 'next,object,oct,open,ord,pow,print,property,quit,range,raw_input,reduce,' +\n 'reload,repr,reversed,round,set,setattr,slice,sorted,staticmethod,str,' +\n 'sum,super,tuple,type,unichr,unicode,vars,xrange,zip'\n);\n\n/**\n * Order of operation ENUMs.\n * http://docs.python.org/reference/expressions.html#summary\n */\nPython.ORDER_ATOMIC = 0; // 0 \"\" ...\nPython.ORDER_COLLECTION = 1; // tuples, lists, dictionaries\nPython.ORDER_STRING_CONVERSION = 1; // `expression...`\nPython.ORDER_UNARY_POSTFIX = 1; // expr++ expr-- () [] .\nPython.ORDER_UNARY_PREFIX = 2; // -expr !expr ~expr ++expr --expr\nPython.ORDER_MEMBER = 2.1; // . []\nPython.ORDER_FUNCTION_CALL = 2.2; // ()\nPython.ORDER_EXPONENTIATION = 3; // **\nPython.ORDER_UNARY_SIGN = 4; // + -\nPython.ORDER_BITWISE_NOT = 4; // ~\nPython.ORDER_MULTIPLICATIVE = 5; // * / // %\nPython.ORDER_ADDITIVE = 6; // + -\nPython.ORDER_BITWISE_SHIFT = 7; // << >>\nPython.ORDER_BITWISE_AND = 8; // &\nPython.ORDER_BITWISE_XOR = 9; // ^\nPython.ORDER_BITWISE_OR = 10; // |\nPython.ORDER_RELATIONAL = 11; // in, not in, is, is not,\n// <, <=, >, >=, <>, !=, ==\nPython.ORDER_EQUALITY = 11; // == != === !==\nPython.ORDER_LOGICAL_NOT = 12; // not\nPython.ORDER_LOGICAL_AND = 13; // and\nPython.ORDER_LOGICAL_OR = 14; // or\nPython.ORDER_ASSIGNMENT = 14; // = *= /= ~/= %= += -= <<= >>= &= ^= |=\nPython.ORDER_CONDITIONAL = 15; // if else\nPython.ORDER_LAMBDA = 16; // lambda\nPython.ORDER_NONE = 99; // (...)\n\n/**\n * List of outer-inner pairings that do NOT require parentheses.\n * @type {!Array.>}\n */\nPython.ORDER_OVERRIDES = [\n // (foo()).bar -> foo().bar\n // (foo())[0] -> foo()[0]\n [Python.ORDER_FUNCTION_CALL, Python.ORDER_MEMBER],\n // (foo())() -> foo()()\n [Python.ORDER_FUNCTION_CALL, Python.ORDER_FUNCTION_CALL],\n // (foo.bar).baz -> foo.bar.baz\n // (foo.bar)[0] -> foo.bar[0]\n // (foo[0]).bar -> foo[0].bar\n // (foo[0])[1] -> foo[0][1]\n [Python.ORDER_MEMBER, Python.ORDER_MEMBER],\n // (foo.bar)() -> foo.bar()\n // (foo[0])() -> foo[0]()\n [Python.ORDER_MEMBER, Python.ORDER_FUNCTION_CALL],\n\n // not (not foo) -> not not foo\n // [Python.ORDER_LOGICAL_NOT, Python.ORDER_LOGICAL_NOT],\n // a and (b and c) -> a and b and c\n // [Python.ORDER_LOGICAL_AND, Python.ORDER_LOGICAL_AND],\n // a or (b or c) -> a or b or c\n // [Python.ORDER_LOGICAL_OR, Python.ORDER_LOGICAL_OR]\n];\n\nPython.init = function () {\n /**\n * Empty loops or conditionals are not allowed in Python.\n */\n Python.PASS = this.INDENT + 'pass\\n';\n // Create a dictionary of definitions to be printed before the code.\n Python.definitions_ = Object.create(null);\n // Create a dictionary mapping desired function names in definitions_\n // to actual function names (to avoid collisions with user functions).\n Python.functionNames_ = Object.create(null);\n Python.setups_ = Object.create(null);\n Python.loops_ = Object.create(null);\n Python.codeEnd_ = Object.create(null);\n\n if (!Python.variableDB_) {\n Python.variableDB_ = new Names(Python.RESERVED_WORDS_);\n } else {\n Python.variableDB_.reset();\n }\n}\n\nPython.finish = function (code) {\n // Convert the definitions dictionary into a list.\n if (code !== \"\") {\n code = code.replace(/\\n/g, '\\n');\n code = code.replace(/\\n\\s+$/, '\\n');\n }\n var imports = [];\n var definitions_var = []; //变量定义\n var definitions_fun = []; //函数定义\n for (var name in this.definitions_) {\n var def = this.definitions_[name];\n if (name.indexOf('import') === 0) {\n imports.push(def);\n } else if (name.indexOf('var_declare') === 0) {\n definitions_var.push(def);\n } else {\n definitions_fun.push(def);\n }\n }\n if (imports.length) {\n imports.push('\\n\\n');\n }\n if (definitions_var.length) {\n definitions_var.push('\\n\\n');\n }\n if (definitions_fun.length) {\n definitions_fun.push('\\n\\n');\n }\n var functions = [];\n for (var name in Python.functions_) {\n functions.push(Python.functions_[name]);\n }\n if (functions.length) {\n functions.push('\\n\\n');\n }\n var setups = [];\n for (var name in Python.setups_) {\n setups.push(Python.setups_[name]);\n }\n if (setups.length) {\n setups.push('\\n\\n');\n }\n var loops = [];\n for (var name in Python.loops_) {\n loops.push(Python.loops_[name]);\n }\n var codeEnd = [];\n for (var name in Python.codeEnd_) {\n codeEnd.push(Python.codeEnd_[name]);\n }\n if (codeEnd.length !== 0) {\n codeEnd.push('\\n');\n }\n if (loops.length > 0) {\n return imports.join('\\n') + definitions_var.join('\\n') + definitions_fun.join('\\n')\n + functions.join('\\n') + setups.join('') + code + 'while True:\\n' + loops.join('') + codeEnd.join('\\n');\n }\n return imports.join('\\n') + definitions_var.join('\\n') + definitions_fun.join('\\n')\n + functions.join('\\n') + setups.join('') + code + codeEnd.join('\\n');\n}\n\n\n/**\n * Naked values are top-level blocks with outputs that aren't plugged into\n * anything.\n * @param {string} line Line of generated code.\n * @return {string} Legal line of code.\n */\nPython.scrubNakedValue = function (line) {\n return line + '\\n';\n}\n\n/**\n * Encode a string as a properly escaped Python string, complete with quotes.\n * @param {string} string Text to encode.\n * @return {string} Python string.\n * @private\n */\nPython.quote_ = function (string) {\n // Can't use goog.string.quote since % must also be escaped.\n string = string.replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\n/g, '\\\\\\n');\n\n // Follow the CPython behaviour of repr() for a non-byte string.\n var quote = '\\'';\n if (string.indexOf('\\'') !== -1) {\n if (string.indexOf('\"') === -1) {\n quote = '\"';\n } else {\n string = string.replace(/'/g, '\\\\\\'');\n }\n }\n return quote + string + quote;\n}\n\n/**\n * Encode a string as a properly escaped multiline Python string, complete\n * with quotes.\n * @param {string} string Text to encode.\n * @return {string} Python string.\n * @private\n */\nPython.multiline_quote_ = function (string) {\n // Can't use goog.string.quote since % must also be escaped.\n string = string.replace(/'''/g, '\\\\\\'\\\\\\'\\\\\\'');\n return '\\'\\'\\'' + string + '\\'\\'\\'';\n}\n\n/**\n * Common tasks for generating Python from blocks.\n * Handles comments for the specified block and any connected value blocks.\n * Calls any statements following this block.\n * @param {!Blockly.Block} block The current block.\n * @param {string} code The Python code created for this block.\n * @param {boolean=} opt_thisOnly True to generate code for only this statement.\n * @return {string} Python code with comments and subsequent blocks added.\n * @private\n */\nPython.scrub_ = function (block, code, opt_thisOnly) {\n var commentCode = '';\n // Only collect comments for blocks that aren't inline.\n if (!block.outputConnection || !block.outputConnection.targetConnection) {\n // Collect comment for this block.\n var comment = block.getCommentText();\n if (comment) {\n comment = Blockly.utils.string.wrap(comment,\n Python.COMMENT_WRAP - 3);\n commentCode += Python.prefixLines(comment + '\\n', '# ');\n }\n // Collect comments for all value arguments.\n // Don't collect comments for nested statements.\n for (var i = 0; i < block.inputList.length; i++) {\n if (block.inputList[i].type == Blockly.INPUT_VALUE) {\n var childBlock = block.inputList[i].connection.targetBlock();\n if (childBlock) {\n var comment = Python.allNestedComments(childBlock);\n if (comment) {\n commentCode += Python.prefixLines(comment, '# ');\n }\n }\n }\n }\n }\n var nextBlock = block.nextConnection && block.nextConnection.targetBlock();\n var nextCode = opt_thisOnly ? '' : Python.blockToCode(nextBlock);\n return commentCode + code + nextCode;\n}\n\n/**\n * Gets a property and adjusts the value, taking into account indexing, and\n * casts to an integer.\n * @param {!Blockly.Block} block The block.\n * @param {string} atId The property ID of the element to get.\n * @param {number=} opt_delta Value to add.\n * @param {boolean=} opt_negate Whether to negate the value.\n * @return {string|number}\n */\nPython.getAdjustedInt = function (block, atId, opt_delta, opt_negate) {\n var delta = opt_delta || 0;\n if (block.workspace.options.oneBasedIndex) {\n delta--;\n }\n var defaultAtIndex = block.workspace.options.oneBasedIndex ? '1' : '0';\n var atOrder = delta ? Python.ORDER_ADDITIVE :\n Python.ORDER_NONE;\n var at = Python.valueToCode(block, atId, atOrder) || defaultAtIndex;\n\n if (Blockly.isNumber(at)) {\n // If the index is a naked number, adjust it right now.\n at = parseInt(at, 10) + delta;\n if (opt_negate) {\n at = -at;\n }\n } else {\n // If the index is dynamic, adjust it in code.\n if (delta > 0) {\n at = 'int(' + at + ' + ' + delta + ')';\n } else if (delta < 0) {\n at = 'int(' + at + ' - ' + -delta + ')';\n } else {\n at = 'int(' + at + ')';\n }\n if (opt_negate) {\n at = '-' + at;\n }\n }\n return at;\n}","// extracted by mini-css-extract-plugin\nexport {};","module.exports = Blockly;","module.exports = Mixly;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import * as Blockly from 'blockly/core';\nimport { Profile } from 'mixly';\n\nimport {\n PythonVariablesBlocks,\n PythonControlBlocks,\n PythonMathBlocks,\n PythonTextBlocks,\n PythonListsBlocks,\n PythonDictsBlocks,\n PythonLogicBlocks,\n PythonStorageBlocks,\n PythonProceduresBlocks,\n PythonTupleBlocks,\n PythonSetBlocks,\n PythonHtmlBlocks,\n PythonUtilityBlocks,\n PythonVariablesGenerators,\n PythonControlGenerators,\n PythonMathGenerators,\n PythonTextGenerators,\n PythonListsGenerators,\n PythonDictsGenerators,\n PythonLogicGenerators,\n PythonStorageGenerators,\n PythonProceduresGenerators,\n PythonTupleGenerators,\n PythonSetGenerators,\n PythonHtmlGenerators,\n PythonUtilityGenerators,\n Procedures,\n Variables,\n Python\n} from '@mixly/python';\n\nimport {\n MicroPythonActuatorExternBlocks,\n MicroPythonActuatorOnBoardBlocks,\n MicroPythonAISensorBlocks,\n MicroPythonAIBlocks,\n MicroPythonBlynkBlocks,\n MicroPythonCCG1Blocks,\n MicroPythonCEGOBlocks,\n MicroPythonCommunicateBlocks,\n MicroPythonDisplayExternBlocks,\n MicroPythonDisplayOnBoardBlocks,\n MicroPythonFactoryBlocks,\n MicroPythonInputBlocks,\n MicroPythonIotBlocks,\n MicroPythonNetworkBlocks,\n MicroPythonSensorExternBlocks,\n MicroPythonSensorOnBoardBlocks,\n MicroPythonSerialBlocks,\n MicroPythonSystemBlocks,\n MicroPythonWeatherBlocks,\n MicroPythonActuatorExternGenerators,\n MicroPythonActuatorOnBoardGenerators,\n MicroPythonAISensorGenerators,\n MicroPythonAIGenerators,\n MicroPythonBlynkGenerators,\n MicroPythonCCG1Generators,\n MicroPythonCEGOGenerators,\n MicroPythonCommunicateGenerators,\n MicroPythonDisplayExternGenerators,\n MicroPythonDisplayOnBoardGenerators,\n MicroPythonFactoryGenerators,\n MicroPythonInputGenerators,\n MicroPythonIotGenerators,\n MicroPythonNetworkGenerators,\n MicroPythonSensorExternGenerators,\n MicroPythonSensorOnBoardGenerators,\n MicroPythonSerialGenerators,\n MicroPythonSystemGenerators,\n MicroPythonWeatherGenerators\n} from '@mixly/micropython';\n\nimport {\n MicropythonESP32C2Pins,\n MicropythonESP32C2InoutBlocks,\n MicropythonESP32C2MiniG2Blocks,\n MicropythonESP32C2MEGOBlocks,\n MicropythonESP32C2PinsBlocks,\n MicropythonESP32C2InoutGenerators,\n MicropythonESP32C2MiniG2Generators,\n MicropythonESP32C2MEGOGenerators,\n MicropythonESP32C2PinsGenerators\n} from './';\n\nimport './css/color_esp32c3_mixgocc.css';\n\nObject.assign(Blockly.Variables, Variables);\nObject.assign(Blockly.Procedures, Procedures);\nBlockly.Python = Python;\nBlockly.generator = Python;\n\nProfile.default = {};\nObject.assign(Profile, MicropythonESP32C2Pins);\nObject.assign(Profile.default, MicropythonESP32C2Pins['MixGo CC']);\n\nObject.assign(\n Blockly.Blocks,\n PythonVariablesBlocks,\n PythonControlBlocks,\n PythonMathBlocks,\n PythonTextBlocks,\n PythonListsBlocks,\n PythonDictsBlocks,\n PythonLogicBlocks,\n PythonStorageBlocks,\n PythonProceduresBlocks,\n PythonTupleBlocks,\n PythonSetBlocks,\n PythonHtmlBlocks,\n PythonUtilityBlocks,\n MicroPythonInputBlocks,\n MicroPythonSystemBlocks,\n MicroPythonSerialBlocks,\n MicroPythonCommunicateBlocks,\n MicroPythonIotBlocks,\n MicroPythonWeatherBlocks,\n MicroPythonAISensorBlocks,\n MicroPythonSensorOnBoardBlocks,\n MicroPythonSensorExternBlocks,\n MicroPythonNetworkBlocks,\n MicroPythonAIBlocks,\n MicroPythonActuatorOnBoardBlocks,\n MicroPythonActuatorExternBlocks,\n MicroPythonDisplayOnBoardBlocks,\n MicroPythonDisplayExternBlocks,\n MicroPythonFactoryBlocks,\n MicroPythonBlynkBlocks,\n MicroPythonCCG1Blocks,\n MicroPythonCEGOBlocks,\n MicropythonESP32C2InoutBlocks,\n MicropythonESP32C2MiniG2Blocks,\n MicropythonESP32C2MEGOBlocks,\n MicropythonESP32C2PinsBlocks\n);\n\nObject.assign(\n Blockly.Python.forBlock,\n PythonVariablesGenerators,\n PythonControlGenerators,\n PythonMathGenerators,\n PythonTextGenerators,\n PythonListsGenerators,\n PythonDictsGenerators,\n PythonLogicGenerators,\n PythonStorageGenerators,\n PythonProceduresGenerators,\n PythonTupleGenerators,\n PythonSetGenerators,\n PythonHtmlGenerators,\n PythonUtilityGenerators,\n MicroPythonInputGenerators,\n MicroPythonSystemGenerators,\n MicroPythonSerialGenerators,\n MicroPythonCommunicateGenerators,\n MicroPythonIotGenerators,\n MicroPythonWeatherGenerators,\n MicroPythonAISensorGenerators,\n MicroPythonSensorOnBoardGenerators,\n MicroPythonSensorExternGenerators,\n MicroPythonNetworkGenerators,\n MicroPythonAIGenerators,\n MicroPythonActuatorOnBoardGenerators,\n MicroPythonActuatorExternGenerators,\n MicroPythonDisplayOnBoardGenerators,\n MicroPythonDisplayExternGenerators,\n MicroPythonFactoryGenerators,\n MicroPythonBlynkGenerators,\n MicroPythonCCG1Generators,\n MicroPythonCEGOGenerators,\n MicropythonESP32C2InoutGenerators,\n MicropythonESP32C2MiniG2Generators,\n MicropythonESP32C2MEGOGenerators,\n MicropythonESP32C2PinsGenerators\n);"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/boards/default/micropython_esp32c2/styles/main.c30a59f3.css b/boards/default/micropython_esp32c2/styles/main.2265d699.css
similarity index 99%
rename from boards/default/micropython_esp32c2/styles/main.c30a59f3.css
rename to boards/default/micropython_esp32c2/styles/main.2265d699.css
index ddaac934..dd62194d 100644
--- a/boards/default/micropython_esp32c2/styles/main.c30a59f3.css
+++ b/boards/default/micropython_esp32c2/styles/main.2265d699.css
@@ -1,3 +1,6 @@
+/*!*****************************************************************************************************************************************!*\
+ !*** css ../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./css/color_esp32c3_mixgocc.css ***!
+ \*****************************************************************************************************************************************/
div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(1) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAC4jAAAuIwF4pT92AAA4JmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTgtMDctMjFUMjE6MTY6MjIrMDg6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOS0xMC0yNlQxNjo1NTo0NiswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTktMTAtMjZUMTY6NTU6NDYrMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6ZGFjMDQyYmMtODZjZC02MzQwLWExYjItZjA5MTkyOGMzM2Q4PC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOmRhYzA0MmJjLTg2Y2QtNjM0MC1hMWIyLWYwOTE5MjhjMzNkODwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOmRhYzA0MmJjLTg2Y2QtNjM0MC1hMWIyLWYwOTE5MjhjMzNkODwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpkYWMwNDJiYy04NmNkLTYzNDAtYTFiMi1mMDkxOTI4YzMzZDg8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTgtMDctMjFUMjE6MTY6MjIrMDg6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4zMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4zMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4zMjwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4zMjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+z0WRKgAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAADjUlEQVR42sSXT6hVVRTGf9865x4H74U0c1RKEDgJamSTGjUoKgIR1ItOoyzE8ElBIUiFvuebqEnhIKzrn8iKSqiJk6igSQ0LIkdFICj+eUWee/f+Gpx773s+yXevXfFMDpy9z1q//a219tpbtrmbjwYAZ2Y2ra9dPWHpQeEMpAnYD8BAInNM+JfBwJb5kzcCnJ7ZOpOJA4DuwDqR8245zQ/Mb54/dSPAiZlth4VfAr4FfwCsmYDnq8D9oF3C89i7hwocXKbAyZn2UdALNq9LfmsCwQULzBoUf4p8VE47hgocPHUTwDugF232Avsk+uEb068MBrtxZLRO4jxwxOblwbz2wc6tAYbGxoq0yQ66qUUoUxU1ku9V5tK1YnrfX+XU3sJNbu94+8jKAONCdFOLlAuyg6qop6qiXoW4lHPcY6lGXB8qMNsZDQBA4ZGi0UslopkbRZ6P8CspxzOYsyI30Y9mUVtmT46hgEZLB8k4i14usGNDWfa+C4gMbzrrDQwqGnsjK6Doex4jHYxIqSCUicjHQdttvibzlENWeDQAhRuADLbWAVNAb8RqaNn6FfMP0mfAc5g/LB6X/NvW2RMjKLC4Jz4r+HxC2+IVw672XOf9FQF6qSQ5KCKvaxXd3aAe0L2NftAF/u4reMXiq/Zs58cVNiKTckHdqygiUbXqZmebTAtktBD0a1syraI7uT41DsBiFUyqSRoj2nOd0ZJwCJDvAkAoD1Rfa8dO4BqQ+8kUt9GtpoCLhi/bc50fVlYggWwIPUrB90xMA15rz3X2r1gFTXMpkRJV0X1M8jlQaXMI2Cl5NXDfGKVZGV0ELrTnOt1bA2AyQbfXVEEZXZBWh/wN8JDNAeBV4bGKw/3JI+XAQIWcg6qsm58NEX4XeB64rpwfBn4mmqT1CtUyHkA/Y3uppIi02BVlJLYLjueszcBHtpBMRL4h2MO3+oDjACw9kBg1q+sbU2O9rHtVyg5HZMroUUZvuQrTBueIv5Z+3Db74e0fyQahGOyUA+eSFyEHcyPOFyldqOp6gyXo+9t4+Mz/P5QaIbzoeFmtAaSiuL6qrn9fffXqAzliOPzksbOTOpb7v3uEIRfF5aquL08vLKxdCvD0e1/c8YtJDZCj2F/V9U/TCwuP3BLg9J6tM9mTv5pZokjp06quN1qLpjce+njZ5XTPpvV1nujlVP2CbQl/Ivvc0sGbrmZ36/l3AHnYit+0RI/wAAAAAElFTkSuQmCC) no-repeat;
background-size: 100% auto;
@@ -374,3 +377,5 @@ div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(12) > div.blo
background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAC4jAAAuIwF4pT92AAA4JmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTgtMDctMjFUMjE6MTY6MjErMDg6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOS0xMC0yNlQxNjo1NToyNyswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTktMTAtMjZUMTY6NTU6MjcrMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6NzFmZjM2OWUtMzY0NS0zMzQ5LWJlZmUtZjhiMTM1ZWVmY2NjPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjcxZmYzNjllLTM2NDUtMzM0OS1iZWZlLWY4YjEzNWVlZmNjYzwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjcxZmYzNjllLTM2NDUtMzM0OS1iZWZlLWY4YjEzNWVlZmNjYzwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo3MWZmMzY5ZS0zNjQ1LTMzNDktYmVmZS1mOGIxMzVlZWZjY2M8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTgtMDctMjFUMjE6MTY6MjErMDg6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4zMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4zMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4zMjwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4zMjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+EjBnGgAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAADnElEQVR42sTXWYiWZRQH8N+QkohBmZm0oM6oNGUUbTC2QOhFw9BmaUZCm1BRjkSmaXXV1MS0kC1UlCbV0FBmKm0XRhdaQTkXlpnaNJZIha3QZlhMN+eN48v3TfPNDHSuzrOd9/+e53/+z/PU9fX1qdFORRMmY1z0fY/deB9bawlWVwOAiViAFpyMEaXxv/Ax3sCz2DNcAMbjScyuMVNrcRP2DQXAtVhV6nsHb+EzfBd9R6ERzZhZmn8dnhsMgEewKLWfxl2x3/3ZOLThhlKsW2sB8HBa8DVmxR/XYo3YiGNSzNsGAmABngl/C2bgQGnOmOifFO2iAn4rzRsZ/Wek2Cv7A3A8dmEUejEdf6TxI3E/rqlSBatxB35I/aOxLcp2P6ZibzUAK4M0cHagL6wFr5c+WiyuK/W34M3UnoH3wl+F6ysBaEBPItyNKcBFWJ/anXgCn0d7Km7GVWnOxdiQ2k8lYjZEhg8CcDs6wj8J28M/OoCNiTSfj81ViHcO3o3t+QVTkg6ciE/DX4IHMoBGPBY1vAnnpaCPYmH4zXg7jY1I+1/YBaETxdpcyptjazdGzB0FgPlYgbG4N+odDsFXOBZduDIFuy+V1UNYnsZewrwg2yT8ndYsC5IuQmcB4M4QjwJMZ/hNiYiz8Vr49ySQhbXh7jT31UTAD1LsF8JfjvYCQE7zrJBbuAxrkrDsCL8niJStJ8gIJyThujyBmRnp/3d7CgAr0FoBwKVxqJSJuRPTSgB2xofLhMuZqwpgaQgMXI3nwz8TH4Z/BV4Of3HB4mSLgwvF3K7wz8JHKfbq8JeiowAwL7IwPgIvSYF7Q8XWRUYKaw/VE+CXpbF1oQO7UZ/6O6Lc9wUJuwoAUyIlzehO2p2ZC3PxSoV05m3Lf99eqo4tOD3KtBU9WYgWBggBoDv8w+J8mBDt+vizSgAmFwqHb4Inv6aYxVa0hu4cpITHxeKRUYbzSwq3KV3N9lQBMBFfRt+5JcV8MaT6QPzE3kqHUa6GsupNC0H54j+2oCEEbNdA1LEMYGx84PBQq+n4toruVwNQtgn4JG5KPwfAH/u7kMxJ5bY96n8oALalGJnE/V7JCmn+Ka5U+wcJYFRc6Y4ImW6r5VJ6YSzuHmIGTguCbxjqw2SwAIbtZfS/AzgUp0SJ9cYp93iM3RKnZn2U6lb8OdwA1sTxPNC5c4YbwPq4nA507iXDDaApjtzfKzxU8kNkNB5Mt6B+7Z8BADmmRtBxI+m+AAAAAElFTkSuQmCC) no-repeat;
background-size: 100% auto;
}
+
+/*# sourceMappingURL=main.2265d699.css.map*/
\ No newline at end of file
diff --git a/boards/default/micropython_esp32c2/styles/main.2265d699.css.map b/boards/default/micropython_esp32c2/styles/main.2265d699.css.map
new file mode 100644
index 00000000..1df534bd
--- /dev/null
+++ b/boards/default/micropython_esp32c2/styles/main.2265d699.css.map
@@ -0,0 +1 @@
+{"version":3,"file":"styles/main.2265d699.css","mappings":";;;AAAA;IACI,4DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,4DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,4DAAkE;IAClE,0BAA0B;AAC9B;AACA;IACI,4DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,4DAAkE;IAClE,0BAA0B;AAC9B;AACA;IACI,4DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,4DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,4DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,4DAAkE;IAClE,0BAA0B;AAC9B;AACA;IACI,4DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,6DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,6DAAmE;IACnE,0BAA0B;AAC9B;AACA;EACE,6DAAmE;EACnE,0BAA0B;AAC5B;AACA;EACE,6DAAoE;EACpE,0BAA0B;AAC5B;AACA;IACI,6DAAkE;IAClE,0BAA0B;AAC9B;AACA;IACI,6DAAmE;IACnE,0BAA0B;AAC9B;AACA;EACE,6DAAiE;EACjE,0BAA0B;AAC5B;AACA;EACE,6DAAkE;EAClE,0BAA0B;AAC5B;AACA;IACI,6DAAiE;IACjE,0BAA0B;AAC9B;AACA;IACI,6DAAkE;IAClE,0BAA0B;AAC9B;AACA;IACI,6DAAkE;IAClE,0BAA0B;AAC9B;AACA;IACI,6DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,6DAAkE;IAClE,0BAA0B;AAC9B;AACA;IACI,6DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,6DAA4E;IAC5E,0BAA0B;AAC9B;AACA;IACI,6DAAyE;IACzE,0BAA0B;AAC9B;AACA;IACI,6DAA8E;IAC9E,0BAA0B;AAC9B;AACA;IACI,6DAA2E;IAC3E,0BAA0B;AAC9B;AACA;IACI,6DAA6E;IAC7E,0BAA0B;AAC9B;AACA;IACI,6DAA0E;IAC1E,0BAA0B;AAC9B;AACA;IACI,6DAAiE;IACjE,0BAA0B;AAC9B;AACA;IACI,6DAAkE;IAClE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAA2E;IAC3E,0BAA0B;AAC9B;AACA;IACI,6DAAyE;IACzE,0BAA0B;AAC9B;AACA;IACI,6DAA6E;IAC7E,0BAA0B;AAC9B;AACA;IACI,6DAA2E;IAC3E,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAA2E;IAC3E,0BAA0B;AAC9B;AACA;IACI,6DAA4E;IAC5E,0BAA0B;AAC9B;AACA;IACI,6DAAkE;IAClE,0BAA0B;AAC9B;AACA;IACI,6DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,6DAAkE;IAClE,0BAA0B;AAC9B;AACA;IACI,6DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,6DAAkE;IAClE,0BAA0B;AAC9B;AACA;IACI,6DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,6DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAkE;IAClE,0BAA0B;AAC9B;AACA;IACI,6DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAAkE;IAClE,0BAA0B;AAC9B;AACA;IACI,6DAAkE;IAClE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAmE;IACnE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAAsE;IACtE,0BAA0B;AAC9B;AACA;IACI,6DAAgE;IAChE,0BAA0B;AAC9B;AACA;IACI,6DAAiE;IACjE,0BAA0B;AAC9B;AACA;IACI,6DAAsE;IACtE,0BAA0B;AAC9B;AACA;IACI,6DAAsE;IACtE,0BAA0B;AAC9B;AACA;IACI,6DAAsE;IACtE,0BAA0B;AAC9B;AACA;IACI,6DAAuE;IACvE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B;AACA;IACI,6DAAoE;IACpE,0BAA0B;AAC9B;AACA;IACI,6DAAqE;IACrE,0BAA0B;AAC9B,C","sources":["webpack://@mixly/micropython-esp32c2/./css/color_esp32c3_mixgocc.css"],"sourcesContent":["div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(1) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/inout.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(1) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/inout2.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(2) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/ctrl.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(2) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/ctrl2.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(3) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/math.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(3) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/math2.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(4) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/logic.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(4) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/logic2.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(5) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/text.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(5) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/text2.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(6) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/list3.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(6) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/list4.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(7) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/tuple.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(7) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/tuple2.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(8) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/dict.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(8) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/dict2.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(9) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/set.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(9) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/set2.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(10) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/var.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(10) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/var2.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(11) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/func.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(11) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/func2.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(12) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/port.png') no-repeat;\n background-size: 100% auto; \n}\ndiv.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(12) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/port2.png') no-repeat;\n background-size: 100% auto; \n}\n#catOnBoardSensor.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/sensor_onboard.png') no-repeat;\n background-size: 100% auto;\n}\n#catOnBoardSensor.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/sensor_new2.png') no-repeat;\n background-size: 100% auto;\n}\n#catOnBoardActuator.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/actuator_onboard.png') no-repeat;\n background-size: 100% auto;\n}\n#catOnBoardActuator.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/actuator_new2.png') no-repeat;\n background-size: 100% auto;\n}\n#catOnBoardDisplay.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/display_onboard.png') no-repeat;\n background-size: 100% auto;\n}\n#catOnBoardDisplay.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/display_new2.png') no-repeat;\n background-size: 100% auto;\n}\n#catME_GO.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/act.png') no-repeat;\n background-size: 100% auto;\n}\n#catME_GO.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/act2.png') no-repeat;\n background-size: 100% auto;\n}\n#catME_G1.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/sensor.png') no-repeat;\n background-size: 100% auto;\n}\n#catME_G1.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/sensor2.png') no-repeat;\n background-size: 100% auto;\n}\n#catCC_G1.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/sensor.png') no-repeat;\n background-size: 100% auto;\n}\n#catCC_G1.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/sensor2.png') no-repeat;\n background-size: 100% auto;\n}\n#catMINI_G2.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/sensor.png') no-repeat;\n background-size: 100% auto;\n}\n#catMINI_G2.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/sensor2.png') no-repeat;\n background-size: 100% auto;\n}\n#catExternSensor.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/sensor_extern.png') no-repeat;\n background-size: 100% auto;\n}\n#catExternSensor.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/sensor_new2.png') no-repeat;\n background-size: 100% auto;\n}\n#catExternActuator.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/actuator_extern.png') no-repeat;\n background-size: 100% auto;\n}\n#catExternActuator.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/actuator_new2.png') no-repeat;\n background-size: 100% auto;\n}\n#catMatrix.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/Matrix.png') no-repeat;\n background-size: 100% auto;\n}\n#catMatrix.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/Matrix2.png') no-repeat;\n background-size: 100% auto;\n}\n#cat4Digitdisplay.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/4Digitdisplay.png') no-repeat;\n background-size: 100% auto;\n}\n#cat4Digitdisplay.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/4Digitdisplay2.png') no-repeat;\n background-size: 100% auto;\n}\n#catLCD.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/oled.png') no-repeat;\n background-size: 100% auto;\n}\n#catLCD.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/oled2.png') no-repeat;\n background-size: 100% auto;\n}\n#catOLED.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/oled.png') no-repeat;\n background-size: 100% auto;\n}\n#catOLED.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/oled2.png') no-repeat;\n background-size: 100% auto;\n}\n#catTFT.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/oled.png') no-repeat;\n background-size: 100% auto;\n}\n#catTFT.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/oled2.png') no-repeat;\n background-size: 100% auto;\n}\n#catAIsensor.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/image.png') no-repeat;\n background-size: 100% auto;\n}\n#catAIsensor.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/image2.png') no-repeat;\n background-size: 100% auto;\n}\n#catAIsensor2.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/image.png') no-repeat;\n background-size: 100% auto;\n}\n#catAIsensor2.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/image2.png') no-repeat;\n background-size: 100% auto;\n}\n#catFile.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/file.png') no-repeat;\n background-size: 100% auto;\n}\n#catFile.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/file2.png') no-repeat;\n background-size: 100% auto;\n}\n#catBLE.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni.png') no-repeat;\n background-size: 100% auto;\n}\n#catBLE.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni2.png') no-repeat;\n background-size: 100% auto;\n}\n#catIR.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni.png') no-repeat;\n background-size: 100% auto;\n}\n#catIR.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni2.png') no-repeat;\n background-size: 100% auto;\n}\n#catI2C.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni.png') no-repeat;\n background-size: 100% auto;\n}\n#catI2C.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni2.png') no-repeat;\n background-size: 100% auto;\n}\n#catSPI.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni.png') no-repeat;\n background-size: 100% auto;\n}\n#catSPI.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni2.png') no-repeat;\n background-size: 100% auto;\n}\n#catRadio.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni.png') no-repeat;\n background-size: 100% auto;\n}\n#catRadio.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni2.png') no-repeat;\n background-size: 100% auto;\n}\n#catOneWire.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni.png') no-repeat;\n background-size: 100% auto;\n}\n#catOneWire.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni2.png') no-repeat;\n background-size: 100% auto;\n}\n#catESPNow.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni.png') no-repeat;\n background-size: 100% auto;\n}\n#catESPNow.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni2.png') no-repeat;\n background-size: 100% auto;\n}\n#catLora.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni.png') no-repeat;\n background-size: 100% auto;\n}\n#catLora.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni2.png') no-repeat;\n background-size: 100% auto;\n}\n#catNetwork.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/net3.png') no-repeat;\n background-size: 100% auto;\n}\n#catNetwork.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/net2.png') no-repeat;\n background-size: 100% auto;\n}\n#catOnenet.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/onenet.png') no-repeat;\n background-size: 100% auto;\n}\n#catOnenet.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/onenet2.png') no-repeat;\n background-size: 100% auto;\n}\n#catBlynk.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/blynk.png') no-repeat;\n background-size: 100% auto;\n}\n#catBlynk.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/blynk2.png') no-repeat;\n background-size: 100% auto;\n}\n#catMixIO.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/mixio.png') no-repeat;\n background-size: 100% auto;\n}\n#catMixIO.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/mixio2.png') no-repeat;\n background-size: 100% auto;\n}\n#catweather.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/weather.png') no-repeat;\n background-size: 100% auto;\n}\n#catweather.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/weather2.png') no-repeat;\n background-size: 100% auto;\n}\n#catAIOT.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/ai.png') no-repeat;\n background-size: 100% auto;\n}\n#catAIOT.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/ai2.png') no-repeat;\n background-size: 100% auto;\n}\n#catFactory.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/factory3.png') no-repeat;\n background-size: 100% auto;\n}\n#catFactory.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/factory4.png') no-repeat;\n background-size: 100% auto;\n}\n#catCommunicate.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/requests.png') no-repeat;\n background-size: 100% auto; \n}\n#catCommunicate.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/requests2.png') no-repeat;\n background-size: 100% auto; \n}\n#catBLEC.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni.png') no-repeat;\n background-size: 100% auto;\n}\n#catBLEC.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni2.png') no-repeat;\n background-size: 100% auto;\n}\n#catBLEKM.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni.png') no-repeat;\n background-size: 100% auto;\n}\n#catBLEKM.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{\n background:url('../../../../common/media/mark/comuni2.png') no-repeat;\n background-size: 100% auto;\n}"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/boards/default_src/micropython/generators/sensor_onboard.js b/boards/default_src/micropython/generators/sensor_onboard.js
index ae9790f6..17b7672b 100644
--- a/boards/default_src/micropython/generators/sensor_onboard.js
+++ b/boards/default_src/micropython/generators/sensor_onboard.js
@@ -587,7 +587,7 @@ export const onboard_RTC_get_time_str = function(_,generator){
export const onboard_RTC_get_timetuple_to_str = function(_,generator){
generator.definitions_['import_rtctime'] = 'import rtctime';
var ct = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
- var code = 'rtctime.strtime(('+ ct +'))';
+ var code = 'rtctime.strtime('+ ct +')';
return [code, generator.ORDER_ATOMIC];
}
diff --git a/boards/default_src/micropython_educore/template.xml b/boards/default_src/micropython_educore/template.xml
index 8e41990e..b014b759 100644
--- a/boards/default_src/micropython_educore/template.xml
+++ b/boards/default_src/micropython_educore/template.xml
@@ -1580,8 +1580,8 @@
-
- 2023,1,1,12,0,0
+
+ 2023,1,1,12,0,0
@@ -1601,8 +1601,8 @@
-
- 2023,1,1,12,0,0
+
+ 2023,1,1,12,0,0
diff --git a/boards/default_src/micropython_esp32/template.xml b/boards/default_src/micropython_esp32/template.xml
index 517d52a1..65af9369 100644
--- a/boards/default_src/micropython_esp32/template.xml
+++ b/boards/default_src/micropython_esp32/template.xml
@@ -1484,8 +1484,8 @@
-
- 2023,1,1,12,0,0
+
+ 2023,1,1,12,0,0
@@ -1505,8 +1505,8 @@
-
- 2023,1,1,12,0,0
+
+ 2023,1,1,12,0,0
diff --git a/boards/default_src/micropython_esp32c2/template.xml b/boards/default_src/micropython_esp32c2/template.xml
index e55ff670..8a21053b 100644
--- a/boards/default_src/micropython_esp32c2/template.xml
+++ b/boards/default_src/micropython_esp32c2/template.xml
@@ -1419,7 +1419,7 @@
- -->
+ -->
@@ -1503,8 +1503,8 @@
-
- 2023,1,1,12,0,0
+
+ 2023,1,1,12,0,0
@@ -1524,8 +1524,8 @@
-
- 2023,1,1,12,0,0
+
+ 2023,1,1,12,0,0
diff --git a/boards/default_src/micropython_esp32c3/template.xml b/boards/default_src/micropython_esp32c3/template.xml
index fb532a12..0c9aa26f 100644
--- a/boards/default_src/micropython_esp32c3/template.xml
+++ b/boards/default_src/micropython_esp32c3/template.xml
@@ -1493,8 +1493,8 @@
-
- 2023,1,1,12,0,0
+
+ 2023,1,1,12,0,0
@@ -1514,8 +1514,8 @@
-
- 2023,1,1,12,0,0
+
+ 2023,1,1,12,0,0
diff --git a/boards/default_src/micropython_esp32s2/template.xml b/boards/default_src/micropython_esp32s2/template.xml
index 22665d03..c33a54df 100644
--- a/boards/default_src/micropython_esp32s2/template.xml
+++ b/boards/default_src/micropython_esp32s2/template.xml
@@ -1459,8 +1459,8 @@
-
- 2023,1,1,12,0,0
+
+ 2023,1,1,12,0,0
@@ -1480,8 +1480,8 @@
-
- 2023,1,1,12,0,0
+
+ 2023,1,1,12,0,0
diff --git a/boards/default_src/micropython_esp32s3/template.xml b/boards/default_src/micropython_esp32s3/template.xml
index abc07c21..0532c898 100644
--- a/boards/default_src/micropython_esp32s3/template.xml
+++ b/boards/default_src/micropython_esp32s3/template.xml
@@ -1513,8 +1513,8 @@
-
- 2023,1,1,12,0,0
+
+ 2023,1,1,12,0,0
@@ -1534,8 +1534,8 @@
-
- 2023,1,1,12,0,0
+
+ 2023,1,1,12,0,0
diff --git a/boards/default_src/python/blocks/tuple.js b/boards/default_src/python/blocks/tuple.js
index 57463b0b..baed2c8d 100644
--- a/boards/default_src/python/blocks/tuple.js
+++ b/boards/default_src/python/blocks/tuple.js
@@ -719,4 +719,15 @@ export const tuple_totuple = {
this.setOutput(true);
this.setTooltip(Blockly.Msg.MIXLY_PYTHON_TOOLTIP_TOTUPLE);
}
+};
+
+export const tuple_input = {
+ init: function () {
+ this.setColour(TUPLE_HUE);
+ this.appendDummyInput("")
+ .appendField('(')
+ .appendField(new Blockly.FieldTextInput('0,0,0'),"CONTENT")
+ .appendField(')');
+ this.setOutput(true);
+ }
};
\ No newline at end of file
diff --git a/boards/default_src/python/generators/tuple.js b/boards/default_src/python/generators/tuple.js
index 1099b374..e745407d 100644
--- a/boards/default_src/python/generators/tuple.js
+++ b/boards/default_src/python/generators/tuple.js
@@ -289,4 +289,10 @@ export const tuple_get_random_item = function (_, generator) {
export const tuple_totuple = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'
return ['tuple(' + str + ')', generator.ORDER_ATOMIC];
+}
+
+export const tuple_input = function (_, generator) {
+ var text = this.getFieldValue('CONTENT');
+ var code = '(' + text + ')';
+ return [code, generator.ORDER_ATOMIC];
}
\ No newline at end of file