diff --git a/package.json b/package.json index e9d9c6e..a3bffb0 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "@fortawesome/free-solid-svg-icons": "^6.5.2", "@leaphy-robotics/avrdude-webassembly": "^1.6.1", "@leaphy-robotics/dfu-util-wasm": "^1.0.2", - "@leaphy-robotics/leaphy-blocks": "3.0.4", + "@leaphy-robotics/leaphy-blocks": "3.1.0", "@leaphy-robotics/picotool-wasm": "1.0.3", "@leaphy-robotics/webusb-ftdi": "1.0.1", "@sentry/svelte": "8.0.0-beta.5", diff --git a/src/lib/domain/blockly/blockly.ts b/src/lib/domain/blockly/blockly.ts index 98e3a7b..a1c6834 100644 --- a/src/lib/domain/blockly/blockly.ts +++ b/src/lib/domain/blockly/blockly.ts @@ -8,11 +8,12 @@ import { popups } from "$state/popup.svelte"; import { BackpackChange } from "@blockly/workspace-backpack"; import { CATEGORIES, - EXTENSIONS, + ProcedureSerializer, blocks, + registerExtensions, translations, } from "@leaphy-robotics/leaphy-blocks"; -import { type WorkspaceSvg, serialization } from "blockly"; +import { serialization } from "blockly"; import type { Workspace } from "blockly"; import type { CategoryInfo, @@ -42,22 +43,13 @@ Blockly.registry.register( "lists", new CATEGORIES.ListSerializer(), ); - -Blockly.Extensions.register( - "appendStatementInputStack", - EXTENSIONS.APPEND_STATEMENT_INPUT_STACK, -); -Blockly.Extensions.register( - "list_select_extension", - EXTENSIONS.LIST_SELECT_EXTENSION, +Blockly.registry.register( + Blockly.registry.Type.SERIALIZER, + "procedures", + new ProcedureSerializer(), ); -Blockly.Extensions.registerMutator( - "l_controls_if_mutator", - EXTENSIONS.CONTROLS_IF_MUTATOR_MIXIN, - null as unknown as undefined, // TODO(#6920) - ["controls_if_elseif", "controls_if_else"], -); +registerExtensions(Blockly); Blockly.dialog.setPrompt(async (_, defaultValue, callback) => { const name = await popups.open({ diff --git a/src/lib/domain/blockly/theme.ts b/src/lib/domain/blockly/theme.ts index 54dd7e4..224bc9c 100644 --- a/src/lib/domain/blockly/theme.ts +++ b/src/lib/domain/blockly/theme.ts @@ -4,6 +4,7 @@ export const dark = Theme.defineTheme("leaphy-dark", { name: "leaphy-dark", blockStyles: { leaphy_blocks: { colourPrimary: "#066c80", hat: "cap" }, + mesh_blocks: { colourPrimary: "#009999" }, loop_blocks: { colourPrimary: "#69530d" }, math_blocks: { colourPrimary: "#45662a" }, text_blocks: { colourPrimary: "#45662a" }, @@ -15,6 +16,7 @@ export const dark = Theme.defineTheme("leaphy-dark", { categoryStyles: { leaphy_category: { colour: "#066c80" }, + mesh_category: { colour: "#009999" }, situation_category: { colour: "#69530d" }, numbers_category: { colour: "#45662a" }, variables_category: { colour: "#87451a" }, @@ -34,6 +36,7 @@ export const dark = Theme.defineTheme("leaphy-dark", { export const light = Theme.defineTheme("leaphy-light", { blockStyles: { leaphy_blocks: { colourPrimary: "#06778f", hat: "cap" }, + mesh_blocks: { colourPrimary: "#009999" }, loop_blocks: { colourPrimary: "#D9B53F" }, math_blocks: { colourPrimary: "#75B342" }, text_blocks: { colourPrimary: "#75B342" }, @@ -50,6 +53,7 @@ export const light = Theme.defineTheme("leaphy-light", { variables_category: { colour: "#DE7C3B" }, lists_category: { colour: "#a500cf" }, functions_category: { colour: "#4095CE" }, + mesh_category: { colour: "#009999" }, }, componentStyles: { toolboxBackgroundColour: "#343444", diff --git a/src/lib/domain/blockly/toolbox.ts b/src/lib/domain/blockly/toolbox.ts index f7535bc..a28899e 100644 --- a/src/lib/domain/blockly/toolbox.ts +++ b/src/lib/domain/blockly/toolbox.ts @@ -321,6 +321,49 @@ export default [ ], ], }, + { + name: "Mesh", + style: "mesh_category", + id: "l_mesh", + robots: [RobotType.L_NANO_ESP32, RobotType.L_ORIGINAL_NANO_ESP32], + groups: [ + [ + { + type: "mesh_setup", + inputs: { + NAME: text("Leaphy Mesh"), + }, + }, + { + type: "mesh_update", + }, + ], + [ + { + type: "mesh_on_connection", + }, + ], + [ + { + type: "mesh_add_procedure", + }, + { + type: "mesh_call_procedure", + inputs: { + TO: { shadow: { type: "mesh_client" } }, + }, + }, + { + type: "mesh_call_procedure_all", + }, + ], + [ + { + type: "mesh_client", + }, + ], + ], + }, { name: "%{BKY_LEAPHY_FLITZ_CATEGORY}", style: "leaphy_category", diff --git a/src/lib/domain/robots.ts b/src/lib/domain/robots.ts index 032ffd0..7506213 100644 --- a/src/lib/domain/robots.ts +++ b/src/lib/domain/robots.ts @@ -159,6 +159,8 @@ export const robotListing: Robot[][] = [ libraries: DEFAULT_LIBRARIES.concat([ "QMC5883LCompass", "Arduino_APDS9960", + "Painless Mesh", + "AsyncTCP", ]), icon: originalIcon, background: originalNanoESP32Background, @@ -215,6 +217,8 @@ export const robotListing: Robot[][] = [ libraries: DEFAULT_LIBRARIES.concat([ "QMC5883LCompass", "Arduino_APDS9960", + "Painless Mesh", + "AsyncTCP", ]), icon: nanoIcon, }, diff --git a/tests/blink_example.spec.ts b/tests/blink_example.spec.ts index f250b52..01cfdc0 100644 --- a/tests/blink_example.spec.ts +++ b/tests/blink_example.spec.ts @@ -1,4 +1,4 @@ -import consumers from "node:stream/consumers"; +import * as consumers from "node:stream/consumers"; import { expect, test } from "@playwright/test"; import { goToHomePage, openExample } from "./utils"; @@ -14,7 +14,7 @@ test("Load Blink example and check code", async ({ page }) => { // Check code await expect(page.locator(".view-lines")).toContainText( - "digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000);", // check the important part about blink + "digitalWrite(13, true); delay(1000); digitalWrite(13, false); delay(1000);", // check the important part about blink ); // Modify delay to 500 @@ -25,7 +25,7 @@ test("Load Blink example and check code", async ({ page }) => { // Check that the delays have been updated accordingly await expect(page.locator(".view-lines")).toContainText( - "delay(500); digitalWrite(13, LOW); delay(500);", + "delay(500); digitalWrite(13, false); delay(500);", ); // Save the robot diff --git a/yarn.lock b/yarn.lock index 599f2c9..0acd118 100644 --- a/yarn.lock +++ b/yarn.lock @@ -604,10 +604,10 @@ resolved "https://registry.yarnpkg.com/@leaphy-robotics/dfu-util-wasm/-/dfu-util-wasm-1.0.2.tgz#29afcc01266655e1c7b5da0eeceb0ead48c86fd7" integrity sha512-lvS+tJFO049b4ERYKX0HcoUtnQv76A1z9sZrAvbs7s3bvdMW0BObKmktZeJ7emcp3lU/+OJWsD2h0EY5rnkiNg== -"@leaphy-robotics/leaphy-blocks@3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@leaphy-robotics/leaphy-blocks/-/leaphy-blocks-3.0.4.tgz#3393c2f899416eed811a5680a13327a9c689a087" - integrity sha512-fkKbiPhjjl8oadI571PQ5CzjTSzIX3HmIs0veeEkYzyS8ssRIkXBpAhfnkz1F7X3yxT3odLlyknXXu6iPjjb7g== +"@leaphy-robotics/leaphy-blocks@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@leaphy-robotics/leaphy-blocks/-/leaphy-blocks-3.1.0.tgz#42402b9f76617c127607babc1945afa613e3ca06" + integrity sha512-FSyuY91gJKudltMHJlHfDHfz/VImAzKpn56bbbQrNra78EO+fatZGWsqqfcfI9TLpv0++vBvb6YyXmpTfkHRvQ== dependencies: blockly "^10.4.3"