Blockly v10 is here! This quarter we’ve edged closer to 100% TypeScript in the core repo: blocks have been converted and generators are not far behind. We’ve also improved performance in multiple scenarios and added APIs to customize Blockly in new ways.
Here are the highlights for this release:
- Added ability to use custom Icons. This included some refactoring and breaking changes to the old APIs; read more in the PRs below.
- Removed the drag surfaces! This greatly improves performance in Chrome. No action needed unless you were doing something special with the drag surfaces (which is rare)
- Removed the debug renderer, which was previously deprecated and moved to the dev-tools plugin
- Changes to generators. Most of the changes were backwards compatible, but if you use Blockly through script tags, be aware that we've added new global variables under the names
javascript
,python
, etc. which may conflict with global variables already in your app. Read more in the linked PRs below. - Added support for custom inputs
- Improved rendering performance and added hooks for managing the render lifecycle
- Improved types for those using TypeScript
What's Changed
Breaking changes 🛠
- feat!: add abstract icon class by @BeksOmega in #7060
- refactor!: remove deprecated functionality for v10 by @rachel-fenichel in #7077
- refactor!: delete debug renderer by @rachel-fenichel in #7078
- fix!: re-remove block and workspace drag surfaces by @BeksOmega in #7070
- feat!: bubble ownership by @BeksOmega in #7071
- fix!: move destroy earlier in the lifecycle by @BeksOmega in #7117
- fix!: refactor warning icon by @BeksOmega in #7112
- fix!: refactor comment icon by @BeksOmega in #7128
- fix!: refactor mutator icon by @BeksOmega in #7115
- refactor(generators)!:
CodeGenerator
per-block-type generator function dictionary by @cpcallen in #7150 - refactor(generators)!: Pass
this
CodeGenerator
to individual generator functions by @cpcallen in #7168 - refactor(build)!: Provide all generator exports when loaded as script by @cpcallen in #7169
Deprecations 🧹 - APIs that may be removed in future releases
- refactor(generators): Introduce
JavascriptGenerator
class,Order
enum by @cpcallen in #7153 - fix: remove old icon handling code by @BeksOmega in #7141
- refactor(generators): Introduce
DartGenerator
class,Order
enum by @cpcallen in #7160 - refactor(generators): Introduce
PythonGenerator
class,Order
enum by @cpcallen in #7163 - refactor(generators): Introduce
PhpGenerator
class,Order
enum by @cpcallen in #7162 - refactor(generators): Introduce
LuaGenerator
class,Order
enum by @cpcallen in #7161 - fix: input exports by @BeksOmega in #7165
New features ✨
- feat: add after queued renders promises to render management by @BeksOmega in #6981
- feat: add support for appending custom inputs by @BeksOmega in #6990
- feat: Add 'reason' field to move event by @NeilFraser in #6996
- feat: break input types into separate classes by @BeksOmega in #7019
- feat: add IIcon interface, and related interfaces by @BeksOmega in #7054
- feat: Creating structure and providing simple test for Blockly automated functional test by @ericblackmonGoogle in #7076
- feat: add implementations for adding, removing, and getting icons by @BeksOmega in #7059
- feat: text bubble by @BeksOmega in #7080
- feat: add registering and serializing icons by @BeksOmega in #7063
- feat: mini workspace bubble by @BeksOmega in #7096
- feat: text input bubble by @BeksOmega in #7089
- feat: add types for accessing icons. by @BeksOmega in #7132
- feat: use new intermediate block change event for field edits, normal block change event for closing editor. #7105 by @johnnesky in #7151
Bug fixes 🐛
- fix: allow splicing into shadow block stacks by @maribethb in #6939
- fix: remove forced rerender from mutator by @BeksOmega in #6918
- fix: collapsed toolbox categories being expanded by @BeksOmega in #6942
- fix: disposing during dragging by @BeksOmega in #6954
- fix: Fix offset location of connection ripple by @NeilFraser in #6973
- fix: Don't truncate text label fields. by @NeilFraser in #6979
- fix: do not hide chaff when resizing by @maribethb in #6916
- fix: non-printable characters in XML by @BeksOmega in #6952
- fix: block_svg disable/enable ops lead to unsync state and render by @dimaaan21 in #6989
- fix: rtl field alignment by @maribethb in #6991
- fix: insertion markers firing move events by @BeksOmega in #7005
- fix: update applyColour documentation by @maribethb in #6998
- fix: icons not having their locations updated by @BeksOmega in #7012
- fix: Update category.ts to produce valid "aria-level" attributes by @MarkusBordihn in #7033
- fix: switch most remaining render calls to queueRender by @BeksOmega in #7024
- fix: filter undone event groups before moving them to the redo stack by @ewpatton in #7069
- fix: Make props of ConnectionState optional by @m93a in #7093
- fix: bubbles not being dragged by @BeksOmega in #7088
- fix: work on calling icon hooks by @BeksOmega in #7100
- fix: gestures handling icons by @BeksOmega in #7101
- fix: collapsing blocks with children with icons by @BeksOmega in #7111
- fix: updating icon locations by @BeksOmega in #7110
- fix: return annotations by @BeksOmega in #7118
- fix: have inputs construct connections by @BeksOmega in #7116
- fix(build): Fix path issue on Windows by @cpcallen in #7127
- fix: Allow for unattached elements during inject call by @ewpatton in #7149
- fix: remove input type from number field by @maribethb in #7025
- fix: update disabled status after rendering by @maribethb in #7172
- fix: icon exports by @BeksOmega in #7159
- fix(tests): Fix compressed mode loading by @cpcallen in #7178
- fix(build): Fix GitHub pages & deployment task by @cpcallen in #7186
- fix: bubble exports by @BeksOmega in #7189
- fix(blocks): Mark previously-
@private
methods@internal
by @cpcallen in #7194 - fix(build): Correct typos in PR #7169 by @cpcallen in #7197
- fix: properly pass the block to the icon constructor in blockfactory blocks by @BeksOmega in #7202
- fix: Utilize getIcon instead of getCommentIcon in tests by @jibranabsarulislam in #7200
- fix: export the IIcon and related interfaces by @BeksOmega in #7203
- fix(demos): Update BlockFactory generator stub generator by @cpcallen in #7211
- fix(demos): Update code demo to use new script import names for generators by @cpcallen in #7213
Cleanup ♻️
- refactor: Remove some more uses of AnyDuringMigration. by @gonfunko in #6970
- refactor(blocks): Migrate
blocks/lists.js
to TypeScript by @cpcallen in #6902 - refactor(blocks): Migrate
blocks/loops.js
to TypeScript by @rachel-fenichel in #6957 - refactor(blocks): Migrate
blocks/variables.js
andblocks/variables_dynamic.js
to TypeScript by @rachel-fenichel in #7001 - refactor(blocks): Migrate
blocks/text.js
to TypeScript by @rachel-fenichel in #6958 - refactor(tests): Update
bootstrap.js
to better support generator chunks by @cpcallen in #7171 - refactor(blocks): Migrate
blocks/logic.js
to TypeScript by @cpcallen in #7003 - refactor(generators): Restructure generator modules to contain side effects by @cpcallen in #7173
- refactor(blocks): Migrate
blocks/procedures.js
to TypeScript by @cpcallen in #7192 - refactor(blocks): Migrate
blocks/blocks.js
to TypeScript by @cpcallen in #7193 - refactor(tests): Migrate mocha tests from
goog.require
toimport
by @cpcallen in #7196
Other changes
- test: icon block hooks by @BeksOmega in #7053
- Revert "chore!: remove angle field from core" by @BeksOmega in #7158
- Fix: Update browser test to run manually, and move browser test suiteSetup in to a separate function by @ericblackmonGoogle in #7138
- release: v10.0.0 by @ericblackmonGoogle in #7222
New Contributors
- @dimaaan21 made their first contribution in #6989
- @ericblackmonGoogle made their first contribution in #7076
- @m93a made their first contribution in #7093
- @johnnesky made their first contribution in #7151
- @jibranabsarulislam made their first contribution in #7200
Full Changelog: blockly-v9.3.3...blockly-v10.0.0