From 0ca98a83086d1784bf5a8d0b7a3a063285a62e28 Mon Sep 17 00:00:00 2001 From: Michael Gallagher Date: Wed, 13 May 2026 17:48:43 -0700 Subject: [PATCH 1/3] Update to Blockly 11.2.2 --- appinventor/lib/blockly/blockly_compressed.js | 6 +++--- appinventor/lib/blockly/media/sprites.png | Bin 3449 -> 2595 bytes appinventor/lib/blockly/media/sprites.svg | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/appinventor/lib/blockly/blockly_compressed.js b/appinventor/lib/blockly/blockly_compressed.js index 95cef84031c..bd950fee422 100644 --- a/appinventor/lib/blockly/blockly_compressed.js +++ b/appinventor/lib/blockly/blockly_compressed.js @@ -1292,8 +1292,8 @@ this.svgGroup&&(this.svgGroup.style.opacity=`${b}`);this.lidOpen>this.minOpennes 2)+")")}setMinOpenness(a){this.minOpenness=a;this.isLidOpen||this.setLidAngle(a*MAX_LID_ANGLE$$module$build$src$core$trashcan)}closeLid(){this.setLidOpen(!1)}click(){this.hasContents()&&!this.workspace.isDragging()&&this.openFlyout()}fireUiEvent(a){a=new (get$$module$build$src$core$events$utils(EventType$$module$build$src$core$events$type.TRASHCAN_OPEN))(a,this.workspace.id);fire$$module$build$src$core$events$utils(a)}blockMouseDownWhenOpenable(a){!this.contentsIsOpen()&&this.hasContents()&&a.stopPropagation()}mouseOver(){this.hasContents()&& this.setLidOpen(!0)}mouseOut(){this.setLidOpen(!1)}onDelete(a){if(!(0>=this.workspace.options.maxTrashcanContents||!isBlockDelete$$module$build$src$core$events$predicates(a)||a.wasShadow)){if(!a.oldJson)throw Error("Encountered a delete event without proper oldJson");a=JSON.stringify(this.cleanBlockJson(a.oldJson));if(!this.contents.includes(a)){for(this.contents.unshift(a);this.contents.length>this.workspace.options.maxTrashcanContents;)this.contents.pop();this.setMinOpenness(HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan)}}}cleanBlockJson(a){function b(c){if(c){delete c.id; delete c.x;delete c.y;delete c.enabled;delete c.disabledReasons;if(c.icons&&c.icons.comment){var d=c.icons.comment;delete d.height;delete d.width;delete d.pinned}d=c.inputs;for(var e in d){var f=d[e];const g=f.block;f=f.shadow;g&&b(g);f&&b(f)}c.next&&(e=c.next,c=e.block,e=e.shadow,c&&b(c),e&&b(e))}}a=JSON.parse(JSON.stringify(a));b(a);return Object.assign({},{kind:"BLOCK"},a)}},WIDTH$$module$build$src$core$trashcan=47,BODY_HEIGHT$$module$build$src$core$trashcan=44,LID_HEIGHT$$module$build$src$core$trashcan= -16,MARGIN_VERTICAL$$module$build$src$core$trashcan=20,MARGIN_HORIZONTAL$$module$build$src$core$trashcan=20,MARGIN_HOTSPOT$$module$build$src$core$trashcan=10,SPRITE_LEFT$$module$build$src$core$trashcan=0,SPRITE_TOP$$module$build$src$core$trashcan=32,HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan=.1,ANIMATION_LENGTH$$module$build$src$core$trashcan=80,ANIMATION_FRAMES$$module$build$src$core$trashcan=4,OPACITY_MIN$$module$build$src$core$trashcan=1,OPACITY_MAX$$module$build$src$core$trashcan=1,MAX_LID_ANGLE$$module$build$src$core$trashcan= -45,module$build$src$core$trashcan={};module$build$src$core$trashcan.Trashcan=Trashcan$$module$build$src$core$trashcan;var ShortcutRegistry$$module$build$src$core$shortcut_registry=class{constructor(){this.shortcuts=new Map;this.keyMap=new Map;this.reset()}reset(){this.shortcuts.clear();this.keyMap.clear()}register(a,b){if(this.shortcuts.get(a.name)&&!b)throw Error(`Shortcut named "${a.name}" already exists.`);this.shortcuts.set(a.name,a);b=a.keyCodes;if(null==b?0:b.length)for(const c of b)this.addKeyMapping(c,a.name,!!a.allowCollision)}unregister(a){if(!this.shortcuts.get(a))return console.warn(`Keyboard shortcut named "${a}" not found.`), +16,MARGIN_VERTICAL$$module$build$src$core$trashcan=20,MARGIN_HORIZONTAL$$module$build$src$core$trashcan=20,MARGIN_HOTSPOT$$module$build$src$core$trashcan=10,SPRITE_LEFT$$module$build$src$core$trashcan=0,SPRITE_TOP$$module$build$src$core$trashcan=32,HAS_BLOCKS_LID_ANGLE$$module$build$src$core$trashcan=.1,ANIMATION_LENGTH$$module$build$src$core$trashcan=80,ANIMATION_FRAMES$$module$build$src$core$trashcan=4,OPACITY_MIN$$module$build$src$core$trashcan=.4,OPACITY_MAX$$module$build$src$core$trashcan=.8, +MAX_LID_ANGLE$$module$build$src$core$trashcan=45,module$build$src$core$trashcan={};module$build$src$core$trashcan.Trashcan=Trashcan$$module$build$src$core$trashcan;var ShortcutRegistry$$module$build$src$core$shortcut_registry=class{constructor(){this.shortcuts=new Map;this.keyMap=new Map;this.reset()}reset(){this.shortcuts.clear();this.keyMap.clear()}register(a,b){if(this.shortcuts.get(a.name)&&!b)throw Error(`Shortcut named "${a.name}" already exists.`);this.shortcuts.set(a.name,a);b=a.keyCodes;if(null==b?0:b.length)for(const c of b)this.addKeyMapping(c,a.name,!!a.allowCollision)}unregister(a){if(!this.shortcuts.get(a))return console.warn(`Keyboard shortcut named "${a}" not found.`), !1;this.removeAllKeyMappings(a);this.shortcuts.delete(a);return!0}addKeyMapping(a,b,c){a=`${a}`;const d=this.keyMap.get(a);if(d&&!c)throw Error(`Shortcut named "${b}" collides with shortcuts "${d}"`);d&&c?d.unshift(b):this.keyMap.set(a,[b])}removeKeyMapping(a,b,c){const d=this.keyMap.get(a);if(!d)return c||console.warn(`No keyboard shortcut named "${b}" registered with key code "${a}"`),!1;const e=d.indexOf(b);if(-1>>/handdelete.cur"), auto;\n}\n\n.blocklyToolboxGrab {\n cursor: url("<<>>/handclosed.cur"), auto;\n cursor: grabbing;\n cursor: -webkit-grabbing;\n}\n\n/* Category tree in Toolbox. */\n.blocklyToolboxDiv {\n background-color: #ddd;\n overflow-x: visible;\n overflow-y: auto;\n padding: 4px 0 4px 0;\n position: absolute;\n z-index: 70; /* so blocks go under toolbox when dragging */\n -webkit-tap-highlight-color: transparent; /* issue #1345 */\n}\n\n.blocklyToolboxContents {\n display: flex;\n flex-wrap: wrap;\n flex-direction: column;\n}\n\n.blocklyToolboxContents:focus {\n outline: none;\n}\n'); -register$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX,DEFAULT$$module$build$src$core$registry,Toolbox$$module$build$src$core$toolbox$toolbox);var module$build$src$core$toolbox$toolbox={};module$build$src$core$toolbox$toolbox.Toolbox=Toolbox$$module$build$src$core$toolbox$toolbox;var VERSION$$module$build$src$core$blockly="11.2.2-mit-cml.1",INPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE,OUTPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE,NEXT_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT,PREVIOUS_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT, +register$$module$build$src$core$registry(Type$$module$build$src$core$registry.TOOLBOX,DEFAULT$$module$build$src$core$registry,Toolbox$$module$build$src$core$toolbox$toolbox);var module$build$src$core$toolbox$toolbox={};module$build$src$core$toolbox$toolbox.Toolbox=Toolbox$$module$build$src$core$toolbox$toolbox;var VERSION$$module$build$src$core$blockly="11.2.2",INPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.INPUT_VALUE,OUTPUT_VALUE$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.OUTPUT_VALUE,NEXT_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.NEXT_STATEMENT,PREVIOUS_STATEMENT$$module$build$src$core$blockly=ConnectionType$$module$build$src$core$connection_type.PREVIOUS_STATEMENT, TOOLBOX_AT_TOP$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.TOP,TOOLBOX_AT_BOTTOM$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.BOTTOM,TOOLBOX_AT_LEFT$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.LEFT,TOOLBOX_AT_RIGHT$$module$build$src$core$blockly=Position$$module$build$src$core$utils$toolbox.RIGHT,svgResize$$module$build$src$core$blockly=svgResize$$module$build$src$core$common,getMainWorkspace$$module$build$src$core$blockly= getMainWorkspace$$module$build$src$core$common,getSelected$$module$build$src$core$blockly=getSelected$$module$build$src$core$common,defineBlocksWithJsonArray$$module$build$src$core$blockly=defineBlocksWithJsonArray$$module$build$src$core$common,setParentContainer$$module$build$src$core$blockly=setParentContainer$$module$build$src$core$common,COLLAPSE_CHARS$$module$build$src$core$blockly=COLLAPSE_CHARS$$module$build$src$core$internal_constants,OPPOSITE_TYPE$$module$build$src$core$blockly=OPPOSITE_TYPE$$module$build$src$core$internal_constants, RENAME_VARIABLE_ID$$module$build$src$core$blockly=RENAME_VARIABLE_ID$$module$build$src$core$internal_constants,DELETE_VARIABLE_ID$$module$build$src$core$blockly=DELETE_VARIABLE_ID$$module$build$src$core$internal_constants,COLLAPSED_INPUT_NAME$$module$build$src$core$blockly=COLLAPSED_INPUT_NAME$$module$build$src$core$constants,COLLAPSED_FIELD_NAME$$module$build$src$core$blockly=COLLAPSED_FIELD_NAME$$module$build$src$core$constants,VARIABLE_CATEGORY_NAME$$module$build$src$core$blockly=CATEGORY_NAME$$module$build$src$core$variables, diff --git a/appinventor/lib/blockly/media/sprites.png b/appinventor/lib/blockly/media/sprites.png index 34878094cbd7bbd5c94f5e89ddc6666dfa496168..20aadb6c4c31f4a46f0a3316241788687c2fc444 100644 GIT binary patch literal 2595 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 literal 3449 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 O_zLt5Cf9gxN&5#E8)~iq diff --git a/appinventor/lib/blockly/media/sprites.svg b/appinventor/lib/blockly/media/sprites.svg index aa78ff742ea..3f09ef3a4d6 100644 --- a/appinventor/lib/blockly/media/sprites.svg +++ b/appinventor/lib/blockly/media/sprites.svg @@ -18,16 +18,16 @@ text-anchor: middle; } .trash { - fill: #000; + fill: #888; } .zoom { fill: none; - stroke: #000; + stroke: #888; stroke-width: 2; stroke-linecap: round; } .zoom>.center { - fill: #000; + fill: #888; stroke-width: 0; } From 8d625724f02a48e5a3e3176f3eb49eb8ed97bbfb Mon Sep 17 00:00:00 2001 From: Michael Gallagher Date: Wed, 13 May 2026 18:17:08 -0700 Subject: [PATCH 2/3] fix: Address control color and opacity concerns https://github.com/mit-cml/blockly/commit/10f9d92f58c6449ef704cfe42bd34537a1a7a0bd --- appinventor/blocklyeditor/src/blocklyeditor.js | 1 + 1 file changed, 1 insertion(+) diff --git a/appinventor/blocklyeditor/src/blocklyeditor.js b/appinventor/blocklyeditor/src/blocklyeditor.js index 5bf41b8cc90..18375d4f97f 100644 --- a/appinventor/blocklyeditor/src/blocklyeditor.js +++ b/appinventor/blocklyeditor/src/blocklyeditor.js @@ -968,6 +968,7 @@ Blockly.BlocklyEditor['create'] = function(container, formName, readOnly, rtl) { .blocklyZoom:hover, .blocklyTrash:hover, .blocklyMultiselect:hover { cursor: pointer; } .blocklyZoom>image, .blocklyZoom>image:hover { opacity: 1.0; } .blocklyMultiselect>image, .blocklyMultiselect>image:hover { opacity: 1.0; } +.blocklyTrash { opacity: 1.0 !important; } `); } catch (e) { // Thrown if we've already registered the CSS. This should only happen in unit tests. From 7f07ec8d3fd9a2efbb720b747a722012015d94c9 Mon Sep 17 00:00:00 2001 From: Michael Gallagher Date: Wed, 13 May 2026 18:19:05 -0700 Subject: [PATCH 3/3] Implement dark mode theme https://github.com/mit-cml/blockly/commit/8742269b4ae31f2e17455e50ed2b41e430b8077b https://github.com/mit-cml/appinventor-sources/commit/0048cfad4b4decca90d556692cb7782e1f1b3e6b --- appinventor/appengine/build.xml | 2 ++ appinventor/blocklyeditor/media/sprites.png | Bin 0 -> 3449 bytes 2 files changed, 2 insertions(+) create mode 100644 appinventor/blocklyeditor/media/sprites.png diff --git a/appinventor/appengine/build.xml b/appinventor/appengine/build.xml index 89e5d0bfebe..935c72a4882 100644 --- a/appinventor/appengine/build.xml +++ b/appinventor/appengine/build.xml @@ -155,6 +155,8 @@ + + diff --git a/appinventor/blocklyeditor/media/sprites.png b/appinventor/blocklyeditor/media/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..34878094cbd7bbd5c94f5e89ddc6666dfa496168 GIT binary patch literal 3449 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 O_zLt5Cf9gxN&5#E8)~iq literal 0 HcmV?d00001